diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 28c5a82f859..fd8b2e6cdf7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,9 +14,9 @@ on: workflow_dispatch: env: - BYOND_MAJOR: "514" - BYOND_MINOR: "1575" - SPACEMAN_DMM_VERSION: suite-1.7.2 + BYOND_MAJOR: "515" + BYOND_MINOR: "1633" + SPACEMAN_DMM_VERSION: suite-1.8 jobs: DreamChecker: diff --git a/.gitignore b/.gitignore index 6204861a5c9..1145d4aa0e1 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ lib/*.so # python *.pyc __pycache__ +/maps/outreach/backup diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index e8842e81f24..d11cc95810b 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -27,7 +27,7 @@ if (Datum.is_processing) {\ PRINT_STACK_TRACE("Failed to start processing. [log_info_line(Datum)] is already being processed by [Datum.is_processing] but queue attempt occured on [#Processor]."); \ }\ } else {\ - Datum.is_processing = #Processor;\ + Datum.is_processing = Processor._internal_name;\ Processor.processing += Datum;\ } @@ -125,6 +125,9 @@ if(Datum.is_processing) {\ NEW_SS_GLOBAL(SS##X);\ PreInit();\ }\ +/datum/controller/subsystem/##X{\ + _internal_name = "SS" + #X;\ +}\ /datum/controller/subsystem/##X #define PROCESSING_SUBSYSTEM_DEF(X) var/global/datum/controller/subsystem/processing/##X/SS##X;\ @@ -137,4 +140,5 @@ if(Datum.is_processing) {\ processing = SS##X.processing; \ }\ }\ -/datum/controller/subsystem/processing/##X +/datum/controller/subsystem/processing/##X/_internal_name = "SS" + #X;\ +/datum/controller/subsystem/processing/##X \ No newline at end of file diff --git a/code/__defines/ZAS.dm b/code/__defines/ZAS.dm index 166e23560b9..9564643bee1 100644 --- a/code/__defines/ZAS.dm +++ b/code/__defines/ZAS.dm @@ -40,12 +40,28 @@ #define TURF_HAS_VALID_ZONE(T) (isturf(T) && T:zone && !T:zone:invalid) #define SHOULD_PARTICIPATE_IN_ZONES(T) (isturf(T) && T:zone_membership_candidate && (!T:external_atmosphere_participation || !T:is_outside())) +#define ATMOS_CANPASS_MOVABLE(ret, AM, TARG_TURF) \ + switch (AM.atmos_canpass) { \ + if (CANPASS_ALWAYS) { } \ + if (CANPASS_DENSITY) { \ + if (AM.density) { \ + ret |= AIR_BLOCKED; \ + } \ + } \ + if (CANPASS_PROC) { \ + ret |= (AIR_BLOCKED * !AM.CanPass(null, TARG_TURF, 0, 0)) | (ZONE_BLOCKED * !AM.CanPass(null, TARG_TURF, 1.5, 1)); \ + } \ + if (CANPASS_NEVER) { \ + ret = BLOCKED; \ + } \ + } + #ifdef MULTIZAS var/global/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN) var/global/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN) -#define ATMOS_CANPASS_TURF(ret,A,B) \ +#define ATMOS_CANPASS_TURF(ret, A, B) \ if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \ ret = BLOCKED; \ } \ @@ -64,22 +80,7 @@ var/global/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN) ret = 0;\ for (var/thing in A) { \ var/atom/movable/AM = thing; \ - switch (AM.atmos_canpass) { \ - if (CANPASS_ALWAYS) { \ - continue; \ - } \ - if (CANPASS_DENSITY) { \ - if (AM.density) { \ - ret |= AIR_BLOCKED; \ - } \ - } \ - if (CANPASS_PROC) { \ - ret |= (AIR_BLOCKED * !AM.CanPass(null, B, 0, 0)) | (ZONE_BLOCKED * !AM.CanPass(null, B, 1.5, 1)); \ - } \ - if (CANPASS_NEVER) { \ - ret = BLOCKED; \ - } \ - } \ + ATMOS_CANPASS_MOVABLE(ret, AM, B); \ if (ret == BLOCKED) { \ break;\ }\ @@ -90,7 +91,7 @@ var/global/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN) var/global/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) var/global/list/gzn_check = list(NORTH, SOUTH, EAST, WEST) -#define ATMOS_CANPASS_TURF(ret,A,B) \ +#define ATMOS_CANPASS_TURF(ret, A, B) \ if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \ ret = BLOCKED; \ } \ @@ -101,22 +102,7 @@ var/global/list/gzn_check = list(NORTH, SOUTH, EAST, WEST) ret = 0;\ for (var/thing in A) { \ var/atom/movable/AM = thing; \ - switch (AM.atmos_canpass) { \ - if (CANPASS_ALWAYS) { \ - continue; \ - } \ - if (CANPASS_DENSITY) { \ - if (AM.density) { \ - ret |= AIR_BLOCKED; \ - } \ - } \ - if (CANPASS_PROC) { \ - ret |= (AIR_BLOCKED * !AM.CanPass(null, B, 0, 0)) | (ZONE_BLOCKED * !AM.CanPass(null, B, 1.5, 1)); \ - } \ - if (CANPASS_NEVER) { \ - ret = BLOCKED; \ - } \ - } \ + ATMOS_CANPASS_MOVABLE(ret, AM, B); \ if (ret == BLOCKED) { \ break;\ }\ diff --git a/code/__defines/_byond_version_compat.dm b/code/__defines/_byond_version_compat.dm new file mode 100644 index 00000000000..72ad8942ae7 --- /dev/null +++ b/code/__defines/_byond_version_compat.dm @@ -0,0 +1,47 @@ +#define REQUIRED_DM_VERSION 514 + +#if DM_VERSION < REQUIRED_DM_VERSION +#warn Nebula is not tested on BYOND versions older than 514. The code may not compile, and if it does compile it may have severe problems. +#endif + +// 515 split call for external libraries into call_ext +#if DM_VERSION < 515 +#define LIBCALL call +#else +#define LIBCALL call_ext +#endif + +// So we want to have compile time guarantees these methods exist on local type, unfortunately 515 killed the .proc/procname and .verb/verbname syntax so we have to use nameof() +// For the record: GLOBAL_VERB_REF would be useless as verbs can't be global. + +#if DM_VERSION < 515 + +/// Call by name proc references, checks if the proc exists on either this type or as a global proc. +#define PROC_REF(X) (.proc/##X) +/// Call by name verb references, checks if the verb exists on either this type or as a global verb. +#define VERB_REF(X) (.verb/##X) + +/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc +#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X) +/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb +#define TYPE_VERB_REF(TYPE, X) (##TYPE.verb/##X) + +/// Call by name proc reference, checks if the proc is an existing global proc +#define GLOBAL_PROC_REF(X) (/proc/##X) + +#else + +/// Call by name proc references, checks if the proc exists on either this type or as a global proc. +#define PROC_REF(X) (nameof(.proc/##X)) +/// Call by name verb references, checks if the verb exists on either this type or as a global verb. +#define VERB_REF(X) (nameof(.verb/##X)) + +/// Call by name proc reference, checks if the proc exists on either the given type or as a global proc +#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X)) +/// Call by name verb reference, checks if the verb exists on either the given type or as a global verb +#define TYPE_VERB_REF(TYPE, X) (nameof(##TYPE.verb/##X)) + +/// Call by name proc reference, checks if the proc is an existing global proc +#define GLOBAL_PROC_REF(X) (/proc/##X) + +#endif \ No newline at end of file diff --git a/code/__defines/_compile_options.dm b/code/__defines/_compile_options.dm index a4788ec0da6..5aa365c9f32 100644 --- a/code/__defines/_compile_options.dm +++ b/code/__defines/_compile_options.dm @@ -2,8 +2,5 @@ // 1 will enable set background. 0 will disable set background. #define BACKGROUND_ENABLED 0 -#define REQUIRED_DM_VERSION 514 - -#if DM_VERSION < REQUIRED_DM_VERSION -#warn Nebula is not tested on BYOND versions older than 514. The code may not compile, and if it does compile it may have severe problems. -#endif +///If set, the persistence SS implementation on nebula is disabled and gutted out. +#define NO_NEB_PERSISTENCE 1 \ No newline at end of file diff --git a/mods/persistence/__defines/area_saving.dm b/code/__defines/area_saving.dm similarity index 100% rename from mods/persistence/__defines/area_saving.dm rename to code/__defines/area_saving.dm diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm index 7ce8d341d2b..8e3571542fd 100644 --- a/code/__defines/atmos.dm +++ b/code/__defines/atmos.dm @@ -97,3 +97,27 @@ #define ATMOSTANK_HYDROGEN MOLES_IN(50000, CELL_VOLUME, T20C) #define ATMOSTANK_HYDROGEN_FUEL MOLES_IN(25000, CELL_VOLUME, T20C) #define ATMOSTANK_NITROUSOXIDE MOLES_IN(10000, CELL_VOLUME, T20C) // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters? +///////////////////////////////////////// +//Vent Pressure Check Flags +///////////////////////////////////////// + +/// If set, the vent will check the external pressure bound value it has before pumping/siphoning gas to/from the environment +#define VENT_PRESSURE_CHECK_FLAG_EXTERNAL BITFLAG(1) +/// If set, the vent will check the internal vent's pressure bound value it has before pumping/siphoning gas to/from the environment +#define VENT_PRESSURE_CHECK_FLAG_INTERNAL BITFLAG(2) +/// The default pressure check flag value for vents +#define VENT_PRESSURE_CHECK_FLAG_DEFAULT VENT_PRESSURE_CHECK_FLAG_EXTERNAL + +///////////////////////////////////////// +//Vent Default Pressure Bounds +///////////////////////////////////////// + +/// The pressure inside the vent at which it will stop pumping gas into the environment by default. +#define VENT_DEFAULT_INTERNAL_PRESSURE_PUMP 0 +/// The pressure inside the vent at which it will stop siphoning gas from the environment by default. +#define VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON MAX_PUMP_PRESSURE + +/// The pressure in the environment of a vent at which it will stop pumping gas by default. +#define VENT_DEFAULT_EXTERNAL_PRESSURE_PUMP ONE_ATMOSPHERE +/// The pressure in the environment of a vent at which it will stop siphoning gas from by default. +#define VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON 0 diff --git a/code/__defines/bodytype.dm b/code/__defines/bodytype.dm index cd09f120864..1cf9f3ddbc1 100644 --- a/code/__defines/bodytype.dm +++ b/code/__defines/bodytype.dm @@ -8,11 +8,9 @@ // Bodytype appearance flags #define HAS_SKIN_TONE_NORMAL BITFLAG(0) // Skin tone selectable in chargen for baseline humans (0-220) -#define HAS_SKIN_COLOR BITFLAG(1) // Skin colour selectable in chargen. (RGB) -#define HAS_LIPS BITFLAG(2) // Lips are drawn onto the mob icon. (lipstick) +#define HAS_SKIN_COLOR BITFLAG(1) // Skin color selectable in chargen. (RGB) #define HAS_UNDERWEAR BITFLAG(3) // Underwear is drawn onto the mob icon. -#define HAS_EYE_COLOR BITFLAG(4) // Eye colour selectable in chargen. (RGB) -#define HAS_HAIR_COLOR BITFLAG(5) // Hair colour selectable in chargen. (RGB) +#define HAS_EYE_COLOR BITFLAG(4) // Eye color selectable in chargen. (RGB) #define RADIATION_GLOWS BITFLAG(6) // Radiation causes this character to glow. #define HAS_SKIN_TONE_GRAV BITFLAG(7) // Skin tone selectable in chargen for grav-adapted humans (0-100) #define HAS_SKIN_TONE_SPCR BITFLAG(8) // Skin tone selectable in chargen for spacer humans (0-165) diff --git a/code/__defines/chargen.dm b/code/__defines/chargen.dm new file mode 100644 index 00000000000..c264a97959f --- /dev/null +++ b/code/__defines/chargen.dm @@ -0,0 +1,11 @@ +//Some helpers for passing chargen state around +///Chargen state for minds of entities that do not go through chargen. Prevents skipping save on potentially desired saved entities. +#define CHARGEN_STATE_NONE -1 +///Chargen state for new characters going through the character generator. This indicates the origins form was not completed yet. +#define CHARGEN_STATE_FORM_INCOMPLETE 0 +///Chargen state for new characters going through the character generator. This indicates the origins form was filled and submitted. +#define CHARGEN_STATE_FORM_COMPLETE 1 +///Chargen state for new characters going through the character generator. This indicates the character is in the spawn pod and is waiting to be moved to spawn. +#define CHARGEN_STATE_AWAITING_SPAWN 2 +///Chargen state for new characters going through the character generator. This indicates the character was spawned in the world and chargen is completed. +#define CHARGEN_STATE_FINALIZED 3 \ No newline at end of file diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index ea0ee8803cf..69ff2142d55 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -57,10 +57,13 @@ #define REAGENT_VOLUME(REAGENT_HOLDER, REAGENT_TYPE) (REAGENT_HOLDER?.reagent_volumes && REAGENT_HOLDER.reagent_volumes[REAGENT_TYPE]) #define REAGENT_DATA(REAGENT_HOLDER, REAGENT_TYPE) (REAGENT_HOLDER?.reagent_data && REAGENT_HOLDER.reagent_data[REAGENT_TYPE]) -#define MAT_SOLVENT_NONE 0 -#define MAT_SOLVENT_MILD 1 -#define MAT_SOLVENT_MODERATE 2 -#define MAT_SOLVENT_STRONG 3 +#define MAT_SOLVENT_NONE 0 +#define MAT_SOLVENT_MILD 1 +#define MAT_SOLVENT_MODERATE 2 +#define MAT_SOLVENT_STRONG 3 +#define MAT_SOLVENT_VERY_STRONG 7 +#define MAT_SOLVENT_STRONGEST 10 +#define MAT_SOLVENT_IMMUNE INFINITY #define DIRTINESS_DECONTAMINATE -3 #define DIRTINESS_STERILE -2 diff --git a/code/__defines/colors.dm b/code/__defines/colors.dm index 6d7dc906014..bc086fdae74 100644 --- a/code/__defines/colors.dm +++ b/code/__defines/colors.dm @@ -39,6 +39,7 @@ #define COLOR_GREEN_GRAY "#8daf6a" #define COLOR_DARK_GREEN_GRAY "#54654c" #define COLOR_BLUE_GRAY "#6a97b0" +#define COLOR_MID_BLUE_GRAY "#666699" #define COLOR_DARK_BLUE_GRAY "#3e4855" #define COLOR_SURGERY_BLUE "#e0f2f6" #define COLOR_SUN "#ec8b2f" @@ -92,6 +93,13 @@ #define COLOR_CRYSTAL "#00c8a5" #define COLOR_ASTEROID_ROCK "#735555" #define COLOR_DIAMOND "#d8d4ea" +#define COLOR_BLOOD_RED "#990000" +#define COLOR_PALE_GOLD "#cc9900" +#define COLOR_ROYAL_BLUE "#0033ff" +#define COLOR_VERDANT_GREEN "#287d00" +#define COLOR_SCIENCE_PURPLE "#6633cc" + +#define COLOR_SUPPLY_BROWN "#967032" #define PIPE_COLOR_GREY "#808080" #define PIPE_COLOR_RED "#ff0000" diff --git a/code/__defines/credits.dm b/code/__defines/credits.dm new file mode 100644 index 00000000000..8b70c447345 --- /dev/null +++ b/code/__defines/credits.dm @@ -0,0 +1,4 @@ +#define CREDIT_ROLL_SPEED 185 +#define CREDIT_SPAWN_SPEED 20 +#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size) +#define CREDIT_EASE_DURATION 22 diff --git a/code/__defines/damage.dm b/code/__defines/damage.dm new file mode 100644 index 00000000000..e3c45646c79 --- /dev/null +++ b/code/__defines/damage.dm @@ -0,0 +1,2 @@ +///The decimal precision for health values. Health will be rounded against this value. +#define HEALTH_ROUNDING 0.01 diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index d716d3f9484..cc9efae8d51 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -13,7 +13,7 @@ especially on common types like /atom or /atom/movable. - FLAG SETTING // When setting default flags on type definitions, they are combined with bitwise OR: -// atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_TEMP_CHANGE +// atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_OPEN_CONTAINER // Be mindful of flags set on parent types, as setting flags on a child type will override the parent flags. // Flags are also set at runtime with bitwise OR: // atom_flags |= ATOM_FLAG_CLIMBABLE @@ -40,13 +40,12 @@ The latter will result in a linter warning and will not work correctly. #define ATOM_FLAG_NO_REACT BITFLAG(3) // Reagents don't react inside this container. #define ATOM_FLAG_OPEN_CONTAINER BITFLAG(4) // Is an open container for chemistry purposes. #define ATOM_FLAG_INITIALIZED BITFLAG(5) // Has this atom been initialized -#define ATOM_FLAG_NO_TEMP_CHANGE BITFLAG(6) // Reagents do not cool or heat to ambient temperature in this container. -#define ATOM_FLAG_CAN_BE_PAINTED BITFLAG(7) // Can be painted using a paint sprayer or similar. -#define ATOM_FLAG_SHIELD_CONTENTS BITFLAG(8) // Protects contents from some global effects (Solar storms) -#define ATOM_FLAG_ADJACENT_EXCEPTION BITFLAG(9) // Skips adjacent checks for atoms that should always be reachable in window tiles -#define ATOM_FLAG_NO_DISSOLVE BITFLAG(10) // Bypasses solvent reactions in the container. -#define ATOM_FLAG_NO_PHASE_CHANGE BITFLAG(11) // Bypasses heating and cooling product reactions in the container. -#define ATOM_FLAG_BLOCK_DIAGONAL_FACING BITFLAG(12) // Atom cannot face non-cardinal directions. +#define ATOM_FLAG_CAN_BE_PAINTED BITFLAG(6) // Can be painted using a paint sprayer or similar. +#define ATOM_FLAG_SHIELD_CONTENTS BITFLAG(7) // Protects contents from some global effects (Solar storms) +#define ATOM_FLAG_ADJACENT_EXCEPTION BITFLAG(8) // Skips adjacent checks for atoms that should always be reachable in window tiles +#define ATOM_FLAG_NO_DISSOLVE BITFLAG(9) // Bypasses solvent reactions in the container. +#define ATOM_FLAG_NO_PHASE_CHANGE BITFLAG(10) // Bypasses heating and cooling product reactions in the container. +#define ATOM_FLAG_BLOCK_DIAGONAL_FACING BITFLAG(11) // Atom cannot face non-cardinal directions. #define ATOM_FLAG_NO_CHEM_CHANGE (ATOM_FLAG_NO_REACT | ATOM_FLAG_NO_DISSOLVE | ATOM_FLAG_NO_PHASE_CHANGE) diff --git a/code/__defines/fluids.dm b/code/__defines/fluids.dm index 6cbd4a3da36..bae8f40cde6 100644 --- a/code/__defines/fluids.dm +++ b/code/__defines/fluids.dm @@ -4,33 +4,48 @@ #define FLUID_SHALLOW 200 // Depth shallow icon is used #define FLUID_OVER_MOB_HEAD 300 // Depth icon layers over mobs. #define FLUID_DEEP 800 // Depth deep icon is used +#define FLUID_VERY_DEEP FLUID_DEEP*2 // Solid fill icon is used #define FLUID_MAX_DEPTH FLUID_DEEP*4 // Arbitrary max value for flooding. #define FLUID_PUSH_THRESHOLD 20 // Amount of flow needed to push items. +/turf + var/_fluid_source_is_active = FALSE + var/_fluid_turf_is_active = FALSE -// Expects /turf for T. -#define ADD_ACTIVE_FLUID_SOURCE(T) if(!T.changing_turf) { SSfluids.water_sources[T] = TRUE; } -#define REMOVE_ACTIVE_FLUID_SOURCE(T) SSfluids.water_sources -= T +// Expects /turf for TURF. +#define ADD_ACTIVE_FLUID_SOURCE(TURF) \ +if(!QDELETED(TURF) && !TURF.changing_turf && !TURF._fluid_source_is_active) { \ + TURF._fluid_source_is_active = TRUE; \ + SSfluids.water_sources += TURF; \ +} -// Expects /obj/effect/fluid for F. -#define ADD_ACTIVE_FLUID(F) if(!QDELETED(F)) { SSfluids.active_fluids[F] = TRUE; } -#define REMOVE_ACTIVE_FLUID(F) SSfluids.active_fluids -= F +#define REMOVE_ACTIVE_FLUID_SOURCE(TURF) \ +if(!QDELETED(TURF) && TURF._fluid_source_is_active) { \ + TURF._fluid_source_is_active = FALSE; \ + SSfluids.water_sources -= TURF; \ +} -// Expects turf for T, -#define UPDATE_FLUID_BLOCKED_DIRS(T) \ - if(isnull(T.fluid_blocked_dirs)) {\ - T.fluid_blocked_dirs = 0; \ - for(var/obj/structure/window/W in T) { \ - if(W.density) T.fluid_blocked_dirs |= W.dir; \ - } \ - for(var/obj/machinery/door/window/D in T) {\ - if(D.density) T.fluid_blocked_dirs |= D.dir; \ - } \ - } +#define ADD_ACTIVE_FLUID(TURF) \ +if(!QDELETED(TURF) && !TURF._fluid_turf_is_active) { \ + TURF._fluid_turf_is_active = TRUE; \ + SSfluids.active_fluids += TURF; \ +} -// We share overlays for all fluid turfs to sync icon animation. -#define APPLY_FLUID_OVERLAY(img_state) \ - if(!SSfluids.fluid_images[img_state]) SSfluids.fluid_images[img_state] = image('icons/effects/liquids.dmi',img_state); \ - add_overlay(SSfluids.fluid_images[img_state]); +#define REMOVE_ACTIVE_FLUID(TURF) \ +if(!QDELETED(TURF) && TURF._fluid_turf_is_active) { \ + TURF._fluid_turf_is_active = FALSE; \ + SSfluids.active_fluids -= TURF; \ +} + +#define UPDATE_FLUID_BLOCKED_DIRS(TURF) \ +if(isnull(TURF.fluid_blocked_dirs)) { \ + TURF.fluid_blocked_dirs = 0; \ + for(var/obj/structure/window/W in TURF) { \ + if(W.density) TURF.fluid_blocked_dirs |= W.dir; \ + } \ + for(var/obj/machinery/door/window/D in TURF) { \ + if(D.density) TURF.fluid_blocked_dirs |= D.dir; \ + } \ +} #define FLUID_MAX_ALPHA 200 #define FLUID_MIN_ALPHA 96 diff --git a/code/__defines/guns.dm b/code/__defines/guns.dm index f817a5a5c6b..3a69036adfa 100644 --- a/code/__defines/guns.dm +++ b/code/__defines/guns.dm @@ -12,6 +12,8 @@ #define CALIBER_CAPS "caps" #define CALIBER_DART "darts" +#define CALIBER_UNUSABLE "unusable" + #define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour #define CLEAR_CASINGS 1 //clear chambered so that the next round will be automatically loaded and fired, but don't drop anything on the floor #define EJECT_CASINGS 2 //drop spent casings on the ground after firing diff --git a/code/__defines/hud.dm b/code/__defines/hud.dm new file mode 100644 index 00000000000..ee157ff088f --- /dev/null +++ b/code/__defines/hud.dm @@ -0,0 +1,18 @@ +// Keys used to set and retrieve icons from the UI decl system. +#define UI_ICON_INTERACTION "icon_interaction" +#define UI_ICON_ZONE_SELECT "icon_zone_sel" +#define UI_ICON_MOVEMENT "icon_movement" +#define UI_ICON_INVENTORY "icon_inventory" +#define UI_ICON_ATTACK "icon_attack" +#define UI_ICON_HANDS "icon_hands" +#define UI_ICON_INTERNALS "icon_internals" +#define UI_ICON_HEALTH "icon_health" +#define UI_ICON_CRIT_MARKER "icon_crit_marker" +#define UI_ICON_NUTRITION "icon_nutrition" +#define UI_ICON_HYDRATION "icon_hydration" +#define UI_ICON_FIRE_INTENT "icon_fire_intent" +#define UI_ICON_INTENT "icon_intent" +#define UI_ICON_UP_HINT "icon_uphint" +#define UI_ICON_STATUS "icon_status" +#define UI_ICON_STATUS_FIRE "icon_status_fire" +#define UI_ICON_CHARGE "icon_charge" \ No newline at end of file diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index 6cb6f626c75..6ba995d5243 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -17,6 +17,7 @@ #define ACCESSORY_SLOT_ARMOR_M "Misc armor" #define ACCESSORY_SLOT_HELM_C "Helmet cover" #define ACCESSORY_SLOT_OVER "Over" +#define ACCESSORY_SLOT_SENSORS "Suit Sensors" // Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses. // WARNING: The following flags apply only to the external suit! @@ -84,11 +85,12 @@ #define SLOT_TIE BITFLAG(17) #define SLOT_HOLSTER BITFLAG(18) #define SLOT_POCKET BITFLAG(19) +#define SLOT_TAIL BITFLAG(20) #define SLOT_LEGS (SLOT_LEG_LEFT|SLOT_LEG_RIGHT) #define SLOT_FEET (SLOT_FOOT_LEFT|SLOT_FOOT_RIGHT) #define SLOT_ARMS (SLOT_ARM_LEFT|SLOT_ARM_RIGHT) #define SLOT_HANDS (SLOT_HAND_LEFT|SLOT_HAND_RIGHT) -#define SLOT_FULL_BODY (SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_EARS|SLOT_UPPER_BODY|SLOT_LOWER_BODY) +#define SLOT_FULL_BODY (SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_EARS|SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_TAIL) // Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. // Used with human/proc/get_heat_protection() and human/proc/get_cold_protection(). @@ -155,14 +157,10 @@ #define THROWNOBJ_KNOCKBACK_DIVISOR 2 // Affects how much speed the mob is knocked back with. // Suit sensor levels -#define SUIT_SENSOR_OFF 0 -#define SUIT_SENSOR_BINARY 1 -#define SUIT_SENSOR_VITAL 2 -#define SUIT_SENSOR_TRACKING 3 - -#define SUIT_NO_SENSORS 0 -#define SUIT_HAS_SENSORS 1 -#define SUIT_LOCKED_SENSORS 2 +#define VITALS_SENSOR_OFF 0 +#define VITALS_SENSOR_BINARY 1 +#define VITALS_SENSOR_VITAL 2 +#define VITALS_SENSOR_TRACKING 3 // Hair Flags #define VERY_SHORT BITFLAG(0) @@ -177,20 +175,21 @@ #define HUD_JANITOR BITFLAG(3) // Limbs. -#define BP_L_FOOT "l_foot" -#define BP_R_FOOT "r_foot" -#define BP_L_LEG "l_leg" -#define BP_R_LEG "r_leg" -#define BP_L_HAND "l_hand" -#define BP_R_HAND "r_hand" +#define BP_L_FOOT "l_foot" +#define BP_R_FOOT "r_foot" +#define BP_L_LEG "l_leg" +#define BP_R_LEG "r_leg" +#define BP_L_HAND "l_hand" +#define BP_R_HAND "r_hand" +#define BP_M_HAND "midlimb" #define BP_L_HAND_UPPER "l_u_hand" #define BP_R_HAND_UPPER "r_u_hand" -#define BP_L_ARM "l_arm" -#define BP_R_ARM "r_arm" -#define BP_HEAD "head" -#define BP_CHEST "chest" -#define BP_GROIN "groin" -#define BP_TAIL "tail" +#define BP_L_ARM "l_arm" +#define BP_R_ARM "r_arm" +#define BP_HEAD "head" +#define BP_CHEST "chest" +#define BP_GROIN "groin" +#define BP_TAIL "tail" // Other inventory-related slots (also organs). #define BP_MOUTH "mouth" @@ -204,6 +203,7 @@ var/global/list/all_limb_tags = list( BP_R_ARM, BP_L_HAND, BP_R_HAND, + BP_M_HAND, BP_L_HAND_UPPER, BP_R_HAND_UPPER, BP_L_LEG, @@ -217,6 +217,7 @@ var/global/list/all_limb_tags_by_depth = list( BP_L_HAND_UPPER, BP_R_HAND, BP_R_HAND_UPPER, + BP_M_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, @@ -233,10 +234,20 @@ var/global/list/default_onmob_icons = list( BP_R_HAND = 'icons/mob/onmob/items/righthand.dmi' ) +var/global/list/all_hand_slots = list( + BP_L_HAND, + BP_R_HAND, + BP_M_HAND, + BP_L_HAND_UPPER, + BP_R_HAND_UPPER, + BP_MOUTH +) + // This list should be sorted by display priority/order for mob examine to look nice. var/global/list/all_inventory_slots = list( BP_L_HAND, BP_R_HAND, + BP_M_HAND, BP_L_HAND_UPPER, BP_R_HAND_UPPER, BP_MOUTH, diff --git a/mods/persistence/code/__defines/limbo.dm b/code/__defines/limbo.dm similarity index 100% rename from mods/persistence/code/__defines/limbo.dm rename to code/__defines/limbo.dm diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index cddc481116b..ee8105a619a 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -157,10 +157,10 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called #define MCS_BLOCK 2 // Failed to change, but action was performed #define FABRICATOR_EXTRA_COST_FACTOR 1.25 -#define FAB_HACKED 1 -#define FAB_DISABLED 2 -#define FAB_SHOCKED 4 -#define FAB_BUSY 8 +#define FAB_HACKED BITFLAG(0) +#define FAB_DISABLED BITFLAG(1) +#define FAB_SHOCKED BITFLAG(2) +#define FAB_BUSY BITFLAG(3) #define PART_CPU /obj/item/stock_parts/computer/processor_unit // CPU. Without it the computer won't run. Better CPUs can run more programs at once. #define PART_NETWORK /obj/item/stock_parts/computer/network_card // Network Card component of this computer. Allows connection to network diff --git a/code/__defines/mapping.dm b/code/__defines/mapping.dm index 8fd79179de2..df3a961ae8d 100644 --- a/code/__defines/mapping.dm +++ b/code/__defines/mapping.dm @@ -33,11 +33,13 @@ if(other_init) { \ #define ADJUST_TAG_VAR(variable, map_hash) (istext(variable) && (variable += map_hash)) /// Map template categories for mass retrieval. -#define MAP_TEMPLATE_CATEGORY_EXOPLANET "exoplanet_template" -#define MAP_TEMPLATE_CATEGORY_EXOPLANET_SITE "exoplanet_site_template" -#define MAP_TEMPLATE_CATEGORY_PLANET "planet_template" -#define MAP_TEMPLATE_CATEGORY_PLANET_SITE "planet_site_template" -#define MAP_TEMPLATE_CATEGORY_SPACE "space_template" -#define MAP_TEMPLATE_CATEGORY_AWAYSITE "awaysite_template" -///PS13 Template that is spawned as part of the main map, and shouldn't be considered an away site during unit tests. -#define MAP_TEMPLATE_CATEGORY_MAIN_SITE "main_site_template" +#define MAP_TEMPLATE_CATEGORY_EXOPLANET "exoplanet_template" +#define MAP_TEMPLATE_CATEGORY_EXOPLANET_SITE "exoplanet_site_template" +#define MAP_TEMPLATE_CATEGORY_PLANET "planet_template" +#define MAP_TEMPLATE_CATEGORY_PLANET_SITE "planet_site_template" +#define MAP_TEMPLATE_CATEGORY_SPACE "space_template" +#define MAP_TEMPLATE_CATEGORY_AWAYSITE "awaysite_template" +#define MAP_TEMPLATE_CATEGORY_LANDMARK_LOADED "landmark_template"///PS13 Template that is spawned as part of the main map, and shouldn't be considered an away site during unit tests. +#define MAP_TEMPLATE_CATEGORY_MAIN_SITE "main" +///PS13 template spawned before main sites, for game mechanic reasons/mapping reasons. +#define MAP_TEMPLATE_CATEGORY_UTILITY_SITE "utility" \ No newline at end of file diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm index 6e8584c5d04..c756745e5f1 100644 --- a/code/__defines/materials.dm +++ b/code/__defines/materials.dm @@ -2,10 +2,10 @@ #define DEFAULT_WALL_MATERIAL /decl/material/solid/metal/steel #define DEFAULT_FURNITURE_MATERIAL /decl/material/solid/metal/aluminium -#define MAT_FLAG_ALTERATION_NONE BITFLAG(0) -#define MAT_FLAG_ALTERATION_NAME BITFLAG(1) -#define MAT_FLAG_ALTERATION_DESC BITFLAG(2) -#define MAT_FLAG_ALTERATION_COLOR BITFLAG(3) +#define MAT_FLAG_ALTERATION_NONE 0 +#define MAT_FLAG_ALTERATION_NAME BITFLAG(0) +#define MAT_FLAG_ALTERATION_DESC BITFLAG(1) +#define MAT_FLAG_ALTERATION_COLOR BITFLAG(2) #define MAT_FLAG_ALTERATION_ALL (~MAT_FLAG_ALTERATION_NONE) #define MAT_FLAG_UNMELTABLE BITFLAG(0) diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm index 5560282337e..f11e61d9836 100644 --- a/code/__defines/math_physics.dm +++ b/code/__defines/math_physics.dm @@ -24,8 +24,6 @@ #define CELSIUS + T0C -#define ATM *ONE_ATMOSPHERE - #define ATMOS_PRECISION 0.0001 #define QUANTIZE(variable) (round(variable, ATMOS_PRECISION)) @@ -36,3 +34,31 @@ #define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1) #define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0) +///////////////////////////// +// Volume Units +///////////////////////////// + +///Multiplier for a single megaliter of a volume. Equivalent to 1 m^3 +#define MEGALITER *1000 +///Multiplier for a single liter of a volume. Equivalent to 1 cm^3 +#define LITER *1 +///Multiplier for a single mililiter of a volume. Equivalent to 1 mm^3 +#define MILLILITER *0.001 + +#define METER_CUBED MEGALITER +#define CM_CUBED LITER +#define MM_CUBED MILLILITER + +///////////////////////////// +// Pressure Units +///////////////////////////// + +///Multiplier for a pressure value in atmospheres (atm) +#define ATM *ONE_ATMOSPHERE + +///Multiplier for a thousand kilopascal, or a megapascal +#define MEGAPASCAL *1000 +///Multiplier for a thousand pascal, or a kilopascal +#define KILOPASCAL *1 +///Multiplier for a thousanth of a kilopascal, or a pascal +#define PASCAL *0.001 diff --git a/code/__defines/mech.dm b/code/__defines/mech.dm new file mode 100644 index 00000000000..e01159f0fd0 --- /dev/null +++ b/code/__defines/mech.dm @@ -0,0 +1,39 @@ +#define HARDPOINT_BACK "back" +#define HARDPOINT_LEFT_HAND "left hand" +#define HARDPOINT_RIGHT_HAND "right hand" +#define HARDPOINT_LEFT_SHOULDER "left shoulder" +#define HARDPOINT_RIGHT_SHOULDER "right shoulder" +#define HARDPOINT_HEAD "head" + +// No software required: taser. light, radio. +#define MECH_SOFTWARE_UTILITY "utility equipment" // Plasma torch, clamp, drill. +#define MECH_SOFTWARE_MEDICAL "medical support systems" // Sleeper. +#define MECH_SOFTWARE_WEAPONS "standard weapon systems" // Ballistics and energy weapons. +#define MECH_SOFTWARE_ENGINEERING "advanced engineering systems" // RCD. + +// EMP damage points before various effects occur. +#define EMP_GUI_DISRUPT 5 // 1 ion rifle shot == 8. +#define EMP_MOVE_DISRUPT 10 // 2 shots. +#define EMP_ATTACK_DISRUPT 20 // 3 shots. + +//About components +#define MECH_COMPONENT_DAMAGE_UNDAMAGED 1 +#define MECH_COMPONENT_DAMAGE_DAMAGED 2 +#define MECH_COMPONENT_DAMAGE_DAMAGED_BAD 3 +#define MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL 4 + +//Construction +#define FRAME_REINFORCED 1 +#define FRAME_REINFORCED_SECURE 2 +#define FRAME_REINFORCED_WELDED 3 + +#define FRAME_WIRED 1 +#define FRAME_WIRED_ADJUSTED 2 + +//POWER! +#define MECH_POWER_OFF 0 +#define MECH_POWER_TRANSITION 1 +#define MECH_POWER_ON 2 + +#define MECH_UI_STYLE(X) STYLE_SMALLFONTS_OUTLINE(X, 5, COLOR_BLACK, COLOR_WHITE) +#define MECH_BAR_CAP 12 diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index b4776030e65..d6c0b7e8e94 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -1,16 +1,17 @@ #define DEBUG // Turf-only flags. -#define TURF_FLAG_NOJAUNT BITFLAG(0) // This is used in literally one place, turf.dm, to block ethereal jaunt. -#define TURF_FLAG_NORUINS BITFLAG(1) // Used by the ruin generator to skip placing loaded ruins on this turf. -#define TURF_FLAG_BACKGROUND BITFLAG(2) // Used by shuttle movement to determine if it should be ignored by turf translation. -#define TURF_IS_HOLOMAP_OBSTACLE BITFLAG(3) -#define TURF_IS_HOLOMAP_PATH BITFLAG(4) -#define TURF_IS_HOLOMAP_ROCK BITFLAG(5) +#define TURF_FLAG_NOJAUNT BITFLAG(0) // This is used in literally one place, turf.dm, to block ethereal jaunt. +#define TURF_FLAG_NO_POINTS_OF_INTEREST BITFLAG(1) // Used by the level subtemplate generator to skip placing loaded templates on this turf. +#define TURF_FLAG_BACKGROUND BITFLAG(2) // Used by shuttle movement to determine if it should be ignored by turf translation. +#define TURF_FLAG_HOLY BITFLAG(3) +#define TURF_IS_HOLOMAP_OBSTACLE BITFLAG(4) +#define TURF_IS_HOLOMAP_PATH BITFLAG(5) +#define TURF_IS_HOLOMAP_ROCK BITFLAG(6) ///Width or height of a transition edge area along the map's borders where transition edge turfs are placed to connect levels together. #define TRANSITIONEDGE 7 -///Extra spacing needed between any random ruins and the transition edge of a level. -#define RUIN_MAP_EDGE_PAD 15 +///Extra spacing needed between any random level templates and the transition edge of a level. +#define TEMPLATE_TAG_MAP_EDGE_PAD 15 ///Enum value for a level edge that's to be untouched #define LEVEL_EDGE_NONE 0 @@ -264,6 +265,10 @@ #define ICON_STATE_INV "inventory" #define hex2num(X) text2num(X, 16) +/// Returns the hex value of a number given a value assumed to be a base-ten value, padded to a minimum length of 2. +#define num2hex(num) num2text(num, 2, 16) +/// Returns the hex value of a number given a value assumed to be a base-ten value, padded to a supplied minimum length. +#define num2hex_padded(num, len) num2text(num, len, 16) #define Z_ALL_TURFS(Z) block(locate(1, 1, Z), locate(world.maxx, world.maxy, Z)) @@ -315,5 +320,33 @@ #define LEVEL_ABOVE_PLATING 2 // Defines for fluorescence (/atom/var/fluorescent) -#define FLUORESCENT_GLOWS 1 // Glows when under flourescent light -#define FLUORESCENT_GLOWING 2 // Currently glowing due to flourescent light +/// Glows when under flourescent light +#define FLUORESCENT_GLOWS 1 +/// Currently glowing due to flourescent light +#define FLUORESCENT_GLOWING 2 + +// Flags used for utensil-food interaction. +/// Solid or semi-solid food; chopsticks, forks. +#define UTENSIL_FLAG_COLLECT BITFLAG(0) +/// Soft, liquid or semi-liquid food; soups, stews, pudding. +#define UTENSIL_FLAG_SCOOP BITFLAG(1) +/// Foods that need to be sliced before eating; steak, grapefruit. +#define UTENSIL_FLAG_SLICE BITFLAG(2) +/// Unimplemented; condiments that are collected before being spread on other food. +#define UTENSIL_FLAG_SPREAD BITFLAG(3) + +// Default. +#define GROOMABLE_NONE 0 +// Hair, feathers. +#define GROOMABLE_COMB BITFLAG(0) +// Hair, beards. +#define GROOMABLE_BRUSH BITFLAG(1) +// Horns. +#define GROOMABLE_FILE BITFLAG(2) + +// Nothing to groom on this organ. +#define GROOMING_RESULT_FAILED 0 +// Can groom somewhat (short hair with a comb) +#define GROOMING_RESULT_PARTIAL 1 +// Can groom properly (long hair with a brush) +#define GROOMING_RESULT_SUCCESS 2 diff --git a/code/__defines/mob_status.dm b/code/__defines/mob_status.dm index 1e8ac3ef70c..42bc8854a7a 100644 --- a/code/__defines/mob_status.dm +++ b/code/__defines/mob_status.dm @@ -2,4 +2,4 @@ #define GET_STATUS(MOB, COND) (LAZYACCESS(MOB.status_counters, COND)) #define HAS_STATUS(MOB, COND) (GET_STATUS(MOB, COND) > 0) #define ADJ_STATUS(MOB, COND, AMT) (MOB.set_status(COND, PENDING_STATUS(MOB, COND) + AMT)) -#define SET_STATUS_MAX(MOB, COND, AMT) (MOB.set_status(COND, max(PENDING_STATUS(MOB, COND), AMT))) +#define SET_STATUS_MAX(MOB, COND, AMT) (MOB.set_status(COND, max(PENDING_STATUS(MOB, COND), AMT))) \ No newline at end of file diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 1e00a6617af..39a9f609ca8 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -137,8 +137,8 @@ #define FLASH_PROTECTION_MODERATE 2 #define FLASH_PROTECTION_MAJOR 3 -#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6) -#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3) +#define ANIMAL_SPAWN_DELAY round(get_config_value(/decl/config/num/respawn_delay) / 6) +#define DRONE_SPAWN_DELAY round(get_config_value(/decl/config/num/respawn_delay) / 3) // Incapacitation flags, used by the mob/proc/incapacitated() proc #define INCAPACITATION_NONE 0 @@ -182,7 +182,6 @@ #define BP_ACETONE "acetone reactor" // Robo Organs. -#define BP_POSIBRAIN "posibrain" #define BP_VOICE "vocal synthesiser" #define BP_STACK "stack" #define BP_OPTICS "optics" @@ -205,6 +204,7 @@ // Prosthetic helpers. #define BP_IS_PROSTHETIC(org) (!QDELETED(org) && (org.organ_properties & ORGAN_PROP_PROSTHETIC)) +#define BP_IS_ROBOTIC(org) (!QDELETED(org) && (org.bodytype?.is_robotic)) #define BP_IS_BRITTLE(org) (!QDELETED(org) && (org.status & ORGAN_BRITTLE)) #define BP_IS_CRYSTAL(org) (!QDELETED(org) && (org.organ_properties & ORGAN_PROP_CRYSTAL)) @@ -253,8 +253,9 @@ #define SYNTH_HEAT_LEVEL_2 1000 #define SYNTH_HEAT_LEVEL_3 2000 -#define CORPSE_CAN_REENTER 1 -#define CORPSE_CAN_REENTER_AND_RESPAWN 2 +#define CORPSE_CANNOT_REENTER 0 +#define CORPSE_CAN_REENTER BITFLAG(0) +#define CORPSE_CAN_RESPAWN BITFLAG(1) #define SPECIES_HUMAN "Human" #define SPECIES_MONKEY "Monkey" @@ -269,6 +270,7 @@ #define STASIS_MISC "misc" #define STASIS_CRYOBAG "cryobag" #define STASIS_COLD "cold" +#define STASIS_SLEEP "sleeping" #define AURA_CANCEL 1 #define AURA_FALSE 2 @@ -298,20 +300,19 @@ #define MOB_FLAG_HOLY_BAD BITFLAG(0) // If this mob is allergic to holiness -#define MARKING_TARGET_SKIN 0 // Draw a /decl/sprite_accessory/marking to the mob's body, eg. tattoos -#define MARKING_TARGET_HAIR 1 // Draw a /decl/sprite_accessory/marking to the mob's hair, eg. ears & horns - #define DEXTERITY_NONE 0 #define DEXTERITY_SIMPLE_MACHINES BITFLAG(0) +// TODO: let HOLD equip items to hand just not other slots #define DEXTERITY_HOLD_ITEM BITFLAG(1) -#define DEXTERITY_EQUIP_ITEM BITFLAG(2) -#define DEXTERITY_KEYBOARDS BITFLAG(3) -#define DEXTERITY_TOUCHSCREENS BITFLAG(4) +#define DEXTERITY_WIELD_ITEM BITFLAG(2) +#define DEXTERITY_EQUIP_ITEM BITFLAG(3) +#define DEXTERITY_KEYBOARDS BITFLAG(4) +#define DEXTERITY_TOUCHSCREENS BITFLAG(5) // TODO: actually get grab code to check this one. -#define DEXTERITY_GRAPPLE BITFLAG(5) -#define DEXTERITY_WEAPONS BITFLAG(6) -#define DEXTERITY_COMPLEX_TOOLS BITFLAG(7) -#define DEXTERITY_BASE (DEXTERITY_SIMPLE_MACHINES|DEXTERITY_HOLD_ITEM|DEXTERITY_EQUIP_ITEM) +#define DEXTERITY_GRAPPLE BITFLAG(6) +#define DEXTERITY_WEAPONS BITFLAG(7) +#define DEXTERITY_COMPLEX_TOOLS BITFLAG(8) +#define DEXTERITY_BASE (DEXTERITY_SIMPLE_MACHINES|DEXTERITY_HOLD_ITEM|DEXTERITY_WIELD_ITEM|DEXTERITY_EQUIP_ITEM) #define DEXTERITY_FULL (DEXTERITY_BASE|DEXTERITY_KEYBOARDS|DEXTERITY_TOUCHSCREENS|DEXTERITY_GRAPPLE|DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS) // List of dexterity flags ordered by 'complexity' for use in brainloss dex malus checking. @@ -329,7 +330,7 @@ var/global/list/dexterity_levels = list( #define INJECTION_PORT 2 #define INJECTION_PORT_DELAY 3 SECONDS // used by injectors to apply delay due to searching for a port on the injectee's suit -#define ADJUSTED_GLIDE_SIZE(DELAY) (NONUNIT_CEILING((WORLD_ICON_SIZE / max((DELAY), world.tick_lag) * world.tick_lag) - world.tick_lag, 1) + (config.glide_size_delay)) +#define ADJUSTED_GLIDE_SIZE(DELAY) (NONUNIT_CEILING((WORLD_ICON_SIZE / max((DELAY), world.tick_lag) * world.tick_lag) - world.tick_lag, 1) + (get_config_value(/decl/config/num/movement_glide_size))) #define PREF_MEM_RECORD "memory" #define PREF_SEC_RECORD "sec_record" @@ -343,7 +344,8 @@ var/global/list/dexterity_levels = list( #define MOB_ICON_HAS_REST_STATE BITFLAG(2) #define MOB_ICON_HAS_SLEEP_STATE BITFLAG(3) #define MOB_ICON_HAS_GIB_STATE BITFLAG(4) -#define MOB_ICON_HAS_PARALYZED_STATE BITFLAG(5) +#define MOB_ICON_HAS_DUST_STATE BITFLAG(5) +#define MOB_ICON_HAS_PARALYZED_STATE BITFLAG(6) #define NEUTER_ANIMATE "animate singular neutral" // Equipment Overlays Indices // @@ -378,4 +380,35 @@ var/global/list/dexterity_levels = list( // Underlay defines; vestigal implementation currently. #define HU_TAIL_LAYER 1 -#define TOTAL_UNDER_LAYERS 1 \ No newline at end of file +#define TOTAL_UNDER_LAYERS 1 + +// Enum for result of an attempt to eat/eat from an item. +#define EATEN_INVALID 0 +#define EATEN_UNABLE 1 +#define EATEN_SUCCESS 2 + +// Enum for type of consumption, largely just cosmetic currently. +#define EATING_METHOD_EAT 0 +#define EATING_METHOD_DRINK 1 + +#define SAC_HAIR /decl/sprite_accessory_category/hair +#define SAC_FACIAL_HAIR /decl/sprite_accessory_category/facial_hair +#define SAC_COSMETICS /decl/sprite_accessory_category/cosmetics +#define SAC_MARKINGS /decl/sprite_accessory_category/markings +#define SAC_HORNS /decl/sprite_accessory_category/horns +#define SAC_FRILLS /decl/sprite_accessory_category/frills + +// Helpers for setting mob appearance. They are extremely ugly, hence the helpers. +#define SET_HAIR_STYLE(TARGET, STYLE, SKIP_UPDATE) (TARGET.set_organ_sprite_accessory_by_category((STYLE), SAC_HAIR, null, TRUE, FALSE, BP_HEAD, SKIP_UPDATE)) +#define GET_HAIR_STYLE(TARGET) (TARGET.get_organ_sprite_accessory_by_category(SAC_HAIR, BP_HEAD)) +#define SET_HAIR_COLOUR(TARGET, COLOUR, SKIP_UPDATE) (TARGET.set_organ_sprite_accessory_by_category(null, SAC_HAIR, (COLOUR), FALSE, TRUE, BP_HEAD, SKIP_UPDATE)) +#define GET_HAIR_COLOUR(TARGET) (TARGET.get_organ_sprite_accessory(GET_HAIR_STYLE(TARGET), BP_HEAD)) + +#define SET_FACIAL_HAIR_STYLE(TARGET, STYLE, SKIP_UPDATE) (TARGET.set_organ_sprite_accessory_by_category((STYLE), SAC_FACIAL_HAIR, null, TRUE, FALSE, BP_HEAD, SKIP_UPDATE)) +#define GET_FACIAL_HAIR_STYLE(TARGET) (TARGET.get_organ_sprite_accessory_by_category(SAC_FACIAL_HAIR, BP_HEAD)) +#define SET_FACIAL_HAIR_COLOUR(TARGET, COLOUR, SKIP_UPDATE) (TARGET.set_organ_sprite_accessory_by_category(null, SAC_FACIAL_HAIR, (COLOUR), FALSE, TRUE, BP_HEAD, SKIP_UPDATE)) +#define GET_FACIAL_HAIR_COLOUR(TARGET) (TARGET.get_organ_sprite_accessory(GET_FACIAL_HAIR_STYLE(TARGET), BP_HEAD)) + +// Used in death() to skip message broadcast. +#define SKIP_DEATH_MESSAGE "no message" + diff --git a/mods/persistence/code/__defines/persistent_id.dm b/code/__defines/persistent_id.dm similarity index 100% rename from mods/persistence/code/__defines/persistent_id.dm rename to code/__defines/persistent_id.dm diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm index aaecaaaf4bf..48a9f0e0973 100644 --- a/code/__defines/qdel.dm +++ b/code/__defines/qdel.dm @@ -23,13 +23,13 @@ #define QDESTROYING(X) (isnull(X) || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) //Qdel helper macros. -#define QDEL_IN(item, time) if(!isnull(item)) {addtimer(CALLBACK(item, /datum/proc/qdel_self), time, TIMER_STOPPABLE)} -#define QDEL_IN_CLIENT_TIME(item, time) if(!isnull(item)) {addtimer(CALLBACK(item, /datum/proc/qdel_self), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)} +#define QDEL_IN(item, time) if(!isnull(item)) {addtimer(CALLBACK(item, TYPE_PROC_REF(/datum, qdel_self)), time, TIMER_STOPPABLE)} +#define QDEL_IN_CLIENT_TIME(item, time) if(!isnull(item)) {addtimer(CALLBACK(item, TYPE_PROC_REF(/datum, qdel_self)), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)} #define QDEL_NULL(item) if(item) {qdel(item); item = null} #define QDEL_NULL_SCREEN(item) if(client) { client.screen -= item; }; QDEL_NULL(item) #define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) }}; if(x) {x.Cut(); x = null } // Second x check to handle items that LAZYREMOVE on qdel. #define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); } -#define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/______qdel_list_wrapper, L), time, TIMER_STOPPABLE) +#define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(______qdel_list_wrapper), L), time, TIMER_STOPPABLE) #define QDEL_LIST_ASSOC(L) if(L) { for(var/I in L) { qdel(L[I]); qdel(I); } L.Cut(); } #define QDEL_LIST_ASSOC_VAL(L) if(L) { for(var/I in L) qdel(L[I]); L.Cut(); } diff --git a/code/__defines/reactions.dm b/code/__defines/reactions.dm new file mode 100644 index 00000000000..d0a32c77acc --- /dev/null +++ b/code/__defines/reactions.dm @@ -0,0 +1,5 @@ +#define REACTION_TYPE_PHARMACEUTICAL 1 +#define REACTION_TYPE_ALLOYING 2 +#define REACTION_TYPE_COMPOUND 3 +#define REACTION_TYPE_SYNTHESIS 4 +#define REACTION_TYPE_RECIPE 5 diff --git a/code/__defines/research.dm b/code/__defines/research.dm index 59f6fad0e74..cb251a84180 100644 --- a/code/__defines/research.dm +++ b/code/__defines/research.dm @@ -5,9 +5,9 @@ #define GAS_WORTH_MULTIPLIER 1 //0.001 #define MATERIAL_WORTH_MULTIPLIER 1 //0.005 -#define REAGENT_UNITS_PER_MATERIAL_UNIT (REAGENT_UNITS_PER_MATERIAL_SHEET / SHEET_MATERIAL_AMOUNT) #define REAGENT_UNITS_PER_MATERIAL_SHEET 20 #define REAGENT_UNITS_PER_GAS_MOLE 10 +#define REAGENT_UNITS_PER_MATERIAL_UNIT (REAGENT_UNITS_PER_MATERIAL_SHEET / SHEET_MATERIAL_AMOUNT) #define MATERIAL_UNITS_TO_REAGENTS_UNITS(AMT) (AMT * REAGENT_UNITS_PER_MATERIAL_UNIT) #define MOLES_PER_MATERIAL_UNIT(AMT) round(MATERIAL_UNITS_TO_REAGENTS_UNITS(AMT) / REAGENT_UNITS_PER_GAS_MOLE) @@ -19,8 +19,8 @@ #define HOLLOW_OBJECT_MATTER_MULTIPLIER 0.05 #define BASE_OBJECT_MATTER_MULTPLIER 0.25 -#define GENERIC_SMELTING_HEAT_POINT 5000 -#define HIGH_SMELTING_HEAT_POINT 10000 +#define GENERIC_SMELTING_HEAT_POINT 1350 CELSIUS +#define HIGH_SMELTING_HEAT_POINT 1500 CELSIUS #define TECH_MATERIAL "materials" #define TECH_ENGINEERING "engineering" #define TECH_EXOTIC_MATTER "exoticmatter" diff --git a/code/__defines/ruin_tags.dm b/code/__defines/ruin_tags.dm deleted file mode 100644 index caf6e3cf7fb..00000000000 --- a/code/__defines/ruin_tags.dm +++ /dev/null @@ -1,8 +0,0 @@ -//Flags for exoplanet ruin picking - -#define RUIN_HABITAT 1 //long term habitat -#define RUIN_HUMAN 2 //human-made structure -#define RUIN_ALIEN 4 //artificial structure of an unknown origin -#define RUIN_WRECK 8 //crashed vessel -#define RUIN_NATURAL 16 //naturally occuring structure -#define RUIN_WATER 32 //ruin depending on planet having water accessible \ No newline at end of file diff --git a/mods/persistence/__defines/saved_var.dm b/code/__defines/saved_var.dm similarity index 100% rename from mods/persistence/__defines/saved_var.dm rename to code/__defines/saved_var.dm diff --git a/mods/persistence/__defines/seed_saving_helper.dm b/code/__defines/seed_saving_helper.dm similarity index 100% rename from mods/persistence/__defines/seed_saving_helper.dm rename to code/__defines/seed_saving_helper.dm diff --git a/mods/persistence/__defines/serializer.dm b/code/__defines/serializer.dm similarity index 98% rename from mods/persistence/__defines/serializer.dm rename to code/__defines/serializer.dm index b876e5e34b3..85266ca9b75 100644 --- a/mods/persistence/__defines/serializer.dm +++ b/code/__defines/serializer.dm @@ -18,6 +18,7 @@ #define SERIALIZER_TYPE_DATUM_FLAT "FLAT_OBJ" #define SERIALIZER_TYPE_FLAT_REF "FLAT_REF" #define SERIALIZER_TYPE_DECL "DECL" +#define SERIALIZER_TYPE_POINTER "PTR" ///////////////////////////////////////////////////////// // SQL table names diff --git a/code/__defines/structures.dm b/code/__defines/structures.dm new file mode 100644 index 00000000000..f91ed7aed08 --- /dev/null +++ b/code/__defines/structures.dm @@ -0,0 +1 @@ +#define STRUCTURE_FLAG_SURFACE BITFLAG(0) \ No newline at end of file diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm index abfb4875cb3..36561d7f4ba 100644 --- a/code/__defines/subsystem-priority.dm +++ b/code/__defines/subsystem-priority.dm @@ -20,6 +20,7 @@ #define SS_PRIORITY_SPACEDRIFT 40 // Drifting things. #define SS_PRIORITY_INPUT 20 // Input things. #define SS_PRIORITY_ICON_UPDATE 20 // Queued icon updates. Mostly used by APCs and tables. +#define SS_PRIORITY_VIS_CONTENTS 20 // Queued vis_contents updates. #define SS_PRIORITY_AMBIENCE 20 // Queued ambient lighting updates. #define SS_PRIORITY_ALARM 20 // Alarm processing. #define SS_PRIORITY_EVENT 20 // Event processing and queue handling. diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 2828c1d5c4b..f523c3dd5d8 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -44,16 +44,17 @@ #define SS_INIT_OVERLAY 1 #define SS_INIT_DEFAULT 0 #define SS_INIT_AIR -1 -#define SS_INIT_MISC_LATE -2 -#define SS_INIT_MISC_CODEX -3 -#define SS_INIT_ALARM -4 -#define SS_INIT_SHUTTLE -5 -#define SS_INIT_GOALS -5 -#define SS_INIT_LIGHTING -6 -#define SS_INIT_WEATHER -7 -#define SS_INIT_ZCOPY -8 -#define SS_INIT_HOLOMAP -9 -#define SS_INIT_XENOARCH -10 +#define SS_INIT_VIS_CONTENTS -2 +#define SS_INIT_MISC_LATE -3 +#define SS_INIT_MISC_CODEX -4 +#define SS_INIT_ALARM -5 +#define SS_INIT_SHUTTLE -6 +#define SS_INIT_GOALS -7 +#define SS_INIT_LIGHTING -8 +#define SS_INIT_WEATHER -9 +#define SS_INIT_ZCOPY -10 +#define SS_INIT_HOLOMAP -11 +#define SS_INIT_XENOARCH -12 #define SS_INIT_TICKER -20 #define SS_INIT_UNIT_TESTS -100 diff --git a/code/__defines/temperature.dm b/code/__defines/temperature.dm index 822c9c20172..72a8cf9796b 100644 --- a/code/__defines/temperature.dm +++ b/code/__defines/temperature.dm @@ -1,7 +1,9 @@ -#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !(A.atom_flags & ATOM_FLAG_NO_TEMP_CHANGE)) +#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (istype(A) && A.simulated && A.temperature_sensitive) #define ATOM_SHOULD_TEMPERATURE_ENQUEUE(A) (ATOM_IS_TEMPERATURE_SENSITIVE(A) && !QDELETED(A)) #define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5 #define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25 +#define MIN_TEMPERATURE_COEFFICIENT 1 +#define MAX_TEMPERATURE_COEFFICIENT 10 #define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \ _atom.temperature = _temp; \ @@ -35,5 +37,5 @@ for(var/thing in atom) var/atom/A = thing QUEUE_TEMPERATURE_ATOM(A) - else + else if(atom) QUEUE_TEMPERATURE_ATOM(atom) diff --git a/code/__defines/template_tags.dm b/code/__defines/template_tags.dm new file mode 100644 index 00000000000..1da57b5307f --- /dev/null +++ b/code/__defines/template_tags.dm @@ -0,0 +1,9 @@ +//Flags for exoplanet ruin picking + +#define TEMPLATE_TAG_HABITAT BITFLAG(0) //long term habitat +#define TEMPLATE_TAG_HUMAN BITFLAG(1) //human-made structure +#define TEMPLATE_TAG_ALIEN BITFLAG(2) //artificial structure of an unknown origin +#define TEMPLATE_TAG_WRECK BITFLAG(3) //crashed vessel +#define TEMPLATE_TAG_NATURAL BITFLAG(4) //naturally occuring structure +#define TEMPLATE_TAG_WATER BITFLAG(5) //ruin depending on planet having water accessible +#define TEMPLATE_TAG_HABITABLE BITFLAG(6) //ruin depending on planet being habitable diff --git a/code/__defines/tools.dm b/code/__defines/tools.dm index 9553d3fa83f..449f0fca9c8 100644 --- a/code/__defines/tools.dm +++ b/code/__defines/tools.dm @@ -1,27 +1,32 @@ // Engineering tools. -#define TOOL_WELDER /decl/tool_archetype/welder -#define TOOL_CABLECOIL /decl/tool_archetype/cable_coil -#define TOOL_WIRECUTTERS /decl/tool_archetype/wirecutters -#define TOOL_SCREWDRIVER /decl/tool_archetype/screwdriver -#define TOOL_MULTITOOL /decl/tool_archetype/multitool -#define TOOL_CROWBAR /decl/tool_archetype/crowbar -#define TOOL_HATCHET /decl/tool_archetype/hatchet -#define TOOL_WRENCH /decl/tool_archetype/wrench -#define TOOL_SHOVEL /decl/tool_archetype/shovel -#define TOOL_PEN /decl/tool_archetype/pen +#define TOOL_WELDER /decl/tool_archetype/welder +#define TOOL_CABLECOIL /decl/tool_archetype/cable_coil +#define TOOL_WIRECUTTERS /decl/tool_archetype/wirecutters +#define TOOL_SCREWDRIVER /decl/tool_archetype/screwdriver +#define TOOL_MULTITOOL /decl/tool_archetype/multitool +#define TOOL_CROWBAR /decl/tool_archetype/crowbar +#define TOOL_HATCHET /decl/tool_archetype/hatchet +#define TOOL_WRENCH /decl/tool_archetype/wrench +#define TOOL_SHOVEL /decl/tool_archetype/shovel +#define TOOL_PICK /decl/tool_archetype/pick +#define TOOL_HAMMER /decl/tool_archetype/hammer + +// Misc tools. +#define TOOL_PEN /decl/tool_archetype/pen // Surgical tools. -#define TOOL_SCALPEL /decl/tool_archetype/scalpel -#define TOOL_RETRACTOR /decl/tool_archetype/retractor -#define TOOL_HEMOSTAT /decl/tool_archetype/hemostat -#define TOOL_SAW /decl/tool_archetype/saw -#define TOOL_CAUTERY /decl/tool_archetype/cautery -#define TOOL_SUTURES /decl/tool_archetype/sutures -#define TOOL_BONE_GEL /decl/tool_archetype/bone_gel -#define TOOL_BONE_SETTER /decl/tool_archetype/bone_setter -#define TOOL_DRILL /decl/tool_archetype/surgical_drill +#define TOOL_SCALPEL /decl/tool_archetype/scalpel +#define TOOL_RETRACTOR /decl/tool_archetype/retractor +#define TOOL_HEMOSTAT /decl/tool_archetype/hemostat +#define TOOL_SAW /decl/tool_archetype/saw +#define TOOL_CAUTERY /decl/tool_archetype/cautery +#define TOOL_SUTURES /decl/tool_archetype/sutures +#define TOOL_BONE_GEL /decl/tool_archetype/bone_gel +#define TOOL_BONE_SETTER /decl/tool_archetype/bone_setter +#define TOOL_SURGICAL_DRILL /decl/tool_archetype/surgical_drill // Tool qualities (positive multplier) +#define TOOL_QUALITY_NONE 0 #define TOOL_QUALITY_WORST 0.1 #define TOOL_QUALITY_BAD 0.5 #define TOOL_QUALITY_MEDIOCRE 0.75 @@ -48,6 +53,10 @@ #define IS_HATCHET(A) IS_TOOL(A, TOOL_HATCHET) #define IS_SHOVEL(A) IS_TOOL(A, TOOL_SHOVEL) #define IS_PEN(A) IS_TOOL(A, TOOL_PEN) +#define IS_PICK(A) IS_TOOL(A, TOOL_PICK) + +#define IS_HEMOSTAT(A) IS_TOOL(A, TOOL_HEMOSTAT) +#define IS_RETRACTOR(A) IS_TOOL(A, TOOL_RETRACTOR) // Structure interaction flags #define TOOL_INTERACTION_ANCHOR BITFLAG(0) @@ -56,21 +65,26 @@ #define TOOL_INTERACTION_ALL (TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT | TOOL_INTERACTION_WIRING) // Codex strings for looking up tool information. -#define TOOL_CODEX_WRENCH "wrench (tool)" -#define TOOL_CODEX_SCREWDRIVER "screwdriver (tool)" -#define TOOL_CODEX_WIRECUTTERS "wirecutters (tool)" -#define TOOL_CODEX_WELDER "welder (tool)" -#define TOOL_CODEX_CROWBAR "crowbar (tool)" -#define TOOL_CODEX_MULTITOOL "multitool (tool)" +#define TOOL_CODEX_WRENCH "wrench (tool)" +#define TOOL_CODEX_SCREWDRIVER "screwdriver (tool)" +#define TOOL_CODEX_WIRECUTTERS "wirecutters (tool)" +#define TOOL_CODEX_WELDER "welder (tool)" +#define TOOL_CODEX_CROWBAR "crowbar (tool)" +#define TOOL_CODEX_MULTITOOL "multitool (tool)" // Tool properties for tool specific stuff -#define TOOL_PROP_COLOR_NAME "color_name" //Property containing a color name for some tools. Namely the pen tool. -#define TOOL_PROP_COLOR "color" //Property for specifying a color, for something like a pen. -#define TOOL_PROP_USES "uses_left" //Property for things that have a fixed amount of uses. -1 is unlimited. +#define TOOL_PROP_VERB "use_verb" +#define TOOL_PROP_SOUND "use_sound" +#define TOOL_PROP_COLOR_NAME "color_name" //Property containing a color name for some tools. Namely the pen tool. +#define TOOL_PROP_COLOR "color" //Property for specifying a color, for something like a pen. +#define TOOL_PROP_USES "uses_left" //Property for things that have a fixed amount of uses. -1 is unlimited. //Pen specific stuff -#define TOOL_PROP_PEN_FLAG "pen_flag" //Property for pens to specify additional properties about themselves -#define TOOL_PROP_PEN_SIG "signature" //Property for pens specifically. Returns a stored forged signature if there's one. -#define TOOL_PROP_PEN_SHADE_COLOR "shade_color" //Property for pens returns the shade color if applicable +#define TOOL_PROP_PEN_FLAG "pen_flag" //Property for pens to specify additional properties about themselves +#define TOOL_PROP_PEN_SIG "signature" //Property for pens specifically. Returns a stored forged signature if there's one. +#define TOOL_PROP_PEN_SHADE_COLOR "shade_color" //Property for pens returns the shade color if applicable ///Property for pens returns the font the pen uses -#define TOOL_PROP_PEN_FONT "pen_font" +#define TOOL_PROP_PEN_FONT "pen_font" + +// Property for xenoarch. +#define TOOL_PROP_EXCAVATION_DEPTH "excav_depth" \ No newline at end of file diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index 2747a4a6987..f144d20135e 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -37,10 +37,11 @@ #define EXT_EDGE_OCEAN (10 * EXT_LAYER_CONSTANT) #define EXT_EDGE_SEAFLOOR (11 * EXT_LAYER_CONSTANT) #define EXT_EDGE_VOLCANIC (12 * EXT_LAYER_CONSTANT) +#define EXT_EDGE_PATH (13 * EXT_LAYER_CONSTANT) #define EXT_EDGE_DIRT (20 * EXT_LAYER_CONSTANT) #define EXT_EDGE_BARREN (21 * EXT_LAYER_CONSTANT) -#define EXT_EDGE_MUD (21 * EXT_LAYER_CONSTANT) -#define EXT_EDGE_MUD_DARK (22 * EXT_LAYER_CONSTANT) +#define EXT_EDGE_CLAY (21 * EXT_LAYER_CONSTANT) +#define EXT_EDGE_MUD (22 * EXT_LAYER_CONSTANT) #define EXT_EDGE_SAND (30 * EXT_LAYER_CONSTANT) #define EXT_EDGE_CHLORINE_SAND (31 * EXT_LAYER_CONSTANT) #define EXT_EDGE_WATER (40 * EXT_LAYER_CONSTANT) diff --git a/code/__defines/webhooks.dm b/code/__defines/webhooks.dm index eaf65014d92..57fe27fefc0 100644 --- a/code/__defines/webhooks.dm +++ b/code/__defines/webhooks.dm @@ -7,3 +7,4 @@ #define WEBHOOK_CUSTOM_EVENT "webhook_custom_event" #define WEBHOOK_ELEVATOR_FALL "webhook_elevator_fall" #define WEBHOOK_AHELP_SENT "webhook_ahelp_sent" +#define WEBHOOK_FAX_SENT "webhook_fax_sent" diff --git a/mods/persistence/code/__defines/world_save.dm b/code/__defines/world_save.dm similarity index 100% rename from mods/persistence/code/__defines/world_save.dm rename to code/__defines/world_save.dm diff --git a/code/__defines/zmimic.dm b/code/__defines/zmimic.dm index 5f679f43597..71982547c3e 100644 --- a/code/__defines/zmimic.dm +++ b/code/__defines/zmimic.dm @@ -1,7 +1,28 @@ +#define ZM_DESTRUCTION_TIMER(TARGET) addtimer(CALLBACK(TARGET, TYPE_PROC_REF(/datum, qdel_self)), 10 SECONDS, TIMER_STOPPABLE) #define TURF_IS_MIMICKING(T) (isturf(T) && (T:z_flags & ZM_MIMIC_BELOW)) -#define CHECK_OO_EXISTENCE(OO) if (OO && !TURF_IS_MIMICKING(OO.loc)) { qdel(OO); } +#define CHECK_OO_EXISTENCE(OO) if (OO && !MOVABLE_IS_ON_ZTURF(OO) && !OO.destruction_timer) { OO.destruction_timer = ZM_DESTRUCTION_TIMER(OO); } #define UPDATE_OO_IF_PRESENT CHECK_OO_EXISTENCE(bound_overlay); if (bound_overlay) { update_above(); } +// I do not apologize. + +// These aren't intended to be used anywhere else, they just can't be undef'd because DM is dum. +#define ZM_INTERNAL_SCAN_LOOKAHEAD(M,VTR,F) ((get_step(M, M:dir)?:VTR & F) || (get_step(M, turn(M:dir, 180))?:VTR & F)) +#define ZM_INTERNAL_SCAN_LOOKBESIDE(M,VTR,F) ((get_step(M, turn(M:dir, 90))?:VTR & F) || (get_step(M, turn(M:dir, -90))?:VTR & F)) + +/// Is this movable visible from a turf that is mimicking below? Note: this does not necessarily mean *directly* below. +#define MOVABLE_IS_BELOW_ZTURF(M) (\ + isturf(M:loc) && (TURF_IS_MIMICKING(M:loc:above) \ + || ((M:z_flags & ZMM_LOOKAHEAD) && ZM_INTERNAL_SCAN_LOOKAHEAD(M, above?:z_flags, ZM_MIMIC_BELOW)) \ + || ((M:z_flags & ZMM_LOOKBESIDE) && ZM_INTERNAL_SCAN_LOOKBESIDE(M, above?:z_flags, ZM_MIMIC_BELOW))) \ +) +/// Is this movable located on a turf that is mimicking below? Note: this does not necessarily mean *directly* on. +#define MOVABLE_IS_ON_ZTURF(M) (\ + (TURF_IS_MIMICKING(M:loc) \ + || ((M:z_flags & ZMM_LOOKAHEAD) && ZM_INTERNAL_SCAN_LOOKAHEAD(M, z_flags, ZM_MIMIC_BELOW)) \ + || ((M:z_flags & ZMM_LOOKBESIDE) && ZM_INTERNAL_SCAN_LOOKBESIDE(M, z_flags, ZM_MIMIC_BELOW))) \ +) +#define MOVABLE_SHALL_MIMIC(AM) (!(AM.z_flags & ZMM_IGNORE) && MOVABLE_IS_BELOW_ZTURF(AM)) + // Turf MZ flags. #define ZM_MIMIC_BELOW 1 //! If this turf should mimic the turf on the Z below. #define ZM_MIMIC_OVERWRITE 2 //! If this turf is Z-mimicking, overwrite the turf's appearance instead of using a movable. This is faster, but means the turf cannot have its own appearance (say, edges or a translucent sprite). @@ -9,10 +30,13 @@ #define ZM_ALLOW_ATMOS 8 //! If this turf permits passage of air. #define ZM_MIMIC_NO_AO 16 //! If the turf shouldn't apply regular turf AO and only do Z-mimic AO. #define ZM_NO_OCCLUDE 32 //! Don't occlude below atoms if we're a non-mimic z-turf. -#define ZM_MIMIC_BASETURF 64 //! Mimic baseturf instead of the below atom. Sometimes useful for elevators. +#define ZM_OVERRIDE 64 //! Copy only z_appearance or baseturf and bail, do not attempt to copy movables. This is significantly cheaper and allows you to override the mimic, but results in movables not being visible. +#define ZM_NO_SHADOW 128 //! If this turf is being copied, hide the shadower. +#define ZM_TERMINATOR 256 //! Consider this turf the terminus of a Z-group, like the bottom of a Z-group or a ZM_OVERRIDE turf. -// Convenience flag. -#define ZM_MIMIC_DEFAULTS (ZM_MIMIC_BELOW|ZM_ALLOW_LIGHTING) +// Convenience flags. +#define ZM_MIMIC_DEFAULTS (ZM_MIMIC_BELOW|ZM_ALLOW_LIGHTING) //! Common defaults for zturfs. +#define ZMM_WIDE_LOAD (ZMM_LOOKAHEAD | ZMM_LOOKBESIDE) //! Atom is big and needs to scan one extra turf in both X and Y. This only extends the range by one turf. Cheap, but not free. // For debug purposes, should contain the above defines in ascending order. var/global/list/mimic_defines = list( @@ -22,9 +46,13 @@ var/global/list/mimic_defines = list( "ZM_ALLOW_ATMOS", "ZM_MIMIC_NO_AO", "ZM_NO_OCCLUDE", - "ZM_MIMIC_BASETURF" + "ZM_OVERRIDE", + "ZM_NO_SHADOW", + "ZM_TERMINATOR" ) // Movable flags. -#define ZMM_IGNORE 1 //! Do not copy this movable. -#define ZMM_MANGLE_PLANES 2 //! Check this movable's overlays/underlays for explicit plane use and mangle for compatibility with Z-Mimic. If you're using emissive overlays, you probably should be using this flag. Expensive, only use if necessary. +#define ZMM_IGNORE 1 //! Do not copy this movable. +#define ZMM_MANGLE_PLANES 2 //! Check this movable's overlays/underlays for explicit plane use and mangle for compatibility with Z-Mimic. If you're using emissive overlays, you probably should be using this flag. Expensive, only use if necessary. +#define ZMM_LOOKAHEAD 3 //! Look one turf ahead and one turf back when considering z-turfs that might be seeing this atom. Cheap, but not free. +#define ZMM_LOOKBESIDE 4 //! Look one turf beside (left/right) when considering z-turfs that might be seeing this atom. Cheap, but not free. diff --git a/code/_global_vars/lists/clothing.dm b/code/_global_vars/lists/clothing.dm index a65b597aefc..4ee24c9b08f 100644 --- a/code/_global_vars/lists/clothing.dm +++ b/code/_global_vars/lists/clothing.dm @@ -35,3 +35,7 @@ var/global/list/abstract_inventory_slots = list( slot_underpants_str, slot_socks_str ) + +var/global/list/vitals_sensor_equip_slots = list( + slot_w_uniform_str +) diff --git a/code/_global_vars/lists/flavor.dm b/code/_global_vars/lists/flavor.dm index 28bf458706f..ccf00b40b7e 100644 --- a/code/_global_vars/lists/flavor.dm +++ b/code/_global_vars/lists/flavor.dm @@ -130,7 +130,8 @@ GLOBAL_GETTER(cable_colors, /list, SetupCableColors()) var/name = special_name_mappings[coil_type] || capitalize(copytext_after_last("[coil_type]", "/")) var/obj/item/stack/cable_coil/C = coil_type + if(!initial(C.can_have_color)) + continue var/color = initial(C.color) - .[name] = color . = sortTim(., /proc/cmp_text_asc) diff --git a/code/_global_vars/logging.dm b/code/_global_vars/logging.dm index 120f43d48bb..43ea604377c 100644 --- a/code/_global_vars/logging.dm +++ b/code/_global_vars/logging.dm @@ -1,11 +1,3 @@ -var/global/list/combatlog = list() -var/global/list/IClog = list() -var/global/list/OOClog = list() -var/global/list/adminlog = list() - -var/global/datum/configuration/config = null -var/global/list/jobMax = list() - var/global/diary = null GLOBAL_PROTECTED_UNTYPED(log_directory, null) diff --git a/mods/persistence/_global_vars/serialization.dm b/code/_global_vars/serialization.dm similarity index 100% rename from mods/persistence/_global_vars/serialization.dm rename to code/_global_vars/serialization.dm diff --git a/code/_helpers/animations.dm b/code/_helpers/animations.dm index 65932553d9a..b6fcccda02d 100644 --- a/code/_helpers/animations.dm +++ b/code/_helpers/animations.dm @@ -5,7 +5,7 @@ /proc/fade_out(image/I, list/show_to) animate(I, alpha = 0, time = 0.5 SECONDS, easing = EASE_IN) - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), 0.5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), 0.5 SECONDS) /proc/animate_speech_bubble(image/I, list/show_to, duration) if(!I) @@ -17,7 +17,7 @@ for(var/client/C in show_to) C.images += I animate(I, transform = 0, alpha = 255, time = 0.2 SECONDS, easing = EASE_IN) - addtimer(CALLBACK(GLOBAL_PROC, .proc/fade_out, I, show_to), (duration - 0.5 SECONDS)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fade_out), I, show_to), (duration - 0.5 SECONDS)) /proc/animate_receive_damage(atom/A) var/pixel_x_diff = rand(-2,2) @@ -53,7 +53,7 @@ /proc/flick_overlay(image/I, list/show_to, duration) for(var/client/C in show_to) C.images += I - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), duration) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), duration) /atom/movable/proc/do_attack_effect(atom/A, effect) //Simple effects for telegraphing or marking attack locations if (effect) @@ -98,4 +98,23 @@ for(var/i in 2 to segments) //2 because 1 is covered above animate(transform = matrices[i], time = speed) //doesn't have an object argument because this is "Stacking" with the animate call above - //3 billion% intentional \ No newline at end of file + //3 billion% intentional + +// This proc is used to move an atom to a target loc and then interpolite to give the illusion of sliding from start to end. +/proc/do_visual_slide(var/atom/movable/sliding, var/turf/from, var/from_pixel_x, var/from_pixel_y, var/turf/target, var/target_pixel_x, var/target_pixel_y, var/center_of_mass) + set waitfor = FALSE + var/start_pixel_x = sliding.pixel_x - ((target.x-from.x) * world.icon_size) + var/start_pixel_y = sliding.pixel_y - ((target.y-from.y) * world.icon_size) + // Clear our glide so we don't do an animation when dropped into the target turf. + var/old_animate_movement = sliding.animate_movement + sliding.animate_movement = NO_STEPS + sleep(2 * world.tick_lag) // Due to BYOND being byond, animate_movement has to be set for at least 2 ticks before gliding will be disabled. + sliding.forceMove(target) + // Reset our glide_size now that movement has completed. + sliding.animate_movement = old_animate_movement + sliding.pixel_x = start_pixel_x + sliding.pixel_y = start_pixel_y + if(center_of_mass) + target_pixel_x -= center_of_mass["x"] + target_pixel_y -= center_of_mass["y"] + animate(sliding, pixel_x = target_pixel_x, pixel_y = target_pixel_y, time = 1 SECOND) diff --git a/code/_helpers/atom_movables.dm b/code/_helpers/atom_movables.dm index 87ed5bc08a1..0d6cdf5a627 100644 --- a/code/_helpers/atom_movables.dm +++ b/code/_helpers/atom_movables.dm @@ -40,12 +40,7 @@ /atom/movable/proc/do_simple_ranged_interaction(var/mob/user) return FALSE -/atom/movable/hitby(var/atom/movable/AM) - ..() - if(density && prob(50)) - do_simple_ranged_interaction() - -/atom/movable/proc/can_be_injected_by(var/atom/injector) +/atom/movable/can_be_injected_by(var/atom/injector) if(!Adjacent(get_turf(injector))) return FALSE if(!reagents) diff --git a/code/_helpers/auxtools.dm b/code/_helpers/auxtools.dm index a7345891c7a..26ac67f7b50 100644 --- a/code/_helpers/auxtools.dm +++ b/code/_helpers/auxtools.dm @@ -11,11 +11,11 @@ var/global/auxtools_debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") /hook/startup/proc/auxtools_init() if (global.auxtools_debug_server) - call(global.auxtools_debug_server, "auxtools_init")() + LIBCALL(global.auxtools_debug_server, "auxtools_init")() enable_debugging() return TRUE /hook/shutdown/proc/auxtools_shutdown() if (global.auxtools_debug_server) - call(global.auxtools_debug_server, "auxtools_shutdown")() + LIBCALL(global.auxtools_debug_server, "auxtools_shutdown")() return TRUE diff --git a/code/_helpers/cmp.dm b/code/_helpers/cmp.dm index 1e9f0b6a0df..be876f23e92 100644 --- a/code/_helpers/cmp.dm +++ b/code/_helpers/cmp.dm @@ -134,5 +134,8 @@ /proc/cmp_gripper_asc(datum/inventory_slot/gripper/a, datum/inventory_slot/gripper/b) return a.hand_sort_priority - b.hand_sort_priority +/proc/cmp_decl_uid_asc(decl/a, decl/b) + return sorttext(b.uid, a.uid) + /proc/cmp_inventory_slot_desc(datum/inventory_slot/a, datum/inventory_slot/b) return b.quick_equip_priority - a.quick_equip_priority diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 9c75d53f886..fa69c6a25d4 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -305,14 +305,6 @@ i++ return candidates -/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) - if(!isobj(O)) O = new /obj/screen/text() - O.maptext = maptext - O.maptext_height = maptext_height - O.maptext_width = maptext_width - O.screen_loc = screen_loc - return O - /datum/projectile_data var/src_x var/src_y @@ -400,16 +392,31 @@ * Gets the highest and lowest pressures from the tiles in cardinal directions * around us, then checks the difference. */ -/proc/getOPressureDifferential(var/turf/loc) - var/minp=16777216; - var/maxp=0; +/proc/get_surrounding_pressure_differential(var/turf/loc, atom/originator) + var/minp = INFINITY + var/maxp = 0 + var/has_neighbour = FALSE + var/airblock // zeroed by ATMOS_CANPASS_TURF, declared early as microopt for(var/dir in global.cardinal) - var/turf/T = get_step(loc,dir) - var/datum/gas_mixture/environment = T.return_air() - var/cp = environment?.return_pressure() - if(cpmaxp)maxp=cp - return abs(minp-maxp) + var/turf/neighbour = get_step(loc,dir) + if(!neighbour) + continue + for(var/obj/O in loc) + if(originator && O == originator) + continue + ATMOS_CANPASS_MOVABLE(airblock, O, neighbour) + . |= airblock + if(airblock & AIR_BLOCKED) + continue + ATMOS_CANPASS_TURF(airblock, neighbour, loc) + if(airblock & AIR_BLOCKED) + continue + var/datum/gas_mixture/environment = neighbour.return_air() + var/cp = environment ? environment.return_pressure() : 0 + has_neighbour = TRUE + minp = min(minp, cp) + maxp = max(maxp, cp) + return has_neighbour ? abs(minp-maxp) : 0 /proc/convert_k2c(var/temp) return ((temp - T0C)) @@ -449,7 +456,7 @@ /proc/SecondsToTicks(var/seconds) return seconds * 10 -/proc/round_is_spooky(var/spookiness_threshold = config.cult_ghostwriter_req_cultists) +/proc/round_is_spooky(var/spookiness_threshold = get_config_value(/decl/config/num/cult_ghostwriter_req_cultists)) var/decl/special_role/cult = GET_DECL(/decl/special_role/cultist) return (cult.current_antagonists.len > spookiness_threshold) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index a9a0839a4af..7536a48afe2 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -28,6 +28,7 @@ var/global/list/string_part_flags = list( "ears" = SLOT_EARS, "upper body" = SLOT_UPPER_BODY, "lower body" = SLOT_LOWER_BODY, + "tail" = SLOT_TAIL, "legs" = SLOT_LEGS, "feet" = SLOT_FEET, "arms" = SLOT_ARMS, @@ -39,6 +40,7 @@ var/global/list/string_slot_flags = list( "back" = SLOT_BACK, "face" = SLOT_FACE, "waist" = SLOT_LOWER_BODY, + "tail" = SLOT_TAIL, "ID slot" = SLOT_ID, "ears" = SLOT_EARS, "eyes" = SLOT_EYES, diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 7c29332f3d4..fd3579e30da 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -894,7 +894,7 @@ The _flatIcons list is a cache for generated icon files. var/turf/T = locate(target_x + x_offset, target_y + y_offset, target_z) if(checker && !checker?.can_capture_turf(T)) continue - else + else if(T) render_turfs.Add(T) // - Collecting list of atoms to render - diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index 75f6b2f4433..6eb89ecd9fb 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -284,19 +284,20 @@ Checks if a list has the same entries and values as an element of big. //Returns the next element in parameter list after first appearance of parameter element. If it is the last element of the list or not present in list, returns first element. /proc/next_in_list(element, list/L) - for(var/i=1, i= L.len) + return L[1] return L[i+1] return L[1] //Returns the previous element in parameter list after first appearance of parameter element. If it is the first element of the list or not present in list, returns first element. /proc/previous_in_list(element, list/L) - for(var/i=1, i=len) - break - var/remainder = num/16 - num = round(remainder) - remainder = (remainder - num) * 16 - switch(remainder) - if(9,8,7,6,5,4,3,2,1) - . = "[remainder]" + . - if(10,11,12,13,14,15) - . = ascii2text(remainder+87) + . - else - . = "0" + . - i++ - /proc/text2numlist(text, delimiter="\n") var/list/num_list = list() for(var/x in splittext(text, delimiter)) @@ -118,6 +91,13 @@ if (BLEND_SUBTRACT) return ICON_SUBTRACT else return ICON_OVERLAY +/proc/iconMode2blendMode(icon_mode) + switch (icon_mode) + if (ICON_MULTIPLY) return BLEND_MULTIPLY + if (ICON_ADD) return BLEND_ADD + if (ICON_SUBTRACT) return BLEND_SUBTRACT + else return BLEND_OVERLAY + // Converts a rights bitfield into a string /proc/rights2text(rights,seperator="") if (rights & R_BUILDMODE) . += "[seperator]+BUILDMODE" diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index df4fcaf4d26..cca45665856 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -169,9 +169,6 @@ Turf and target are seperate in case you want to teleport some distance from a t return 1 return 0 -/proc/sign(x) - return x!=0?x/abs(x):0 - /proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm var/px=M.x //starting x var/py=M.y @@ -203,7 +200,7 @@ Turf and target are seperate in case you want to teleport some distance from a t line+=locate(px,py,M.z) return line -#define LOCATE_COORDS(X, Y, Z) locate(clamp(1, X, world.maxx), clamp(1, Y, world.maxy), Z) +#define LOCATE_COORDS(X, Y, Z) locate(clamp(X, 1, world.maxx), clamp(Y, 1, world.maxy), Z) /proc/getcircle(turf/center, var/radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle. if(!radius) return list(center) @@ -230,7 +227,7 @@ Turf and target are seperate in case you want to teleport some distance from a t #undef LOCATE_COORDS -#define LOCATE_COORDS_SAFE(X, Y, Z) locate(clamp(TRANSITIONEDGE + 1, X, world.maxx - TRANSITIONEDGE), clamp(TRANSITIONEDGE + 1, Y, world.maxy - TRANSITIONEDGE), Z) +#define LOCATE_COORDS_SAFE(X, Y, Z) locate(clamp(X, TRANSITIONEDGE + 1, world.maxx - TRANSITIONEDGE), clamp(Y, TRANSITIONEDGE + 1, world.maxy - TRANSITIONEDGE), Z) /proc/getcirclesafe(turf/center, var/radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle. if(!radius) return list(center) @@ -275,10 +272,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Ensure the frequency is within bounds of what it should be sending/recieving at /proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ) - f = round(f) - f = max(low, f) - f = min(high, f) - return f + return clamp(round(f), low, high) //Turns 1479 into 147.9 /proc/format_frequency(var/f) @@ -709,7 +703,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //For items that can puncture e.g. thick plastic but aren't necessarily sharp //Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. /obj/item/proc/can_puncture() - return src.sharp + return sharp /obj/item/screwdriver/can_puncture() return 1 @@ -723,9 +717,6 @@ Turf and target are seperate in case you want to teleport some distance from a t /obj/item/screwdriver/can_puncture() return 1 -/obj/item/shovel/can_puncture() //includes spades - return 1 - /obj/item/flame/can_puncture() return src.lit @@ -776,16 +767,10 @@ var/global/list/WALLITEMS = list( return 0 /proc/get_random_colour(var/simple = FALSE, var/lower = 0, var/upper = 255) - var/colour if(simple) - colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF")) + return pick(list("#ff0000","#ff7f00","#ffff00","#00ff00","#0000ff","#4b0082","#8f00ff")) else - for(var/i=1;i<=3;i++) - var/temp_col = "[num2hex(rand(lower,upper))]" - if(length(temp_col )<2) - temp_col = "0[temp_col]" - colour += temp_col - return "#[colour]" + return rgb(rand(lower, upper), rand(lower, upper), rand(lower, upper)) // call to generate a stack trace and print to runtime logs /proc/get_stack_trace(msg, file, line) diff --git a/code/_helpers/vis_contents.dm b/code/_helpers/vis_contents.dm deleted file mode 100644 index 5d4656426f7..00000000000 --- a/code/_helpers/vis_contents.dm +++ /dev/null @@ -1,13 +0,0 @@ -// Making these procs systematic in view of a future where we have a -// proper system for queuing/caching/updating vis contents cleanly. -#define add_vis_contents(A, B) A.vis_contents |= (B) -#define remove_vis_contents(A, B) A.vis_contents -= (B) -#define clear_vis_contents(A) A.vis_contents.Cut() -#define set_vis_contents(A, B) A.vis_contents = (B) - -/turf/proc/refresh_vis_contents() - var/new_vis_contents = get_vis_contents_to_add() - if(length(new_vis_contents)) - set_vis_contents(src, new_vis_contents) - else if(length(vis_contents)) - clear_vis_contents(src) diff --git a/code/_helpers/visual_filters.dm b/code/_helpers/visual_filters.dm index cbe1eac711c..deb7162f196 100644 --- a/code/_helpers/visual_filters.dm +++ b/code/_helpers/visual_filters.dm @@ -11,12 +11,27 @@ // Defining this for future proofing and ease of searching for erroneous usage. /image/proc/add_filter(filter_name, priority, list/params) filters += filter(arglist(params)) + return TRUE + +/atom/movable/proc/add_filter(filter_name, priority, list/params, force_update = FALSE) + + // Check if we already have a filter and hence don't need to rebuild filters. + if((filter_name in filter_data) && !force_update) + var/existing_params = filter_data[name] + if(length(params) == length(existing_params)) + var/found_difference = FALSE + for(var/param in (existing_params|params)) + if(params[param] != existing_params[param]) + found_difference = TRUE + break + if(!found_difference) + return FALSE -/atom/movable/proc/add_filter(filter_name, priority, list/params) var/list/p = params.Copy() p["priority"] = priority LAZYSET(filter_data, filter_name, p) update_filters() + return TRUE /atom/movable/proc/update_filters() filters = null @@ -40,6 +55,8 @@ LAZYREMOVE(filter_data, filter_name) filters -= thing update_filters() + return FALSE + return TRUE /// Animate a given filter on this atom. All params after the first are passed to animate(). /atom/movable/proc/animate_filter(filter_name, list/params) @@ -49,13 +66,13 @@ var/list/monkeypatched_params = params.Copy() monkeypatched_params.Insert(1, null) var/index = filter_data.Find(filter_name) - + // First, animate ourselves. - monkeypatched_params[1] = filters[index] + monkeypatched_params[1] = filters[index] animate(arglist(monkeypatched_params)) // If we're being copied by Z-Mimic, update mimics too. if (bound_overlay) for (var/atom/movable/AM as anything in get_above_oo()) monkeypatched_params[1] = AM.filters[index] - animate(arglist(monkeypatched_params)) \ No newline at end of file + animate(arglist(monkeypatched_params)) diff --git a/code/_helpers/washing.dm b/code/_helpers/washing.dm index 63d8e80d6f4..487afbd8700 100644 --- a/code/_helpers/washing.dm +++ b/code/_helpers/washing.dm @@ -1,100 +1,9 @@ /proc/wash_mob(var/mob/living/washing) - if(!istype(washing)) return - var/mob/living/L = washing - if(L.on_fire) L.visible_message("A cloud of steam rises up as the water hits \the [L]!") L.ExtinguishMob() - L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily - - if(!iscarbon(washing)) - washing.clean_blood() - return - - var/mob/living/carbon/M = washing - for(var/obj/item/thing in M.get_held_items()) - thing.clean_blood() - - var/obj/item/back = M.get_equipped_item(slot_back_str) - if(back) - back.clean_blood() - - //flush away reagents on the skin - var/datum/reagents/touching_reagents = M.get_contact_reagents() - if(touching_reagents) - var/remove_amount = touching_reagents.maximum_volume * M.reagent_permeability() //take off your suit first - touching_reagents.remove_any(remove_amount) - - if(!ishuman(M)) - var/obj/item/mask = M.get_equipped_item(slot_wear_mask_str) - if(mask) - mask.clean_blood() - M.clean_blood() - return - - var/mob/living/carbon/human/H = M - var/washgloves = 1 - var/washshoes = 1 - var/washmask = 1 - var/washears = 1 - var/washglasses = 1 - - var/obj/item/suit = H.get_equipped_item(slot_wear_suit_str) - if(suit) - washgloves = !(suit.flags_inv & HIDEGLOVES) - washshoes = !(suit.flags_inv & HIDESHOES) - - var/obj/item/head = H.get_equipped_item(slot_head_str) - if(head) - washmask = !(head.flags_inv & HIDEMASK) - washglasses = !(head.flags_inv & HIDEEYES) - washears = !(head.flags_inv & HIDEEARS) - - var/obj/item/mask = M.get_equipped_item(slot_wear_mask_str) - if(mask) - if (washears) - washears = !(mask.flags_inv & HIDEEARS) - if (washglasses) - washglasses = !(mask.flags_inv & HIDEEYES) - - if(head) - head.clean_blood() - - if(suit) - suit.clean_blood() - else - var/obj/item/uniform = H.get_equipped_item(slot_w_uniform_str) - if(uniform) - uniform.clean_blood() - - if(washgloves) - var/obj/item/gloves = H.get_equipped_item(slot_gloves_str) - if(gloves) - gloves.clean_blood() - - var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) - if(shoes && washshoes) - shoes.clean_blood() - if(mask && washmask) - mask.clean_blood() - if(washglasses) - var/obj/item/glasses = H.get_equipped_item(slot_glasses_str) - if(glasses) - glasses.clean_blood() - - if(washears) - var/obj/item/ear = H.get_equipped_item(slot_l_ear_str) - if(ear) - ear.clean_blood() - ear = H.get_equipped_item(slot_r_ear_str) - if(ear) - ear.clean_blood() - - var/obj/item/belt = H.get_equipped_item(slot_belt_str) - if(belt) - belt.clean_blood() - H.clean_blood(washshoes) + washing.clean() diff --git a/code/_macros.dm b/code/_macros.dm index 9cee22e70fc..6850573b160 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -24,7 +24,7 @@ #define isatom(A) isloc(A) -#define isbrain(A) istype(A, /mob/living/carbon/brain) +#define isbrain(A) istype(A, /mob/living/brain) #define iscarbon(A) istype(A, /mob/living/carbon) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index f9c1669eb2d..abb55bfe116 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -79,7 +79,7 @@ it functions and re-insert it above. */ /mob/living/silicon/ai/UnarmedAttack(atom/A) - A.attack_ai(src) + return A.attack_ai(src) /mob/living/silicon/ai/RangedAttack(atom/A, var/params) A.attack_ai(src) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index b7ec77eacc7..d2eef0616a9 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -114,8 +114,9 @@ //Atoms on your person // A is your location but is not a turf; or is on you (backpack); or is on something on you (box in backpack); sdepth is needed here because contents depth does not equate inventory storage depth. var/sdepth = A.storage_depth(src) + var/can_wield_item = check_dexterity(DEXTERITY_WIELD_ITEM, silent = TRUE) if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1)) - if(W) + if(W && can_wield_item) var/resolved = W.resolve_attackby(A, src, params) if(!resolved && A && W) W.afterattack(A, src, 1, params) // 1 indicates adjacency @@ -135,7 +136,7 @@ sdepth = A.storage_depth_turf() if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) if(A.Adjacent(src)) // see adjacent.dm - if(W) + if(W && can_wield_item) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) var/resolved = W.resolve_attackby(A,src, params) if(!resolved && A && W) @@ -160,7 +161,7 @@ next_move = max(world.time + timeout, next_move) /mob/proc/canClick() - if(config.no_click_cooldown || next_move <= world.time) + if(get_config_value(/decl/config/toggle/no_click_cooldown) || next_move <= world.time) return 1 return 0 @@ -178,20 +179,37 @@ proximity_flag is not currently passed to attack_hand, and is instead used in human click code to allow glove touches only at melee range. + + Returns TRUE if no further processing is desired, FALSE otherwise. */ /mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag) return /mob/living/UnarmedAttack(var/atom/A, var/proximity_flag) - if(GAME_STATE < RUNLEVEL_GAME) to_chat(src, "You cannot attack people before the game has started.") - return 0 + return TRUE - if(stat) - return 0 + if(stat || try_maneuver(A)) + return TRUE - return 1 + // Handle any prepared ability/spell/power invocations. + var/datum/extension/abilities/abilities = get_extension(src, /datum/extension/abilities) + if(abilities?.do_melee_invocation(A)) + return TRUE + + // Special glove functions: + // If the gloves do anything, have them return 1 to stop + // normal attack_hand() here. + var/obj/item/clothing/gloves/G = get_equipped_item(slot_gloves_str) // not typecast specifically enough in defines + if(istype(G) && G.Touch(A,1)) + return TRUE + + // Pick up items. + if(check_dexterity(DEXTERITY_HOLD_ITEM, silent = TRUE)) + return A.attack_hand(src) + + return FALSE /* Ranged unarmed attack: @@ -204,6 +222,17 @@ /mob/proc/RangedAttack(var/atom/A, var/params) return FALSE +/mob/living/RangedAttack(var/atom/A, var/params) + if(try_maneuver(A)) + return TRUE + + // Handle any prepared ability/spell/power invocations. + var/datum/extension/abilities/abilities = get_extension(src, /datum/extension/abilities) + if(abilities?.do_ranged_invocation(A)) + return TRUE + + return FALSE + /* Restrained ClickOn @@ -264,7 +293,7 @@ A.AltClick(src) /atom/proc/AltClick(var/mob/user) - if(try_handle_interactions(user, get_alt_interactions(user))) + if(try_handle_interactions(user, get_alt_interactions(user), user?.get_active_hand())) return TRUE if(user?.get_preference_value(/datum/client_preference/show_turf_contents) == PREF_ALT_CLICK) . = show_atom_list_for_turf(user, get_turf(src)) @@ -332,46 +361,3 @@ if(facing_dir) facing_dir = direction facedir(direction) - -var/global/list/click_catchers -/proc/get_click_catchers() - if(!global.click_catchers) - global.click_catchers = list() - var/ox = -(round(config.max_client_view_x*0.5)) - for(var/i = 0 to config.max_client_view_x) - var/oy = -(round(config.max_client_view_y*0.5)) - var/tx = ox + i - for(var/j = 0 to config.max_client_view_y) - var/ty = oy + j - var/obj/screen/click_catcher/CC = new - CC.screen_loc = "CENTER[tx < 0 ? tx : "+[tx]"],CENTER[ty < 0 ? ty : "+[ty]"]" - CC.x_offset = tx - CC.y_offset = ty - global.click_catchers += CC - return global.click_catchers - -/obj/screen/click_catcher - icon = 'icons/mob/screen_gen.dmi' - icon_state = "click_catcher" - plane = CLICKCATCHER_PLANE - mouse_opacity = MOUSE_OPACITY_PRIORITY - screen_loc = "CENTER-7,CENTER-7" - var/x_offset = 0 - var/y_offset = 0 - -/obj/screen/click_catcher/Destroy() - SHOULD_CALL_PARENT(FALSE) - return QDEL_HINT_LETMELIVE - -/obj/screen/click_catcher/Click(location, control, params) - var/list/modifiers = params2list(params) - if(modifiers["middle"] && iscarbon(usr)) - var/mob/living/carbon/C = usr - C.swap_hand() - else - var/turf/origin = get_turf(usr) - if(isturf(origin)) - var/turf/clicked = locate(origin.x + x_offset, origin.y + y_offset, origin.z) - if(clicked) - clicked.Click(location, control, params) - . = 1 diff --git a/code/_onclick/click_handling.dm b/code/_onclick/click_handling.dm index 472249544ec..08d1ec3b579 100644 --- a/code/_onclick/click_handling.dm +++ b/code/_onclick/click_handling.dm @@ -28,11 +28,11 @@ var/global/const/CLICK_HANDLER_ALL = (CLICK_HANDLER_NONE|CLICK_ ..() src.user = user if(flags & (CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT)) - events_repository.register(/decl/observ/logged_out, user, src, /datum/click_handler/proc/OnMobLogout) + events_repository.register(/decl/observ/logged_out, user, src, TYPE_PROC_REF(/datum/click_handler, OnMobLogout)) /datum/click_handler/Destroy() if(flags & (CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT)) - events_repository.unregister(/decl/observ/logged_out, user, src, /datum/click_handler/proc/OnMobLogout) + events_repository.unregister(/decl/observ/logged_out, user, src, TYPE_PROC_REF(/datum/click_handler, OnMobLogout)) user = null . = ..() diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index e7dfe6206f5..24024e5c003 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -72,7 +72,8 @@ return // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) - if(A == loc || (A in loc) || (A in contents)) + var/can_wield_item = check_dexterity(DEXTERITY_WIELD_ITEM, silent = TRUE) + if(can_wield_item && (A == loc || (A in loc) || (A in contents))) // No adjacency checks var/resolved = W.resolve_attackby(A, src, params) @@ -84,7 +85,7 @@ return var/sdepth = A.storage_depth_turf() - if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) + if(can_wield_item && (isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))) if(A.Adjacent(src)) // see adjacent.dm var/resolved = W.resolve_attackby(A, src, params) @@ -170,11 +171,10 @@ change attack_robot() above to the proper function */ /mob/living/silicon/robot/UnarmedAttack(atom/A) - A.attack_robot(src) + return A.attack_robot(src) /mob/living/silicon/robot/RangedAttack(atom/A, var/params) - A.attack_robot(src) - return TRUE + return A.attack_robot(src) /atom/proc/attack_robot(mob/user) return attack_ai(user) diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 4d2168073f8..2a58fec94dc 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -4,38 +4,38 @@ almost anything into a trash can. */ -/atom/MouseDrop(atom/over) +/atom/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) SHOULD_CALL_PARENT(TRUE) - if(!can_mouse_drop(over, usr) || !handle_mouse_drop(over, usr)) + if(!can_mouse_drop(over_object, usr, params = params) || !handle_mouse_drop(over_object, usr, params)) . = ..() -/atom/proc/handle_mouse_drop(var/atom/over, var/mob/user) - . = over?.receive_mouse_drop(src, user) +/atom/proc/handle_mouse_drop(atom/over, mob/user, params) + . = over?.receive_mouse_drop(src, user, params) // Can the user drop something onto this atom? -/atom/proc/user_can_mousedrop_onto(var/mob/user, var/atom/being_dropped, var/incapacitation_flags) - return !user.incapacitated(incapacitation_flags) && check_mousedrop_interactivity(user) && user.check_dexterity(DEXTERITY_EQUIP_ITEM) +/atom/proc/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params) + return !user.incapacitated(incapacitation_flags) && check_mousedrop_interactivity(user, params) && user.check_dexterity(DEXTERITY_EQUIP_ITEM, silent = TRUE) -/atom/proc/check_mousedrop_interactivity(var/mob/user) +/atom/proc/check_mousedrop_interactivity(mob/user, params) return CanPhysicallyInteract(user) // This proc checks if an atom can be mousedropped onto the target by the user. -/atom/proc/can_mouse_drop(var/atom/over, var/mob/user = usr, var/incapacitation_flags = INCAPACITATION_DEFAULT) +/atom/proc/can_mouse_drop(var/atom/over, var/mob/user = usr, var/incapacitation_flags = INCAPACITATION_DEFAULT, var/params) SHOULD_CALL_PARENT(TRUE) if(!istype(user) || !istype(over) ||QDELETED(user) || QDELETED(over) || QDELETED(src)) return FALSE - if(!over.user_can_mousedrop_onto(user, src, incapacitation_flags)) + if(!over.user_can_mousedrop_onto(user, src, incapacitation_flags, params)) return FALSE - if(!check_mousedrop_adjacency(over, user)) + if(!check_mousedrop_adjacency(over, user, params)) return FALSE return TRUE -/atom/proc/check_mousedrop_adjacency(var/atom/over, var/mob/user) +/atom/proc/check_mousedrop_adjacency(atom/over, mob/user, params) . = (Adjacent(user) && ((over in user?.client?.screen) || over.Adjacent(user))) // Receive a mouse drop. // Returns false if the atom is valid for dropping further up the chain, true if the drop has been handled. -/atom/proc/receive_mouse_drop(var/atom/dropping, var/mob/user) +/atom/proc/receive_mouse_drop(atom/dropping, mob/user, params) var/mob/living/H = user if(istype(H) && !H.anchored && can_climb(H) && dropping == user) do_climb(dropping) diff --git a/code/_onclick/ghost.dm b/code/_onclick/ghost.dm index 8a93cd5118f..da5d187674d 100644 --- a/code/_onclick/ghost.dm +++ b/code/_onclick/ghost.dm @@ -28,7 +28,7 @@ if(!canClick()) return setClickCooldown(DEFAULT_QUICK_COOLDOWN) - // You are responsible for checking config.ghost_interaction when you override this function + // You are responsible for checking ghost_interaction when you override this function // Not all of them require checking, see below var/list/modifiers = params2list(params) if(modifiers["alt"]) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 705994a1400..f13491832f4 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -163,3 +163,6 @@ #define ui_pai_shell "TOP,LEFT+2:6" #define ui_pai_light "TOP,LEFT+3:6" #define ui_pai_rest "TOP,LEFT+4:6" + +// storage menu +#define ui_storage_default "LEFT+7,BOTTOM+7 to LEFT+10,BOTTOM+8" diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 895f2fae9ac..547c81a2f75 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -119,83 +119,6 @@ /datum/action/proc/UpdateDesc() return desc -/obj/screen/action_button - var/datum/action/owner - screen_loc = "LEFT,TOP" - -/obj/screen/action_button/Click(location,control,params) - if(owner && usr && usr.next_move < world.time) - owner.Trigger() - return TRUE - return FALSE - -/obj/screen/action_button/proc/UpdateIcon() - if(!owner) - return - icon = owner.button_icon - icon_state = owner.background_icon_state - - overlays.Cut() - var/image/img - if(owner.action_type == AB_ITEM && owner.target) - var/obj/item/I = owner.target - img = image(I.icon, src , I.icon_state) - else if(owner.button_icon && owner.button_icon_state) - img = image(owner.button_icon,src,owner.button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 - overlays += img - - if(!owner.IsAvailable()) - color = rgb(128,0,0,128) - else - color = rgb(255,255,255,255) - -/obj/screen/action_button/MouseEntered(location, control, params) - openToolTip(user = usr, tip_src = src, params = params, title = name, content = desc) - ..() - -/obj/screen/action_button/MouseDown() - closeToolTip(usr) - ..() - -/obj/screen/action_button/MouseExited() - closeToolTip(usr) - ..() - -//Hide/Show Action Buttons ... Button -/obj/screen/action_button/hide_toggle - name = "Hide Buttons" - icon = 'icons/obj/action_buttons/actions.dmi' - icon_state = "bg_default" - var/hidden = 0 - -/obj/screen/action_button/hide_toggle/Click() - usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden - - hidden = usr.hud_used.action_buttons_hidden - if(hidden) - name = "Show Buttons" - else - name = "Hide Buttons" - UpdateIcon() - usr.update_action_buttons() - - -/obj/screen/action_button/hide_toggle/proc/InitialiseIcon(var/mob/living/user) - if(isalien(user)) - icon_state = "bg_alien" - else - icon_state = "bg_default" - UpdateIcon() - return - -/obj/screen/action_button/hide_toggle/UpdateIcon() - overlays.Cut() - var/image/img = image(icon,src,hidden?"show":"hide") - overlays += img - return - //This is the proc used to update all the action buttons. Properly defined in /mob/living/ /mob/proc/update_action_buttons() return diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 40b6339f64d..b2cb9c202b8 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -4,13 +4,5 @@ /datum/hud/ai/FinalizeInstantiation() var/list/ai_hud_data = decls_repository.get_decls_of_subtype(/decl/ai_hud) for(var/elem_type in ai_hud_data) - var/decl/ai_hud/ai_hud = ai_hud_data[elem_type] - adding += new /obj/screen/ai_button(null, - ai_hud.screen_loc, - ai_hud.name, - ai_hud.icon_state, - ai_hud.proc_path, - ai_hud.input_procs, - ai_hud.input_args - ) + adding += new /obj/screen/ai_button(null, mymob, null, null, null, null, ai_hud_data[elem_type]) ..() diff --git a/code/_onclick/hud/ai_hud.dm b/code/_onclick/hud/ai_hud.dm index fa4e2200bb6..b8edcf540c4 100644 --- a/code/_onclick/hud/ai_hud.dm +++ b/code/_onclick/hud/ai_hud.dm @@ -11,70 +11,70 @@ screen_loc = ui_ai_core name = "AI Core" icon_state = "ai_core" - proc_path = /mob/living/silicon/ai/proc/core + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, core) /decl/ai_hud/ai_announcement screen_loc = ui_ai_announcement name = "AI Announcement" icon_state = "announcement" - proc_path = /mob/living/silicon/ai/proc/ai_announcement + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_announcement) /decl/ai_hud/ai_cam_track screen_loc = ui_ai_cam_track name = "Track With Camera" icon_state = "track" - proc_path = /mob/living/silicon/ai/proc/ai_camera_track + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_camera_track) input_procs = list(/mob/living/silicon/ai/proc/trackable_mobs = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) /decl/ai_hud/ai_cam_light screen_loc = ui_ai_cam_light name = "Toggle Camera Lights" icon_state = "camera_light" - proc_path = /mob/living/silicon/ai/proc/toggle_camera_light + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, toggle_camera_light) /decl/ai_hud/ai_cam_change_channel screen_loc = ui_ai_cam_change_channel name = "Jump to Camera Channel" icon_state = "camera" - proc_path = /mob/living/silicon/ai/proc/ai_channel_change + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_channel_change) input_procs = list(/mob/living/silicon/ai/proc/get_camera_channel_list = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) /decl/ai_hud/ai_sensor screen_loc = ui_ai_sensor name = "Set Sensor Mode" icon_state = "ai_sensor" - proc_path = /mob/living/silicon/ai/proc/sensor_mode + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, sensor_mode) /decl/ai_hud/ai_manifest screen_loc = ui_ai_crew_manifest name = "Show Crew Manifest" icon_state = "manifest" - proc_path = /mob/living/silicon/ai/proc/run_program + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, run_program) input_args = list("crewmanifest") /decl/ai_hud/ai_take_image screen_loc = ui_ai_take_image name = "Toggle Camera Mode" icon_state = "take_picture" - proc_path = /mob/living/silicon/ai/proc/ai_take_image + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_take_image) /decl/ai_hud/ai_view_images screen_loc = ui_ai_view_images name = "View Images" icon_state = "view_images" - proc_path = /mob/living/silicon/ai/proc/ai_view_images + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_view_images) /decl/ai_hud/ai_laws screen_loc = ui_ai_state_laws name = "State Laws" icon_state = "state_laws" - proc_path = /mob/living/silicon/ai/proc/ai_checklaws + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_checklaws) /decl/ai_hud/ai_call_shuttle screen_loc = ui_ai_call_shuttle name = "Call Shuttle" icon_state = "call_shuttle" - proc_path = /mob/living/silicon/ai/proc/ai_call_shuttle + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_call_shuttle) /decl/ai_hud/ai_up screen_loc = ui_ai_up @@ -92,53 +92,53 @@ screen_loc = ui_ai_color name = "Change Floor Color" icon_state = "ai_floor" - proc_path = /mob/living/silicon/ai/proc/change_floor + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, change_floor) /decl/ai_hud/ai_hologram screen_loc = ui_ai_holo_change name = "Change Hologram" icon_state = "ai_holo_change" - proc_path = /mob/living/silicon/ai/proc/ai_hologram_change + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_hologram_change) /decl/ai_hud/ai_crew_monitor screen_loc = ui_ai_crew_mon name = "Crew Monitor" icon_state = "crew_monitor" - proc_path = /mob/living/silicon/ai/proc/run_program + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, run_program) input_args = list("sensormonitor") /decl/ai_hud/ai_power_override screen_loc = ui_ai_power_override name = "Toggle Power Override" icon_state = "ai_p_override" - proc_path = /mob/living/silicon/ai/proc/ai_power_override + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_power_override) /decl/ai_hud/ai_shutdown screen_loc = ui_ai_shutdown name = "Shutdown" icon_state = "ai_shutdown" - proc_path = /mob/living/silicon/ai/proc/ai_shutdown + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_shutdown) /decl/ai_hud/ai_move_hologram screen_loc = ui_ai_holo_mov name = "Toggle Hologram Movement" icon_state = "ai_holo_mov" - proc_path = /mob/living/silicon/ai/proc/toggle_hologram_movement + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, toggle_hologram_movement) /decl/ai_hud/ai_core_icon screen_loc = ui_ai_core_icon name = "Pick Icon" icon_state = "ai_core_pick" - proc_path = /mob/living/silicon/ai/proc/pick_icon + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, pick_icon) /decl/ai_hud/ai_status screen_loc = ui_ai_status name = "Pick Status" icon_state = "ai_status" - proc_path = /mob/living/silicon/ai/proc/ai_statuschange + proc_path = TYPE_PROC_REF(/mob/living/silicon/ai, ai_statuschange) /decl/ai_hud/ai_inbuilt_comp screen_loc = ui_ai_crew_rec name = "Inbuilt Computer" icon_state = "ai_crew_rec" - proc_path = /mob/living/silicon/proc/access_computer + proc_path = TYPE_PROC_REF(/mob/living/silicon, access_computer) diff --git a/code/_onclick/hud/animal.dm b/code/_onclick/hud/animal.dm index 81868526a39..b301a6521a9 100644 --- a/code/_onclick/hud/animal.dm +++ b/code/_onclick/hud/animal.dm @@ -3,7 +3,7 @@ hud_type = /datum/hud/animal /datum/hud/animal/FinalizeInstantiation() - action_intent = new /obj/screen/intent() + action_intent = new(null, mymob, get_ui_style_data(), get_ui_color(), get_ui_alpha(), UI_ICON_INTENT) adding += action_intent ..() diff --git a/code/_onclick/hud/deity.dm b/code/_onclick/hud/deity.dm index f570e96b1e2..5c9f2152f12 100644 --- a/code/_onclick/hud/deity.dm +++ b/code/_onclick/hud/deity.dm @@ -2,49 +2,8 @@ hud_type = /datum/hud/deity /datum/hud/deity/FinalizeInstantiation() - action_intent = new /obj/screen/intent/deity + action_intent = new /obj/screen/intent/deity(null, mymob) adding += action_intent ..() var/obj/screen/intent/deity/D = action_intent D.sync_to_mob(mymob) - -/obj/screen/intent/deity - var/list/desc_screens = list() - screen_loc = "RIGHT-5:122,BOTTOM:8" - -/obj/screen/intent/deity/Initialize() - . = ..() - overlays += image('icons/mob/screen_phenomena.dmi', icon_state = "hud", pixel_x = -138, pixel_y = -1) - -/obj/screen/intent/deity/proc/sync_to_mob(var/mob) - var/mob/living/deity/D = mob - for(var/i in 1 to D.control_types.len) - var/obj/screen/S = new() - S.SetName(null) //Don't want them to be able to actually right click it. - S.mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - S.icon_state = "blank" - desc_screens[D.control_types[i]] = S - S.maptext_width = 128 - S.screen_loc = screen_loc - //This sets it up right. Trust me. - S.maptext_y = 33/2*i - i*i/2 - 10 - D.client.screen += S - S.maptext_x = -125 - - update_text() - -/obj/screen/intent/deity/proc/update_text() - if(!isdeity(usr)) - return - var/mob/living/deity/D = usr - for(var/i in D.control_types) - var/obj/screen/S = desc_screens[i] - var/datum/phenomena/P = D.intent_phenomenas[intent][i] - if(P) - S.maptext = "[P.name]" - else - S.maptext = null - -/obj/screen/intent/deity/Click(var/location, var/control, var/params) - ..() - update_text() \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index cf42a0e99ab..9efc84cdfd6 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -16,7 +16,7 @@ return null if(!screen) - screen = new type() + screen = new type(null, src) screen.icon_state = "[initial(screen.icon_state)][severity]" screen.severity = severity @@ -70,100 +70,3 @@ screen.transform = M client.screen |= screen -/obj/screen/fullscreen - icon = 'icons/mob/screen_full.dmi' - icon_state = "default" - screen_loc = ui_center_fullscreen - plane = FULLSCREEN_PLANE - layer = FULLSCREEN_LAYER - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - var/severity = 0 - var/allstate = 0 //shows if it should show up for dead people too - -/obj/screen/fullscreen/Destroy() - severity = 0 - return ..() - -/obj/screen/fullscreen/brute - icon_state = "brutedamageoverlay" - layer = DAMAGE_LAYER - -/obj/screen/fullscreen/oxy - icon_state = "oxydamageoverlay" - layer = DAMAGE_LAYER - -/obj/screen/fullscreen/crit - icon_state = "passage" - layer = CRIT_LAYER - -/obj/screen/fullscreen/blind - icon_state = "blackimageoverlay" - layer = BLIND_LAYER - -/obj/screen/fullscreen/blackout - icon = 'icons/mob/screen1.dmi' - icon_state = "black" - screen_loc = ui_entire_screen - layer = BLIND_LAYER - -/obj/screen/fullscreen/impaired - icon_state = "impairedoverlay" - layer = IMPAIRED_LAYER - -/obj/screen/fullscreen/blurry - icon = 'icons/mob/screen1.dmi' - screen_loc = ui_entire_screen - icon_state = "blurry" - alpha = 100 - -/obj/screen/fullscreen/flash - icon = 'icons/mob/screen1.dmi' - screen_loc = ui_entire_screen - icon_state = "flash" - -/obj/screen/fullscreen/flash/noise - icon_state = "noise" - -/obj/screen/fullscreen/high - icon = 'icons/mob/screen1.dmi' - screen_loc = ui_entire_screen - icon_state = "druggy" - alpha = 180 - blend_mode = BLEND_MULTIPLY - -/obj/screen/fullscreen/noise - icon = 'icons/effects/static.dmi' - icon_state = "1 light" - screen_loc = ui_entire_screen - alpha = 127 - -/obj/screen/fullscreen/fadeout - icon = 'icons/mob/screen1.dmi' - icon_state = "black" - screen_loc = ui_entire_screen - alpha = 0 - allstate = 1 - -/obj/screen/fullscreen/fadeout/Initialize() - . = ..() - animate(src, alpha = 255, time = 10) - -/obj/screen/fullscreen/scanline - icon = 'icons/effects/static.dmi' - icon_state = "scanlines" - screen_loc = ui_entire_screen - alpha = 50 - -/obj/screen/fullscreen/fishbed - icon_state = "fishbed" - allstate = 1 - -/obj/screen/fullscreen/pain - icon_state = "brutedamageoverlay6" - alpha = 0 - -/obj/screen/fullscreen/blueprints - icon = 'icons/effects/blueprints.dmi' - icon_state = "base" - screen_loc = ui_entire_screen - alpha = 100 diff --git a/code/_onclick/hud/global_hud.dm b/code/_onclick/hud/global_hud.dm index 8bcfb40027f..9073d9aab6d 100644 --- a/code/_onclick/hud/global_hud.dm +++ b/code/_onclick/hud/global_hud.dm @@ -10,38 +10,22 @@ var/global/datum/global_hud/hud return global.hud /datum/global_hud - var/obj/screen/nvg - var/obj/screen/thermal - var/obj/screen/meson - var/obj/screen/science - var/obj/screen/holomap + var/obj/screen/global_hud/nvg + var/obj/screen/global_hud/thermal + var/obj/screen/global_hud/meson + var/obj/screen/global_hud/science + var/obj/screen/global_holomap/holomap // makes custom colored overlay, can also generate scanline /datum/global_hud/proc/setup_overlay(icon_state, color) - var/obj/screen/screen = new /obj/screen() - screen.screen_loc = ui_entire_screen - screen.icon = 'icons/effects/hud_full.dmi' + var/obj/screen/global_hud/screen = new(null) screen.icon_state = icon_state - screen.plane = FULLSCREEN_PLANE - screen.layer = FULLSCREEN_LAYER - screen.mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - screen.alpha = 125 - screen.blend_mode = BLEND_MULTIPLY screen.color = color return screen /datum/global_hud/New() - nvg = setup_overlay("scanline", "#06ff00") + nvg = setup_overlay("scanline", "#06ff00") thermal = setup_overlay("scanline", "#ff0000") - meson = setup_overlay("scanline", "#9fd800") + meson = setup_overlay("scanline", "#9fd800") science = setup_overlay("scanline", "#d600d6") - - //Holomap screen object is invisible and work - //By setting it as n images location, without icon changes - //Make it part of global hud since it's inmutable - holomap = new /obj/screen() - holomap.name = "holomap" - holomap.icon = null - holomap.layer = HUD_BASE_LAYER - holomap.screen_loc = UI_HOLOMAP - holomap.mouse_opacity = MOUSE_OPACITY_UNCLICKABLE \ No newline at end of file + holomap = new(null) diff --git a/code/_onclick/hud/gun_mode.dm b/code/_onclick/hud/gun_mode.dm deleted file mode 100644 index 349fce96b0f..00000000000 --- a/code/_onclick/hud/gun_mode.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/screen/gun - name = "gun" - icon = 'icons/mob/screen1.dmi' - dir = SOUTH - -/obj/screen/gun/Click(location, control, params) - if(!usr) - return - return 1 - -/obj/screen/gun/move - name = "Allow Movement" - icon_state = "no_walk1" - screen_loc = ui_gun2 - -/obj/screen/gun/move/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_MOVE) - return 1 - return 0 - -/obj/screen/gun/item - name = "Allow Item Use" - icon_state = "no_item1" - screen_loc = ui_gun1 - -/obj/screen/gun/item/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_CLICK) - return 1 - return 0 - -/obj/screen/gun/mode - name = "Toggle Gun Mode" - icon_state = "gun0" - screen_loc = ui_gun_select - -/obj/screen/gun/mode/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_active() - return 1 - return 0 - -/obj/screen/gun/radio - name = "Disallow Radio Use" - icon_state = "no_radio1" - screen_loc = ui_gun4 - -/obj/screen/gun/radio/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_RADIO) - return 1 - return 0 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index e308e449aef..4fcc575748d 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -25,11 +25,12 @@ var/show_intent_icons = FALSE var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) - var/obj/screen/lingchemdisplay + var/default_ui_style = /decl/ui_style/midnight + var/list/hand_hud_objects var/list/swaphand_hud_objects - var/obj/screen/action_intent - var/obj/screen/move_intent + var/obj/screen/intent/action_intent + var/obj/screen/movement/move_intent var/obj/screen/stamina/stamina_bar var/list/adding = list() @@ -48,7 +49,6 @@ /datum/hud/Destroy() . = ..() stamina_bar = null - lingchemdisplay = null action_intent = null move_intent = null adding = null @@ -115,6 +115,7 @@ /datum/hud/proc/FinalizeInstantiation() SHOULD_CALL_PARENT(TRUE) BuildInventoryUI() + BuildHandsUI() if(mymob.client) mymob.client.screen = list() if(length(hand_hud_objects)) @@ -129,8 +130,13 @@ mymob.client.screen |= hotkeybuttons hide_inventory() -/datum/hud/proc/get_ui_style() - return ui_style2icon(mymob?.client?.prefs?.UI_style) || 'icons/mob/screen/white.dmi' +/datum/hud/proc/get_ui_style_data() + RETURN_TYPE(/decl/ui_style) + . = GET_DECL(mymob?.client?.prefs?.UI_style) || GET_DECL(default_ui_style) + if(!.) + var/list/available_styles = get_ui_styles() + if(length(available_styles)) + . = available_styles[1] /datum/hud/proc/get_ui_color() return mymob?.client?.prefs?.UI_style_color || COLOR_WHITE @@ -140,7 +146,7 @@ /datum/hud/proc/rebuild_hands() - var/ui_style = get_ui_style() + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() @@ -153,7 +159,7 @@ gripper_datums += mymob.get_inventory_slot_datum(hand_tag) gripper_datums = sortTim(gripper_datums, /proc/cmp_gripper_asc) - for(var/datum/inventory_slot/inv_slot in gripper_datums) + for(var/datum/inventory_slot/gripper/inv_slot in gripper_datums) // Re-order the held slot list so it aligns with the display order. var/hand_tag = inv_slot.slot_id @@ -165,21 +171,24 @@ if(existing_box.slot_id == hand_tag) inv_box = existing_box break + if(!inv_box) - inv_box = new /obj/screen/inventory(null, mymob) + inv_box = new /obj/screen/inventory(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HANDS) + else + inv_box.set_ui_style(ui_style, UI_ICON_HANDS) + inv_box.color = ui_color + inv_box.alpha = ui_alpha + inv_box.SetName(hand_tag) - inv_box.icon = ui_style inv_box.icon_state = "hand_base" inv_box.cut_overlays() - inv_box.add_overlay("hand_[hand_tag]", TRUE) + inv_box.add_overlay("hand_[inv_slot.hand_overlay || hand_tag]", TRUE) if(inv_slot.ui_label) inv_box.add_overlay("hand_[inv_slot.ui_label]", TRUE) inv_box.update_icon() inv_box.slot_id = hand_tag - inv_box.color = ui_color - inv_box.alpha = ui_alpha inv_box.appearance_flags |= KEEP_TOGETHER LAZYDISTINCTADD(hand_hud_objects, inv_box) @@ -209,8 +218,9 @@ inv_box = sublist[2] inv_box.screen_loc = "CENTER:[world.icon_size/2],BOTTOM:[hand_y_offset]" hand_y_offset += world.icon_size - if(mymob.client) - mymob.client.screen |= inv_box + + if(mymob.client && islist(hand_hud_objects) && length(hand_hud_objects)) + mymob.client.screen |= hand_hud_objects // Make sure all held items are on the screen and set to the correct screen loc. var/datum/inventory_slot/inv_slot @@ -235,7 +245,7 @@ /datum/hud/proc/BuildInventoryUI() - var/ui_style = get_ui_style() + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() @@ -250,10 +260,7 @@ if(gear_slot in held_slots) continue - inv_box = new /obj/screen/inventory(null, mymob) - inv_box.icon = ui_style - inv_box.color = ui_color - inv_box.alpha = ui_alpha + inv_box = new /obj/screen/inventory(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INVENTORY) var/datum/inventory_slot/inv_slot = inventory_slots[gear_slot] inv_box.SetName(inv_slot.slot_name) @@ -271,51 +278,29 @@ adding += inv_box if(has_hidden_gear) - var/obj/screen/using = new /obj/screen() - using.SetName("toggle") - using.icon = ui_style - using.icon_state = "other" - using.screen_loc = ui_inventory - using.color = ui_color - using.alpha = ui_alpha - adding += using + adding += new /obj/screen/toggle(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INVENTORY) /datum/hud/proc/BuildHandsUI() - var/ui_style = get_ui_style() + var/list/held_slots = mymob.get_held_item_slots() + if(length(held_slots) <= 0) + return + + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() - var/obj/screen/using - // Swap hand and quick equip screen elems. - using = new /obj/screen() - using.SetName("equip") - using.icon = ui_style - using.icon_state = "act_equip" - using.color = ui_color - using.alpha = ui_alpha + var/obj/screen/using = new /obj/screen/equip(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HANDS) src.adding += using LAZYADD(swaphand_hud_objects, using) - var/list/held_slots = mymob.get_held_item_slots() if(length(held_slots) > 1) - using = new /obj/screen/inventory(null, mymob) - using.SetName("hand") - using.icon = ui_style - using.icon_state = "hand1" - using.color = ui_color - using.alpha = ui_alpha + using = new /obj/screen/inventory/swaphand(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HANDS) src.adding += using LAZYADD(swaphand_hud_objects, using) - - using = new /obj/screen/inventory(null, mymob) - using.SetName("hand") - using.icon = ui_style - using.icon_state = "hand2" - using.color = ui_color - using.alpha = ui_alpha + using = new /obj/screen/inventory/swaphand/right(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HANDS) src.adding += using LAZYADD(swaphand_hud_objects, using) @@ -439,10 +424,3 @@ /mob/new_player/add_click_catcher() return - -/obj/screen/stamina - name = "stamina" - icon = 'icons/effects/progressbar.dmi' - icon_state = "prog_bar_100" - invisibility = INVISIBILITY_MAXIMUM - screen_loc = ui_stamina diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index f90bd824fde..712c50883c7 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -3,198 +3,101 @@ /datum/hud/human/FinalizeInstantiation() - var/ui_style = get_ui_style() + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() var/mob/living/carbon/human/target = mymob var/datum/hud_data/hud_data = istype(target) ? target.species.hud : new() - if(hud_data.icon) - ui_style = hud_data.icon hotkeybuttons = list() //These can be disabled for hotkey usersx - var/obj/screen/using - - stamina_bar = new + stamina_bar = new(null, mymob) adding += stamina_bar // Draw the attack intent dialogue. if(hud_data.has_a_intent) - using = new /obj/screen/intent() - src.adding += using - action_intent = using - hud_elements |= using + action_intent = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT) + src.adding += action_intent + hud_elements |= action_intent if(hud_data.has_m_intent) - using = new /obj/screen/movement() - using.SetName("movement method") - using.icon = ui_style - using.icon_state = mymob.move_intent.hud_icon_state - using.screen_loc = ui_movi - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - move_intent = using + move_intent = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_MOVEMENT) + move_intent.icon_state = mymob.move_intent.hud_icon_state + src.adding += move_intent if(hud_data.has_drop) - using = new /obj/screen() - using.SetName("drop") - using.icon = ui_style - using.icon_state = "act_drop" - using.screen_loc = ui_drop_throw - using.color = ui_color - using.alpha = ui_alpha - src.hotkeybuttons += using - - if(hud_data.has_hands) - BuildHandsUI() + src.hotkeybuttons += new /obj/screen/drop(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTERACTION) if(hud_data.has_resist) - using = new /obj/screen() - using.SetName("resist") - using.icon = ui_style - using.icon_state = "act_resist" - using.screen_loc = ui_pull_resist - using.color = ui_color - using.alpha = ui_alpha - src.hotkeybuttons += using + src.hotkeybuttons += new /obj/screen/resist(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTERACTION) + + mymob.maneuver_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTERACTION) + src.hotkeybuttons += mymob.maneuver_icon + hud_elements |= mymob.maneuver_icon if(hud_data.has_throw) - mymob.throw_icon = new /obj/screen() - mymob.throw_icon.icon = ui_style - mymob.throw_icon.icon_state = "act_throw_off" - mymob.throw_icon.SetName("throw") - mymob.throw_icon.screen_loc = ui_drop_throw - mymob.throw_icon.color = ui_color - mymob.throw_icon.alpha = ui_alpha + mymob.throw_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTERACTION) src.hotkeybuttons += mymob.throw_icon hud_elements |= mymob.throw_icon if(hud_data.has_internals) - mymob.internals = new /obj/screen() - mymob.internals.icon = ui_style - mymob.internals.icon_state = "internal0" - mymob.internals.SetName("internal") - mymob.internals.screen_loc = ui_internal + mymob.internals = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTERNALS) hud_elements |= mymob.internals if(hud_data.has_warnings) - mymob.healths = new /obj/screen() - mymob.healths.icon = ui_style - mymob.healths.icon_state = "health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = ui_health + mymob.healths = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) hud_elements |= mymob.healths - mymob.oxygen = new /obj/screen/oxygen() - mymob.oxygen.icon = 'icons/mob/status_indicators.dmi' - mymob.oxygen.icon_state = "oxy0" - mymob.oxygen.SetName("oxygen") - mymob.oxygen.screen_loc = ui_temp + mymob.oxygen = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) hud_elements |= mymob.oxygen - mymob.toxin = new /obj/screen/toxins() - mymob.toxin.icon = 'icons/mob/status_indicators.dmi' - mymob.toxin.icon_state = "tox0" - mymob.toxin.SetName("toxin") - mymob.toxin.screen_loc = ui_temp + mymob.toxin = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) hud_elements |= mymob.toxin - mymob.fire = new /obj/screen() - mymob.fire.icon = ui_style - mymob.fire.icon_state = "fire0" - mymob.fire.SetName("fire") - mymob.fire.screen_loc = ui_fire + mymob.fire = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS_FIRE) hud_elements |= mymob.fire if(hud_data.has_pressure) - mymob.pressure = new /obj/screen/pressure() - mymob.pressure.icon = 'icons/mob/status_indicators.dmi' - mymob.pressure.icon_state = "pressure0" - mymob.pressure.SetName("pressure") - mymob.pressure.screen_loc = ui_temp + mymob.pressure = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) hud_elements |= mymob.pressure if(hud_data.has_bodytemp) - mymob.bodytemp = new /obj/screen/bodytemp() - mymob.bodytemp.icon = 'icons/mob/status_indicators.dmi' - mymob.bodytemp.icon_state = "temp1" - mymob.bodytemp.SetName("body temperature") - mymob.bodytemp.screen_loc = ui_temp + mymob.bodytemp = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) hud_elements |= mymob.bodytemp if(target.isSynthetic()) - target.cells = new /obj/screen() - target.cells.icon = 'icons/mob/screen1_robot.dmi' - target.cells.icon_state = "charge-empty" - target.cells.SetName("cell") - target.cells.screen_loc = ui_nutrition + target.cells = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_CHARGE) hud_elements |= target.cells else if(hud_data.has_nutrition) - mymob.nutrition_icon = new /obj/screen/food() - mymob.nutrition_icon.icon = 'icons/mob/status_hunger.dmi' - mymob.nutrition_icon.pixel_w = 8 - mymob.nutrition_icon.icon_state = "nutrition1" - mymob.nutrition_icon.SetName("nutrition") - mymob.nutrition_icon.screen_loc = ui_nutrition_small + mymob.nutrition_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_NUTRITION) hud_elements |= mymob.nutrition_icon - mymob.hydration_icon = new /obj/screen/drink() - mymob.hydration_icon.icon = 'icons/mob/status_hunger.dmi' - mymob.hydration_icon.icon_state = "hydration1" - mymob.hydration_icon.SetName("hydration") - mymob.hydration_icon.screen_loc = ui_nutrition_small + mymob.hydration_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HYDRATION) hud_elements |= mymob.hydration_icon if(hud_data.has_up_hint) - mymob.up_hint = new /obj/screen() - mymob.up_hint.icon = ui_style - mymob.up_hint.icon_state = "uphint0" - mymob.up_hint.SetName("up hint") - mymob.up_hint.screen_loc = ui_up_hint + mymob.up_hint = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_UP_HINT) hud_elements |= mymob.up_hint - mymob.pain = new /obj/screen/fullscreen/pain( null ) + mymob.pain = new(null, mymob) hud_elements |= mymob.pain - mymob.zone_sel = new - mymob.zone_sel.icon = ui_style - mymob.zone_sel.color = ui_color - mymob.zone_sel.alpha = ui_alpha + mymob.zone_sel = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_ZONE_SELECT) mymob.zone_sel.update_icon() hud_elements |= mymob.zone_sel - target.attack_selector = new - target.attack_selector.set_owner(target) - target.attack_selector.icon = ui_style - target.attack_selector.color = ui_color - target.attack_selector.alpha = ui_alpha - target.attack_selector.update_icon() + target.attack_selector = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_ATTACK) hud_elements |= target.attack_selector //Handle the gun settings buttons - mymob.gun_setting_icon = new /obj/screen/gun/mode(null) - mymob.gun_setting_icon.icon = ui_style - mymob.gun_setting_icon.color = ui_color - mymob.gun_setting_icon.alpha = ui_alpha + mymob.gun_setting_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) hud_elements |= mymob.gun_setting_icon - mymob.item_use_icon = new /obj/screen/gun/item(null) - mymob.item_use_icon.icon = ui_style - mymob.item_use_icon.color = ui_color - mymob.item_use_icon.alpha = ui_alpha - - mymob.gun_move_icon = new /obj/screen/gun/move(null) - mymob.gun_move_icon.icon = ui_style - mymob.gun_move_icon.color = ui_color - mymob.gun_move_icon.alpha = ui_alpha - - mymob.radio_use_icon = new /obj/screen/gun/radio(null) - mymob.radio_use_icon.icon = ui_style - mymob.radio_use_icon.color = ui_color - mymob.radio_use_icon.alpha = ui_alpha + mymob.item_use_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + mymob.gun_move_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + mymob.radio_use_icon = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) ..() @@ -209,88 +112,3 @@ else client.screen -= hud_used.hotkeybuttons hud_used.hotkey_ui_hidden = 1 - -// Yes, these use icon state. Yes, these are terrible. The alternative is duplicating -// a bunch of fairly blobby logic for every click override on these objects. - -/obj/screen/food/Click(var/location, var/control, var/params) - if(istype(usr) && usr.nutrition_icon == src) - switch(icon_state) - if("nutrition0") - to_chat(usr, SPAN_WARNING("You are completely stuffed.")) - if("nutrition1") - to_chat(usr, SPAN_NOTICE("You are not hungry.")) - if("nutrition2") - to_chat(usr, SPAN_NOTICE("You are a bit peckish.")) - if("nutrition3") - to_chat(usr, SPAN_WARNING("You are quite hungry.")) - if("nutrition4") - to_chat(usr, SPAN_DANGER("You are starving!")) - -/obj/screen/drink/Click(var/location, var/control, var/params) - if(istype(usr) && usr.hydration_icon == src) - switch(icon_state) - if("hydration0") - to_chat(usr, SPAN_WARNING("You are overhydrated.")) - if("hydration1") - to_chat(usr, SPAN_NOTICE("You are not thirsty.")) - if("hydration2") - to_chat(usr, SPAN_NOTICE("You are a bit thirsty.")) - if("hydration3") - to_chat(usr, SPAN_WARNING("You are quite thirsty.")) - if("hydration4") - to_chat(usr, SPAN_DANGER("You are dying of thirst!")) - -/obj/screen/bodytemp/Click(var/location, var/control, var/params) - if(istype(usr) && usr.bodytemp == src) - switch(icon_state) - if("temp4") - to_chat(usr, SPAN_DANGER("You are being cooked alive!")) - if("temp3") - to_chat(usr, SPAN_DANGER("Your body is burning up!")) - if("temp2") - to_chat(usr, SPAN_DANGER("You are overheating.")) - if("temp1") - to_chat(usr, SPAN_WARNING("You are uncomfortably hot.")) - if("temp-4") - to_chat(usr, SPAN_DANGER("You are being frozen solid!")) - if("temp-3") - to_chat(usr, SPAN_DANGER("You are freezing cold!")) - if("temp-2") - to_chat(usr, SPAN_WARNING("You are dangerously chilled!")) - if("temp-1") - to_chat(usr, SPAN_NOTICE("You are uncomfortably cold.")) - else - to_chat(usr, SPAN_NOTICE("Your body is at a comfortable temperature.")) - -/obj/screen/pressure/Click(var/location, var/control, var/params) - if(istype(usr) && usr.pressure == src) - switch(icon_state) - if("pressure2") - to_chat(usr, SPAN_DANGER("The air pressure here is crushing!")) - if("pressure1") - to_chat(usr, SPAN_WARNING("The air pressure here is dangerously high.")) - if("pressure-1") - to_chat(usr, SPAN_WARNING("The air pressure here is dangerously low.")) - if("pressure-2") - to_chat(usr, SPAN_DANGER("There is nearly no air pressure here!")) - else - to_chat(usr, SPAN_NOTICE("The local air pressure is comfortable.")) - -/obj/screen/toxins/Click(var/location, var/control, var/params) - if(istype(usr) && usr.toxin == src) - if(icon_state == "tox0") - to_chat(usr, SPAN_NOTICE("The air is clear of toxins.")) - else - to_chat(usr, SPAN_DANGER("The air is eating away at your skin!")) - -/obj/screen/oxygen/Click(var/location, var/control, var/params) - if(istype(usr) && usr.oxygen == src) - if(icon_state == "oxy0") - to_chat(usr, SPAN_NOTICE("You are breathing easy.")) - else - to_chat(usr, SPAN_DANGER("You cannot breathe!")) - -/obj/screen/movement/Click(var/location, var/control, var/params) - if(istype(usr)) - usr.set_next_usable_move_intent() \ No newline at end of file diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index d7eb03aac29..b59b3e9bbbc 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -1,42 +1,81 @@ /mob/living/simple_animal/construct hud_type = /datum/hud/construct -/mob/living/simple_animal/construct - var/hud_construct_type - /mob/living/simple_animal/construct/armoured - hud_construct_type = "juggernaut" + hud_type = /datum/hud/construct/juggernaut /mob/living/simple_animal/construct/behemoth - hud_construct_type = "juggernaut" + hud_type = /datum/hud/construct/juggernaut /mob/living/simple_animal/construct/builder - hud_construct_type = "artificer" + hud_type = /datum/hud/construct/artificer /mob/living/simple_animal/construct/wraith - hud_construct_type = "wraith" + hud_type = /datum/hud/construct/wraith /mob/living/simple_animal/construct/harvester - hud_construct_type = "harvester" + hud_type = /datum/hud/construct/harvester + +/datum/hud/construct/get_ui_style_data() + return GET_DECL(/decl/ui_style/construct) + +/datum/hud/construct/juggernaut/get_ui_style_data() + return GET_DECL(/decl/ui_style/construct/juggernaut) + +/datum/hud/construct/harvester/get_ui_style_data() + return GET_DECL(/decl/ui_style/construct/harvester) + +/datum/hud/construct/wraith/get_ui_style_data() + return GET_DECL(/decl/ui_style/construct/wraith) + +/datum/hud/construct/artificer/get_ui_style_data() + return GET_DECL(/decl/ui_style/construct/artificer) + +/datum/hud/construct/get_ui_color() + return COLOR_WHITE + +/datum/hud/construct/get_ui_alpha() + return 255 /datum/hud/construct/FinalizeInstantiation() - var/constructtype - if(isconstruct(mymob)) - var/mob/living/simple_animal/construct/construct = mymob - constructtype = construct.hud_construct_type - if(constructtype) - mymob.fire = new /obj/screen() - mymob.fire.icon = 'icons/mob/screen1_construct.dmi' - mymob.fire.icon_state = "fire0" - mymob.fire.SetName("fire") - mymob.fire.screen_loc = ui_construct_fire - mymob.healths = new /obj/screen() - mymob.healths.icon = 'icons/mob/screen1_construct.dmi' - mymob.healths.icon_state = "[constructtype]_health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = ui_construct_health - mymob.zone_sel = new - mymob.zone_sel.icon = 'icons/mob/screen1_construct.dmi' - mymob.zone_sel.update_icon() + var/decl/ui_style/ui_style = get_ui_style_data() + var/ui_color = get_ui_color() + var/ui_alpha = get_ui_alpha() + mymob.fire = new /obj/screen/construct_fire(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS_FIRE) + mymob.healths = new /obj/screen/construct_health(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH) + mymob.zone_sel = new(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_ZONE_SELECT) adding += list(mymob.fire, mymob.healths, mymob.zone_sel) ..() + +/decl/ui_style/construct + name = "Construct" + restricted = TRUE + override_icons = list( + UI_ICON_STATUS_FIRE = 'icons/mob/screen/styles/constructs/status_fire.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/constructs/zone_selector.dmi' + ) + uid = "ui_style_construct" +/decl/ui_style/construct/juggernaut + name = "Juggernaut" + uid = "ui_style_construct_juggernaut" +/decl/ui_style/construct/juggernaut/Initialize() + override_icons[UI_ICON_HEALTH] = 'icons/mob/screen/styles/constructs/juggernaut/health.dmi' + return ..() +/decl/ui_style/construct/harvester + name = "Harvester" + uid = "ui_style_construct_harvester" +/decl/ui_style/construct/harvester/Initialize() + override_icons[UI_ICON_HEALTH] = 'icons/mob/screen/styles/constructs/harvester/health.dmi' + return ..() +/decl/ui_style/construct/wraith + name = "Wraith" + uid = "ui_style_construct_wraith" +/decl/ui_style/construct/wraith/Initialize() + override_icons[UI_ICON_HEALTH] = 'icons/mob/screen/styles/constructs/wraith/health.dmi' + return ..() +/decl/ui_style/construct/artificer + name = "Artificer" + uid = "ui_style_construct_artificer" +/decl/ui_style/construct/artificer/Initialize() + override_icons[UI_ICON_HEALTH] = 'icons/mob/screen/styles/constructs/artificer/health.dmi' + return ..() diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm index c2926b006ff..e73430b5524 100644 --- a/code/_onclick/hud/pai.dm +++ b/code/_onclick/hud/pai.dm @@ -1,86 +1,9 @@ /datum/hud/pai/FinalizeInstantiation() - var/obj/screen/using - using = new /obj/screen/pai/software() - using.SetName("Software Interface") - adding += using - using = new /obj/screen/pai/subsystems() - using.SetName("Subsystems") - adding += using - using = new /obj/screen/pai/shell() - using.SetName("Toggle Chassis") - adding += using - using = new /obj/screen/pai/rest() - using.SetName("Rest") - adding += using - using = new /obj/screen/pai/light() - using.SetName("Toggle Light") - adding += using + for(var/hud_type in subtypesof(/obj/screen/pai)) + var/obj/screen/pai/hud_elem = hud_type + if(TYPE_IS_ABSTRACT(hud_elem)) + continue + adding += new hud_elem(null, mymob) + ..() hide_inventory() - -/obj/screen/pai - icon = 'icons/mob/screen/pai.dmi' - -/obj/screen/pai/Click() - if(!isobserver(usr) && (!usr.incapacitated() || usr.resting)) - OnClick() - -/obj/screen/pai/proc/OnClick() - -/obj/screen/pai/software - name = "Software Interface" - icon_state = "pai" - screen_loc = ui_pai_software - -/obj/screen/pai/software/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.paiInterface() - -/obj/screen/pai/shell - name = "Toggle Chassis" - icon_state = "pai_holoform" - screen_loc = ui_pai_shell - -/obj/screen/pai/shell/OnClick() - var/mob/living/silicon/pai/pAI = usr - if(pAI.is_in_card) - pAI.unfold() - else - pAI.fold() - -/obj/screen/pai/chassis - name = "Holochassis Appearance Composite" - icon_state = "pai_holoform" - -/obj/screen/pai/rest - name = "Rest" - icon_state = "pai_rest" - screen_loc = ui_pai_rest - -/obj/screen/pai/rest/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.lay_down() - -/obj/screen/pai/light - name = "Toggle Integrated Lights" - icon_state = "light" - screen_loc = ui_pai_light - -/obj/screen/pai/light/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.toggle_integrated_light() - -/obj/screen/pai/subsystems - name = "SubSystems" - icon_state = "subsystems" - screen_loc = ui_pai_subsystems - -/obj/screen/pai/subsystems/OnClick() - var/mob/living/silicon/pai/pAI = usr - var/ss_name = input(usr, "Activates the given subsystem", "Subsystems", "") in pAI.silicon_subsystems_by_name - if (!ss_name) - return - - var/stat_silicon_subsystem/SSS = pAI.silicon_subsystems_by_name[ss_name] - if(istype(SSS)) - SSS.Click() diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 49fe49e32da..3e2322eff23 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -3,57 +3,6 @@ var/global/list/radial_menus = list() -/obj/screen/radial/Destroy() - parent = null - return ..() - -/obj/screen/radial - icon = 'icons/screen/radial.dmi' - layer = HUD_ABOVE_ITEM_LAYER - plane = HUD_PLANE - var/datum/radial_menu/parent - -/obj/screen/radial/slice - icon_state = "radial_slice" - var/choice - var/next_page = FALSE - var/tooltips = FALSE - -/obj/screen/radial/slice/MouseEntered(location, control, params) - . = ..() - icon_state = "radial_slice_focus" - if(tooltips) - openToolTip(usr, src, params, title = name) - -/obj/screen/radial/slice/MouseExited(location, control, params) - . = ..() - icon_state = "radial_slice" - if(tooltips) - closeToolTip(usr) - -/obj/screen/radial/slice/Click(location, control, params) - if(parent && usr.client == parent.current_user) - if(next_page) - parent.next_page() - else - parent.element_chosen(choice,usr) - -/obj/screen/radial/center - name = "Close Menu" - icon_state = "radial_center" - -/obj/screen/radial/center/MouseEntered(location, control, params) - . = ..() - icon_state = "radial_center_focus" - -/obj/screen/radial/center/MouseExited(location, control, params) - . = ..() - icon_state = "radial_center" - -/obj/screen/radial/center/Click(location, control, params) - if(usr.client == parent.current_user) - parent.finished = TRUE - /datum/radial_menu var/list/choices = list() //List of choice id's var/list/choices_icons = list() //choice_id -> icon @@ -268,7 +217,7 @@ var/global/list/radial_menus = list() //Blank menu_holder = image(icon = 'icons/effects/effects.dmi', loc = anchor, icon_state = "nothing", layer = HUD_ABOVE_ITEM_LAYER) menu_holder.appearance_flags |= KEEP_APART - add_vis_contents(menu_holder, elements + close_button) + menu_holder.add_vis_contents(elements + close_button) current_user.images += menu_holder /datum/radial_menu/proc/hide() diff --git a/code/_onclick/hud/radial_persistent.dm b/code/_onclick/hud/radial_persistent.dm index 592f98912e5..8f01871138e 100644 --- a/code/_onclick/hud/radial_persistent.dm +++ b/code/_onclick/hud/radial_persistent.dm @@ -2,28 +2,12 @@ A derivative of radial menu which persists onscreen until closed and invokes a callback each time an element is clicked */ -/obj/screen/radial/persistent/center - name = "Close Menu" - icon_state = "radial_center" - -/obj/screen/radial/persistent/center/Click(location, control, params) - if(usr.client == parent.current_user) - parent.element_chosen(null,usr) - -/obj/screen/radial/persistent/center/MouseEntered(location, control, params) - . = ..() - icon_state = "radial_center_focus" - -/obj/screen/radial/persistent/center/MouseExited(location, control, params) - . = ..() - icon_state = "radial_center" - /datum/radial_menu/persistent var/uniqueid var/datum/callback/select_proc_callback /datum/radial_menu/persistent/New() - close_button = new /obj/screen/radial/persistent/center + close_button = new /obj/screen/radial/persistent/center(null) close_button.parent = src /datum/radial_menu/persistent/element_chosen(choice_id,mob/user) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 3a9c97bd923..4cdea225b2b 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -1,24 +1,28 @@ var/global/obj/screen/robot_inventory -/obj/screen/robot_drop_grab - name = "drop grab" - icon = 'icons/mob/screen1_robot.dmi' - icon_state = "drop_grab" - screen_loc = ui_borg_drop_grab - invisibility = INVISIBILITY_MAXIMUM - alpha = 0 - -/obj/screen/robot_drop_grab/Click(location, control, params) - . = ..() - if(isrobot(usr) && !usr.incapacitated()) - var/mob/living/silicon/robot/R = usr - R.drop_item() - set_invisibility(INVISIBILITY_MAXIMUM) - alpha = 0 - /mob/living/silicon/robot hud_type = /datum/hud/robot +/decl/ui_style/robot + name = "Stationbound" + restricted = TRUE + uid = "ui_style_robot" + override_icons = list( + UI_ICON_HEALTH = 'icons/mob/screen/styles/robot/health.dmi', + UI_ICON_STATUS_FIRE = 'icons/mob/screen/styles/robot/status_fire.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/robot/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/robot/zone_selector.dmi' + ) + +/datum/hud/robot/get_ui_style_data() + return GET_DECL(/decl/ui_style/robot) + +/datum/hud/robot/get_ui_color() + return COLOR_WHITE + +/datum/hud/robot/get_ui_alpha() + return 255 + /datum/hud/robot/FinalizeInstantiation() var/mob/living/silicon/robot/R = mymob @@ -26,142 +30,49 @@ var/global/obj/screen/robot_inventory ..() return - var/obj/screen/using + var/decl/ui_style/ui_style = get_ui_style_data() + var/ui_color = get_ui_color() + var/ui_alpha = get_ui_alpha() //Radio - using = new /obj/screen() - using.SetName("radio") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "radio" - using.screen_loc = ui_movi - adding += using + adding += new /obj/screen/robot_radio(null, mymob) //Module select - - using = new /obj/screen() - using.SetName("module1") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv1" - using.screen_loc = ui_inv1 - adding += using - R.inv1 = using - - using = new /obj/screen() - using.SetName("module2") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv2" - using.screen_loc = ui_inv2 - adding += using - R.inv2 = using - - using = new /obj/screen() - using.SetName("module3") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv3" - using.screen_loc = ui_inv3 - adding += using - R.inv3 = using - + R.inv1 = new(null, mymob) + R.inv2 = new(null, mymob) + R.inv3 = new(null, mymob) + adding += R.inv1 + adding += R.inv2 + adding += R.inv3 //End of module select // Drop UI - R.ui_drop_grab = new + R.ui_drop_grab = new(null, mymob) adding += R.ui_drop_grab //Intent - using = new /obj/screen() - using.SetName("act_intent") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = R.a_intent - using.screen_loc = ui_acti - adding += using - action_intent = using - - //Cell - R.cells = new /obj/screen() - R.cells.icon = 'icons/mob/screen1_robot.dmi' - R.cells.icon_state = "charge-empty" - R.cells.SetName("cell") - R.cells.screen_loc = ui_toxin - - //Health - R.healths = new /obj/screen() - R.healths.icon = 'icons/mob/screen1_robot.dmi' - R.healths.icon_state = "health0" - R.healths.SetName("health") - R.healths.screen_loc = ui_borg_health - - //Installed Module - R.hands = new /obj/screen() - R.hands.icon = 'icons/mob/screen1_robot.dmi' - R.hands.icon_state = "nomod" - R.hands.SetName("module") - R.hands.screen_loc = ui_borg_module - - //Module Panel - using = new /obj/screen() - using.SetName("panel") - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "panel" - using.screen_loc = ui_borg_panel - adding += using - - //Store - R.throw_icon = new /obj/screen() - R.throw_icon.icon = 'icons/mob/screen1_robot.dmi' - R.throw_icon.icon_state = "store" - R.throw_icon.SetName("store") - R.throw_icon.screen_loc = ui_borg_store - - //Inventory - robot_inventory = new /obj/screen() - robot_inventory.SetName("inventory") - robot_inventory.icon = 'icons/mob/screen1_robot.dmi' - robot_inventory.icon_state = "inventory" - robot_inventory.screen_loc = ui_borg_inventory - - //Temp - R.bodytemp = new /obj/screen() - R.bodytemp.icon = 'icons/mob/status_indicators.dmi' - R.bodytemp.icon_state = "temp0" - R.bodytemp.SetName("body temperature") - R.bodytemp.screen_loc = ui_temp - - - R.oxygen = new /obj/screen() - R.oxygen.icon = 'icons/mob/screen1_robot.dmi' - R.oxygen.icon_state = "oxy0" - R.oxygen.SetName("oxygen") - R.oxygen.screen_loc = ui_oxygen - - R.fire = new /obj/screen() - R.fire.icon = 'icons/mob/screen1_robot.dmi' - R.fire.icon_state = "fire0" - R.fire.SetName("fire") - R.fire.screen_loc = ui_fire - - R.up_hint = new /obj/screen() - R.up_hint.icon = 'icons/mob/screen1_robot.dmi' - R.up_hint.icon_state = "uphint0" - R.up_hint.SetName("up hint") - R.up_hint.screen_loc = ui_up_hint - - R.zone_sel = new - R.zone_sel.icon = 'icons/mob/screen1_robot.dmi' - R.zone_sel.update_icon() - - //Handle the gun settings buttons - R.gun_setting_icon = new /obj/screen/gun/mode(null) - R.item_use_icon = new /obj/screen/gun/item(null) - R.gun_move_icon = new /obj/screen/gun/move(null) - R.radio_use_icon = new /obj/screen/gun/radio(null) - - hud_elements = list(R.throw_icon, R.zone_sel, R.oxygen, R.fire, R.up_hint, R.hands, R.healths, R.cells, robot_inventory, R.gun_setting_icon) + action_intent = new /obj/screen/intent/robot(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT) + action_intent.icon_state = R.a_intent + + adding += action_intent + adding += new /obj/screen/robot_panel(null, mymob) + adding += new /obj/screen/robot_store(null, mymob) + + R.hands = new /obj/screen/robot_module/select(null, mymob) + robot_inventory = new /obj/screen/robot_inventory( null, mymob) + R.cells = new /obj/screen/robot_charge( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_CHARGE) + R.healths = new /obj/screen/robot_health( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH) + R.bodytemp = new /obj/screen/bodytemp( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) + R.oxygen = new /obj/screen/robot_oxygen( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS) + R.fire = new /obj/screen/robot_fire( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_STATUS_FIRE) + R.up_hint = new /obj/screen/up_hint( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_UP_HINT) + R.zone_sel = new( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_ZONE_SELECT) + R.gun_setting_icon = new /obj/screen/gun/mode( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + R.item_use_icon = new /obj/screen/gun/item( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + R.gun_move_icon = new /obj/screen/gun/move( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + R.radio_use_icon = new /obj/screen/gun/radio( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_FIRE_INTENT) + + hud_elements = list(R.zone_sel, R.oxygen, R.fire, R.up_hint, R.hands, R.healths, R.cells, robot_inventory, R.gun_setting_icon) ..() /datum/hud/proc/toggle_show_robot_modules() @@ -183,8 +94,6 @@ var/global/obj/screen/robot_inventory if(R.shown_robot_modules) if(R.active_storage) R.active_storage.close(R) //Closes the inventory ui. - //Modules display is shown - //R.client.screen += robot_inventory //"store" icon if(!R.module) to_chat(usr, "No module selected") diff --git a/code/_onclick/hud/screen/_screen.dm b/code/_onclick/hud/screen/_screen.dm new file mode 100644 index 00000000000..703ec47721b --- /dev/null +++ b/code/_onclick/hud/screen/_screen.dm @@ -0,0 +1,82 @@ +/* + Screen objects are only used for the hud and should not appear anywhere "in-game". + They are used with the client/screen list and the screen_loc var. + For more information, see the byond documentation on the screen_loc and screen vars. +*/ +/obj/screen + name = "" + plane = HUD_PLANE + layer = HUD_BASE_LAYER + appearance_flags = NO_CLIENT_COLOR + abstract_type = /obj/screen + is_spawnable_type = FALSE + simulated = FALSE + + /// The mob that owns this screen object, if any. + var/weakref/owner_ref + /// Whether or not this screen element requires an owner. + var/requires_owner = TRUE + /// Global screens are not qdeled when the holding mob is destroyed. + var/is_global_screen = FALSE + /// A set of flags to check for when the user clicks this element. + var/user_incapacitation_flags = INCAPACITATION_DEFAULT + /// A string reference to a /decl/ui_style icon category. + var/ui_style_category + /// Set to false for screen objects that do not rely on UI style to set their icon. + var/requires_ui_style = TRUE + +/obj/screen/Initialize(mapload, mob/_owner, decl/ui_style/ui_style, ui_color, ui_alpha, ui_cat) + + if(requires_ui_style) + if(!istext(ui_cat) && !istext(ui_style_category)) + PRINT_STACK_TRACE("Screen object [type] initializing with invalid UI style category: [ui_cat || "NULL"], [ui_style_category || "NULL"].") + return INITIALIZE_HINT_QDEL + if(!istype(ui_style)) + PRINT_STACK_TRACE("Screen object [type] initializing with invalid UI style: [ui_style || "NULL"].") + return INITIALIZE_HINT_QDEL + + if(ismob(_owner)) + owner_ref = weakref(_owner) + + // Validate ownership. + if(requires_owner) + if(!owner_ref) + PRINT_STACK_TRACE("ERROR: [type]'s Initialize() was not given an owner argument.") + return INITIALIZE_HINT_QDEL + else if(owner_ref) + PRINT_STACK_TRACE("ERROR: [type]'s Initialize() was given an owner argument.") + return INITIALIZE_HINT_QDEL + + set_ui_style(ui_style, ui_cat) + if(!isnull(ui_color)) + color = ui_color + if(!isnull(ui_alpha)) + alpha = ui_alpha + return ..() + +/obj/screen/proc/set_ui_style(decl/ui_style/ui_style, ui_cat) + if(istext(ui_cat)) + ui_style_category = ui_cat + if(istype(ui_style) && ui_style_category) + icon = ui_style.get_icon(ui_style_category) + +/obj/screen/Destroy() + if(owner_ref) + var/mob/owner = owner_ref.resolve() + if(istype(owner) && owner?.client?.screen) + owner.client.screen -= src + return ..() + +/obj/screen/proc/handle_click(mob/user, params) + return TRUE + +/obj/screen/Click(location, control, params) + if(ismob(usr) && usr.client && usr.canClick() && (!user_incapacitation_flags || !usr.incapacitated(user_incapacitation_flags))) + return handle_click(usr, params) + return FALSE + +/obj/screen/receive_mouse_drop(atom/dropping, mob/user) + return TRUE + +/obj/screen/check_mousedrop_interactivity(var/mob/user) + return user.client && (src in user.client.screen) diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/screen/screen_abilities.dm similarity index 81% rename from code/_onclick/hud/ability_screen_objects.dm rename to code/_onclick/hud/screen/screen_abilities.dm index 54094c25e4b..24c743ba823 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/screen/screen_abilities.dm @@ -1,54 +1,48 @@ /obj/screen/ability_master - name = "Abilities" - icon = 'icons/mob/screen_spells.dmi' - icon_state = "grey_spell_ready" + name = "Abilities" + icon = 'icons/mob/screen/spells.dmi' + icon_state = "grey_spell_ready" + screen_loc = ui_ability_master + requires_ui_style = FALSE var/list/obj/screen/ability/ability_objects = list() var/list/obj/screen/ability/spell_objects = list() - var/showing = 0 // If we're 'open' or not. - + var/showing = FALSE // If we're 'open' or not. var/const/abilities_per_row = 7 var/open_state = "master_open" // What the button looks like when it's 'open', showing the other buttons. var/closed_state = "master_closed" // Button when it's 'closed', hiding everything else. - screen_loc = ui_ability_master - - var/mob/my_mob = null // The mob that possesses this hud object. - -/obj/screen/ability_master/Initialize(mapload, owner) +/obj/screen/ability_master/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat) . = ..() - if(owner) - my_mob = owner - update_abilities(0, owner) - else - . = INITIALIZE_HINT_QDEL - CRASH("ERROR: ability_master's Initialize() was not given an owner argument. This is a bug.") + if(. != INITIALIZE_HINT_QDEL) + update_abilities(0, _owner) /obj/screen/ability_master/Destroy() - . = ..() - remove_all_abilities() //Get rid of the ability objects. + // Get rid of the ability objects. + remove_all_abilities() ability_objects.Cut() - if(my_mob) // After that, remove ourselves from the mob seeing us, so we can qdel cleanly. - my_mob.ability_master = null - if(my_mob.client && my_mob.client.screen) - my_mob.client.screen -= src - my_mob = null + // After that, remove ourselves from the mob seeing us, so we can qdel cleanly. + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && owner.ability_master == src) + owner.ability_master = null + return ..() -/obj/screen/ability_master/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/screen/ability_master/handle_mouse_drop(atom/over, mob/user, params) if(showing) return FALSE . = ..() -/obj/screen/ability_master/Click() - if(!ability_objects.len) // If we're empty for some reason. - return - - toggle_open() +/obj/screen/ability_master/handle_click(mob/user, params) + if(length(ability_objects)) // If we're empty for some reason. + toggle_open() /obj/screen/ability_master/proc/toggle_open(var/forced_state = 0) + var/mob/owner = owner_ref?.resolve() + if(!istype(owner) || QDELETED(owner)) + return if(showing && (forced_state != 2)) // We are closing the ability master, hide the abilities. - for(var/obj/screen/ability/O in ability_objects) - if(my_mob && my_mob.client) - my_mob.client.screen -= O + if(owner?.client) + for(var/obj/screen/ability/O in ability_objects) + owner.client.screen -= O // O.handle_icon_updates = 0 showing = 0 overlays.len = 0 @@ -62,12 +56,18 @@ update_icon() /obj/screen/ability_master/proc/open_ability_master() + + var/client/owner_client + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && !QDELETED(owner)) + owner_client = owner.client + for(var/i = 1 to length(ability_objects)) var/obj/screen/ability/A = ability_objects[i] var/row = round(i/abilities_per_row) A.screen_loc = "RIGHT-[(i-(row*abilities_per_row))+2]:16,TOP-[row+1]:16" - if(my_mob && my_mob.client) - my_mob.client.screen += A + if(owner_client) + owner_client.screen += A /obj/screen/ability_master/proc/update_abilities(forced = 0, mob/user) update_icon() @@ -87,14 +87,16 @@ set_invisibility(INVISIBILITY_ABSTRACT) /obj/screen/ability_master/proc/add_ability(var/name_given) - if(!name) return + if(!name_given) + return var/obj/screen/ability/new_button = new /obj/screen/ability new_button.ability_master = src new_button.SetName(name_given) new_button.ability_icon_state = name_given new_button.update_icon(1) ability_objects.Add(new_button) - if(my_mob.client) + var/mob/living/owner = owner_ref?.resolve() + if(istype(owner) && !QDELETED(owner) && owner.client) toggle_open(2) //forces the icons to refresh on screen /obj/screen/ability_master/proc/remove_ability(var/obj/screen/ability/ability) @@ -149,17 +151,15 @@ var/spell/S = screen.spell M.learned_spells |= S -/mob/Initialize() - . = ..() - ability_master = new /obj/screen/ability_master(null,src) - ///////////ACTUAL ABILITIES//////////// //This is what you click to do things// /////////////////////////////////////// /obj/screen/ability - icon = 'icons/mob/screen_spells.dmi' + icon = 'icons/mob/screen/spells.dmi' icon_state = "grey_spell_base" maptext_x = 3 + requires_owner = FALSE + requires_ui_style = FALSE var/background_base_state = "grey" var/ability_icon_state = null var/obj/screen/ability_master/ability_master @@ -167,8 +167,9 @@ /obj/screen/ability/Destroy() if(ability_master) ability_master.ability_objects -= src - if(ability_master.my_mob && ability_master.my_mob.client) - ability_master.my_mob.client.screen -= src + var/mob/owner = ability_master.owner_ref?.resolve() + if(istype(owner) && owner.client) + owner.client.screen -= src if(ability_master && !ability_master.ability_objects.len) ability_master.update_icon() // qdel(ability_master) @@ -181,10 +182,7 @@ overlays += ability_icon_state -/obj/screen/ability/Click() - if(!usr) - return - +/obj/screen/ability/handle_click(mob/user, params) activate() // Makes the ability be triggered. The subclasses of this are responsible for carrying it out in whatever way it needs to. @@ -196,21 +194,6 @@ /obj/screen/ability/proc/can_activate() return 1 -/client/verb/activate_ability(var/slot as num) - set name = ".activate_ability" -// set hidden = 1 - if(!mob) - return // Paranoid. - if(isnull(slot) || !isnum(slot)) - to_chat(src,".activate_ability requires a number as input, corrisponding to the slot you wish to use.") - return // Bad input. - if(!mob.ability_master) - return // No abilities. - if(slot > mob.ability_master.ability_objects.len || slot <= 0) - return // Out of bounds. - var/obj/screen/ability/A = mob.ability_master.ability_objects[slot] - A.activate() - //////////Verb Abilities////////// //Buttons to trigger verbs/procs// ////////////////////////////////// @@ -240,7 +223,8 @@ if(arguments) A.arguments_to_use = arguments ability_objects.Add(A) - if(my_mob.client) + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && owner.client) toggle_open(2) //forces the icons to refresh on screen /////////Obj Abilities//////// @@ -270,7 +254,8 @@ A.ability_icon_state = ability_icon_given A.SetName(object_given.name) ability_objects.Add(A) - if(my_mob.client) + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && !QDELETED(owner) && owner.client) toggle_open(2) //forces the icons to refresh on screen // Wizard @@ -295,7 +280,7 @@ if(get_ability_by_spell(spell)) return - var/obj/screen/ability/spell/A = new() + var/obj/screen/ability/spell/A = new(null) A.ability_master = src A.spell = spell A.SetName(spell.name) @@ -310,7 +295,8 @@ A.update_charge(1) spell_objects.Add(A) ability_objects.Add(A) - if(my_mob.client) + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && !QDELETED(owner) && owner.client) toggle_open(2) //forces the icons to refresh on screen /obj/screen/ability_master/proc/update_spells(var/forced = 0) diff --git a/code/_onclick/hud/screen/screen_action_button.dm b/code/_onclick/hud/screen/screen_action_button.dm new file mode 100644 index 00000000000..d8e2ff27532 --- /dev/null +++ b/code/_onclick/hud/screen/screen_action_button.dm @@ -0,0 +1,79 @@ +/obj/screen/action_button + screen_loc = "LEFT,TOP" + requires_ui_style = FALSE + var/datum/action/action + +/obj/screen/action_button/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, _action) + action = _action + return ..() + +/obj/screen/action_button/handle_click(mob/user, params) + if(action && user.next_move < world.time) + action.Trigger() + return TRUE + return FALSE + +/obj/screen/action_button/on_update_icon() + if(!action) + return + icon = action.button_icon + icon_state = action.background_icon_state + + cut_overlays() + var/image/img + if(action.action_type == AB_ITEM && action.target) + var/obj/item/I = action.target + img = image(I.icon, src , I.icon_state) + else if(action.button_icon && action.button_icon_state) + img = image(action.button_icon,src,action.button_icon_state) + img.pixel_x = 0 + img.pixel_y = 0 + add_overlay(img) + compile_overlays() + + if(!action.IsAvailable()) + color = rgb(128,0,0,128) + else + color = rgb(255,255,255,255) + +/obj/screen/action_button/MouseEntered(location, control, params) + openToolTip(user = usr, tip_src = src, params = params, title = name, content = desc) + ..() + +/obj/screen/action_button/MouseDown() + closeToolTip(usr) + ..() + +/obj/screen/action_button/MouseExited() + closeToolTip(usr) + ..() + +//Hide/Show Action Buttons ... Button +/obj/screen/action_button/hide_toggle + name = "Hide Buttons" + icon = 'icons/obj/action_buttons/actions.dmi' + icon_state = "bg_default" + var/hidden = FALSE + +/obj/screen/action_button/hide_toggle/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat) + . = ..() + if(isalien(_owner)) + icon_state = "bg_alien" + else + icon_state = "bg_default" + update_icon() + +/obj/screen/action_button/hide_toggle/handle_click(mob/user, params) + user.hud_used.action_buttons_hidden = !user.hud_used.action_buttons_hidden + hidden = user.hud_used.action_buttons_hidden + if(hidden) + name = "Show Buttons" + else + name = "Hide Buttons" + update_icon() + user.update_action_buttons() + +/obj/screen/action_button/hide_toggle/on_update_icon() + cut_overlays() + add_overlay(hidden ? "show" : "hide") + compile_overlays() diff --git a/code/_onclick/hud/ai_screen_objects.dm b/code/_onclick/hud/screen/screen_ai_button.dm similarity index 69% rename from code/_onclick/hud/ai_screen_objects.dm rename to code/_onclick/hud/screen/screen_ai_button.dm index cbbff7d5d96..03371223da7 100644 --- a/code/_onclick/hud/ai_screen_objects.dm +++ b/code/_onclick/hud/screen/screen_ai_button.dm @@ -1,12 +1,13 @@ /obj/screen/ai_button + icon = 'icons/mob/screen/ai.dmi' + requires_ui_style = FALSE var/mob/living/silicon/ai/ai_verb var/list/input_procs var/list/input_args - icon = 'icons/mob/screen_ai.dmi' var/list/template_icon = list(null, "template") var/image/template_undelay -/obj/screen/ai_button/Click() +/obj/screen/ai_button/handle_click(mob/user, params) if(!isAI(usr)) return TRUE var/mob/living/silicon/ai/A = usr @@ -38,19 +39,17 @@ call(A, ai_verb)(arglist(input_arguments)) return TRUE -/obj/screen/ai_button/Initialize(maploading, screen_loc, name, icon_state, ai_verb, list/input_procs = null, list/input_args = null) +/obj/screen/ai_button/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, decl/ai_hud/ai_hud_data) . = ..() - if(!LAZYLEN(template_icon)) - template_icon = list(icon) - src.name = name - src.icon_state = icon_state - src.screen_loc = screen_loc - src.ai_verb = ai_verb - if(input_procs) - src.input_procs = input_procs.Copy() - if(input_args) - src.input_args = input_args.Copy() + name = ai_hud_data.name + icon_state = ai_hud_data.icon_state + screen_loc = ai_hud_data.screen_loc + ai_verb = ai_hud_data.proc_path + input_procs = ai_hud_data.input_procs?.Copy() + input_args = ai_hud_data.input_args?.Copy() + if(!LAZYLEN(template_icon)) + template_icon = list(icon) template_undelay = image(template_icon[1], template_icon[2]) - underlays += template_undelay \ No newline at end of file + underlays += template_undelay diff --git a/code/_onclick/hud/screen/screen_attack_selector.dm b/code/_onclick/hud/screen/screen_attack_selector.dm new file mode 100644 index 00000000000..5aa2c0dbbbd --- /dev/null +++ b/code/_onclick/hud/screen/screen_attack_selector.dm @@ -0,0 +1,33 @@ +/obj/screen/default_attack_selector + name = "default attack selector" + icon_state = "attack_none" + screen_loc = ui_attack_selector + +/obj/screen/default_attack_selector/Destroy() + var/mob/living/carbon/human/owner = owner_ref?.resolve() + if(istype(owner) && owner.attack_selector == src) + owner.attack_selector = null + . = ..() + +/obj/screen/default_attack_selector/handle_click(mob/user, params) + + var/mob/living/carbon/human/owner = owner_ref?.resolve() + if(user != owner) + return FALSE + + var/list/modifiers = params2list(params) + if(modifiers["shift"]) + to_chat(owner, SPAN_NOTICE("Your current default attack is [owner.default_attack?.name || "unset"].")) + if(owner.default_attack) + var/summary = owner.default_attack.summarize() + if(summary) + to_chat(owner, SPAN_NOTICE(summary)) + return + + owner.set_default_unarmed_attack(src) + return TRUE + +/obj/screen/default_attack_selector/on_update_icon() + var/mob/living/carbon/human/owner = owner_ref?.resolve() + var/decl/natural_attack/attack = istype(owner) && owner.default_attack + icon_state = attack?.selector_icon_state || "attack_none" diff --git a/code/_onclick/hud/screen/screen_cataloguer.dm b/code/_onclick/hud/screen/screen_cataloguer.dm new file mode 100644 index 00000000000..6fc95896bfa --- /dev/null +++ b/code/_onclick/hud/screen/screen_cataloguer.dm @@ -0,0 +1,83 @@ +/obj/screen/scan_radius + name = null + plane = HUD_PLANE + layer = UNDER_HUD_LAYER + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + screen_loc = "CENTER,CENTER" + icon = 'icons/screen/scanner.dmi' + icon_state = "blank" + alpha = 180 + requires_owner = FALSE + requires_ui_style = FALSE + var/scan_range + var/image/holder_image + +/obj/screen/scan_radius/proc/set_radius(var/new_range) + if(new_range != scan_range) + scan_range = max(1, new_range) + update_icon() + +/obj/screen/scan_radius/proc/fade_out(var/mob/user, var/fade_time) + set waitfor = FALSE + animate(src, alpha = 0, time = fade_time) + if(fade_time > 0) + sleep(fade_time) + if(user?.client && holder_image) + user.client.images -= holder_image + +/obj/screen/scan_radius/Destroy() + if(holder_image) + holder_image.vis_contents.Cut() + QDEL_NULL(holder_image) + return ..() + +/obj/screen/scan_radius/on_update_icon() + cut_overlays() + if(scan_range <= 1) + add_overlay("single") + else + var/pixel_bound = (world.icon_size * scan_range) + + var/image/I = image(icon, "bottomleft") + I.pixel_x = -(pixel_bound) + I.pixel_y = -(pixel_bound) + add_overlay(I) + + I = image(icon, "bottomright") + I.pixel_x = pixel_bound + I.pixel_y = -(pixel_bound) + add_overlay(I) + + I = image(icon, "topleft") + I.pixel_x = -(pixel_bound) + I.pixel_y = pixel_bound + add_overlay(I) + + I = image(icon, "topright") + I.pixel_x = pixel_bound + I.pixel_y = pixel_bound + add_overlay(I) + + var/offset_scan_range = scan_range-1 + for(var/i = -(offset_scan_range) to offset_scan_range) + I = image(icon, "left") + I.pixel_x = -(pixel_bound) + I.pixel_y = world.icon_size * i + add_overlay(I) + + I = image(icon, "right") + I.pixel_x = pixel_bound + I.pixel_y = world.icon_size * i + add_overlay(I) + + I = image(icon, "bottom") + I.pixel_x = world.icon_size * i + I.pixel_y = -(pixel_bound) + add_overlay(I) + + I = image(icon, "top") + I.pixel_x = world.icon_size * i + I.pixel_y = pixel_bound + add_overlay(I) + + compile_overlays() diff --git a/code/_onclick/hud/screen/screen_cinematic.dm b/code/_onclick/hud/screen/screen_cinematic.dm new file mode 100644 index 00000000000..b2bd06c63ca --- /dev/null +++ b/code/_onclick/hud/screen/screen_cinematic.dm @@ -0,0 +1,8 @@ +/obj/screen/cinematic + icon = 'icons/effects/station_explosion.dmi' + icon_state = "station_intact" + plane = HUD_PLANE + layer = HUD_ABOVE_ITEM_LAYER + mouse_opacity = MOUSE_OPACITY_PRIORITY + screen_loc = "LEFT+1,BOTTOM" + requires_ui_style = FALSE diff --git a/code/_onclick/hud/screen/screen_click_catcher.dm b/code/_onclick/hud/screen/screen_click_catcher.dm new file mode 100644 index 00000000000..5b3ea674b32 --- /dev/null +++ b/code/_onclick/hud/screen/screen_click_catcher.dm @@ -0,0 +1,47 @@ +var/global/list/click_catchers +/proc/get_click_catchers() + if(!global.click_catchers) + var/client_max_x = get_config_value(/decl/config/num/clients/max_client_view_x) + var/client_max_y = get_config_value(/decl/config/num/clients/max_client_view_y) + global.click_catchers = list() + var/ox = -(round(client_max_x*0.5)) + for(var/i = 0 to client_max_x) + var/oy = -(round(client_max_y*0.5)) + var/tx = ox + i + for(var/j = 0 to client_max_y) + var/ty = oy + j + var/obj/screen/click_catcher/CC = new + CC.screen_loc = "CENTER[tx < 0 ? tx : "+[tx]"],CENTER[ty < 0 ? ty : "+[ty]"]" + CC.x_offset = tx + CC.y_offset = ty + global.click_catchers += CC + return global.click_catchers + +/obj/screen/click_catcher + icon = 'icons/mob/screen/effects.dmi' + icon_state = "blank" + plane = CLICKCATCHER_PLANE + mouse_opacity = MOUSE_OPACITY_PRIORITY + screen_loc = "CENTER-7,CENTER-7" + requires_owner = FALSE + requires_ui_style = FALSE + is_global_screen = TRUE + var/x_offset = 0 + var/y_offset = 0 + +/obj/screen/click_catcher/Destroy() + SHOULD_CALL_PARENT(FALSE) + return QDEL_HINT_LETMELIVE + +/obj/screen/click_catcher/Click(location, control, params) + var/list/modifiers = params2list(params) + if(modifiers["middle"] && iscarbon(usr)) + var/mob/living/carbon/C = usr + C.swap_hand() + else + var/turf/origin = get_turf(usr) + if(isturf(origin)) + var/turf/clicked = locate(origin.x + x_offset, origin.y + y_offset, origin.z) + if(clicked) + clicked.Click(location, control, params) + . = 1 diff --git a/code/_onclick/hud/screen/screen_constructs.dm b/code/_onclick/hud/screen/screen_constructs.dm new file mode 100644 index 00000000000..96932a2d22c --- /dev/null +++ b/code/_onclick/hud/screen/screen_constructs.dm @@ -0,0 +1,9 @@ +/obj/screen/construct_fire + name = "fire" + icon = 'icons/mob/screen/styles/constructs/status_fire.dmi' + icon_state = "fire0" + screen_loc = ui_construct_fire + +/obj/screen/construct_health + name = "health" + screen_loc = ui_construct_health diff --git a/code/_onclick/hud/screen/screen_credits.dm b/code/_onclick/hud/screen/screen_credits.dm new file mode 100644 index 00000000000..5025cc7a87d --- /dev/null +++ b/code/_onclick/hud/screen/screen_credits.dm @@ -0,0 +1,36 @@ + +/obj/screen/credit + icon_state = "blank" + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + alpha = 0 + screen_loc = "CENTER-7,BOTTOM+1" + plane = HUD_PLANE + layer = HUD_ABOVE_ITEM_LAYER + maptext_height = WORLD_ICON_SIZE * 2 + maptext_width = WORLD_ICON_SIZE * 14 + requires_ui_style = FALSE + var/client/parent + var/matrix/target + +/obj/screen/credit/proc/rollem() + var/matrix/M = matrix(transform) + M.Translate(0, CREDIT_ANIMATE_HEIGHT) + animate(src, transform = M, time = CREDIT_ROLL_SPEED) + target = M + animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL) + spawn(CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION) + if(!QDELETED(src)) + animate(src, alpha = 0, transform = target, time = CREDIT_EASE_DURATION) + sleep(CREDIT_EASE_DURATION) + qdel(src) + var/mob/owner = owner_ref?.resolve() + if(istype(owner) && owner.client) + owner.client.screen += src + +/obj/screen/credit/Destroy() + var/client/P = parent + if(istype(P)) + P.screen -= src + LAZYREMOVE(P.credits, src) + parent = null + return ..() diff --git a/code/_onclick/hud/screen/screen_drop.dm b/code/_onclick/hud/screen/screen_drop.dm new file mode 100644 index 00000000000..085922329c7 --- /dev/null +++ b/code/_onclick/hud/screen/screen_drop.dm @@ -0,0 +1,8 @@ +/obj/screen/drop + name = "drop" + icon_state = "act_drop" + screen_loc = ui_drop_throw + +/obj/screen/drop/handle_click(mob/user, params) + if(user.client) + user.client.drop_item() diff --git a/code/_onclick/hud/screen/screen_equip.dm b/code/_onclick/hud/screen/screen_equip.dm new file mode 100644 index 00000000000..49386fa267f --- /dev/null +++ b/code/_onclick/hud/screen/screen_equip.dm @@ -0,0 +1,8 @@ +/obj/screen/equip + name = "equip" + icon_state = "act_equip" + +/obj/screen/equip/handle_click(mob/user, params) + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + H.quick_equip() diff --git a/code/modules/mechs/interface/screen_objects.dm b/code/_onclick/hud/screen/screen_exosuit.dm similarity index 51% rename from code/modules/mechs/interface/screen_objects.dm rename to code/_onclick/hud/screen/screen_exosuit.dm index f8b87ba090e..e2154d522b6 100644 --- a/code/modules/mechs/interface/screen_objects.dm +++ b/code/_onclick/hud/screen/screen_exosuit.dm @@ -1,38 +1,43 @@ -// Screen objects hereon out. -#define MECH_UI_STYLE(X) STYLE_SMALLFONTS_OUTLINE(X, 5, COLOR_BLACK, COLOR_WHITE) - /obj/screen/exosuit name = "hardpoint" icon = 'icons/mecha/mech_hud.dmi' icon_state = "base" - var/mob/living/exosuit/owner + requires_ui_style = FALSE + var/initial_maptext var/height = 14 -/obj/screen/exosuit/radio - name = "radio" - maptext_x = 5 - maptext_y = 12 - -/obj/screen/exosuit/radio/Initialize() +/obj/screen/exosuit/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_cat, ui_alpha) . = ..() - maptext = MECH_UI_STYLE("RADIO") + var/mob/living/exosuit/newowner = get_owning_exosuit() + if(!istype(newowner)) + return INITIALIZE_HINT_QDEL + if(initial_maptext) + maptext = MECH_UI_STYLE(initial_maptext) -/obj/screen/exosuit/radio/Click() - if(..()) - if(owner.radio) - owner.radio.attack_self(usr) - else - to_chat(usr, SPAN_WARNING("There is no radio installed.")) +/obj/screen/exosuit/handle_click(mob/user, params) + var/mob/living/exosuit/owner = get_owning_exosuit() + return owner && (user == owner || user.loc == owner) -/obj/screen/exosuit/Initialize() - . = ..() - var/mob/living/exosuit/newowner = loc - if(!istype(newowner)) - return qdel(src) - owner = newowner +/obj/screen/exosuit/proc/get_owning_exosuit() + var/mob/living/exosuit/owner = owner_ref?.resolve() + if(istype(owner) && !QDELETED(owner)) + return owner -/obj/screen/exosuit/Click() - return (owner && (!usr.incapacitated() && usr.canClick() && (usr == owner || usr.loc == owner))) +/obj/screen/exosuit/radio + name = "radio" + maptext_x = 5 + maptext_y = 12 + initial_maptext = "RADIO" + +/obj/screen/exosuit/radio/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner.radio) + owner.radio.attack_self(user) + else + to_chat(user, SPAN_WARNING("There is no radio installed.")) + return TRUE /obj/screen/exosuit/hardpoint name = "hardpoint" @@ -53,7 +58,8 @@ /obj/screen/exosuit/hardpoint/proc/update_system_info() // No point drawing it if we have no item to use or nobody to see it. - if(!holding || !owner) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(!holding || !istype(owner)) return var/has_pilot_with_client = owner.client @@ -89,9 +95,9 @@ if(prob(10)) value = -1 else - value = rand(1,BAR_CAP) + value = rand(1,MECH_BAR_CAP) else - value = round(value * BAR_CAP) + value = round(value * MECH_BAR_CAP) // Draw background. if(!global.default_hardpoint_background) @@ -111,10 +117,10 @@ global.hardpoint_error_icon.pixel_x = 34 new_overlays += global.hardpoint_error_icon else - value = min(value, BAR_CAP) + value = min(value, MECH_BAR_CAP) // Draw statbar. if(!LAZYLEN(global.hardpoint_bar_cache)) - for(var/i=0;i5) @@ -128,63 +134,62 @@ new_overlays += global.hardpoint_bar_cache[i] overlays = new_overlays -/obj/screen/exosuit/hardpoint/Initialize(mapload, var/newtag) +/obj/screen/exosuit/hardpoint/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, newtag) . = ..() hardpoint_tag = newtag name = "hardpoint ([hardpoint_tag])" -/obj/screen/exosuit/hardpoint/Click(var/location, var/control, var/params) - - if(!(..())) - return - - if(!owner?.hatch_closed) - to_chat(usr, SPAN_WARNING("Error: Hardpoint interface disabled while [owner.body.hatch_descriptor] is open.")) - return +/obj/screen/exosuit/hardpoint/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + if(!owner.hatch_closed) + to_chat(user, SPAN_WARNING("Error: Hardpoint interface disabled while [owner.body.hatch_descriptor] is open.")) + return TRUE var/modifiers = params2list(params) if(modifiers["ctrl"]) if(owner.hardpoints_locked) - to_chat(usr, SPAN_WARNING("Hardpoint ejection system is locked.")) - return + to_chat(user, SPAN_WARNING("Hardpoint ejection system is locked.")) + return TRUE if(owner.remove_system(hardpoint_tag)) - to_chat(usr, SPAN_NOTICE("You disengage and discard the system mounted to your [hardpoint_tag] hardpoint.")) + to_chat(user, SPAN_NOTICE("You disengage and discard the system mounted to your [hardpoint_tag] hardpoint.")) else - to_chat(usr, SPAN_DANGER("You fail to remove the system mounted to your [hardpoint_tag] hardpoint.")) - return + to_chat(user, SPAN_DANGER("You fail to remove the system mounted to your [hardpoint_tag] hardpoint.")) + return TRUE if(owner.selected_hardpoint == hardpoint_tag) icon_state = "hardpoint" owner.clear_selected_hardpoint() - else - if(owner.set_hardpoint(hardpoint_tag)) - icon_state = "hardpoint_selected" + else if(owner.set_hardpoint(hardpoint_tag)) + icon_state = "hardpoint_selected" + return TRUE /obj/screen/exosuit/eject name = "eject" maptext_x = 5 maptext_y = 12 + initial_maptext = "EJECT" -/obj/screen/exosuit/eject/Initialize() - . = ..() - maptext = MECH_UI_STYLE("EJECT") - -/obj/screen/exosuit/eject/Click() - if(..()) - owner.eject(usr) +/obj/screen/exosuit/eject/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + owner.eject(user) + return TRUE /obj/screen/exosuit/rename name = "rename" maptext_x = 1 maptext_y = 12 + initial_maptext = "RENAME" -/obj/screen/exosuit/rename/Initialize() - . = ..() - maptext = MECH_UI_STYLE("RENAME") - -/obj/screen/exosuit/rename/Click() - if(..()) - owner.rename(usr) +/obj/screen/exosuit/rename/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + owner.rename(user) + return TRUE /obj/screen/exosuit/power name = "power" @@ -198,7 +203,7 @@ var/uitext = "" var/toggled = FALSE -/obj/screen/exosuit/toggle/Initialize() +/obj/screen/exosuit/toggle/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha) . = ..() queue_icon_update() @@ -207,10 +212,13 @@ icon_state = "[initial(icon_state)][toggled ? "_enabled" : ""]" maptext = "[MECH_UI_STYLE(uitext)]" -/obj/screen/exosuit/toggle/Click() - if(..()) toggled() +/obj/screen/exosuit/toggle/handle_click(mob/user, params) + if(..()) + toggled(user) + return TRUE + return FALSE -/obj/screen/exosuit/toggle/proc/toggled() +/obj/screen/exosuit/toggle/proc/toggled(mob/user) toggled = !toggled queue_icon_update() return toggled @@ -223,12 +231,16 @@ height = 12 uitext = "POWER" -/obj/screen/exosuit/toggle/power_control/toggled() +/obj/screen/exosuit/toggle/power_control/toggled(mob/user) . = ..() - owner.toggle_power(usr) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + owner.toggle_power(user) /obj/screen/exosuit/toggle/power_control/on_update_icon() - toggled = (owner.power == MECH_POWER_ON) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(istype(owner)) + toggled = (owner.power == MECH_POWER_ON) . = ..() /obj/screen/exosuit/toggle/air @@ -239,9 +251,11 @@ height = 12 uitext = "AIR" -/obj/screen/exosuit/toggle/air/toggled() - owner.use_air = ..() - to_chat(usr, SPAN_NOTICE("Auxiliary atmospheric system [owner.use_air ? "enabled" : "disabled"].")) +/obj/screen/exosuit/toggle/air/toggled(mob/user) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + owner.use_air = ..() + to_chat(user, SPAN_NOTICE("Auxiliary atmospheric system [owner.use_air ? "enabled" : "disabled"].")) /obj/screen/exosuit/toggle/maint name = "toggle maintenance protocol" @@ -251,9 +265,11 @@ height = 12 uitext = "MAINT" -/obj/screen/exosuit/toggle/maint/toggled() - owner.maintenance_protocols = ..() - to_chat(usr, SPAN_NOTICE("Maintenance protocols [owner.maintenance_protocols ? "enabled" : "disabled"].")) +/obj/screen/exosuit/toggle/maint/toggled(mob/user) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + owner.maintenance_protocols = ..() + to_chat(user, SPAN_NOTICE("Maintenance protocols [owner.maintenance_protocols ? "enabled" : "disabled"].")) /obj/screen/exosuit/toggle/hardpoint name = "toggle hardpoint lock" @@ -261,9 +277,11 @@ maptext_y = 12 uitext = "GEAR" -/obj/screen/exosuit/toggle/hardpoint/toggled() - owner.hardpoints_locked = ..() - to_chat(usr, SPAN_NOTICE("Hardpoint system access is now [owner.hardpoints_locked ? "disabled" : "enabled"].")) +/obj/screen/exosuit/toggle/hardpoint/toggled(mob/user) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + owner.hardpoints_locked = ..() + to_chat(user, SPAN_NOTICE("Hardpoint system access is now [owner.hardpoints_locked ? "disabled" : "enabled"].")) /obj/screen/exosuit/toggle/hatch name = "toggle hatch lock" @@ -271,52 +289,41 @@ maptext_y = 12 uitext = "LOCK" -/obj/screen/exosuit/toggle/hatch/toggled() - if(!owner.hatch_locked && !owner.hatch_closed) - to_chat(usr, SPAN_WARNING("You cannot lock the hatch while it is open.")) - return - owner.hatch_locked = ..() - to_chat(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is [owner.hatch_locked ? "now" : "no longer" ] locked.")) +/obj/screen/exosuit/toggle/hatch/toggled(mob/user) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + if(!owner.hatch_locked && !owner.hatch_closed) + to_chat(user, SPAN_WARNING("You cannot lock the hatch while it is open.")) + return + owner.hatch_locked = ..() + to_chat(user, SPAN_NOTICE("The [owner.body.hatch_descriptor] is [owner.hatch_locked ? "now" : "no longer" ] locked.")) /obj/screen/exosuit/toggle/hatch_open name = "open or close hatch" maptext_x = 4 maptext_y = 12 -/obj/screen/exosuit/toggle/hatch_open/toggled() - if (!owner) - return - if(owner.hatch_locked && owner.hatch_closed) - to_chat(usr, SPAN_WARNING("You cannot open the hatch while it is locked.")) - return - owner.hatch_closed = ..() - to_chat(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is now [owner.hatch_closed ? "closed" : "open" ].")) - owner.update_icon() +/obj/screen/exosuit/toggle/hatch_open/toggled(mob/user) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + if(owner.hatch_locked && owner.hatch_closed) + to_chat(user, SPAN_WARNING("You cannot open the hatch while it is locked.")) + return + owner.hatch_closed = ..() + to_chat(user, SPAN_NOTICE("The [owner.body.hatch_descriptor] is now [owner.hatch_closed ? "closed" : "open" ].")) + owner.update_icon() /obj/screen/exosuit/toggle/hatch_open/on_update_icon() - toggled = owner.hatch_closed - . = ..() - if(toggled) - maptext = MECH_UI_STYLE("OPEN") - maptext_x = 5 - else - maptext = MECH_UI_STYLE("CLOSE") - maptext_x = 4 - -// This is basically just a holder for the updates the exosuit does. -/obj/screen/exosuit/health - name = "exosuit integrity" - icon_state = "health" - -/obj/screen/exosuit/health/Click() - if(..()) - if(owner && owner.body && owner.get_cell() && owner.body.diagnostics?.is_functional()) - usr.setClickCooldown(0.2 SECONDS) - to_chat(usr, SPAN_NOTICE("The diagnostics panel blinks several times as it updates:")) - playsound(owner.loc,'sound/effects/scanbeep.ogg',30,0) - for(var/obj/item/mech_component/MC in list(owner.arms, owner.legs, owner.body, owner.head)) - if(MC) - MC.return_diagnostics(usr) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(owner) + toggled = owner.hatch_closed + . = ..() + if(toggled) + maptext = MECH_UI_STYLE("OPEN") + maptext_x = 5 + else + maptext = MECH_UI_STYLE("CLOSE") + maptext_x = 4 //Controls if cameras set the vision flags /obj/screen/exosuit/toggle/camera @@ -328,11 +335,14 @@ uitext = "SENSOR" /obj/screen/exosuit/toggle/camera/on_update_icon() - toggled = owner.head.active_sensors + var/mob/living/exosuit/owner = get_owning_exosuit() + if(istype(owner) && owner.head) + toggled = owner.head.active_sensors . = ..() /obj/screen/exosuit/toggle/camera/toggled() - if(!owner.head) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(!istype(owner) || !owner.head) to_chat(usr, SPAN_WARNING("I/O Error: Camera systems not found.")) return if(!owner.head.vision_flags) @@ -355,48 +365,66 @@ var/obj/screen/exosuit/needle/gauge_needle = null desc = "TEST" -/obj/screen/exosuit/heat/Initialize() +/obj/screen/exosuit/heat/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha) . = ..() - gauge_needle = new /obj/screen/exosuit/needle(owner) - add_vis_contents(src, gauge_needle) + gauge_needle = new /obj/screen/exosuit/needle(null, _owner) + add_vis_contents(gauge_needle) /obj/screen/exosuit/heat/Destroy() QDEL_NULL(gauge_needle) . = ..() -/obj/screen/exosuit/heat/Click(location, control, params) - if(..()) - var/modifiers = params2list(params) - if(modifiers["shift"]) - if(owner && owner.material) - usr.show_message(SPAN_NOTICE("Your suit's safe operating limit ceiling is [(celsius ? "[owner.material.melting_point - T0C] °C" : "[owner.material.melting_point] K" )]."), VISIBLE_MESSAGE) - return - if(modifiers["ctrl"]) - celsius = !celsius - usr.show_message(SPAN_NOTICE("You switch the chassis probe display to use [celsius ? "celsius" : "kelvin"]."), VISIBLE_MESSAGE) - return - if(owner && owner.body && owner.body.diagnostics?.is_functional() && owner.loc) - usr.show_message(SPAN_NOTICE("The life support panel blinks several times as it updates:"), VISIBLE_MESSAGE) - - usr.show_message(SPAN_NOTICE("Chassis heat probe reports temperature of [(celsius ? "[owner.bodytemperature - T0C] °C" : "[owner.bodytemperature] K" )]."), VISIBLE_MESSAGE) - if(owner.material.melting_point < owner.bodytemperature) - usr.show_message(SPAN_WARNING("Warning: Current chassis temperature exceeds operating parameters."), VISIBLE_MESSAGE) - var/air_contents = owner.loc.return_air() - if(!air_contents) - usr.show_message(SPAN_WARNING("The external air probe isn't reporting any data!"), VISIBLE_MESSAGE) - else - usr.show_message(SPAN_NOTICE("External probes report: [jointext(atmosanalyzer_scan(owner.loc, air_contents), "
")]"), VISIBLE_MESSAGE) +/obj/screen/exosuit/heat/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + var/modifiers = params2list(params) + if(modifiers["shift"]) + if(owner.material) + user.show_message(SPAN_NOTICE("Your suit's safe operating limit ceiling is [(celsius ? "[owner.material.melting_point - T0C] °C" : "[owner.material.melting_point] K" )]."), VISIBLE_MESSAGE) + return TRUE + if(modifiers["ctrl"]) + celsius = !celsius + user.show_message(SPAN_NOTICE("You switch the chassis probe display to use [celsius ? "celsius" : "kelvin"]."), VISIBLE_MESSAGE) + return TRUE + if(owner.body && owner.body.diagnostics?.is_functional() && owner.loc) + user.show_message(SPAN_NOTICE("The life support panel blinks several times as it updates:"), VISIBLE_MESSAGE) + user.show_message(SPAN_NOTICE("Chassis heat probe reports temperature of [(celsius ? "[owner.bodytemperature - T0C] °C" : "[owner.bodytemperature] K" )]."), VISIBLE_MESSAGE) + if(owner.material.melting_point < owner.bodytemperature) + user.show_message(SPAN_WARNING("Warning: Current chassis temperature exceeds operating parameters."), VISIBLE_MESSAGE) + var/air_contents = owner.loc.return_air() + if(!air_contents) + user.show_message(SPAN_WARNING("The external air probe isn't reporting any data!"), VISIBLE_MESSAGE) else - usr.show_message(SPAN_WARNING("The life support panel isn't responding."), VISIBLE_MESSAGE) + user.show_message(SPAN_NOTICE("External probes report: [jointext(atmosanalyzer_scan(owner.loc, air_contents), "
")]"), VISIBLE_MESSAGE) + else + user.show_message(SPAN_WARNING("The life support panel isn't responding."), VISIBLE_MESSAGE) + return TRUE /obj/screen/exosuit/heat/proc/Update() //Relative value of heat - if(owner && owner.body && owner.body.diagnostics?.is_functional() && gauge_needle) + var/mob/living/exosuit/owner = get_owning_exosuit() + if(istype(owner) && owner.body && owner.body.diagnostics?.is_functional() && gauge_needle) var/value = clamp(owner.bodytemperature / (owner.material.melting_point * 1.55), 0, 1) var/matrix/rot_matrix = matrix() rot_matrix.Turn(Interpolate(-90, 90, value)) rot_matrix.Translate(0, -2) animate(gauge_needle, transform = rot_matrix, 0.1, easing = SINE_EASING) -#undef BAR_CAP -#undef MECH_UI_STYLE +// This is basically just a holder for the updates the exosuit does. +/obj/screen/exosuit/health + name = "exosuit integrity" + icon_state = "health" + +/obj/screen/exosuit/health/handle_click(mob/user, params) + if(!..()) + return FALSE + var/mob/living/exosuit/owner = get_owning_exosuit() + if(!owner.body || !owner.get_cell() || !owner.body.diagnostics?.is_functional()) + return FALSE + user.setClickCooldown(0.2 SECONDS) + to_chat(user, SPAN_NOTICE("The diagnostics panel blinks several times as it updates:")) + playsound(owner.loc,'sound/effects/scanbeep.ogg',30,0) + for(var/obj/item/mech_component/MC in list(owner.arms, owner.legs, owner.body, owner.head)) + MC.return_diagnostics(user) + return TRUE diff --git a/code/_onclick/hud/screen/screen_fullscreen.dm b/code/_onclick/hud/screen/screen_fullscreen.dm new file mode 100644 index 00000000000..53a7f76add0 --- /dev/null +++ b/code/_onclick/hud/screen/screen_fullscreen.dm @@ -0,0 +1,113 @@ +/obj/screen/fullscreen + icon = 'icons/mob/screen/full.dmi' + icon_state = "default" + screen_loc = ui_center_fullscreen + plane = FULLSCREEN_PLANE + layer = FULLSCREEN_LAYER + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + requires_ui_style = FALSE + var/severity = 0 + var/allstate = 0 //shows if it should show up for dead people too + +/obj/screen/fullscreen/Destroy() + severity = 0 + return ..() + +/obj/screen/fullscreen/brute + icon_state = "brutedamageoverlay" + layer = DAMAGE_LAYER + +/obj/screen/fullscreen/oxy + icon_state = "oxydamageoverlay" + layer = DAMAGE_LAYER + +/obj/screen/fullscreen/crit + icon_state = "passage" + layer = CRIT_LAYER + +/obj/screen/fullscreen/blind + icon_state = "blackimageoverlay" + layer = BLIND_LAYER + +/obj/screen/fullscreen/blackout + icon = 'icons/mob/screen/effects.dmi' + icon_state = "black" + screen_loc = ui_entire_screen + layer = BLIND_LAYER + +/obj/screen/fullscreen/impaired + icon_state = "impairedoverlay" + layer = IMPAIRED_LAYER + +/obj/screen/fullscreen/blurry + icon = 'icons/mob/screen/effects.dmi' + screen_loc = ui_entire_screen + icon_state = "blurry" + alpha = 100 + +/obj/screen/fullscreen/flash + icon = 'icons/mob/screen/effects.dmi' + screen_loc = ui_entire_screen + icon_state = "flash" + +/obj/screen/fullscreen/flash/noise + icon_state = "noise" + +/obj/screen/fullscreen/high + icon = 'icons/mob/screen/effects.dmi' + screen_loc = ui_entire_screen + icon_state = "druggy" + alpha = 180 + blend_mode = BLEND_MULTIPLY + +/obj/screen/fullscreen/noise + icon = 'icons/effects/static.dmi' + icon_state = "1 light" + screen_loc = ui_entire_screen + alpha = 127 + +/obj/screen/fullscreen/fadeout + icon = 'icons/mob/screen/effects.dmi' + icon_state = "black" + screen_loc = ui_entire_screen + alpha = 0 + allstate = 1 + +/obj/screen/fullscreen/fadeout/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha) + . = ..() + animate(src, alpha = 255, time = 10) + +/obj/screen/fullscreen/scanline + icon = 'icons/effects/static.dmi' + icon_state = "scanlines" + screen_loc = ui_entire_screen + alpha = 50 + +/obj/screen/fullscreen/fishbed + icon_state = "fishbed" + allstate = 1 + +/obj/screen/fullscreen/pain + icon_state = "brutedamageoverlay6" + alpha = 0 + +/obj/screen/fullscreen/blueprints + icon = 'icons/effects/blueprints.dmi' + icon_state = "base" + screen_loc = ui_entire_screen + alpha = 100 + +/obj/screen/fullscreen/jump_overlay + icon = 'icons/effects/effects.dmi' + icon_state = "mfoam" + screen_loc = ui_entire_screen + color = "#ff9900" + blend_mode = BLEND_SUBTRACT + +/obj/screen/fullscreen/wormhole_overlay + icon = 'icons/effects/effects.dmi' + icon_state = "mfoam" + screen_loc = ui_entire_screen + color = "#ff9900" + alpha = 100 + blend_mode = BLEND_SUBTRACT diff --git a/code/_onclick/hud/screen/screen_global_hud.dm b/code/_onclick/hud/screen/screen_global_hud.dm new file mode 100644 index 00000000000..57591851abe --- /dev/null +++ b/code/_onclick/hud/screen/screen_global_hud.dm @@ -0,0 +1,23 @@ +/obj/screen/global_hud + screen_loc = ui_entire_screen + icon = 'icons/effects/hud_full.dmi' + plane = FULLSCREEN_PLANE + layer = FULLSCREEN_LAYER + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + alpha = 125 + blend_mode = BLEND_MULTIPLY + requires_owner = FALSE + requires_ui_style = FALSE + is_global_screen = TRUE + user_incapacitation_flags = null + +/obj/screen/global_holomap + name = "holomap" + icon = null + plane = HUD_PLANE + layer = HUD_BASE_LAYER + screen_loc = UI_HOLOMAP + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + requires_owner = FALSE + requires_ui_style = FALSE + is_global_screen = TRUE diff --git a/code/_onclick/hud/screen/screen_gun.dm b/code/_onclick/hud/screen/screen_gun.dm new file mode 100644 index 00000000000..fdf77245d1c --- /dev/null +++ b/code/_onclick/hud/screen/screen_gun.dm @@ -0,0 +1,45 @@ +/obj/screen/gun + icon = 'icons/mob/screen/styles/midnight/fire_intent.dmi' + dir = SOUTH + abstract_type = /obj/screen/gun + var/toggle_flag + +/obj/screen/gun/handle_click(mob/user, params) + if(isliving(user)) + var/mob/living/shooter = user + if(!shooter.aiming) + shooter.aiming = new(user) + if(toggle_flag) + shooter.aiming.toggle_permission(toggle_flag) + return TRUE + return FALSE + +/obj/screen/gun/move + name = "Allow Movement" + icon_state = "no_walk1" + screen_loc = ui_gun2 + toggle_flag = TARGET_CAN_MOVE + +/obj/screen/gun/item + name = "Allow Item Use" + icon_state = "no_item1" + screen_loc = ui_gun1 + toggle_flag = TARGET_CAN_CLICK + +/obj/screen/gun/radio + name = "Disallow Radio Use" + icon_state = "no_radio1" + screen_loc = ui_gun4 + toggle_flag = TARGET_CAN_RADIO + +/obj/screen/gun/mode + name = "Toggle Gun Mode" + icon_state = "gun0" + screen_loc = ui_gun_select + +/obj/screen/gun/mode/handle_click(mob/user, params) + if(..()) + var/mob/living/shooter = user + shooter.aiming.toggle_active() + return TRUE + return FALSE diff --git a/code/_onclick/hud/screen/screen_holomap.dm b/code/_onclick/hud/screen/screen_holomap.dm new file mode 100644 index 00000000000..bf5dd691069 --- /dev/null +++ b/code/_onclick/hud/screen/screen_holomap.dm @@ -0,0 +1,101 @@ +/obj/screen/holomap_level_select + icon = 'icons/misc/mark.dmi' + layer = HUD_ITEM_LAYER + requires_owner = FALSE + requires_ui_style = FALSE + var/active = TRUE + var/datum/station_holomap/holomap + +/obj/screen/holomap_text + icon = null + layer = HUD_ITEM_LAYER + maptext_width = 96 + requires_owner = FALSE + requires_ui_style = FALSE + +/obj/screen/holomap_text/Initialize() + . = ..() + appearance_flags |= RESET_COLOR + +/obj/screen/holomap_level_select/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, datum/station_holomap/_holomap) + . = ..() + holomap = _holomap + +/obj/screen/holomap_level_select/handle_click(mob/user, params) + return !isghost(user) + +/obj/screen/holomap_level_select/up + icon_state = "fup" + +/obj/screen/holomap_level_select/up/handle_click(mob/user, params) + if(..() && holomap) + holomap.set_level(holomap.displayed_level - 1) + +/obj/screen/holomap_level_select/down + icon_state = "fdn" + +/obj/screen/holomap_level_select/down/handle_click(mob/user, params) + if(..() && holomap) + holomap.set_level(holomap.displayed_level + 1) + +/obj/screen/holomap_legend + icon = null + maptext_height = 128 + maptext_width = 128 + layer = HUD_ITEM_LAYER + pixel_x = HOLOMAP_LEGEND_X + appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR + requires_owner = FALSE + requires_ui_style = FALSE + var/saved_color + var/datum/station_holomap/holomap = null + var/has_areas = FALSE + +/obj/screen/holomap_legend/cursor + icon = 'icons/misc/holomap_markers.dmi' + icon_state = "you" + maptext_x = 11 + pixel_x = HOLOMAP_LEGEND_X - 3 + has_areas = TRUE + +/obj/screen/holomap_legend/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, map_color, text) + . = ..() + saved_color = map_color + maptext = "[text]" + alpha = 255 + +/obj/screen/holomap_legend/handle_click(mob/user, params) + if(!isghost(user) && istype(holomap)) + holomap.legend_select(src) + +/obj/screen/holomap_legend/proc/Setup(z_level) + has_areas = FALSE + //Get the areas for this z level and mark if we're empty + overlays.Cut() + for(var/area/A in SSminimap.holomaps[z_level].holomap_areas) + if(A.holomap_color == saved_color) + var/image/area = image(SSminimap.holomaps[z_level].holomap_areas[A]) + area.pixel_x = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_X) - pixel_x + area.pixel_y = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_Y) - pixel_y + overlays += area + has_areas = TRUE + +//What happens when we are clicked on / when another is clicked on +/obj/screen/holomap_legend/proc/Select() + //Start blinking + animate(src, alpha = 0, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) + animate(alpha = 254, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) + +/obj/screen/holomap_legend/proc/Deselect() + //Stop blinking + animate(src, flags = ANIMATION_END_NOW) + +//Cursor doesnt do anything specific. +/obj/screen/holomap_legend/cursor/Setup() + return + +/obj/screen/holomap_legend/cursor/Select() + return + +/obj/screen/holomap_legend/cursor/Deselect() + return diff --git a/code/_onclick/hud/screen/screen_intent.dm b/code/_onclick/hud/screen/screen_intent.dm new file mode 100644 index 00000000000..bf496205aa7 --- /dev/null +++ b/code/_onclick/hud/screen/screen_intent.dm @@ -0,0 +1,69 @@ +/obj/screen/intent + name = "intent" + icon = 'icons/mob/screen/styles/intents.dmi' + icon_state = "intent_help" + screen_loc = ui_acti + var/intent = I_HELP + +/obj/screen/intent/handle_click(mob/user, params) + var/list/P = params2list(params) + var/icon_x = text2num(P["icon-x"]) + var/icon_y = text2num(P["icon-y"]) + intent = I_DISARM + if(icon_x <= world.icon_size/2) + if(icon_y <= world.icon_size/2) + intent = I_HURT + else + intent = I_HELP + else if(icon_y <= world.icon_size/2) + intent = I_GRAB + update_icon() + user.a_intent = intent + +/obj/screen/intent/on_update_icon() + icon_state = "intent_[intent]" + +/obj/screen/intent/deity + var/list/desc_screens = list() + screen_loc = "RIGHT-5:122,BOTTOM:8" + +/obj/screen/intent/deity/on_update_icon() + . = ..() + cut_overlays() + add_overlay(image('icons/mob/screen/phenomena.dmi', icon_state = "hud", pixel_x = -138, pixel_y = -1)) + compile_overlays() + +/obj/screen/intent/deity/proc/sync_to_mob(var/mob) + var/mob/living/deity/D = mob + for(var/i in 1 to D.control_types.len) + var/obj/screen/deity_marker/S = new(null, D) + desc_screens[D.control_types[i]] = S + S.screen_loc = screen_loc + //This sets it up right. Trust me. + S.maptext_y = 33/2*i - i*i/2 - 10 + D.client.screen += S + + update_text() + +/obj/screen/intent/deity/proc/update_text() + if(!isdeity(usr)) + return + var/mob/living/deity/D = usr + for(var/i in D.control_types) + var/obj/screen/deity_marker/S = desc_screens[i] + var/datum/phenomena/P = D.intent_phenomenas[intent][i] + if(P) + S.maptext = "[P.name]" + else + S.maptext = null + +/obj/screen/intent/deity/handle_click(mob/user, params) + ..() + update_text() + +/obj/screen/deity_marker + name = "" //Don't want them to be able to actually right click it. + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + icon_state = "blank" + maptext_width = 128 + maptext_x = -125 \ No newline at end of file diff --git a/code/_onclick/hud/screen/screen_internal.dm b/code/_onclick/hud/screen/screen_internal.dm new file mode 100644 index 00000000000..856132a3faa --- /dev/null +++ b/code/_onclick/hud/screen/screen_internal.dm @@ -0,0 +1,9 @@ +/obj/screen/internals + name = "internal" + icon_state = "internal0" + screen_loc = ui_internal + +/obj/screen/internals/handle_click(mob/user, params) + if(isliving(user)) + var/mob/living/M = user + M.ui_toggle_internals() diff --git a/code/_onclick/hud/screen/screen_inventory.dm b/code/_onclick/hud/screen/screen_inventory.dm new file mode 100644 index 00000000000..24b4911d259 --- /dev/null +++ b/code/_onclick/hud/screen/screen_inventory.dm @@ -0,0 +1,73 @@ +/obj/screen/inventory + var/slot_id //The indentifier for the slot. It has nothing to do with ID cards. + var/weakref/mouse_over_atom_ref + +/obj/screen/inventory/handle_click(mob/user, params) + if(name in user.get_held_item_slots()) + if(name == user.get_active_held_item_slot()) + user.attack_empty_hand() + else + user.select_held_item_slot(name) + else if(user.attack_ui(slot_id)) + user.update_inhand_overlays(FALSE) + return FALSE + +/obj/screen/inventory/MouseDrop() + . = ..() + mouse_over_atom_ref = null + update_icon() + +// Overriding Click() here instead of using handle_click() to be thorough. +/obj/screen/inventory/Click(location, control, parameters) + . = ..() + mouse_over_atom_ref = null + update_icon() + +/obj/screen/inventory/MouseEntered(location, control, params) + . = ..() + if(!slot_id || !usr) + return + var/equipped_item = usr.get_active_hand() + if(equipped_item) + var/new_mouse_over_atom = weakref(equipped_item) + if(new_mouse_over_atom != mouse_over_atom_ref) + mouse_over_atom_ref = new_mouse_over_atom + update_icon() + +/obj/screen/inventory/MouseExited(location, control, params) + . = ..() + if(mouse_over_atom_ref) + mouse_over_atom_ref = null + update_icon() + +/obj/screen/inventory/on_update_icon() + + cut_overlays() + + // Validate our owner still exists. + var/mob/owner = owner_ref?.resolve() + if(!istype(owner) || QDELETED(owner) || !(src in owner.client?.screen)) + return + + // Mark our selected hand. + if(owner.get_active_held_item_slot() == slot_id) + add_overlay("hand_selected") + + // Mark anything we're potentially trying to equip. + var/obj/item/mouse_over_atom = mouse_over_atom_ref?.resolve() + if(istype(mouse_over_atom) && !QDELETED(mouse_over_atom) && !usr.get_equipped_item(slot_id)) + var/mutable_appearance/MA = new /mutable_appearance(mouse_over_atom) + MA.layer = HUD_ABOVE_ITEM_LAYER + MA.plane = HUD_PLANE + MA.alpha = 80 + MA.color = mouse_over_atom.mob_can_equip(owner, slot_id, TRUE) ? COLOR_GREEN : COLOR_RED + MA.pixel_x = mouse_over_atom.default_pixel_x + MA.pixel_y = mouse_over_atom.default_pixel_y + MA.pixel_w = mouse_over_atom.default_pixel_w + MA.pixel_z = mouse_over_atom.default_pixel_z + add_overlay(MA) + else + mouse_over_atom_ref = null + + // UI needs to be responsive so avoid the subsecond update delay. + compile_overlays() diff --git a/code/_onclick/hud/screen/screen_lighting.dm b/code/_onclick/hud/screen/screen_lighting.dm new file mode 100644 index 00000000000..24e8b3638a4 --- /dev/null +++ b/code/_onclick/hud/screen/screen_lighting.dm @@ -0,0 +1,12 @@ +/obj/screen/lighting_plane_master + screen_loc = "CENTER" + appearance_flags = PLANE_MASTER + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + plane = LIGHTING_PLANE + blend_mode = BLEND_MULTIPLY + alpha = 255 + requires_ui_style = FALSE + +/obj/screen/lighting_plane_master/set_alpha(var/new_alpha) + if(alpha != new_alpha) + animate(src, alpha = new_alpha, time = SSmobs.wait) \ No newline at end of file diff --git a/code/_onclick/hud/screen/screen_maneuver.dm b/code/_onclick/hud/screen/screen_maneuver.dm new file mode 100644 index 00000000000..76c524467e5 --- /dev/null +++ b/code/_onclick/hud/screen/screen_maneuver.dm @@ -0,0 +1,19 @@ +/obj/screen/maneuver + name = "Prepare Maneuver" + icon_state = "maneuver_off" + screen_loc = ui_pull_resist + +/obj/screen/maneuver/handle_click(mob/user, params) + if(isliving(user)) + var/mob/living/user_living = user + user_living.prepare_maneuver() + +/obj/screen/maneuver/examine(mob/user) + . = ..() + if(!isliving(user)) + return + var/mob/living/user_living = user + if(user_living.prepared_maneuver) + to_chat(src, SPAN_NOTICE("You are prepared to [user_living.prepared_maneuver.name].")) + else + to_chat(src, SPAN_NOTICE("You are not prepared to perform a maneuver.")) diff --git a/code/_onclick/hud/screen/screen_module.dm b/code/_onclick/hud/screen/screen_module.dm new file mode 100644 index 00000000000..8b3c162f43e --- /dev/null +++ b/code/_onclick/hud/screen/screen_module.dm @@ -0,0 +1,11 @@ +/obj/screen/robot_module/select + name = "module" + icon = 'icons/mob/screen/styles/robot/module.dmi' + icon_state = "nomod" + screen_loc = ui_borg_module + requires_ui_style = FALSE + +/obj/screen/robot_module/select/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.pick_module() diff --git a/code/_onclick/hud/screen/screen_movement.dm b/code/_onclick/hud/screen/screen_movement.dm new file mode 100644 index 00000000000..e389e554cc5 --- /dev/null +++ b/code/_onclick/hud/screen/screen_movement.dm @@ -0,0 +1,7 @@ +/obj/screen/movement + name = "movement method" + screen_loc = ui_movi + +/obj/screen/movement/handle_click(mob/user, params) + if(istype(user)) + user.set_next_usable_move_intent() diff --git a/code/_onclick/hud/screen/screen_needs.dm b/code/_onclick/hud/screen/screen_needs.dm new file mode 100644 index 00000000000..eaa8d41ed3e --- /dev/null +++ b/code/_onclick/hud/screen/screen_needs.dm @@ -0,0 +1,117 @@ + +// Yes, these use icon state. Yes, these are terrible. The alternative is duplicating +// a bunch of fairly blobby logic for every click override on these objects. +/obj/screen/food + name = "nutrition" + icon = 'icons/mob/screen/styles/nutrition.dmi' + pixel_w = 8 + icon_state = "nutrition1" + screen_loc = ui_nutrition_small + +/obj/screen/food/handle_click(mob/user, params) + if(user.nutrition_icon == src) + switch(icon_state) + if("nutrition0") + to_chat(usr, SPAN_WARNING("You are completely stuffed.")) + if("nutrition1") + to_chat(usr, SPAN_NOTICE("You are not hungry.")) + if("nutrition2") + to_chat(usr, SPAN_NOTICE("You are a bit peckish.")) + if("nutrition3") + to_chat(usr, SPAN_WARNING("You are quite hungry.")) + if("nutrition4") + to_chat(usr, SPAN_DANGER("You are starving!")) + +/obj/screen/drink + name = "hydration" + icon = 'icons/mob/screen/styles/hydration.dmi' + icon_state = "hydration1" + screen_loc = ui_nutrition_small + +/obj/screen/drink/handle_click(mob/user, params) + if(user.hydration_icon == src) + switch(icon_state) + if("hydration0") + to_chat(usr, SPAN_WARNING("You are overhydrated.")) + if("hydration1") + to_chat(usr, SPAN_NOTICE("You are not thirsty.")) + if("hydration2") + to_chat(usr, SPAN_NOTICE("You are a bit thirsty.")) + if("hydration3") + to_chat(usr, SPAN_WARNING("You are quite thirsty.")) + if("hydration4") + to_chat(usr, SPAN_DANGER("You are dying of thirst!")) + +/obj/screen/bodytemp + name = "body temperature" + icon = 'icons/mob/screen/styles/status.dmi' + icon_state = "temp1" + screen_loc = ui_temp + +/obj/screen/bodytemp/handle_click(mob/user, params) + if(user.bodytemp == src) + switch(icon_state) + if("temp4") + to_chat(usr, SPAN_DANGER("You are being cooked alive!")) + if("temp3") + to_chat(usr, SPAN_DANGER("Your body is burning up!")) + if("temp2") + to_chat(usr, SPAN_DANGER("You are overheating.")) + if("temp1") + to_chat(usr, SPAN_WARNING("You are uncomfortably hot.")) + if("temp-4") + to_chat(usr, SPAN_DANGER("You are being frozen solid!")) + if("temp-3") + to_chat(usr, SPAN_DANGER("You are freezing cold!")) + if("temp-2") + to_chat(usr, SPAN_WARNING("You are dangerously chilled!")) + if("temp-1") + to_chat(usr, SPAN_NOTICE("You are uncomfortably cold.")) + else + to_chat(usr, SPAN_NOTICE("Your body is at a comfortable temperature.")) + +/obj/screen/pressure + name = "pressure" + icon = 'icons/mob/screen/styles/status.dmi' + icon_state = "pressure0" + screen_loc = ui_temp + +/obj/screen/pressure/handle_click(mob/user, params) + if(user.pressure == src) + switch(icon_state) + if("pressure2") + to_chat(usr, SPAN_DANGER("The air pressure here is crushing!")) + if("pressure1") + to_chat(usr, SPAN_WARNING("The air pressure here is dangerously high.")) + if("pressure-1") + to_chat(usr, SPAN_WARNING("The air pressure here is dangerously low.")) + if("pressure-2") + to_chat(usr, SPAN_DANGER("There is nearly no air pressure here!")) + else + to_chat(usr, SPAN_NOTICE("The local air pressure is comfortable.")) + +/obj/screen/toxins + name = "toxin" + icon = 'icons/mob/screen/styles/status.dmi' + icon_state = "tox0" + screen_loc = ui_temp + +/obj/screen/toxins/handle_click(mob/user, params) + if(user.toxin == src) + if(icon_state == "tox0") + to_chat(usr, SPAN_NOTICE("The air is clear of toxins.")) + else + to_chat(usr, SPAN_DANGER("The air is eating away at your skin!")) + +/obj/screen/oxygen + name = "oxygen" + icon = 'icons/mob/screen/styles/status.dmi' + icon_state = "oxy0" + screen_loc = ui_temp + +/obj/screen/oxygen/handle_click(mob/user, params) + if(user.oxygen == src) + if(icon_state == "oxy0") + to_chat(usr, SPAN_NOTICE("You are breathing easy.")) + else + to_chat(usr, SPAN_DANGER("You cannot breathe!")) diff --git a/code/_onclick/hud/screen/screen_pai.dm b/code/_onclick/hud/screen/screen_pai.dm new file mode 100644 index 00000000000..7059432c1a7 --- /dev/null +++ b/code/_onclick/hud/screen/screen_pai.dm @@ -0,0 +1,76 @@ +/obj/screen/pai + icon = 'icons/mob/screen/pai.dmi' + abstract_type = /obj/screen/pai + requires_ui_style = FALSE + user_incapacitation_flags = INCAPACITATION_KNOCKOUT + +/obj/screen/pai/shell + name = "Toggle Chassis" + +/obj/screen/pai/rest + name = "Rest" + +/obj/screen/pai/light + name = "Toggle Light" + +/obj/screen/pai/software + name = "Software Interface" + icon_state = "pai" + screen_loc = ui_pai_software + +/obj/screen/pai/software/handle_click(mob/user, params) + var/mob/living/silicon/pai/pai = user + if(istype(pai)) + pai.paiInterface() + +/obj/screen/pai/shell + name = "Toggle Chassis" + icon_state = "pai_holoform" + screen_loc = ui_pai_shell + +/obj/screen/pai/shell/handle_click(mob/user, params) + var/mob/living/silicon/pai/pai = user + if(istype(pai)) + if(pai.is_in_card) + pai.unfold() + else + pai.fold() + +/obj/screen/pai/chassis + name = "Holochassis Appearance Composite" + icon_state = "pai_holoform" + +/obj/screen/pai/rest + name = "Rest" + icon_state = "pai_rest" + screen_loc = ui_pai_rest + +/obj/screen/pai/rest/handle_click(mob/user, params) + var/mob/living/silicon/pai/pai = user + if(istype(pai)) + pai.lay_down() + +/obj/screen/pai/light + name = "Toggle Integrated Lights" + icon_state = "light" + screen_loc = ui_pai_light + +/obj/screen/pai/light/handle_click(mob/user, params) + var/mob/living/silicon/pai/pai = user + if(istype(pai)) + pai.toggle_integrated_light() + +/obj/screen/pai/subsystems + name = "Subsystems" + icon_state = "subsystems" + screen_loc = ui_pai_subsystems + +/obj/screen/pai/subsystems/handle_click(mob/user, params) + var/mob/living/silicon/pai/pai = user + if(istype(pai)) + var/ss_name = input(usr, "Activates the given subsystem", "Subsystems", "") in pai.silicon_subsystems_by_name + if (!ss_name) + return + var/stat_silicon_subsystem/SSS = pai.silicon_subsystems_by_name[ss_name] + if(istype(SSS)) + SSS.Click() diff --git a/code/_onclick/hud/screen/screen_radial.dm b/code/_onclick/hud/screen/screen_radial.dm new file mode 100644 index 00000000000..4bbdec39008 --- /dev/null +++ b/code/_onclick/hud/screen/screen_radial.dm @@ -0,0 +1,69 @@ +/obj/screen/radial + icon = 'icons/screen/radial.dmi' + layer = HUD_ABOVE_ITEM_LAYER + plane = HUD_PLANE + requires_owner = FALSE + requires_ui_style = FALSE + var/datum/radial_menu/parent + +/obj/screen/radial/Destroy() + parent = null + return ..() + +/obj/screen/radial/slice + icon_state = "radial_slice" + var/choice + var/next_page = FALSE + var/tooltips = FALSE + +/obj/screen/radial/slice/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_slice_focus" + if(tooltips) + openToolTip(usr, src, params, title = name) + +/obj/screen/radial/slice/MouseExited(location, control, params) + . = ..() + icon_state = "radial_slice" + if(tooltips) + closeToolTip(usr) + +/obj/screen/radial/slice/handle_click(mob/user, params) + if(parent && user.client == parent.current_user) + if(next_page) + parent.next_page() + else + parent.element_chosen(choice, user) + +/obj/screen/radial/center + name = "Close Menu" + icon_state = "radial_center" + +/obj/screen/radial/center/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_center_focus" + +/obj/screen/radial/center/MouseExited(location, control, params) + . = ..() + icon_state = "radial_center" + +/obj/screen/radial/center/handle_click(mob/user, params) + if(user.client == parent.current_user) + parent.finished = TRUE + + +/obj/screen/radial/persistent/center + name = "Close Menu" + icon_state = "radial_center" + +/obj/screen/radial/persistent/center/handle_click(mob/user, params) + if(user.client == parent.current_user) + parent.element_chosen(null,user) + +/obj/screen/radial/persistent/center/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_center_focus" + +/obj/screen/radial/persistent/center/MouseExited(location, control, params) + . = ..() + icon_state = "radial_center" diff --git a/code/_onclick/hud/screen/screen_resist.dm b/code/_onclick/hud/screen/screen_resist.dm new file mode 100644 index 00000000000..9bdb07a9a0b --- /dev/null +++ b/code/_onclick/hud/screen/screen_resist.dm @@ -0,0 +1,9 @@ +/obj/screen/resist + name = "resist" + icon_state = "act_resist" + screen_loc = ui_pull_resist + +/obj/screen/resist/handle_click(mob/user, params) + if(isliving(user)) + var/mob/living/L = user + L.resist() diff --git a/code/_onclick/hud/screen/screen_robot_drop_grab.dm b/code/_onclick/hud/screen/screen_robot_drop_grab.dm new file mode 100644 index 00000000000..38232bf14d7 --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_drop_grab.dm @@ -0,0 +1,15 @@ +/obj/screen/robot_drop_grab + name = "drop grab" + icon = 'icons/mob/screen/styles/robot/drop_grab.dmi' + icon_state = "drop_grab" + screen_loc = ui_borg_drop_grab + invisibility = INVISIBILITY_MAXIMUM + alpha = 0 + requires_ui_style = FALSE + +/obj/screen/robot_drop_grab/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.drop_item() + set_invisibility(INVISIBILITY_MAXIMUM) + alpha = 0 diff --git a/code/_onclick/hud/screen/screen_robot_intent.dm b/code/_onclick/hud/screen/screen_robot_intent.dm new file mode 100644 index 00000000000..bbc6501941e --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_intent.dm @@ -0,0 +1,7 @@ +/obj/screen/intent/robot + name = "act_intent" + dir = SOUTHWEST + screen_loc = ui_acti + +/obj/screen/intent/robot/handle_click(mob/user, params) + user.a_intent_change("right") diff --git a/code/_onclick/hud/screen/screen_robot_inventory.dm b/code/_onclick/hud/screen/screen_robot_inventory.dm new file mode 100644 index 00000000000..ebe63dcf3df --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_inventory.dm @@ -0,0 +1,14 @@ +/obj/screen/robot_inventory + name = "inventory" + icon = 'icons/mob/screen/styles/robot/panel.dmi' + icon_state = "inventory" + screen_loc = ui_borg_inventory + requires_ui_style = FALSE + +/obj/screen/robot_inventory/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.module) + R.hud_used.toggle_show_robot_modules() + return 1 + to_chat(R, "You haven't selected a module yet.") diff --git a/code/_onclick/hud/screen/screen_robot_modules.dm b/code/_onclick/hud/screen/screen_robot_modules.dm new file mode 100644 index 00000000000..12d82511fe1 --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_modules.dm @@ -0,0 +1,36 @@ +/obj/screen/robot_modules_background + name = "module" + icon_state = "block" + icon = 'icons/mob/screen/styles/robot/modules_background.dmi' + requires_ui_style = FALSE + +/obj/screen/robot_module + dir = SOUTHWEST + requires_ui_style = FALSE + icon = 'icons/mob/screen/styles/robot/inventory.dmi' + var/module_index + +/obj/screen/robot_module/handle_click(mob/user, params) + if(isrobot(user) && !isnull(module_index)) + var/mob/living/silicon/robot/robot = user + robot.toggle_module(module_index) + return TRUE + return ..() + +/obj/screen/robot_module/one + name = "module1" + icon_state = "inv1" + screen_loc = ui_inv1 + module_index = 1 + +/obj/screen/robot_module/two + name = "module2" + icon_state = "inv2" + screen_loc = ui_inv2 + module_index = 2 + +/obj/screen/robot_module/three + name = "module3" + icon_state = "inv3" + screen_loc = ui_inv3 + module_index = 3 diff --git a/code/_onclick/hud/screen/screen_robot_panel.dm b/code/_onclick/hud/screen/screen_robot_panel.dm new file mode 100644 index 00000000000..c712a637442 --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_panel.dm @@ -0,0 +1,11 @@ +/obj/screen/robot_panel + name = "panel" + icon = 'icons/mob/screen/styles/robot/panel.dmi' + icon_state = "panel" + screen_loc = ui_borg_panel + requires_ui_style = FALSE + +/obj/screen/robot_panel/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.installed_modules() diff --git a/code/_onclick/hud/screen/screen_robot_radio.dm b/code/_onclick/hud/screen/screen_robot_radio.dm new file mode 100644 index 00000000000..e1046ddfc75 --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_radio.dm @@ -0,0 +1,12 @@ +/obj/screen/robot_radio + name = "radio" + dir = SOUTHWEST + icon = 'icons/mob/screen/styles/robot/panel.dmi' + icon_state = "radio" + screen_loc = ui_movi + requires_ui_style = FALSE + +/obj/screen/robot_radio/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.radio_menu() \ No newline at end of file diff --git a/code/_onclick/hud/screen/screen_robot_store.dm b/code/_onclick/hud/screen/screen_robot_store.dm new file mode 100644 index 00000000000..8ea81ab0563 --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_store.dm @@ -0,0 +1,15 @@ +/obj/screen/robot_store + name = "store" + icon = 'icons/mob/screen/styles/robot/panel.dmi' + icon_state = "store" + screen_loc = ui_borg_store + requires_ui_style = FALSE + +/obj/screen/robot_store/handle_click(mob/user, params) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.module) + R.uneq_active() + R.hud_used.update_robot_modules_display() + else + to_chat(R, "You haven't selected a module yet.") diff --git a/code/_onclick/hud/screen/screen_robot_warnings.dm b/code/_onclick/hud/screen/screen_robot_warnings.dm new file mode 100644 index 00000000000..6cff60008fd --- /dev/null +++ b/code/_onclick/hud/screen/screen_robot_warnings.dm @@ -0,0 +1,19 @@ +/obj/screen/robot_charge + name = "cell" + icon_state = "charge-empty" + screen_loc = ui_toxin + +/obj/screen/robot_health + name = "health" + icon_state = "health0" + screen_loc = ui_borg_health + +/obj/screen/robot_oxygen + name = "oxygen" + icon_state = "oxy0" + screen_loc = ui_oxygen + +/obj/screen/robot_fire + name = "fire" + icon_state = "fire0" + screen_loc = ui_fire diff --git a/code/_onclick/hud/screen/screen_setup.dm b/code/_onclick/hud/screen/screen_setup.dm new file mode 100644 index 00000000000..ebd2975ffba --- /dev/null +++ b/code/_onclick/hud/screen/screen_setup.dm @@ -0,0 +1,26 @@ +// Character setup stuff +/obj/screen/setup_preview + icon = 'icons/effects/32x32.dmi' + plane = DEFAULT_PLANE + layer = MOB_LAYER + requires_owner = FALSE + requires_ui_style = FALSE + var/datum/preferences/pref + +/obj/screen/setup_preview/Destroy() + pref = null + return ..() + +// Background 'floor' +/obj/screen/setup_preview/bg + layer = TURF_LAYER + mouse_over_pointer = MOUSE_HAND_POINTER + +// Uses Click() instead of handle_click() due to being accessed by new_player mobs. +/obj/screen/setup_preview/bg/Click(location, control, params) + if(pref) + pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) + var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(pref.client_ckey) + if(mannequin) + pref.update_character_previews(mannequin) + return ..() diff --git a/code/_onclick/hud/screen/screen_stamina.dm b/code/_onclick/hud/screen/screen_stamina.dm new file mode 100644 index 00000000000..09051b8c74b --- /dev/null +++ b/code/_onclick/hud/screen/screen_stamina.dm @@ -0,0 +1,7 @@ +/obj/screen/stamina + name = "stamina" + icon = 'icons/effects/progressbar.dmi' + icon_state = "prog_bar_100" + invisibility = INVISIBILITY_MAXIMUM + screen_loc = ui_stamina + requires_ui_style = FALSE diff --git a/code/_onclick/hud/screen/screen_storage.dm b/code/_onclick/hud/screen/screen_storage.dm new file mode 100644 index 00000000000..7a90ba72a04 --- /dev/null +++ b/code/_onclick/hud/screen/screen_storage.dm @@ -0,0 +1,61 @@ +/obj/screen/storage + name = "storage" + icon = 'icons/mob/screen/storage.dmi' + user_incapacitation_flags = INCAPACITATION_DISRUPTED + screen_loc = ui_storage_default + layer = HUD_BASE_LAYER + requires_owner = FALSE + requires_ui_style = FALSE + var/weakref/storage_master_ref + +/obj/screen/storage/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, obj/item/storage/_storage_master) + . = ..() + storage_master_ref = _storage_master && weakref(_storage_master) + +/obj/screen/storage/handle_click(mob/user, params) + var/obj/item/storage/storage_master = storage_master_ref?.resolve() + if(istype(storage_master) && !QDELETED(storage_master)) + var/obj/item/I = user.get_active_hand() + if(I) + user.ClickOn(storage_master) + return TRUE + return FALSE + +/obj/screen/storage/start + icon_state = "storage_start" + +/obj/screen/storage/cont + icon_state = "storage_continue" + +/obj/screen/storage/boxes + icon_state = "block" + +/obj/screen/storage/end + icon_state = "storage_end" + +/obj/screen/storage/close + name = "close" + icon = 'icons/effects/markers.dmi' + icon_state = "x" + layer = HUD_BASE_LAYER + +/obj/screen/storage/close/handle_click(mob/user, params) + var/obj/item/storage/storage_master = storage_master_ref?.resolve() + if(istype(storage_master) && !QDELETED(storage_master)) + storage_master.close(user) + return TRUE + return FALSE + +/obj/screen/stored + layer = HUD_BASE_LAYER + requires_owner = FALSE + requires_ui_style = FALSE + +/obj/screen/stored/start + icon_state = "stored_start" + +/obj/screen/stored/cont + icon_state = "stored_continue" + +/obj/screen/stored/end + icon_state = "stored_end" diff --git a/code/_onclick/hud/screen/screen_swaphands.dm b/code/_onclick/hud/screen/screen_swaphands.dm new file mode 100644 index 00000000000..037602bf9dd --- /dev/null +++ b/code/_onclick/hud/screen/screen_swaphands.dm @@ -0,0 +1,9 @@ +/obj/screen/inventory/swaphand + name = "hand" + icon_state = "hand1" + +/obj/screen/inventory/swaphand/handle_click(mob/user, params) + user.swap_hand() + +/obj/screen/inventory/swaphand/right + icon_state = "hand2" diff --git a/code/_onclick/hud/screen/screen_throw.dm b/code/_onclick/hud/screen/screen_throw.dm new file mode 100644 index 00000000000..679018fba8d --- /dev/null +++ b/code/_onclick/hud/screen/screen_throw.dm @@ -0,0 +1,8 @@ +/obj/screen/throw_toggle + name = "throw" + icon_state = "act_throw_off" + screen_loc = ui_drop_throw + +/obj/screen/throw_toggle/handle_click(mob/user, params) + if(!user.stat && isturf(user.loc) && !user.restrained()) + user.toggle_throw_mode() diff --git a/code/_onclick/hud/screen/screen_toggle.dm b/code/_onclick/hud/screen/screen_toggle.dm new file mode 100644 index 00000000000..bab0ba27654 --- /dev/null +++ b/code/_onclick/hud/screen/screen_toggle.dm @@ -0,0 +1,13 @@ +/obj/screen/toggle + name = "toggle" + icon_state = "other" + screen_loc = ui_inventory + +/obj/screen/toggle/handle_click(mob/user, params) + if(user.hud_used.inventory_shown) + user.client.screen -= user.hud_used.other + user.hud_used.hide_inventory() + else + user.client.screen += user.hud_used.other + user.hud_used.show_inventory() + return TRUE diff --git a/code/_onclick/hud/screen/screen_up_hint.dm b/code/_onclick/hud/screen/screen_up_hint.dm new file mode 100644 index 00000000000..a6e45820115 --- /dev/null +++ b/code/_onclick/hud/screen/screen_up_hint.dm @@ -0,0 +1,9 @@ +/obj/screen/up_hint + name = "up hint" + icon_state = "uphint0" + screen_loc = ui_up_hint + +/obj/screen/up_hint/handle_click(mob/user, params) + if(isliving(user)) + var/mob/living/L = user + L.lookup() diff --git a/code/_onclick/hud/screen/screen_warnings.dm b/code/_onclick/hud/screen/screen_warnings.dm new file mode 100644 index 00000000000..842f93677d1 --- /dev/null +++ b/code/_onclick/hud/screen/screen_warnings.dm @@ -0,0 +1,14 @@ +/obj/screen/fire_warning + name = "fire" + icon_state = "fire0" + screen_loc = ui_fire + +/obj/screen/health_warning + name = "health" + icon_state = "health0" + screen_loc = ui_health + +/obj/screen/warning_cells + name = "cell" + icon_state = "charge-empty" + screen_loc = ui_nutrition diff --git a/code/_onclick/hud/screen/screen_zone_selector.dm b/code/_onclick/hud/screen/screen_zone_selector.dm new file mode 100644 index 00000000000..008d2b90262 --- /dev/null +++ b/code/_onclick/hud/screen/screen_zone_selector.dm @@ -0,0 +1,79 @@ +/obj/screen/zone_selector + name = "damage zone" + icon_state = "zone_sel_tail" + screen_loc = ui_zonesel + var/selecting = BP_CHEST + +/obj/screen/zone_selector/handle_click(mob/user, params) + var/list/PL = params2list(params) + var/icon_x = text2num(PL["icon-x"]) + var/icon_y = text2num(PL["icon-y"]) + var/new_selecting + switch(icon_y) + if(1 to 3) //Feet + switch(icon_x) + if(10 to 15) + new_selecting = BP_R_FOOT + if(17 to 22) + new_selecting = BP_L_FOOT + else + return 1 + if(4 to 9) //Legs + switch(icon_x) + if(10 to 15) + new_selecting = BP_R_LEG + if(17 to 22) + new_selecting = BP_L_LEG + if(23 to 28) + new_selecting = BP_TAIL + else + return 1 + if(10 to 13) //Hands and groin + switch(icon_x) + if(8 to 11) + new_selecting = BP_R_HAND + if(12 to 20) + new_selecting = BP_GROIN + if(21 to 24) + new_selecting = BP_L_HAND + else + return 1 + if(14 to 22) //Chest and arms to shoulders + switch(icon_x) + if(8 to 11) + new_selecting = BP_R_ARM + if(12 to 20) + new_selecting = BP_CHEST + if(21 to 24) + new_selecting = BP_L_ARM + else + return 1 + if(23 to 30) //Head, but we need to check for eye or mouth + if(icon_x in 12 to 20) + new_selecting = BP_HEAD + switch(icon_y) + if(23 to 24) + if(icon_x in 15 to 17) + new_selecting = BP_MOUTH + if(26) //Eyeline, eyes are on 15 and 17 + if(icon_x in 14 to 18) + new_selecting = BP_EYES + if(25 to 27) + if(icon_x in 15 to 17) + new_selecting = BP_EYES + set_selected_zone(new_selecting) + return TRUE + +/obj/screen/zone_selector/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha) + . = ..() + update_icon() + +/obj/screen/zone_selector/proc/set_selected_zone(bodypart) + var/old_selecting = selecting + selecting = bodypart + if(old_selecting != selecting) + update_icon() + return TRUE + +/obj/screen/zone_selector/on_update_icon() + set_overlays(image('icons/mob/zone_sel.dmi', "[selecting]")) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm deleted file mode 100644 index 4662c1fdc8d..00000000000 --- a/code/_onclick/hud/screen_objects.dm +++ /dev/null @@ -1,451 +0,0 @@ -/* - Screen objects - Todo: improve/re-implement - - Screen objects are only used for the hud and should not appear anywhere "in-game". - They are used with the client/screen list and the screen_loc var. - For more information, see the byond documentation on the screen_loc and screen vars. -*/ -/obj/screen - name = "" - icon = 'icons/mob/screen1.dmi' - plane = HUD_PLANE - layer = HUD_BASE_LAYER - appearance_flags = NO_CLIENT_COLOR - is_spawnable_type = FALSE - var/globalscreen = FALSE //Global screens are not qdeled when the holding mob is destroyed. - -/obj/screen/receive_mouse_drop(atom/dropping, mob/user) - return TRUE - -/obj/screen/check_mousedrop_interactivity(var/mob/user) - return user.client && (src in user.client.screen) - -/obj/screen/text - icon = null - icon_state = null - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - screen_loc = "CENTER-7,CENTER-7" - maptext_height = 480 - maptext_width = 480 - -/obj/screen/inventory - var/slot_id //The indentifier for the slot. It has nothing to do with ID cards. - var/weakref/mouse_over_atom_ref - var/weakref/owner_ref - -/obj/screen/inventory/Initialize(var/ml, var/mob/_owner) - if(!istype(_owner)) - PRINT_STACK_TRACE("Inventory screen object supplied a non-mob owner!") - owner_ref = weakref(_owner) - return ..() - -/obj/screen/inventory/MouseDrop() - . = ..() - mouse_over_atom_ref = null - update_icon() - -/obj/screen/inventory/Click() - . = ..() - mouse_over_atom_ref = null - update_icon() - -/obj/screen/inventory/MouseEntered(location, control, params) - . = ..() - if(!slot_id || !usr) - return - var/equipped_item = usr.get_active_hand() - if(equipped_item) - var/new_mouse_over_atom = weakref(equipped_item) - if(new_mouse_over_atom != mouse_over_atom_ref) - mouse_over_atom_ref = new_mouse_over_atom - update_icon() - -/obj/screen/inventory/MouseExited(location, control, params) - . = ..() - if(mouse_over_atom_ref) - mouse_over_atom_ref = null - update_icon() - -/obj/screen/inventory/on_update_icon() - - cut_overlays() - - // Validate our owner still exists. - var/mob/owner = owner_ref?.resolve() - if(!istype(owner) || QDELETED(owner) || !(src in owner.client?.screen)) - return - - // Mark our selected hand. - if(owner.get_active_held_item_slot() == slot_id) - add_overlay("hand_selected") - - // Mark anything we're potentially trying to equip. - var/obj/item/mouse_over_atom = mouse_over_atom_ref?.resolve() - if(istype(mouse_over_atom) && !QDELETED(mouse_over_atom) && !usr.get_equipped_item(slot_id)) - var/mutable_appearance/MA = new /mutable_appearance(mouse_over_atom) - MA.layer = HUD_ABOVE_ITEM_LAYER - MA.plane = HUD_PLANE - MA.alpha = 80 - MA.color = mouse_over_atom.mob_can_equip(owner, slot_id, TRUE) ? COLOR_GREEN : COLOR_RED - MA.pixel_x = mouse_over_atom.default_pixel_x - MA.pixel_y = mouse_over_atom.default_pixel_y - MA.pixel_w = mouse_over_atom.default_pixel_w - MA.pixel_z = mouse_over_atom.default_pixel_z - add_overlay(MA) - else - mouse_over_atom_ref = null - - // UI needs to be responsive so avoid the subsecond update delay. - compile_overlays() - -/obj/screen/close - name = "close" - // A reference to the storage item this atom is associated with. - var/obj/master - -/obj/screen/close/Destroy() - master = null - return ..() - -/obj/screen/close/Click() - if(master) - if(istype(master, /obj/item/storage)) - var/obj/item/storage/S = master - S.close(usr) - return 1 - -/obj/screen/default_attack_selector - name = "default attack selector" - icon_state = "attack_none" - screen_loc = ui_attack_selector - var/mob/living/carbon/human/owner - -/obj/screen/default_attack_selector/Click(location, control, params) - if(!owner || usr != owner || owner.incapacitated()) - return FALSE - - var/list/modifiers = params2list(params) - if(modifiers["shift"]) - to_chat(owner, SPAN_NOTICE("Your current default attack is [owner.default_attack?.name || "unset"].")) - if(owner.default_attack) - var/summary = owner.default_attack.summarize() - if(summary) - to_chat(owner, SPAN_NOTICE(summary)) - return - - owner.set_default_unarmed_attack(src) - return TRUE - -/obj/screen/default_attack_selector/Destroy() - if(owner) - if(owner.attack_selector == src) - owner.attack_selector = null - owner = null - . = ..() - -/obj/screen/default_attack_selector/proc/set_owner(var/mob/living/carbon/human/_owner) - owner = _owner - if(!owner) - qdel(src) - else - update_icon() - -/obj/screen/default_attack_selector/on_update_icon() - var/decl/natural_attack/attack = owner?.default_attack - icon_state = attack?.selector_icon_state || "attack_none" - -/obj/screen/item_action - var/obj/item/owner - -/obj/screen/item_action/Destroy() - owner = null - . = ..() - -/obj/screen/item_action/Click() - if(!usr || !owner) - return 1 - if(!usr.canClick()) - return - - if(usr.incapacitated()) - return 1 - - if(!(owner in usr)) - return 1 - - owner.ui_action_click() - return 1 - -/obj/screen/storage - name = "storage" - // A reference to the storage item this atom is associated with. - var/obj/master - -/obj/screen/storage/Destroy() - master = null - return ..() - -/obj/screen/storage/Click() - if(!usr.canClick()) - return 1 - if(usr.incapacitated(INCAPACITATION_DISRUPTED)) - return 1 - if(master) - var/obj/item/I = usr.get_active_hand() - if(I) - usr.ClickOn(master) - return 1 - -/obj/screen/zone_selector - name = "damage zone" - icon_state = "zone_sel" - screen_loc = ui_zonesel - var/selecting = BP_CHEST - -/obj/screen/zone_selector/Click(location, control,params) - var/list/PL = params2list(params) - var/icon_x = text2num(PL["icon-x"]) - var/icon_y = text2num(PL["icon-y"]) - var/new_selecting - - switch(icon_y) - if(1 to 3) //Feet - switch(icon_x) - if(10 to 15) - new_selecting = BP_R_FOOT - if(17 to 22) - new_selecting = BP_L_FOOT - else - return 1 - if(4 to 9) //Legs - switch(icon_x) - if(10 to 15) - new_selecting = BP_R_LEG - if(17 to 22) - new_selecting = BP_L_LEG - if(23 to 28) - new_selecting = BP_TAIL - else - return 1 - if(10 to 13) //Hands and groin - switch(icon_x) - if(8 to 11) - new_selecting = BP_R_HAND - if(12 to 20) - new_selecting = BP_GROIN - if(21 to 24) - new_selecting = BP_L_HAND - else - return 1 - if(14 to 22) //Chest and arms to shoulders - switch(icon_x) - if(8 to 11) - new_selecting = BP_R_ARM - if(12 to 20) - new_selecting = BP_CHEST - if(21 to 24) - new_selecting = BP_L_ARM - else - return 1 - if(23 to 30) //Head, but we need to check for eye or mouth - if(icon_x in 12 to 20) - new_selecting = BP_HEAD - switch(icon_y) - if(23 to 24) - if(icon_x in 15 to 17) - new_selecting = BP_MOUTH - if(26) //Eyeline, eyes are on 15 and 17 - if(icon_x in 14 to 18) - new_selecting = BP_EYES - if(25 to 27) - if(icon_x in 15 to 17) - new_selecting = BP_EYES - - set_selected_zone(new_selecting) - return 1 - -/obj/screen/zone_selector/Initialize(mapload) - . = ..() - update_icon() - -/obj/screen/zone_selector/proc/set_selected_zone(bodypart) - var/old_selecting = selecting - selecting = bodypart - if(old_selecting != selecting) - update_icon() - return TRUE - -/obj/screen/zone_selector/on_update_icon() - set_overlays(image('icons/mob/zone_sel.dmi', "[selecting]")) - -/obj/screen/intent - name = "intent" - icon = 'icons/mob/screen/white.dmi' - icon_state = "intent_help" - screen_loc = ui_acti - var/intent = I_HELP - -/obj/screen/intent/Click(var/location, var/control, var/params) - var/list/P = params2list(params) - var/icon_x = text2num(P["icon-x"]) - var/icon_y = text2num(P["icon-y"]) - intent = I_DISARM - if(icon_x <= world.icon_size/2) - if(icon_y <= world.icon_size/2) - intent = I_HURT - else - intent = I_HELP - else if(icon_y <= world.icon_size/2) - intent = I_GRAB - update_icon() - usr.a_intent = intent - -/obj/screen/intent/on_update_icon() - icon_state = "intent_[intent]" - -/obj/screen/Click(location, control, params) - if(!usr) return 1 - - switch(name) - if("toggle") - if(usr.hud_used.inventory_shown) - usr.client.screen -= usr.hud_used.other - usr.hud_used.hide_inventory() - else - usr.client.screen += usr.hud_used.other - usr.hud_used.show_inventory() - - if("equip") - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.quick_equip() - - if("resist") - if(isliving(usr)) - var/mob/living/L = usr - L.resist() - - if("Reset Machine") - usr.unset_machine() - - if("up hint") - if(isliving(usr)) - var/mob/living/L = usr - L.lookup() - - if("internal") - if(isliving(usr)) - var/mob/living/M = usr - M.ui_toggle_internals() - - if("act_intent") - usr.a_intent_change("right") - - if("throw") - if(!usr.stat && isturf(usr.loc) && !usr.restrained()) - usr.toggle_throw_mode() - if("drop") - if(usr.client) - usr.client.drop_item() - - if("module") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.pick_module() - - if("inventory") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - if(R.module) - R.hud_used.toggle_show_robot_modules() - return 1 - else - to_chat(R, "You haven't selected a module yet.") - - if("radio") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.radio_menu() - if("panel") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.installed_modules() - - if("store") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - if(R.module) - R.uneq_active() - R.hud_used.update_robot_modules_display() - else - to_chat(R, "You haven't selected a module yet.") - - if("module1") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.toggle_module(1) - - if("module2") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.toggle_module(2) - - if("module3") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - R.toggle_module(3) - else - return 0 - return 1 - -/obj/screen/inventory/Click() - // At this point in client Click() code we have passed the 1/10 sec check and little else - // We don't even know if it's a middle click - if(!usr.canClick() || usr.incapacitated()) - return TRUE - - if(name == "swap" || name == "hand") - usr.swap_hand() - else if(name in usr.get_held_item_slots()) - if(name == usr.get_active_held_item_slot()) - usr.attack_empty_hand() - else - usr.select_held_item_slot(name) - else if(usr.attack_ui(slot_id)) - usr.update_inhand_overlays(FALSE) - - return TRUE - -// Character setup stuff -/obj/screen/setup_preview - plane = DEFAULT_PLANE - layer = MOB_LAYER - - var/datum/preferences/pref - -/obj/screen/setup_preview/Destroy() - pref = null - return ..() - -// Background 'floor' -/obj/screen/setup_preview/bg - layer = TURF_LAYER - mouse_over_pointer = MOUSE_HAND_POINTER - -/obj/screen/setup_preview/bg/Click(params) - if(pref) - pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) - pref.update_preview_icon() - -/obj/screen/lighting_plane_master - screen_loc = "CENTER" - appearance_flags = PLANE_MASTER - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - plane = LIGHTING_PLANE - blend_mode = BLEND_MULTIPLY - alpha = 255 - -/obj/screen/lighting_plane_master/proc/set_alpha(var/newalpha) - if(alpha != newalpha) - animate(src, alpha = newalpha, time = SSmobs.wait) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index e9c5a42cbfa..3c3a4a907c6 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -46,28 +46,33 @@ avoid code duplication. This includes items that may sometimes act as a standard /mob/living/attackby(obj/item/I, mob/user) if(!ismob(user)) - return 0 + return TRUE if(can_operate(src,user) != OPERATE_DENY && I.do_surgery(src,user)) //Surgery - return 1 + return TRUE return I.attack(src, user, user.get_target_zone() || ran_zone()) /mob/living/carbon/human/attackby(obj/item/I, mob/user) - var/user_zone_sel = user.get_target_zone() - if(user == src && user_zone_sel == BP_MOUTH && can_devour(I, silent = TRUE)) + + . = ..() + if(.) + if(user.a_intent != I_HELP) + return + var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, user.get_target_zone()) + if(!E) + return + for(var/datum/ailment/ailment in E.ailments) + if(ailment.treated_by_item(I)) + ailment.was_treated_by_item(I, user, src) + return + + else if(user == src && user.get_target_zone() == BP_MOUTH && can_devour(I, silent = TRUE)) var/obj/item/blocked = src.check_mouth_coverage() if(blocked) to_chat(user, SPAN_WARNING("\The [blocked] is in the way!")) - return TRUE - if(devour(I)) - return TRUE - if(user.a_intent == I_HELP) - var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, user_zone_sel) - if(E) - for(var/datum/ailment/ailment in E.ailments) - if(ailment.treated_by_item(I)) - ailment.was_treated_by_item(I, user, src) - return TRUE - return ..() + else + devour(I) + return TRUE + // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. @@ -80,6 +85,10 @@ avoid code duplication. This includes items that may sometimes act as a standard //I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files. /obj/item/proc/attack(mob/living/M, mob/living/user, var/target_zone, animate = TRUE) + + if(user?.a_intent != I_HURT && is_edible(M) && handle_eaten_by_mob(user, M) != EATEN_INVALID) + return TRUE + if(item_flags & ITEM_FLAG_NO_BLUDGEON) return FALSE diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index d529f620b2f..0391c5ed46e 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -2,26 +2,6 @@ /atom/proc/attack_generic(mob/user) return 0 -/* - Humans: - Adds an exception for gloves, to allow special glove types like the ninja ones. - - Otherwise pretty standard. -*/ -/mob/living/carbon/human/UnarmedAttack(var/atom/A, var/proximity) - - if(!..()) - return - - // Special glove functions: - // If the gloves do anything, have them return 1 to stop - // normal attack_hand() here. - var/obj/item/clothing/gloves/G = get_equipped_item(slot_gloves_str) // not typecast specifically enough in defines - if(istype(G) && G.Touch(A,1)) - return - - A.attack_hand(src) - /atom/proc/handle_grab_interaction(var/mob/user) return FALSE @@ -29,7 +9,7 @@ SHOULD_CALL_PARENT(TRUE) if(handle_grab_interaction(user)) return TRUE - if(!LAZYLEN(climbers) || (user in climbers) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) + if(!LAZYLEN(climbers) || (user in climbers) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, silent = TRUE)) return FALSE user.visible_message( SPAN_DANGER("\The [user] shakes \the [src]!"), @@ -40,14 +20,16 @@ /mob/proc/attack_empty_hand() return -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) - return +/mob/living/attack_empty_hand() + // Handle any prepared ability/spell/power invocations. + var/datum/extension/abilities/abilities = get_extension(src, /datum/extension/abilities) + if(abilities?.do_self_invocation()) + return TRUE + return FALSE -/mob/living/CtrlClickOn(var/atom/A) - . = ..() - if(!. && a_intent == I_GRAB && length(available_maneuvers)) - . = perform_maneuver(prepared_maneuver || available_maneuvers[1], A) +/mob/living/carbon/human/RestrainedClickOn(var/atom/A) + return /mob/living/carbon/human/RangedAttack(var/atom/A, var/params) //Climbing up open spaces @@ -72,11 +54,12 @@ /mob/living/carbon/alien/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) - return 0 + . = ..() + if(.) + return setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - A.attack_generic(src,rand(5,6),"bites") + return A.attack_generic(src,rand(5,6),"bites") /* New Players: @@ -88,23 +71,37 @@ /* Animals */ + /mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) + . = ..() + if(.) return - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(isliving(A)) - if(a_intent == I_HELP || !get_natural_weapon()) - custom_emote(1,"[friendly] [A]!") - return - if(ckey) - admin_attack_log(src, A, "Has attacked its victim.", "Has been attacked by its attacker.") - if(a_intent == I_HELP) - A.attack_animal(src) - else - var/attacking_with = get_natural_weapon() - if(attacking_with) - A.attackby(attacking_with, src) + + setClickCooldown(attack_delay) + var/attacking_with = get_natural_weapon() + if(a_intent == I_HELP || !attacking_with) + return A.attack_animal(src) + + var/decl/pronouns/G = get_pronouns() + face_atom(A) + if(attack_delay) + walk_to(src, 0) // Cancel any baked-in movement. + do_windup_animation(A, attack_delay, no_reset = TRUE) + if(!do_after(src, attack_delay, A) || !Adjacent(A)) + visible_message(SPAN_NOTICE("\The [src] misses [G.his] attack on \the [A]!")) + animate(src, pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2) // reset wherever the attack animation got us to. + MoveToTarget(TRUE) // Restart hostile mob tracking. + return TRUE + MoveToTarget(TRUE) // Restart hostile mob tracking. + + if(ismob(A)) // Clientless mobs are too dum to move away, so they can be missed. + var/mob/mob = A + if(!mob.ckey && !prob(get_melee_accuracy())) + visible_message(SPAN_NOTICE("\The [src] misses [G.his] attack on \the [A]!")) + return TRUE + + return A.attackby(attacking_with, src) // Attack hand but for simple animals /atom/proc/attack_animal(mob/user) diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm index 7813f9d5d3c..8dd8799e561 100644 --- a/code/_onclick/rig.dm +++ b/code/_onclick/rig.dm @@ -28,9 +28,6 @@ /mob/living/carbon/human/can_use_rig() return 1 -/mob/living/carbon/brain/can_use_rig() - return istype(loc, /obj/item/mmi) - /mob/living/silicon/ai/can_use_rig() return carded diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm index b609a369ffb..c37a4784fe0 100644 --- a/code/controllers/autotransfer.dm +++ b/code/controllers/autotransfer.dm @@ -4,7 +4,7 @@ var/global/datum/controller/transfer_controller/transfer_controller var/timerbuffer = 0 //buffer for time check /datum/controller/transfer_controller/New() - timerbuffer = config.vote_autotransfer_initial + timerbuffer = get_config_value(/decl/config/num/vote_autotransfer_initial) START_PROCESSING(SSprocessing, src) /datum/controller/transfer_controller/Destroy() @@ -14,7 +14,7 @@ var/global/datum/controller/transfer_controller/transfer_controller /datum/controller/transfer_controller/Process() if (time_till_transfer_vote() <= 0) SSvote.initiate_vote(/datum/vote/transfer, automatic = 1) - timerbuffer += config.vote_autotransfer_interval + timerbuffer += get_config_value(/decl/config/num/vote_autotransfer_interval) /datum/controller/transfer_controller/proc/time_till_transfer_vote() return timerbuffer - round_duration_in_ticks - (1 MINUTE) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm deleted file mode 100644 index 187edb24ef3..00000000000 --- a/code/controllers/configuration.dm +++ /dev/null @@ -1,1063 +0,0 @@ -/datum/configuration - var/server_name = "Nebula 13" // server name (for world name / status) - var/server_suffix = 0 // generate numeric suffix based on server port - - var/log_ooc = 0 // log OOC channel - var/log_access = 0 // log login/logout - var/log_say = 0 // log client say - var/log_admin = 0 // log admin actions - var/log_debug = 1 // log debug output - var/log_game = 0 // log game events - var/log_vote = 0 // log voting - var/log_whisper = 0 // log client whisper - var/log_emote = 0 // log emotes - var/log_attack = 0 // log attack messages - var/log_adminchat = 0 // log admin chat messages - var/log_adminwarn = 0 // log warnings admins get about bomb construction and such - var/log_pda = 0 // log pda messages - var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits - var/log_runtime = 0 // logs world.log to a file - var/log_world_output = 0 // log to_world_log(messages) - var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour - var/allow_vote_restart = 0 // allow votes to restart - var/ert_admin_call_only = 0 - var/allow_vote_mode = 0 // allow votes to change mode - var/allow_admin_jump = 1 // allows admin jumping - var/allow_admin_spawning = 1 // allows admin item spawning - var/allow_admin_rev = 1 // allows admin revives - var/vote_delay = 6000 // minimum time between voting sessions (deciseconds, 10 minute default) - var/vote_period = 600 // length of voting period (deciseconds, default 1 minute) - var/vote_autotransfer_initial = 108000 // Length of time before the first autotransfer vote is called - var/vote_autotransfer_interval = 18000 // length of time before next sequential autotransfer vote - var/vote_autogamemode_timeleft = 100 //Length of time before round start when autogamemode vote is called (in seconds, default 100). - var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi) - var/vote_no_dead = 0 // dead people can't vote (tbi) - var/vote_no_dead_crew_transfer = 0 // dead people can't vote on crew transfer votes -// var/enable_authentication = 0 // goon authentication - var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard - var/traitor_scaling = 0 //if amount of traitors scales based on amount of players - var/objectives_disabled = 0 //if objectives are disabled or not - var/protect_roles_from_antagonist = 0// If security and such can be traitor/cult/other - var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke. - var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. - var/allow_holidays = FALSE - var/fps = 20 - var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling - var/list/resource_urls = null - var/antag_hud_allowed = 0 // Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round. - var/antag_hud_restricted = 0 // Ghosts that turn on Antagovision cannot rejoin the round. - var/list/mode_names = list() - var/list/modes = list() // allowed modes - var/list/votable_modes = list() // votable modes - var/list/probabilities = list() // relative probability of each mode - var/secret_hide_possibilities = FALSE // Whether or not secret modes show list of possible round types - var/humans_need_surnames = 0 - var/allow_random_events = 0 // enables random events mid-round when set to 1 - var/allow_ai = 1 // allow ai job - var/hostedby = null - var/respawn_delay = 30 - var/guest_jobban = 1 - var/usewhitelist = 0 - var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0 - var/mods_can_tempban = 0 - var/mods_can_job_tempban = 0 - var/mod_tempban_max = 1440 - var/mod_job_tempban_max = 1440 - var/load_jobs_from_txt = 0 - var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access. - - var/cult_ghostwriter = 1 //Allows ghosts to write in blood in cult rounds... - var/cult_ghostwriter_req_cultists = 10 //...so long as this many cultists are active. - - var/character_slots = 10 // The number of available character slots - var/loadout_slots = 3 // The number of loadout slots per character - - var/max_maint_drones = 5 //This many drones can spawn, - var/allow_drone_spawn = 1 //assuming the admin allow them to. - var/drone_build_time = 1200 //A drone will become available every X ticks since last drone spawn. Default is 2 minutes. - - var/disable_player_mice = 0 - var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech - - var/usealienwhitelist = 0 - var/usealienwhitelistSQL = 0; - var/limitalienplayers = 0 - var/alien_to_human_ratio = 0.5 - var/allow_extra_antags = 0 - var/guests_allowed = 1 - var/debugparanoid = 0 - - var/serverurl - var/server - var/banappeals - var/wikiurl - var/forumurl - var/discordurl - var/githuburl - var/issuereporturl - - var/forbid_singulo_possession = 0 - - //game_options.txt configs - - var/show_human_death_message = FALSE - var/health_threshold_dead = -100 - - var/organ_health_multiplier = 0.9 - var/organ_regeneration_multiplier = 0.25 - var/organs_decay - - //Paincrit knocks someone down once they hit 60 shock_stage, so by default make it so that close to 100 additional damage needs to be dealt, - //so that it's similar to PAIN. Lowered it a bit since hitting paincrit takes much longer to wear off than a halloss stun. - var/organ_damage_spillover_multiplier = 0.5 - - var/bones_can_break = 1 - var/limbs_can_break = 1 - - var/revival_pod_plants = 1 - var/revival_cloning = 1 - var/revival_brain_life = -1 - - var/use_loyalty_implants = 0 - var/max_character_aspects = 5 - - var/welder_vision = 1 - ///If false, skips all level generation. - var/roundstart_level_generation = 1 - var/no_click_cooldown = 0 - - //Used for modifying movement speed for mobs. - //Unversal modifiers - var/run_delay = 2 - var/walk_delay = 4 - var/creep_delay = 6 - var/minimum_sprint_cost = 0.8 - var/skill_sprint_cost_range = 0.8 - var/minimum_stamina_recovery = 1 - var/maximum_stamina_recovery = 3 - var/glide_size_delay = 1 - - //Mob specific modifiers. NOTE: These will affect different mob types in different ways - var/human_delay = 0 - var/robot_delay = 0 - var/monkey_delay = 0 - var/alien_delay = 0 - var/slime_delay = 0 - var/animal_delay = 0 - var/maximum_mushrooms = 15 //After this amount alive, mushrooms will not boom boom - - - var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt - var/ban_legacy_system = 0 //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt - var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database - var/use_age_restriction_for_antags = 0 //Do antags use account age restrictions? --requires database - - var/use_iterative_explosions //Defines whether the server uses iterative or circular explosions. - var/iterative_explosives_z_threshold = 10 - var/iterative_explosives_z_multiplier = 0.75 - - var/assistant_maint = 0 //Do assistants get maint access? - var/gateway_delay = 18000 //How long the gateway takes before it activates. Default is half an hour. - var/ghost_interaction = 0 - - var/comms_password = null - var/ban_comms_password = null - var/list/forbidden_versions = list() // Clients with these byond versions will be autobanned. Format: string "byond_version.byond_build"; separate with ; in config, e.g. 512.1234;512.1235 - var/minimum_byond_version = 0 - var/minimum_byond_build = 0 - - var/login_export_addr = null - - var/enter_allowed = 1 - var/player_limit = 0 - - var/use_irc_bot = 0 - var/irc_bot_host = "" - var/main_irc = "" - var/admin_irc = "" - var/announce_shuttle_dock_to_irc = FALSE - - var/custom_item_icon_location // File location to look for custom items icons, needs to be relative to the executing binary. - var/custom_icon_icon_location // File location to look for custom icons, needs to be relative to the executing binary. - - // Event settings - var/expected_round_length = 3 * 60 * 60 * 10 // 3 hours - // If the first delay has a custom start time - // No custom time, no custom time, between 80 to 100 minutes respectively. - var/list/event_first_run = list(EVENT_LEVEL_MUNDANE = null, EVENT_LEVEL_MODERATE = null, EVENT_LEVEL_MAJOR = list("lower" = 48000, "upper" = 60000)) - // The lowest delay until next event - // 10, 30, 50 minutes respectively - var/list/event_delay_lower = list(EVENT_LEVEL_MUNDANE = 6000, EVENT_LEVEL_MODERATE = 18000, EVENT_LEVEL_MAJOR = 30000) - // The upper delay until next event - // 15, 45, 70 minutes respectively - var/list/event_delay_upper = list(EVENT_LEVEL_MUNDANE = 9000, EVENT_LEVEL_MODERATE = 27000, EVENT_LEVEL_MAJOR = 42000) - - var/aliens_allowed = 0 - var/alien_eggs_allowed = 0 - var/ninjas_allowed = 0 - var/abandon_allowed = 1 - var/ooc_allowed = 1 - var/looc_allowed = 1 - var/dooc_allowed = 1 - var/dsay_allowed = 1 - var/aooc_allowed = 1 - - var/exterior_ambient_light = 0 // The strength of ambient light applied to outside turfs - - var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" - - var/aggressive_changelog = 0 - var/disable_webhook_embeds = FALSE - - var/ghosts_can_possess_animals = 0 - var/delist_when_no_admins = FALSE - - var/allow_map_switching = 0 // Whether map switching is allowed - var/auto_map_vote = 0 // Automatically call a map vote at end of round and switch to the selected map - var/wait_for_sigusr1_reboot = 0 // Don't allow reboot unless it was caused by SIGUSR1 - - var/radiation_decay_rate = 1 //How much radiation is reduced by each tick - var/radiation_resistance_multiplier = 1.25 - var/radiation_material_resistance_divisor = 2 //A turf's possible radiation resistance is divided by this number, to get the real value. - var/radiation_lower_limit = 0.15 //If the radiation level for a turf would be below this, ignore it. - - var/auto_local_admin = TRUE // If true, connections from 127.0.0.1 get automatic admin. - var/autostealth = 0 // Staff get automatic stealth after this many minutes - - var/error_cooldown = 600 // The "cooldown" time for each occurrence of a unique error - var/error_limit = 50 // How many occurrences before the next will silence them - var/error_silence_time = 6000 // How long a unique error will be silenced for - var/error_msg_delay = 50 // How long to wait between messaging admins about occurrences of a unique error - - var/max_gear_cost = 10 // Used in chargen for accessory loadout limit. 0 disables loadout, negative allows infinite points. - - var/allow_ic_printing = TRUE //Whether players should be allowed to print IC circuits from scripts. - - var/allow_unsafe_narrates = FALSE //Whether admins can use unsanitized narration; when true, allows HTML etc. - - var/do_not_prevent_spam = FALSE //If this is true, skips spam prevention for user actions; inputs, verbs, macros, etc. - var/max_acts_per_interval = 140 //Number of actions per interval permitted for spam protection. - var/act_interval = 0.1 SECONDS //Interval for spam prevention. - - var/panic_bunker = FALSE //is the panic bunker enabled? - var/panic_bunker_message = "Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass." - - var/lock_client_view_x - var/lock_client_view_y - var/max_client_view_x = MAX_VIEW - var/max_client_view_y = MAX_VIEW - - var/allow_diagonal_movement = FALSE - - var/no_throttle_localhost - - var/dex_malus_brainloss_threshold = 30 //The threshold of when brainloss begins to affect dexterity. - var/grant_default_darksight = FALSE - var/default_darksight_range = 2 - var/default_darksight_effectiveness = 0.05 - - // Economy variables - var/withdraw_period = 1 DAY - var/interest_period = 1 DAY - - var/interest_mod_delay = 2 DAYS - var/withdraw_mod_delay = 3 DAYS - var/transaction_mod_delay = 2 DAYS - var/fractional_reserve_mod_delay = 3 DAYS - var/anti_tamper_mod_delay = 2 DAYS - - var/static/list/protected_vars = list( - "comms_password", - "ban_comms_password", - "login_export_addr" - ) - - var/expanded_alt_interactions = FALSE // Set to true to enable look, grab, drop, etc. in the alt interaction menu. - - var/show_typing_indicator_for_whispers = FALSE // Do whispers show typing indicators overhead? - - // Stress-related healing vars. - var/adjust_healing_from_stress = FALSE - var/stress_shock_recovery_constant = 0.5 - var/stress_healing_recovery_constant = 0.3 - var/stress_blood_recovery_constant = 0.3 - - var/exoplanet_min_day_duration = 10 MINUTES - var/exoplanet_max_day_duration = 40 MINUTES - ///If true, exoplanets won't have daycycles - var/disable_daycycle = FALSE - /// Whether or not you will show a message when examining something. - var/visible_examine = TRUE - /// Whether or not loadout options will get free name and desc entry by default. - var/allow_loadout_customization = FALSE - -/datum/configuration/VV_hidden() - . = ..() | protected_vars - -/datum/configuration/New() - var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) - for (var/mode_type in all_modes) - var/decl/game_mode/game_mode = all_modes[mode_type] - if (!game_mode.uid || !(game_mode.uid in modes)) - continue - log_misc("Adding game mode [game_mode.name] ([game_mode.uid]) to configuration.") - src.modes += game_mode.uid - src.mode_names[game_mode.uid] = game_mode.name - src.probabilities[game_mode.uid] = game_mode.probability - if (game_mode.votable) - src.votable_modes += game_mode.uid - src.votable_modes += "secret" - -/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist - var/list/Lines = file2list(filename) - - for(var/t in Lines) - if(!t) continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - var/value = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - value = copytext(t, pos + 1) - else - name = lowertext(t) - - if (!name) - continue - - if(type == "config") - switch (name) - if ("resource_urls") - config.resource_urls = splittext(value, " ") - - if ("admin_legacy_system") - config.admin_legacy_system = 1 - - if ("ban_legacy_system") - config.ban_legacy_system = 1 - - if ("use_age_restriction_for_jobs") - config.use_age_restriction_for_jobs = 1 - - if ("use_age_restriction_for_antags") - config.use_age_restriction_for_antags = 1 - - if ("jobs_have_minimal_access") - config.jobs_have_minimal_access = 1 - - if ("use_iterative_explosions") - use_iterative_explosions = 1 - - if ("expanded_alt_interactions") - expanded_alt_interactions = 1 - - if ("explosion_z_threshold") - iterative_explosives_z_threshold = text2num(value) - - if ("explosion_z_mult") - iterative_explosives_z_multiplier = text2num(value) - - if ("custom_item_icon_location") - config.custom_item_icon_location = value - - if ("custom_icon_icon_location") - config.custom_icon_icon_location = value - - if ("log_ooc") - config.log_ooc = 1 - - if ("log_access") - config.log_access = 1 - - if ("log_say") - config.log_say = 1 - - if ("debug_paranoid") - config.debugparanoid = 1 - - if ("log_admin") - config.log_admin = 1 - - if ("log_debug") - config.log_debug = text2num(value) - - if ("log_game") - config.log_game = 1 - - if ("log_vote") - config.log_vote = 1 - - if ("log_whisper") - config.log_whisper = 1 - - if ("log_attack") - config.log_attack = 1 - - if ("log_emote") - config.log_emote = 1 - - if ("log_adminchat") - config.log_adminchat = 1 - - if ("log_adminwarn") - config.log_adminwarn = 1 - - if ("log_pda") - config.log_pda = 1 - - if ("log_world_output") - config.log_world_output = 1 - - if ("log_hrefs") - config.log_hrefs = 1 - - if ("log_runtime") - config.log_runtime = 1 - - if ("roundstart_level_generation") - config.roundstart_level_generation = text2num(value) - - if ("no_click_cooldown") - config.no_click_cooldown = 1 - - if("allow_admin_ooccolor") - config.allow_admin_ooccolor = 1 - - if ("allow_vote_restart") - config.allow_vote_restart = 1 - - if ("allow_vote_mode") - config.allow_vote_mode = 1 - - if ("allow_admin_jump") - config.allow_admin_jump = 1 - - if("allow_admin_rev") - config.allow_admin_rev = 1 - - if ("allow_admin_spawning") - config.allow_admin_spawning = 1 - - if ("no_dead_vote") - config.vote_no_dead = 1 - - if ("no_dead_vote_crew_transfer") - config.vote_no_dead_crew_transfer = 1 - - if ("default_no_vote") - config.vote_no_default = 1 - - if ("vote_delay") - config.vote_delay = text2num(value) - - if ("vote_period") - config.vote_period = text2num(value) - - if ("vote_autotransfer_initial") - config.vote_autotransfer_initial = text2num(value) - - if ("vote_autotransfer_interval") - config.vote_autotransfer_interval = text2num(value) - - if ("vote_autogamemode_timeleft") - config.vote_autogamemode_timeleft = text2num(value) - - if("ert_admin_only") - config.ert_admin_call_only = 1 - - if ("allow_ai") - config.allow_ai = 1 - -// if ("authentication") -// config.enable_authentication = 1 - - if ("respawn_delay") - config.respawn_delay = text2num(value) - config.respawn_delay = config.respawn_delay > 0 ? config.respawn_delay : 0 - - if ("servername") - config.server_name = value - - if ("serversuffix") - config.server_suffix = 1 - - if ("hostedby") - config.hostedby = value - - if ("serverurl") - config.serverurl = value - - if ("server") - config.server = value - - if ("banappeals") - config.banappeals = value - - if ("wikiurl") - config.wikiurl = value - - if ("forumurl") - config.forumurl = value - - if ("discordurl") - config.discordurl = value - - if ("githuburl") - config.githuburl = value - - if ("issuereporturl") - config.issuereporturl = value - - if ("ghosts_can_possess_animals") - config.ghosts_can_possess_animals = value - - if ("guest_jobban") - config.guest_jobban = 1 - - if ("guest_ban") - config.guests_allowed = 0 - - if ("disable_ooc") - config.ooc_allowed = 0 - - if ("disable_looc") - config.looc_allowed = 0 - - if ("disable_aooc") - config.aooc_allowed = 0 - - if ("disable_entry") - config.enter_allowed = 0 - - if ("disable_dead_ooc") - config.dooc_allowed = 0 - - if ("disable_dsay") - config.dsay_allowed = 0 - - if ("disable_respawn") - config.abandon_allowed = 0 - - if ("usewhitelist") - config.usewhitelist = 1 - - if ("feature_object_spell_system") - config.feature_object_spell_system = 1 - - if ("traitor_scaling") - config.traitor_scaling = 1 - - if ("aliens_allowed") - config.aliens_allowed = 1 - - if("alien_eggs_allowed") - config.alien_eggs_allowed = 1 - - if ("ninjas_allowed") - config.ninjas_allowed = 1 - - if ("objectives_disabled") - if(!value) - log_misc("Could not find value for objectives_disabled in configuration.") - config.objectives_disabled = CONFIG_OBJECTIVE_NONE - else - switch(value) - if("none") - config.objectives_disabled = CONFIG_OBJECTIVE_NONE - if("verb") - config.objectives_disabled = CONFIG_OBJECTIVE_VERB - if("all") - config.objectives_disabled = CONFIG_OBJECTIVE_ALL - else - log_misc("Incorrect objective disabled definition: [value]") - config.objectives_disabled = CONFIG_OBJECTIVE_NONE - if("protect_roles_from_antagonist") - config.protect_roles_from_antagonist = 1 - - if ("probability") - var/prob_pos = findtext(value, " ") - var/prob_name = null - var/prob_value = null - - if (prob_pos) - prob_name = lowertext(copytext(value, 1, prob_pos)) - prob_value = copytext(value, prob_pos + 1) - if (prob_name in config.modes) - config.probabilities[prob_name] = text2num(prob_value) - else - log_misc("Unknown game mode probability configuration definition: [prob_name].") - else - log_misc("Incorrect probability configuration definition: [prob_name] [prob_value].") - - if("allow_random_events") - config.allow_random_events = 1 - - if("kick_inactive") - config.kick_inactive = text2num(value) - - if("mods_can_tempban") - config.mods_can_tempban = 1 - - if("mods_can_job_tempban") - config.mods_can_job_tempban = 1 - - if("mod_tempban_max") - config.mod_tempban_max = text2num(value) - - if("mod_job_tempban_max") - config.mod_job_tempban_max = text2num(value) - - if("load_jobs_from_txt") - load_jobs_from_txt = 1 - - if("forbid_singulo_possession") - forbid_singulo_possession = 1 - - if("popup_admin_pm") - config.popup_admin_pm = 1 - - if("allow_holidays") - config.allow_holidays = 1 - - if("use_irc_bot") - use_irc_bot = 1 - - if("ticklag") - var/ticklag = text2num(value) - if(ticklag > 0) - fps = 10 / ticklag - - if("fps") - fps = text2num(value) - - if("tick_limit_mc_init") - tick_limit_mc_init = text2num(value) - - if("allow_antag_hud") - config.antag_hud_allowed = 1 - if("antag_hud_restricted") - config.antag_hud_restricted = 1 - - if("secret_hide_possibilities") - secret_hide_possibilities = TRUE - - if("humans_need_surnames") - humans_need_surnames = 1 - - if("usealienwhitelist") - usealienwhitelist = 1 - if("usealienwhitelist_sql") // above need to be enabled as well - usealienwhitelistSQL = 1; - if("alien_player_ratio") - limitalienplayers = 1 - alien_to_human_ratio = text2num(value) - - if("assistant_maint") - config.assistant_maint = 1 - - if("gateway_delay") - config.gateway_delay = text2num(value) - - if("continuous_rounds") - config.continous_rounds = 1 - - if("ghost_interaction") - config.ghost_interaction = 1 - - if("disable_player_mice") - config.disable_player_mice = 1 - - if("uneducated_mice") - config.uneducated_mice = 1 - - if("comms_password") - config.comms_password = value - - if("ban_comms_password") - config.ban_comms_password = value - - if("forbidden_versions") - config.forbidden_versions = splittext(value, ";") - - if("minimum_byond_version") - config.minimum_byond_version = text2num(value) - - if("minimum_byond_build") - config.minimum_byond_build = text2num(value) - - if("login_export_addr") - config.login_export_addr = value - - if("irc_bot_host") - config.irc_bot_host = value - - if("main_irc") - config.main_irc = value - - if("admin_irc") - config.admin_irc = value - - if("announce_shuttle_dock_to_irc") - config.announce_shuttle_dock_to_irc = TRUE - - if("allow_cult_ghostwriter") - config.cult_ghostwriter = 1 - - if("req_cult_ghostwriter") - config.cult_ghostwriter_req_cultists = text2num(value) - - if("character_slots") - config.character_slots = text2num(value) - - if("loadout_slots") - config.loadout_slots = text2num(value) - - if("allow_drone_spawn") - config.allow_drone_spawn = text2num(value) - - if("drone_build_time") - config.drone_build_time = text2num(value) - - if("max_maint_drones") - config.max_maint_drones = text2num(value) - - if("expected_round_length") - config.expected_round_length = MinutesToTicks(text2num(value)) - - if("disable_welder_vision") - config.welder_vision = 0 - - if("disable_circuit_printing") - config.allow_ic_printing = FALSE - - if("allow_extra_antags") - config.allow_extra_antags = 1 - - if("event_custom_start_mundane") - var/values = text2numlist(value, ";") - config.event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - - if("event_custom_start_moderate") - var/values = text2numlist(value, ";") - config.event_first_run[EVENT_LEVEL_MODERATE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - - if("event_custom_start_major") - var/values = text2numlist(value, ";") - config.event_first_run[EVENT_LEVEL_MAJOR] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - - if("event_delay_lower") - var/values = text2numlist(value, ";") - config.event_delay_lower[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1]) - config.event_delay_lower[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) - config.event_delay_lower[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - - if("event_delay_upper") - var/values = text2numlist(value, ";") - config.event_delay_upper[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1]) - config.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) - config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - - if("exterior_ambient_light") - value = text2num(value) - config.exterior_ambient_light = value >= 0 ? value : 0 - - if("law_zero") - law_zero = value - - if("aggressive_changelog") - config.aggressive_changelog = 1 - - if("delist_when_no_admins") - config.delist_when_no_admins = TRUE - - if("map_switching") - config.allow_map_switching = 1 - - if("disable_webhook_embeds") - config.disable_webhook_embeds = TRUE - - if("auto_map_vote") - config.auto_map_vote = 1 - - if("wait_for_sigusr1") - config.wait_for_sigusr1_reboot = 1 - - if("autostealth") - config.autostealth = text2num(value) - - if("auto_local_admin") - config.auto_local_admin = text2num(value) - - if("radiation_lower_limit") - radiation_lower_limit = text2num(value) - - if("error_cooldown") - error_cooldown = text2num(value) - if("error_limit") - error_limit = text2num(value) - if("error_silence_time") - error_silence_time = text2num(value) - if("error_msg_delay") - error_msg_delay = text2num(value) - - if("max_gear_cost") - max_gear_cost = text2num(value) - if(max_gear_cost < 0) - max_gear_cost = INFINITY - if("radiation_decay_rate") - radiation_decay_rate = text2num(value) - if("radiation_resistance_multiplier") - radiation_resistance_multiplier = text2num(value) - if("radiation_material_resistance_divisor") - radiation_material_resistance_divisor = text2num(value) - if("radiation_lower_limit") - radiation_lower_limit = text2num(value) - if("player_limit") - player_limit = text2num(value) - if("hub") - world.update_hub_visibility() - - if ("allow_unsafe_narrates") - config.allow_unsafe_narrates = TRUE - - if ("do_not_prevent_spam") - config.do_not_prevent_spam = TRUE - if ("max_acts_per_interval") - config.max_acts_per_interval = text2num(value) - if ("act_interval") - config.act_interval = text2num(value) SECONDS - - if("panic_bunker") - config.panic_bunker = TRUE - if("panic_bunker_message") - config.panic_bunker_message = value - - if("no_throttle_localhost") - config.no_throttle_localhost = TRUE - - if("show_typing_indicator_for_whispers") - config.show_typing_indicator_for_whispers = TRUE - - if("visible_examine") - config.visible_examine = text2num(value) - - if("allow_loadout_customization") - config.allow_loadout_customization = TRUE - - else - //crappy hook to get modpacks to load any extra config - if(!load_mod_config(name, value)) - log_misc("Unknown setting in configuration: '[name]'") - - else if(type == "game_options") - if(!value) - log_misc("Unknown value for setting [name] in [filename].") - value = text2num(value) - - switch(name) - if("show_human_death_message") - config.show_human_death_message = TRUE - if ("max_character_aspects") - config.max_character_aspects = text2num(value) - if("health_threshold_dead") - config.health_threshold_dead = value - if("revival_pod_plants") - config.revival_pod_plants = value - if("revival_cloning") - config.revival_cloning = value - if("revival_brain_life") - config.revival_brain_life = value - if("organ_health_multiplier") - config.organ_health_multiplier = value / 100 - if("organ_regeneration_multiplier") - config.organ_regeneration_multiplier = value / 100 - if("organ_damage_spillover_multiplier") - config.organ_damage_spillover_multiplier = value / 100 - if("organs_can_decay") - config.organs_decay = 1 - if("bones_can_break") - config.bones_can_break = value - if("limbs_can_break") - config.limbs_can_break = value - - if("run_delay") - config.run_delay = value - if("walk_delay") - config.walk_delay = value - if("creep_delay") - config.creep_delay = value - if("glide_size_delay") - config.glide_size_delay = value - if("minimum_sprint_cost") - config.minimum_sprint_cost = value - if("skill_sprint_cost_range") - config.skill_sprint_cost_range = value - if("minimum_stamina_recovery") - config.minimum_stamina_recovery = value - if("maximum_stamina_recovery") - config.maximum_stamina_recovery = value - - if("human_delay") - config.human_delay = value - if("robot_delay") - config.robot_delay = value - if("monkey_delay") - config.monkey_delay = value - if("alien_delay") - config.alien_delay = value - if("slime_delay") - config.slime_delay = value - if("animal_delay") - config.animal_delay = value - if("maximum_mushrooms") - config.maximum_mushrooms = value - - if("lock_client_view_x") - config.lock_client_view_x = text2num(value) - if("lock_client_view_y") - config.lock_client_view_y = text2num(value) - if("max_client_view_x") - config.max_client_view_x = text2num(value) - if("max_client_view_y") - config.max_client_view_y = text2num(value) - - if("allow_diagonal_movement") - config.allow_diagonal_movement = TRUE - - if("use_loyalty_implants") - config.use_loyalty_implants = 1 - if("dexterity_malus_brainloss_threshold") - config.dex_malus_brainloss_threshold = text2num(value) - if("grant_default_darksight") - config.grant_default_darksight = TRUE - if("default_darksight_range") - config.default_darksight_range = max(text2num(value), 0) - if("default_darksight_effectiveness") - config.default_darksight_effectiveness = clamp(text2num(value), 0, 1) - // Economy config. - if("withdraw_period") - config.withdraw_period = value DAYS - if("interest_period") - config.interest_period = value DAYS - if("grant_default_darksight") - config.grant_default_darksight = TRUE - if("default_darksight_range") - config.default_darksight_range = max(text2num(value), 0) - if("default_darksight_effectiveness") - config.default_darksight_effectiveness = clamp(text2num(value), 0, 1) - if("interest_mod_delay") - config.interest_mod_delay = value DAYS - if("withdraw_mod_delay") - config.withdraw_mod_delay = value DAYS - if("transaction_mod_delay") - config.transaction_mod_delay = value DAYS - if("fractional_reserve_mod_delay") - config.fractional_reserve_mod_delay = value DAYS - if("anti_tamper_mod_delay") - config.anti_tamper_mod_delay = value DAYS - - if("adjust_healing_from_stress") - config.adjust_healing_from_stress = TRUE - if("stress_shock_recovery_constant") - config.stress_shock_recovery_constant = text2num(value) - if("stress_healing_recovery_constant") - config.stress_healing_recovery_constant = text2num(value) - if("stress_blood_recovery_constant") - config.stress_blood_recovery_constant = text2num(value) - - - - if("exoplanet_min_day_duration") - config.exoplanet_min_day_duration = text2num(value) - if("exoplanet_max_day_duration") - config.exoplanet_max_day_duration = text2num(value) - if("disable_daycycle") - config.disable_daycycle = TRUE - - else - //crappy hook to get modpacks to load any extra config - if(!load_mod_config(name, value)) - log_misc("Unknown setting in game_options configuration: '[name]'") - - fps = round(fps) - if(fps <= 0) - fps = initial(fps) - -/datum/configuration/proc/loadsql(filename) // -- TLE - var/list/Lines = file2list(filename) - for(var/t in Lines) - if(!t) continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - var/value = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - value = copytext(t, pos + 1) - else - name = lowertext(t) - - if (!name) - continue - - switch (name) - if ("enabled") - sqlenabled = TRUE - if ("address") - sqladdress = value - if ("port") - sqlport = value - if ("database") - sqldb = value - if ("login") - sqllogin = value - if ("password") - sqlpass = value - else - //crappy hook to get modpacks to load any extra config - if(!load_mod_dbconfig(name, value)) - log_misc("Unknown setting in DB configuration: '[name]'") - -/datum/configuration/proc/get_runnable_modes() - . = list() - var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) - for(var/mode_type in all_modes) - var/decl/game_mode/game_mode = all_modes[mode_type] - if(!game_mode.startRequirements() && !isnull(config.probabilities[game_mode.uid]) && config.probabilities[game_mode.uid] > 0) - .[game_mode.uid] = config.probabilities[game_mode.uid] - -/datum/configuration/proc/load_event(filename) - var/event_info = safe_file2text(filename, FALSE) - if(event_info) - custom_event_msg = event_info - -///Hook stub for loading modpack specific configs. Just override in modpack. -/datum/configuration/proc/load_mod_config(var/name, var/value) - //Force it to run parents overrides, so other modpacks don't just completely break config loading for one another - SHOULD_CALL_PARENT(TRUE) - return - -///Hook stub for loading modpack specific game_options. Just override in modpack. -/datum/configuration/proc/load_mod_game_options(var/name, var/value) - SHOULD_CALL_PARENT(TRUE) - return - -///Hook stub for loading modpack specific dbconfig. Just override in modpack. -/datum/configuration/proc/load_mod_dbconfig(var/name, var/value) - SHOULD_CALL_PARENT(TRUE) - return diff --git a/code/controllers/evacuation/evacuation.dm b/code/controllers/evacuation/evacuation.dm index 31495e484d5..69eeb9bc5bc 100644 --- a/code/controllers/evacuation/evacuation.dm +++ b/code/controllers/evacuation/evacuation.dm @@ -131,7 +131,7 @@ evac_waiting.Announce(replacetext(global.using_map.emergency_shuttle_docked_message, "%ETD%", "[estimated_time] minute\s"), new_sound = sound('sound/effects/Evacuation.ogg', volume = 35)) else priority_announcement.Announce(replacetext(replacetext(global.using_map.shuttle_docked_message, "%dock_name%", "[global.using_map.dock_name]"), "%ETD%", "[estimated_time] minute\s")) - if(config.announce_shuttle_dock_to_irc) + if(get_config_value(/decl/config/toggle/announce_shuttle_dock_to_irc)) send2mainirc("The shuttle has docked with the station. It will depart in approximately [estimated_time] minute\s.") /datum/evacuation_controller/proc/launch_evacuation() diff --git a/code/controllers/evacuation/evacuation_pods.dm b/code/controllers/evacuation/evacuation_pods.dm index 06d0aabc77e..1747311b806 100644 --- a/code/controllers/evacuation/evacuation_pods.dm +++ b/code/controllers/evacuation/evacuation_pods.dm @@ -131,12 +131,6 @@ if (SSevac.evacuation_controller?.cancel_evacuation()) log_and_message_admins("[key_name(user)] has cancelled the FTL jump.") -/obj/screen/fullscreen/jump_overlay - icon = 'icons/effects/effects.dmi' - icon_state = "mfoam" - screen_loc = ui_entire_screen - color = "#ff9900" - blend_mode = BLEND_SUBTRACT #undef EVAC_OPT_ABANDON_SHIP #undef EVAC_OPT_JUMP diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm index 2e05a0621b0..c38cd77d135 100644 --- a/code/controllers/hooks.dm +++ b/code/controllers/hooks.dm @@ -29,10 +29,10 @@ error("Invalid hook '/hook/[hook]' called.") return 0 - var/caller = new hook_path + var/hook_caller = new hook_path var/status = 1 for(var/P in typesof("[hook_path]/proc")) - if(!call(caller, P)(arglist(args))) + if(!call(hook_caller, P)(arglist(args))) error("Hook '[P]' failed or runtimed.") status = 0 diff --git a/code/controllers/master.dm b/code/controllers/master.dm index c7a3c84f63e..713a05bd8f2 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -176,7 +176,7 @@ var/global/datum/controller/master/Master = new var/start_timeofday = REALTIMEOFDAY // Initialize subsystems. - current_ticklimit = config.tick_limit_mc_init + current_ticklimit = get_config_value(/decl/config/num/tick_limit_mc_init) for (var/datum/controller/subsystem/SS in subsystems) if (SS.flags & SS_NO_INIT) continue @@ -202,7 +202,7 @@ var/global/datum/controller/master/Master = new #else world.sleep_offline = TRUE #endif - world.fps = config.fps + world.fps = get_config_value(/decl/config/num/fps) var/initialized_tod = REALTIMEOFDAY initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index a595e9fda63..cb1858d43f1 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -43,6 +43,8 @@ var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! + var/_internal_name //! A stringified version of the variable name for this subsystem. Used by the processing subsystem to make sure is_processing is unset properly. + //Do not override ///datum/controller/subsystem/New() diff --git a/code/controllers/subsystems/accounts.dm b/code/controllers/subsystems/accounts.dm index e4ee39b7dcc..172303b3b9d 100644 --- a/code/controllers/subsystems/accounts.dm +++ b/code/controllers/subsystems/accounts.dm @@ -33,11 +33,11 @@ SUBSYSTEM_DEF(money_accounts) if(istype(curr_account, /datum/money_account/child)) var/datum/money_account/child/curr_child = curr_account - if(curr_child.withdrawal_limit && (curr_child.last_withdraw_period + config.withdraw_period <= current_time)) + if(curr_child.withdrawal_limit && (curr_child.last_withdraw_period + get_config_value(/decl/config/num/withdraw_period) <= current_time)) curr_child.current_withdrawal = 0 curr_child.last_withdraw_period = current_time - if(curr_child.interest_rate && (curr_child.last_interest_period + config.interest_period <= current_time)) + if(curr_child.interest_rate && (curr_child.last_interest_period + get_config_value(/decl/config/num/interest_period) <= current_time)) curr_child.accrue_interest() curr_child.last_interest_period = current_time diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm index 313c3e64001..281242ea459 100644 --- a/code/controllers/subsystems/air.dm +++ b/code/controllers/subsystems/air.dm @@ -172,6 +172,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun var/list/curr_hotspot = processing_hotspots var/list/curr_zones = zones_to_update + var/airblock // zeroed by ATMOS_CANPASS_TURF, declared early as microopt while (curr_tiles.len) var/turf/T = curr_tiles[curr_tiles.len] curr_tiles.len-- @@ -185,9 +186,8 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun continue //check if the turf is self-zone-blocked - var/c_airblock - ATMOS_CANPASS_TURF(c_airblock, T, T) - if(c_airblock & ZONE_BLOCKED) + ATMOS_CANPASS_TURF(airblock, T, T) + if(airblock & ZONE_BLOCKED) deferred += T if (no_mc_tick) CHECK_TICK @@ -199,7 +199,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun T.post_update_air_properties() T.needs_air_update = 0 #ifdef ZASDBG - remove_vis_contents(T, zasdbgovl_mark) + T.remove_vis_contents(zasdbgovl_mark) #endif if (no_mc_tick) @@ -215,7 +215,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun T.post_update_air_properties() T.needs_air_update = 0 #ifdef ZASDBG - remove_vis_contents(T, zasdbgovl_mark) + T.remove_vis_contents(zasdbgovl_mark) #endif if (no_mc_tick) @@ -366,7 +366,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun return tiles_to_update += T #ifdef ZASDBG - add_vis_contents(T, zasdbgovl_mark) + T.add_vis_contents(zasdbgovl_mark) #endif T.needs_air_update = 1 diff --git a/code/controllers/subsystems/ambience.dm b/code/controllers/subsystems/ambience.dm index 879c6584d8c..316b85ceccb 100644 --- a/code/controllers/subsystems/ambience.dm +++ b/code/controllers/subsystems/ambience.dm @@ -16,18 +16,25 @@ SUBSYSTEM_DEF(ambience) var/turf/target = curr[curr.len] curr.len-- if(!QDELETED(target)) - target.update_ambient_light_from_z() + target.update_ambient_light_from_z_or_area() if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) return -/turf/proc/update_ambient_light_from_z() +/turf/proc/update_ambient_light_from_z_or_area() // If we're not outside, we don't show ambient light. + clear_ambient_light() // TODO: fix the delta issues resulting in burn-in so this can be run only when needed + + var/override_light_power + var/override_light_color if(!is_outside()) - clear_ambient_light() - return FALSE + var/area/A = get_area(src) + if(!A || !A.interior_ambient_light_level) + return FALSE + override_light_power = A.interior_ambient_light_level + override_light_color = A.interior_ambient_light_color || COLOR_WHITE // If we're dynamically lit, we want ambient light regardless of neighbors. var/lit = TURF_IS_DYNAMICALLY_LIT_UNSAFE(src) @@ -40,11 +47,16 @@ SUBSYSTEM_DEF(ambience) break if(lit) + + // If we're using area lighting, we're indoors, so shouldn't use level data ambience. + if(override_light_power) + set_ambient_light(override_light_color || COLOR_WHITE, override_light_power) + return TRUE + // Grab what we need to set ambient light from our level handler. var/datum/level_data/level_data = SSmapping.levels_by_z[z] if(level_data?.ambient_light_level) set_ambient_light(level_data.ambient_light_color, level_data.ambient_light_level) return TRUE - clear_ambient_light() return FALSE diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm index 67b1de5e258..a8330cb1d9f 100644 --- a/code/controllers/subsystems/atoms.dm +++ b/code/controllers/subsystems/atoms.dm @@ -66,6 +66,7 @@ SUBSYSTEM_DEF(atoms) for(var/I in late_loaders) var/atom/A = I A.LateInitialize(arglist(late_loaders[A])) + CHECK_TICK report_progress("Late initialized [late_loaders.len] atom\s") late_loaders.Cut() diff --git a/mods/persistence/controllers/subsystems/autosave.dm b/code/controllers/subsystems/autosave.dm similarity index 75% rename from mods/persistence/controllers/subsystems/autosave.dm rename to code/controllers/subsystems/autosave.dm index 31151d28413..76ce2750646 100644 --- a/mods/persistence/controllers/subsystems/autosave.dm +++ b/code/controllers/subsystems/autosave.dm @@ -6,16 +6,14 @@ SUBSYSTEM_DEF(autosave) var/saves = 0 // Number of times we've autosaved. var/saving = 0 // Whether or not we are saving right now. var/announced = 0 // Whether or not we've announced we're about to save. - - var/last_save // world.time of the last save - var/autosave_interval // Time between autosaves. + var/last_save // world.time of the last save /datum/controller/subsystem/autosave/Initialize(start_timeofday) . = ..() - last_save = world.time - autosave_interval = config.autosave_interval // To prevent saving upon start. + last_save = world.time // To prevent saving upon start. /datum/controller/subsystem/autosave/stat_entry() + var/autosave_interval = get_config_value(/decl/config/num/autosave_interval) var/msg if(flags & SS_NO_FIRE || suspended || !can_fire) msg = "Autosave Disabled!" @@ -23,11 +21,13 @@ SUBSYSTEM_DEF(autosave) msg = "Currently Saving..." else msg = "Next Autosave in [round(((last_save + autosave_interval) - world.time) / (1 MINUTE), 0.1)] Minutes." + if((last_save + autosave_interval) >= get_config_value(/decl/config/num/autosave_auto_restart)) + msg = "[msg]\[!\]Restart Scheduled\[!\]" ..(msg) /datum/controller/subsystem/autosave/fire() AnnounceSave() - if((last_save + autosave_interval) <= world.time) + if((last_save + get_config_value(/decl/config/num/autosave_interval)) <= world.time) Save() /datum/controller/subsystem/autosave/proc/Save(var/check_for_restart = TRUE) @@ -35,7 +35,8 @@ SUBSYSTEM_DEF(autosave) message_admins(SPAN_DANGER("Attempted autosave while already making an autosave!")) return var/exception/last_except = null - var/restart_after_save = (config.autosave_auto_restart > 0) && (world.time >= config.autosave_auto_restart) + var/auto_restart_time = get_config_value(/decl/config/num/autosave_auto_restart) + var/restart_after_save = (auto_restart_time > 0) && (world.time >= auto_restart_time) saves += 1 saving = TRUE @@ -71,16 +72,16 @@ SUBSYSTEM_DEF(autosave) world.Reboot() /datum/controller/subsystem/autosave/proc/AnnounceSave() - var/minutes_left = (last_save + autosave_interval - world.time) / (1 MINUTE) + var/minutes_left = (last_save + get_config_value(/decl/config/num/autosave_interval) - world.time) / (1 MINUTE) if(!announced && minutes_left <= 5) to_world(SPAN_AUTOSAVE("Autosave in 5 minutes!")) - if((world.time + minutes_left MINUTES) >= config.autosave_auto_restart) + if((world.time + minutes_left MINUTES) >= get_config_value(/decl/config/num/autosave_auto_restart)) to_world(SPAN_AUTOSAVE("The server will reboot after this save!")) announced = 1 if(announced == 1 && minutes_left <= 1) to_world(SPAN_AUTOSAVE("Autosave in 1 minute!")) - if((world.time + minutes_left MINUTES) >= config.autosave_auto_restart) + if((world.time + minutes_left MINUTES) >= get_config_value(/decl/config/num/autosave_auto_restart)) to_world(SPAN_AUTOSAVE("The server will reboot after this save!")) announced = 2 if(announced == 2 && minutes_left >= 6) @@ -91,4 +92,4 @@ SUBSYSTEM_DEF(autosave) //Prevent bad things from happening if we somehow trigger another save at the same time if(saving) CRASH("Cannot change the time to next save while we're currently saving!") - last_save += delay \ No newline at end of file + last_save += delay diff --git a/code/controllers/subsystems/configuration.dm b/code/controllers/subsystems/configuration.dm new file mode 100644 index 00000000000..b342f71f85d --- /dev/null +++ b/code/controllers/subsystems/configuration.dm @@ -0,0 +1,156 @@ +SUBSYSTEM_DEF(configuration) + name = "Configuration" + flags = SS_NO_FIRE | SS_NO_INIT + var/list/configuration_file_locations = list() + var/load_sql_from = "config/dbconfig.txt" + var/load_event_from = "config/custom_event.txt" + +/datum/controller/subsystem/configuration/proc/load_all_configuration() + + // Assemble a list of all the files we are expected to load this run. + var/list/all_config = decls_repository.get_decls_of_subtype(/decl/configuration_category) + for(var/config_cat_type in all_config) + var/decl/configuration_category/config_cat = all_config[config_cat_type] + configuration_file_locations |= config_cat.configuration_file_location + + load_files() + load_sql() + load_event() + + for(var/client/C) + C.update_post_config_load() + +/client/proc/update_post_config_load() + if(get_config_value(/decl/config/toggle/allow_character_comments)) + verbs |= /client/proc/view_character_information + else + verbs -= /client/proc/view_character_information + +/datum/controller/subsystem/configuration/proc/write_default_configuration(var/list/specific_files, var/modify_write_prefix) + + if(!specific_files) + specific_files = configuration_file_locations + else if(!islist(specific_files)) + specific_files = list(specific_files) + + if(!length(specific_files)) + return + + var/list/config_lines = list() + var/list/all_config = decls_repository.get_decls_of_subtype(/decl/configuration_category) + var/list/sorted_config = list() + for(var/config_type in all_config) + sorted_config += all_config[config_type] + for(var/decl/configuration_category/config_cat as anything in sortTim(sorted_config, /proc/cmp_name_asc)) + if(!(config_cat.configuration_file_location in specific_files)) + continue + LAZYADD(config_lines["[modify_write_prefix][config_cat.configuration_file_location]"], config_cat.get_config_category_text()) + + . = list() + for(var/filename in config_lines) + if(fexists(filename)) + fdel(filename) + var/write_file = file(filename) + to_file(write_file, jointext(config_lines[filename], "\n\n")) + . += filename + return length(.) ? english_list(.) : "NULL" + +/datum/controller/subsystem/configuration/proc/load_files() + + // Load values from file into an assoc list. + var/list/loaded_values = list() + var/list/write_defaults = list() + for(var/filename in configuration_file_locations) + + if(!fexists(filename)) + write_defaults += filename + continue + + var/list/lines = file2list(filename) + for(var/line in lines) + line = trim(line) + if(!line || length(line) == 0 || copytext(line, 1, 2) == "#") + continue + var/pos = findtext(line, " ") + var/config_key + var/config_value + if(pos) + config_key = copytext(line, 1, pos) + config_value = copytext(line, pos + 1) + else + config_key = line + config_value = TRUE + if(config_key) + config_key = lowertext(trim(config_key)) + if(config_key in loaded_values) + PRINT_STACK_TRACE("Duplicate config value loaded for key '[config_key]' from file '[filename]'.") + loaded_values[config_key] = config_value + + // Write any defaults that aren't already populated. + if(length(write_defaults)) + write_default_configuration(write_defaults) + + // Set our config values on the decls. + var/list/config_to_refresh = list() + var/list/all_config_decls = decls_repository.get_decls_of_subtype(/decl/config) + for(var/config_type in all_config_decls) + var/decl/config/config_option = all_config_decls[config_type] + if(config_option.uid in loaded_values) + if(set_config_value(config_type, loaded_values[config_option.uid], defer_config_refresh = TRUE)) + config_to_refresh += config_option + loaded_values -= config_option.uid + + // Do a refresh now that all values are populated. + for(var/decl/config/config_option as anything in config_to_refresh) + config_option.update_post_value_set() + +/datum/controller/subsystem/configuration/proc/load_event(filename) + var/event_info = safe_file2text(filename, FALSE) + if(event_info) + global.custom_event_msg = event_info + +/datum/controller/subsystem/configuration/proc/load_sql() + var/list/lines = file2list(load_sql_from) + for(var/line in lines) + if(!line) + continue + line = trim(line) + if (length(line) == 0 || copytext(line, 1, 2) == "#") + continue + + var/pos = findtext(line, " ") + var/name = null + var/value = null + if (pos) + name = lowertext(copytext(line, 1, pos)) + value = copytext(line, pos + 1) + else + name = lowertext(line) + if (!name) + continue + + switch (name) + if ("enabled") + sqlenabled = TRUE + if ("address") + sqladdress = value + if ("port") + sqlport = value + if ("database") + sqldb = value + if ("login") + sqllogin = value + if ("password") + sqlpass = value + else + log_misc("Unknown setting in configuration: '[name]'") + +/datum/admins/proc/dump_configuration() + set category = "Admin" + set name = "Dump Configuration" + set desc = "Writes out the current configuration to file." + if(!ishost(usr?.client)) + to_chat(usr, SPAN_WARNING("This verb can only be used by the host.")) + return + var/write_loc = SSconfiguration.write_default_configuration(modify_write_prefix = "temp/") + to_chat(usr, SPAN_NOTICE("All done! The configuration file has been written to [write_loc] on your host.")) diff --git a/code/controllers/subsystems/daycycle.dm b/code/controllers/subsystems/daycycle.dm index 5a725b0c625..87cb258a127 100644 --- a/code/controllers/subsystems/daycycle.dm +++ b/code/controllers/subsystems/daycycle.dm @@ -1,8 +1,8 @@ ///Subsystem for updating day/night ambient lighting for sets of z-levels that share a common day/night state. -SUBSYSTEM_DEF(daycyle) +SUBSYSTEM_DEF(daycycle) name = "Day Cycle" priority = SS_PRIORITY_DAYCYCLE - wait = 1 MINUTE + wait = 2 SECONDS flags = SS_BACKGROUND | SS_POST_FIRE_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME init_order = SS_INIT_TICKER @@ -12,21 +12,21 @@ SUBSYSTEM_DEF(daycyle) var/list/current_run ///Adds a set of levels that should all be updated at the same time and share the same day state -/datum/controller/subsystem/daycyle/proc/add_linked_levels(var/list/level_ids, var/start_at_night = FALSE, var/update_interval = 5 MINUTES) - if(global.config.disable_daycycle) +/datum/controller/subsystem/daycycle/proc/add_linked_levels(var/list/level_ids, var/start_at_night = FALSE, var/update_interval = 5 MINUTES) + if(get_config_value(/decl/config/toggle/disable_daycycle)) return //If disabled, we don't add anything var/topmost_level_id = level_ids[1] if(LAZYISIN(registered_levels, topmost_level_id)) CRASH("Tried to add a set of level ids that was already registered! ('[topmost_level_id]')") LAZYSET(registered_levels, topmost_level_id, new /datum/ssdaycycle_registered(level_ids, start_at_night, update_interval)) -/datum/controller/subsystem/daycyle/proc/remove_linked_levels(var/topmost_level_id) +/datum/controller/subsystem/daycycle/proc/remove_linked_levels(var/topmost_level_id) if(!LAZYISIN(registered_levels, topmost_level_id)) return LAZYREMOVE(registered_levels, topmost_level_id) -/datum/controller/subsystem/daycyle/fire(resumed = 0) - if(global.config.disable_daycycle) +/datum/controller/subsystem/daycycle/fire(resumed = 0) + if(get_config_value(/decl/config/toggle/disable_daycycle)) disable() LAZYCLEARLIST(current_run) return //If disabled, we shouldn't fire @@ -37,7 +37,7 @@ SUBSYSTEM_DEF(daycyle) levels = current_run[levels] current_run.len-- //Make sure it's time to run it, otherwise skip - if(REALTIMEOFDAY >= (levels.time_last_column_update + levels.update_interval)) + if(REALTIMEOFDAY >= (levels.time_last_column_update + round(levels.update_interval / (max(levels.x_max) - max(levels.x_min))))) levels.update_all_daycolumns() if (MC_TICK_CHECK) return @@ -113,7 +113,10 @@ SUBSYSTEM_DEF(daycyle) /datum/ssdaycycle_registered/proc/get_level_column(var/level_index) if(daycolumn_x < x_min[level_index] || daycolumn_x >= x_max[level_index]) return //Don't add turfs until daycolumn is within the actual level - . = block(locate(daycolumn_x, y_min[level_index], level_z[level_index]), locate(daycolumn_x, y_max[level_index], level_z[level_index])) + . = list() + for(var/turf/turf in block(locate(daycolumn_x, y_min[level_index], level_z[level_index]), locate(daycolumn_x, y_max[level_index], level_z[level_index]))) + if(turf.is_outside()) + . += turf ///Increment the column we're currently updating for our set of managed z-level. /datum/ssdaycycle_registered/proc/increment_column() diff --git a/code/controllers/subsystems/event.dm b/code/controllers/subsystems/event.dm index 96c0b4a2cad..99b088aff4e 100644 --- a/code/controllers/subsystems/event.dm +++ b/code/controllers/subsystems/event.dm @@ -60,7 +60,7 @@ SUBSYSTEM_DEF(event) while (pos <= EVENT_LEVEL_MAJOR) event_containers[pos].process() pos++ - + if (MC_TICK_CHECK) return @@ -109,17 +109,18 @@ SUBSYSTEM_DEF(event) if(E.isRunning) message += "and is still running." else - if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes + if(E.endedAt - E.startedAt > 5 MINUTES) // Only mention end time if the entire duration was more than 5 minutes message += "and ended at [worldtime2stationtime(E.endedAt)]." else message += "and ran to completion." to_world(message) -//Event manager UI +//Event manager UI /datum/controller/subsystem/event/proc/GetInteractWindow() + var/allow_random_events = get_config_value(/decl/config/toggle/on/allow_random_events) var/html = "Refresh" - html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]" + html += "Pause All - [allow_random_events ? "Pause" : "Resume"]" if(selected_event_container) var/event_time = max(0, selected_event_container.next_event_time - world.time) @@ -253,8 +254,8 @@ SUBSYSTEM_DEF(event) EC.delayed = !EC.delayed log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.") else if(href_list["pause_all"]) - config.allow_random_events = text2num(href_list["pause_all"]) - log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.") + set_config_value(/decl/config/toggle/on/allow_random_events, text2num(href_list["pause_all"])) + log_and_message_admins("has [get_config_value(/decl/config/toggle/on/allow_random_events) ? "resumed" : "paused"] countdown for all events.") else if(href_list["interval"]) var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null if(delay && delay > 0) diff --git a/code/controllers/subsystems/fluids.dm b/code/controllers/subsystems/fluids.dm index f9671d442ed..6996c8521dd 100644 --- a/code/controllers/subsystems/fluids.dm +++ b/code/controllers/subsystems/fluids.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(fluids) wait = 1 SECOND priority = SS_PRIORITY_FLUIDS flags = SS_NO_INIT + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT // So we can flush our queued activity during lobby setup on ocean maps. var/tmp/list/water_sources = list() var/tmp/fluid_sources_copied_yet = FALSE @@ -20,7 +21,6 @@ SUBSYSTEM_DEF(fluids) var/tmp/active_fluids_copied_yet = FALSE var/tmp/list/processing_fluids - var/tmp/list/fluid_images = list() var/tmp/list/checked_targets = list() var/tmp/list/gurgles = list( 'sound/effects/gurgle1.ogg', @@ -34,27 +34,6 @@ SUBSYSTEM_DEF(fluids) /datum/controller/subsystem/fluids/fire(resumed = 0) - // Predeclaring a bunch of vars for performance purposes. - var/obj/effect/fluid/other_fluid = null - var/obj/effect/fluid/current_fluid = null - var/datum/reagents/reagent_holder = null - var/list/candidates = null - var/turf/below = null - var/turf/current_turf = null - var/turf/neighbor = null - var/turf/lowest_neighbor = null - - var/removing = 0 - var/spread_dir = 0 - var/coming_from = 0 - var/flow_amount = 0 - var/current_depth = 0 - var/current_turf_depth = 0 - var/neighbor_depth = 0 - var/lowest_neighbor_flow = 0 - var/flooded_a_neighbor = FALSE - var/lowest_neighbor_depth = INFINITY - if(!resumed) active_fluids_copied_yet = FALSE holders_copied_yet = FALSE @@ -66,17 +45,25 @@ SUBSYSTEM_DEF(fluids) fluid_sources_copied_yet = TRUE processing_sources = water_sources.Copy() - while(processing_sources.len) - - current_turf = processing_sources[processing_sources.len] - processing_sources.len-- + // Predeclaring a bunch of vars for performance purposes. + var/flooded_a_neighbor = FALSE + var/spread_dir = 0 + var/i = 0 + var/turf/current_fluid_holder = null + var/datum/reagents/reagent_holder = null + var/turf/neighbor = null + var/turf/lowest_neighbor = null + + while(i < processing_sources.len) + i++ + current_fluid_holder = processing_sources[i] flooded_a_neighbor = FALSE - UPDATE_FLUID_BLOCKED_DIRS(current_turf) + UPDATE_FLUID_BLOCKED_DIRS(current_fluid_holder) for(spread_dir in global.cardinal) - if(current_turf.fluid_blocked_dirs & spread_dir) + if(current_fluid_holder.fluid_blocked_dirs & spread_dir) continue - neighbor = get_step(current_turf, spread_dir) + neighbor = get_step_resolving_mimic(current_fluid_holder, spread_dir) if(!istype(neighbor) || neighbor.flooded) continue UPDATE_FLUID_BLOCKED_DIRS(neighbor) @@ -84,158 +71,169 @@ SUBSYSTEM_DEF(fluids) continue checked_targets[neighbor] = TRUE flooded_a_neighbor = TRUE - neighbor.add_fluid(/decl/material/liquid/water, FLUID_MAX_DEPTH) + neighbor.add_to_reagents(current_fluid_holder.flooded, FLUID_MAX_DEPTH) if(!flooded_a_neighbor) - REMOVE_ACTIVE_FLUID_SOURCE(current_turf) + REMOVE_ACTIVE_FLUID_SOURCE(current_fluid_holder) if (MC_TICK_CHECK) + processing_sources.Cut(1, i+1) return + processing_sources.Cut() if(!active_fluids_copied_yet) active_fluids_copied_yet = TRUE processing_fluids = active_fluids.Copy() - while(processing_fluids.len) - - current_fluid = processing_fluids[processing_fluids.len] - processing_fluids.len-- - - REMOVE_ACTIVE_FLUID(current_fluid) // This will be refreshed if our level changes at all in this iteration of the subsystem. - - if(QDELETED(current_fluid)) + var/removing = 0 + var/coming_from = 0 + var/flow_amount = 0 + var/current_depth = 0 + var/current_turf_depth = 0 + var/neighbor_depth = 0 + var/lowest_neighbor_flow = 0 + var/lowest_neighbor_depth = INFINITY + var/turf/other_fluid_holder = null + + i = 0 + while(i < processing_fluids.len) + i++ + current_fluid_holder = processing_fluids[i] + + if(QDELETED(current_fluid_holder) || !current_fluid_holder.reagents?.total_volume) + REMOVE_ACTIVE_FLUID(current_fluid_holder) continue - current_turf = current_fluid.loc - if(!current_turf.CanFluidPass()) - qdel(current_fluid) + if(!current_fluid_holder.CanFluidPass()) + current_fluid_holder.displace_all_reagents() continue - reagent_holder = current_fluid.reagents - UPDATE_FLUID_BLOCKED_DIRS(current_turf) + reagent_holder = current_fluid_holder.reagents + UPDATE_FLUID_BLOCKED_DIRS(current_fluid_holder) current_depth = reagent_holder?.total_volume || 0 // How is this happening if(QDELETED(reagent_holder) || current_depth == -1.#IND || current_depth == 1.#IND) - qdel(current_fluid) + REMOVE_ACTIVE_FLUID(current_fluid_holder) continue - // Evaporation: todo, move liquid into current_turf.zone air contents if applicable. + // Evaporation: todo, move liquid into current_fluid_holder.zone air contents if applicable. if(current_depth <= FLUID_PUDDLE && prob(60)) - current_turf.remove_fluids(min(current_depth, 1), defer_update = TRUE) - current_depth = current_turf.get_fluid_depth() + current_fluid_holder.remove_fluids(min(current_depth, 1), defer_update = TRUE) + current_depth = current_fluid_holder.get_fluid_depth() if(current_depth <= FLUID_QDEL_POINT) - qdel(current_fluid) + current_fluid_holder.reagents?.clear_reagents() + REMOVE_ACTIVE_FLUID(current_fluid_holder) continue // Wash our turf. - current_turf.fluid_act(reagent_holder) + current_fluid_holder.fluid_act(reagent_holder) - if(isspaceturf(current_turf) || istype(current_turf, /turf/exterior)) + if(isspaceturf(current_fluid_holder) || (istype(current_fluid_holder, /turf/exterior) && (current_fluid_holder.reagents?.total_volume + current_fluid_holder.get_physical_height()) > 0)) removing = round(current_depth * 0.5) if(removing > 0) - current_turf.remove_fluids(removing, defer_update = TRUE) + current_fluid_holder.remove_fluids(removing, defer_update = TRUE) else reagent_holder.clear_reagents() - current_depth = current_turf.get_fluid_depth() + current_depth = current_fluid_holder.get_fluid_depth() if(current_depth <= FLUID_QDEL_POINT) - qdel(current_fluid) + current_fluid_holder.reagents?.clear_reagents() + REMOVE_ACTIVE_FLUID(current_fluid_holder) continue - if(!(current_turf.fluid_blocked_dirs & DOWN) && current_turf.CanFluidPass(DOWN) && current_turf.is_open() && current_turf.has_gravity()) - below = GetBelow(current_turf) - if(below) - UPDATE_FLUID_BLOCKED_DIRS(below) - if(!(below.fluid_blocked_dirs & UP) && below.CanFluidPass(UP)) - other_fluid = locate() in below - if(!other_fluid) - other_fluid = new(below) - if(!QDELETED(other_fluid) && other_fluid.reagents.total_volume < FLUID_MAX_DEPTH) - current_turf.transfer_fluids_to(below, min(FLOOR(current_depth*0.5), FLUID_MAX_DEPTH - other_fluid.reagents.total_volume), defer_update = TRUE) - current_depth = current_turf.get_fluid_depth() - - if(current_depth <= FLUID_PUDDLE) - continue + if(!(current_fluid_holder.fluid_blocked_dirs & DOWN) && current_fluid_holder.CanFluidPass(DOWN) && current_fluid_holder.is_open() && current_fluid_holder.has_gravity()) + other_fluid_holder = GetBelow(current_fluid_holder) + if(other_fluid_holder) + UPDATE_FLUID_BLOCKED_DIRS(other_fluid_holder) + if(!(other_fluid_holder.fluid_blocked_dirs & UP) && other_fluid_holder.CanFluidPass(UP)) + if(!QDELETED(other_fluid_holder) && other_fluid_holder.reagents?.total_volume < FLUID_MAX_DEPTH) + current_fluid_holder.transfer_fluids_to(other_fluid_holder, min(FLOOR(current_depth*0.5), FLUID_MAX_DEPTH - other_fluid_holder.reagents?.total_volume), defer_update = TRUE) + current_depth = current_fluid_holder.get_fluid_depth() // Flow into the lowest level neighbor. lowest_neighbor_depth = INFINITY lowest_neighbor_flow = 0 - candidates = list() - current_turf_depth = current_depth + current_turf.get_physical_height() + current_turf_depth = current_depth + current_fluid_holder.get_physical_height() for(spread_dir in global.cardinal) - if(current_turf.fluid_blocked_dirs & spread_dir) + if(current_fluid_holder.fluid_blocked_dirs & spread_dir) continue - neighbor = get_step(current_turf, spread_dir) + neighbor = get_step_resolving_mimic(current_fluid_holder, spread_dir) if(!neighbor) continue UPDATE_FLUID_BLOCKED_DIRS(neighbor) coming_from = global.reverse_dir[spread_dir] if((neighbor.fluid_blocked_dirs & coming_from) || !neighbor.CanFluidPass(coming_from) || neighbor.is_flooded(absolute = TRUE) || !neighbor.CanFluidPass(global.reverse_dir[spread_dir])) continue - other_fluid = locate() in neighbor - - neighbor_depth = (other_fluid?.reagents?.total_volume || 0) + neighbor.get_physical_height() + other_fluid_holder = neighbor + neighbor_depth = (other_fluid_holder?.reagents?.total_volume || 0) + neighbor.get_physical_height() flow_amount = round((current_turf_depth - neighbor_depth)*0.5) - + // TODO: multiply flow amount or minimum transfer amount by some + // viscosity calculation to allow for piles of jelly vs piles of water. if(flow_amount <= FLUID_MINIMUM_TRANSFER) continue - if(neighbor_depth < lowest_neighbor_depth) - candidates = list(neighbor) + ADD_ACTIVE_FLUID(neighbor) + if(neighbor_depth < lowest_neighbor_depth || (neighbor_depth == lowest_neighbor_depth && prob(50))) + lowest_neighbor = neighbor lowest_neighbor_depth = neighbor_depth lowest_neighbor_flow = flow_amount - else if(neighbor_depth == lowest_neighbor_depth) - candidates += neighbor - if(length(candidates)) - lowest_neighbor = pick(candidates) - current_turf.transfer_fluids_to(lowest_neighbor, lowest_neighbor_flow, defer_update = TRUE) - pending_flows[current_fluid] = TRUE + if(current_depth <= FLUID_PUDDLE) + continue - if(lowest_neighbor_flow >= FLUID_PUSH_THRESHOLD) - current_fluid.last_flow_strength = lowest_neighbor_flow - current_fluid.last_flow_dir = get_dir(current_turf, lowest_neighbor) + if(lowest_neighbor) + current_fluid_holder.transfer_fluids_to(lowest_neighbor, lowest_neighbor_flow, defer_update = TRUE) + pending_flows[current_fluid_holder] = TRUE + if(lowest_neighbor_flow >= FLUID_PUSH_THRESHOLD) + current_fluid_holder.last_flow_strength = lowest_neighbor_flow + current_fluid_holder.last_flow_dir = get_dir(current_fluid_holder, lowest_neighbor) + else + current_fluid_holder.last_flow_strength = 0 + current_fluid_holder.last_flow_dir = 0 else - current_fluid.last_flow_strength = 0 - current_fluid.last_flow_dir = 0 + // We aren't interacting with a neighbor this time, so we can likely sleep. + REMOVE_ACTIVE_FLUID(current_fluid_holder) if (MC_TICK_CHECK) - break + processing_fluids.Cut(1, i+1) + return + processing_fluids.Cut() if(!holders_copied_yet) holders_copied_yet = TRUE processing_holders = holders_to_update.Copy() - while(processing_holders.len) - reagent_holder = processing_holders[processing_holders.len] - processing_holders.len-- - if(!QDELETED(reagent_holder)) - reagent_holder.handle_update() - else - holders_to_update -= reagent_holder + i = 0 + while(i < processing_holders.len) + i++ + reagent_holder = processing_holders[i] + reagent_holder.handle_update() if(MC_TICK_CHECK) + processing_holders.Cut(1, i+1) return + processing_holders.Cut() if(!flows_copied_yet) flows_copied_yet = TRUE processing_flows = pending_flows.Copy() - while(processing_flows.len) - current_fluid = processing_flows[processing_flows.len] - processing_flows.len-- - if(!istype(current_fluid) || QDELETED(current_fluid) || !isturf(current_fluid.loc)) + i = 0 + while(i < processing_flows.len) + i++ + current_fluid_holder = processing_flows[i] + if(!istype(current_fluid_holder) || QDELETED(current_fluid_holder)) continue - reagent_holder = current_fluid.reagents - current_turf = current_fluid.loc var/pushed_something = FALSE - if(reagent_holder.total_volume > FLUID_SHALLOW && current_fluid.last_flow_strength >= 10) - for(var/atom/movable/AM as anything in current_turf.get_contained_external_atoms()) - if(AM.is_fluid_pushable(current_fluid.last_flow_strength)) - AM.pushed(current_fluid.last_flow_dir) + if(current_fluid_holder.reagents?.total_volume > FLUID_SHALLOW && current_fluid_holder.last_flow_strength >= 10) + for(var/atom/movable/AM as anything in current_fluid_holder.get_contained_external_atoms()) + if(AM.is_fluid_pushable(current_fluid_holder.last_flow_strength)) + AM.pushed(current_fluid_holder.last_flow_dir) pushed_something = TRUE if(pushed_something && prob(1)) - playsound(current_fluid.loc, 'sound/effects/slosh.ogg', 25, 1) + playsound(current_fluid_holder, 'sound/effects/slosh.ogg', 25, 1) if(MC_TICK_CHECK) + processing_flows.Cut(1, i+1) return + processing_flows.Cut() /datum/controller/subsystem/fluids/StartLoadingMap() suspend() diff --git a/code/controllers/subsystems/inactivity.dm b/code/controllers/subsystems/inactivity.dm index 5e80377274c..8ba84003468 100644 --- a/code/controllers/subsystems/inactivity.dm +++ b/code/controllers/subsystems/inactivity.dm @@ -7,7 +7,8 @@ SUBSYSTEM_DEF(inactivity) var/number_kicked = 0 /datum/controller/subsystem/inactivity/fire(resumed = FALSE) - if (!config.kick_inactive) + var/kick_inactive_time = get_config_value(/decl/config/num/kick_inactive) MINUTES + if (!kick_inactive_time) suspend() return if (!resumed) @@ -16,9 +17,9 @@ SUBSYSTEM_DEF(inactivity) while(client_list.len) var/client/C = client_list[client_list.len] client_list.len-- - if(!C.holder && C.is_afk(config.kick_inactive MINUTES) && !isobserver(C.mob)) + if(!C.holder && C.is_afk(kick_inactive_time) && !isobserver(C.mob)) log_access("AFK: [key_name(C)]") - to_chat(C, "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.") + to_chat(C, SPAN_WARNING("You have been inactive for more than [kick_inactive_time] minute\s and have been disconnected.")) qdel(C) number_kicked++ if (MC_TICK_CHECK) diff --git a/code/controllers/subsystems/initialization/character_info.dm b/code/controllers/subsystems/initialization/character_info.dm new file mode 100644 index 00000000000..813f1fda5d8 --- /dev/null +++ b/code/controllers/subsystems/initialization/character_info.dm @@ -0,0 +1,189 @@ +// Holder subsystem for character comment records. +SUBSYSTEM_DEF(character_info) + name = "Character Information" + flags = SS_NEEDS_SHUTDOWN + init_order = SS_INIT_EARLY + wait = 1 SECOND + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT // We want to save changes made during pre-round lobby. + var/static/comments_source = "data/character_info/" + var/list/_comment_holders_by_id = list() + var/list/_ids_to_save = list() + +/datum/controller/subsystem/character_info/Initialize() + . = ..() + if(!get_config_value(/decl/config/toggle/allow_character_comments)) + report_progress("Skipping mass load of character records as character comments are disabled.") + return + if(!fexists(comments_source)) + report_progress("Character information directory [comments_source] does not exist, no character comments will be saved or loaded.") + return + var/loaded_json_manifest = load_text_from_directory(comments_source, ".json") + if(!islist(loaded_json_manifest) || !length(loaded_json_manifest["files"])) + return + var/list/loaded_files = loaded_json_manifest["files"] + var/loaded_comments = 0 + for(var/loaded_file in loaded_files) + var/datum/character_information/comments = load_record(loaded_files[loaded_file]) + if(!istext(comments.record_id)) + PRINT_STACK_TRACE("Deserialized character information had invalid id '[comments.record_id || "NULL"]'!") + continue + + // Remove any pre-created records (early joiners, etc.) + if(_comment_holders_by_id[comments.record_id]) + var/old_record = _comment_holders_by_id[comments.record_id] + _comment_holders_by_id -= comments.record_id + qdel(old_record) + + comments.file_location = loaded_file + _comment_holders_by_id[comments.record_id] = comments + loaded_comments += length(comments.comments) + report_progress("Loaded [loaded_comments] record\s for [length(_comment_holders_by_id)] character\s.") + +/datum/controller/subsystem/character_info/Shutdown() + . = ..() + for(var/id in _comment_holders_by_id) + save_record(id) + +/datum/controller/subsystem/character_info/stat_entry(msg) + ..("R:[_comment_holders_by_id.len]Q:[_ids_to_save.len][msg]") + +/datum/controller/subsystem/character_info/fire(resumed = FALSE, no_mc_tick = FALSE) + while(_ids_to_save.len) + var/id = _ids_to_save[1] + _ids_to_save -= id + save_record(id) + if(TICK_CHECK) + return + +/datum/controller/subsystem/character_info/proc/queue_to_save(var/record_id) + if(istext(record_id) && length(record_id)) + _ids_to_save |= record_id + +/datum/controller/subsystem/character_info/proc/save_record(var/record_id) + if(!istext(record_id) || !record_id) + return + var/datum/character_information/comments = get_record(record_id, TRUE) + if(!istype(comments)) + return + if(!comments.file_location) + comments.file_location = "[comments_source][ckey(comments.record_id)].json" + try + if(fexists(comments.file_location)) + fdel(comments.file_location) + to_file(file(comments.file_location), comments.serialize_to_json()) + catch(var/exception/E) + PRINT_STACK_TRACE("Exception when writing out character information file to [comments?.file_location || "NULL"]: [E]") + +/datum/controller/subsystem/character_info/proc/load_record(var/load_from) + var/datum/character_information/comments = new(cached_json_decode(load_from)) + _comment_holders_by_id[comments.record_id] = comments + return comments + +/datum/controller/subsystem/character_info/proc/reload_record(var/record_id) + var/datum/character_information/comments = get_record(record_id, TRUE) + if(comments && comments.file_location && fexists(comments.file_location)) + var/reload_from = comments.file_location + _comment_holders_by_id -= comments.record_id + qdel(comments) + try + . = load_record(safe_file2text(reload_from)) + catch(var/exception/E) + PRINT_STACK_TRACE("Exception when reloading record from [reload_from]: [E]") + +/datum/controller/subsystem/character_info/proc/clear_record(var/record_id) + var/datum/character_information/comments = get_record(record_id, TRUE) + if(comments) + comments.comments.Cut() + comments.ic_info = null + comments.ooc_info = null + +/datum/controller/subsystem/character_info/proc/get_record_id(var/record_id) + return trim(lowertext(record_id)) + +/datum/controller/subsystem/character_info/proc/get_record(var/record_id, var/override_prefs, var/discard_archived_record) + record_id = get_record_id(record_id) + if(!record_id) + CRASH("Attempt to retrieve null character information ID.") + var/datum/character_information/comments = _comment_holders_by_id[record_id] + if(istype(comments) && (override_prefs || (get_config_value(/decl/config/toggle/allow_character_comments) && comments.allow_comments) || comments.show_info_on_examine)) + return comments + +/datum/controller/subsystem/character_info/proc/get_or_create_record(var/record_id, var/override_prefs) + . = get_record(record_id, override_prefs) + if(!. && initialized) + // Let's assume they'll populate it if so desired. + var/datum/character_information/comments = new + comments.record_id = get_record_id(record_id) + _comment_holders_by_id[comments.record_id] = comments + . = comments + +/datum/controller/subsystem/character_info/proc/search_records(var/search_for) + search_for = ckey(lowertext(trim(search_for))) + for(var/id in _comment_holders_by_id) + var/datum/character_information/comments = _comment_holders_by_id[id] + for(var/checkstring in list(comments.name, comments.ckey, comments.record_id)) + if(findtext(ckey(lowertext(trim(checkstring))), search_for) > 0) + LAZYADD(., comments) + break + +/datum/controller/subsystem/character_info/Topic(href, href_list) + . = ..() + if(!. && href_list["download_manifest"] && usr && check_rights(R_ADMIN)) + try + var/dump_file_name = "[comments_source]dump_character_manifest.html" + if(fexists(dump_file_name)) + fdel(dump_file_name) + text2file(JOINTEXT(SScharacter_info.get_character_manifest_html(apply_striping = FALSE)), dump_file_name) + if(fexists(dump_file_name)) + direct_output(usr, ftp(dump_file_name, "dump_manifest.html")) + return TOPIC_HANDLED + catch(var/exception/E) + log_debug("Exception when dumping character relationship manifest: [E]") + +#define COMMENT_CANDYSTRIPE_ONE "#343434" +#define COMMENT_CANDYSTRIPE_TWO "#454545" +/datum/controller/subsystem/character_info/proc/get_character_manifest_html(var/apply_striping = TRUE) + var/list/records_with_an_entry = list() + for(var/id in _comment_holders_by_id) + var/datum/character_information/comments = _comment_holders_by_id[id] + for(var/datum/character_comment/comment in comments.comments) + if(comment.is_stale()) + continue + records_with_an_entry |= comment.author_id + sortTim(records_with_an_entry, /proc/cmp_text_asc) + . = list("") + if(apply_striping) + . += "" + else + . += "" + . += "" + for(var/column_id in records_with_an_entry) + var/datum/character_information/column = _comment_holders_by_id[column_id] + . += "" + . += "" + var/ticker = FALSE + for(var/row_id in records_with_an_entry) + if(apply_striping) + . += "" + ticker = !ticker + else + . += "" + var/datum/character_information/row = _comment_holders_by_id[row_id] + . += "" + for(var/column_id in records_with_an_entry) + var/datum/character_information/column = _comment_holders_by_id[column_id] + var/found_comment = FALSE + for(var/datum/character_comment/comment in column.comments) + if(comment.author_id == row_id && !comment.is_stale()) + found_comment = TRUE + var/mood_title = comment.main_mood.name + if(comment.border_mood) + mood_title = "[mood_title] ([comment.border_mood.name])" + . += "" + break + if(!found_comment) + . += "" + . += "" + . += "
Character Relationship Matrix
[column.char_name]
[column.ckey]
[row.char_name]
[row.ckey]
[comment.body]
" +#undef COMMENT_CANDYSTRIPE_ONE +#undef COMMENT_CANDYSTRIPE_TWO \ No newline at end of file diff --git a/code/controllers/subsystems/initialization/codex.dm b/code/controllers/subsystems/initialization/codex.dm index 878d9ba30c0..1948ba42ccd 100644 --- a/code/controllers/subsystems/initialization/codex.dm +++ b/code/controllers/subsystems/initialization/codex.dm @@ -84,9 +84,17 @@ SUBSYSTEM_DEF(codex) popup.set_content(parse_links(jointext(entry.get_codex_body(presenting_to), null), presenting_to)) popup.open() -/datum/controller/subsystem/codex/proc/get_guide(var/category) - var/decl/codex_category/cat = GET_DECL(category) - . = cat?.guide_html +/datum/controller/subsystem/codex/proc/get_manual_text(var/guide_id) + if(ispath(guide_id, /decl/codex_category)) + var/decl/codex_category/cat = GET_DECL(guide_id) + . = cat?.guide_html + else if(guide_id) + var/datum/codex_entry/entry + if(ispath(guide_id, /datum/codex_entry)) + entry = guide_id + guide_id = initial(entry.name) + entry = get_codex_entry(guide_id) + . = entry?.guide_html /datum/controller/subsystem/codex/proc/retrieve_entries_for_string(var/searching) diff --git a/code/controllers/subsystems/initialization/computer_networks.dm b/code/controllers/subsystems/initialization/computer_networks.dm index 1b0da0f7129..b8e95872524 100644 --- a/code/controllers/subsystems/initialization/computer_networks.dm +++ b/code/controllers/subsystems/initialization/computer_networks.dm @@ -63,4 +63,15 @@ SUBSYSTEM_DEF(networking) queue_connection(device) LAZYCLEARLIST(reconnect_queues[network_id]) +/** + Creates the new player's network account on the map's default network. (Must have an id card for whatever reasons) + */ +/datum/controller/subsystem/networking/proc/register_player_default_network_account(mob/living/player_mob) + var/network_id = global.using_map.spawn_network + var/datum/computer_network/network = networks[network_id] + var/datum/computer_file/report/crew_record/CR = get_crewmember_record(player_mob.real_name) + network.store_file(CR, MF_ROLE_CREW_RECORDS) + network.create_account(player_mob, player_mob.real_name, null, player_mob.real_name, null, TRUE) + return TRUE + #undef MAX_CONNECTION_ATTEMPTS \ No newline at end of file diff --git a/code/controllers/subsystems/initialization/customitems.dm b/code/controllers/subsystems/initialization/customitems.dm index d9283b81fb4..ae4262be0c3 100644 --- a/code/controllers/subsystems/initialization/customitems.dm +++ b/code/controllers/subsystems/initialization/customitems.dm @@ -91,8 +91,9 @@ SUBSYSTEM_DEF(customitems) character_name = lowertext(character_name) for(var/icon_id in ids_to_icons) var/icon_loc = ids_to_icons[icon_id] - if(config.custom_icon_icon_location) - icon_loc = "[config.custom_icon_icon_location]/[icon_loc]" + var/config_icon_loc = get_config_value(/decl/config/text/custom_icon_icon_location) + if(config_icon_loc) + icon_loc = "[config_icon_loc]/[icon_loc]" ids_to_icons[icon_id] = file(icon_loc) /datum/custom_icon/proc/validate() @@ -134,8 +135,9 @@ SUBSYSTEM_DEF(customitems) item_path = item_path && text2path(item_path) apply_to_target_type = apply_to_target_type && text2path(apply_to_target_type) if(item_icon) - if(config.custom_item_icon_location) - item_icon = "[config.custom_item_icon_location]/[item_path]" + var/config_item_loc = get_config_value(/decl/config/text/custom_item_icon_location) + if(config_item_loc) + item_icon = "[config_item_loc]/[item_path]" if(fexists(item_icon)) item_icon = file(item_icon) diff --git a/code/controllers/subsystems/initialization/fabrication.dm b/code/controllers/subsystems/initialization/fabrication.dm index 2c288555d40..60d02379c8d 100644 --- a/code/controllers/subsystems/initialization/fabrication.dm +++ b/code/controllers/subsystems/initialization/fabrication.dm @@ -3,19 +3,16 @@ SUBSYSTEM_DEF(fabrication) flags = SS_NO_FIRE init_order = SS_INIT_MISC_LATE - var/list/all_recipes = list() var/list/locked_recipes = list() var/list/initial_recipes = list() var/list/categories = list() var/list/crafting_procedures_by_type = list() var/list/recipes_by_product_type = list() var/list/fields_by_id = list() - // Weakrefs to fabricators who want their initial recipies var/list/fabricators_to_init = list() - // These should be removed after rewriting crafting to respect init order. - var/list/crafting_recipes_to_init = list() - var/post_recipe_init = FALSE + // #TODO: Research recipe stuff?? + var/list/research_recipes = list() // Fabricator class -> recipe /datum/controller/subsystem/fabrication/Initialize() @@ -27,12 +24,12 @@ SUBSYSTEM_DEF(fabrication) recipe = new recipe recipes_by_product_type[recipe.path] = recipe for(var/fab_type in recipe.fabricator_types) - LAZYADD(all_recipes[fab_type], recipe) LAZYDISTINCTADD(categories[fab_type], recipe.category) if(recipe.required_technology) LAZYADD(locked_recipes[fab_type], recipe) else LAZYADD(initial_recipes[fab_type], recipe) + CHECK_TICK // Slapcrafting trees. var/list/all_crafting_handlers = decls_repository.get_decls_of_subtype(/decl/crafting_stage) @@ -46,19 +43,28 @@ SUBSYSTEM_DEF(fabrication) fab?.refresh_design_cache() fabricators_to_init.Cut() - for(var/datum/stack_recipe/recipe in crafting_recipes_to_init) - recipe.InitializeMaterials() - crafting_recipes_to_init.Cut() + . = ..() - post_recipe_init = TRUE + //Outreach research init + //#TODO: Update to new setup + /* + for(var/fab_class in all_recipes) + var/list/fab_recipes = all_recipes[fab_class] + research_recipes[fab_class] = fab_recipes.Copy() + if(fab_class in initial_recipes) + research_recipes[fab_class] -= initial_recipes[fab_class] - . = ..() + research_recipes[fab_class] -= get_unlocked_recipes(fab_class, get_default_initial_tech_levels()) -/datum/controller/subsystem/fabrication/proc/init_crafting_recipe(var/datum/stack_recipe/recipe) - if(post_recipe_init) - recipe.InitializeMaterials() - else - crafting_recipes_to_init |= recipe + for(var/datum/fabricator_recipe/recipe in research_recipes[fab_class]) + if(recipe.research_excluded) + research_recipes[fab_class] -= recipe + else if(TECH_ESOTERIC in recipe.required_technology) // These techs must be unlocked via random chance during iteration + research_recipes[fab_class] -= recipe + + if(!length(research_recipes[fab_class])) + research_recipes -= fab_class + */ /datum/controller/subsystem/fabrication/proc/get_research_field_by_id(var/rnd_id) if(!length(fields_by_id)) @@ -71,9 +77,6 @@ SUBSYSTEM_DEF(fabrication) /datum/controller/subsystem/fabrication/proc/get_categories(var/fab_type) . = categories[fab_type] -/datum/controller/subsystem/fabrication/proc/get_all_recipes(var/fab_type) - . = all_recipes[fab_type] - /datum/controller/subsystem/fabrication/proc/get_initial_recipes(var/fab_type) . = initial_recipes[fab_type] diff --git a/code/controllers/subsystems/initialization/modpacks.dm b/code/controllers/subsystems/initialization/modpacks.dm index 2d2a2ddc711..fc77a8b9cb2 100644 --- a/code/controllers/subsystems/initialization/modpacks.dm +++ b/code/controllers/subsystems/initialization/modpacks.dm @@ -38,7 +38,12 @@ SUBSYSTEM_DEF(modpacks) if(fail_msg) PRINT_STACK_TRACE("Modpack [(istype(manifest) && manifest.name) || "Unknown"] failed to post-initialize: [fail_msg]") - // Update compiled infolists. + // Update compiled infolists and apply. default_submap_whitelisted_species |= global.using_map.default_species + for(var/decl/submap_archetype/submap in decls_repository.get_decls_unassociated(/decl/submap_archetype)) + if(islist(submap.whitelisted_species) && !length(submap.whitelisted_species)) + submap.whitelisted_species |= SSmodpacks.default_submap_whitelisted_species + if(islist(submap.blacklisted_species) && !length(submap.blacklisted_species)) + submap.blacklisted_species |= SSmodpacks.default_submap_blacklisted_species . = ..() diff --git a/code/controllers/subsystems/initialization/persistence.dm b/code/controllers/subsystems/initialization/persistence.dm index ffad9f38179..c82d8b0d808 100644 --- a/code/controllers/subsystems/initialization/persistence.dm +++ b/code/controllers/subsystems/initialization/persistence.dm @@ -7,6 +7,20 @@ SUBSYSTEM_DEF(persistence) var/elevator_fall_shifts = -1 // This is snowflake, but oh well. var/list/tracking_values = list() +#ifdef NO_NEB_PERSISTENCE + +/datum/controller/subsystem/persistence/proc/track_value() + return +/datum/controller/subsystem/persistence/proc/is_tracking() + return +/datum/controller/subsystem/persistence/proc/forget_value() + return +/datum/controller/subsystem/persistence/proc/show_info(mob/user) + to_chat(user, SPAN_INFO("Disabled with persistence modpack (how ironic)...")) + return + +#else //NO_NEB_PERSISTENCE + /datum/controller/subsystem/persistence/Initialize() . = ..() @@ -75,3 +89,5 @@ SUBSYSTEM_DEF(persistence) var/datum/browser/popup = new(user, "admin_persistence", "Persistence Data") popup.set_content(jointext(dat, null)) popup.open() + +#endif //NO_NEB_PERSISTENCE \ No newline at end of file diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm index b71138afa75..75c70a7fe4c 100644 --- a/code/controllers/subsystems/initialization/robots.dm +++ b/code/controllers/subsystems/initialization/robots.dm @@ -10,18 +10,15 @@ SUBSYSTEM_DEF(robots) var/list/robot_alt_titles = list() var/list/mob_types_by_title = list( - "robot, flying" = /mob/living/silicon/robot/flying, - "drone, flying" = /mob/living/silicon/robot/flying, - "cyborg, flying" = /mob/living/silicon/robot/flying + "cyborg, flying" = /mob/living/silicon/robot/flying, + "robot, flying" = /mob/living/silicon/robot/flying ) var/list/mmi_types_by_title = list( - "cyborg" = /obj/item/mmi, - "robot" = /obj/item/organ/internal/posibrain, - "drone" = /obj/item/mmi/digital/robot, - "cyborg, flying" = /obj/item/mmi, - "robot, flying" = /obj/item/organ/internal/posibrain, - "drone, flying" = /obj/item/mmi/digital/robot + "cyborg" = /obj/item/organ/internal/brain_interface, + "robot" = /obj/item/organ/internal/brain/robotic, + "cyborg, flying" = /obj/item/organ/internal/brain_interface, + "robot, flying" = /obj/item/organ/internal/brain/robotic ) /datum/controller/subsystem/robots/Initialize() @@ -60,8 +57,8 @@ SUBSYSTEM_DEF(robots) if(modules[include_override]) .[include_override] = modules[include_override] -/datum/controller/subsystem/robots/proc/get_mmi_type_by_title(var/check_title) - . = mmi_types_by_title[lowertext(trim(check_title))] || /obj/item/mmi +/datum/controller/subsystem/robots/proc/get_brain_type_by_title(var/check_title) + . = mmi_types_by_title[lowertext(trim(check_title))] || /obj/item/organ/internal/brain/robotic /datum/controller/subsystem/robots/proc/get_mob_type_by_title(var/check_title) . = mob_types_by_title[lowertext(trim(check_title))] || /mob/living/silicon/robot \ No newline at end of file diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 585412ca6a0..a016eba5b16 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -60,7 +60,7 @@ SUBSYSTEM_DEF(jobs) submap_archetypes = sortTim(submap_archetypes, /proc/cmp_submap_archetype_asc, TRUE) // Load job configuration (is this even used anymore?) - if(job_config_file && config.load_jobs_from_txt) + if(job_config_file && get_config_value(/decl/config/toggle/load_jobs_from_txt)) var/list/jobEntries = file2list(job_config_file) for(var/job in jobEntries) if(!job) @@ -174,7 +174,7 @@ SUBSYSTEM_DEF(jobs) if(!job.is_position_available()) to_chat(joining, "Unfortunately, that job is no longer available.") return FALSE - if(!config.enter_allowed) + if(!get_config_value(/decl/config/toggle/on/enter_allowed)) to_chat(joining, "There is an administrative lock on entering the game!") return FALSE if(SSticker.mode && SSticker.mode.station_explosion_in_progress) @@ -291,7 +291,7 @@ SUBSYSTEM_DEF(jobs) if(age < job.minimum_character_age) // Nope. continue switch(age - job.ideal_character_age) - if(0 to -10) + if(-INFINITY to -10) if(age < (job.minimum_character_age+10)) weightedCandidates[V] = 3 // Still a bit young. else @@ -418,7 +418,7 @@ SUBSYSTEM_DEF(jobs) var/list/loadout_taken_slots = list() if(H.client.prefs.Gear() && job.loadout_allowed) for(var/thing in H.client.prefs.Gear()) - var/decl/loadout_option/G = global.gear_datums[thing] + var/decl/loadout_option/G = decls_repository.get_decl_by_id_or_var(thing, /decl/loadout_option) if(G) var/permitted = FALSE if(G.allowed_branches) @@ -448,7 +448,7 @@ SUBSYSTEM_DEF(jobs) to_chat(H, SPAN_WARNING("Your current species, job, branch, skills or whitelist status does not permit you to spawn with [thing]!")) continue - if(!G.slot || G.slot == slot_tie_str || (G.slot in loadout_taken_slots) || !G.spawn_on_mob(H, H.client.prefs.Gear()[G.name])) + if(!G.slot || G.slot == slot_tie_str || (G.slot in loadout_taken_slots) || !G.spawn_on_mob(H, H.client.prefs.Gear()[G.uid])) spawn_in_storage.Add(G) else loadout_taken_slots.Add(G.slot) @@ -487,8 +487,8 @@ SUBSYSTEM_DEF(jobs) H.skillset.obtain_from_client(job, H.client) //Equip job items. - job.setup_account(H) job.equip_job(H, H.mind?.role_alt_title, H.char_branch, H.char_rank) + job.setup_account(H) job.apply_fingerprints(H) spawn_in_storage = equip_custom_loadout(H, job) else @@ -542,7 +542,7 @@ SUBSYSTEM_DEF(jobs) if(spawn_in_storage) for(var/decl/loadout_option/G in spawn_in_storage) - G.spawn_in_storage_or_drop(H, H.client.prefs.Gear()[G.name]) + G.spawn_in_storage_or_drop(H, H.client.prefs.Gear()[G.uid]) to_chat(H, "You are [job.total_positions == 1 ? "the" : "a"] [alt_title || job_title].") @@ -611,7 +611,7 @@ SUBSYSTEM_DEF(jobs) T.maptext = "[copytext_char(text, 1, i)] " sleep(1) - addtimer(CALLBACK(GLOBAL_PROC, .proc/fade_location_blurb, src, T), duration) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fade_location_blurb), src, T), duration) /proc/fade_location_blurb(client/C, obj/T) animate(T, alpha = 0, time = 5) diff --git a/code/controllers/subsystems/managed_instance.dm b/code/controllers/subsystems/managed_instance.dm index dbf7cebf69f..92197745772 100644 --- a/code/controllers/subsystems/managed_instance.dm +++ b/code/controllers/subsystems/managed_instance.dm @@ -34,7 +34,7 @@ SUBSYSTEM_DEF(managed_instances) PRINT_STACK_TRACE("Managed instance was queued for deletion during init! [managed_instance]") category_list[cache_id] -= managed_instance else - events_repository.register(/decl/observ/destroyed, managed_instance, src, /datum/controller/subsystem/managed_instances/proc/clear) + events_repository.register(/decl/observ/destroyed, managed_instance, src, TYPE_PROC_REF(/datum/controller/subsystem/managed_instances, clear)) . = managed_instance // This is costly, but it also shouldn't be common for managed instances to get qdeleted post-storage. diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm index 844f5b790bc..35035dbe635 100644 --- a/code/controllers/subsystems/mapping.dm +++ b/code/controllers/subsystems/mapping.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(mapping) var/list/map_templates_by_category = list() var/list/map_templates_by_type = list() var/list/banned_maps = list() - var/list/banned_ruin_names = list() + var/list/banned_template_names = list() // Listing .dmm filenames in the file at this location will blacklist any templates that include them from being used. // Maps must be the full file path to be properly included. ex. "maps/random_ruins/away_sites/example.dmm" @@ -73,6 +73,11 @@ SUBSYSTEM_DEF(mapping) for(var/datum/map_template/MT as anything in get_all_template_instances()) register_map_template(MT) + // Load any queued map template markers. + for(var/obj/abstract/landmark/map_load_mark/queued_mark in queued_markers) + queued_mark.load_subtemplate() + queued_markers.Cut() + // Populate overmap. if(length(global.using_map.overmap_ids)) for(var/overmap_id in global.using_map.overmap_ids) @@ -90,6 +95,8 @@ SUBSYSTEM_DEF(mapping) level.setup_level_data() old_maxz = world.maxz + //PS13 Build utility levels + global.using_map.build_utility_sites() //PS13 Build main map sites templates global.using_map.build_main_sites() // Build away sites. @@ -121,7 +128,7 @@ SUBSYSTEM_DEF(mapping) // Initialize z-level objects. #ifdef UNIT_TEST - config.roundstart_level_generation = FALSE //#FIXME: Shouldn't this be set before running level_data/setup_level_data()? + set_config_value(/decl/config/toggle/roundstart_level_generation, FALSE) //#FIXME: Shouldn't this be set before running level_data/setup_level_data()? #endif . = ..() diff --git a/code/controllers/subsystems/misc_late.dm b/code/controllers/subsystems/misc_late.dm index 61d8aebd178..7f9ceb8ce6e 100644 --- a/code/controllers/subsystems/misc_late.dm +++ b/code/controllers/subsystems/misc_late.dm @@ -16,4 +16,7 @@ SUBSYSTEM_DEF(misc_late) lift.open_doors() turbolifts_to_open.Cut() + // Pre-populate the emote list. + decls_repository.get_decls_of_type(/decl/emote) + . = ..() diff --git a/mods/persistence/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm similarity index 95% rename from mods/persistence/controllers/subsystems/persistence.dm rename to code/controllers/subsystems/persistence.dm index 75c415fec5d..a529c1d5b92 100644 --- a/mods/persistence/controllers/subsystems/persistence.dm +++ b/code/controllers/subsystems/persistence.dm @@ -16,6 +16,11 @@ /proc/cmp_serialization_stats_dsc(var/datum/serialization_stat/S1, var/datum/serialization_stat/S2) return S2.time_spent - S1.time_spent +///Helper for printing serialization progress updates with a specific color to the logs +/proc/report_progress_serializer(progress_message) + admin_notice(SPAN_SERIALIZER(progress_message), R_DEBUG) + to_world_log(SPAN_SERIALIZER(progress_message)) + ///Retally all area power on round start /hook/roundstart/proc/retally_all_power() for(var/area/A) @@ -265,20 +270,7 @@ if(first_except) throw first_except -///////////////////////////////////////////////////////////////// -// Base Persistence Subsystem Overrides -///////////////////////////////////////////////////////////////// -/datum/controller/subsystem/persistence/Shutdown() - return -/datum/controller/subsystem/persistence/track_value() - return -/datum/controller/subsystem/persistence/is_tracking() - return -/datum/controller/subsystem/persistence/forget_value() - return -/datum/controller/subsystem/persistence/show_info(mob/user) - to_chat(user, SPAN_INFO("Disabled with persistence modpack (how ironic)...")) - return +// Helper //Display to any server staff the timestamp of the currently loaded save in the status panel. /mob/Stat() diff --git a/mods/persistence/controllers/subsystems/persistence/persistence_loading.dm b/code/controllers/subsystems/persistence/persistence_loading.dm similarity index 100% rename from mods/persistence/controllers/subsystems/persistence/persistence_loading.dm rename to code/controllers/subsystems/persistence/persistence_loading.dm diff --git a/mods/persistence/controllers/subsystems/persistence/persistence_saving.dm b/code/controllers/subsystems/persistence/persistence_saving.dm similarity index 97% rename from mods/persistence/controllers/subsystems/persistence/persistence_saving.dm rename to code/controllers/subsystems/persistence/persistence_saving.dm index 436d460a29a..389e8ed0c32 100644 --- a/mods/persistence/controllers/subsystems/persistence/persistence_saving.dm +++ b/code/controllers/subsystems/persistence/persistence_saving.dm @@ -8,13 +8,15 @@ ///Keeps the previous state of 'enter_allowed' and set it to false. Returns TRUE if entering was currently allowed. /datum/controller/subsystem/persistence/proc/_block_entering() - was_entering_allowed = config.enter_allowed - config.enter_allowed = FALSE + was_entering_allowed = get_config_value(/decl/config/toggle/on/enter_allowed) + set_config_value(/decl/config/toggle/on/enter_allowed, FALSE) return was_entering_allowed ///Restore the previous state of 'enter_allowed'. Returns the restored value of 'enter_allowed'. /datum/controller/subsystem/persistence/proc/_restore_entering() - . = (config.enter_allowed = was_entering_allowed) + was_entering_allowed = get_config_value(/decl/config/toggle/on/enter_allowed) + set_config_value(/decl/config/toggle/on/enter_allowed, was_entering_allowed) + . = (was_entering_allowed) was_entering_allowed = FALSE ///Handle pausing all subsystems before save @@ -84,7 +86,7 @@ time_start = REALTIMEOFDAY for(var/datum/mind/char_mind in global.player_minds) var/mob/current_mob = char_mind.current - if(!current_mob || !char_mind.key || istype(char_mind.current, /mob/new_player) || !char_mind.finished_chargen) + if(!current_mob || !char_mind.key || istype(char_mind.current, /mob/new_player) || !current_mob.should_save()) // Just in case, delete this character from limbo. one_off.RemoveFromLimbo(char_mind.unique_id, LIMBO_MIND) continue diff --git a/mods/persistence/controllers/subsystems/persistence/persistence_stats.dm b/code/controllers/subsystems/persistence/persistence_stats.dm similarity index 100% rename from mods/persistence/controllers/subsystems/persistence/persistence_stats.dm rename to code/controllers/subsystems/persistence/persistence_stats.dm diff --git a/mods/persistence/controllers/subsystems/persistence/persistence_storage.dm b/code/controllers/subsystems/persistence/persistence_storage.dm similarity index 100% rename from mods/persistence/controllers/subsystems/persistence/persistence_storage.dm rename to code/controllers/subsystems/persistence/persistence_storage.dm diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index 00efee1ef03..5d704ae9aad 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -6,8 +6,6 @@ PROCESSING_SUBSYSTEM_DEF(plants) init_order = SS_INIT_PLANTS wait = 60 - process_proc = /obj/machinery/portable_atmospherics/hydroponics/Process - var/list/product_descs = list() // Stores generated fruit descs. var/list/seeds = list() // All seed data stored here. var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. diff --git a/code/controllers/subsystems/processing/mobs.dm b/code/controllers/subsystems/processing/mobs.dm index 77a852de19c..a1812f5d758 100644 --- a/code/controllers/subsystems/processing/mobs.dm +++ b/code/controllers/subsystems/processing/mobs.dm @@ -5,7 +5,7 @@ PROCESSING_SUBSYSTEM_DEF(mobs) runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME wait = 2 SECONDS - process_proc = /mob/proc/Life + process_proc = TYPE_PROC_REF(/mob, Life) var/list/mob_list diff --git a/code/controllers/subsystems/processing/processing.dm b/code/controllers/subsystems/processing/processing.dm index ba9ca0fd657..594dc8a1985 100644 --- a/code/controllers/subsystems/processing/processing.dm +++ b/code/controllers/subsystems/processing/processing.dm @@ -8,7 +8,7 @@ SUBSYSTEM_DEF(processing) var/list/processing = list() var/list/current_run = list() - var/process_proc = /datum/proc/Process + var/process_proc = TYPE_PROC_REF(/datum, Process) var/debug_last_thing var/debug_original_process_proc // initial() does not work with procs @@ -28,7 +28,7 @@ SUBSYSTEM_DEF(processing) var/datum/thing = current_run[current_run.len] current_run.len-- if(QDELETED(thing) || (call(thing, process_proc)(wait, times_fired, src) == PROCESS_KILL)) - if(thing) + if(thing?.is_processing == _internal_name) thing.is_processing = null processing -= thing if (MC_TICK_CHECK) @@ -43,7 +43,7 @@ SUBSYSTEM_DEF(processing) debug_original_process_proc = null else debug_original_process_proc = process_proc - process_proc = /datum/proc/DebugSubsystemProcess + process_proc = TYPE_PROC_REF(/datum, DebugSubsystemProcess) to_chat(usr, "[name] - Debug mode [debug_original_process_proc ? "en" : "dis"]abled") diff --git a/code/controllers/subsystems/processing/temperature.dm b/code/controllers/subsystems/processing/temperature.dm index 377c8283660..4f14fc03788 100644 --- a/code/controllers/subsystems/processing/temperature.dm +++ b/code/controllers/subsystems/processing/temperature.dm @@ -2,4 +2,4 @@ PROCESSING_SUBSYSTEM_DEF(temperature) name = "Temperature" priority = SS_PRIORITY_TEMPERATURE wait = 5 SECONDS - process_proc = /atom/proc/ProcessAtomTemperature + process_proc = TYPE_PROC_REF(/atom, ProcessAtomTemperature) diff --git a/code/controllers/subsystems/processing/vines.dm b/code/controllers/subsystems/processing/vines.dm index 56e24d30f27..1e59ccf5a6f 100644 --- a/code/controllers/subsystems/processing/vines.dm +++ b/code/controllers/subsystems/processing/vines.dm @@ -5,8 +5,6 @@ PROCESSING_SUBSYSTEM_DEF(vines) runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME wait = 80 - process_proc = /obj/effect/vine/Process - var/list/vine_list /datum/controller/subsystem/processing/vines/PreInit() diff --git a/code/controllers/subsystems/radiation.dm b/code/controllers/subsystems/radiation.dm index 3e0b0747a13..5865d8f28a4 100644 --- a/code/controllers/subsystems/radiation.dm +++ b/code/controllers/subsystems/radiation.dm @@ -18,6 +18,7 @@ SUBSYSTEM_DEF(radiation) current_res_cache = resistance_cache.Copy() listeners = global.living_mob_list_.Copy() + var/rad_decay_rate = get_config_value(/decl/config/num/radiation_decay_rate) while(current_sources.len) var/datum/radiation_source/S = current_sources[current_sources.len] current_sources.len-- @@ -25,7 +26,7 @@ SUBSYSTEM_DEF(radiation) if(QDELETED(S)) sources -= S else if(S.decay) - S.update_rad_power(S.rad_power - config.radiation_decay_rate) + S.update_rad_power(S.rad_power - rad_decay_rate) if (MC_TICK_CHECK) return @@ -87,12 +88,13 @@ SUBSYSTEM_DEF(radiation) // Okay, now ray trace to find resistence! var/turf/origin = source.source_turf var/working = source.rad_power + var/rad_mult = get_config_value(/decl/config/num/radiation_resistance_multiplier) while(origin != T) origin = get_step_towards(origin, T) //Raytracing if(!resistance_cache[origin]) //Only get the resistance if we don't already know it. origin.calc_rad_resistance() if(origin.cached_rad_resistance) - working = round((working / (origin.cached_rad_resistance * config.radiation_resistance_multiplier)), 0.1) + working = round((working / (origin.cached_rad_resistance * rad_mult)), 0.1) if((working <= .) || (working <= RADIATION_THRESHOLD_CUTOFF)) break // Already affected by a stronger source (or its zero...) . = max((working / (dist ** 2)), .) //Butchered version of the inverse square law. Works for this purpose diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index ef71515dbf0..bf2d38aa0cb 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -46,6 +46,7 @@ SUBSYSTEM_DEF(supply) for(var/decl/hierarchy/supply_pack/spc in sp.get_descendents()) spc.setup() master_supply_list += spc + CHECK_TICK // Just add points over time. /datum/controller/subsystem/supply/fire() diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index ac86a586db1..db5791fdea4 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -52,7 +52,7 @@ SUBSYSTEM_DEF(ticker) Master.SetRunLevel(RUNLEVEL_SETUP) return - if(!bypass_gamemode_vote && (pregame_timeleft <= config.vote_autogamemode_timeleft SECONDS) && !gamemode_vote_results) + if(!bypass_gamemode_vote && (pregame_timeleft <= get_config_value(/decl/config/num/vote_autogamemode_timeleft) SECONDS) && !gamemode_vote_results) if(!SSvote.active_vote) SSvote.initiate_vote(/datum/vote/gamemode, automatic = 1) @@ -111,8 +111,8 @@ SUBSYSTEM_DEF(ticker) if(mode_finished && game_finished()) Master.SetRunLevel(RUNLEVEL_POSTGAME) end_game_state = END_GAME_READY_TO_END - INVOKE_ASYNC(src, .proc/declare_completion) - if(config.allow_map_switching && config.auto_map_vote && global.all_maps.len > 1) + INVOKE_ASYNC(src, PROC_REF(declare_completion)) + if(get_config_value(/decl/config/toggle/allow_map_switching) && get_config_value(/decl/config/toggle/auto_map_vote) && global.all_maps.len > 1) SSvote.initiate_vote(/datum/vote/map/end_game, automatic = 1) else if(mode_finished && (end_game_state <= END_GAME_NOT_OVER)) @@ -222,8 +222,13 @@ Helpers if(mode_to_try in bad_modes) return - //Find the relevant datum, resolving secret in the process. - var/list/base_runnable_modes = config.get_runnable_modes() //format: list(uid = weight) + var/list/base_runnable_modes = list() + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + if(game_mode.probability > 0 && !game_mode.startRequirements()) + base_runnable_modes[game_mode.uid] = game_mode.probability + if((mode_to_try=="random") || (mode_to_try=="secret")) var/list/runnable_modes = base_runnable_modes - bad_modes if(secret_force_mode != "secret") // Config option to force secret to be a specific mode. @@ -263,8 +268,8 @@ Helpers for (var/mode_tag in base_runnable_modes) var/decl/game_mode/M = decls_repository.get_decl_by_id(mode_tag, validate_decl_type = FALSE) if(M) - mode_names += M.name - if (config.secret_hide_possibilities) + mode_names |= M.name + if (get_config_value(/decl/config/toggle/secret_hide_possibilities)) message_admins("Possibilities: [english_list(mode_names)]") else to_world("Possibilities: [english_list(mode_names)]") @@ -344,13 +349,13 @@ Helpers /datum/controller/subsystem/ticker/proc/game_finished() if(mode.station_explosion_in_progress) return 0 - if(config.continous_rounds) + if(get_config_value(/decl/config/toggle/continuous_rounds)) return SSevac.evacuation_controller?.round_over() || mode.station_was_nuked else return mode.check_finished() || (SSevac.evacuation_controller && SSevac.evacuation_controller.round_over() && SSevac.evacuation_controller.emergency_evacuation) || universe_has_ended /datum/controller/subsystem/ticker/proc/mode_finished() - if(config.continous_rounds) + if(get_config_value(/decl/config/toggle/continuous_rounds)) return mode.check_finished() else return game_finished() diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index 298d4e28dd6..9a8a0850a96 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -273,7 +273,7 @@ SUBSYSTEM_DEF(timer) return // Sort all timers by time to run - sortTim(alltimers, .proc/cmp_timer) + sortTim(alltimers, /proc/cmp_timer) // Get the earliest timer, and if the TTR is earlier than the current world.time, // then set the head offset appropriately to be the earliest time tracked by the diff --git a/code/controllers/subsystems/typing.dm b/code/controllers/subsystems/typing.dm index 8f68fa0e711..462bf0b5de1 100644 --- a/code/controllers/subsystems/typing.dm +++ b/code/controllers/subsystems/typing.dm @@ -22,7 +22,7 @@ SUBSYSTEM_DEF(typing) var/static/regex/match_verbs /// A list of clients waiting to be polled for input state. var/list/client/queue = list() - /// A list of ckey to list, containing current state data. See .proc/get_entry for details. + /// A list of ckey to list, containing current state data. See get_entry() for details. var/list/status = list() /* example of an entry: (ckey = list( @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(typing) */ /datum/controller/subsystem/typing/Initialize(start_timeofday) - if(config.show_typing_indicator_for_whispers) + if(get_config_value(/decl/config/toggle/show_typing_indicator_for_whispers)) match_verbs = regex("^(Me|Say|Whisper) +\"?\\w+") else match_verbs = regex("^(Me|Say) +\"?\\w+") @@ -159,7 +159,7 @@ Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Po /atom/movable/typing_indicator/Destroy() if(master) - remove_vis_contents(master, src) + master.remove_vis_contents(src) if(ismob(master)) var/mob/owner = master if(owner.typing_indicator == src) @@ -177,7 +177,7 @@ Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Po set_invisibility(INVISIBILITY_MAXIMUM) if(ismovable(master)) var/atom/movable/owner = master - remove_vis_contents(owner, src) + owner.remove_vis_contents(src) /atom/movable/typing_indicator/proc/show_typing_indicator() @@ -195,7 +195,7 @@ Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Po if(ismovable(master)) var/atom/movable/owner = master - add_vis_contents(owner, src) + owner.add_vis_contents(src) // Animate it popping up from nowhere. var/matrix/M = matrix() diff --git a/code/controllers/subsystems/vis_contents.dm b/code/controllers/subsystems/vis_contents.dm new file mode 100644 index 00000000000..bec6b36215c --- /dev/null +++ b/code/controllers/subsystems/vis_contents.dm @@ -0,0 +1,93 @@ +SUBSYSTEM_DEF(vis_contents_update) + name = "Vis Contents" + flags = SS_BACKGROUND + wait = 1 + priority = SS_PRIORITY_VIS_CONTENTS + init_order = SS_INIT_VIS_CONTENTS + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + var/list/queue_refs = list() + +/datum/controller/subsystem/vis_contents_update/stat_entry() + ..("Queue: [queue_refs.len]") + +/datum/controller/subsystem/vis_contents_update/Initialize() + fire(FALSE, TRUE) + +/datum/controller/subsystem/vis_contents_update/StartLoadingMap() + suspend() + +/datum/controller/subsystem/vis_contents_update/StopLoadingMap() + wake() + +// Largely copied from SSicon_update. +/datum/controller/subsystem/vis_contents_update/fire(resumed = FALSE, no_mc_tick = FALSE) + if(!queue_refs.len) + suspend() + return + var/i = 0 + while (i < queue_refs.len) + i++ + var/atom/A = queue_refs[i] + if(QDELETED(A)) + continue + if(Master.map_loading) + queue_refs.Cut(1, i+1) + return + A.vis_update_queued = FALSE + A.update_vis_contents(force_no_queue = TRUE) + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + queue_refs.Cut(1, i+1) + return + queue_refs.Cut() + +/atom + var/vis_update_queued = FALSE + +/atom/proc/queue_vis_contents_update() + if(vis_update_queued) + return + vis_update_queued = TRUE + SSvis_contents_update.queue_refs.Add(src) + SSvis_contents_update.wake() + +// Horrible colon syntax below is because vis_contents +// exists in /atom.vars, but will not compile. No idea why. +/atom/proc/add_vis_contents(adding) + src:vis_contents |= adding + +/atom/proc/remove_vis_contents(removing) + src:vis_contents -= removing + +/atom/proc/clear_vis_contents() + src:vis_contents = null + +/atom/proc/set_vis_contents(list/adding) + src:vis_contents = adding + +/atom/proc/get_vis_contents_to_add() + return + +/atom/proc/update_vis_contents(force_no_queue = FALSE) + if(!force_no_queue && (!SSvis_contents_update.initialized || TICK_CHECK)) + queue_vis_contents_update() + return + vis_update_queued = FALSE + var/new_vis_contents = get_vis_contents_to_add() + if(length(new_vis_contents)) + set_vis_contents(new_vis_contents) + else if(length(src:vis_contents)) + clear_vis_contents() + +/image/proc/add_vis_contents(adding) + vis_contents |= adding + +/image/proc/remove_vis_contents(removing) + vis_contents -= removing + +/image/proc/clear_vis_contents() + vis_contents.Cut() + +/image/proc/set_vis_contents(list/adding) + vis_contents = adding diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index e5d4b025ff7..a91821ed036 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -64,17 +64,20 @@ SUBSYSTEM_DEF(vote) /datum/controller/subsystem/vote/proc/initiate_vote(vote_type, mob/creator, automatic = 0) set waitfor = FALSE if(active_vote) + to_chat(creator, SPAN_WARNING("There is already a vote in progress.")) return FALSE if(!automatic && (!istype(creator) || !creator.client)) return FALSE if(last_started_time != null && !(is_admin(creator) || automatic)) - var/next_allowed_time = (last_started_time + config.vote_delay) + var/next_allowed_time = (last_started_time + get_config_value(/decl/config/num/vote_delay)) if(next_allowed_time > world.time) + to_chat(creator, SPAN_WARNING("Another vote cannot be run so soon.")) return FALSE var/datum/vote/new_vote = new vote_type if(!new_vote.setup(creator, automatic)) + to_chat(creator, SPAN_WARNING("The selected vote could not be set up or run.")) return FALSE active_vote = new_vote @@ -176,7 +179,7 @@ SUBSYSTEM_DEF(vote) // Helper proc for determining whether addantag vote can be called. /datum/controller/subsystem/vote/proc/is_addantag_allowed(mob/creator, automatic) - if(!config.allow_extra_antags) + if(!get_config_value(/decl/config/toggle/allow_extra_antags)) return 0 // Gamemode has to be determined before we can add antagonists, so we can respect gamemode's add antag vote settings. if((GAME_STATE <= RUNLEVEL_SETUP) || !SSticker.mode) diff --git a/code/controllers/subsystems/zcopy.dm b/code/controllers/subsystems/zcopy.dm index 058afaa1f3d..c5715af524b 100644 --- a/code/controllers/subsystems/zcopy.dm +++ b/code/controllers/subsystems/zcopy.dm @@ -9,6 +9,18 @@ #define SHADOWER_DARKENING_FACTOR 0.6 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this. #define SHADOWER_DARKENING_COLOR "#999999" // The above, but as an RGB string for lighting-less turfs. +//#define ZM_RECORD_STATS // This doesn't work on O7/Neb right now. + +#ifdef ZM_RECORD_STATS +#define ZM_RECORD_START STAT_START_STOPWATCH +#define ZM_RECORD_STOP STAT_STOP_STOPWATCH +#define ZM_RECORD_WRITE(X...) STAT_LOG_ENTRY(##X) +#else +#define ZM_RECORD_START +#define ZM_RECORD_STOP +#define ZM_RECORD_WRITE(X...) +#endif + SUBSYSTEM_DEF(zcopy) name = "Z-Copy" wait = 1 @@ -25,8 +37,19 @@ SUBSYSTEM_DEF(zcopy) var/openspace_turfs = 0 var/multiqueue_skips_turf = 0 + var/multiqueue_skips_discovery = 0 var/multiqueue_skips_object = 0 + var/total_updates_turf = 0 + var/total_updates_discovery = 0 + var/total_updates_object = 0 + +#ifdef ZM_RECORD_STATS + var/list/turf_stats = list() + var/list/discovery_stats = list() + var/list/mimic_stats = list() +#endif + // Highest Z level in a given Z-group for absolute layering. // zstm[zlev] = group_max var/list/zlev_maximums = list() @@ -108,14 +131,38 @@ SUBSYSTEM_DEF(zcopy) /datum/controller/subsystem/zcopy/stat_entry() var/list/entries = list( - "Mx:[json_encode(zlev_maximums)]", + "", // newline + "ZSt: [build_zstack_display()]", // This is a human-readable list of the z-stacks known to ZM. + "ZMx: [zlev_maximums.Join(", ")]", // And this is the raw internal state. + // This one gets broken out from the below because it's more important. "Q: { T: [queued_turfs.len - (qt_idex - 1)] O: [queued_overlays.len - (qo_idex - 1)] }", - "T: { T: [openspace_turfs] O: [openspace_overlays] }", - "Sk: { T: [multiqueue_skips_turf] O: [multiqueue_skips_object] }", + // In order: Total, Queued, Skipped + "T(O): { T: [openspace_turfs] O: [openspace_overlays] }", + "T(U): { T: [total_updates_turf] D: [total_updates_discovery] O: [total_updates_object] }", + "Sk: { T: [multiqueue_skips_turf] D: [multiqueue_skips_discovery] O: [multiqueue_skips_object] }", "F: { H: [fixup_hit] M: [fixup_miss] N: [fixup_noop] FC: [fixup_cache.len] FKG: [fixup_known_good.len] }" ) ..(entries.Join("\n\t")) +// 1, 2, 3..=7, 8 +/datum/controller/subsystem/zcopy/proc/build_zstack_display() + if (!zlev_maximums.len) + return "" + var/list/zmx = list() + var/idx = 1 + var/span_ctr = 0 + do + if (zlev_maximums[idx] != idx) + span_ctr += 1 + else if (span_ctr) + zmx += "[idx - span_ctr]..=[idx]" + span_ctr = 0 + else + zmx += "[idx]" + idx += 1 + while (idx <= zlev_maximums.len) + return jointext(zmx, ", ") + /datum/controller/subsystem/zcopy/Initialize(timeofday) calculate_zstack_limits() // Flush the queue. @@ -169,8 +216,16 @@ SUBSYSTEM_DEF(zcopy) if (!no_mc_tick) MC_SPLIT_TICK + tick_turfs(no_mc_tick) + + if (!no_mc_tick) + MC_SPLIT_TICK + + tick_mimic(no_mc_tick) + +// - Turf mimic - +/datum/controller/subsystem/zcopy/proc/tick_turfs(no_mc_tick) var/list/curr_turfs = queued_turfs - var/list/curr_ov = queued_overlays while (qt_idex <= curr_turfs.len) var/turf/T = curr_turfs[qt_idex] @@ -188,6 +243,7 @@ SUBSYSTEM_DEF(zcopy) if (T.z_queued > 1) T.z_queued -= 1 multiqueue_skips_turf += 1 + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) @@ -197,12 +253,23 @@ SUBSYSTEM_DEF(zcopy) // Z-Turf on the bottom-most level, just fake-copy space (or baseturf). // It's impossible for anything to be on the synthetic turf, so ignore the rest of the ZM machinery. if (!T.below) + ZM_RECORD_START flush_z_state(T) - if (T.z_flags & ZM_MIMIC_BASETURF) + if (T.z_flags & ZM_OVERRIDE) simple_appearance_copy(T, get_base_turf_by_area(T), OPENTURF_MAX_PLANE) else simple_appearance_copy(T, SSskybox.dust_cache["[((T.x + T.y) ^ ~(T.x * T.y) + T.z) % 25]"]) + T.z_generation += 1 + T.z_queued -= 1 + total_updates_turf += 1 + + if (T.above) + T.above.update_mimic() + + ZM_RECORD_STOP + ZM_RECORD_WRITE(turf_stats, "Fake: [T.type] on [T.z]") + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) @@ -215,9 +282,12 @@ SUBSYSTEM_DEF(zcopy) T.z_generation += 1 + ZM_RECORD_START + // Get the bottom-most turf, the one we want to mimic. + // Baseturf mimics act as false bottoms of the stack. var/turf/Td = T - while (Td.below) + while (Td.below && !(Td.z_flags & (ZM_OVERRIDE|ZM_TERMINATOR))) Td = Td.below // Depth must be the depth of the *visible* turf, not self. @@ -227,9 +297,18 @@ SUBSYSTEM_DEF(zcopy) var/t_target = OPENTURF_MAX_PLANE - turf_depth // This is where the turf (but not the copied atoms) gets put. // Turf is set to mimic baseturf, handle that and bail. - if (T.z_flags & ZM_MIMIC_BASETURF) + if (T.z_flags & ZM_OVERRIDE) flush_z_state(T) - simple_appearance_copy(T, get_base_turf_by_area(T), t_target) + simple_appearance_copy(T, Td.z_appearance || get_base_turf_by_area(T), t_target) + + if (T.above) + T.above.update_mimic() + + total_updates_turf += 1 + T.z_queued -= 1 + + ZM_RECORD_STOP + ZM_RECORD_WRITE(turf_stats, "Simple: [T.type] on [T.z]") if (no_mc_tick) CHECK_TICK @@ -237,7 +316,7 @@ SUBSYSTEM_DEF(zcopy) break continue - // If we previously were ZM_MIMIC_BASETURF, there might be an orphaned proxy. + // If we previously were ZM_OVERRIDE, there might be an orphaned proxy. else if (T.mimic_underlay) QDEL_NULL(T.mimic_underlay) @@ -250,7 +329,7 @@ SUBSYSTEM_DEF(zcopy) // This openturf doesn't care about its icon, so we can just overwrite it. if (T.below.mimic_proxy) QDEL_NULL(T.below.mimic_proxy) - T.appearance = T.below + T.appearance = Td.z_appearance || Td T.name = initial(T.name) T.desc = initial(T.desc) T.gender = initial(T.gender) @@ -261,7 +340,7 @@ SUBSYSTEM_DEF(zcopy) if (!T.below.mimic_proxy) T.below.mimic_proxy = new(T) var/atom/movable/openspace/turf_proxy/TO = T.below.mimic_proxy - TO.appearance = Td + TO.appearance = Td.z_appearance || Td TO.name = T.name TO.gender = T.gender // Need to grab this too so PLURAL works properly in examine. TO.opacity = FALSE @@ -286,75 +365,46 @@ SUBSYSTEM_DEF(zcopy) // Handle below atoms. - // Add everything below us to the update queue. + var/shadower_set = FALSE + + // Add everything below us to the discovery queue. for (var/thing in T.below) var/atom/movable/object = thing if (QDELETED(object) || (object.z_flags & ZMM_IGNORE) || object.loc != T.below || object.invisibility == INVISIBILITY_ABSTRACT) - // Don't queue deleted stuff, stuff that's not visible, blacklisted stuff, or stuff that's centered on another tile but intersects ours. + /* Don't queue: + - (q)deleted objects + - Explicitly ignored objects + - Objects not rooted on this turf (multitiles) + - Always-invisible atoms + */ continue // Special case: these are merged into the shadower to reduce memory usage. if (object.type == /atom/movable/lighting_overlay) - T.shadower.copy_lighting(object) + T.shadower.copy_lighting(object, !(T.below.z_flags & ZM_NO_SHADOW)) + shadower_set = TRUE continue - if (!object.bound_overlay) // Generate a new overlay if the atom doesn't already have one. - object.bound_overlay = new(T) - object.bound_overlay.associated_atom = object - - var/override_depth - var/original_type = object.type - var/original_z = object.z - var/have_performed_fixup = FALSE - - switch (object.type) - // Layering for recursive mimic needs to be inherited. - if (/atom/movable/openspace/mimic) - var/atom/movable/openspace/mimic/OOO = object - original_type = OOO.mimiced_type - override_depth = OOO.override_depth - original_z = OOO.original_z - have_performed_fixup = OOO.have_performed_fixup - - // If this is a turf proxy (the mimic for a non-OVERWRITE turf), it needs to respect space parallax if relevant. - if (/atom/movable/openspace/turf_proxy) - if (T.z_eventually_space) - // Yes, this is an awful hack; I don't want to add yet another override_* var. - override_depth = OPENTURF_MAX_PLANE - SPACE_PLANE - - if (/atom/movable/openspace/turf_mimic) - original_z += 1 - - var/atom/movable/openspace/mimic/OO = object.bound_overlay - - // If the OO was queued for destruction but was claimed by another OT, stop the destruction timer. - if (OO.destruction_timer) - deltimer(OO.destruction_timer) - OO.destruction_timer = null - - OO.depth = override_depth || min(zlev_maximums[T.z] - original_z, OPENTURF_MAX_DEPTH) - - // These types need to be pushed a layer down for bigturfs to function correctly. - switch (original_type) - if (/atom/movable/openspace/multiplier, /atom/movable/openspace/turf_proxy) - if (OO.depth < OPENTURF_MAX_DEPTH) - OO.depth += 1 - - OO.mimiced_type = original_type - OO.override_depth = override_depth - OO.original_z = original_z - OO.have_performed_fixup ||= have_performed_fixup - - // Multi-queue to maintain ordering of updates to these - // queueing it multiple times will result in only the most recent - // actually processing. - OO.queued += 1 - queued_overlays += OO + // If an atom already has an overlay, we probably don't need to discover it again. + // ...but we need to force it if the object was salvaged from another zturf. + if (!object.bound_overlay || object.bound_overlay.destruction_timer) + discover_movable(object, T) + + if (!shadower_set) + if (T.below.z_flags & ZM_NO_SHADOW) + T.shadower.color = null + else + T.shadower.color = SHADOWER_DARKENING_COLOR T.z_queued -= 1 if (T.above) T.above.update_mimic() + total_updates_turf += 1 + + ZM_RECORD_STOP + ZM_RECORD_WRITE(turf_stats, "Complex: [T.type] on [T.z]") + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) @@ -364,9 +414,9 @@ SUBSYSTEM_DEF(zcopy) curr_turfs.Cut(1, qt_idex) qt_idex = 1 - if (!no_mc_tick) - MC_SPLIT_TICK - +// - Phase: Mimic update -- actually update the mimics' appearance, order sensitive - +/datum/controller/subsystem/zcopy/proc/tick_mimic(no_mc_tick) + var/list/curr_ov = queued_overlays while (qo_idex <= curr_ov.len) var/atom/movable/openspace/mimic/OO = curr_ov[qo_idex] curr_ov[qo_idex] = null @@ -379,8 +429,9 @@ SUBSYSTEM_DEF(zcopy) break continue - if (QDELETED(OO.associated_atom)) // This shouldn't happen, but just in-case. + if (QDELETED(OO.associated_atom)) // This shouldn't happen. qdel(OO) + log_debug("Z-Mimic: Received mimic with QDELETED parent ([OO.associated_atom || ""])") if (no_mc_tick) CHECK_TICK @@ -392,21 +443,24 @@ SUBSYSTEM_DEF(zcopy) if (OO.queued > 1) OO.queued -= 1 multiqueue_skips_object += 1 + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) break continue + ZM_RECORD_START + // Actually update the overlay. if (OO.dir != OO.associated_atom.dir) - OO.set_dir(OO.associated_atom.dir) + OO.dir = OO.associated_atom.dir // updates are propagated up another way, don't use set_dir + OO.appearance = OO.associated_atom + OO.z_flags = OO.associated_atom.z_flags if (OO.particles != OO.associated_atom.particles) OO.particles = OO.associated_atom.particles - OO.appearance = OO.associated_atom - OO.z_flags = OO.associated_atom.z_flags OO.plane = OPENTURF_MAX_PLANE - OO.depth OO.opacity = FALSE @@ -422,6 +476,11 @@ SUBSYSTEM_DEF(zcopy) if (OO.bound_overlay) // If we have a bound overlay, queue it too. OO.update_above() + total_updates_object += 1 + + ZM_RECORD_STOP + ZM_RECORD_WRITE(mimic_stats, OO.mimiced_type) + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) @@ -431,15 +490,86 @@ SUBSYSTEM_DEF(zcopy) curr_ov.Cut(1, qo_idex) qo_idex = 1 +// return: is-invalid +/datum/controller/subsystem/zcopy/proc/discover_movable(atom/movable/object) + ASSERT(!QDELETED(object)) + + var/turf/Tloc = object.loc + if (!isturf(Tloc) || !Tloc.above) + return TRUE + + var/turf/T = Tloc.above + + ZM_RECORD_START + + if (!object.bound_overlay) + var/atom/movable/openspace/mimic/M = new(T) + object.bound_overlay = M + M.associated_atom = object + if (TURF_IS_MIMICKING(M.loc)) + .(M) + + var/override_depth + var/original_type = object.type + var/original_z = object.z + + switch (object.type) + // Layering for recursive mimic needs to be inherited. + if (/atom/movable/openspace/mimic) + var/atom/movable/openspace/mimic/OOO = object + original_type = OOO.mimiced_type + override_depth = OOO.override_depth + original_z = OOO.original_z + + // If this is a turf proxy (the mimic for a non-OVERWRITE turf), it needs to respect space parallax if relevant. + if (/atom/movable/openspace/turf_proxy) + if (T.z_eventually_space) + // Yes, this is an awful hack; I don't want to add yet another override_* var. + override_depth = OPENTURF_MAX_PLANE - SPACE_PLANE + + var/atom/movable/openspace/mimic/OO = object.bound_overlay + + // If the OO was queued for destruction but was claimed by another OT, stop the destruction timer. + if (OO.destruction_timer) + deltimer(OO.destruction_timer) + OO.destruction_timer = null + + OO.depth = override_depth || min(zlev_maximums[T.z] - original_z, OPENTURF_MAX_DEPTH) + + switch (original_type) + // These types need to be pushed a layer down for bigturfs to function correctly. + if (/atom/movable/openspace/turf_proxy, /atom/movable/openspace/turf_mimic) + OO.depth += 1 + if (/atom/movable/openspace/multiplier) + OO.depth += 1 + + OO.mimiced_type = original_type + OO.override_depth = override_depth + OO.original_z = original_z + + // Multi-queue to maintain ordering of updates to these + // queueing it multiple times will result in only the most recent + // actually processing. + OO.queued += 1 + queued_overlays += OO + + total_updates_discovery += 1 + + ZM_RECORD_STOP + ZM_RECORD_WRITE(discovery_stats, "Depth [OO.depth] on [OO.z]") + + return FALSE + /datum/controller/subsystem/zcopy/proc/flush_z_state(turf/T) - if(T.below) + if (T.below) // Z-Mimic turfs aren't necessarily above another turf. if (T.below.mimic_above_copy) QDEL_NULL(T.below.mimic_above_copy) if (T.below.mimic_proxy) QDEL_NULL(T.below.mimic_proxy) - for (var/atom/movable/openspace/OO in T) - if (istype(OO, /atom/movable/openspace/mimic)) - qdel(OO) + + QDEL_NULL(T.mimic_underlay) + for (var/atom/movable/openspace/mimic/OO in T) + qdel(OO) /datum/controller/subsystem/zcopy/proc/simple_appearance_copy(turf/T, new_appearance, target_plane) if (T.z_flags & ZM_MIMIC_OVERWRITE) @@ -524,7 +654,7 @@ SUBSYSTEM_DEF(zcopy) fixed_underlays[i] = fixed_appearance if (mutated) - for (var/i in 1 to fixed_overlays.len) + for (var/i in 1 to fixed_underlays.len) if (fixed_underlays[i] == null) fixed_underlays[i] = appearance:underlays[i] @@ -552,6 +682,7 @@ SUBSYSTEM_DEF(zcopy) return MA #define FMT_DEPTH(X) (X == null ? "(null)" : X) +#define FMT_OK(X) (X) ? "OK" : "MISMATCH" // This is a dummy object used so overlays can be shown in the analyzer. /atom/movable/openspace/debug @@ -584,7 +715,7 @@ SUBSYSTEM_DEF(zcopy) "", "

Analysis of [T] at [T.x],[T.y],[T.z]

", "Queue occurrences: [T.z_queued]", - "Above space: Apparent [T.z_eventually_space ? "Yes" : "No"], Actual [is_above_space ? "Yes" : "No"] - [T.z_eventually_space == is_above_space ? "OK" : "MISMATCH"]", + "Above space: Apparent [T.z_eventually_space ? "Yes" : "No"], Actual [is_above_space ? "Yes" : "No"] - [FMT_OK(T.z_eventually_space == is_above_space)]", "Z Flags: [english_list(bitfield2list(T.z_flags, global.mimic_defines), "(none)")]", "Has Shadower: [T.shadower ? "Yes" : "No"]", "Has turf proxy: [T.mimic_proxy ? "Yes" : "No"]", @@ -593,12 +724,14 @@ SUBSYSTEM_DEF(zcopy) "Below: [!T.below ? "(nothing)" : "[T.below] at [T.below.x],[T.below.y],[T.below.z]"]", "Depth: [FMT_DEPTH(T.z_depth)] [T.z_depth == OPENTURF_MAX_DEPTH ? "(max)" : ""]", "Generation: [T.z_generation]", - "Update count: Claimed [claimed_update_count], Actual [real_update_count] - [claimed_update_count == real_update_count ? "OK" : "MISMATCH"]", + "Update count: Claimed [claimed_update_count], Actual [real_update_count] - [FMT_OK(claimed_update_count == real_update_count)]", "
    " ) - if (T.z_flags & ZM_MIMIC_BASETURF) - out += "

    Using synthetic rendering (BASETURF).

    " + if (!T.below) + out += "

    Using synthetic rendering (Not Z).

    " + else if (T.z_flags & ZM_OVERRIDE) + out += "

    Using synthetic rendering (OVERRIDE).

    " var/list/found_oo = list(T) var/turf/Tbelow = T @@ -641,7 +774,7 @@ SUBSYSTEM_DEF(zcopy) for (var/d in 0 to OPENTURF_MAX_DEPTH) var/pl = OPENTURF_MAX_PLANE - d if (!atoms_list_list["[pl]"]) - out += "Depth [d], plane [pl] — empty" + out += "Depth [d], planes [pl] — empty" continue out += "Depth [d], plane [pl]" @@ -673,9 +806,13 @@ SUBSYSTEM_DEF(zcopy) /datum/controller/subsystem/zcopy/proc/debug_fmt_thing(atom/A, list/out, turf/original) if (istype(A, /atom/movable/openspace/mimic)) var/atom/movable/openspace/mimic/OO = A + var/base = "
  • [fmt_label("Mimic", A)] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(OO.depth)]" + if (QDELETED(OO.associated_atom)) // This shouldn't happen, but can if the deletion hook is not working. + return "[base] - [OO.type] copying ([OO.mimiced_type]) - ORPHANED
  • " + var/atom/movable/AA = OO.associated_atom var/copied_type = AA.type == OO.mimiced_type ? "[AA.type] \[direct\]" : "[AA.type], eventually [OO.mimiced_type]" - return "
  • [fmt_label("Mimic", A)] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(OO.depth)], fixup [OO.have_performed_fixup ? "Y" : "N"], associated Z-level [AA.z] - [OO.type] copying [AA] ([copied_type])
  • " + return "[base], associated Z-level [AA.z] - [OO.type] copying [AA] ([copied_type])" else if (istype(A, /atom/movable/openspace/turf_mimic)) var/atom/movable/openspace/turf_mimic/DC = A @@ -684,9 +821,11 @@ SUBSYSTEM_DEF(zcopy) else if (isturf(A)) if (A == original) return "
  • [fmt_label("Turf", A)] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(A:z_depth)], Z-level [A.z] - [A] ([A.type]) - SELF
  • " + else // foreign turfs - not visible here, but sometimes good for figuring out layering -- showing these is currently not enabled return "
  • [fmt_label("Foreign Turf", A)] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(A:z_depth)], Z-level [A.z] - [A] ([A.type]) - FOREIGN
  • " + else if (A.type == /atom/movable/openspace/multiplier) return "
  • [fmt_label("Shadower", A)] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])
  • " @@ -695,7 +834,7 @@ SUBSYSTEM_DEF(zcopy) else if (A.type == /atom/movable/openspace/debug/turf) var/atom/movable/openspace/debug/turf/VTO = A - return "
  • [fmt_label("VTO", VTO.parent)] plane [VTO.plane], layer [VTO.layer], computed depth [FMT_DEPTH(VTO.computed_depth)] - [VTO.parent] ([VTO.parent.type]) - FOREIGN" + return "
  • [fmt_label("VTO", VTO.parent)] plane [VTO.plane], layer [VTO.layer], computed depth [FMT_DEPTH(VTO.computed_depth)] - [VTO.parent] ([VTO.parent.type]) - FOREIGN" else if (A.type == /atom/movable/openspace/turf_proxy) return "
  • [fmt_label("Turf Proxy", A)] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])
  • " @@ -718,3 +857,38 @@ SUBSYSTEM_DEF(zcopy) out += "No atoms." #undef FMT_DEPTH +#undef FMT_OK +#undef ZM_RECORD_START +#undef ZM_RECORD_STOP +#undef ZM_RECORD_WRITE + +#ifdef ZM_RECORD_STATS +/client/proc/zms_display_turf() + set name = "ZM Stats - 1Turf" + set category = "Debug" + + if(!check_rights(R_DEBUG)) + return + + render_stats(SSzcopy.turf_stats, src) + +/client/proc/zms_display_discovery() + set name = "ZM Stats - 2Discovery" + set category = "Debug" + + if(!check_rights(R_DEBUG)) + return + + render_stats(SSzcopy.discovery_stats, src) + +/client/proc/zms_display_mimic() + set name = "ZM Stats - 3Mimic" + set category = "Debug" + + if(!check_rights(R_DEBUG)) + return + + render_stats(SSzcopy.mimic_stats, src) + + +#endif diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index dff70c19021..429ecfd060e 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -25,9 +25,6 @@ if("Radio") debug_variables(radio_controller) SSstatistics.add_field_details("admin_verb","DRadio") - if("Configuration") - debug_variables(config) - SSstatistics.add_field_details("admin_verb","DConf") if("pAI") debug_variables(paiController) SSstatistics.add_field_details("admin_verb","DpAI") diff --git a/code/datums/ai/human.dm b/code/datums/ai/human.dm index bced65059e1..24c9fd55af3 100644 --- a/code/datums/ai/human.dm +++ b/code/datums/ai/human.dm @@ -8,13 +8,13 @@ return if(H.get_shock() && H.shock_stage < 40 && prob(3)) - H.emote(pick("moan","groan")) + H.emote(pick(/decl/emote/audible/moan, /decl/emote/audible/groan)) if(H.shock_stage > 10 && prob(3)) - H.emote(pick("cry","whimper")) + H.emote(pick(/decl/emote/audible/cry, /decl/emote/audible/whimper)) if(H.shock_stage >= 40 && prob(3)) - H.emote("scream") + H.emote(/decl/emote/audible/scream) if(!H.restrained() && H.lying && H.shock_stage >= 60 && prob(3)) H.custom_emote("thrashes in agony") diff --git a/code/datums/appearances/appearance_manager.dm b/code/datums/appearances/appearance_manager.dm index b5ce0b9e882..d196a89303d 100644 --- a/code/datums/appearances/appearance_manager.dm +++ b/code/datums/appearances/appearance_manager.dm @@ -6,8 +6,8 @@ if(!pq) pq = new /datum/priority_queue(/proc/cmp_appearance_data) appearances_[viewer] = pq - events_repository.register(/decl/observ/logged_in, viewer, src, /decl/appearance_manager/proc/apply_appearance_images) - events_repository.register(/decl/observ/destroyed, viewer, src, /decl/appearance_manager/proc/remove_appearances) + events_repository.register(/decl/observ/logged_in, viewer, src, TYPE_PROC_REF(/decl/appearance_manager, apply_appearance_images)) + events_repository.register(/decl/observ/destroyed, viewer, src, TYPE_PROC_REF(/decl/appearance_manager, remove_appearances)) pq.Enqueue(ad) reset_appearance_images(viewer) @@ -17,8 +17,8 @@ if(viewer.client) viewer.client.images -= ad.images if(!pq.Length()) - events_repository.unregister(/decl/observ/logged_in, viewer, src, /decl/appearance_manager/proc/apply_appearance_images) - events_repository.register(/decl/observ/destroyed, viewer, src, /decl/appearance_manager/proc/remove_appearances) + events_repository.unregister(/decl/observ/logged_in, viewer, src, TYPE_PROC_REF(/decl/appearance_manager, apply_appearance_images)) + events_repository.register(/decl/observ/destroyed, viewer, src, TYPE_PROC_REF(/decl/appearance_manager, remove_appearances)) appearances_ -= viewer /decl/appearance_manager/proc/remove_appearances(var/mob/viewer) diff --git a/code/datums/appearances/automatic/_base.dm b/code/datums/appearances/automatic/_base.dm index c4422652adc..03c71a126e5 100644 --- a/code/datums/appearances/automatic/_base.dm +++ b/code/datums/appearances/automatic/_base.dm @@ -6,7 +6,7 @@ if(source in appearance_sources) return FALSE appearance_sources[source] = new/datum/appearance_data(images, viewers, priority) - events_repository.register(/decl/observ/destroyed, source, src, /decl/appearance_handler/proc/RemoveAltAppearance) + events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/decl/appearance_handler, RemoveAltAppearance)) /decl/appearance_handler/proc/RemoveAltAppearance(var/source) var/datum/appearance_data/ad = appearance_sources[source] diff --git a/code/datums/appearances/automatic/cardborg.dm b/code/datums/appearances/automatic/cardborg.dm index 5a22f4763ea..42fcea16813 100644 --- a/code/datums/appearances/automatic/cardborg.dm +++ b/code/datums/appearances/automatic/cardborg.dm @@ -17,7 +17,7 @@ var/image/I = get_image_from_backpack(H) AddAltAppearance(H, I, global.silicon_mob_list+H) //you look like a robot to robots! (including yourself because you're totally a robot) - events_repository.register_global(/decl/observ/logged_in, src, /decl/appearance_handler/cardborg/proc/mob_joined) // Duplicate registration request are handled for us + events_repository.register_global(/decl/observ/logged_in, src, TYPE_PROC_REF(/decl/appearance_handler/cardborg, mob_joined)) // Duplicate registration request are handled for us /decl/appearance_handler/cardborg/proc/item_removed(var/obj/item/item, var/mob/user) if((istype(item, /obj/item/clothing/suit/cardborg) || istype(item, /obj/item/clothing/head/cardborg)) || istype(item, /obj/item/storage/backpack)) diff --git a/code/datums/browser.dm b/code/datums/browser.dm index df3678803fe..e90b12f208b 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -153,7 +153,7 @@ return var/param = ref ? "\ref[ref]" : "null" - addtimer(CALLBACK(user, /mob/proc/post_onclose, windowid, param), 2) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, post_onclose), windowid, param), 2) /mob/proc/post_onclose(windowid, param) if(client) diff --git a/code/datums/callbacks.dm b/code/datums/callbacks.dm index 575a3f13959..869a5831bed 100644 --- a/code/datums/callbacks.dm +++ b/code/datums/callbacks.dm @@ -1,46 +1,44 @@ -// USAGE: -// -// var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn) -// var/timerid = addtimer(C, time, timertype) -// OR -// var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype) -// -// Note: proc strings can only be given for datum proc calls, global procs must be proc paths -// Also proc strings are strongly advised against because they don't compile error if the proc stops existing -// See the note on proc typepath shortcuts -// -// INVOKING THE CALLBACK: -// var/result = C.Invoke(args, to, add) //additional args are added after the ones given when the callback was created -// OR -// var/result = C.InvokeAsync(args, to, add) //Sleeps will not block, returns . on the first sleep (then continues on in the "background" after the sleep/block ends), otherwise operates normally. -// OR -// INVOKE_ASYNC() to immediately create and call InvokeAsync -// -// PROC TYPEPATH SHORTCUTS (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...) -// -// global proc while in another global proc: -// .procname -// Example: -// CALLBACK(GLOBAL_PROC, .some_proc_here) -// -// proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents: -// .procname -// Example: -// CALLBACK(src, .some_proc_here) -// -// -// when the above doesn't apply: -// .proc/procname -// Example: -// CALLBACK(src, .proc/some_proc_here) -// -// proc defined on a parent of a some type: -// /some/type/.proc/some_proc_here -// -// -// -// Other wise you will have to do the full typepath of the proc (/type/of/thing/proc/procname) - +/** + *# Callback Datums + *A datum that holds a proc to be called on another object, used to track proccalls to other objects + * + * ## USAGE + * + * ``` + * var/datum/callback/C = new(object|null, PROC_REF(procname), arg1, arg2, ... argn) + * var/timerid = addtimer(C, time, timertype) + * you can also use the compiler define shorthand + * var/timerid = addtimer(CALLBACK(object|null, PROC_REF(procname), arg1, arg2, ... argn), time, timertype) + * ``` + * + * Note: proc strings can only be given for datum proc calls, global procs must be proc paths + * + * Also proc strings are strongly advised against because they don't compile error if the proc stops existing + * + * In some cases you can provide a shortform of the procname, see the proc typepath shortcuts documentation below + * + * ## INVOKING THE CALLBACK + *`var/result = C.Invoke(args, to, add)` additional args are added after the ones given when the callback was created + * + * `var/result = C.InvokeAsync(args, to, add)` Asynchronous - returns . on the first sleep then continues on in the background + * after the sleep/block ends, otherwise operates normally. + * + * ## PROC TYPEPATH SHORTCUTS + * (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...) + * + * ### proc defined on current(src) object OR overridden at src or any of it's parents: + * PROC_REF(procname) + * + * `CALLBACK(src, PROC_REF(some_proc_here))` + * + * ### global proc + * GLOBAL_PROC_REF(procname) + * + * `CALLBACK(src, GLOBAL_PROC_REF(some_proc_here))` + * + * ### proc defined on some type + * TYPE_PROC_REF(/some/type/, some_proc_here) + */ /datum/callback var/datum/object = GLOBAL_PROC var/delegate diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm index 8c135bfed32..2d56bc1db45 100644 --- a/code/datums/cinematic.dm +++ b/code/datums/cinematic.dm @@ -1,10 +1,8 @@ var/global/datum/cinematic/cinematic = new -//Was moved from the gameticker to here. Could use further improvement. - /datum/cinematic //station_explosion used to be a variable for every mob's hud. Which was a waste! //Now we have a general cinematic centrally held within the gameticker....far more efficient! - var/obj/screen/cinematic_screen = null + var/obj/screen/cinematic/cinematic_screen = null //Plus it provides an easy way to make cinematics for other events. Just use this as a template :) /datum/cinematic/proc/station_explosion_cinematic(var/station_missed=0, var/decl/game_mode/override) @@ -21,13 +19,7 @@ var/global/datum/cinematic/cinematic = new return //initialise our cinematic screen object - cinematic_screen = new(src) - cinematic_screen.icon = 'icons/effects/station_explosion.dmi' - cinematic_screen.icon_state = "station_intact" - cinematic_screen.plane = HUD_PLANE - cinematic_screen.layer = HUD_ABOVE_ITEM_LAYER - cinematic_screen.mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - cinematic_screen.screen_loc = "LEFT+1,BOTTOM" + cinematic_screen = new //Let's not discuss how this worked previously. var/list/viewers = list() diff --git a/code/datums/communication/aooc.dm b/code/datums/communication/aooc.dm index e6a3b9575b9..52ca16f4194 100644 --- a/code/datums/communication/aooc.dm +++ b/code/datums/communication/aooc.dm @@ -2,7 +2,7 @@ /decl/communication_channel/aooc name = "AOOC" - config_setting = "aooc_allowed" + config_setting = /decl/config/toggle/on/aooc_allowed expected_communicator_type = /client flags = COMMUNICATION_LOG_CHANNEL_NAME|COMMUNICATION_ADMIN_FOLLOW log_proc = /proc/log_ooc diff --git a/code/datums/communication/channel.dm b/code/datums/communication/channel.dm index 261a0bd658b..c9dc993cb37 100644 --- a/code/datums/communication/channel.dm +++ b/code/datums/communication/channel.dm @@ -48,7 +48,7 @@ log_debug("[log_info_line(communicator)] attempted to communicate over the channel [src] but was of an unexpected type.") return FALSE - if(config_setting && !config.vars[config_setting] && !check_rights(R_INVESTIGATE,0,communicator)) + if(config_setting && !get_config_value(config_setting) && !check_rights(R_INVESTIGATE,0,communicator)) to_chat(communicator, "[name] is globally muted.") return FALSE @@ -117,7 +117,7 @@ if (!message) return FALSE - if (!override_config && config_setting && !config.vars[config_setting]) + if (!override_config && config_setting && !get_config_value(config_setting)) return FALSE return TRUE diff --git a/code/datums/communication/dsay.dm b/code/datums/communication/dsay.dm index 67c01783178..c21705a672e 100644 --- a/code/datums/communication/dsay.dm +++ b/code/datums/communication/dsay.dm @@ -3,7 +3,7 @@ /decl/communication_channel/dsay name = "DSAY" - config_setting = "dsay_allowed" + config_setting = /decl/config/toggle/on/dsay_allowed expected_communicator_type = /client flags = COMMUNICATION_LOG_CHANNEL_NAME log_proc = /proc/log_say diff --git a/code/datums/communication/looc.dm b/code/datums/communication/looc.dm index 756c05f021a..925ccbeb1ac 100644 --- a/code/datums/communication/looc.dm +++ b/code/datums/communication/looc.dm @@ -1,6 +1,6 @@ /decl/communication_channel/ooc/looc name = "LOOC" - config_setting = "looc_allowed" + config_setting = /decl/config/toggle/on/looc_allowed flags = COMMUNICATION_NO_GUESTS|COMMUNICATION_LOG_CHANNEL_NAME|COMMUNICATION_ADMIN_FOLLOW show_preference_setting = /datum/client_preference/show_looc diff --git a/code/datums/communication/ooc.dm b/code/datums/communication/ooc.dm index 401c662e90b..2d206d206bc 100644 --- a/code/datums/communication/ooc.dm +++ b/code/datums/communication/ooc.dm @@ -1,6 +1,6 @@ /decl/communication_channel/ooc name = "OOC" - config_setting = "ooc_allowed" + config_setting = /decl/config/toggle/on/ooc_allowed expected_communicator_type = /client flags = COMMUNICATION_NO_GUESTS log_proc = /proc/log_ooc @@ -13,7 +13,7 @@ return if(!C.holder) - if(!config.dooc_allowed && (C.mob.stat == DEAD)) + if(!get_config_value(/decl/config/toggle/on/dooc_allowed) && (C.mob.stat == DEAD)) to_chat(C, "[name] for dead mobs has been turned off.") return FALSE if(findtext(message, "byond://")) diff --git a/code/datums/composite_sounds/_composite_sound.dm b/code/datums/composite_sounds/_composite_sound.dm index b7de5e43b9d..12790c6765c 100644 --- a/code/datums/composite_sounds/_composite_sound.dm +++ b/code/datums/composite_sounds/_composite_sound.dm @@ -64,7 +64,7 @@ if(!chance || prob(chance)) play(get_sound(starttime)) if(!timerid) - timerid = addtimer(CALLBACK(src, .proc/sound_loop, world.time), mid_length, TIMER_CLIENT_TIME | TIMER_STOPPABLE | TIMER_LOOP) + timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), mid_length, TIMER_CLIENT_TIME | TIMER_STOPPABLE | TIMER_LOOP) /datum/composite_sound/proc/play(soundfile) var/sound/S = sound(soundfile) @@ -81,7 +81,7 @@ if(start_sound) play(start_sound) start_wait = start_length - addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME) + addtimer(CALLBACK(src, PROC_REF(sound_loop)), start_wait, TIMER_CLIENT_TIME) /datum/composite_sound/proc/on_stop() if(end_sound) diff --git a/code/datums/config/_config.dm b/code/datums/config/_config.dm new file mode 100644 index 00000000000..5a5cd4dd77a --- /dev/null +++ b/code/datums/config/_config.dm @@ -0,0 +1,167 @@ +#define CONFIG_FLAG_BOOL BITFLAG(0) +#define CONFIG_FLAG_NUM BITFLAG(1) +#define CONFIG_FLAG_ENUM BITFLAG(2) +#define CONFIG_FLAG_TEXT BITFLAG(3) +#define CONFIG_FLAG_LIST BITFLAG(4) +#define CONFIG_FLAG_HAS_VALUE BITFLAG(5) + +/proc/get_config_value(var/config_decl) + var/decl/config/config_option = GET_DECL(config_decl) + return config_option.value + +/proc/set_config_value(var/config_decl, var/new_value, var/defer_config_refresh = FALSE) + + // Get our actual value (loading from text etc. may change data type) + var/decl/config/config_option = GET_DECL(config_decl) + if((config_option.config_flags & CONFIG_FLAG_NUM) && istext(new_value)) + new_value = text2num(new_value) + else if((config_option.config_flags & (CONFIG_FLAG_ENUM|CONFIG_FLAG_TEXT)) && isnum(new_value)) + new_value = num2text(new_value) + + // Identical values, no point updating. + if(config_option.value == new_value) + return + + // Actually set the value. + var/old_value = config_option.value + config_option.set_value(new_value) + if(config_option.value != old_value && !defer_config_refresh) + config_option.update_post_value_set() + +/proc/toggle_config_value(var/config_decl) + var/decl/config/config_option = GET_DECL(config_decl) + if(!(config_option.config_flags & CONFIG_FLAG_BOOL)) + CRASH("Attempted to toggle non-boolean config entry [config_decl].") + set_config_value(config_decl, !config_option.value) + return config_option.value + +/decl/config + abstract_type = /decl/config + decl_flags = DECL_FLAG_MANDATORY_UID + var/desc + var/value + var/default_value + var/config_flags = CONFIG_FLAG_HAS_VALUE + var/protected = FALSE + + var/static/list/protected_vars = list( + "desc", + "value", + "default_value", + "config_flags", + "protected" + ) + +/decl/config/Initialize() + . = ..() + // Config options without values are assumed false and set to true if present in the loaded data. + // Otherwise we initialize to the default value. + if(!(config_flags & CONFIG_FLAG_HAS_VALUE)) + default_value = FALSE + if(desc) + desc += " Uncomment to enable." + else + desc = "Uncomment to enable." + value = default_value + +/decl/config/VV_hidden() + . = ..() + if(protected) + . |= protected_vars + +/decl/config/validate() + . = ..() + if(isnull(desc)) + . += "no config description set" + if(isnull(default_value)) + if(config_flags & CONFIG_FLAG_HAS_VALUE) + . += "null default value" + else + if((config_flags & (CONFIG_FLAG_NUM|CONFIG_FLAG_ENUM)) && !isnum(default_value)) + . += "has numeric or enum flag but not numeric default_value" + else if((config_flags & CONFIG_FLAG_TEXT) && !istext(default_value)) + . += "has text flag but not text default_value" + else if((config_flags & CONFIG_FLAG_LIST) && !islist(default_value)) + . += "has list flag but not list default_value" + set_value(handle_value_deconversion(default_value)) + if(!compare_values(value, default_value)) + . += "setting to default value via proc resulted in different value ([serialize_value(value)] != [serialize_value(default_value)])" + var/comparison_fail = default_value_serialize_comparison_fails() + if(comparison_fail) + . += "conversion and deconversion of default value does not equal default value ([comparison_fail])" + +/decl/config/proc/compare_values(var/value_one, var/value_two) + return value_one == value_two + +/decl/config/proc/default_value_serialize_comparison_fails() + var/new_val = handle_value_conversion(handle_value_deconversion(default_value)) + if(!compare_values(new_val, default_value)) + return "[new_val] != [default_value]" + +/decl/config/proc/sanitize_value() + SHOULD_CALL_PARENT(TRUE) + var/invalid_value = FALSE + if((config_flags & CONFIG_FLAG_BOOL) && value != TRUE && value != FALSE) + invalid_value = TRUE + else if((config_flags & (CONFIG_FLAG_NUM|CONFIG_FLAG_ENUM)) && !isnum(value)) + invalid_value = TRUE + else if((config_flags & CONFIG_FLAG_TEXT) && !istext(value)) + invalid_value = TRUE + else if((config_flags & CONFIG_FLAG_LIST) && !islist(value)) + invalid_value = TRUE + if(invalid_value) + value = default_value + +/decl/config/proc/update_post_value_set() + SHOULD_CALL_PARENT(TRUE) + return + +/decl/config/proc/get_comment_desc_text() + if(desc) + if(islist(desc)) + for(var/config_line in desc) + LAZYADD(., "## [config_line]") + else + LAZYADD(., "## [desc]") + +/decl/config/proc/get_comment_value_text() + if(config_flags & CONFIG_FLAG_HAS_VALUE) + if(compare_values(value, default_value)) + . += "#[uppertext(uid)] [serialize_default_value()]" + else + . += "[uppertext(uid)] [serialize_value()]" + else if(value) + . += uppertext(uid) + else + . += "#[uppertext(uid)]" + +/decl/config/proc/get_config_file_text() + + . = list() + + var/add_desc = get_comment_desc_text() + if(!isnull(add_desc)) + . += add_desc + + var/add_value = get_comment_value_text() + if(!isnull(add_value)) + . += add_value + + return jointext(., "\n") + +/decl/config/proc/serialize_value() + return "[handle_value_deconversion(value)]" + +/decl/config/proc/serialize_default_value() + return "[handle_value_deconversion(default_value)]" + +/decl/config/proc/handle_value_conversion(var/new_value) + return new_value + +/decl/config/proc/handle_value_deconversion(var/new_value) + return new_value + + //Dangerous: this is used to both set the value at runtime and to parse it from file. If the value format in the file differ from the one at runtime, this will garble the value. Ex: if you store the value as a number of hours in the config file, but the parsed value should be a number of deciseconds after it's parsed.. +/decl/config/proc/set_value(var/new_value) + value = handle_value_conversion(new_value) + sanitize_value() diff --git a/code/datums/config/_config_categories.dm b/code/datums/config/_config_categories.dm new file mode 100644 index 00000000000..b9212994768 --- /dev/null +++ b/code/datums/config/_config_categories.dm @@ -0,0 +1,40 @@ +/decl/configuration_category + abstract_type = /decl/configuration_category + var/name + var/desc + var/configuration_file_location = "config/configuration.txt" + var/list/associated_configuration + +/decl/configuration_category/Initialize() + if(length(associated_configuration)) + for(var/decl_type in associated_configuration) + associated_configuration -= decl_type + associated_configuration += GET_DECL(decl_type) + return ..() + +/decl/configuration_category/validate() + . = ..() + if(!name) + . += "no name set" + if(!desc) + . += "no description supplied" + if(isnull(configuration_file_location)) + . += "null dump file target" + +/decl/configuration_category/proc/get_config_category_text() + + if(!length(associated_configuration)) + return "" + + var/list/header = list( + "##", + "# [uppertext(name)]", + "# [desc]", + "##" + ) + + . = list("[jointext(header, "\n")]") + associated_configuration = sortTim(associated_configuration, /proc/cmp_decl_uid_asc) + for(var/decl/config/config_option in associated_configuration) + . += config_option.get_config_file_text() + return jointext(., "\n\n") diff --git a/code/datums/config/config_enum.dm b/code/datums/config/config_enum.dm new file mode 100644 index 00000000000..8cfbd73f7fc --- /dev/null +++ b/code/datums/config/config_enum.dm @@ -0,0 +1,50 @@ +/decl/config/enum + abstract_type = /decl/config/enum + default_value = 0 + config_flags = CONFIG_FLAG_ENUM | CONFIG_FLAG_HAS_VALUE + var/list/enum_map + +/decl/config/enum/validate() + . = ..() + if(!length(enum_map)) + . += "enum config has zero-length enum_map" + +/decl/config/enum/serialize_value() + var/enum_val + for(var/val in enum_map) + if(value == enum_map[val]) + enum_val = val + break + if(isnull(enum_val)) + enum_val = handle_value_deconversion(value) + return "[enum_val]" + +/decl/config/enum/serialize_default_value() + var/enum_val + for(var/val in enum_map) + if(default_value == enum_map[val]) + enum_val = val + break + if(isnull(enum_val)) + enum_val = handle_value_deconversion(default_value) + return "[enum_val]" + +/decl/config/enum/Initialize() + . = ..() + if(islist(enum_map) && length(enum_map)) + if(islist(desc)) + desc += "[desc] Valid values: [english_list(enum_map)]." + else if(desc) + desc = "[desc] Valid values: [english_list(enum_map)]." + else + desc = "Valid values: [english_list(enum_map)]." + +/decl/config/enum/set_value(var/new_value) + if(istext(new_value)) + new_value = trim(lowertext(new_value)) + if(new_value in enum_map) + new_value = enum_map[new_value] + else + log_error("Invalid key '[new_value]' supplied to [type]. [json_encode(enum_map)]") + new_value = default_value + return ..(new_value) diff --git a/code/datums/config/config_list.dm b/code/datums/config/config_list.dm new file mode 100644 index 00000000000..a2c5893c39c --- /dev/null +++ b/code/datums/config/config_list.dm @@ -0,0 +1,25 @@ +/decl/config/lists + abstract_type = /decl/config/lists + default_value = list() + config_flags = CONFIG_FLAG_LIST | CONFIG_FLAG_HAS_VALUE + +/decl/config/lists/handle_value_deconversion(var/new_value) + return json_encode(new_value) + +/decl/config/lists/handle_value_conversion(var/new_value) + return json_decode(new_value) + +/decl/config/lists/compare_values(var/value_one, var/value_two) + if(!islist(value_one) || !islist(value_two)) + return ..(value_one, value_two) + if(length(value_one) != length(value_two)) + return FALSE + for(var/i = 1 to length(value_one)) + if(!same_entries(value_one[i], value_two[i]) && value_one[i] != value_two[i]) + return FALSE + return TRUE + +/decl/config/lists/default_value_serialize_comparison_fails() + var/list/new_value = handle_value_conversion(handle_value_deconversion(default_value)) + if(!compare_values(new_value, default_value)) + return "[json_encode(new_value)] != [json_encode(default_value)]" diff --git a/code/datums/config/config_num.dm b/code/datums/config/config_num.dm new file mode 100644 index 00000000000..9e28c6e5ec0 --- /dev/null +++ b/code/datums/config/config_num.dm @@ -0,0 +1,18 @@ +/decl/config/num + abstract_type = /decl/config/num + config_flags = CONFIG_FLAG_NUM | CONFIG_FLAG_HAS_VALUE + default_value = 0 + var/min_value = -(INFINITY) + var/max_value = INFINITY + var/rounding + +/decl/config/num/sanitize_value() + ..() + value = clamp(value, min_value, max_value) + if(!isnull(rounding)) + value = round(value, rounding) + +/decl/config/num/compare_values(value_one, value_two) + if(!isnum(value_one) || !isnum(value_two) || !rounding) + return ..(value_one, value_two) + return abs(value_one - value_two) < rounding // epsilon compare due to floating point issues \ No newline at end of file diff --git a/code/datums/config/config_num_client.dm b/code/datums/config/config_num_client.dm new file mode 100644 index 00000000000..4b1527c9fb5 --- /dev/null +++ b/code/datums/config/config_num_client.dm @@ -0,0 +1,7 @@ +/decl/config/num/clients + abstract_type = /decl/config/num/clients + +/decl/config/num/clients/update_post_value_set() + for(var/client/client) + client.OnResize() + . = ..() diff --git a/code/datums/config/config_text.dm b/code/datums/config/config_text.dm new file mode 100644 index 00000000000..4385399d4d7 --- /dev/null +++ b/code/datums/config/config_text.dm @@ -0,0 +1,4 @@ +/decl/config/text + abstract_type = /decl/config/text + config_flags = CONFIG_FLAG_TEXT | CONFIG_FLAG_HAS_VALUE + default_value = "" diff --git a/code/datums/config/config_toggle.dm b/code/datums/config/config_toggle.dm new file mode 100644 index 00000000000..ac859d2edb0 --- /dev/null +++ b/code/datums/config/config_toggle.dm @@ -0,0 +1,4 @@ +/decl/config/toggle + abstract_type = /decl/config/toggle + config_flags = CONFIG_FLAG_BOOL + default_value = FALSE diff --git a/code/datums/config/config_toggle_on.dm b/code/datums/config/config_toggle_on.dm new file mode 100644 index 00000000000..873c917f620 --- /dev/null +++ b/code/datums/config/config_toggle_on.dm @@ -0,0 +1,4 @@ +/decl/config/toggle/on + abstract_type = /decl/config/toggle/on + default_value = TRUE + config_flags = CONFIG_FLAG_BOOL | CONFIG_FLAG_HAS_VALUE diff --git a/code/datums/config/config_types/config_admin.dm b/code/datums/config/config_types/config_admin.dm new file mode 100644 index 00000000000..f99d02e0f6a --- /dev/null +++ b/code/datums/config/config_types/config_admin.dm @@ -0,0 +1,79 @@ +/decl/configuration_category/admin + name = "Admin" + desc = "Configuration options relating to administration." + associated_configuration = list( + /decl/config/num/mod_tempban_max, + /decl/config/num/mod_job_tempban_max, + /decl/config/num/autostealth, + /decl/config/toggle/on/guest_jobban, + /decl/config/toggle/on/auto_local_admin, + /decl/config/toggle/on/admin_jump, + /decl/config/toggle/on/admin_spawning, + /decl/config/toggle/on/admin_revive, + /decl/config/toggle/admin_ooccolor, + /decl/config/toggle/mods_can_job_tempban, + /decl/config/toggle/mods_can_tempban, + /decl/config/toggle/allow_unsafe_narrates + ) + +/decl/config/num/mod_tempban_max + uid = "mod_tempban_max" + default_value = 1440 + desc = "Maximum mod tempban duration (in minutes)." + +/decl/config/num/mod_job_tempban_max + uid = "mod_job_tempban_max" + default_value = 1440 + desc = "Maximum mod job tempban duration (in minutes)." + +/decl/config/num/autostealth + uid = "autostealth" + default_value = 0 + desc = "Sets a value in minutes after which to auto-hide staff who are AFK." + +/decl/config/toggle/on/guest_jobban + uid = "guest_jobban" + desc = list( + "Set to jobban 'Guest-' accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.", + "Set to 1 to jobban them from those positions, set to 0 to allow them." + ) + +/decl/config/toggle/on/auto_local_admin + uid = "auto_local_admin" + desc = "Set to 0/1 to disable/enable automatic admin rights for users connecting from the host the server is running on." + +/decl/config/toggle/on/admin_jump + uid = "allow_admin_jump" + desc = "Allows admin jumping." + +/decl/config/toggle/on/admin_spawning + uid = "allow_admin_spawning" + desc = "Allows admin item spawning." + +/decl/config/toggle/on/admin_revive + uid = "allow_admin_rev" + desc = "Allows admin revives." + +/decl/config/toggle/admin_ooccolor + uid = "allow_admin_ooccolor" + desc = "Comment this out to stop admins being able to choose their personal OOC color." + +/decl/config/toggle/mods_can_tempban + uid = "mods_can_tempban" + desc = "Chooses whether mods have the ability to tempban or not." + +/decl/config/toggle/mods_can_job_tempban + uid = "mods_can_job_tempban" + desc = "Chooses whether mods have the ability to issue tempbans for jobs or not." + +/decl/config/toggle/allow_unsafe_narrates + uid = "allow_unsafe_narrates" + desc = "Determines if admins are allowed to narrate using HTML tags." + +/decl/config/toggle/visible_examine + uid = "visible_examine" + desc = "Determines if a visible message should be shown when someone examines something ('Dave looks at you.')." + +/decl/config/toggle/allow_loadout_customization + uid = "loadout_customization" + desc = "Determines if all loadout items are allowed to have name and desc customized by default." diff --git a/code/datums/config/config_types/config_client.dm b/code/datums/config/config_types/config_client.dm new file mode 100644 index 00000000000..7219bc3189f --- /dev/null +++ b/code/datums/config/config_types/config_client.dm @@ -0,0 +1,60 @@ +/decl/configuration_category/events + name = "Client" + desc = "Configuration options relating to client settings." + associated_configuration = list( + /decl/config/num/clients/lock_client_view_x, + /decl/config/num/clients/lock_client_view_y, + /decl/config/num/clients/max_client_view_x, + /decl/config/num/clients/max_client_view_y, + /decl/config/toggle/popup_admin_pm, + /decl/config/toggle/aggressive_changelog, + /decl/config/lists/forbidden_versions + ) + +/decl/config/lists/forbidden_versions + uid = "forbidden_versions" + default_value = list("512.0001", "512.0002") + desc = "BYOND builds that will result the client using them to be banned." + +/decl/config/num/clients/lock_client_view_x + uid = "lock_client_view_x" + default_value = 0 + desc = "Set to an integer to lock the automatic client view scaling on the X axis." + +/decl/config/num/clients/lock_client_view_y + uid = "lock_client_view_y" + default_value = 0 + desc = "Set to an integer to lock the automatic client view scaling on the Y axis." + +/decl/config/num/clients/max_client_view_x + uid = "max_client_view_x" + default_value = MAX_VIEW + desc = "Change to set a maximum size for the client view X scaling." + +/decl/config/num/clients/max_client_view_x/update_post_value_set() + global.click_catchers = null + for(var/client/client) + client.reset_click_catchers() + . = ..() + +/decl/config/num/clients/max_client_view_y + uid = "max_client_view_y" + default_value = MAX_VIEW + desc = "Change to set a maximum size for the client view Y scaling." + +/decl/config/num/clients/max_client_view_y/update_post_value_set() + global.click_catchers = null + for(var/client/client) + client.reset_click_catchers() + . = ..() + +/decl/config/toggle/popup_admin_pm + uid = "popup_admin_pm" + desc = list( + "Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM.", + "The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)." + ) + +/decl/config/toggle/aggressive_changelog + uid = "aggressive_changelog" + desc = "Determines if the changelog file should automatically open when a user connects and hasn't seen the latest changelog." diff --git a/code/datums/config/config_types/config_debug.dm b/code/datums/config/config_types/config_debug.dm new file mode 100644 index 00000000000..66f250dd8ea --- /dev/null +++ b/code/datums/config/config_types/config_debug.dm @@ -0,0 +1,38 @@ +/decl/configuration_category/debug + name = "Debug" + desc = "Configuration options relating to error reporting." + associated_configuration = list( + /decl/config/num/debug_error_cooldown, + /decl/config/num/debug_error_limit, + /decl/config/num/debug_error_silence_time, + /decl/config/num/debug_error_msg_delay, + /decl/config/toggle/paranoid + ) + +/decl/config/num/debug_error_cooldown + uid = "error_cooldown" + desc = "The \"cooldown\" time for each occurrence of a unique error." + default_value = 600 + +/decl/config/num/debug_error_limit + uid = "error_limit" + desc = "How many occurrences before the next will silence them." + default_value = 50 + +/decl/config/num/debug_error_silence_time + uid = "error_silence_time" + desc = "How long a unique error will be silenced for." + default_value = 6000 + +/decl/config/num/debug_error_msg_delay + uid = "error_msg_delay" + desc = "How long to wait between messaging admins about occurrences of a unique error." + default_value = 50 + +/decl/config/toggle/paranoid + uid = "debug_paranoid" + desc = list( + "Uncomment to make proccall require R_ADMIN instead of R_DEBUG", + "designed for environments where you have testers but don't want them", + "able to use the more powerful debug options." + ) diff --git a/code/datums/config/config_types/config_events.dm b/code/datums/config/config_types/config_events.dm new file mode 100644 index 00000000000..3930a216c81 --- /dev/null +++ b/code/datums/config/config_types/config_events.dm @@ -0,0 +1,47 @@ +/decl/configuration_category/events + name = "Events" + desc = "Configuration options relating to event timers and probabilities." + associated_configuration = list( + /decl/config/enum/objectives_disabled, + /decl/config/lists/event_first_run, + /decl/config/lists/event_delay_lower, + /decl/config/lists/event_delay_upper, + /decl/config/toggle/on/allow_random_events + ) + +//if objectives are disabled or not +/decl/config/enum/objectives_disabled + uid = "objectives_disabled" + default_value = CONFIG_OBJECTIVE_NONE + desc = "Determines if objectives are disabled." + enum_map = list( + "none" = CONFIG_OBJECTIVE_NONE, + "verb" = CONFIG_OBJECTIVE_VERB, + "all" = CONFIG_OBJECTIVE_ALL + ) + +// No custom time, no custom time, between 80 to 100 minutes respectively. +/decl/config/lists/event_first_run + uid = "event_first_run" + desc = "If the first delay has a custom start time. Defined in minutes." + default_value = list(null, null, list("lower" = 80, "upper" = 100)) + +/decl/config/lists/event_delay_lower + uid = "event_delay_lower" + default_value = list(10, 30, 50) + desc = list( + "The lower delay between events in minutes.", + "Affect mundane, moderate, and major events respectively." + ) + +/decl/config/lists/event_delay_upper + uid = "event_delay_upper" + default_value = list(15, 45, 70) + desc = list( + "The upper delay between events in minutes.", + "Affect mundane, moderate, and major events respectively." + ) + +/decl/config/toggle/on/allow_random_events + uid = "allow_random_events" + desc = "Hash out to disable random events during the round." diff --git a/code/datums/config/config_types/config_game_economy.dm b/code/datums/config/config_types/config_game_economy.dm new file mode 100644 index 00000000000..7c5c5f7e754 --- /dev/null +++ b/code/datums/config/config_types/config_game_economy.dm @@ -0,0 +1,55 @@ +/decl/configuration_category/game_economy + name = "Game Economy" + desc = "Configuration options relating to the game economy." + associated_configuration = list( + /decl/config/num/withdraw_period, + /decl/config/num/interest_period, + /decl/config/num/interest_mod_delay, + /decl/config/num/withdraw_mod_delay, + /decl/config/num/transaction_mod_delay, + /decl/config/num/fractional_reserve_mod_delay, + /decl/config/num/anti_tamper_mod_delay, + ) + +// Economy variables +/decl/config/num/withdraw_period + uid = "withdraw_period" + desc = "Duration in deciseconds. Default is 24h (864,000 deciseconds)" + default_value = 1 DAY + rounding = 1 + +/decl/config/num/interest_period + uid = "interest_period" + desc = "Duration in deciseconds. Default is 24h (864,000 deciseconds)" + default_value = 1 DAY + rounding = 1 + +/decl/config/num/interest_mod_delay + uid = "interest_mod_delay" + desc = "Duration in deciseconds. Default is 48h (1,728,000 deciseconds)" + default_value = 2 DAYS + rounding = 1 + +/decl/config/num/withdraw_mod_delay + uid = "withdraw_mod_delay" + desc = "Duration in deciseconds. Default is 72h (2,592,000 deciseconds)" + default_value = 3 DAYS + rounding = 1 + +/decl/config/num/transaction_mod_delay + uid = "transaction_mod_delay" + desc = "Duration in deciseconds. Default is 48h (1,728,000 deciseconds)" + default_value = 2 DAYS + rounding = 1 + +/decl/config/num/fractional_reserve_mod_delay + uid = "fractional_reserve_mod_delay" + desc = "Duration in deciseconds. Default is 72h (2,592,000 deciseconds)" + default_value = 3 DAYS + rounding = 1 + +/decl/config/num/anti_tamper_mod_delay + uid = "anti_tamper_mod_delay" + desc = "Duration in deciseconds. Default is 48h (1,728,000 deciseconds)" + default_value = 2 DAYS + rounding = 1 diff --git a/code/datums/config/config_types/config_game_option.dm b/code/datums/config/config_types/config_game_option.dm new file mode 100644 index 00000000000..3cc8895e0be --- /dev/null +++ b/code/datums/config/config_types/config_game_option.dm @@ -0,0 +1,184 @@ +/decl/configuration_category/game_options + name = "Game Options" + desc = "Configuration options relating to gameplay, such as movement, health and stamina." + associated_configuration = list( + /decl/config/num/movement_human, + /decl/config/num/movement_robot, + /decl/config/num/movement_animal, + /decl/config/num/movement_run, + /decl/config/num/movement_walk, + /decl/config/num/movement_creep, + /decl/config/num/movement_glide_size, + /decl/config/num/movement_min_sprint_cost, + /decl/config/num/movement_skill_sprint_cost_range, + /decl/config/num/movement_min_stamina_recovery, + /decl/config/num/movement_max_stamina_recovery, + /decl/config/num/max_gear_cost, + /decl/config/num/max_acts_per_interval, + /decl/config/num/act_interval, + /decl/config/num/dex_malus_brainloss_threshold, + /decl/config/num/default_darksight_range, + /decl/config/num/default_darksight_effectiveness, + /decl/config/toggle/grant_default_darksight, + /decl/config/num/expected_round_length, + /decl/config/toggle/allow_diagonal_movement, + /decl/config/toggle/expanded_alt_interactions, + /decl/config/toggle/ert_admin_call_only, + /decl/config/toggle/ghosts_can_possess_animals, + /decl/config/toggle/assistant_maint, + /decl/config/toggle/ghost_interaction, + /decl/config/toggle/aliens_allowed, + /decl/config/toggle/ninjas_allowed, + /decl/config/toggle/allow_character_comments, + /decl/config/num/hide_comments_older_than, + /decl/config/toggle/stack_crafting_uses_tools, + /decl/config/toggle/on/stack_crafting_uses_types + ) + +/decl/config/num/movement_human + uid = "human_delay" + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_robot + uid = "robot_delay" + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_animal + uid = "animal_delay" + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_run + uid = "run_delay" + default_value = 2 + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_walk + uid = "walk_delay" + default_value = 4 + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_creep + uid = "creep_delay" + default_value = 6 + desc = "These modify the run/walk speed of all mobs before the mob-specific modifiers are applied." + +/decl/config/num/movement_glide_size + uid = "glide_size_delay" + default_value = 1 + desc = "Set this to 0 for perfectly smooth movement gliding, or 1 or more for delayed chess move style movements." + +/decl/config/num/movement_min_sprint_cost + uid = "minimum_sprint_cost" + default_value = 0.8 + rounding = 0.01 + desc = "Value used for expending stamina during sprinting." + +/decl/config/num/movement_skill_sprint_cost_range + uid = "skill_sprint_cost_range" + default_value = 0.8 + rounding = 0.01 + desc = "Determines the severity of athletics skill when applied to stamina cost." + +/decl/config/num/movement_min_stamina_recovery + uid = "minimum_stamina_recovery" + default_value = 1 + desc = "Minimum stamina recovered per tick when resting." + +/decl/config/num/movement_max_stamina_recovery + uid = "maximum_stamina_recovery" + default_value = 3 + desc = "Maximum stamina recovered per tick when resting." + +/decl/config/num/max_gear_cost + uid = "max_gear_cost" + default_value = 10 + desc = "How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points." + +/decl/config/num/max_gear_cost/sanitize_value() + ..() + if(value < 0) + value = INFINITY + +/decl/config/num/max_acts_per_interval + uid = "max_acts_per_interval" + default_value = 140 + desc = "Defines the number of actions permitted per interval before a user is kicked for spam." + +/decl/config/num/act_interval + uid = "act_interval" + default_value = 0.1 + rounding = 0.01 + desc = "Determines the length of the spam kicking interval in seconds." + +/decl/config/num/dex_malus_brainloss_threshold + uid = "dex_malus_brainloss_threshold" + default_value = 30 + desc = "Threshold of where brain damage begins to affect dexterity (70 brainloss above this means zero dexterity). Default is 30." + +/decl/config/num/default_darksight_range + uid = "default_darksight_range" + default_value = 2 + desc = "The range of default darksight if above is uncommented." + +/decl/config/num/default_darksight_effectiveness + uid = "default_darksight_effectiveness" + default_value = 0.05 + rounding = 0.01 + desc = "The effectiveness of default darksight if above is uncommented." + +/decl/config/num/expected_round_length + uid = "expected_round_length" + default_value = 3 + desc = "Expected round length in hours." + +/decl/config/toggle/grant_default_darksight + uid = "grant_default_darksight" + desc = "Whether or not all human mobs have very basic darksight by default." + +/decl/config/toggle/allow_diagonal_movement + uid = "allow_diagonal_movement" + desc = "Allow multiple input keys to be pressed for diagonal movement." + +/decl/config/toggle/expanded_alt_interactions + uid = "expanded_alt_interactions" + desc = "Determines if objects should provide expanded alt interactions when alt-clicked, such as use or grab." + +/decl/config/toggle/ert_admin_call_only + uid = "ert_admin_call_only" + desc = "Restricted ERT to be only called by admins." + +/decl/config/toggle/ghosts_can_possess_animals + uid = "ghosts_can_possess_animals" + desc = "Determines of ghosts are allowed to possess any animal." + +/decl/config/toggle/assistant_maint + uid = "assistant_maint" + desc = "Remove the # to give assistants maint access." + +/decl/config/toggle/ghost_interaction + uid = "ghost_interaction" + desc = "Remove the # to let ghosts spin chairs." + +/decl/config/toggle/aliens_allowed + uid = "aliens_allowed" + desc = "Remove the # to let aliens spawn." + +/decl/config/toggle/ninjas_allowed + uid = "ninjas_allowed" + desc = "Remove the # to let ninjas spawn." + +/decl/config/toggle/allow_character_comments + uid = "allow_character_comments" + desc = "Remove the # to allow people to leave public comments on each other's characters via the comments system." + +/decl/config/num/hide_comments_older_than + uid = "hide_comments_older_than" + desc = "Specify a number of days after which to hide comments on public profiles (to avoid bloat from retired characters)." + +/decl/config/toggle/stack_crafting_uses_tools + uid = "stack_crafting_uses_tools" + desc = "Enables or disables checking for specific tool types by some stack crafting recipes." + +/decl/config/toggle/on/stack_crafting_uses_types + uid = "stack_crafting_uses_types" + desc = "Enables or disables checking for specific stack types by some stack crafting recipes." diff --git a/code/datums/config/config_types/config_game_world.dm b/code/datums/config/config_types/config_game_world.dm new file mode 100644 index 00000000000..f79576e64b6 --- /dev/null +++ b/code/datums/config/config_types/config_game_world.dm @@ -0,0 +1,127 @@ +/decl/configuration_category/game_world + name = "Game World" + desc = "Configuration options relating to the game world and simulation." + associated_configuration = list( + /decl/config/num/exterior_ambient_light, + /decl/config/num/radiation_decay_rate, + /decl/config/num/radiation_resistance_multiplier, + /decl/config/num/radiation_material_resistance_divisor, + /decl/config/num/radiation_lower_limit, + /decl/config/num/exoplanet_min_day_duration, + /decl/config/num/exoplanet_max_day_duration, + /decl/config/toggle/use_iterative_explosions, + /decl/config/num/iterative_explosives_z_threshold, + /decl/config/num/iterative_explosives_z_multiplier, + /decl/config/num/maximum_mushrooms, + /decl/config/num/gateway_delay, + /decl/config/text/law_zero, + /decl/config/toggle/on/welder_vision, + /decl/config/toggle/on/allow_ic_printing, + /decl/config/toggle/on/cult_ghostwriter, + /decl/config/toggle/allow_holidays, + /decl/config/toggle/humans_need_surnames, + /decl/config/toggle/roundstart_level_generation, + ) + +/decl/config/num/exterior_ambient_light + uid = "exterior_ambient_light" + default_value = 0 + min_value = 0 + desc = "Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit." + +/decl/config/num/radiation_decay_rate + uid = "radiation_decay_rate" + default_value = 1 + desc = "How much radiation levels self-reduce by each tick." + +/decl/config/num/radiation_resistance_multiplier + uid = "radiation_resistance_multiplier" + default_value = 1.25 + desc = "The amount of radiation resistance on a turf is multiplied by this value." + +/decl/config/num/radiation_material_resistance_divisor + uid = "radiation_material_resistance_divisor" + default_value = 2 + desc = "General material radiation resistance is divided by this value." + +/decl/config/num/radiation_lower_limit + uid = "radiation_lower_limit" + default_value = 0.15 + rounding = 0.1 + desc = list( + "Below this point, radiation is ignored.", + "Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage.", + "Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT" + ) + +/decl/config/num/exoplanet_min_day_duration + uid = "exoplanet_min_day_duration" + default_value = 10 + desc = "The minimum duration of an exoplanet day, in minutes." + +/decl/config/num/exoplanet_max_day_duration + uid = "exoplanet_max_day_duration" + default_value = 40 + desc = "The maximum duration of an exoplanet day, in minutes." + +/decl/config/toggle/use_iterative_explosions + uid = "use_iterative_explosions" + desc = "Unhash this to use iterative explosions, keep it hashed to use circle explosions." + +/decl/config/num/iterative_explosives_z_threshold + uid = "iterative_explosives_z_threshold" + default_value = 10 + desc = "The power of explosion required for it to cross Z-levels." + +/decl/config/num/iterative_explosives_z_multiplier + uid = "iterative_explosives_z_multiplier" + default_value = 0.75 + rounding = 0.01 + desc = "What to multiply power by when crossing Z-levels." + +/decl/config/num/maximum_mushrooms + uid = "maximum_mushrooms" + desc = "After this amount alive, walking mushrooms spawned from botany will not reproduce." + default_value = 15 + +/decl/config/num/gateway_delay + uid = "gateway_delay" + default_value = 18000 + desc = "How long the delay is before the Away Mission gate opens. Default is half an hour." + +/decl/config/text/law_zero + uid = "law_zero" + default_value = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" + desc = "Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode." + +/decl/config/toggle/on/welder_vision + uid = "welder_vision" + desc = "Toggles the restrictive weldervision overlay when wearing welding goggles or a welding helmet." + +/decl/config/toggle/on/allow_ic_printing + uid = "allow_ic_printing" + desc = "Determines if players can print copy/pasted integrated circuits." + +/decl/config/toggle/on/cult_ghostwriter + uid = "cult_ghostwriter" + desc = "Determines if ghosts are permitted to write in blood during cult rounds." + +/decl/config/toggle/allow_holidays + uid = "allow_holidays" + desc = "Determines if special 'Easter-egg' events are active on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR" + +/decl/config/toggle/allow_holidays/update_post_value_set() + . = ..() + update_holiday() + +/decl/config/toggle/humans_need_surnames + uid = "humans_need_surnames" + desc = "Humans are forced to have surnames if this is uncommented." + +/decl/config/toggle/disable_daycycle + uid = "disable_daycycle" + desc = "If true, exoplanets won't have daycycles." + +/decl/config/toggle/roundstart_level_generation + uid = "roundstart_level_generation" + desc = "Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on." diff --git a/code/datums/config/config_types/config_health.dm b/code/datums/config/config_types/config_health.dm new file mode 100644 index 00000000000..1c9855d6fd1 --- /dev/null +++ b/code/datums/config/config_types/config_health.dm @@ -0,0 +1,90 @@ +/decl/configuration_category/health + name = "Health" + desc = "Configuration options relating to the health simulation." + associated_configuration = list( + /decl/config/num/health_stress_shock_recovery_constant, + /decl/config/num/health_stress_healing_recovery_constant, + /decl/config/num/health_stress_blood_recovery_constant, + /decl/config/num/health_health_threshold_dead, + /decl/config/num/health_organ_health_multiplier, + /decl/config/num/health_organ_regeneration_multiplier, + /decl/config/num/health_organ_damage_spillover_multiplier, + /decl/config/num/health_revival_brain_life, + /decl/config/toggle/on/health_bones_can_break, + /decl/config/toggle/on/health_limbs_can_break + ) + +/decl/config/toggle/health_adjust_healing_from_stress + uid = "adjust_healing_from_stress" + config_flags = CONFIG_FLAG_BOOL + desc = "Determines if allow stressors should impact shock, healing and blood recovery." + +/decl/config/toggle/health_show_human_death_message + uid = "show_human_death_message" + config_flags = CONFIG_FLAG_BOOL + desc = "Determines if humans should show a visible message upon death ('X seizes up then falls limp, eyes dead and lifeless')." + +/decl/config/toggle/health_organs_decay + uid = "organs_decay" + config_flags = CONFIG_FLAG_BOOL + desc = "Determines if organs should decay outside of a body or storage item." + +/decl/config/toggle/on/health_bones_can_break + uid = "bones_can_break" + desc = list( + "Determines whether bones can be broken through excessive damage to the organ.", + "0 means bones can't break, 1 means they can." + ) + +/decl/config/toggle/on/health_limbs_can_break + uid = "limbs_can_break" + desc = list( + "Determines whether limbs can be amputated through excessive damage to the organ.", + "0 means limbs can't be amputated, 1 means they can." + ) + + +/decl/config/num/health_stress_shock_recovery_constant + uid = "stress_shock_recovery_constant" + default_value = 0.5 + rounding = 0.01 + desc = "A multiplier for the impact stress has on shock recovery - 0.3 means maximum stress imposes a 30% penalty on shock recovery." + +/decl/config/num/health_stress_healing_recovery_constant + uid = "stress_healing_recovery_constant" + default_value = 0.3 + rounding = 0.01 + desc = "A multiplier for the impact stress has on wound passive healing, as above." + +/decl/config/num/health_stress_blood_recovery_constant + uid = "stress_blood_recovery_constant" + default_value = 0.3 + rounding = 0.01 + desc = "A multiplier for the impact stress has on blood regeneration, as above." + +/decl/config/num/health_health_threshold_dead + uid = "health_threshold_dead" + default_value = -100 + desc = "Level of health at which a mob becomes dead." + +/decl/config/num/health_organ_health_multiplier + uid = "organ_health_multiplier" + default_value = 0.9 + rounding = 0.01 + desc = "Percentage multiplier which enables organs to take more damage before bones breaking or limbs being destroyed." + +/decl/config/num/health_organ_regeneration_multiplier + uid = "organ_regeneration_multiplier" + default_value = 0.25 + desc = "Percentage multiplier which influences how fast organs regenerate naturally." + +/decl/config/num/health_organ_damage_spillover_multiplier + uid = "organ_damage_spillover_multiplier" + desc = "Percentage multiplier that influences how damage spreads around organs. 100 means normal, 50 means half." + default_value = 0.5 + rounding = 0.01 + +/decl/config/num/health_revival_brain_life + uid = "revival_brain_life" + default_value = -1 + desc = "Amount of time (in hundredths of seconds) for which a brain retains the 'spark of life' after the person's death (set to -1 for infinite)." diff --git a/code/datums/config/config_types/config_logging.dm b/code/datums/config/config_types/config_logging.dm new file mode 100644 index 00000000000..8efc131bce0 --- /dev/null +++ b/code/datums/config/config_types/config_logging.dm @@ -0,0 +1,85 @@ +/decl/configuration_category/logging + name = "Logging" + desc = "Configuration options relating to logging." + associated_configuration = list( + /decl/config/toggle/log_ooc, + /decl/config/toggle/log_access, + /decl/config/toggle/log_say, + /decl/config/toggle/log_admin, + /decl/config/toggle/log_debug, + /decl/config/toggle/log_game, + /decl/config/toggle/log_vote, + /decl/config/toggle/log_whisper, + /decl/config/toggle/log_emotes, + /decl/config/toggle/log_attack, + /decl/config/toggle/log_adminchat, + /decl/config/toggle/log_adminwarn, + /decl/config/toggle/log_pda, + /decl/config/toggle/log_hrefs, + /decl/config/toggle/log_runtime, + /decl/config/toggle/log_world_output + ) + +/decl/config/toggle/log_ooc + uid = "log_ooc" + desc = "log OOC channel" + +/decl/config/toggle/log_access + uid = "log_access" + desc = "log client access (logon/logoff)" + +/decl/config/toggle/log_say + uid = "log_say" + desc = "log client Say" + +/decl/config/toggle/log_admin + uid = "log_admin" + desc = "log admin actions" + +/decl/config/toggle/log_debug + uid = "log_debug" + desc = "log debug output" + +/decl/config/toggle/log_game + uid = "log_game" + desc = "log game actions (start of round, results, etc.)" + +/decl/config/toggle/log_vote + uid = "log_vote" + desc = "log player votes" + +/decl/config/toggle/log_whisper + uid = "log_whisper" + desc = "log client Whisper" + +/decl/config/toggle/log_emotes + uid = "log_emote" + desc = "log emotes" + +/decl/config/toggle/log_attack + uid = "log_attack" + desc = "log attack messages" + +/decl/config/toggle/log_adminchat + uid = "log_adminchat" + desc = "log admin chat" + +/decl/config/toggle/log_adminwarn + uid = "log_adminwarn" + desc = "Log admin warning messages. Also duplicates a bunch of other messages." + +/decl/config/toggle/log_pda + uid = "log_pda" + desc = "Log PDA messages." + +/decl/config/toggle/log_hrefs + uid = "log_hrefs" + desc = "Log all Topic() calls (for use by coders in tracking down Topic issues)." + +/decl/config/toggle/log_runtime + uid = "log_runtime" + desc = "Log world.log and runtime errors to a file." + +/decl/config/toggle/log_world_output + uid = "log_world_output" + desc = "Log world.log messages." diff --git a/code/datums/config/config_types/config_mode.dm b/code/datums/config/config_types/config_mode.dm new file mode 100644 index 00000000000..7db16b2ca34 --- /dev/null +++ b/code/datums/config/config_types/config_mode.dm @@ -0,0 +1,130 @@ +/decl/configuration_category/modes + name = "Modes" + desc = "Configuration options relating to game modes." + associated_configuration = list( + /decl/config/lists/mode_names, + /decl/config/lists/mode_allowed, + /decl/config/lists/mode_votable, + /decl/config/lists/mode_probabilities, + /decl/config/toggle/feature_object_spell_system, + /decl/config/toggle/traitor_scaling, + /decl/config/toggle/protect_roles_from_antagonist, + /decl/config/toggle/continuous_rounds, + /decl/config/toggle/allow_extra_antags + ) + +/decl/config/lists/mode_names + uid = "mode_names" + desc = "Mode names." + default_value = list() + +/decl/config/lists/mode_names/Initialize() + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + default_value[game_mode.uid] = game_mode.name + return ..() + +/decl/config/lists/mode_allowed + uid = "modes" + desc = "Allowed modes." + default_value = list() + +/decl/config/lists/mode_allowed/Initialize() + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + if(game_mode.available_by_default) + default_value += game_mode.uid + default_value = sortTim(default_value, /proc/cmp_text_asc) + return ..() + +/decl/config/lists/mode_votable + uid = "votable_modes" + desc = "A list of modes that should be votable." + default_value = list() + +/decl/config/lists/mode_votable/Initialize() + default_value = list("secret") + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + if(game_mode.votable) + default_value += game_mode.uid + default_value = sortTim(default_value, /proc/cmp_text_asc) + return ..() + +/decl/config/lists/mode_votable/set_value(new_value) + . = ..() + LAZYDISTINCTADD(value, "secret") + value = sortTim(value, /proc/cmp_text_asc) + +/decl/config/lists/mode_probabilities + uid = "probabilities" + desc = "Relative probability of each mode." + default_value = list() + +/decl/config/lists/mode_probabilities/Initialize() + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + default_value[game_mode.uid] = initial(game_mode.probability) + return ..() + +/decl/config/lists/mode_probabilities/update_post_value_set() + . = ..() + var/list/all_modes = decls_repository.get_decls_of_subtype(/decl/game_mode) + for(var/mode_type in all_modes) + var/decl/game_mode/game_mode = all_modes[mode_type] + game_mode.probability = max(0, value[game_mode.uid]) + +/decl/config/toggle/feature_object_spell_system + uid = "feature_object_spell_system" + desc = "Spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard." + +/decl/config/toggle/traitor_scaling + uid = "traitor_scaling" + desc = "If amount of traitors scales or not." + +/decl/config/toggle/protect_roles_from_antagonist + uid = "protect_roles_from_antagonist" + desc = "If security is prohibited from being most antagonists." + +/decl/config/toggle/continuous_rounds + uid = "continuous_rounds" + desc = list( + "Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked.", + "Malf and Rev will let the shuttle be called when the antags/protags are dead." + ) + +/decl/config/toggle/antag_hud_allowed + uid = "antag_hud_allowed" + desc = "Allow ghosts to see antagonist through AntagHUD." + +/decl/config/toggle/antag_hud_allowed/update_post_value_set() + . = ..() + if(value) + for(var/mob/observer/ghost/g in get_ghosts()) + if(!g.client.holder) // Add the verb back for all non-admin ghosts + g.verbs += /mob/observer/ghost/verb/toggle_antagHUD + to_chat(g, SPAN_NOTICE("AntagHUD has been enabled!"))// Notify all observers they can now use AntagHUD + else + for(var/mob/observer/ghost/g in get_ghosts()) + if(!g.client.holder) //Remove the verb from non-admin ghosts + g.verbs -= /mob/observer/ghost/verb/toggle_antagHUD + if(g.antagHUD) + g.antagHUD = 0 // Disable it on those that have it enabled + g.has_enabled_antagHUD = 2 // We'll allow them to respawn + to_chat(g, SPAN_DANGER("AntagHUD has been disabled.")) + +/decl/config/toggle/antag_hud_restricted + uid = "antag_hud_restricted" + desc = "If ghosts use antagHUD they are no longer allowed to join the round." + +/decl/config/toggle/secret_hide_possibilities + uid = "secret_hide_possibilities" + desc = "If possible round types will be hidden from players for secret rounds." + +/decl/config/toggle/allow_extra_antags + uid = "allow_extra_antags" + desc = "If uncommented, votes can be called to add extra antags to the round." diff --git a/code/datums/config/config_types/config_persistence.dm b/code/datums/config/config_types/config_persistence.dm new file mode 100644 index 00000000000..b0ccda84378 --- /dev/null +++ b/code/datums/config/config_types/config_persistence.dm @@ -0,0 +1,28 @@ +/decl/configuration_category/serialization + name = "Serialization" + desc = "Configuration options relating to serialization and autosave." + associated_configuration = list( + /decl/config/num/autosave_interval, + /decl/config/num/autosave_auto_restart, + /decl/config/enum/save_error_tolerance, + ) + +/decl/config/num/autosave_interval + uid = "autosave_interval" + desc = "Time in deciseconds between automated world saves. Default is every 120 minutes (72,000 deciseconds)." + default_value = 2 HOURS + +/decl/config/num/autosave_auto_restart + uid = "autosave_auto_restart" + desc = "Uptime in deciseconds after which the next autosave will force a server reboot. Default is 12 Hours (432,000 deciseconds). Setting to 0 disables it." + default_value = 12 HOURS + +/decl/config/enum/save_error_tolerance + uid = "save_error_tolerance" + desc = "Set what kind of errors will be skipped over during saving/loading if encountered. Default is \"NONE\". This value is meant to be used for rescuing a broken save, or forcing a broken save to work. As it will most likely cause problems if used constantly. The possible values are: \"NONE\"->No errors allowed at all, \"RECOVERABLE\"->Only recoverable errors allowed, \"ANY\"->Any error, even connection error will be ignored." + default_value = PERSISTENCE_ERROR_TOLERANCE_NONE + enum_map = list( + "none" = PERSISTENCE_ERROR_TOLERANCE_NONE, + "any" = PERSISTENCE_ERROR_TOLERANCE_ANY, + "recoverable" = PERSISTENCE_ERROR_TOLERANCE_RECOVERABLE, + ) diff --git a/code/datums/config/config_types/config_protected.dm b/code/datums/config/config_types/config_protected.dm new file mode 100644 index 00000000000..40cfa3bdd0f --- /dev/null +++ b/code/datums/config/config_types/config_protected.dm @@ -0,0 +1,23 @@ +/decl/configuration_category/protected + name = "Protected" + desc = "Configuration options protected from manipulation on-server." + associated_configuration = list( + /decl/config/text/comms_password, + /decl/config/text/ban_comms_password, + /decl/config/text/login_export_addr + ) + +/decl/config/text/comms_password + uid = "comms_password" + protected = TRUE + desc = "Password used for authorizing ircbot and other external tools." + +/decl/config/text/ban_comms_password + uid = "ban_comms_password" + protected = TRUE + desc = "Password used for authorizing external tools that can apply bans." + +/decl/config/text/login_export_addr + uid = "login_export_addr" + protected = TRUE + desc = "Export address where external tools that monitor logins are located." diff --git a/code/datums/config/config_types/config_resources.dm b/code/datums/config/config_types/config_resources.dm new file mode 100644 index 00000000000..c6e8b6dba75 --- /dev/null +++ b/code/datums/config/config_types/config_resources.dm @@ -0,0 +1,29 @@ +/decl/configuration_category/resources + name = "Resources" + desc = "Configuration options relating to server resources." + associated_configuration = list( + /decl/config/text/custom_item_icon_location, + /decl/config/text/custom_icon_icon_location, + /decl/config/lists/resource_urls + ) + +/decl/config/text/custom_item_icon_location + uid = "custom_item_icon_location" + default_value = "config/custom_items/icons" + desc = "Set this to a file path relative to the executing binary to prefix all custom item icon locations with this location ie. '\[CUSTOM_ITEM_ICON_LOCATION\]/\[custom item icon path value\]'" + +/decl/config/text/custom_icon_icon_location + uid = "custom_icon_icon_location" + default_value = "config/custom_icons/icons" + desc = "Set this to a file path relative to the executing binary to prefix all custom icon locations with this location ie. '\[CUSTOM_ICON_ICON_LOCATION\]/\[custom icon path value\]'" + +/decl/config/lists/resource_urls + uid = "resource_urls" + desc = list( + "Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512),", + "the client/resource_rsc var does not function as one would expect. See client_defines.dm, the 'preload_rsc' var's", + "comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or", + "clients will still download from the server *too*. This will randomly select one URL if more than one is provided.", + "Spaces are prohibited in each URL by spec, you must use encoded spaces.", + "ex. RESOURCE_URLS URL URL2 URL3" + ) diff --git a/code/datums/config/config_types/config_server.dm b/code/datums/config/config_types/config_server.dm new file mode 100644 index 00000000000..8a4774d647e --- /dev/null +++ b/code/datums/config/config_types/config_server.dm @@ -0,0 +1,365 @@ +/decl/configuration_category/server + name = "Server" + desc = "Configuration options relating to the server itself." + associated_configuration = list( + /decl/config/num/kick_inactive, + /decl/config/num/fps, + /decl/config/num/tick_limit_mc_init, + /decl/config/num/minimum_byond_version, + /decl/config/num/minimum_byond_build, + /decl/config/num/player_limit, + /decl/config/num/respawn_delay, + /decl/config/num/cult_ghostwriter_req_cultists, + /decl/config/num/character_slots, + /decl/config/num/loadout_slots, + /decl/config/num/max_maint_drones, + /decl/config/num/drone_build_time, + /decl/config/num/max_character_aspects, + /decl/config/text/irc_bot_host, + /decl/config/text/main_irc, + /decl/config/text/admin_irc, + /decl/config/text/server_name, + /decl/config/text/server, + /decl/config/text/serverurl, + /decl/config/text/banappeals, + /decl/config/text/wikiurl, + /decl/config/text/forumurl, + /decl/config/text/discordurl, + /decl/config/text/githuburl, + /decl/config/text/issuereporturl, + /decl/config/text/hosted_by, + /decl/config/toggle/panic_bunker, + /decl/config/text/panic_bunker_message, + /decl/config/toggle/do_not_prevent_spam, + /decl/config/toggle/no_throttle_localhost, + /decl/config/toggle/on/abandon_allowed, + /decl/config/toggle/on/ooc_allowed, + /decl/config/toggle/on/looc_allowed, + /decl/config/toggle/on/dooc_allowed, + /decl/config/toggle/on/dsay_allowed, + /decl/config/toggle/on/aooc_allowed, + /decl/config/toggle/on/enter_allowed, + /decl/config/toggle/on/allow_ai, + /decl/config/toggle/on/allow_drone_spawn, + /decl/config/toggle/hub_visibility, + /decl/config/toggle/usewhitelist, + /decl/config/toggle/load_jobs_from_txt, + /decl/config/toggle/disable_player_mice, + /decl/config/toggle/uneducated_mice, + /decl/config/toggle/use_alien_whitelist, + /decl/config/toggle/use_alien_whitelist_sql, + /decl/config/toggle/forbid_singulo_possession, + /decl/config/toggle/use_loyalty_implants, + /decl/config/toggle/no_click_cooldown, + /decl/config/toggle/disable_webhook_embeds, + /decl/config/toggle/delist_when_no_admins, + /decl/config/toggle/wait_for_sigusr1_reboot, + /decl/config/toggle/use_irc_bot, + /decl/config/toggle/show_typing_indicator_for_whispers, + /decl/config/toggle/announce_shuttle_dock_to_irc, + /decl/config/toggle/guests_allowed, + /decl/config/toggle/on/jobs_have_minimal_access, + /decl/config/toggle/on/admin_legacy_system, + /decl/config/toggle/on/ban_legacy_system + ) + +/decl/config/num/kick_inactive + uid = "kick_inactive" + desc = "Disconnect players who did nothing during the set amount of minutes." + +/decl/config/num/fps + uid = "fps" + default_value = 20 + desc = list( + "Defines world FPS. Defaults to 20.", + "Can also accept ticklag values (0.9, 0.5, etc) which will automatically be converted to FPS." + ) + +/decl/config/num/fps/sanitize_value() + ..() + if(value <= 0) + value = default_value + +/decl/config/num/fps/set_value(new_value) + // Handle ticklag-formatted FPS (0.7 etc) + if(new_value > 0 && new_value < 1) + new_value = round(10 / new_value) + return ..(new_value) + +/decl/config/num/fps/update_post_value_set() + world.fps = value + . = ..() + +/decl/config/num/tick_limit_mc_init + uid = "tick_limit_mc_init" + desc = "SSinitialization throttling." + default_value = TICK_LIMIT_MC_INIT_DEFAULT + +/decl/config/num/minimum_byond_version + uid = "minimum_byond_version" + default_value = 0 + desc = "Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511)." + +/decl/config/num/minimum_byond_build + uid = "minimum_byond_build" + default_value = 0 + desc = "Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000)." + +/decl/config/num/player_limit + uid = "player_limit" + desc = "The maximum number of non-admin players online." + default_value = 0 + +/decl/config/num/use_age_restriction_for_jobs + uid = "use_age_restriction_for_jobs" + default_value = 0 + desc = list( + "Unhash this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing", + "the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.", + "REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.", + "NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means", + "you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days." + ) + +/decl/config/num/use_age_restriction_for_antags + uid = "use_age_restriction_for_antags" + desc = list( + "Unhash this entry to have certain antag roles require your account to be at least a certain number of days old for round start and auto-spawn selection.", + "Non-automatic antagonist recruitment, such as being converted to cultism is not affected. Has the same database requirements and notes as USE_AGE_RESTRICTION_FOR_JOBS." + ) + +/decl/config/num/respawn_delay + uid = "respawn_delay" + default_value = 30 + min_value = 0 + desc = "Respawn delay in minutes before one may respawn as a crew member." + +/decl/config/num/cult_ghostwriter_req_cultists + uid = "cult_ghostwriter_req_cultists" + default_value = 10 + desc = "Sets the minimum number of cultists needed for ghosts to write in blood." + +/decl/config/num/character_slots + uid = "character_slots" + default_value = 10 + desc = "Sets the number of available character slots." + +/decl/config/num/loadout_slots + uid = "loadout_slots" + default_value = 3 + desc = "Sets the number of loadout slots per character." + +/decl/config/num/max_maint_drones + uid = "max_maint_drones" + desc = "This many drones can be active at the same time." + default_value = 5 + +/decl/config/num/drone_build_time + uid = "drone_build_time" + desc = "A drone will become available every X ticks since last drone spawn. Default is 2 minutes." + default_value = 1200 + +/decl/config/num/max_character_aspects + uid = "max_character_aspects" + default_value = 5 + desc = "Remove the # to define a different cap for aspect points in chargen." + +/decl/config/text/irc_bot_host + uid = "irc_bot_host" + default_value = "localhost" + desc = "Host where the IRC bot is hosted. Port 45678 needs to be open." + +/decl/config/text/main_irc + uid = "main_irc" + default_value = "#main" + desc = "IRC channel to send information to. Leave blank to disable." + +/decl/config/text/admin_irc + uid = "admin_irc" + desc = "IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc." + +// server name (for world name / status) +/decl/config/text/server_name + uid = "server_name" + desc = "Server name: This appears at the top of the screen in-game." + default_value = "Nebula 13" + +/decl/config/text/server + uid = "server" + desc = "Set a server location for world reboot. Don't include the byond://, just give the address and port." + +/decl/config/text/serverurl + uid = "serverurl" + desc = list( + "Set a server URL for the IRC bot to use; like SERVER, don't include the byond://", + "Unlike SERVER, this one shouldn't break auto-reconnect." + ) + +/decl/config/text/banappeals + uid = "banappeals" + desc = "Ban appeals URL - usually for a forum or wherever people should go to contact your admins." + +/decl/config/text/wikiurl + uid = "wikiurl" + desc = "Wiki address." + +/decl/config/text/forumurl + uid = "forumurl" + desc = "Discussion forum address." + +/decl/config/text/discordurl + uid = "discordurl" + desc = "Discord server permanent invite address." + +/decl/config/text/githuburl + uid = "githuburl" + desc = "GitHub address." + +/decl/config/text/issuereporturl + uid = "issuereporturl" + desc = "GitHub new issue address." + +/decl/config/text/hosted_by + uid = "hostedby" + desc = "Set a hosted by name for UNIX platforms." + +/decl/config/toggle/panic_bunker + uid = "panic_bunker" + desc = "Is the panic bunker currently on by default?" + +/decl/config/text/panic_bunker_message + uid = "panic_bunker_message" + default_value = "Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass." + desc = "A message when user did not pass the panic bunker." + +/decl/config/toggle/do_not_prevent_spam + uid = "do_not_prevent_spam" + desc = "Determines if action spam kicking should be DISABLED. Not recommended; this helps protect from spam attacks." + +/decl/config/toggle/no_throttle_localhost + uid = "no_throttle_localhost" + desc = list( + "Whether or not to make localhost immune to throttling.", + "Localhost will still be throttled internally; it just won't be affected by it." + ) + +/decl/config/toggle/on/abandon_allowed + uid = "abandon_allowed" + desc = "Comment to disable respawning by default." + +/decl/config/toggle/on/ooc_allowed + uid = "ooc_allowed" + desc = "Comment to disable the OOC channel by default." + +/decl/config/toggle/on/looc_allowed + uid = "looc_allowed" + desc = "Comment to disable the LOOC channel by default." + +/decl/config/toggle/on/dooc_allowed + uid = "dooc_allowed" + desc = "Comment to disable the dead OOC channel by default." + +/decl/config/toggle/on/dsay_allowed + uid = "dsay_allowed" + desc = "Comment to disable ghost chat by default." + +/decl/config/toggle/on/aooc_allowed + uid = "aooc_allowed" + desc = "Comment to disable the AOOC channel by default." + +/decl/config/toggle/on/enter_allowed + uid = "enter_allowed" + desc = "Comment to prevent anyone from joining the round by default." + +/decl/config/toggle/on/allow_ai + uid = "allow_ai" + desc = "Allow AI job." + +/decl/config/toggle/on/allow_drone_spawn + uid = "allow_drone_spawn" + desc = "Allow ghosts to join as maintenance drones." + +/decl/config/toggle/hub_visibility + uid = "hub_visibility" + desc = "Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to visible. This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly." + +/decl/config/toggle/hub_visibility/update_post_value_set() + . = ..() + world.update_hub_visibility() + +/decl/config/toggle/usewhitelist + uid = "usewhitelist" + desc = list( + "Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.", + "Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans)." + ) + +/decl/config/toggle/load_jobs_from_txt + uid = "load_jobs_from_txt" + desc = "Toggle for having jobs load up from the .txt" + +/decl/config/toggle/disable_player_mice + uid = "disable_player_mice" + +/decl/config/toggle/uneducated_mice + uid = "uneducated_mice" + desc = "Set to 1 to prevent newly-spawned mice from understanding human speech." + +/decl/config/toggle/use_alien_whitelist + uid = "usealienwhitelist" + desc = "Determines if non-admins are restricted from using humanoid alien races." + +/decl/config/toggle/use_alien_whitelist_sql + uid = "usealienwhitelist_sql" + desc = "Determines if the alien whitelist should use SQL instead of the legacy system. (requires the above uncommented as well)." + +/decl/config/toggle/forbid_singulo_possession + uid = "forbid_singulo_possession" + desc = "Remove the # mark infront of this to forbid admins from posssessing the singularity." + +/decl/config/toggle/use_loyalty_implants + uid = "use_loyalty_implants" + desc = "Remove the # in front of this config option to have loyalty implants spawn by default on your server." + +/decl/config/toggle/no_click_cooldown + uid = "no_click_cooldown" + +/decl/config/toggle/disable_webhook_embeds + uid = "disable_webhook_embeds" + desc = "Determines if Discord webhooks should be sent in plaintext rather than as embeds." + +/decl/config/toggle/delist_when_no_admins + uid = "delist_when_no_admins" + desc = "Determines if the server should hide itself from the hub when no admins are online." + +/decl/config/toggle/wait_for_sigusr1_reboot + uid = "wait_for_sigusr1_reboot" + desc = "Determines if Dream Daemon should refuse to reboot for any reason other than SIGUSR1." + +/decl/config/toggle/use_irc_bot + uid = "use_irc_bot" + desc = "Determines if data is sent to the IRC bot. Generally requires MAIN_IRC and associated setup." + +/decl/config/toggle/show_typing_indicator_for_whispers + uid = "show_typing_indicator_for_whispers" + desc = "Determinese if a typing indicator shows overhead for people currently writing whispers." + +/decl/config/toggle/announce_shuttle_dock_to_irc + uid = "announce_shuttle_dock_to_irc" + desc = "Determines if announce shuttle dock announcements are sent to the main IRC channel, if MAIN_IRC has also been setup." + +/decl/config/toggle/guests_allowed + uid = "guests_allowed" + desc = "Determines whether or not people without a registered ckey (i.e. guest-*) can connect to your server." + +/decl/config/toggle/on/ban_legacy_system + uid = "ban_legacy_system" + desc = "Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system." + +/decl/config/toggle/on/admin_legacy_system + uid = "admin_legacy_system" + desc = "Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system." + +/decl/config/toggle/on/jobs_have_minimal_access + uid = "jobs_have_minimal_access" + desc = "Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments." diff --git a/code/datums/config/config_types/config_voting.dm b/code/datums/config/config_types/config_voting.dm new file mode 100644 index 00000000000..de914b8f8fa --- /dev/null +++ b/code/datums/config/config_types/config_voting.dm @@ -0,0 +1,79 @@ +/decl/configuration_category/voting + name = "Voting" + desc = "Configuration options relating to votes at runtime." + associated_configuration = list( + /decl/config/num/vote_delay, + /decl/config/num/vote_period, + /decl/config/num/vote_autotransfer_initial, + /decl/config/num/vote_autotransfer_interval, + /decl/config/num/vote_autogamemode_timeleft, + /decl/config/num/vote_no_default, + /decl/config/num/vote_no_dead, + /decl/config/num/vote_no_dead_crew_transfer, + /decl/config/toggle/vote_restart, + /decl/config/toggle/vote_mode, + /decl/config/toggle/allow_map_switching, + /decl/config/toggle/auto_map_vote + ) + +/decl/config/num/vote_delay + uid = "vote_delay" + default_value = 6000 + desc = "Min delay (deciseconds) between voting sessions (default 10 minutes)." + +/decl/config/num/vote_period + uid = "vote_period" + default_value = 600 + desc = "Time period (deciseconds) which voting session will last (default 1 minute)." + +/decl/config/num/vote_autotransfer_initial + uid = "vote_autotransfer_initial" + default_value = 108000 + desc = "Autovote initial delay (deciseconds) before first automatic transfer vote call (default 180 minutes)." + +/decl/config/num/vote_autotransfer_interval + uid = "vote_autotransfer_interval" + default_value = 18000 + desc = "Autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)." + +/decl/config/num/vote_autogamemode_timeleft + uid = "vote_autogamemode_timeleft" + default_value = 100 + desc = "Time left (seconds) before round start when automatic gamemote vote is called (default 160)." + +/decl/config/num/vote_no_default + uid = "vote_no_default" + default_value = FALSE + config_flags = CONFIG_FLAG_BOOL | CONFIG_FLAG_HAS_VALUE + desc = "Players' votes default to 'No vote' (otherwise, default to 'No change')." + +/decl/config/num/vote_no_dead + uid = "vote_no_dead" + default_value = FALSE + config_flags = CONFIG_FLAG_BOOL | CONFIG_FLAG_HAS_VALUE + desc = "Prevents dead players from voting or starting votes." + +/decl/config/num/vote_no_dead_crew_transfer + uid = "vote_no_dead_crew_transfer" + default_value = FALSE + config_flags = CONFIG_FLAG_BOOL | CONFIG_FLAG_HAS_VALUE + desc = "Prevents players not in-round from voting on crew transfer votes." + +/decl/config/toggle/vote_restart + uid = "allow_vote_restart" + desc = "Allow players to initiate a restart vote." + +/decl/config/toggle/vote_mode + uid = "allow_vote_mode" + desc = "Allow players to initate a mode-change start." + +/decl/config/toggle/allow_map_switching + uid = "allow_map_switching" + desc = list( + "Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect.", + "You'll also likely need to enable WAIT_FOR_SIGUSR1 below." + ) + +/decl/config/toggle/auto_map_vote + uid = "auto_map_vote" + desc = "Determines if the automatic map vote and switch are called at end of round. MAP_SWITCHING must also be enabled." diff --git a/code/datums/datum.dm b/code/datums/datum.dm index b812b9ec481..a1114baa8b9 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -7,6 +7,8 @@ var/tmp/is_processing = FALSE /// Used by the SStimer subsystem var/list/active_timers + /// Used to avoid unnecessary refstring creation in Destroy(). + var/tmp/has_state_machine = FALSE #ifdef TESTING var/tmp/running_find_references @@ -49,11 +51,12 @@ if (!isturf(src)) // Not great, but the 'correct' way to do it would add overhead for little benefit. cleanup_events(src) - var/list/machines = global.state_machines["\ref[src]"] - if(length(machines)) - for(var/base_type in machines) - qdel(machines[base_type]) - global.state_machines -= "\ref[src]" + if(has_state_machine) + var/list/machines = global.state_machines["\ref[src]"] + if(length(machines)) + for(var/base_type in machines) + qdel(machines[base_type]) + global.state_machines -= "\ref[src]" return QDEL_HINT_QUEUE diff --git a/code/datums/extensions/abilities/abilities.dm b/code/datums/extensions/abilities/abilities.dm new file mode 100644 index 00000000000..6a1bba98967 --- /dev/null +++ b/code/datums/extensions/abilities/abilities.dm @@ -0,0 +1,48 @@ +// Extension that handles intercepting click actions and casts spells/power as appropriate. +/datum/extension/abilities + base_type = /datum/extension/abilities + expected_type = /mob + var/list/ability_handlers + +/datum/extension/abilities/proc/update() + if(!LAZYLEN(ability_handlers)) + remove_extension(holder, base_type) + +/// Using an empty hand on itelf (attack_empty_hand()) +/datum/extension/abilities/proc/do_self_invocation() + if(isliving(holder) && LAZYLEN(ability_handlers)) + for(var/datum/ability_handler/handler in ability_handlers) + if(handler.do_self_invocation(holder)) + return TRUE + return FALSE + +/// Clicking a grab on the currently grabbed mob. +/datum/extension/abilities/proc/do_grabbed_invocation(atom/target) + if(isliving(holder) && istype(target) && LAZYLEN(ability_handlers)) + for(var/datum/ability_handler/handler in ability_handlers) + if(handler.do_grabbed_invocation(holder, target)) + return TRUE + return FALSE + +/// Clicking an adjacent target (UnarmedAttack()) +/datum/extension/abilities/proc/do_melee_invocation(atom/target) + if(isliving(holder) && istype(target) && LAZYLEN(ability_handlers)) + for(var/datum/ability_handler/handler in ability_handlers) + if(handler.do_melee_invocation(holder, target)) + return TRUE + return FALSE + +/// Clicking a distant target (RangedAttack()) +/datum/extension/abilities/proc/do_ranged_invocation(atom/target) + if(isliving(holder) && istype(target) && LAZYLEN(ability_handlers)) + for(var/datum/ability_handler/handler in ability_handlers) + if(handler.do_ranged_invocation(holder, target)) + return TRUE + return FALSE + +/// Updates UI etc. on login +/datum/extension/abilities/proc/refresh_login() + if(LAZYLEN(ability_handlers)) + for(var/datum/ability_handler/handler in ability_handlers) + handler.refresh_login() + diff --git a/code/datums/extensions/abilities/abilities_mob.dm b/code/datums/extensions/abilities/abilities_mob.dm new file mode 100644 index 00000000000..ca112d829f7 --- /dev/null +++ b/code/datums/extensions/abilities/abilities_mob.dm @@ -0,0 +1,16 @@ +/mob/proc/get_ability_handler(handler_type, create_if_missing) + + var/datum/extension/abilities/abilities + if(create_if_missing) + abilities = get_or_create_extension(src, /datum/extension/abilities) + else + abilities = get_extension(src, /datum/extension/abilities) + if(!abilities) + return null + + var/datum/ability_handler/handler = locate(handler_type) in abilities.ability_handlers + if(!handler && create_if_missing) + handler = new handler_type(abilities, src) + LAZYADD(abilities.ability_handlers, handler) + + return handler diff --git a/code/datums/extensions/abilities/ability_handler.dm b/code/datums/extensions/abilities/ability_handler.dm new file mode 100644 index 00000000000..05ad274748d --- /dev/null +++ b/code/datums/extensions/abilities/ability_handler.dm @@ -0,0 +1,46 @@ +/datum/ability_handler + abstract_type = /datum/ability_handler + var/mob/owner + var/list/ability_items + var/datum/extension/abilities/master + +/datum/ability_handler/New(_master) + master = _master + if(!istype(master)) + CRASH("Ability handler received invalid master!") + owner = master.holder + if(!istype(owner)) + CRASH("Ability handler received invalid owner!") + ..() + +/datum/ability_handler/Destroy() + QDEL_NULL_LIST(ability_items) + if(master) + LAZYREMOVE(master.ability_handlers, src) + master.update() + master = null + owner = null + return ..() + +/datum/ability_handler/proc/cancel() + if(LAZYLEN(ability_items)) + for(var/thing in ability_items) + owner?.drop_from_inventory(thing) + qdel(thing) + ability_items = null + +/// Individual ability methods/disciplines (psioncs, etc.) so that mobs can have multiple. +/datum/ability_handler/proc/refresh_login() + return + +/datum/ability_handler/proc/do_self_invocation(mob/user) + return FALSE + +/datum/ability_handler/proc/do_grabbed_invocation(mob/user, atom/target) + return FALSE + +/datum/ability_handler/proc/do_melee_invocation(mob/user, atom/target) + return FALSE + +/datum/ability_handler/proc/do_ranged_invocation(mob/user, atom/target) + return FALSE diff --git a/code/datums/extensions/abilities/ability_item.dm b/code/datums/extensions/abilities/ability_item.dm new file mode 100644 index 00000000000..59baf3c7a27 --- /dev/null +++ b/code/datums/extensions/abilities/ability_item.dm @@ -0,0 +1,34 @@ +/obj/item/ability + atom_flags = 0 + simulated = 1 + anchored = TRUE + pickup_sound = null + drop_sound = null + equip_sound = null + is_spawnable_type = FALSE + abstract_type = /obj/item/ability + var/mob/living/owner + var/handler_type + +/obj/item/ability/Initialize() + owner = loc + if(!istype(owner)) + return INITIALIZE_HINT_QDEL + return ..() + +/obj/item/ability/Destroy() + var/datum/ability_handler/handler = istype(owner) && owner.get_ability_handler(handler_type, FALSE) + if(handler) + LAZYREMOVE(handler.ability_items, src) + . = ..() + +/obj/item/ability/dropped() + ..() + qdel(src) + +/obj/item/ability/get_storage_cost() + return ITEM_SIZE_NO_CONTAINER + +/obj/item/ability/attack_self(var/mob/user) + user?.drop_from_inventory(src) + return TRUE diff --git a/code/datums/extensions/assembly/assembly.dm b/code/datums/extensions/assembly/assembly.dm index f060c3f78fd..18fa5a5dd78 100644 --- a/code/datums/extensions/assembly/assembly.dm +++ b/code/datums/extensions/assembly/assembly.dm @@ -30,6 +30,10 @@ var/screen_on = TRUE +SAVED_VAR(/datum/extension/assembly, parts) +SAVED_VAR(/datum/extension/assembly, enabled) +SAVED_VAR(/datum/extension/assembly, damage) + /datum/extension/assembly/proc/try_install_component(var/mob/living/user, var/obj/item/stock_parts/P) for(var/max_part_type in max_parts) if(istype(P, max_part_type)) diff --git a/code/datums/extensions/assembly/assembly_power.dm b/code/datums/extensions/assembly/assembly_power.dm index 55b32b40127..f336f079f92 100644 --- a/code/datums/extensions/assembly/assembly_power.dm +++ b/code/datums/extensions/assembly/assembly_power.dm @@ -10,7 +10,8 @@ /datum/extension/assembly/proc/battery_power(var/power_usage = 0) apc_powered = FALSE for(var/obj/item/stock_parts/computer/battery_module/battery_module in parts) - if(battery_module.check_functionality() && battery_module.battery.checked_use(power_usage * CELLRATE)) + var/obj/item/cell/battery = battery_module.get_cell() + if(battery_module.check_functionality() && battery?.checked_use(power_usage * CELLRATE)) return TRUE // Tries to use power from APC, if present. @@ -32,9 +33,10 @@ // At this point, we know that APC can power us for this tick. Check if we also need to charge our battery, and then actually use the power. for(var/obj/item/stock_parts/computer/battery_module/battery_module in parts) - if(battery_module.check_functionality() && (battery_module.battery.charge < battery_module.battery.maxcharge) && power_usage > 0) + var/obj/item/cell/battery = battery_module.get_cell() + if(battery_module.check_functionality() && battery && (battery.charge < battery.maxcharge) && power_usage > 0) power_usage += tesla_link.passive_charging_rate - battery_module.battery.give(tesla_link.passive_charging_rate * CELLRATE) + battery.give(tesla_link.passive_charging_rate * CELLRATE) A.use_power_oneoff(power_usage, EQUIP) return TRUE @@ -50,7 +52,7 @@ /datum/extension/assembly/proc/handle_power() last_power_usage = calculate_power_usage() - // First tries to charge from an APC, if APC is unavailable switches to battery power. + // First tries to charge from an APC, if APC is unavailable switches to battery power. // If neither works the computer fails. if(apc_power(last_power_usage)) return if(battery_power(last_power_usage)) return diff --git a/code/datums/extensions/cell/cell.dm b/code/datums/extensions/cell/cell.dm new file mode 100644 index 00000000000..6d35a46581a --- /dev/null +++ b/code/datums/extensions/cell/cell.dm @@ -0,0 +1,169 @@ +/datum/extension/loaded_cell + expected_type = /obj/item + base_type = /datum/extension/loaded_cell + VAR_PRIVATE/weakref/loaded_cell_ref + var/load_sound = 'sound/weapons/guns/interaction/energy_magin.ogg' + var/unload_sound = 'sound/weapons/guns/interaction/smg_magout.ogg' + var/requires_tool + var/expected_cell_type = /obj/item/cell/device + var/load_delay = 1 SECOND + var/unload_delay + var/can_modify = TRUE + +/datum/extension/loaded_cell/New(datum/holder, _expected_cell_type, _create_cell_type, _override_cell_capacity) + ..(holder) + if(ispath(_expected_cell_type)) + if(!ispath(_expected_cell_type, /obj/item/cell)) + PRINT_STACK_TRACE("Non-cell type supplied to [type] as expected cell type.") + expected_cell_type = _expected_cell_type + if(ispath(_create_cell_type)) + create_cell(_create_cell_type, _override_cell_capacity) + +/datum/extension/loaded_cell/Destroy() + var/obj/item/cell/existing_cell = loaded_cell_ref?.resolve() + if(istype(existing_cell) && !QDELETED(existing_cell) && existing_cell.loc == holder) + qdel(existing_cell) + return ..() + +/datum/extension/loaded_cell/proc/create_cell(_create_cell_type, _override_cell_capacity) + if(!ispath(_create_cell_type, expected_cell_type)) + PRINT_STACK_TRACE("Non-expected type '[_create_cell_type]' supplied to [type] as premade cell type (expected '[expected_cell_type]').") + loaded_cell_ref = weakref(new _create_cell_type(holder, _override_cell_capacity)) + +/datum/extension/loaded_cell/proc/get_cell() + var/obj/item/cell/cell = loaded_cell_ref?.resolve() + if(istype(cell) && !QDELETED(cell) && cell.loc == holder) + return cell + +/datum/extension/loaded_cell/proc/has_tool_unload_interaction(var/obj/item/tool) + return requires_tool && IS_TOOL(tool, requires_tool) + +/datum/extension/loaded_cell/proc/try_load(var/mob/user, var/obj/item/cell/cell) + + // Check inputs. + var/obj/item/holder_item = holder + if(!istype(cell) || !istype(user) || QDELETED(cell) || QDELETED(user) || user.incapacitated()) + return FALSE + + if(!can_modify) + to_chat(user, SPAN_WARNING("\The [holder] power supply cannot be replaced.")) + return TRUE + + // Check type. + if(!istype(cell, expected_cell_type)) + var/obj/item/expected_cell = expected_cell_type + to_chat(user, SPAN_WARNING("\The [holder] will only accept \a [initial(expected_cell.name)].")) + return TRUE // technically a valid interaction. + + // Check existing cell ref. + var/obj/item/cell/existing_cell = loaded_cell_ref?.resolve() + if(istype(existing_cell) && !QDELETED(existing_cell) && existing_cell.loc == holder) + to_chat(user, SPAN_WARNING("\The [holder] already has \a [existing_cell] loaded.")) + return TRUE // technically a valid interaction. + + // Apply delays. + if(load_delay && !do_after(user, load_delay, holder)) + return FALSE + + // Recheck existing cell ref. + if(!istype(cell) || !istype(user) || QDELETED(cell) || QDELETED(user) || user.incapacitated()) + return FALSE + // Recheck existing cell ref. + existing_cell = loaded_cell_ref?.resolve() + if(istype(existing_cell) && !QDELETED(existing_cell) && existing_cell.loc == holder) + to_chat(user, SPAN_WARNING("\The [holder] already has \a [existing_cell] loaded.")) + return TRUE // technically a valid interaction. + + // Load the cell. + if(user.try_unequip(cell, holder, FALSE)) + user.visible_message(SPAN_NOTICE("\The [user] slots \the [cell] into \the [holder].")) + loaded_cell_ref = weakref(cell) + if(load_sound) + playsound(user.loc, pick(load_sound), 25, 1) + holder_item.update_icon() + return TRUE + return FALSE + +/datum/extension/loaded_cell/proc/try_unload(var/mob/user, var/obj/item/tool) + + // Check inputs. + var/obj/item/holder_item = holder + if(!istype(user) || QDELETED(user) || user.incapacitated()) + return FALSE + + if(!can_modify) + if(tool) + to_chat(user, SPAN_WARNING("\The [holder]'s power supply cannot be removed.")) + return TRUE // Tool interactions should get a warning, inhand interactions should just default to regular attack_hand. + return FALSE + + // Check existing cell. + var/obj/item/cell/existing_cell = loaded_cell_ref?.resolve() + if(!istype(existing_cell) || QDELETED(existing_cell) || existing_cell.loc != holder) + to_chat(user, SPAN_WARNING("\The [holder] has no cell loaded.")) + if(loaded_cell_ref) + loaded_cell_ref = null + holder_item.update_icon() + return TRUE // technically a valid interaction. + + // Apply tool checks. + if(requires_tool) + // No tool provided means we're probably using an empty hand - don't print a warning if it's a tool based removal. + if(!istype(tool) || QDELETED(tool)) + return FALSE + if(!IS_TOOL(tool, requires_tool)) + var/decl/tool_archetype/tool_arch = GET_DECL(requires_tool) + to_chat(user, SPAN_WARNING("\The [holder] requires \a [tool_arch.name] to remove the cell.")) + return TRUE // technically a valid interaction. + if(unload_delay && !tool.do_tool_interaction(requires_tool, user, holder, unload_delay)) + return FALSE + else if(istype(tool)) + return FALSE + // Apply general delay. + else if(unload_delay && !do_after(user, unload_delay, holder)) + return FALSE + + // Recheck inputs. + if(!istype(user) || QDELETED(user) || user.incapacitated()) + return FALSE + // Recheck existing cell. + existing_cell = loaded_cell_ref?.resolve() + if(!istype(existing_cell) || QDELETED(existing_cell) || existing_cell.loc != holder) + to_chat(user, SPAN_WARNING("\The [holder] has no cell loaded.")) + if(loaded_cell_ref) + loaded_cell_ref = null + holder_item.update_icon() + return TRUE // technically a valid interaction. + + // Unload the cell. + user.visible_message( + SPAN_NOTICE("\The [user] removes \the [existing_cell] from \the [holder]."), + SPAN_NOTICE("You remove \the [existing_cell] from \the [holder].") + ) + existing_cell.dropInto(get_turf(holder)) + user.put_in_active_hand(existing_cell) + holder_item.update_icon() + if(unload_sound) + playsound(user.loc, pick(unload_sound), 25, TRUE) + return TRUE + +/datum/extension/loaded_cell/proc/get_examine_text(var/obj/item/cell/current_cell) + . = list() + if(current_cell) + . += SPAN_NOTICE("\The [holder] has \a [current_cell] installed.") + . += SPAN_NOTICE("\The [holder] is [round(current_cell.percent())]% charged.") + if(can_modify) + if(requires_tool) + var/decl/tool_archetype/needed_tool = GET_DECL(requires_tool) + . += SPAN_NOTICE("\The [holder] power supply requires \a [needed_tool.name] to remove.") + else + . += SPAN_NOTICE("Hold \the [holder] in an off-hand and click it with an empty hand to remove the power supply.") + else + . += SPAN_NOTICE("\The [holder] power supply cannot be removed.") + else + var/obj/item/cell = expected_cell_type + . += SPAN_WARNING("\The [holder] has no power source installed.") + if(can_modify) + . += SPAN_NOTICE("\The [holder] is compatible with \a [initial(cell.name)].") + else + . += SPAN_NOTICE("\The [holder] power supply cannot be replaced.") diff --git a/code/datums/extensions/cell/cell_panel.dm b/code/datums/extensions/cell/cell_panel.dm new file mode 100644 index 00000000000..184c1f7e2df --- /dev/null +++ b/code/datums/extensions/cell/cell_panel.dm @@ -0,0 +1,20 @@ +/datum/extension/loaded_cell/panel + var/panel_open = FALSE + +// We hook the try_unload() proc to do our panel opening and closing. +/datum/extension/loaded_cell/panel/has_tool_unload_interaction(var/obj/item/tool) + return IS_TOOL(tool, TOOL_SCREWDRIVER) + +/datum/extension/loaded_cell/panel/try_unload(var/mob/user, var/obj/item/tool) + if(!istype(user) || QDELETED(user) || user.incapacitated()) + return FALSE + if(tool) + panel_open = !panel_open + to_chat(user, SPAN_NOTICE("You [panel_open ? "open" : "close"] \the [holder]'s battery compartment.")) + var/obj/item/holder_item = holder + holder_item.update_icon() + return TRUE + return panel_open && ..() + +/datum/extension/loaded_cell/panel/get_examine_text() + . = ..() + SPAN_NOTICE("\The [holder]'s battery compartment is [panel_open ? "open" : "closed"]. Use a screwdriver to [panel_open ? "close" : "open"] it.") diff --git a/code/datums/extensions/cell/cell_secured.dm b/code/datums/extensions/cell/cell_secured.dm new file mode 100644 index 00000000000..5a5e8cf55c1 --- /dev/null +++ b/code/datums/extensions/cell/cell_secured.dm @@ -0,0 +1,4 @@ +// Must be removed with a screwdriver. +/datum/extension/loaded_cell/secured + requires_tool = TOOL_SCREWDRIVER + unload_delay = 1 SECOND diff --git a/code/datums/extensions/cell/cell_unremovable.dm b/code/datums/extensions/cell/cell_unremovable.dm new file mode 100644 index 00000000000..892a8cf5b16 --- /dev/null +++ b/code/datums/extensions/cell/cell_unremovable.dm @@ -0,0 +1,3 @@ +// Cannot be removed or replaced. +/datum/extension/loaded_cell/unremovable + can_modify = FALSE diff --git a/code/datums/extensions/deity_be_near.dm b/code/datums/extensions/deity_be_near.dm index fa8f07b6a46..06d3616710d 100644 --- a/code/datums/extensions/deity_be_near.dm +++ b/code/datums/extensions/deity_be_near.dm @@ -9,9 +9,9 @@ /datum/extension/deity_be_near/New(var/datum/holder, var/mob/living/deity/connect) ..() - events_repository.register(/decl/observ/moved, holder,src, .proc/check_movement) + events_repository.register(/decl/observ/moved, holder,src, PROC_REF(check_movement)) connected_deity = connect - events_repository.register(/decl/observ/destroyed, holder, src, .proc/dead_deity) + events_repository.register(/decl/observ/destroyed, holder, src, PROC_REF(dead_deity)) var/obj/O = holder O.desc += "
    This item deals damage to its wielder the [keep_away_instead ? "closer" : "farther"] it is from a deity structure" diff --git a/code/datums/extensions/event_registration.dm b/code/datums/extensions/event_registration.dm index 4daa92636e3..b483bd79a25 100644 --- a/code/datums/extensions/event_registration.dm +++ b/code/datums/extensions/event_registration.dm @@ -10,8 +10,8 @@ /datum/extension/event_registration/New(datum/holder, decl/observ/event, datum/target, callproc) ..() - event.register(target, src, .proc/trigger) - events_repository.register(/decl/observ/destroyed, target, src, .proc/qdel_self) + event.register(target, src, PROC_REF(trigger)) + events_repository.register(/decl/observ/destroyed, target, src, PROC_REF(qdel_self)) src.event = event src.target = target src.callproc = callproc @@ -36,15 +36,15 @@ ..() src.given_area = given_area register_shuttles() - events_repository.register_global(/decl/observ/shuttle_added, src, .proc/shuttle_added) + events_repository.register_global(/decl/observ/shuttle_added, src, PROC_REF(shuttle_added)) /datum/extension/event_registration/shuttle_stationary/proc/register_shuttles() if(given_area in SSshuttle.shuttle_areas) for(var/shuttle_name in SSshuttle.shuttles) var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle_name] if(given_area in shuttle_datum.shuttle_area) - events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/shuttle_moved) - events_repository.register(/decl/observ/shuttle_pre_move, shuttle_datum, src, .proc/shuttle_pre_move) + events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, PROC_REF(shuttle_moved)) + events_repository.register(/decl/observ/shuttle_pre_move, shuttle_datum, src, PROC_REF(shuttle_pre_move)) LAZYADD(shuttles_registered, shuttle_datum) /datum/extension/event_registration/shuttle_stationary/proc/unregister_shuttles() @@ -55,8 +55,8 @@ /datum/extension/event_registration/shuttle_stationary/proc/shuttle_added(datum/shuttle/shuttle) if(given_area in shuttle.shuttle_area) - events_repository.register(/decl/observ/shuttle_moved, shuttle, src, .proc/shuttle_moved) - events_repository.register(/decl/observ/shuttle_pre_move, shuttle, src, .proc/shuttle_pre_move) + events_repository.register(/decl/observ/shuttle_moved, shuttle, src, PROC_REF(shuttle_moved)) + events_repository.register(/decl/observ/shuttle_pre_move, shuttle, src, PROC_REF(shuttle_pre_move)) LAZYADD(shuttles_registered, shuttle) /datum/extension/event_registration/shuttle_stationary/Destroy() diff --git a/code/datums/extensions/extensions.dm b/code/datums/extensions/extensions.dm index 84887ae548b..faad1fff468 100644 --- a/code/datums/extensions/extensions.dm +++ b/code/datums/extensions/extensions.dm @@ -73,7 +73,7 @@ return get_extension(source, base_type) /proc/get_extension(var/datum/source, var/base_type) - if(!source.extensions) + if(!istype(source) || !source.extensions || isnull(base_type)) return . = source.extensions[base_type] if(!.) diff --git a/code/datums/extensions/eye/_eye.dm b/code/datums/extensions/eye/_eye.dm index 59fc3d66404..1676604607b 100644 --- a/code/datums/extensions/eye/_eye.dm +++ b/code/datums/extensions/eye/_eye.dm @@ -21,7 +21,7 @@ /datum/extension/eye/proc/look(var/mob/new_looker, var/list/eye_args) if(new_looker.eyeobj || current_looker) return FALSE - + LAZYINSERT(eye_args, get_turf(new_looker), 1) // Make sure that a loc is provided to the eye. if(!extension_eye) @@ -43,29 +43,29 @@ unlook_action.Grant(current_looker) // Checks for removing the user from the eye outside of unlook actions. - events_repository.register(/decl/observ/moved, holder, src, /datum/extension/eye/proc/unlook) - events_repository.register(/decl/observ/moved, current_looker, src, /datum/extension/eye/proc/unlook) + events_repository.register(/decl/observ/moved, holder, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.register(/decl/observ/moved, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) - events_repository.register(/decl/observ/destroyed, current_looker, src, /datum/extension/eye/proc/unlook) - events_repository.register(/decl/observ/destroyed, extension_eye, src, /datum/extension/eye/proc/unlook) + events_repository.register(/decl/observ/destroyed, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.register(/decl/observ/destroyed, extension_eye, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) if(isliving(current_looker)) - events_repository.register(/decl/observ/stat_set, current_looker, src, /datum/extension/eye/proc/unlook) - events_repository.register(/decl/observ/logged_out, current_looker, src, /datum/extension/eye/proc/unlook) + events_repository.register(/decl/observ/stat_set, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.register(/decl/observ/logged_out, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) return TRUE /datum/extension/eye/proc/unlook() - events_repository.unregister(/decl/observ/moved, holder, src, /datum/extension/eye/proc/unlook) - events_repository.unregister(/decl/observ/moved, current_looker, src, /datum/extension/eye/proc/unlook) - - events_repository.unregister(/decl/observ/destroyed, current_looker, src, /datum/extension/eye/proc/unlook) - events_repository.unregister(/decl/observ/destroyed, extension_eye, src, /datum/extension/eye/proc/unlook) + events_repository.unregister(/decl/observ/moved, holder, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.unregister(/decl/observ/moved, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + + events_repository.unregister(/decl/observ/destroyed, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.unregister(/decl/observ/destroyed, extension_eye, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) if(isliving(current_looker)) - events_repository.unregister(/decl/observ/stat_set, current_looker, src, /datum/extension/eye/proc/unlook) - events_repository.unregister(/decl/observ/logged_out, current_looker, src, /datum/extension/eye/proc/unlook) + events_repository.unregister(/decl/observ/stat_set, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) + events_repository.unregister(/decl/observ/logged_out, current_looker, src, TYPE_PROC_REF(/datum/extension/eye, unlook)) QDEL_NULL(extension_eye) diff --git a/code/datums/extensions/holster/holster.dm b/code/datums/extensions/holster/holster.dm index 6cfcba37dab..1442577ec67 100644 --- a/code/datums/extensions/holster/holster.dm +++ b/code/datums/extensions/holster/holster.dm @@ -53,14 +53,14 @@ user.visible_message("\The [user] holsters \the [holstered].", "You holster \the [holstered].") atom_holder.SetName("occupied [initial(atom_holder.name)]") atom_holder.update_icon() - events_repository.register(/decl/observ/moved, holstered, src, .proc/check_holster) - events_repository.register(/decl/observ/destroyed, holstered, src, .proc/clear_holster) + events_repository.register(/decl/observ/moved, holstered, src, PROC_REF(check_holster)) + events_repository.register(/decl/observ/destroyed, holstered, src, PROC_REF(clear_holster)) return 1 return 0 /datum/extension/holster/proc/clear_holster() - events_repository.unregister(/decl/observ/moved, holstered, src, .proc/check_holster) - events_repository.unregister(/decl/observ/destroyed, holstered, src, .proc/clear_holster) + events_repository.unregister(/decl/observ/moved, holstered, src, PROC_REF(check_holster)) + events_repository.unregister(/decl/observ/destroyed, holstered, src, PROC_REF(clear_holster)) holstered = null atom_holder.SetName(initial(atom_holder.name)) diff --git a/code/datums/extensions/label.dm b/code/datums/extensions/label.dm index 752f3587cac..f197b0250fd 100644 --- a/code/datums/extensions/label.dm +++ b/code/datums/extensions/label.dm @@ -4,6 +4,8 @@ var/atom/atom_holder var/list/labels +SAVED_VAR(/datum/extension/labels, labels) + /datum/extension/labels/New() ..() atom_holder = holder diff --git a/code/datums/extensions/lockable.dm b/code/datums/extensions/lockable.dm index c929c96b60a..6cfb1a3a680 100644 --- a/code/datums/extensions/lockable.dm +++ b/code/datums/extensions/lockable.dm @@ -17,6 +17,17 @@ var/open = FALSE // Whether or not the lock panel is open. var/error // Any errors from user input. Temporary. +SAVED_VAR(/datum/extension/lockable, locked) +SAVED_VAR(/datum/extension/lockable, code) +SAVED_VAR(/datum/extension/lockable, l_code) +SAVED_VAR(/datum/extension/lockable, l_set) +SAVED_VAR(/datum/extension/lockable, l_setshort) +SAVED_VAR(/datum/extension/lockable, l_hacking) +SAVED_VAR(/datum/extension/lockable, emagged) +SAVED_VAR(/datum/extension/lockable, is_digital_lock) +SAVED_VAR(/datum/extension/lockable, open) +SAVED_VAR(/datum/extension/lockable, error) + /datum/extension/lockable/New(holder, var/is_digital = FALSE) ..(holder) is_digital_lock = is_digital @@ -125,7 +136,7 @@ if (prob(user.skill_fail_chance(SKILL_DEVICES, 40, SKILL_EXPERT))) l_setshort = FALSE user.show_message(SPAN_NOTICE("Internal memory reset. Please give it a few seconds to reinitialize."), 1) - addtimer(CALLBACK(src, /datum/extension/lockable/proc/reset_memory), 3 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/extension/lockable, reset_memory)), 3 SECONDS) return TRUE else user.show_message(SPAN_WARNING("Unable to reset internal memory."), 1) diff --git a/code/datums/extensions/multitool/items/clothing.dm b/code/datums/extensions/multitool/items/clothing.dm index c3c3ee6db28..b82e6825dd7 100644 --- a/code/datums/extensions/multitool/items/clothing.dm +++ b/code/datums/extensions/multitool/items/clothing.dm @@ -1,13 +1,18 @@ -/obj/item/clothing/under/Initialize() +/obj/item/clothing/Initialize() . = ..() - set_extension(src, /datum/extension/interactive/multitool/items/clothing) + if(ACCESSORY_SLOT_SENSORS in valid_accessory_slots) + set_extension(src, /datum/extension/interactive/multitool/items/clothing) /datum/extension/interactive/multitool/items/clothing/interact(var/obj/item/multitool/M, var/mob/user) if(extension_status(user) != STATUS_INTERACTIVE) return - var/obj/item/clothing/under/u = holder - if(u.has_sensor == SUIT_NO_SENSORS) - to_chat(user, SPAN_WARNING("\The [u] doesn't have suit sensors.")) + var/obj/item/clothing/uniform = holder + if(!istype(uniform)) + to_chat(user, SPAN_WARNING("\The [user] is not wearing an appropriate uniform.")) return - u.has_sensor = u.has_sensor == SUIT_LOCKED_SENSORS ? SUIT_HAS_SENSORS : SUIT_LOCKED_SENSORS - user.visible_message(SPAN_NOTICE("\The [user] [u.has_sensor == SUIT_LOCKED_SENSORS ? "" : "un"]locks \the [u]'s suit sensor controls."), range = 2) + var/obj/item/clothing/accessory/vitals_sensor/sensor = locate() in uniform.accessories + if(!sensor) + to_chat(user, SPAN_WARNING("\The [uniform] doesn't have a vitals sensors attached.")) + return + sensor.toggle_sensors_locked() + user.visible_message(SPAN_NOTICE("\The [user] [sensor.get_sensors_locked() ? "" : "un"]locks \the [user]'s suit sensor controls."), range = 2) diff --git a/code/datums/extensions/state_machine.dm b/code/datums/extensions/state_machine.dm index 914f633541e..32b8d6cd948 100644 --- a/code/datums/extensions/state_machine.dm +++ b/code/datums/extensions/state_machine.dm @@ -2,7 +2,7 @@ var/global/list/state_machines = list() /proc/get_state_machine(var/datum/holder, var/base_type) - if(istype(holder) && base_type) + if(istype(holder) && base_type && holder.has_state_machine) var/list/machines = global.state_machines["\ref[holder]"] return islist(machines) && machines[base_type] @@ -18,16 +18,18 @@ var/global/list/state_machines = list() fsm_type = base_type var/datum/state_machine/machine = new fsm_type(holder) machines[base_type] = machine + holder.has_state_machine = TRUE return machine /proc/remove_state_machine(var/datum/holder, var/base_type) - if(istype(holder) && base_type) + if(istype(holder) && base_type && holder.has_state_machine) var/holder_ref = "\ref[holder]" var/list/machines = global.state_machines[holder_ref] if(length(machines)) machines -= base_type if(!length(machines)) global.state_machines -= holder_ref + holder.has_state_machine = FALSE return TRUE return FALSE diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 5c7561285b1..37e7fb12bea 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -36,8 +36,8 @@ var/global/datum/getrev/revdata = new() to_chat(src, "Client Version: [byond_version]") if(revdata.revision) var/server_revision = revdata.revision - if(config.githuburl) - server_revision = "[server_revision]" + if(get_config_value(/decl/config/text/githuburl)) + server_revision = "[server_revision]" to_chat(src, "Server Revision: [server_revision] - [revdata.branch] - [revdata.date]") else to_chat(src, "Server Revision: Revision Unknown") diff --git a/code/datums/inventory_slots/_inventory_slot.dm b/code/datums/inventory_slots/_inventory_slot.dm index e6c7b968d96..5f16030d362 100644 --- a/code/datums/inventory_slots/_inventory_slot.dm +++ b/code/datums/inventory_slots/_inventory_slot.dm @@ -18,11 +18,13 @@ var/skip_on_strip_display = FALSE var/requires_slot_flags var/requires_organ_tag - var/quick_equip_priority = 0 // Higher priority means it will be checked first. + var/quick_equip_priority = 0 // Higher priority means it will be checked first. If null, will not be considered for quick equip. var/mob_overlay_layer var/alt_mob_overlay_layer + var/use_overlay_fallback_slot = TRUE + /datum/inventory_slot/Destroy(force) _holding = null return ..() @@ -72,13 +74,13 @@ return if(alt_mob_overlay_layer) if(_holding) - user.set_current_mob_overlay((_holding.use_alt_layer ? alt_mob_overlay_layer : mob_overlay_layer), _holding.get_mob_overlay(user, slot_id), FALSE) + user.set_current_mob_overlay((_holding.use_alt_layer ? alt_mob_overlay_layer : mob_overlay_layer), _holding.get_mob_overlay(user, slot_id, use_fallback_if_icon_missing = use_overlay_fallback_slot), FALSE) user.set_current_mob_overlay((_holding.use_alt_layer ? mob_overlay_layer : alt_mob_overlay_layer), null, redraw_mob) else user.set_current_mob_overlay(mob_overlay_layer, null, FALSE) user.set_current_mob_overlay(alt_mob_overlay_layer, null, redraw_mob) else - user.set_current_mob_overlay(mob_overlay_layer, _holding?.get_mob_overlay(user, slot_id), redraw_mob) + user.set_current_mob_overlay(mob_overlay_layer, _holding?.get_mob_overlay(user, slot_id, use_fallback_if_icon_missing = use_overlay_fallback_slot), redraw_mob) /datum/inventory_slot/proc/set_slot(var/obj/item/prop) _holding = prop diff --git a/code/datums/inventory_slots/inventory_gripper.dm b/code/datums/inventory_slots/inventory_gripper.dm index 27a94728c48..f6ef59f0acc 100644 --- a/code/datums/inventory_slots/inventory_gripper.dm +++ b/code/datums/inventory_slots/inventory_gripper.dm @@ -3,10 +3,13 @@ var/can_use_held_item = TRUE var/dexterity = DEXTERITY_FULL var/covering_slot_flags + /// If set, use this icon_state for the hand slot overlay; otherwise, use slot_id. + var/hand_overlay + quick_equip_priority = null // you quick-equip stuff by holding it in a gripper, so this ought to be skipped // For reference, grippers do not use ui_loc, they have it set dynamically during /datum/hud/proc/rebuild_hands() -/datum/inventory_slot/gripper/proc/get_dexterity() +/datum/inventory_slot/gripper/proc/get_dexterity(var/silent) return dexterity /datum/inventory_slot/gripper/GetCloneArgs() @@ -28,56 +31,4 @@ return "[pronouns.He] [pronouns.is] holding [_holding.get_examine_line()] in [pronouns.his] [E?.name || lowertext(slot_name)]." /datum/inventory_slot/gripper/can_equip_to_slot(var/mob/user, var/obj/item/prop, var/disable_warning) - return ..() && user.check_dexterity(DEXTERITY_EQUIP_ITEM) - -// Hand subtypes below -/datum/inventory_slot/gripper/mouth - slot_name = "Mouth" - slot_id = BP_MOUTH - requires_organ_tag = BP_HEAD - can_use_held_item = FALSE - overlay_slot = BP_MOUTH - ui_label = "M" - hand_sort_priority = 3 - -/datum/inventory_slot/gripper/mouth/can_equip_to_slot(mob/user, obj/item/prop, disable_warning, ignore_equipped) - . = ..() && prop.w_class <= user.can_pull_size - -// Mouths are used by diona nymphs and Ascent babies to eat stuff, not just hold stuff in the mouth. -/datum/inventory_slot/gripper/mouth/nymph - requires_organ_tag = null - -/datum/inventory_slot/gripper/mouth/nymph/equipped(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE, var/delete_old_item = TRUE) - . = ..() - if(.) - - // This means critters can hoover up beakers as a kind of impromptu chem disposal - // technique, so long as they're okay with the reagents reacting inside them. - if(prop.reagents?.total_volume) - prop.reagents.trans_to_mob(src, prop.reagents.total_volume, CHEM_INGEST) - - // It also means they can do the old school cartoon schtick of eating - // an entire sandwich and spitting up an empty plate. Ptooie. - if(istype(prop, /obj/item/chems/food)) - var/obj/item/chems/food/food = prop - var/trash = food.trash - _holding = null - qdel(prop) - if(trash) - equipped(user, new trash(user)) - -/datum/inventory_slot/gripper/left_hand - slot_name = "Left Hand" - slot_id = BP_L_HAND - requires_organ_tag = BP_L_HAND - overlay_slot = BP_L_HAND - ui_label = "L" - covering_slot_flags = SLOT_HAND_LEFT - -/datum/inventory_slot/gripper/right_hand - slot_name = "Right Hand" - slot_id = BP_R_HAND - requires_organ_tag = BP_R_HAND - overlay_slot = BP_R_HAND - ui_label = "R" - covering_slot_flags = SLOT_HAND_RIGHT + return ..() && user.check_dexterity(DEXTERITY_EQUIP_ITEM, silent = disable_warning) diff --git a/code/datums/inventory_slots/inventory_gripper_subtypes.dm b/code/datums/inventory_slots/inventory_gripper_subtypes.dm new file mode 100644 index 00000000000..d1f292fedfe --- /dev/null +++ b/code/datums/inventory_slots/inventory_gripper_subtypes.dm @@ -0,0 +1,77 @@ +/datum/inventory_slot/gripper/mouth + slot_name = "Mouth" + slot_id = BP_MOUTH + requires_organ_tag = BP_HEAD + can_use_held_item = FALSE + overlay_slot = BP_MOUTH + ui_label = "M" + hand_sort_priority = 3 + +/datum/inventory_slot/gripper/mouth/simple + requires_organ_tag = null + +/datum/inventory_slot/gripper/mouth/can_equip_to_slot(mob/user, obj/item/prop, disable_warning, ignore_equipped) + . = ..() && prop.w_class <= user.can_pull_size + +// Mouths are used by diona nymphs and Ascent babies to eat stuff, not just hold stuff in the mouth. +/datum/inventory_slot/gripper/mouth/nymph + requires_organ_tag = null + +/datum/inventory_slot/gripper/mouth/nymph/equipped(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE, var/delete_old_item = TRUE) + . = ..() + if(.) + + // This means critters can hoover up beakers as a kind of impromptu chem disposal + // technique, so long as they're okay with the reagents reacting inside them. + if(prop.reagents?.total_volume) + prop.reagents.trans_to_mob(src, prop.reagents.total_volume, CHEM_INGEST) + + // It also means they can do the old school cartoon schtick of eating + // an entire sandwich and spitting up an empty plate. Ptooie. + if(istype(prop, /obj/item/chems/food)) + var/obj/item/chems/food/food = prop + var/trash = food.trash + _holding = null + qdel(prop) + if(trash) + equipped(user, new trash(user)) + +/datum/inventory_slot/gripper/left_hand + slot_name = "Left Hand" + slot_id = BP_L_HAND + requires_organ_tag = BP_L_HAND + overlay_slot = BP_L_HAND + ui_label = "L" + covering_slot_flags = SLOT_HAND_LEFT + +/datum/inventory_slot/gripper/right_hand + slot_name = "Right Hand" + slot_id = BP_R_HAND + requires_organ_tag = BP_R_HAND + overlay_slot = BP_R_HAND + ui_label = "R" + covering_slot_flags = SLOT_HAND_RIGHT + +/datum/inventory_slot/gripper/midlimb + slot_name = "Midlimb" + slot_id = BP_M_HAND + requires_organ_tag = BP_M_HAND + ui_label = "M" + ui_loc = "CENTER,BOTTOM+1:14" + covering_slot_flags = SLOT_HAND_LEFT|SLOT_HAND_RIGHT // todo: generalize? + +/datum/inventory_slot/gripper/upper_left_hand + slot_name = "Left Upper Hand" + slot_id = BP_L_HAND_UPPER + requires_organ_tag = BP_L_HAND_UPPER + ui_label = "UL" + hand_sort_priority = 2 + covering_slot_flags = SLOT_HAND_LEFT + +/datum/inventory_slot/gripper/upper_right_hand + slot_name = "Right Upper Hand" + slot_id = BP_R_HAND_UPPER + requires_organ_tag = BP_R_HAND_UPPER + ui_label = "UR" + hand_sort_priority = 2 + covering_slot_flags = SLOT_HAND_RIGHT diff --git a/code/datums/inventory_slots/slots/slot_back.dm b/code/datums/inventory_slots/slots/slot_back.dm index 0fa0cbed807..cc65742561b 100644 --- a/code/datums/inventory_slots/slots/slot_back.dm +++ b/code/datums/inventory_slots/slots/slot_back.dm @@ -6,7 +6,11 @@ requires_organ_tag = BP_CHEST requires_slot_flags = SLOT_BACK mob_overlay_layer = HO_BACK_LAYER - quick_equip_priority = 13 + quick_equip_priority = 14 + +/datum/inventory_slot/back/simple + requires_organ_tag = null + use_overlay_fallback_slot = FALSE /datum/inventory_slot/back/get_examined_string(mob/owner, mob/user, distance, hideflags, decl/pronouns/pronouns) if(_holding) diff --git a/code/datums/inventory_slots/slots/slot_cuffs.dm b/code/datums/inventory_slots/slots/slot_cuffs.dm index f49212d1e1e..9ff985ec94b 100644 --- a/code/datums/inventory_slots/slots/slot_cuffs.dm +++ b/code/datums/inventory_slots/slots/slot_cuffs.dm @@ -1,5 +1,5 @@ /datum/inventory_slot/handcuffs - slot_id = "Handcuffs" + slot_name = "Handcuffs" slot_id = slot_handcuffed_str skip_on_inventory_display = TRUE // Handcuffs have their own logic on examine. skip_on_strip_display = TRUE // Handcuffs are removed with their own button in the strip menu. diff --git a/code/datums/inventory_slots/slots/slot_gloves.dm b/code/datums/inventory_slots/slots/slot_gloves.dm index df07773f651..3877aaf32cf 100644 --- a/code/datums/inventory_slots/slots/slot_gloves.dm +++ b/code/datums/inventory_slots/slots/slot_gloves.dm @@ -16,7 +16,7 @@ /datum/inventory_slot/gloves/update_mob_equipment_overlay(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE) var/obj/item/suit = user.get_equipped_item(slot_wear_suit_str) if(_holding && !(suit && suit.flags_inv & HIDEGLOVES)) - user.set_current_mob_overlay(HO_GLOVES_LAYER, _holding.get_mob_overlay(user, slot_gloves_str), redraw_mob) + user.set_current_mob_overlay(HO_GLOVES_LAYER, _holding.get_mob_overlay(user, slot_gloves_str, use_fallback_if_icon_missing = use_overlay_fallback_slot), redraw_mob) return var/mob_blood_overlay = user.get_bodytype()?.get_blood_overlays(src) if(mob_blood_overlay) diff --git a/code/datums/inventory_slots/slots/slot_id.dm b/code/datums/inventory_slots/slots/slot_id.dm index 2c015a2a9cf..c660fa56413 100644 --- a/code/datums/inventory_slots/slots/slot_id.dm +++ b/code/datums/inventory_slots/slots/slot_id.dm @@ -5,7 +5,7 @@ slot_id = slot_wear_id_str requires_slot_flags = SLOT_ID mob_overlay_layer = HO_ID_LAYER - quick_equip_priority = 12 + quick_equip_priority = 13 /datum/inventory_slot/id/update_mob_equipment_overlay(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE) var/obj/item/clothing/under/under = user.get_equipped_item(slot_w_uniform_str) diff --git a/code/datums/inventory_slots/slots/slot_shoes.dm b/code/datums/inventory_slots/slots/slot_shoes.dm index a3a6f054380..9ba3252eb8e 100644 --- a/code/datums/inventory_slots/slots/slot_shoes.dm +++ b/code/datums/inventory_slots/slots/slot_shoes.dm @@ -15,7 +15,7 @@ var/obj/item/suit = user.get_equipped_item(slot_wear_suit_str) var/obj/item/uniform = user.get_equipped_item(slot_w_uniform_str) if(_holding && !((suit && suit.flags_inv & HIDESHOES) || (uniform && uniform.flags_inv & HIDESHOES))) - user.set_current_mob_overlay(HO_SHOES_LAYER, _holding.get_mob_overlay(user, slot_shoes_str), redraw_mob) + user.set_current_mob_overlay(HO_SHOES_LAYER, _holding.get_mob_overlay(user, slot_shoes_str, use_fallback_if_icon_missing = use_overlay_fallback_slot), redraw_mob) return var/mob_blood_overlay = user.get_bodytype()?.get_blood_overlays(src) if(mob_blood_overlay) diff --git a/code/datums/inventory_slots/slots/slot_suit.dm b/code/datums/inventory_slots/slots/slot_suit.dm index 5319ac7ec70..f7b1342c4b3 100644 --- a/code/datums/inventory_slots/slots/slot_suit.dm +++ b/code/datums/inventory_slots/slots/slot_suit.dm @@ -8,6 +8,7 @@ requires_organ_tag = BP_CHEST requires_slot_flags = SLOT_OVER_BODY mob_overlay_layer = HO_SUIT_LAYER + quick_equip_priority = 11 /datum/inventory_slot/suit/update_mob_equipment_overlay(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE) if(prop) diff --git a/code/datums/inventory_slots/slots/slot_uniform.dm b/code/datums/inventory_slots/slots/slot_uniform.dm index ee61ee18748..b254028a7c4 100644 --- a/code/datums/inventory_slots/slots/slot_uniform.dm +++ b/code/datums/inventory_slots/slots/slot_uniform.dm @@ -13,14 +13,14 @@ ) requires_organ_tag = BP_CHEST requires_slot_flags = SLOT_UPPER_BODY - quick_equip_priority = 11 + quick_equip_priority = 12 /datum/inventory_slot/uniform/update_mob_equipment_overlay(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE) if(prop?.flags_inv & HIDESHOES) user.update_equipment_overlay(slot_shoes_str, FALSE) var/obj/item/suit = user.get_equipped_item(slot_wear_suit_str) if(_holding && (!suit || !(suit.flags_inv & HIDEJUMPSUIT))) - user.set_current_mob_overlay(HO_UNIFORM_LAYER, _holding.get_mob_overlay(user, slot_w_uniform_str), redraw_mob) + user.set_current_mob_overlay(HO_UNIFORM_LAYER, _holding.get_mob_overlay(user, slot_w_uniform_str, use_fallback_if_icon_missing = use_overlay_fallback_slot), redraw_mob) else user.set_current_mob_overlay(HO_UNIFORM_LAYER, null, redraw_mob) diff --git a/code/datums/mind/memory.dm b/code/datums/mind/memory.dm index 182a3772055..7d9d583531c 100644 --- a/code/datums/mind/memory.dm +++ b/code/datums/mind/memory.dm @@ -1,6 +1,8 @@ /datum/mind var/list/memories +SAVED_VAR(/datum/mind, memories) + /mob/proc/StoreMemory(var/memory, var/options) if(!mind) return "There is no mind to store a memory in." @@ -85,6 +87,13 @@ var/_owner_name var/_owner_ckey // The ckey of the original creator. Shouldn't be overriden once set +SAVED_VAR(/datum/memory, creation_source) +SAVED_VAR(/datum/memory, memory) +SAVED_VAR(/datum/memory, tags) +SAVED_VAR(/datum/memory, owner) +SAVED_VAR(/datum/memory, _owner_name) +SAVED_VAR(/datum/memory, _owner_ckey) + /datum/memory/New(var/decl/memory_options/creation_source, var/weakref/owner, var/memory, var/tags) ..() src.creation_source = creation_source diff --git a/code/datums/mind/mind.dm b/code/datums/mind/mind.dm index 94c7bba26be..d8c18c2f422 100644 --- a/code/datums/mind/mind.dm +++ b/code/datums/mind/mind.dm @@ -29,6 +29,9 @@ */ +//Persistence +var/global/list/player_minds = list() + /datum/mind var/key var/name //replaces mob/var/original_name @@ -60,11 +63,42 @@ var/list/initial_account_login = list("login" = "", "password" = "") var/account_network // Network id of the network the account was created on. + //Persistence Stuff + // This is a unique UID that will forever identify this mind. + // No two minds are ever the same, and this ID will always identify 'this character'. + var/unique_id + var/age = 0 // How old the mob's mind is in years. + var/philotic_damage = 0 + +SAVED_VAR(/datum/mind, key) +SAVED_VAR(/datum/mind, name) +SAVED_VAR(/datum/mind, current) +SAVED_VAR(/datum/mind, active) +SAVED_VAR(/datum/mind, gen_relations_info) +SAVED_VAR(/datum/mind, assigned_role) +SAVED_VAR(/datum/mind, assigned_special_role) +SAVED_VAR(/datum/mind, role_alt_title) +SAVED_VAR(/datum/mind, assigned_job) +SAVED_VAR(/datum/mind, objectives) +SAVED_VAR(/datum/mind, has_been_rev) +SAVED_VAR(/datum/mind, brigged_since) +SAVED_VAR(/datum/mind, initial_account) +SAVED_VAR(/datum/mind, initial_account_login) +SAVED_VAR(/datum/mind, account_network) + +SAVED_VAR(/datum/mind, unique_id) +SAVED_VAR(/datum/mind, age) +SAVED_VAR(/datum/mind, philotic_damage) + /datum/mind/New(var/key) src.key = key ..() + //persistence + unique_id = "[make_sequential_guid(/datum/mind)]" + global.player_minds += src /datum/mind/Destroy() + global.player_minds -= src QDEL_NULL_LIST(memories) QDEL_NULL_LIST(objectives) SSticker.minds -= src @@ -152,8 +186,8 @@ if(href_list["add_goal"]) - var/mob/caller = locate(href_list["add_goal_caller"]) - if(caller && caller == current) can_modify = TRUE + var/mob/calling_mob = locate(href_list["add_goal_caller"]) + if(calling_mob && calling_mob == current) can_modify = TRUE if(can_modify) if(is_admin) @@ -171,8 +205,8 @@ if(href_list["abandon_goal"]) var/datum/goal/goal = get_goal_from_href(href_list["abandon_goal"]) - var/mob/caller = locate(href_list["abandon_goal_caller"]) - if(caller && caller == current) can_modify = TRUE + var/mob/calling_mob = locate(href_list["abandon_goal_caller"]) + if(calling_mob && calling_mob == current) can_modify = TRUE if(goal && can_modify) if(usr == current) @@ -186,8 +220,8 @@ if(href_list["reroll_goal"]) var/datum/goal/goal = get_goal_from_href(href_list["reroll_goal"]) - var/mob/caller = locate(href_list["reroll_goal_caller"]) - if(caller && caller == current) can_modify = TRUE + var/mob/calling_mob = locate(href_list["reroll_goal_caller"]) + if(calling_mob && calling_mob == current) can_modify = TRUE if(goal && (goal in goals) && can_modify) qdel(goal) diff --git a/code/datums/move_intent/move_intent.dm b/code/datums/move_intent/move_intent.dm index c9641068e71..87e521f5e33 100644 --- a/code/datums/move_intent/move_intent.dm +++ b/code/datums/move_intent/move_intent.dm @@ -21,7 +21,7 @@ /decl/move_intent/creep/Initialize() . = ..() - move_delay = config.creep_delay + move_delay = get_config_value(/decl/config/num/movement_creep) /decl/move_intent/walk name = "Walk" @@ -29,7 +29,7 @@ /decl/move_intent/walk/Initialize() . = ..() - move_delay = config.walk_delay + move_delay = get_config_value(/decl/config/num/movement_walk) /decl/move_intent/run name = "Run" @@ -38,4 +38,4 @@ /decl/move_intent/run/Initialize() . = ..() - move_delay = config.run_delay + move_delay = get_config_value(/decl/config/num/movement_run) diff --git a/code/datums/movement/atom_movable.dm b/code/datums/movement/atom_movable.dm index d9376edae72..de5e46e87b8 100644 --- a/code/datums/movement/atom_movable.dm +++ b/code/datums/movement/atom_movable.dm @@ -1,13 +1,13 @@ // Static movement denial -/datum/movement_handler/no_move/MayMove() +/datum/movement_handler/no_move/MayMove(mob/mover, is_external) return MOVEMENT_STOP // Anchor check -/datum/movement_handler/anchored/MayMove() +/datum/movement_handler/anchored/MayMove(mob/mover, is_external) return host.anchored ? MOVEMENT_STOP : MOVEMENT_PROCEED // Movement relay -/datum/movement_handler/move_relay/DoMove(var/direction, var/mover) +/datum/movement_handler/move_relay/DoMove(direction, mob/mover, is_external) var/atom/movable/AM = host.loc if(!istype(AM)) return @@ -25,13 +25,13 @@ ..() src.delay = max(1, delay) -/datum/movement_handler/delay/DoMove() +/datum/movement_handler/delay/DoMove(direction, mob/mover, is_external) next_move = world.time + delay -/datum/movement_handler/delay/MayMove() +/datum/movement_handler/delay/MayMove(mob/mover, is_external) return world.time >= next_move ? MOVEMENT_PROCEED : MOVEMENT_STOP // Relay self -/datum/movement_handler/move_relay_self/DoMove(var/direction, var/mover) +/datum/movement_handler/move_relay_self/DoMove(direction, mob/mover, is_external) host.relaymove(mover, direction) return MOVEMENT_HANDLED diff --git a/code/datums/movement/mob.dm b/code/datums/movement/mob.dm index b66388cab6a..5cdb1086378 100644 --- a/code/datums/movement/mob.dm +++ b/code/datums/movement/mob.dm @@ -1,5 +1,5 @@ // Admin object possession -/datum/movement_handler/mob/admin_possess/DoMove(var/direction) +/datum/movement_handler/mob/admin_possess/DoMove(direction, mob/mover, is_external) if(QDELETED(mob.control_object)) return MOVEMENT_REMOVE @@ -13,7 +13,7 @@ control_object.set_dir(direction) // Death handling -/datum/movement_handler/mob/death/DoMove(var/direction, var/mob/mover) +/datum/movement_handler/mob/death/DoMove(direction, mob/mover, is_external) if(mob != mover || mob.stat != DEAD) return @@ -25,7 +25,7 @@ mob.ghostize() // Incorporeal/Ghost movement -/datum/movement_handler/mob/incorporeal/DoMove(var/direction, var/mob/mover) +/datum/movement_handler/mob/incorporeal/DoMove(direction, mob/mover, is_external) . = MOVEMENT_HANDLED direction = mob.AdjustMovementDirection(direction, mover) mob.set_glide_size(0) @@ -44,7 +44,7 @@ return // Eye movement -/datum/movement_handler/mob/eye/DoMove(var/direction, var/mob/mover) +/datum/movement_handler/mob/eye/DoMove(direction, mob/mover, is_external) if(IS_NOT_SELF(mover)) // We only care about direct movement return if(!mob.eyeobj) @@ -52,7 +52,7 @@ mob.eyeobj.EyeMove(direction) return MOVEMENT_HANDLED -/datum/movement_handler/mob/eye/MayMove(var/mob/mover, var/is_external) +/datum/movement_handler/mob/eye/MayMove(mob/mover, is_external) if(IS_NOT_SELF(mover)) return MOVEMENT_PROCEED if(is_external) @@ -65,29 +65,26 @@ var/allow_move // Space movement -/datum/movement_handler/mob/space/DoMove(var/direction, var/mob/mover) - if(!mob.has_gravity()) - if(!allow_move) - return MOVEMENT_HANDLED - if(!mob.space_do_move(allow_move, direction)) - return MOVEMENT_HANDLED +/datum/movement_handler/mob/space/DoMove(direction, mob/mover, is_external) + if(mob.has_gravity() || (IS_NOT_SELF(mover) && is_external)) + return + if(!allow_move || !mob.space_do_move(allow_move, direction)) + return MOVEMENT_HANDLED -/datum/movement_handler/mob/space/MayMove(var/mob/mover, var/is_external) +/datum/movement_handler/mob/space/MayMove(mob/mover, is_external) if(IS_NOT_SELF(mover) && is_external) return MOVEMENT_PROCEED - if(!mob.has_gravity()) allow_move = mob.Process_Spacemove(1) if(!allow_move) return MOVEMENT_STOP - return MOVEMENT_PROCEED // Buckle movement -/datum/movement_handler/mob/buckle_relay/DoMove(var/direction, var/mover) +/datum/movement_handler/mob/buckle_relay/DoMove(direction, mob/mover, is_external) return mob?.buckled?.handle_buckled_relaymove(src, mob, direction, mover) -/datum/movement_handler/mob/buckle_relay/MayMove(var/mover) +/datum/movement_handler/mob/buckle_relay/MayMove(mob/mover, is_external) if(mob.buckled) return mob.buckled.MayMove(mover, FALSE) ? (MOVEMENT_PROCEED|MOVEMENT_HANDLED) : MOVEMENT_STOP return MOVEMENT_PROCEED @@ -104,7 +101,7 @@ next_move = world.time + delay mob.set_glide_size(delay) -/datum/movement_handler/mob/delay/MayMove(var/mover, var/is_external) +/datum/movement_handler/mob/delay/MayMove(mob/mover, is_external) if(IS_NOT_SELF(mover) && is_external) return MOVEMENT_PROCEED return ((mover && mover != mob) || world.time >= next_move) ? MOVEMENT_PROCEED : MOVEMENT_STOP @@ -116,31 +113,35 @@ next_move += max(0, delay) // Stop effect -/datum/movement_handler/mob/stop_effect/DoMove() - if(MayMove() == MOVEMENT_STOP) +/datum/movement_handler/mob/DoMove(direction, mob/mover, is_external) + if(MayMove(mover, is_external) == MOVEMENT_STOP) return MOVEMENT_HANDLED -/datum/movement_handler/mob/stop_effect/MayMove() +/datum/movement_handler/mob/stop_effect/MayMove(mob/mover, is_external) for(var/obj/effect/stop/S in mob.loc) if(S.victim == mob) return MOVEMENT_STOP return MOVEMENT_PROCEED // Transformation -/datum/movement_handler/mob/transformation/MayMove() +/datum/movement_handler/mob/transformation/MayMove(mob/mover, is_external) return MOVEMENT_STOP // Consciousness - Is the entity trying to conduct the move conscious? -/datum/movement_handler/mob/conscious/MayMove(var/mob/mover) +/datum/movement_handler/mob/conscious/MayMove(mob/mover, is_external) return (mover ? mover.stat == CONSCIOUS : mob.stat == CONSCIOUS) ? MOVEMENT_PROCEED : MOVEMENT_STOP // Along with more physical checks -/datum/movement_handler/mob/physically_capable/MayMove(var/mob/mover) +/datum/movement_handler/mob/physically_capable/MayMove(mob/mover, is_external) // We only check physical capability if the host mob tried to do the moving - return ((mover && mover != mob) || !mob.incapacitated(INCAPACITATION_DISABLED & ~INCAPACITATION_FORCELYING)) ? MOVEMENT_PROCEED : MOVEMENT_STOP + if(mover && mover != mob) + return MOVEMENT_PROCEED + if(mob.incapacitated(INCAPACITATION_DISABLED & ~INCAPACITATION_FORCELYING)) + return MOVEMENT_STOP + return MOVEMENT_PROCEED // Is anything physically preventing movement? -/datum/movement_handler/mob/physically_restrained/MayMove(var/mob/mover) +/datum/movement_handler/mob/physically_restrained/MayMove(mob/mover, is_external) if(istype(mob.buckled) && !mob.buckled.buckle_movable) if(mover == mob) to_chat(mob, SPAN_WARNING("You're buckled to \the [mob.buckled]!")) @@ -165,8 +166,8 @@ return MOVEMENT_PROCEED -// Finally.. the last of the mob movement junk -/datum/movement_handler/mob/movement/DoMove(var/direction, var/mob/mover) +// Finally... the last of the mob movement junk +/datum/movement_handler/mob/movement/DoMove(direction, mob/mover, is_external) . = MOVEMENT_HANDLED if(!mob || mob.moving) @@ -203,8 +204,8 @@ mob.handle_embedded_and_stomach_objects() mob.moving = FALSE -/datum/movement_handler/mob/movement/MayMove(var/mob/mover) - return IS_SELF(mover) && mob.moving ? MOVEMENT_STOP : MOVEMENT_PROCEED +/datum/movement_handler/mob/movement/MayMove(mob/mover, is_external) + return IS_SELF(mover) && mob.moving ? MOVEMENT_STOP : MOVEMENT_PROCEED /mob/proc/get_stamina_used_per_step() return 1 @@ -217,7 +218,7 @@ else mod *= 0.8 - return config.minimum_sprint_cost + (config.skill_sprint_cost_range * mod) + return get_config_value(/decl/config/num/movement_min_sprint_cost) + get_config_value(/decl/config/num/movement_skill_sprint_cost_range) * mod // Misc. helpers /mob/proc/MayEnterTurf(var/turf/T) diff --git a/code/datums/movement/movement.dm b/code/datums/movement/movement.dm index c4982d4b6f5..ffe142f7231 100644 --- a/code/datums/movement/movement.dm +++ b/code/datums/movement/movement.dm @@ -26,9 +26,8 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ if(ispath(movement_handlers[1])) return (handler_path in movement_handlers) else - for(var/mh in movement_handlers) - var/datum/MH = mh - if(MH.type == handler_path) + for(var/datum/movement_handler/movement_handler as anything in movement_handlers) + if(movement_handler.type == handler_path) return TRUE return FALSE @@ -78,7 +77,7 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ #define SET_MOVER(X) X = X || src #define SET_IS_EXTERNAL(X) is_external = isnull(is_external) ? (mover != src) : is_external -/atom/movable/proc/DoMove(var/direction, var/mob/mover, var/is_external) +/atom/movable/proc/DoMove(direction, mob/mover, is_external) if(!direction || !isnum(direction)) return MOVEMENT_STOP @@ -97,8 +96,7 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ step(src, direction) return loc != oldloc - for(var/mh in movement_handlers) - var/datum/movement_handler/movement_handler = mh + for(var/datum/movement_handler/movement_handler as anything in movement_handlers) if(movement_handler.MayMove(mover, is_external) & MOVEMENT_STOP) return MOVEMENT_STOP @@ -110,13 +108,12 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ // is_external means that something else (not inside us) is asking if we may move // This for example includes mobs bumping into each other -/atom/movable/proc/MayMove(var/mob/mover, var/is_external) +/atom/movable/proc/MayMove(mob/mover, is_external) INIT_MOVEMENT_HANDLERS SET_MOVER(mover) SET_IS_EXTERNAL(mover) - for(var/mh in movement_handlers) - var/datum/movement_handler/movement_handler = mh + for(var/datum/movement_handler/movement_handler as anything in movement_handlers) var/may_move = movement_handler.MayMove(mover, is_external) if(may_move & MOVEMENT_STOP) return FALSE @@ -142,11 +139,11 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ host = null . = ..() -/datum/movement_handler/proc/DoMove(var/direction, var/mob/mover, var/is_external) +/datum/movement_handler/proc/DoMove(direction, mob/mover, is_external) return // Asks the handlers if the mob may move, ignoring destination, if attempting a DoMove() -/datum/movement_handler/proc/MayMove(var/mob/mover, var/is_external) +/datum/movement_handler/proc/MayMove(mob/mover, is_external) return MOVEMENT_PROCEED /******* diff --git a/code/datums/movement/multiz.dm b/code/datums/movement/multiz.dm index 15b041c5a65..77b6315c22c 100644 --- a/code/datums/movement/multiz.dm +++ b/code/datums/movement/multiz.dm @@ -1,4 +1,4 @@ -/datum/movement_handler/mob/multiz/DoMove(var/direction, var/mob/mover, var/is_external) +/datum/movement_handler/mob/multiz/DoMove(direction, mob/mover, is_external) if(!(direction & (UP|DOWN))) return MOVEMENT_PROCEED @@ -29,7 +29,7 @@ return MOVEMENT_PROCEED //For ghosts and such -/datum/movement_handler/mob/multiz_connected/DoMove(var/direction, var/mob/mover, var/is_external) +/datum/movement_handler/mob/multiz_connected/DoMove(direction, mob/mover, is_external) if(!(direction & (UP|DOWN))) return MOVEMENT_PROCEED @@ -40,7 +40,7 @@ return MOVEMENT_PROCEED -/datum/movement_handler/deny_multiz/DoMove(var/direction, var/mob/mover, var/is_external) +/datum/movement_handler/deny_multiz/DoMove(direction, mob/mover, is_external) if(direction & (UP|DOWN)) return MOVEMENT_HANDLED return MOVEMENT_PROCEED diff --git a/code/datums/movement/robot.dm b/code/datums/movement/robot.dm index 29e54c1eaf6..258c5e840b4 100644 --- a/code/datums/movement/robot.dm +++ b/code/datums/movement/robot.dm @@ -14,10 +14,10 @@ . = ..() // Use power while moving. -/datum/movement_handler/robot/use_power/DoMove() +/datum/movement_handler/robot/use_power/DoMove(direction, mob/mover, is_external) var/datum/robot_component/actuator/A = robot.get_component("actuator") if(!robot.cell_use_power(A.active_usage * robot.power_efficiency)) return MOVEMENT_HANDLED -/datum/movement_handler/robot/use_power/MayMove() +/datum/movement_handler/robot/use_power/MayMove(mob/mover, is_external) return (!robot.lockcharge && robot.is_component_functioning("actuator")) ? MOVEMENT_PROCEED : MOVEMENT_STOP diff --git a/code/datums/music_tracks/elibao.dm b/code/datums/music_tracks/elibao.dm index 821e23c85fd..72be0da4562 100644 --- a/code/datums/music_tracks/elibao.dm +++ b/code/datums/music_tracks/elibao.dm @@ -1,16 +1,16 @@ /decl/music_track/elibao - artist = "Earthcrusher" + artist = "Sunbeamstress" title = "every light is blinking at once" song = 'sound/music/elibao.ogg' license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once" + url = "https://soundcloud.com/sunbeamstress/every-light-is-blinking-at-once" /* 'every light is blinking at once' -An original jam, (c)2018 Earthcrusher, aka Alexander Divine. +An original jam, (c)2018 Sunbeamstress, aka Lauren Loveless. Licensed for use under Creative Commons License: CC BY-SA 3.0 Use it however you like. Stay beautiful. -Link to online version at: https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once +Link to online version at: https://soundcloud.com/sunbeamstress/every-light-is-blinking-at-once */ diff --git a/code/datums/music_tracks/lasers.dm b/code/datums/music_tracks/lasers.dm index 2811a92e344..940196b9695 100644 --- a/code/datums/music_tracks/lasers.dm +++ b/code/datums/music_tracks/lasers.dm @@ -1,16 +1,16 @@ /decl/music_track/lasers - artist = "Earthcrusher" + artist = "Sunbeamstress" title = "lasers rip apart the bulkhead" song = 'sound/music/lasers_rip_apart_the_bulkhead.ogg' license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead" + url = "https://soundcloud.com/sunbeamstress/lasers-rip-apart-the-bulkhead" /* 'lasers rip apart the bulkhead' -An original jam, (c)2018 Earthcrusher, aka Alexander Divine. +An original jam, (c)2018 Sunbeamstress, aka Lauren Loveless. Licensed for use under Creative Commons License: CC BY-SA 3.0 Use it however you like. Stay beautiful. -Link to online version at: https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead +Link to online version at: https://soundcloud.com/sunbeamstress/lasers-rip-apart-the-bulkhead */ diff --git a/code/datums/music_tracks/pwmur.dm b/code/datums/music_tracks/pwmur.dm index d3e1a66df06..bf917c86455 100644 --- a/code/datums/music_tracks/pwmur.dm +++ b/code/datums/music_tracks/pwmur.dm @@ -1,16 +1,16 @@ /decl/music_track/pwmur - artist = "Earthcrusher" + artist = "Sunbeamstress" title = "phoron will make us rich" song = 'sound/music/pwmur.ogg' license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich" + url = "https://soundcloud.com/sunbeamstress/phoron-will-make-us-rich" /* 'phoron will make us rich' -An original jam, (c)2018 Earthcrusher, aka Alexander Divine. +An original jam, (c)2018 Sunbeamstress, aka Lauren Loveless. Licensed for use under Creative Commons License: CC BY-SA 3.0 Use it however you like. Stay beautiful. -Link to online version at: https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich +Link to online version at: https://soundcloud.com/sunbeamstress/phoron-will-make-us-rich */ diff --git a/code/datums/observation/dir_set.dm b/code/datums/observation/dir_set.dm index 03e221a365c..edec53d036d 100644 --- a/code/datums/observation/dir_set.dm +++ b/code/datums/observation/dir_set.dm @@ -18,7 +18,7 @@ // Listen to the parent if possible. if(. && istype(dir_changer.loc, /atom/movable)) // We don't care about registering to turfs. - register(dir_changer.loc, dir_changer, /atom/proc/recursive_dir_set) + register(dir_changer.loc, dir_changer, TYPE_PROC_REF(/atom, recursive_dir_set)) /********************* * Direction Handling * @@ -28,8 +28,8 @@ . = ..() var/decl/observ/dir_set/dir_set_event = GET_DECL(/decl/observ/dir_set) if(dir_set_event.has_listeners(am)) - events_repository.register(/decl/observ/dir_set, src, am, /atom/proc/recursive_dir_set) + events_repository.register(/decl/observ/dir_set, src, am, TYPE_PROC_REF(/atom, recursive_dir_set)) /atom/movable/Exited(var/atom/movable/am, atom/new_loc) . = ..() - events_repository.unregister(/decl/observ/dir_set, src, am, /atom/proc/recursive_dir_set) + events_repository.unregister(/decl/observ/dir_set, src, am, TYPE_PROC_REF(/atom, recursive_dir_set)) diff --git a/code/datums/observation/helpers.dm b/code/datums/observation/helpers.dm index b0a04383972..89330ecc50b 100644 --- a/code/datums/observation/helpers.dm +++ b/code/datums/observation/helpers.dm @@ -24,9 +24,9 @@ qdel(src) /proc/register_all_movement(var/event_source, var/listener) - events_repository.register(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move) - events_repository.register(/decl/observ/dir_set, event_source, listener, /atom/proc/recursive_dir_set) + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.register(/decl/observ/dir_set, event_source, listener, TYPE_PROC_REF(/atom, recursive_dir_set)) /proc/unregister_all_movement(var/event_source, var/listener) - events_repository.unregister(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move) - events_repository.unregister(/decl/observ/dir_set, event_source, listener, /atom/proc/recursive_dir_set) + events_repository.unregister(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.unregister(/decl/observ/dir_set, event_source, listener, TYPE_PROC_REF(/atom, recursive_dir_set)) diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm index b61aefffd4a..19557c43c5e 100644 --- a/code/datums/observation/moved.dm +++ b/code/datums/observation/moved.dm @@ -18,7 +18,7 @@ // Listen to the parent if possible. if(. && istype(mover.loc, expected_type)) - register(mover.loc, mover, /atom/movable/proc/recursive_move) + register(mover.loc, mover, TYPE_PROC_REF(/atom/movable, recursive_move)) /******************** * Movement Handling * @@ -32,8 +32,8 @@ . = ..() var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved) if(moved_event.has_listeners(am)) - events_repository.register(/decl/observ/moved, src, am, /atom/movable/proc/recursive_move) + events_repository.register(/decl/observ/moved, src, am, TYPE_PROC_REF(/atom/movable, recursive_move)) /atom/movable/Exited(var/atom/movable/am, atom/new_loc) . = ..() - events_repository.unregister(/decl/observ/moved, src, am, /atom/movable/proc/recursive_move) + events_repository.unregister(/decl/observ/moved, src, am, TYPE_PROC_REF(/atom/movable, recursive_move)) diff --git a/mods/persistence/datums/observation/saving.dm b/code/datums/observation/saving.dm similarity index 100% rename from mods/persistence/datums/observation/saving.dm rename to code/datums/observation/saving.dm diff --git a/code/datums/observation/~cleanup.dm b/code/datums/observation/~cleanup.dm index 447a0aaa107..9685f39741a 100644 --- a/code/datums/observation/~cleanup.dm +++ b/code/datums/observation/~cleanup.dm @@ -1,31 +1,30 @@ var/global/list/global_listen_count = list() -var/global/list/event_sources_count = list() -var/global/list/event_listen_count = list() -/proc/cleanup_events(var/source) +/datum + /// Tracks how many event registrations are listening to us. Used in cleanup to prevent dangling references. + var/event_source_count = 0 + /// Tracks how many event registrations we are listening to. Used in cleanup to prevent dangling references. + var/event_listen_count = 0 + +/proc/cleanup_events(var/datum/source) if(global.global_listen_count && global.global_listen_count[source]) cleanup_global_listener(source, global.global_listen_count[source]) - if(global.event_sources_count && global.event_sources_count[source]) - cleanup_source_listeners(source, global.event_sources_count[source]) - if(global.event_listen_count && global.event_listen_count[source]) - cleanup_event_listener(source, global.event_listen_count[source]) + if(source?.event_source_count > 0) + cleanup_source_listeners(source, source?.event_source_count) + if(source?.event_listen_count > 0) + cleanup_event_listener(source, source?.event_listen_count) /decl/observ/register(var/datum/event_source, var/datum/listener, var/proc_call) . = ..() if(.) - global.event_sources_count[event_source] += 1 - global.event_listen_count[listener] += 1 + event_source.event_source_count++ + listener.event_listen_count++ /decl/observ/unregister(var/datum/event_source, var/datum/listener, var/proc_call) . = ..() // returns the number of events removed if(.) - global.event_sources_count[event_source] -= . - global.event_listen_count[listener] -= . - - if(global.event_sources_count[event_source] <= 0) - global.event_sources_count -= event_source - if(global.event_listen_count[listener] <= 0) - global.event_listen_count -= listener + event_source.event_source_count -= . + listener.event_listen_count -= . /decl/observ/register_global(var/datum/listener, var/proc_call) . = ..() @@ -52,8 +51,8 @@ var/global/list/event_listen_count = list() if(listen_count > 0) CRASH("Failed to clean up all global listener entries!") -/proc/cleanup_source_listeners(event_source, source_listener_count) - global.event_sources_count -= event_source +/proc/cleanup_source_listeners(datum/event_source, source_listener_count) + event_source.event_source_count = 0 var/events_removed for(var/entry in global.all_observable_events) var/decl/observ/event = entry @@ -69,8 +68,8 @@ var/global/list/event_listen_count = list() if(source_listener_count > 0) CRASH("Failed to clean up all event source entries!") -/proc/cleanup_event_listener(listener, listener_count) - global.event_listen_count -= listener +/proc/cleanup_event_listener(datum/listener, listener_count) + listener.event_listen_count = 0 var/events_removed for(var/entry in global.all_observable_events) var/decl/observ/event = entry diff --git a/code/datums/outfits/_defines.dm b/code/datums/outfits/_defines.dm index 90defc13771..3f2c3d51ae9 100644 --- a/code/datums/outfits/_defines.dm +++ b/code/datums/outfits/_defines.dm @@ -3,6 +3,7 @@ #define OUTFIT_HAS_BACKPACK BITFLAG(1) #define OUTFIT_EXTENDED_SURVIVAL BITFLAG(2) #define OUTFIT_RESET_EQUIPMENT BITFLAG(3) +#define OUTFIT_HAS_VITALS_SENSOR BITFLAG(4) #define OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP BITFLAG(0) #define OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR BITFLAG(1) diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm index 88d54917fe5..f93f8f965c5 100644 --- a/code/datums/outfits/horror_killers.dm +++ b/code/datums/outfits/horror_killers.dm @@ -34,7 +34,7 @@ var/victim = get_mannequin(H.ckey) if(victim) for(var/obj/item/carried_item in H.get_equipped_items(TRUE)) - carried_item.add_blood(victim) //Oh yes, there will be blood.. just not blood from the killer because that's odd + carried_item.add_blood(victim) //Oh yes, there will be blood... just not blood from the killer because that's odd /decl/hierarchy/outfit/reaper name = "Reaper" diff --git a/code/datums/outfits/jobs/generic.dm b/code/datums/outfits/jobs/generic.dm index f69de63ccf8..d18d8b514f5 100644 --- a/code/datums/outfits/jobs/generic.dm +++ b/code/datums/outfits/jobs/generic.dm @@ -23,7 +23,7 @@ shoes = /obj/item/clothing/shoes/workboots pda_type = /obj/item/modular_computer/pda/engineering pda_slot = slot_l_store_str - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR /decl/hierarchy/outfit/job/generic/engineer/Initialize() . = ..() diff --git a/code/datums/outfits/jobs/job.dm b/code/datums/outfits/jobs/job.dm index b1d7ced48ce..80311b8a23a 100644 --- a/code/datums/outfits/jobs/job.dm +++ b/code/datums/outfits/jobs/job.dm @@ -11,13 +11,4 @@ pda_slot = slot_belt_str pda_type = /obj/item/modular_computer/pda - flags = OUTFIT_HAS_BACKPACK - -/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H) - var/obj/item/card/id/C = ..() - if(!C) - return - if(H.mind) - if(H.mind.initial_account) - C.associated_account_id = H.mind.initial_account.account_id - return C + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_HAS_VITALS_SENSOR diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm index 1d81c10d1b0..476c5d7e16d 100644 --- a/code/datums/outfits/misc.dm +++ b/code/datums/outfits/misc.dm @@ -6,7 +6,7 @@ uniform = /obj/item/clothing/under/color/grey back = /obj/item/tank/jetpack/oxygen mask = /obj/item/clothing/mask/breath - flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT /decl/hierarchy/outfit/soviet_soldier name = "Soviet soldier" @@ -35,7 +35,7 @@ l_ear = /obj/item/radio/headset uniform = /obj/item/clothing/under/clown l_pocket = /obj/item/bikehorn - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_RESET_EQUIPMENT | OUTFIT_HAS_VITALS_SENSOR /decl/hierarchy/outfit/clown/Initialize() . = ..() diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 7a71b98c7ab..3e7d79c4091 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -53,7 +53,7 @@ var/global/list/outfits_decls_by_type_ var/id_pda_assignment var/list/backpack_overrides - var/flags = OUTFIT_RESET_EQUIPMENT + var/outfit_flags = OUTFIT_RESET_EQUIPMENT /decl/hierarchy/outfit/Initialize() . = ..() @@ -62,12 +62,51 @@ var/global/list/outfits_decls_by_type_ outfits_decls_by_type_[type] = src dd_insertObjectList(outfits_decls_, src) +// This proc is structured slightly strangely because I will be adding pants to it. +/decl/hierarchy/outfit/validate() + . = ..() + + for(var/check_type in list(uniform, suit, back, belt, gloves, shoes, head, mask, l_ear, r_ear, glasses, id, l_pocket, r_pocket, suit_store, pda_type, id_type)) + var/obj/item/thing = check_type + if(isnull(thing)) + continue + if(TYPE_IS_ABSTRACT(thing)) + . += "equipment includes abstract type '[thing]'" + + for(var/check_type in hands) + var/obj/item/thing = check_type + if(isnull(thing)) + continue + if(TYPE_IS_ABSTRACT(thing)) + . += "hands includes abstract type '[thing]'" + + for(var/check_type in backpack_contents) + var/obj/item/thing = check_type + if(isnull(thing)) + continue + if(TYPE_IS_ABSTRACT(thing)) + . += "backpack includes abstract type '[thing]'" + + if(uniform && (outfit_flags & OUTFIT_HAS_VITALS_SENSOR)) + if(!ispath(uniform, /obj/item/clothing)) + . += "outfit is flagged for sensors, but uniform cannot take accessories" + var/succeeded = FALSE + var/obj/item/sensor = new /obj/item/clothing/accessory/vitals_sensor + if(uniform) + var/obj/item/clothing/wear_uniform = new uniform // sadly we need to read a list + if(wear_uniform.can_attach_accessory(sensor)) + succeeded = TRUE + qdel(wear_uniform) + if(!succeeded) + . += "outfit is flagged for sensors, but uniform does not accept sensors" + qdel(sensor) + /decl/hierarchy/outfit/proc/pre_equip(mob/living/carbon/human/H) - if(flags & OUTFIT_RESET_EQUIPMENT) + if(outfit_flags & OUTFIT_RESET_EQUIPMENT) H.delete_inventory(TRUE) /decl/hierarchy/outfit/proc/post_equip(mob/living/carbon/human/H) - if(flags & OUTFIT_HAS_JETPACK) + if(outfit_flags & OUTFIT_HAS_JETPACK) var/obj/item/tank/jetpack/J = locate(/obj/item/tank/jetpack) in H if(!J) return @@ -85,6 +124,16 @@ var/global/list/outfits_decls_by_type_ if(!(OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP & equip_adjustments)) post_equip(H) + if(outfit_flags & OUTFIT_HAS_VITALS_SENSOR) + var/obj/item/clothing/accessory/vitals_sensor/sensor = new(get_turf(H)) + for(var/check_slot in global.vitals_sensor_equip_slots) + var/obj/item/clothing/equipped = H.get_equipped_item(check_slot) + if(istype(equipped) && !(locate(/obj/item/clothing/accessory/vitals_sensor) in equipped.accessories) && equipped.can_attach_accessory(sensor)) + equipped.attach_accessory(null, sensor) + break + if(isturf(sensor)) + H.put_in_hands(sensor) + return 1 /decl/hierarchy/outfit/proc/equip_base(mob/living/carbon/human/H, var/equip_adjustments) @@ -137,7 +186,7 @@ var/global/list/outfits_decls_by_type_ for(var/hand in hands) H.put_in_hands(new hand(H)) - if((flags & OUTFIT_HAS_BACKPACK) && !(OUTFIT_ADJUSTMENT_SKIP_BACKPACK & equip_adjustments)) + if((outfit_flags & OUTFIT_HAS_BACKPACK) && !(OUTFIT_ADJUSTMENT_SKIP_BACKPACK & equip_adjustments)) var/decl/backpack_outfit/bo var/metadata @@ -158,7 +207,7 @@ var/global/list/outfits_decls_by_type_ H.equip_to_slot_or_del(backpack, slot_back_str) if(H.species && !(OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR & equip_adjustments)) - if(flags & OUTFIT_EXTENDED_SURVIVAL) + if(outfit_flags & OUTFIT_EXTENDED_SURVIVAL) H.species.equip_survival_gear(H, /obj/item/storage/box/engineer) else if(H.client?.prefs?.survival_box_choice && global.survival_box_choices[H.client.prefs.survival_box_choice]) var/decl/survival_box_option/box = global.survival_box_choices[H.client.prefs.survival_box_choice] @@ -187,8 +236,6 @@ var/global/list/outfits_decls_by_type_ W.update_icon() H.update_icon() H.set_id_info(W) - if(H.mind?.initial_account) - W.associated_account_id = H.mind.initial_account.account_id equip_pda(H, assignment, equip_adjustments) if(H.equip_to_slot_or_store_or_drop(W, id_slot)) return W diff --git a/code/datums/outfits/pirates.dm b/code/datums/outfits/pirates.dm index 75b37553c2d..b30b4f95252 100644 --- a/code/datums/outfits/pirates.dm +++ b/code/datums/outfits/pirates.dm @@ -15,4 +15,4 @@ head = /obj/item/clothing/suit/armor/pirate suit = /obj/item/clothing/suit/pirate back = /obj/item/tank/jetpack/oxygen - flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT diff --git a/code/datums/outfits/spec_op.dm b/code/datums/outfits/spec_op.dm index 2578207ff3a..70eaf26bb9e 100644 --- a/code/datums/outfits/spec_op.dm +++ b/code/datums/outfits/spec_op.dm @@ -22,7 +22,7 @@ back = /obj/item/tank/jetpack/oxygen mask = /obj/item/clothing/mask/gas/swat - flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT /decl/hierarchy/outfit/ert name = "Spec Ops - Emergency response team" @@ -54,7 +54,7 @@ backpack_contents = list(/obj/item/clothing/suit/space/void/merc/prepared = 1, /obj/item/clothing/mask/gas/syndicate = 1) - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT /decl/hierarchy/outfit/mercenary/syndicate name = "Spec Ops - Syndicate" diff --git a/code/datums/outfits/tournament.dm b/code/datums/outfits/tournament.dm index 82c11e3a442..161bc1a277b 100644 --- a/code/datums/outfits/tournament.dm +++ b/code/datums/outfits/tournament.dm @@ -57,4 +57,4 @@ ..() var/obj/item/chems/glass/bucket/bucket = locate(/obj/item/chems/glass/bucket) in H if(bucket) - bucket.reagents.add_reagent(/decl/material/liquid/water, 70) + bucket.add_to_reagents(/decl/material/liquid/water, 70) diff --git a/code/datums/outfits/wizardry.dm b/code/datums/outfits/wizardry.dm index bdecc767616..bfce1c26c4a 100644 --- a/code/datums/outfits/wizardry.dm +++ b/code/datums/outfits/wizardry.dm @@ -10,7 +10,7 @@ back = /obj/item/storage/backpack backpack_contents = list(/obj/item/storage/box = 1) abstract_type = /decl/hierarchy/outfit/wizard - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT + outfit_flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT /decl/hierarchy/outfit/wizard/blue name = "Wizard - Blue" diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm index 190c09cbc53..0bbfc28b7a7 100644 --- a/code/datums/position_point_vector.dm +++ b/code/datums/position_point_vector.dm @@ -42,7 +42,8 @@ pixel_y = _pixel_y /datum/position/proc/return_turf() - return locate(x, y, z) + var/turf/T = locate(x, y, z) + return T?.resolve_to_actual_turf() /datum/position/proc/return_px() return pixel_x @@ -111,7 +112,8 @@ AM.pixel_y = return_py() /datum/point/proc/return_turf() - return locate(CEILING(x / world.icon_size), CEILING(y / world.icon_size), z) + var/turf/T = locate(CEILING(x / world.icon_size), CEILING(y / world.icon_size), z) + return T?.resolve_to_actual_turf() /datum/point/proc/return_coordinates() //[turf_x, turf_y, z] return list(CEILING(x / world.icon_size), CEILING(y / world.icon_size), z) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 8976ec73557..9b3efb28d36 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -83,7 +83,7 @@ LAZYREMOVE(user.progressbars, bar.loc) animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME) - addtimer(CALLBACK(src, .proc/remove_from_client), PROGRESSBAR_ANIMATION_TIME, TIMER_CLIENT_TIME) + addtimer(CALLBACK(src, PROC_REF(remove_from_client)), PROGRESSBAR_ANIMATION_TIME, TIMER_CLIENT_TIME) QDEL_IN(bar, PROGRESSBAR_ANIMATION_TIME * 2) //for garbage collection safety . = ..() diff --git a/code/datums/proximity_trigger/proximity_trigger.dm b/code/datums/proximity_trigger/proximity_trigger.dm index ec4f7cf7731..961113aa45d 100644 --- a/code/datums/proximity_trigger/proximity_trigger.dm +++ b/code/datums/proximity_trigger/proximity_trigger.dm @@ -84,30 +84,30 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /datum/proximity_trigger/proc/register_turfs() if(ismovable(holder)) - events_repository.register(/decl/observ/moved, holder, src, /datum/proximity_trigger/proc/on_holder_moved) - events_repository.register(/decl/observ/dir_set, holder, src, /datum/proximity_trigger/proc/register_turfs) // Changing direction might alter the relevant turfs + events_repository.register(/decl/observ/moved, holder, src, TYPE_PROC_REF(/datum/proximity_trigger, on_holder_moved)) + events_repository.register(/decl/observ/dir_set, holder, src, TYPE_PROC_REF(/datum/proximity_trigger, register_turfs)) // Changing direction might alter the relevant turfs var/list/new_turfs = acquire_relevant_turfs() if(listequal(turfs_in_range, new_turfs)) return for(var/t in (turfs_in_range - new_turfs)) - events_repository.unregister(/decl/observ/opacity_set, t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + events_repository.unregister(/decl/observ/opacity_set, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) for(var/t in (new_turfs - turfs_in_range)) - events_repository.register(/decl/observ/opacity_set, t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + events_repository.register(/decl/observ/opacity_set, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) turfs_in_range = new_turfs on_turf_visibility_changed() /datum/proximity_trigger/proc/unregister_turfs() if(ismovable(holder)) - events_repository.unregister(/decl/observ/moved, holder, src, /datum/proximity_trigger/proc/on_holder_moved) - events_repository.unregister(/decl/observ/dir_set, holder, src, /datum/proximity_trigger/proc/register_turfs) + events_repository.unregister(/decl/observ/moved, holder, src, TYPE_PROC_REF(/datum/proximity_trigger, on_holder_moved)) + events_repository.unregister(/decl/observ/dir_set, holder, src, TYPE_PROC_REF(/datum/proximity_trigger, register_turfs)) for(var/t in turfs_in_range) - events_repository.unregister(/decl/observ/opacity_set, t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + events_repository.unregister(/decl/observ/opacity_set, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) for(var/t in seen_turfs_) - events_repository.unregister(/decl/observ/entered, t, src, /datum/proximity_trigger/proc/on_turf_entered) + events_repository.unregister(/decl/observ/entered, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) if(on_turfs_changed) call(proc_owner, on_turfs_changed)(seen_turfs_.Copy(), list()) @@ -124,9 +124,9 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo call(proc_owner, on_turfs_changed)(seen_turfs_.Copy(), new_seen_turfs_.Copy()) for(var/t in (seen_turfs_ - new_seen_turfs_)) - events_repository.unregister(/decl/observ/entered, t, src, /datum/proximity_trigger/proc/on_turf_entered) + events_repository.unregister(/decl/observ/entered, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) for(var/t in (new_seen_turfs_ - seen_turfs_)) - events_repository.register(/decl/observ/entered, t, src, /datum/proximity_trigger/proc/on_turf_entered) + events_repository.register(/decl/observ/entered, t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) seen_turfs_ = new_seen_turfs_ @@ -141,20 +141,22 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /datum/proximity_trigger/proc/on_turf_entered(var/turf/T, var/atom/enterer) if(enterer == holder) // We have an explicit call for holder, in case it moved somewhere we're not listening to. return + if(!enterer.simulated) + return // For opaque movables, we need to recheck visibility on destruction, when their opacity is changed, or when they move out of range. if(enterer.opacity) - events_repository.register(/decl/observ/opacity_set, enterer, src, /datum/proximity_trigger/proc/update_opaque_atom) - events_repository.register(/decl/observ/destroyed, enterer, src, /datum/proximity_trigger/proc/update_opaque_atom) - events_repository.register(/decl/observ/moved, enterer, src, /datum/proximity_trigger/proc/update_opaque_atom) + events_repository.register(/decl/observ/opacity_set, enterer, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) + events_repository.register(/decl/observ/destroyed, enterer, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) + events_repository.register(/decl/observ/moved, enterer, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) on_turf_visibility_changed() call(proc_owner, on_turf_entered)(enterer) /datum/proximity_trigger/proc/update_opaque_atom(var/atom/opaque_atom) var/turf/atom_loc = get_turf(opaque_atom) if(QDELETED(opaque_atom) || !opaque_atom.opacity || !atom_loc || !(atom_loc in turfs_in_range)) - events_repository.unregister(/decl/observ/opacity_set, opaque_atom, src, /datum/proximity_trigger/proc/update_opaque_atom) - events_repository.unregister(/decl/observ/destroyed, opaque_atom, src, /datum/proximity_trigger/proc/update_opaque_atom) - events_repository.unregister(/decl/observ/moved, opaque_atom, src, /datum/proximity_trigger/proc/update_opaque_atom) + events_repository.unregister(/decl/observ/opacity_set, opaque_atom, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) + events_repository.unregister(/decl/observ/destroyed, opaque_atom, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) + events_repository.unregister(/decl/observ/moved, opaque_atom, src, TYPE_PROC_REF(/datum/proximity_trigger, update_opaque_atom)) on_turf_visibility_changed() /datum/proximity_trigger/proc/get_seen_turfs() @@ -188,7 +190,7 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /obj/item/proxy_debug/Initialize() . = ..() overlay = image('icons/misc/mark.dmi', icon_state = "x3") - var/datum/proximity_trigger/a = new proxy_type(src, /obj/item/proxy_debug/proc/turf_entered, /obj/item/proxy_debug/proc/update_turfs) + var/datum/proximity_trigger/a = new proxy_type(src, TYPE_PROC_REF(/obj/item/proxy_debug, turf_entered), TYPE_PROC_REF(/obj/item/proxy_debug, update_turfs)) a.register_turfs() /obj/item/proxy_debug/proc/turf_entered(var/atom/A) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index b79198b50c3..58ae0f79d28 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -48,7 +48,8 @@ return TRUE /decl/recipe/proc/check_fruit(var/obj/container) - SHOULD_BE_PURE(TRUE) + // SHOULD_BE_PURE(TRUE) // We cannot set SHOULD_BE_PURE here as + // get_contained_external_atoms() retrieves an extension, which is impure. if(!length(fruit)) return TRUE var/container_contents = container?.get_contained_external_atoms() @@ -77,7 +78,8 @@ return TRUE /decl/recipe/proc/check_items(var/obj/container) - SHOULD_BE_PURE(TRUE) + // SHOULD_BE_PURE(TRUE) // We cannot set SHOULD_BE_PURE here as + // get_contained_external_atoms() retrieves an extension, which is impure. if(!length(items)) return TRUE var/list/container_contents = container?.get_contained_external_atoms() @@ -226,5 +228,6 @@ for(var/obj/item/chems/food/food in results) food.cooked_food = TRUE + QDEL_NULL(food.plate) return results \ No newline at end of file diff --git a/code/datums/repositories/atom_info.dm b/code/datums/repositories/atom_info.dm index a15c4fd3739..7037a3dd9a8 100644 --- a/code/datums/repositories/atom_info.dm +++ b/code/datums/repositories/atom_info.dm @@ -26,7 +26,7 @@ var/global/repository/atom_info/atom_info_repository = new() var/atom/instance if(!matter_cache[key]) instance = get_instance_of(path, material, amount) - matter_cache[key] = instance.get_contained_matter() + matter_cache[key] = instance.get_contained_matter() || list() if(!combined_worth_cache[key]) instance = instance || get_instance_of(path, material, amount) combined_worth_cache[key] = instance.get_combined_monetary_worth() diff --git a/code/datums/repositories/client.dm b/code/datums/repositories/client.dm index 4217a4042a3..db50e1daec3 100644 --- a/code/datums/repositories/client.dm +++ b/code/datums/repositories/client.dm @@ -9,7 +9,7 @@ var/global/repository/client/client_repository = new() ..() clients_ = list() -// A lite client is unique per ckey and mob ref (save for ref conflicts.. oh well) +// A lite client is unique per ckey and mob ref (save for ref conflicts... oh well) /repository/client/proc/get_lite_client(var/mob/M) if(isclient(M)) var/client/C = M // BYOND is supposed to ensure clients always have a mob diff --git a/code/datums/repositories/crew/binary.dm b/code/datums/repositories/crew/binary.dm index c4399ea37e0..847e3b0c982 100644 --- a/code/datums/repositories/crew/binary.dm +++ b/code/datums/repositories/crew/binary.dm @@ -1,5 +1,5 @@ /* Binary */ -/crew_sensor_modifier/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = FALSE if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) var/obj/item/organ/internal/heart/O = H.get_organ(BP_HEART, /obj/item/organ/internal/heart) @@ -19,11 +19,11 @@ /crew_sensor_modifier/binary/jamming priority = 5 -/crew_sensor_modifier/binary/jamming/alive/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/alive/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = FALSE return MOD_SUIT_SENSORS_HANDLED -/crew_sensor_modifier/binary/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = TRUE return MOD_SUIT_SENSORS_HANDLED @@ -37,7 +37,7 @@ /crew_sensor_modifier/binary/jamming/random/major error_prob = 100 -/crew_sensor_modifier/binary/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(error_prob)) crew_data["alert"] = pick(TRUE, FALSE) diff --git a/code/datums/repositories/crew/crew.dm b/code/datums/repositories/crew/crew.dm index e0becfd3f77..8fc83a2f712 100644 --- a/code/datums/repositories/crew/crew.dm +++ b/code/datums/repositories/crew/crew.dm @@ -21,10 +21,10 @@ var/global/datum/repository/crew/crew_repository = new() tracking_modifiers.Enqueue(new/crew_sensor_modifier/tracking()) modifier_queues = list() - modifier_queues[general_modifiers] = 0 - modifier_queues[binary_modifiers] = SUIT_SENSOR_BINARY - modifier_queues[vital_modifiers] = SUIT_SENSOR_VITAL - modifier_queues[tracking_modifiers] = SUIT_SENSOR_TRACKING + modifier_queues[general_modifiers] = VITALS_SENSOR_OFF + modifier_queues[binary_modifiers] = VITALS_SENSOR_BINARY + modifier_queues[vital_modifiers] = VITALS_SENSOR_VITAL + modifier_queues[tracking_modifiers] = VITALS_SENSOR_TRACKING modifier_queues_by_type = list() modifier_queues_by_type[/crew_sensor_modifier/general] = general_modifiers @@ -49,19 +49,21 @@ var/global/datum/repository/crew/crew_repository = new() cache_data_alert[num2text(z_level)] = FALSE var/tracked = scan() - for(var/obj/item/clothing/under/C in tracked) - var/turf/pos = get_turf(C) - if(C.has_sensor && pos && pos.z == z_level && C.sensor_mode != SUIT_SENSOR_OFF) - if(ishuman(C.loc)) - var/mob/living/carbon/human/H = C.loc - if(H.get_equipped_item(slot_w_uniform_str) != C) - continue - - var/list/crewmemberData = list("sensor_type"=C.sensor_mode, "stat"=H.stat, "area"="", "x"=-1, "y"=-1, "z"=-1, "ref"="\ref[H]") - if(!(run_queues(H, C, pos, crewmemberData) & MOD_SUIT_SENSORS_REJECTED)) - crewmembers[++crewmembers.len] = crewmemberData - if (crewmemberData["alert"]) - cache_data_alert[num2text(z_level)] = TRUE + for(var/obj/item/clothing/accessory/vitals_sensor/sensor as anything in tracked) + var/turf/pos = get_turf(sensor) + if(!pos || pos.z != z_level || sensor.sensor_mode == VITALS_SENSOR_OFF) + continue + var/mob/living/carbon/human/H = sensor.loc?.loc + if(!istype(H)) + continue + var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) + if(!istype(uniform) || !(sensor in uniform.accessories)) + continue + var/list/crewmemberData = list("sensor_type" = sensor.sensor_mode, "stat"=H.stat, "area"="", "x"=-1, "y"=-1, "z"=-1, "ref"="\ref[H]") + if(!(run_queues(H, sensor, pos, crewmemberData) & MOD_SUIT_SENSORS_REJECTED)) + crewmembers[++crewmembers.len] = crewmemberData + if (crewmemberData["alert"]) + cache_data_alert[num2text(z_level)] = TRUE crewmembers = sortTim(crewmembers, /proc/cmp_list_name_key_asc) @@ -80,39 +82,37 @@ var/global/datum/repository/crew/crew_repository = new() . = cache_data_alert[num2text(z_level)] /datum/repository/crew/proc/scan() - var/list/tracked = list() for(var/mob/living/carbon/human/H in SSmobs.mob_list) - var/obj/item/clothing/under/C = H.get_equipped_item(slot_w_uniform_str) - if(istype(C) && C.has_sensor) - tracked |= C - return tracked + var/sensor = H.get_vitals_sensor() + if(sensor) + LAZYDISTINCTADD(., sensor) -/datum/repository/crew/proc/run_queues(H, C, pos, crewmemberData) +/datum/repository/crew/proc/run_queues(H, S, pos, crewmemberData) for(var/modifier_queue in modifier_queues) if(crewmemberData["sensor_type"] >= modifier_queues[modifier_queue]) - . = process_crew_data(modifier_queue, H, C, pos, crewmemberData) + . = process_crew_data(modifier_queue, H, S, pos, crewmemberData) if(. & MOD_SUIT_SENSORS_REJECTED) return -/datum/repository/crew/proc/process_crew_data(var/datum/priority_queue/modifiers, var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/datum/repository/crew/proc/process_crew_data(var/datum/priority_queue/modifiers, var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) var/current_priority = INFINITY var/list/modifiers_of_this_priority = list() for(var/crew_sensor_modifier/csm in modifiers.L) if(csm.priority < current_priority) - . = check_queue(modifiers_of_this_priority, H, C, pos, crew_data) + . = check_queue(modifiers_of_this_priority, H, S, pos, crew_data) if(. != MOD_SUIT_SENSORS_NONE) return current_priority = csm.priority modifiers_of_this_priority += csm - return check_queue(modifiers_of_this_priority, H, C, pos, crew_data) + return check_queue(modifiers_of_this_priority, H, S, pos, crew_data) -/datum/repository/crew/proc/check_queue(var/list/modifiers_of_this_priority, H, C, pos, crew_data) +/datum/repository/crew/proc/check_queue(var/list/modifiers_of_this_priority, H, S, pos, crew_data) while(modifiers_of_this_priority.len) var/crew_sensor_modifier/pcsm = pick(modifiers_of_this_priority) modifiers_of_this_priority -= pcsm - if(pcsm.may_process_crew_data(H, C, pos)) - . = pcsm.process_crew_data(H, C, pos, crew_data) + if(pcsm.may_process_crew_data(H, S, pos)) + . = pcsm.process_crew_data(H, S, pos, crew_data) if(. != MOD_SUIT_SENSORS_NONE) return return MOD_SUIT_SENSORS_NONE diff --git a/code/datums/repositories/crew/crew_sensor_modifier.dm b/code/datums/repositories/crew/crew_sensor_modifier.dm index 753e429e83d..3dec235a49b 100644 --- a/code/datums/repositories/crew/crew_sensor_modifier.dm +++ b/code/datums/repositories/crew/crew_sensor_modifier.dm @@ -13,8 +13,8 @@ may_process_proc = null . = ..() -/crew_sensor_modifier/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos) - return holder && may_process_proc ? call(holder, may_process_proc)(H, C, pos) : TRUE +/crew_sensor_modifier/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos) + return holder && may_process_proc ? call(holder, may_process_proc)(H, S, pos) : TRUE -/crew_sensor_modifier/proc/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/proc/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) return MOD_SUIT_SENSORS_HANDLED diff --git a/code/datums/repositories/crew/general.dm b/code/datums/repositories/crew/general.dm index a2c09ddab37..c66e670ff43 100644 --- a/code/datums/repositories/crew/general.dm +++ b/code/datums/repositories/crew/general.dm @@ -1,5 +1,5 @@ /* General */ -/crew_sensor_modifier/general/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) crew_data["name"] = H.get_authentification_name(if_no_id="Unknown") crew_data["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job") crew_data["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job") @@ -9,23 +9,23 @@ /crew_sensor_modifier/general/jamming priority = 5 -/crew_sensor_modifier/general/jamming/off/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/off/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() // This works only because general is checked first and crew_data["sensor_type"] is used to check if whether any additional data should be included. - crew_data["sensor_type"] = SUIT_SENSOR_OFF + crew_data["sensor_type"] = VITALS_SENSOR_OFF return MOD_SUIT_SENSORS_REJECTED -/crew_sensor_modifier/general/jamming/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_BINARY + crew_data["sensor_type"] = VITALS_SENSOR_BINARY -/crew_sensor_modifier/general/jamming/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_VITAL + crew_data["sensor_type"] = VITALS_SENSOR_VITAL -/crew_sensor_modifier/general/jamming/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_TRACKING + crew_data["sensor_type"] = VITALS_SENSOR_TRACKING /* Random */ /crew_sensor_modifier/general/jamming/random @@ -40,9 +40,9 @@ random_sensor_type_prob = 60 random_assignment_prob = 40 -/crew_sensor_modifier/general/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(random_sensor_type_prob)) - crew_data["sensor_type"] = pick(SUIT_SENSOR_OFF, SUIT_SENSOR_BINARY, SUIT_SENSOR_VITAL, SUIT_SENSOR_TRACKING) + crew_data["sensor_type"] = pick(VITALS_SENSOR_OFF, VITALS_SENSOR_BINARY, VITALS_SENSOR_VITAL, VITALS_SENSOR_TRACKING) if(prob(random_assignment_prob)) crew_data["assignment"] = pick("Agent", "Infiltrator", "Passenger", "Crewman", "Unknown") diff --git a/code/datums/repositories/crew/tracking.dm b/code/datums/repositories/crew/tracking.dm index 76b1bca025e..7f509e91ab5 100644 --- a/code/datums/repositories/crew/tracking.dm +++ b/code/datums/repositories/crew/tracking.dm @@ -1,5 +1,5 @@ /* Tracking */ -/crew_sensor_modifier/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) if(pos) var/area/A = get_area(pos) crew_data["area"] = A.proper_name @@ -12,8 +12,8 @@ /crew_sensor_modifier/tracking/jamming priority = 5 -/crew_sensor_modifier/tracking/jamming/localize/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - return ..(H, C, get_turf(holder), crew_data) +/crew_sensor_modifier/tracking/jamming/localize/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) + return ..(H, S, get_turf(holder), crew_data) /crew_sensor_modifier/tracking/jamming/random var/shift_range = 7 @@ -27,7 +27,7 @@ /crew_sensor_modifier/tracking/jamming/random/major shift_range = 21 -/crew_sensor_modifier/tracking/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/tracking/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) if(world.time > next_shift_change) next_shift_change = world.time + rand(30 SECONDS, 2 MINUTES) x_shift = rand(-shift_range, shift_range) @@ -36,4 +36,4 @@ var/new_x = clamp(pos.x + x_shift, 1, world.maxx) var/new_y = clamp(pos.y + y_shift, 1, world.maxy) pos = locate(new_x, new_y, pos.z) - return ..(H, C, pos, crew_data) + return ..(H, S, pos, crew_data) diff --git a/code/datums/repositories/crew/vital.dm b/code/datums/repositories/crew/vital.dm index 9e7aab0f869..3cc781486c1 100644 --- a/code/datums/repositories/crew/vital.dm +++ b/code/datums/repositories/crew/vital.dm @@ -1,5 +1,5 @@ /* Vital */ -/crew_sensor_modifier/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) crew_data["true_pulse"] = -1 crew_data["pulse"] = "N/A" crew_data["pulse_span"] = "neutral" @@ -100,12 +100,12 @@ /crew_sensor_modifier/vital/jamming priority = 5 -/crew_sensor_modifier/vital/jamming/healthy/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/healthy/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() set_healthy(crew_data) return MOD_SUIT_SENSORS_HANDLED -/crew_sensor_modifier/vital/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() set_dead(crew_data) return MOD_SUIT_SENSORS_HANDLED @@ -120,7 +120,7 @@ /crew_sensor_modifier/vital/jamming/random/major error_prob = 100 -/crew_sensor_modifier/vital/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(error_prob)) pick(set_healthy(crew_data), set_dead(crew_data)) diff --git a/code/datums/repositories/follow.dm b/code/datums/repositories/follow.dm index c4d037f70be..11393225a41 100644 --- a/code/datums/repositories/follow.dm +++ b/code/datums/repositories/follow.dm @@ -36,7 +36,7 @@ var/global/repository/follow/follow_repository = new() followed_objects_assoc[AM] = follow_holder followed_objects.Add(follow_holder) - events_repository.register(/decl/observ/destroyed, AM, src, /repository/follow/proc/remove_subject) + events_repository.register(/decl/observ/destroyed, AM, src, TYPE_PROC_REF(/repository/follow, remove_subject)) /repository/follow/proc/remove_subject(var/atom/movable/AM) cache = null @@ -46,7 +46,7 @@ var/global/repository/follow/follow_repository = new() followed_objects_assoc -= AM followed_objects.Remove(follow_holder) - events_repository.unregister(/decl/observ/destroyed, AM, src, /repository/follow/proc/remove_subject) + events_repository.unregister(/decl/observ/destroyed, AM, src, TYPE_PROC_REF(/repository/follow, remove_subject)) qdel(follow_holder) @@ -175,7 +175,7 @@ var/global/repository/follow/follow_repository = new() /datum/follow_holder/brain sort_order = 3 - followed_type = /mob/living/carbon/brain + followed_type = /mob/living/brain suffix = "Brain" /datum/follow_holder/alien diff --git a/code/datums/repositories/mobs.dm b/code/datums/repositories/mobs.dm index 024aed9c450..87af6ea7cac 100644 --- a/code/datums/repositories/mobs.dm +++ b/code/datums/repositories/mobs.dm @@ -7,7 +7,7 @@ var/global/repository/mob/mob_repository = new() ..() mobs_ = list() -// A lite mob is unique per ckey and mob real name/ref (ref conflicts possible.. but oh well) +// A lite mob is unique per ckey and mob real name/ref (ref conflicts possible... but oh well) /repository/mob/proc/get_lite_mob(var/mob/M) . = mobs_[mob2unique(M)] if(!.) diff --git a/code/datums/sound_player.dm b/code/datums/sound_player.dm index 82cc8890e2c..3c93089fb07 100644 --- a/code/datums/sound_player.dm +++ b/code/datums/sound_player.dm @@ -128,10 +128,10 @@ listeners = list() listener_status = list() - events_repository.register(/decl/observ/destroyed, source, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum, qdel_self)) if(ismovable(source)) - proxy_listener = new(source, /datum/sound_token/proc/PrivAddListener, /datum/sound_token/proc/PrivLocateListeners, range, proc_owner = src) + proxy_listener = new(source, TYPE_PROC_REF(/datum/sound_token, PrivAddListener), TYPE_PROC_REF(/datum/sound_token, PrivLocateListeners), range, proc_owner = src) proxy_listener.register_turfs() /datum/sound_token/Destroy() @@ -169,7 +169,7 @@ listeners = null listener_status = null - events_repository.unregister(/decl/observ/destroyed, source, src, /datum/proc/qdel_self) + events_repository.unregister(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum, qdel_self)) QDEL_NULL(proxy_listener) source = null @@ -217,16 +217,16 @@ listeners += listener - events_repository.register(/decl/observ/moved, listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - events_repository.register(/decl/observ/destroyed, listener, src, /datum/sound_token/proc/PrivRemoveListener) + events_repository.register(/decl/observ/moved, listener, src, TYPE_PROC_REF(/datum/sound_token, PrivUpdateListenerLoc)) + events_repository.register(/decl/observ/destroyed, listener, src, TYPE_PROC_REF(/datum/sound_token, PrivRemoveListener)) PrivUpdateListenerLoc(listener, FALSE) /datum/sound_token/proc/PrivRemoveListener(var/atom/listener, var/sound/null_sound) null_sound = null_sound || new(channel = sound.channel) sound_to(listener, null_sound) - events_repository.unregister(/decl/observ/moved, listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - events_repository.unregister(/decl/observ/destroyed, listener, src, /datum/sound_token/proc/PrivRemoveListener) + events_repository.unregister(/decl/observ/moved, listener, src, TYPE_PROC_REF(/datum/sound_token, PrivUpdateListenerLoc)) + events_repository.unregister(/decl/observ/destroyed, listener, src, TYPE_PROC_REF(/datum/sound_token, PrivRemoveListener)) listeners -= listener listener_status -= listener diff --git a/code/datums/supplypacks/galley.dm b/code/datums/supplypacks/galley.dm index 6f09cdb49f5..0d9dedc1ba8 100644 --- a/code/datums/supplypacks/galley.dm +++ b/code/datums/supplypacks/galley.dm @@ -6,7 +6,7 @@ contains = list(/obj/item/chems/condiment/flour = 6, /obj/item/chems/drinks/milk = 4, /obj/item/chems/drinks/soymilk = 2, - /obj/item/storage/fancy/egg_box = 2, + /obj/item/storage/box/fancy/egg_box = 2, /obj/item/chems/food/tofu = 4, /obj/item/chems/food/meat = 4, /obj/item/chems/condiment/enzyme = 1 @@ -45,7 +45,7 @@ /decl/hierarchy/supply_pack/galley/eggs name = "Perishables - Eggs" - contains = list(/obj/item/storage/fancy/egg_box = 2) + contains = list(/obj/item/storage/box/fancy/egg_box = 2) containertype = /obj/structure/closet/crate/freezer containername = "egg crate" @@ -93,8 +93,8 @@ /obj/item/chems/drinks/bottle/patron, /obj/item/chems/drinks/bottle/goldschlager, /obj/item/chems/drinks/bottle/agedwhiskey, - /obj/item/storage/fancy/cigarettes/dromedaryco, - /obj/random/lipstick, + /obj/item/storage/box/fancy/cigarettes/dromedaryco, + /obj/random/lipstick = 2, /obj/item/chems/drinks/bottle/small/ale = 2, /obj/item/chems/drinks/bottle/small/beer = 4, /obj/item/storage/box/glowsticks = 2) diff --git a/code/datums/supplypacks/livecargo.dm b/code/datums/supplypacks/livecargo.dm index 0723b926372..13078d3ab1e 100644 --- a/code/datums/supplypacks/livecargo.dm +++ b/code/datums/supplypacks/livecargo.dm @@ -51,3 +51,10 @@ containertype = /obj/structure/largecrate/animal containername = "chicken crate" access = access_hydroponics + +/decl/hierarchy/supply_pack/livecargo/duck + name = "Live - Duck" + contains = list(/mob/living/simple_animal/fowl/duck = 3) + containertype = /obj/structure/largecrate/animal + containername = "duck crate" + access = access_hydroponics diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm index bce39e272aa..687c8d925d4 100644 --- a/code/datums/supplypacks/materials.dm +++ b/code/datums/supplypacks/materials.dm @@ -9,7 +9,7 @@ /decl/hierarchy/supply_pack/materials/alum50 name = "50 aluminium sheets" - contains = list(/obj/item/stack/material/shiny/mapped/aluminium/fifty) + contains = list(/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty) containername = "aluminium sheets crate" /decl/hierarchy/supply_pack/materials/glass50 @@ -19,7 +19,7 @@ /decl/hierarchy/supply_pack/materials/fiberglass50 name = "50 fiberglass sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/fiberglass/fifty) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty) containername = "fiberglass sheets crate" /decl/hierarchy/supply_pack/materials/plastic50 @@ -34,7 +34,7 @@ /decl/hierarchy/supply_pack/materials/plasteel50 name = "50 plasteel sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/plasteel/fifty) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty) containername = "plasteel sheets crate" /decl/hierarchy/supply_pack/materials/copper50 @@ -44,12 +44,12 @@ /decl/hierarchy/supply_pack/materials/titanium50 name = "50 titanium sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/titanium/fifty) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/titanium/fifty) containername = "titanium sheets crate" /decl/hierarchy/supply_pack/materials/ocp50 name = "50 osmium carbide plasteel sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/ocp/fifty) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/ocp/fifty) containername = "osmium carbide plasteel sheets crate" /decl/hierarchy/supply_pack/materials/graphite50 @@ -64,17 +64,17 @@ /decl/hierarchy/supply_pack/materials/plasteel10 name = "10 plasteel sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/plasteel/ten) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten) containername = "plasteel sheets crate" /decl/hierarchy/supply_pack/materials/titanium10 name = "10 titanium sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/titanium/ten) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/titanium/ten) containername = "titanium sheets crate" /decl/hierarchy/supply_pack/materials/ocp10 name = "10 osmium carbide plasteel sheets" - contains = list(/obj/item/stack/material/reinforced/mapped/ocp/ten) + contains = list(/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten) containername = "osmium carbide plasteel sheets crate" /decl/hierarchy/supply_pack/materials/gold10 diff --git a/code/datums/supplypacks/nonessent.dm b/code/datums/supplypacks/nonessent.dm index 4e03952f164..565b6c8662d 100644 --- a/code/datums/supplypacks/nonessent.dm +++ b/code/datums/supplypacks/nonessent.dm @@ -11,7 +11,7 @@ /decl/hierarchy/supply_pack/nonessent/artscrafts name = "Art - Arts and Crafts supplies" contains = list( - /obj/item/storage/fancy/crayons, + /obj/item/storage/box/fancy/crayons, /obj/item/camera, /obj/item/camera_film = 2, /obj/item/storage/photo_album, diff --git a/code/datums/supplypacks/science.dm b/code/datums/supplypacks/science.dm index c3730795c98..070963d8f4c 100644 --- a/code/datums/supplypacks/science.dm +++ b/code/datums/supplypacks/science.dm @@ -45,8 +45,8 @@ /obj/item/scanner/gas, /obj/item/storage/ore, /obj/item/flashlight/lantern, - /obj/item/shovel, - /obj/item/pickaxe, + /obj/item/tool/shovel, + /obj/item/tool/pickaxe, /obj/item/scanner/mining, /obj/item/clothing/glasses/material, /obj/item/clothing/glasses/meson) diff --git a/code/datums/trading/traders/ai.dm b/code/datums/trading/traders/ai.dm index 5bdc07be534..99b1e5eff01 100644 --- a/code/datums/trading/traders/ai.dm +++ b/code/datums/trading/traders/ai.dm @@ -48,7 +48,7 @@ They sell generic supplies and ask for generic supplies. /obj/item/storage/backpack/dufflebag/syndie = TRADER_BLACKLIST_SUB, /obj/item/storage/belt/champion = TRADER_THIS_TYPE, /obj/item/storage/briefcase = TRADER_THIS_TYPE, - /obj/item/storage/fancy = TRADER_SUBTYPES_ONLY, + /obj/item/storage/box/fancy = TRADER_SUBTYPES_ONLY, /obj/item/storage/laundry_basket = TRADER_THIS_TYPE, /obj/item/storage/secure/briefcase = TRADER_THIS_TYPE, /obj/item/storage/plants = TRADER_THIS_TYPE, @@ -73,24 +73,24 @@ They sell generic supplies and ask for generic supplies. origin = "Mining Beacon" possible_trading_items = list( - /obj/item/stack/material/ore = TRADER_SUBTYPES_ONLY, - /obj/item/stack/material/pane/mapped/glass = TRADER_ALL, - /obj/item/stack/material/pane/mapped/glass/fifty = TRADER_BLACKLIST, - /obj/item/stack/material/ingot/mapped/iron = TRADER_THIS_TYPE, - /obj/item/stack/material/brick/mapped/sandstone = TRADER_THIS_TYPE, - /obj/item/stack/material/brick/mapped/marble = TRADER_THIS_TYPE, - /obj/item/stack/material/gemstone/mapped/diamond = TRADER_THIS_TYPE, - /obj/item/stack/material/puck/mapped/uranium = TRADER_THIS_TYPE, - /obj/item/stack/material/panel/mapped/plastic = TRADER_THIS_TYPE, - /obj/item/stack/material/ingot/mapped/gold = TRADER_THIS_TYPE, - /obj/item/stack/material/ingot/mapped/silver = TRADER_THIS_TYPE, - /obj/item/stack/material/ingot/mapped/platinum = TRADER_THIS_TYPE, - /obj/item/stack/material/segment/mapped/mhydrogen = TRADER_THIS_TYPE, - /obj/item/stack/material/aerogel/mapped/tritium = TRADER_THIS_TYPE, - /obj/item/stack/material/ingot/mapped/osmium = TRADER_THIS_TYPE, - /obj/item/stack/material/sheet/mapped/steel = TRADER_THIS_TYPE, - /obj/item/stack/material/reinforced/mapped/plasteel = TRADER_THIS_TYPE, - /obj/machinery/mining = TRADER_SUBTYPES_ONLY + /obj/item/stack/material/ore = TRADER_SUBTYPES_ONLY, + /obj/item/stack/material/pane/mapped/glass = TRADER_ALL, + /obj/item/stack/material/pane/mapped/glass/fifty = TRADER_BLACKLIST, + /obj/item/stack/material/ingot/mapped/iron = TRADER_THIS_TYPE, + /obj/item/stack/material/brick/mapped/sandstone = TRADER_THIS_TYPE, + /obj/item/stack/material/brick/mapped/marble = TRADER_THIS_TYPE, + /obj/item/stack/material/gemstone/mapped/diamond = TRADER_THIS_TYPE, + /obj/item/stack/material/puck/mapped/uranium = TRADER_THIS_TYPE, + /obj/item/stack/material/panel/mapped/plastic = TRADER_THIS_TYPE, + /obj/item/stack/material/ingot/mapped/gold = TRADER_THIS_TYPE, + /obj/item/stack/material/ingot/mapped/silver = TRADER_THIS_TYPE, + /obj/item/stack/material/ingot/mapped/platinum = TRADER_THIS_TYPE, + /obj/item/stack/material/segment/mapped/mhydrogen = TRADER_THIS_TYPE, + /obj/item/stack/material/aerogel/mapped/tritium = TRADER_THIS_TYPE, + /obj/item/stack/material/ingot/mapped/osmium = TRADER_THIS_TYPE, + /obj/item/stack/material/sheet/mapped/steel = TRADER_THIS_TYPE, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel = TRADER_THIS_TYPE, + /obj/machinery/mining = TRADER_SUBTYPES_ONLY ) /datum/trader/trading_beacon/manufacturing diff --git a/code/datums/trading/traders/food.dm b/code/datums/trading/traders/food.dm index 7a6c4aee8d4..fab644a48d9 100644 --- a/code/datums/trading/traders/food.dm +++ b/code/datums/trading/traders/food.dm @@ -37,7 +37,9 @@ var/obj/item/pizzabox/box = new(location) M.forceMove(box) box.pizza = M - box.boxtag = "A special order from [origin]" + box.box_tag = "A special order from [origin]!" + box.update_strings() + box.update_icon() /datum/trader/ship/chinese name = "Chinese Restaurant" @@ -50,16 +52,22 @@ ) possible_wanted_items = list() possible_trading_items = list( + /obj/item/utensil/chopsticks = TRADER_THIS_TYPE, + /obj/item/utensil/chopsticks/plastic = TRADER_THIS_TYPE, + /obj/item/chems/condiment/small/soysauce = TRADER_THIS_TYPE, + /obj/item/chems/condiment/capsaicin = TRADER_THIS_TYPE, + /obj/item/chems/food/boiledrice/chazuke = TRADER_THIS_TYPE, + /obj/item/chems/food/katsucurry = TRADER_THIS_TYPE, /obj/item/chems/food/meatkabob = TRADER_THIS_TYPE, - /obj/item/chems/food/monkeysdelight = TRADER_THIS_TYPE, + /obj/item/chems/food/boiledegg = TRADER_THIS_TYPE, + /obj/item/chems/food/boiledrice = TRADER_THIS_TYPE, /obj/item/chems/food/ricepudding = TRADER_THIS_TYPE, - /obj/item/chems/food/slice/xenomeatbread/filled = TRADER_THIS_TYPE, /obj/item/chems/food/soydope = TRADER_THIS_TYPE, /obj/item/chems/food/stewedsoymeat = TRADER_THIS_TYPE, /obj/item/chems/drinks/dry_ramen = TRADER_THIS_TYPE ) - var/list/fortunes = list( + var/static/list/fortunes = list( "Today it's up to you to create the peacefulness you long for.", "If you refuse to accept anything but the best, you very often get it.", "A smile is your passport into the hearts of others.", @@ -114,7 +122,6 @@ /obj/item/chems/drinks/cans = TRADER_SUBTYPES_ONLY, /obj/item/chems/drinks/bottle = TRADER_SUBTYPES_ONLY, /obj/item/chems/drinks/bottle/small = TRADER_BLACKLIST, - /obj/item/chems/food/checker = TRADER_BLACKLIST_ALL, /obj/item/chems/food/fruit_slice = TRADER_BLACKLIST, /obj/item/chems/food/slice = TRADER_BLACKLIST_ALL, /obj/item/chems/food/grown = TRADER_BLACKLIST_ALL, diff --git a/code/datums/trading/traders/goods.dm b/code/datums/trading/traders/goods.dm index 76c338c2815..492ef550e94 100644 --- a/code/datums/trading/traders/goods.dm +++ b/code/datums/trading/traders/goods.dm @@ -218,43 +218,43 @@ Sells devices, odds and ends, and medical stuff "McGillicuddy's" ) possible_trading_items = list( - /obj/item/flashlight = TRADER_ALL, - /obj/item/kit/paint = TRADER_SUBTYPES_ONLY, - /obj/item/aicard = TRADER_THIS_TYPE, - /obj/item/binoculars = TRADER_THIS_TYPE, - /obj/item/cable_painter = TRADER_THIS_TYPE, - /obj/item/flash = TRADER_THIS_TYPE, - /obj/item/paint_sprayer = TRADER_THIS_TYPE, - /obj/item/multitool = TRADER_THIS_TYPE, - /obj/item/lightreplacer = TRADER_THIS_TYPE, - /obj/item/megaphone = TRADER_THIS_TYPE, - /obj/item/paicard = TRADER_THIS_TYPE, - /obj/item/scanner/health = TRADER_THIS_TYPE, - /obj/item/scanner/breath = TRADER_THIS_TYPE, - /obj/item/scanner/gas = TRADER_ALL, - /obj/item/scanner/spectrometer = TRADER_ALL, - /obj/item/scanner/reagent = TRADER_ALL, - /obj/item/scanner/xenobio = TRADER_THIS_TYPE, - /obj/item/suit_cooling_unit = TRADER_THIS_TYPE, - /obj/item/t_scanner = TRADER_THIS_TYPE, - /obj/item/taperecorder = TRADER_THIS_TYPE, - /obj/item/batterer = TRADER_THIS_TYPE, - /obj/item/synthesized_instrument/violin = TRADER_THIS_TYPE, - /obj/item/hailer = TRADER_THIS_TYPE, - /obj/item/uv_light = TRADER_THIS_TYPE, - /obj/item/mmi = TRADER_ALL, - /obj/item/robotanalyzer = TRADER_THIS_TYPE, - /obj/item/chems/toner_cartridge = TRADER_THIS_TYPE, - /obj/item/camera_film = TRADER_THIS_TYPE, - /obj/item/camera = TRADER_THIS_TYPE, - /obj/item/destTagger = TRADER_THIS_TYPE, - /obj/item/gps = TRADER_THIS_TYPE, - /obj/item/measuring_tape = TRADER_THIS_TYPE, - /obj/item/ano_scanner = TRADER_THIS_TYPE, - /obj/item/core_sampler = TRADER_THIS_TYPE, - /obj/item/depth_scanner = TRADER_THIS_TYPE, - /obj/item/pinpointer/radio = TRADER_THIS_TYPE, - /obj/item/stack/medical/advanced = TRADER_BLACKLIST + /obj/item/flashlight = TRADER_ALL, + /obj/item/kit/paint = TRADER_SUBTYPES_ONLY, + /obj/item/aicard = TRADER_THIS_TYPE, + /obj/item/binoculars = TRADER_THIS_TYPE, + /obj/item/cable_painter = TRADER_THIS_TYPE, + /obj/item/flash = TRADER_THIS_TYPE, + /obj/item/paint_sprayer = TRADER_THIS_TYPE, + /obj/item/multitool = TRADER_THIS_TYPE, + /obj/item/lightreplacer = TRADER_THIS_TYPE, + /obj/item/megaphone = TRADER_THIS_TYPE, + /obj/item/paicard = TRADER_THIS_TYPE, + /obj/item/scanner/health = TRADER_THIS_TYPE, + /obj/item/scanner/breath = TRADER_THIS_TYPE, + /obj/item/scanner/gas = TRADER_ALL, + /obj/item/scanner/spectrometer = TRADER_ALL, + /obj/item/scanner/reagent = TRADER_ALL, + /obj/item/scanner/xenobio = TRADER_THIS_TYPE, + /obj/item/suit_cooling_unit = TRADER_THIS_TYPE, + /obj/item/t_scanner = TRADER_THIS_TYPE, + /obj/item/taperecorder = TRADER_THIS_TYPE, + /obj/item/batterer = TRADER_THIS_TYPE, + /obj/item/synthesized_instrument/violin = TRADER_THIS_TYPE, + /obj/item/hailer = TRADER_THIS_TYPE, + /obj/item/uv_light = TRADER_THIS_TYPE, + /obj/item/organ/internal/brain_interface = TRADER_SUBTYPES_ONLY, + /obj/item/robotanalyzer = TRADER_THIS_TYPE, + /obj/item/chems/toner_cartridge = TRADER_THIS_TYPE, + /obj/item/camera_film = TRADER_THIS_TYPE, + /obj/item/camera = TRADER_THIS_TYPE, + /obj/item/destTagger = TRADER_THIS_TYPE, + /obj/item/gps = TRADER_THIS_TYPE, + /obj/item/measuring_tape = TRADER_THIS_TYPE, + /obj/item/ano_scanner = TRADER_THIS_TYPE, + /obj/item/core_sampler = TRADER_THIS_TYPE, + /obj/item/depth_scanner = TRADER_THIS_TYPE, + /obj/item/pinpointer/radio = TRADER_THIS_TYPE, + /obj/item/stack/medical/advanced = TRADER_BLACKLIST ) speech = list( TRADER_HAIL_GENERIC = "Hello, hello! Bits and bobs and everything in between, I hope you find what you're looking for!", @@ -383,7 +383,7 @@ Sells devices, odds and ends, and medical stuff /obj/item/organ/internal/kidneys = TRADER_THIS_TYPE, /obj/item/organ/internal/lungs = TRADER_THIS_TYPE, /obj/item/organ/internal/heart = TRADER_THIS_TYPE, - /obj/item/storage/fancy/cigarettes = TRADER_ALL + /obj/item/storage/box/fancy/cigarettes = TRADER_ALL ) possible_trading_items = list( @@ -450,7 +450,7 @@ Sells devices, odds and ends, and medical stuff /obj/item/storage/box/greenglowsticks = TRADER_THIS_TYPE, /obj/item/clothing/suit/space/void/engineering/salvage/prepared = TRADER_THIS_TYPE, /obj/item/stack/material/puck/mapped/uranium/ten = TRADER_THIS_TYPE, - /obj/item/stack/material/reinforced/mapped/plasteel/fifty = TRADER_THIS_TYPE, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty = TRADER_THIS_TYPE, /obj/item/stack/material/sheet/mapped/steel/fifty = TRADER_THIS_TYPE, /obj/item/stack/material/ingot/mapped/copper/fifty = TRADER_THIS_TYPE ) diff --git a/code/datums/trading/traders/misc.dm b/code/datums/trading/traders/misc.dm index 75bdacd68bb..136fd64b3a7 100644 --- a/code/datums/trading/traders/misc.dm +++ b/code/datums/trading/traders/misc.dm @@ -38,7 +38,8 @@ /mob/living/simple_animal/tomato = TRADER_THIS_TYPE, /mob/living/simple_animal/cow = TRADER_THIS_TYPE, /mob/living/simple_animal/chick = TRADER_THIS_TYPE, - /mob/living/simple_animal/chicken = TRADER_THIS_TYPE, + /mob/living/simple_animal/fowl/chicken = TRADER_THIS_TYPE, + /mob/living/simple_animal/fowl/duck = TRADER_THIS_TYPE, /mob/living/simple_animal/yithian = TRADER_THIS_TYPE, /mob/living/simple_animal/hostile/retaliate/beast/diyaab = TRADER_THIS_TYPE, /mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE, @@ -60,7 +61,8 @@ /mob/living/simple_animal/tomato = TRADER_THIS_TYPE, /mob/living/simple_animal/cow = TRADER_THIS_TYPE, /mob/living/simple_animal/chick = TRADER_THIS_TYPE, - /mob/living/simple_animal/chicken = TRADER_THIS_TYPE, + /mob/living/simple_animal/fowl/chicken = TRADER_THIS_TYPE, + /mob/living/simple_animal/fowl/duck = TRADER_THIS_TYPE, /mob/living/simple_animal/yithian = TRADER_THIS_TYPE, /mob/living/simple_animal/hostile/retaliate/beast/diyaab = TRADER_THIS_TYPE, /mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE, diff --git a/code/datums/uplink/services.dm b/code/datums/uplink/services.dm index 3a81c4f9149..6bec9ead893 100644 --- a/code/datums/uplink/services.dm +++ b/code/datums/uplink/services.dm @@ -41,7 +41,7 @@ /datum/uplink_item/item/services/fake_update_annoncement/New() ..() item_cost = round(DEFAULT_TELECRYSTAL_AMOUNT / 2) - addtimer(CALLBACK(src, .proc/finalize_announce), 2) + addtimer(CALLBACK(src, PROC_REF(finalize_announce)), 2) /datum/uplink_item/item/services/fake_update_annoncement/proc/finalize_announce() name = "[command_name()] Update Announcement" @@ -98,7 +98,7 @@ log_and_message_admins("has activated the service '[service_label]'", user) if(service_duration) - addtimer(CALLBACK(src,/obj/item/uplink_service/proc/deactivate), service_duration) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/uplink_service, deactivate)), service_duration) else deactivate() diff --git a/code/datums/vending/stored_item.dm b/code/datums/vending/stored_item.dm index 26a5828289c..fe8a6130d6a 100644 --- a/code/datums/vending/stored_item.dm +++ b/code/datums/vending/stored_item.dm @@ -5,13 +5,23 @@ var/list/instances //What items are actually stored var/atom/storing_object -/datum/stored_items/New(var/atom/storing_object, var/path, var/name = null, var/amount = 0) +SAVED_VAR(/datum/stored_items, item_name) +SAVED_VAR(/datum/stored_items, item_path) +SAVED_VAR(/datum/stored_items, amount) +SAVED_VAR(/datum/stored_items, instances) +SAVED_VAR(/datum/stored_items, storing_object) + +/datum/stored_items/New(atom/_storing_object, _path, _name, _amount = 0) + if(_storing_object) + storing_object = _storing_object if(!istype(storing_object)) - CRASH("Unexpected storing object.") - src.storing_object = storing_object - src.item_path = path - src.amount = amount - src.item_name = name || atom_info_repository.get_name_for(path) + CRASH("Unexpected storing object: [storing_object]") + if(_path) + item_path = _path + if(!ispath(item_path)) + CRASH("Unexpected item path: [item_path || "NULL"]") + item_name = _name || atom_info_repository.get_name_for(item_path) + amount = _amount ..() /datum/stored_items/Destroy() diff --git a/code/datums/vending/vending.dm b/code/datums/vending/vending.dm index f000eaac3f1..d92e8d483e1 100644 --- a/code/datums/vending/vending.dm +++ b/code/datums/vending/vending.dm @@ -6,13 +6,11 @@ */ /datum/stored_items/vending_products - item_name = "generic" // Display name for the product - var/price = 0 // Price to buy one - var/display_color = null // Display color for vending machine listing - var/category = CAT_NORMAL // CAT_HIDDEN for contraband - -/datum/stored_items/vending_products/New(var/atom/storing_object, var/path, var/name = null, var/amount = 0, var/price = 0, var/color = null, var/category = CAT_NORMAL) - ..() - src.price = price - src.display_color = color - src.category = category + /// Display name for the product + item_name = "generic" + /// Price to buy one + var/price = 0 + /// Display color for vending machine listing + var/display_color = null + // CAT_HIDDEN for contraband + var/category = CAT_NORMAL diff --git a/code/datums/vote/add_antag.dm b/code/datums/vote/add_antag.dm index 1d04ea08cbd..f9b82057ce2 100644 --- a/code/datums/vote/add_antag.dm +++ b/code/datums/vote/add_antag.dm @@ -43,7 +43,7 @@ global.additional_antag_types |= antag_type return - INVOKE_ASYNC(src, .proc/spawn_antags) //There is a sleep in this proc. + INVOKE_ASYNC(src, PROC_REF(spawn_antags)) //There is a sleep in this proc. /datum/vote/add_antagonist/proc/spawn_antags() @@ -58,7 +58,7 @@ antag_add_finished = 1 if(automatic) // the buffer will already have half an hour added to it, so we'll give it one more - transfer_controller.timerbuffer += config.vote_autotransfer_interval + transfer_controller.timerbuffer += get_config_value(/decl/config/num/vote_autotransfer_initial) else to_world("No antags were added.") if(automatic) diff --git a/code/datums/vote/gamemode.dm b/code/datums/vote/gamemode.dm index bb05d20a73d..663de74d6c0 100644 --- a/code/datums/vote/gamemode.dm +++ b/code/datums/vote/gamemode.dm @@ -6,7 +6,7 @@ show_leading = TRUE /datum/vote/gamemode/can_run(mob/creator, automatic) - if(!automatic && (!config.allow_vote_mode || !is_admin(creator))) + if(!automatic && (!get_config_value(/decl/config/toggle/vote_mode) || !is_admin(creator))) return FALSE // Admins and autovotes bypass the config setting. if(GAME_STATE >= RUNLEVEL_GAME) return FALSE @@ -20,7 +20,7 @@ /datum/vote/gamemode/setup_vote(mob/creator, automatic) ..() - choices += config.votable_modes + choices += get_config_value(/decl/config/lists/mode_votable) for (var/F in choices) var/decl/game_mode/M = decls_repository.get_decl_by_id(F, validate_decl_type = FALSE) if(!M) @@ -50,8 +50,8 @@ SSticker.gamemode_vote_results = result.Copy() /datum/vote/gamemode/check_toggle() - return config.allow_vote_mode ? "Allowed" : "Disallowed" + return get_config_value(/decl/config/toggle/vote_mode) ? "Allowed" : "Disallowed" /datum/vote/gamemode/toggle(mob/user) if(is_admin(user)) - config.allow_vote_mode = !config.allow_vote_mode \ No newline at end of file + toggle_config_value(/decl/config/toggle/vote_mode) diff --git a/code/datums/vote/map.dm b/code/datums/vote/map.dm index 6eccbb34d31..9e64ac63bcb 100644 --- a/code/datums/vote/map.dm +++ b/code/datums/vote/map.dm @@ -2,7 +2,7 @@ name = "map" /datum/vote/map/can_run(mob/creator, automatic) - if(!config.allow_map_switching) + if(!get_config_value(/decl/config/toggle/allow_map_switching)) return FALSE if(!automatic && !is_admin(creator)) return FALSE // Must be an admin. diff --git a/code/datums/vote/restart.dm b/code/datums/vote/restart.dm index a3e49a04fbb..75a564d6d59 100644 --- a/code/datums/vote/restart.dm +++ b/code/datums/vote/restart.dm @@ -6,7 +6,7 @@ results_length = 1 /datum/vote/restart/can_run(mob/creator, automatic) - if(!automatic && !config.allow_vote_restart && !is_admin(creator)) + if(!automatic && !get_config_value(/decl/config/toggle/vote_restart) && !is_admin(creator)) return FALSE // Admins and autovotes bypass the config setting. return ..() diff --git a/code/datums/vote/transfer.dm b/code/datums/vote/transfer.dm index 52de1c72e4c..b009162dcc4 100644 --- a/code/datums/vote/transfer.dm +++ b/code/datums/vote/transfer.dm @@ -7,7 +7,7 @@ return if(!SSevac.evacuation_controller || !SSevac.evacuation_controller.should_call_autotransfer_vote()) return FALSE - if(!automatic && !config.allow_vote_restart && !is_admin(creator)) + if(!automatic && !get_config_value(/decl/config/toggle/vote_restart) && !is_admin(creator)) return FALSE // Admins and autovotes bypass the config setting. if(check_rights(R_INVESTIGATE, 0, creator)) return //Mods bypass further checks. @@ -18,13 +18,13 @@ return FALSE /datum/vote/transfer/setup_vote(mob/creator, automatic) - choices = list("Initiate Crew Transfer", "Extend the Round ([config.vote_autotransfer_interval / 600] minutes)") - if (config.allow_extra_antags && SSvote.is_addantag_allowed(creator, automatic)) + choices = list("Initiate Crew Transfer", "Extend the Round ([get_config_value(/decl/config/num/vote_autotransfer_interval) / 600] minutes)") + if (get_config_value(/decl/config/toggle/allow_extra_antags) && SSvote.is_addantag_allowed(creator, automatic)) choices += "Add Antagonist" ..() /datum/vote/transfer/handle_default_votes() - if(config.vote_no_default) + if(get_config_value(/decl/config/num/vote_no_default)) return var/factor = 0.5 switch(world.time / (1 MINUTE)) @@ -52,12 +52,12 @@ /datum/vote/transfer/mob_not_participating(mob/user) if((. = ..())) return - if(config.vote_no_dead_crew_transfer) + if(get_config_value(/decl/config/num/vote_no_dead_crew_transfer)) return !isliving(user) || ismouse(user) || isdrone(user) /datum/vote/transfer/check_toggle() - return config.allow_vote_restart ? "Allowed" : "Disallowed" + return get_config_value(/decl/config/toggle/vote_restart) ? "Allowed" : "Disallowed" /datum/vote/transfer/toggle(mob/user) if(is_admin(user)) - config.allow_vote_restart = !config.allow_vote_restart \ No newline at end of file + toggle_config_value(/decl/config/toggle/vote_restart) \ No newline at end of file diff --git a/code/datums/vote/vote.dm b/code/datums/vote/vote.dm index 27601e02718..df85565327f 100644 --- a/code/datums/vote/vote.dm +++ b/code/datums/vote/vote.dm @@ -53,7 +53,7 @@ /datum/vote/proc/start_vote() start_time = world.time - time_set = (time_set ? time_set : config.vote_period) + time_set = (time_set ? time_set : get_config_value(/decl/config/num/vote_period)) time_remaining = round(time_set / 10) status = VOTE_STATUS_ACTIVE @@ -68,7 +68,7 @@ //Modifies the vote totals based on non-voting mobs. /datum/vote/proc/handle_default_votes() - if(!config.vote_no_default) + if(!get_config_value(/decl/config/num/vote_no_default)) return length(global.clients) - length(voted) //Number of non-voters (might not be active, though; should be revisited if the config option is used. This is legacy code.) /datum/vote/proc/tally_result() @@ -130,7 +130,7 @@ // Checks if the mob is participating in the round sufficiently to vote, as per config settings. /datum/vote/proc/mob_not_participating(mob/voter) - if(config.vote_no_dead && voter.stat == DEAD && !voter.client.holder) + if(get_config_value(/decl/config/num/vote_no_dead) && voter.stat == DEAD && !voter.client.holder) return 1 //null = no toggle set. This is for UI purposes; a text return will give a link (toggle; currently "return") in the vote panel. diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index d8e207e3a19..951e79f60e8 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -170,7 +170,7 @@ var/global/const/AIRLOCK_WIRE_SPEAKER = 4096 A.aiControlDisabled = 1 else if(A.aiControlDisabled == -1) A.aiControlDisabled = 2 - addtimer(CALLBACK(src, .proc/reset_ai_control, A), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_ai_control), A), 1 SECOND) if(AIRLOCK_WIRE_ELECTRIFY) //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index b8b7817e339..ddcce1fc75e 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -84,13 +84,13 @@ var/global/const/AALARM_WIRE_AALARM = 16 if(A.shorted == 0) A.shorted = 1 A.update_icon() - addtimer(CALLBACK(src, .proc/clear_shorted), 20 MINUTES) + addtimer(CALLBACK(src, PROC_REF(clear_shorted)), 20 MINUTES) if (AALARM_WIRE_AI_CONTROL) if (A.aidisabled == 0) A.aidisabled = 1 A.updateDialog() - addtimer(CALLBACK(src, .proc/clear_ai_disabled, 10 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_ai_disabled), 10 SECONDS)) if(AALARM_WIRE_SYPHON) if(A.mode == 1) // AALARM_MODE_SCRUB diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 4dbafcde5e4..b7d1221c081 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -5,7 +5,7 @@ /datum/wires/apc holder_type = /obj/machinery/power/apc - wire_count = 4 + wire_count = 4 descriptions = list( new /datum/wire_description(APC_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), new /datum/wire_description(APC_WIRE_MAIN_POWER1, "This wire seems to be carrying a heavy current."), @@ -48,17 +48,17 @@ if(APC_WIRE_IDSCAN) A.locked = 0 - addtimer(CALLBACK(src, .proc/reset_locked), 30 SECONDS) + addtimer(CALLBACK(src, PROC_REF(reset_locked)), 30 SECONDS) if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) if(A.shorted == 0) A.shorted = 1 - addtimer(CALLBACK(src, .proc/reset_shorted), 2 MINUTES) - + addtimer(CALLBACK(src, PROC_REF(reset_shorted)), 2 MINUTES) + if (APC_WIRE_AI_CONTROL) if (A.aidisabled == 0) A.aidisabled = 1 - addtimer(CALLBACK(src, .proc/reset_ai_disabled), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_ai_disabled)), 1 SECOND) /datum/wires/apc/UpdateCut(var/index, var/mended) var/obj/machinery/power/apc/A = holder diff --git a/code/datums/wires/fabricator.dm b/code/datums/wires/fabricator.dm index f19c27f9e41..a9a040f6fee 100644 --- a/code/datums/wires/fabricator.dm +++ b/code/datums/wires/fabricator.dm @@ -60,21 +60,21 @@ A.fab_status_flags &= ~FAB_HACKED else A.fab_status_flags |= FAB_HACKED - addtimer(CALLBACK(src, .proc/reset_flag, index, FAB_HACKED), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(reset_flag), index, FAB_HACKED), 5 SECONDS) if(AUTOLATHE_SHOCK_WIRE) if(A.fab_status_flags & FAB_SHOCKED) A.fab_status_flags &= ~FAB_SHOCKED else A.fab_status_flags |= FAB_SHOCKED - addtimer(CALLBACK(src, .proc/reset_flag, index, FAB_SHOCKED), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(reset_flag), index, FAB_SHOCKED), 5 SECONDS) if(AUTOLATHE_DISABLE_WIRE) if(A.fab_status_flags & FAB_DISABLED) A.fab_status_flags &= ~FAB_DISABLED else A.fab_status_flags |= FAB_DISABLED - addtimer(CALLBACK(src, .proc/reset_flag, index, FAB_DISABLED), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(reset_flag), index, FAB_DISABLED), 5 SECONDS) #undef AUTOLATHE_HACK_WIRE #undef AUTOLATHE_SHOCK_WIRE diff --git a/code/datums/wires/nuclearbomb.dm b/code/datums/wires/nuclearbomb.dm index 0b7a0ca2397..06c679edfd2 100644 --- a/code/datums/wires/nuclearbomb.dm +++ b/code/datums/wires/nuclearbomb.dm @@ -53,14 +53,14 @@ var/global/const/NUCLEARBOMB_WIRE_SAFETY = 4 N.lighthack = !N.lighthack N.update_icon() toggle_hacked() - addtimer(CALLBACK(src, .proc/toggle_hacked), 10 SECONDS) + addtimer(CALLBACK(src, PROC_REF(toggle_hacked)), 10 SECONDS) if(NUCLEARBOMB_WIRE_TIMING) if(N.timing) log_and_explode("pulsed a nuclear bomb's detonation wire, causing it to explode.") if(NUCLEARBOMB_WIRE_SAFETY) N.safety = !N.safety - addtimer(CALLBACK(src, .proc/toggle_safety), 10 SECONDS) + addtimer(CALLBACK(src, PROC_REF(toggle_safety)), 10 SECONDS) /datum/wires/nuclearbomb/UpdateCut(var/index, var/mended) var/obj/machinery/nuclearbomb/N = holder diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index cde8369c4fc..22b951263c5 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -17,12 +17,6 @@ var/global/const/WIRE_TRANSMIT = 4 return 1 return 0 -/datum/wires/radio/GetInteractWindow(mob/user) - var/obj/item/radio/R = holder - . += ..() - if(R.cell) - . += "
    Remove cell
    " - /datum/wires/radio/UpdatePulsed(var/index) var/obj/item/radio/R = holder switch(index) diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm index 16e0883f842..15eff146d15 100644 --- a/code/datums/wires/smes.dm +++ b/code/datums/wires/smes.dm @@ -63,7 +63,7 @@ var/global/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to r if(SMES_WIRE_RCON) if(S.RCon) S.RCon = 0 - addtimer(CALLBACK(src, .proc/reset_rcon), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_rcon)), 1 SECOND) if(SMES_WIRE_INPUT) S.toggle_input() if(SMES_WIRE_OUTPUT) @@ -73,4 +73,4 @@ var/global/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to r if(SMES_WIRE_FAILSAFES) if(S.safeties_enabled) S.safeties_enabled = 0 - addtimer(CALLBACK(src, .proc/reset_safeties), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_safeties)), 1 SECOND) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index e57cb124683..3aebc6bbe44 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -23,6 +23,11 @@ var/global/list/wireColourNames = list("darkred" = "dark red") var/list/descriptions // Descriptions of wires (datum/wire_description) for use with examining. +SAVED_VAR(/datum/wires, wire_count) +SAVED_VAR(/datum/wires, wires_status) +SAVED_VAR(/datum/wires, wires) +SAVED_VAR(/datum/wires, signallers) + /datum/wires/New(var/atom/holder) ..() src.holder = holder diff --git a/code/game/alpha_masks.dm b/code/game/alpha_masks.dm new file mode 100644 index 00000000000..5f0a453cd47 --- /dev/null +++ b/code/game/alpha_masks.dm @@ -0,0 +1,80 @@ +var/global/list/_alpha_masks = list() +/proc/get_or_create_alpha_mask(atom/movable/owner) + if(!global._alpha_masks[owner]) + var/atom/movable/alpha_mask/mask = new + mask.set_owner(owner) + global._alpha_masks[owner] = mask + return mask + return global._alpha_masks[owner] + +// Dummy overlay used to follow mobs around, separate from their icon generation for rendering purposes. +/atom/movable/alpha_mask + name = "" + simulated = FALSE + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + default_pixel_x = -16 + default_pixel_y = -16 + var/atom/movable/owner + +// Set our appearance state to avoid showing up in right-click. +/atom/movable/alpha_mask/Initialize() + . = ..() + verbs.Cut() + name = "" + appearance_flags &= ~KEEP_TOGETHER + appearance_flags |= KEEP_APART | RESET_TRANSFORM + +/atom/movable/alpha_mask/Destroy() + if(owner) + global._alpha_masks -= owner + owner = null + return ..() + +// Update events to keep track of owner. +/atom/movable/alpha_mask/proc/set_owner(atom/movable/new_owner) + if(owner) + events_repository.unregister(/decl/observ/moved, owner, src) + events_repository.unregister(/decl/observ/destroyed, owner, src) + owner = new_owner + if(owner) + events_repository.register(/decl/observ/moved, owner, src, TYPE_PROC_REF(/atom/movable/alpha_mask, follow_owner)) + events_repository.register(/decl/observ/destroyed, owner, src, TYPE_PROC_REF(/datum, qdel_self)) + follow_owner() + +// Callback proc to move the overlay onto the correct turf. +/atom/movable/alpha_mask/proc/follow_owner() + if(!owner) + qdel(src) + return + forceMove(get_turf(owner.loc)) + +// Override proc to change the overlays used by an atom type. +/atom/movable/proc/get_turf_alpha_mask_states() + return 'icons/effects/alpha_mask.dmi' + +// Proc called by /turf/Entered() to update a mob's mask overlay. +/atom/movable/proc/update_turf_alpha_mask() + set waitfor = FALSE + if(!simulated || updating_turf_alpha_mask) + return + updating_turf_alpha_mask = TRUE + sleep(0) + updating_turf_alpha_mask = FALSE + if(!src || QDELETED(src)) + return + var/mask_state = (get_turf(src))?.get_movable_alpha_mask_state(src) + if(mask_state) + var/atom/movable/alpha_mask/mask = get_or_create_alpha_mask(src) + if(mask) + var/mask_icon_file = get_turf_alpha_mask_states() || 'icons/effects/alpha_mask.dmi' + mask.render_target = "*render_\ref[src]" + if(mask.icon != mask_icon_file) + mask.icon = mask_icon_file + if(mask.icon_state != mask_state) + mask.icon_state = mask_state + if(add_filter("turf_alpha_mask", 1, list(type = "alpha", render_source = mask.render_target, flags = MASK_INVERSE)) && !(appearance_flags & KEEP_TOGETHER)) + update_appearance_flags(add_flags = KEEP_TOGETHER) + else + update_appearance_flags(remove_flags = KEEP_TOGETHER) + else if(length(filters) && remove_filter("turf_alpha_mask") && (appearance_flags & KEEP_TOGETHER)) + update_appearance_flags(remove_flags = KEEP_TOGETHER) diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 6a4919f951f..6aabe004cbe 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -92,7 +92,7 @@ get_starting_locations() if(!name_plural) name_plural = name - if(config.protect_roles_from_antagonist) + if(get_config_value(/decl/config/toggle/protect_roles_from_antagonist)) restricted_jobs |= protected_jobs if(antaghud_indicator) if(!global.hud_icon_reference) @@ -136,10 +136,11 @@ // Prune restricted status. Broke it up for readability. // Note that this is done before jobs are handed out. + var/age_restriction = get_config_value(/decl/config/num/use_age_restriction_for_antags) for(var/datum/mind/player in mode.get_players_for_role(type)) if(ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) log_debug("[key_name(player)] is not eligible to become a [name]: Only ghosts may join as this role!") - else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) + else if(age_restriction && player.current.client.player_age < minimum_player_age) log_debug("[key_name(player)] is not eligible to become a [name]: Is only [player.current.client.player_age] day\s old, has to be [minimum_player_age] day\s!") else if(player.assigned_special_role) log_debug("[key_name(player)] is not eligible to become a [name]: They already have a special role ([player.get_special_role_name("unknown role")])!") @@ -159,10 +160,11 @@ var/candidates = list() // Keeping broken up for readability + var/age_restriction = get_config_value(/decl/config/num/use_age_restriction_for_antags) for(var/datum/mind/player in mode.get_players_for_role(type)) if(ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) continue - if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) + if(age_restriction && player.current.client.player_age < minimum_player_age) continue if(player.assigned_special_role) continue diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 8ecfb5a6c5b..df05b830089 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -60,7 +60,7 @@ if(faction_verb) player.current.verbs |= faction_verb - if(config.objectives_disabled == CONFIG_OBJECTIVE_VERB) + if(get_config_value(/decl/config/enum/objectives_disabled) == CONFIG_OBJECTIVE_VERB) player.current.verbs += /mob/proc/add_objectives if(player.current.client) diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index cd86a919362..10c459c2c7d 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -8,7 +8,7 @@ remove_antagonist(target) return 0 if(flags & ANTAG_CHOOSE_NAME) - INVOKE_ASYNC(src, .proc/set_antag_name, target.current) + INVOKE_ASYNC(src, PROC_REF(set_antag_name), target.current) if(move) place_mob(target.current) update_leader() @@ -75,7 +75,7 @@ to_chat(player.current, "[get_leader_welcome_text(player.current)]") else to_chat(player.current, "[get_welcome_text(player.current)]") - if (config.objectives_disabled == CONFIG_OBJECTIVE_NONE || !player.objectives.len) + if (get_config_value(/decl/config/enum/objectives_disabled) == CONFIG_OBJECTIVE_NONE || !player.objectives.len) to_chat(player.current, get_antag_text(player.current)) if((flags & ANTAG_HAS_NUKE) && !spawned_nuke) diff --git a/code/game/antagonist/antagonist_helpers.dm b/code/game/antagonist/antagonist_helpers.dm index 6f7cbf938ca..f882c80efcd 100644 --- a/code/game/antagonist/antagonist_helpers.dm +++ b/code/game/antagonist/antagonist_helpers.dm @@ -12,7 +12,7 @@ if(player.current && player.current.client) var/client/C = player.current.client // Limits antag status to clients above player age, if the age system is being used. - if(C && config.use_age_restriction_for_jobs && isnum(C.player_age) && isnum(min_player_age) && (C.player_age < min_player_age)) + if(C && get_config_value(/decl/config/num/use_age_restriction_for_jobs) && isnum(C.player_age) && isnum(min_player_age) && (C.player_age < min_player_age)) return FALSE if(player.assigned_job) if(is_type_in_list(player.assigned_job, blacklisted_jobs) || is_type_in_list(player.assigned_job, restricted_jobs)) diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index 019249fa72a..5e0f27068cf 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -1,12 +1,12 @@ /decl/special_role/proc/create_global_objectives(var/override=0) - if(config.objectives_disabled != CONFIG_OBJECTIVE_ALL && !override) + if(get_config_value(/decl/config/enum/objectives_disabled) != CONFIG_OBJECTIVE_ALL && !override) return 0 if(global_objectives && global_objectives.len) return 0 return 1 /decl/special_role/proc/create_objectives(var/datum/mind/player, var/override=0) - if(config.objectives_disabled != CONFIG_OBJECTIVE_ALL && !override) + if(get_config_value(/decl/config/enum/objectives_disabled) != CONFIG_OBJECTIVE_ALL && !override) return 0 if(create_global_objectives(override) || global_objectives.len) player.objectives |= global_objectives diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm index dc90996ea1a..a11cfa5ae17 100644 --- a/code/game/antagonist/outsider/ninja.dm +++ b/code/game/antagonist/outsider/ninja.dm @@ -18,7 +18,7 @@ rig_type = /obj/item/rig/light/ninja /decl/special_role/ninja/attempt_random_spawn() - if(config.ninjas_allowed) + if(get_config_value(/decl/config/toggle/ninjas_allowed)) ..() /decl/special_role/ninja/create_objectives(var/datum/mind/ninja) diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index 29b5bcc9722..b05e5f9a7b0 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -78,12 +78,21 @@ if(culture && prob(culture.subversive_potential)) dudes += man dudes -= player.current + for(var/datum/objective/obj in player.objectives) + dudes -= obj.owner?.current + dudes -= obj.target?.current if(length(dudes)) var/mob/living/carbon/human/M = pick(dudes) to_chat(player.current, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.") player.StoreMemory("Potential Collaborator: [M.real_name]", /decl/memory_options/system) + to_chat(M, "The subversive potential of your faction has been noticed, and you may be contacted for assistance soon...") + to_chat(M, "Code Phrase: [syndicate_code_phrase]") + to_chat(M, "Code Response: [syndicate_code_response]") + M.StoreMemory("Code Phrase: [syndicate_code_phrase]", /decl/memory_options/system) + M.StoreMemory("Code Response: [syndicate_code_response]", /decl/memory_options/system) + to_chat(M, "Listen for the code words, preferably in the order provided, during regular conversations to identify agents in need. Proceed with caution, however, as everyone is a potential foe.") to_chat(player.current, "Your employers provided you with the following information on how to identify possible allies:") to_chat(player.current, "Code Phrase: [syndicate_code_phrase]") diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 50538fdcb7c..b3bb3b34d83 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -13,6 +13,11 @@ var/global/list/areas = list() luminosity = 0 mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + // If set, will apply ambient light of this power to turfs under a ceiling. + var/interior_ambient_light_level + // If set, will apply ambient light of this colour to turfs under a ceiling. + var/interior_ambient_light_color + var/proper_name /// Automatically set by SetName and Initialize; cached result of strip_improper(name). var/holomap_color // Color of this area on the holomap. Must be a hex color (as string) or null. @@ -111,6 +116,9 @@ var/global/list/areas = list() var/area/old_area = get_area(T) if(old_area == A) return + + var/old_area_ambience = old_area?.interior_ambient_light_level + A.contents.Add(T) if(old_area) old_area.Exited(T, A) @@ -130,10 +138,14 @@ var/global/list/areas = list() adjacent_turf.update_registrations_on_adjacent_area_change() T.last_outside_check = OUTSIDE_UNCERTAIN - if(T.is_outside == OUTSIDE_AREA && T.is_outside() != old_outside) + var/outside_changed = T.is_outside() != old_outside + if(T.is_outside == OUTSIDE_AREA && outside_changed) T.update_weather() T.update_external_atmos_participation() + if(A.interior_ambient_light_level != old_area_ambience || outside_changed) + SSambience.queued |= T + /turf/proc/update_registrations_on_adjacent_area_change() for(var/obj/machinery/door/firedoor/door in src) door.update_area_registrations() @@ -404,7 +416,7 @@ var/global/list/mob/living/forced_ambiance_list = new /area/proc/throw_unbuckled_occupants(var/maxrange, var/speed, var/direction) for(var/mob/M in src) - addtimer(CALLBACK(src, .proc/throw_unbuckled_occupant, M, maxrange, speed, direction), 0) + addtimer(CALLBACK(src, PROC_REF(throw_unbuckled_occupant), M, maxrange, speed, direction), 0) /area/proc/throw_unbuckled_occupant(var/mob/M, var/maxrange, var/speed, var/direction) if(iscarbon(M)) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9e219cd6d10..5daca63dcb8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -2,7 +2,7 @@ /// (DEFINE) Determines where this atom sits in terms of turf plating. See misc.dm var/level = LEVEL_ABOVE_PLATING /// (BITFLAG) See flags.dm - var/atom_flags = ATOM_FLAG_NO_TEMP_CHANGE + var/atom_flags = 0 /// (FLOAT) The world.time that this atom last bumped another. Used mostly by mobs. var/last_bumped = 0 /// (BITFLAG) See flags.dm @@ -52,6 +52,15 @@ var/tmp/default_pixel_z var/tmp/default_pixel_w + // Health vars largely used by obj and mob. + var/current_health + var/max_health + + /// Does this atom respond to changes in local temperature via the `temperature` var? + var/temperature_sensitive = FALSE + +/atom/proc/get_max_health() + return max_health /** Adjust variables prior to Initialize() based on the map @@ -81,6 +90,13 @@ RETURN_TYPE(/datum/gas_mixture) return null +/** + Merge an exhaled air volume into air contents.. +*/ +/atom/proc/merge_exhaled_volume(datum/gas_mixture/exhaled) + var/datum/gas_mixture/environment = return_air() + environment?.merge(exhaled) + /** Get the air of this atom or its location's air @@ -143,7 +159,7 @@ Handle an atom entering this atom's proximity Called when an atom enters this atom's proximity. Both this and the other atom - need to have the PROXMOVE flag (as it helps reduce lag). + need to have the MOVABLE_FLAG_PROXMOVE flag (as it helps reduce lag). - `AM`: The atom entering proximity - Return: `TRUE` if proximity should continue to be handled, otherwise `FALSE` @@ -349,6 +365,15 @@ for(var/atom/movable/AM in contents) if(!QDELETED(AM) && AM.simulated) LAZYADD(., AM) + if(has_extension(src, /datum/extension/loaded_cell)) + var/datum/extension/loaded_cell/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + var/cell = cell_loaded?.get_cell() + if(cell) + LAZYREMOVE(., cell) + +// Return a list of all temperature-sensitive atoms, defaulting to above. +/atom/proc/get_contained_temperature_sensitive_atoms() + return get_contained_external_atoms() /// Dump the contents of this atom onto its loc /atom/proc/dump_contents() @@ -421,11 +446,12 @@ - `exposed_volume`: The volume of the air */ /atom/proc/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return + SHOULD_CALL_PARENT(TRUE) + handle_external_heating(exposed_temperature) /// Handle this atom being destroyed through melting -/atom/proc/melt() - return +/atom/proc/handle_melting(list/meltable_materials) + SHOULD_CALL_PARENT(TRUE) /** Handle this atom being exposed to lava. Calls qdel() by default @@ -443,12 +469,14 @@ - `AM`: The atom hitting this atom - `TT`: A datum wrapper for a thrown atom, containing important info + - Returns: TRUE if successfully hit the atom. */ /atom/proc/hitby(atom/movable/AM, var/datum/thrownthing/TT) SHOULD_CALL_PARENT(TRUE) if(isliving(AM)) var/mob/living/M = AM M.apply_damage(TT.speed*5, BRUTE) + return TRUE /** Attempt to add blood to this atom @@ -458,7 +486,7 @@ - `M?`: The mob whose blood will be used - Returns: TRUE if made bloody, otherwise FALSE */ -/atom/proc/add_blood(mob/living/carbon/human/M) +/atom/proc/add_blood(mob/living/M, amount = 2, list/blood_data) if(atom_flags & ATOM_FLAG_NO_BLOOD) return FALSE @@ -472,7 +500,7 @@ M.dna = new /datum/dna() M.dna.real_name = M.real_name M.check_dna() - blood_color = M.species.get_blood_color(M) + blood_color = M.get_blood_color() return TRUE /** @@ -480,7 +508,7 @@ - Return: `TRUE` if blood with DNA was removed */ -/atom/proc/clean_blood() +/atom/proc/clean(clean_forensics = TRUE) SHOULD_CALL_PARENT(TRUE) if(!simulated) return @@ -494,6 +522,7 @@ forensics.remove_data(/datum/forensics/blood_dna) forensics.remove_data(/datum/forensics/gunshot_residue) return TRUE + return FALSE /// Only used by Sandbox_Spacemove, which is used by nothing /// - TODO: Remove this @@ -716,43 +745,50 @@ if(M.lying) return //No spamming this on people. SET_STATUS_MAX(M, STAT_WEAK, 3) - to_chat(M, "You topple as \the [src] moves under you!") - + to_chat(M, SPAN_DANGER("You topple as \the [src] moves under you!")) if(prob(25)) - var/damage = rand(15,30) - var/mob/living/carbon/human/H = M - if(!istype(H)) - to_chat(H, "You land heavily!") + var/obj/item/organ/external/affecting = SAFEPICK(M.get_external_organs()) + if(!affecting) + to_chat(M, SPAN_DANGER("You land heavily!")) M.adjustBruteLoss(damage) - return - - var/obj/item/organ/external/affecting = pick(H.get_external_organs()) - if(affecting) - to_chat(M, "You land heavily on your [affecting.name]!") + else + to_chat(M, SPAN_DANGER("You land heavily on your [affecting.name]!")) affecting.take_external_damage(damage, 0) if(affecting.parent) affecting.parent.add_autopsy_data("Misadventure", damage) - else - to_chat(H, "You land heavily!") - H.adjustBruteLoss(damage) - - H.UpdateDamageIcon() - H.updatehealth() - return /// Get the current color of this atom. /atom/proc/get_color() return color -/// Set the color of this atom to `new_color`. -/atom/proc/set_color(new_color) - color = new_color +/* Set the atom colour. This is a stub effectively due to the broad use of direct setting. */ +// TODO: implement this everywhere that it should be used instead of direct setting. +/atom/proc/set_color(var/new_color) + if(isnull(new_color)) + return reset_color() + if(color != new_color) + color = new_color + return TRUE + return FALSE + +/atom/proc/reset_color() + if(!isnull(color)) + color = null + return TRUE + return FALSE + +/atom/proc/set_alpha(var/new_alpha) + if(alpha != new_alpha) + alpha = new_alpha + return TRUE + return FALSE /// Get any power cell associated with this atom. /atom/proc/get_cell() RETURN_TYPE(/obj/item/cell) - return + var/datum/extension/loaded_cell/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + return cell_loaded?.get_cell() /** Get any radio associated with this atom. @@ -865,3 +901,10 @@ /atom/proc/get_overhead_text_y_offset() return 0 + +/atom/proc/can_be_injected_by(var/atom/injector) + return FALSE + +/atom/proc/OnSimulatedTurfEntered(turf/T, old_loc) + set waitfor = FALSE + return diff --git a/code/game/atoms_fluids.dm b/code/game/atoms_fluids.dm index 3211271a2e5..366f80e06c7 100644 --- a/code/game/atoms_fluids.dm +++ b/code/game/atoms_fluids.dm @@ -3,13 +3,11 @@ /atom/proc/fluid_act(var/datum/reagents/fluids) SHOULD_CALL_PARENT(TRUE) - if(reagents && fluids?.total_volume >= FLUID_SHALLOW && ATOM_IS_OPEN_CONTAINER(src)) + // TODO: fix food open container behavior jesus christ + if(reagents && reagents != fluids && fluids?.total_volume >= FLUID_SHALLOW && ATOM_IS_OPEN_CONTAINER(src) && !istype(src, /obj/item/chems/food)) reagents.trans_to_holder(fluids, reagents.total_volume) fluids.trans_to_holder(reagents, min(fluids.total_volume, reagents.maximum_volume)) -/atom/proc/return_fluid() - return null - /atom/proc/check_fluid_depth(var/min) return 0 diff --git a/code/game/atoms_init.dm b/code/game/atoms_init.dm index 642aaeeee7c..dd18cefaccd 100644 --- a/code/game/atoms_init.dm +++ b/code/game/atoms_init.dm @@ -136,13 +136,18 @@ QDEL_NULL(bound_overlay) vis_locs = null //clears this atom out of all vis_contents - clear_vis_contents(src) + clear_vis_contents() + + if(!isnull(updating_turf_alpha_mask)) + var/atom/movable/mask = global._alpha_masks[src] + if(!QDELETED(mask)) + qdel(mask) /atom/GetCloneArgs() return list(loc) /atom/PopulateClone(atom/clone) - //Not entirely sure about icon stuff. Some legacy things would need it copied, but not more recently coded atoms.. + //Not entirely sure about icon stuff. Some legacy things would need it copied, but not more recently coded atoms. clone.appearance = appearance clone.set_invisibility(invisibility) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b6bda7218a4..92a631e86a6 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -10,7 +10,7 @@ var/buckle_layer_above = FALSE var/buckle_dir = 0 var/buckle_lying = -1 // bed-like behavior, forces mob.lying = buckle_lying if != -1 - var/buckle_pixel_shift // ex. @"{'x':0,'y':0,'z':0}" //where the buckled mob should be pixel shifted to, or null for no pixel shift control + var/buckle_pixel_shift // ex. @'{"x":0,"y":0,"z":0}' //where the buckled mob should be pixel shifted to, or null for no pixel shift control var/buckle_require_restraints = 0 // require people to be cuffed before being able to buckle. eg: pipes var/buckle_require_same_tile = FALSE var/buckle_sound @@ -37,6 +37,9 @@ var/inertia_move_delay = 5 var/atom/movable/inertia_ignore + // Marker for alpha mask update process. null == never update, TRUE == currently updating, FALSE == finished updating. + var/updating_turf_alpha_mask = null + // This proc determines if the instance is preserved when the process() despawn of crypods occurs. /atom/movable/proc/preserve_in_cryopod(var/obj/machinery/cryopod/pod) return FALSE @@ -88,12 +91,13 @@ return TRUE /atom/movable/hitby(var/atom/movable/AM, var/datum/thrownthing/TT) - ..() + . = ..() + if(. && density && prob(50)) + do_simple_ranged_interaction() process_momentum(AM,TT) /atom/movable/proc/process_momentum(var/atom/movable/AM, var/datum/thrownthing/TT)//physic isn't an exact science . = momentum_power(AM,TT) - if(.) momentum_do(.,TT,AM) @@ -144,7 +148,7 @@ if (A && yes) A.last_bumped = world.time - INVOKE_ASYNC(A, /atom/proc/Bumped, src) // Avoids bad actors sleeping or unexpected side effects, as the legacy behavior was to spawn here + INVOKE_ASYNC(A, TYPE_PROC_REF(/atom, Bumped), src) // Avoids bad actors sleeping or unexpected side effects, as the legacy behavior was to spawn here ..() /atom/movable/proc/forceMove(atom/destination) @@ -254,6 +258,15 @@ L = thing L.source_atom.update_light() + // Z-Mimic. + if (bound_overlay) + // The overlay will handle cleaning itself up on non-openspace turfs. + bound_overlay.forceMove(get_step(src, UP)) + if (bound_overlay.dir != dir) + bound_overlay.set_dir(dir) + else if (isturf(loc) && (!old_loc || !TURF_IS_MIMICKING(old_loc)) && MOVABLE_SHALL_MIMIC(src)) + SSzcopy.discover_movable(src) + //called when src is thrown into hit_atom /atom/movable/proc/throw_impact(atom/hit_atom, var/datum/thrownthing/TT) SHOULD_CALL_PARENT(TRUE) @@ -261,6 +274,7 @@ hit_atom.hitby(src, TT) /atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called. + . = TRUE if (!target || speed <= 0 || QDELETED(src) || (target.z != src.z)) return FALSE @@ -339,7 +353,7 @@ /atom/movable/proc/can_buckle_mob(var/mob/living/dropping) . = (can_buckle && istype(dropping) && !dropping.buckled && !dropping.anchored && !dropping.buckled_mob && !buckled_mob) -/atom/movable/receive_mouse_drop(atom/dropping, mob/living/user) +/atom/movable/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && can_buckle_mob(dropping)) user_buckle_mob(dropping, user) @@ -461,3 +475,60 @@ /atom/movable/proc/get_object_size() return ITEM_SIZE_NORMAL +/atom/movable/proc/try_burn_wearer(var/mob/living/holder, var/held_slot, var/delay = 0) + set waitfor = FALSE + if(delay) + sleep(delay) + if(!held_slot || !istype(holder) || QDELETED(holder) || loc != holder) + return + + // TODO: put these flags on the inventory slot or something. + var/check_slots + if(held_slot in global.all_hand_slots) + check_slots = SLOT_HANDS + else if(held_slot == BP_MOUTH || held_slot == BP_HEAD) + check_slots = SLOT_FACE + + if(check_slots) + for(var/obj/item/covering in holder.get_covering_equipped_items(check_slots)) + if(covering.max_heat_protection_temperature >= temperature) + return + + // TODO: less simplistic messages and logic + var/datum/inventory_slot/slot = held_slot && holder.get_inventory_slot_datum(held_slot) + var/check_organ = slot?.requires_organ_tag + if(temperature >= holder.get_mob_temperature_threshold(HEAT_LEVEL_3, check_organ)) + to_chat(holder, SPAN_DANGER("You are burned by \the [src]!")) + else if(temperature >= holder.get_mob_temperature_threshold(HEAT_LEVEL_2, check_organ)) + if(prob(10)) + to_chat(holder, SPAN_DANGER("\The [src] is uncomfortably hot...")) + return + else if(temperature <= holder.get_mob_temperature_threshold(COLD_LEVEL_3, check_organ)) + to_chat(holder, SPAN_DANGER("You are frozen by \the [src]!")) + else if(temperature <= holder.get_mob_temperature_threshold(COLD_LEVEL_2, check_organ)) + if(prob(10)) + to_chat(holder, SPAN_DANGER("\The [src] is uncomfortably cold...")) + return + else + return + + var/my_size = get_object_size() + var/burn_damage = rand(my_size, round(my_size * 1.5)) + var/obj/item/organ/external/organ = check_organ && holder.get_organ(check_organ) + if(istype(organ)) + organ.take_external_damage(0, burn_damage) + else + holder.adjustFireLoss(burn_damage) + if(held_slot in holder.get_held_item_slots()) + holder.drop_from_inventory(src) + else + . = null // We might keep burning them next time. + +/atom/movable/proc/update_appearance_flags(add_flags, remove_flags) + var/old_appearance = appearance_flags + if(add_flags) + appearance_flags |= add_flags + if(remove_flags) + appearance_flags &= ~remove_flags + return old_appearance != appearance_flags + diff --git a/code/game/atoms_movable_grabs.dm b/code/game/atoms_movable_grabs.dm index d5380686be2..d3489041b9b 100644 --- a/code/game/atoms_movable_grabs.dm +++ b/code/game/atoms_movable_grabs.dm @@ -27,5 +27,12 @@ return try_make_grab(user) return ..() -/atom/movable/proc/try_make_grab(var/mob/living/user, var/defer_hand = FALSE) - return istype(user) && CanPhysicallyInteract(user) && !user.lying && user.make_grab(src) +/atom/movable/proc/try_make_grab(mob/living/user, defer_hand = FALSE) + if(istype(user) && CanPhysicallyInteract(user) && !user.lying) + if(user == buckled_mob) + return give_control_grab(buckled_mob) + return user.make_grab(src, defer_hand = defer_hand) + return null + +/atom/movable/proc/give_control_grab(var/mob/M) + return diff --git a/code/game/atoms_movable_interactions.dm b/code/game/atoms_movable_interactions.dm index dbc52b71a14..110c09afb82 100644 --- a/code/game/atoms_movable_interactions.dm +++ b/code/game/atoms_movable_interactions.dm @@ -1,6 +1,6 @@ /atom/movable/get_alt_interactions(var/mob/user) . = ..() - if(config.expanded_alt_interactions) + if(get_config_value(/decl/config/toggle/expanded_alt_interactions)) LAZYADD(., list( /decl/interaction_handler/look, /decl/interaction_handler/grab diff --git a/code/game/atoms_movable_overlay.dm b/code/game/atoms_movable_overlay.dm index a50abbb36a8..9d286c7913f 100644 --- a/code/game/atoms_movable_overlay.dm +++ b/code/game/atoms_movable_overlay.dm @@ -23,8 +23,8 @@ events_repository.register(/decl/observ/moved, master, src, follow_proc) SetInitLoc() - events_repository.register(/decl/observ/destroyed, master, src, /datum/proc/qdel_self) - events_repository.register(/decl/observ/dir_set, master, src, /atom/proc/recursive_dir_set) + events_repository.register(/decl/observ/destroyed, master, src, TYPE_PROC_REF(/datum, qdel_self)) + events_repository.register(/decl/observ/dir_set, master, src, TYPE_PROC_REF(/atom, recursive_dir_set)) . = ..() diff --git a/code/game/atoms_temperature.dm b/code/game/atoms_temperature.dm index 6b884af473b..609bac2f7b2 100644 --- a/code/game/atoms_temperature.dm +++ b/code/game/atoms_temperature.dm @@ -1,8 +1,7 @@ -#define MIN_TEMPERATURE_COEFFICIENT 1 -#define MAX_TEMPERATURE_COEFFICIENT 10 - /atom + /// What is this atom's current temperature? var/temperature = T20C + /// How rapidly does this atom equalize with ambient temperature? var/temperature_coefficient = MAX_TEMPERATURE_COEFFICIENT /atom/movable/Entered(var/atom/movable/atom, var/atom/old_loc) @@ -18,26 +17,30 @@ /turf temperature_coefficient = MIN_TEMPERATURE_COEFFICIENT -/obj/Initialize(mapload) - . = ..() - temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient - create_matter() - //Only apply directional offsets if the mappers haven't set any offsets already - if(!pixel_x && !pixel_y && !pixel_w && !pixel_z) - update_directional_offset() +// If this is a simulated atom, adjust our temperature. +// This will eventually propagate to our contents via ProcessAtomTemperature() +/atom/proc/handle_external_heating(var/adjust_temp, var/obj/item/heated_by, var/mob/user) + + if(!ATOM_SHOULD_TEMPERATURE_ENQUEUE(src)) + return FALSE + + var/diff_temp = round(adjust_temp - temperature, 0.1) + if(diff_temp <= 0.1) + return FALSE -/obj/proc/HandleObjectHeating(var/obj/item/heated_by, var/mob/user, var/adjust_temp) - if(ATOM_SHOULD_TEMPERATURE_ENQUEUE(src)) + // Show a little message for people heating beakers with welding torches. + if(user && heated_by) visible_message(SPAN_NOTICE("\The [user] carefully heats \the [src] with \the [heated_by].")) - var/diff_temp = (adjust_temp - temperature) - if(diff_temp >= 0) - var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0) - ADJUST_ATOM_TEMPERATURE(src, min(adjust_temp, altered_temp)) + // Update our own heat. + var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0) + ADJUST_ATOM_TEMPERATURE(src, min(adjust_temp, altered_temp)) + return TRUE /mob/Initialize() . = ..() temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - FLOOR(mob_size/4), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient +// TODO: move mob bodytemperature onto this proc. /atom/proc/ProcessAtomTemperature() SHOULD_NOT_SLEEP(TRUE) @@ -52,13 +55,16 @@ else if(loc) adjust_temp = loc.temperature + // Determine if our temperature needs to change. + var/old_temp = temperature var/diff_temp = adjust_temp - temperature if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD) var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0) ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp)) else temperature = adjust_temp - return PROCESS_KILL + . = PROCESS_KILL -#undef MIN_TEMPERATURE_COEFFICIENT -#undef MAX_TEMPERATURE_COEFFICIENT + // If our temperature changed, our contents probably want to know about it. + if(temperature != old_temp) + queue_temperature_atoms(get_contained_temperature_sensitive_atoms()) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 0121e88e2d2..5ffc68622db 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -17,23 +17,15 @@ #define DNA_HARD_BOUNDS list(1,3490,3500,4095) // UI Indices (can change to mutblock style, if desired) -#define DNA_UI_HAIR_R 1 -#define DNA_UI_HAIR_G 2 -#define DNA_UI_HAIR_B 3 -#define DNA_UI_BEARD_R 4 -#define DNA_UI_BEARD_G 5 -#define DNA_UI_BEARD_B 6 -#define DNA_UI_SKIN_TONE 7 -#define DNA_UI_SKIN_R 8 -#define DNA_UI_SKIN_G 9 -#define DNA_UI_SKIN_B 10 -#define DNA_UI_EYES_R 11 -#define DNA_UI_EYES_G 12 -#define DNA_UI_EYES_B 13 -#define DNA_UI_GENDER 14 -#define DNA_UI_BEARD_STYLE 15 -#define DNA_UI_HAIR_STYLE 16 -#define DNA_UI_LENGTH 16 // Update this when you add something, or you WILL break shit. +#define DNA_UI_SKIN_TONE 1 +#define DNA_UI_SKIN_R 2 +#define DNA_UI_SKIN_G 3 +#define DNA_UI_SKIN_B 4 +#define DNA_UI_EYES_R 5 +#define DNA_UI_EYES_G 6 +#define DNA_UI_EYES_B 7 +#define DNA_UI_GENDER 8 +#define DNA_UI_LENGTH 8 // Update this when you add something, or you WILL break shit. #define DNA_SE_LENGTH 27 // For later: @@ -80,20 +72,31 @@ var/global/list/assigned_blocks[DNA_SE_LENGTH] // New stuff var/species - var/list/body_markings = list() + var/list/heritable_sprite_accessories = list() var/lineage //#TODO: Keep track of bodytype!!!!! +SAVED_VAR(/datum/dna, uni_identity) +SAVED_VAR(/datum/dna, struc_enzymes) +SAVED_VAR(/datum/dna, unique_enzymes) +SAVED_VAR(/datum/dna, UI) +SAVED_VAR(/datum/dna, SE) +SAVED_VAR(/datum/dna, b_type) +SAVED_VAR(/datum/dna, real_name) +SAVED_VAR(/datum/dna, species) +SAVED_VAR(/datum/dna, heritable_sprite_accessories) +SAVED_VAR(/datum/dna, lineage) + // Make a copy of this strand. /datum/dna/PopulateClone(datum/dna/clone) clone = ..() - clone.lineage = lineage - clone.unique_enzymes = unique_enzymes - clone.fingerprint = fingerprint - clone.b_type = b_type - clone.real_name = real_name - clone.species = species || global.using_map.default_species - clone.body_markings = deepCopyList(body_markings) + clone.lineage = lineage + clone.unique_enzymes = unique_enzymes + clone.fingerprint = fingerprint + clone.b_type = b_type + clone.real_name = real_name + clone.species = species || global.using_map.default_species + clone.heritable_sprite_accessories = deepCopyList(heritable_sprite_accessories) for(var/b in 1 to DNA_SE_LENGTH) clone.SE[b] = SE[b] if(b <= DNA_UI_LENGTH) @@ -121,21 +124,15 @@ var/global/list/assigned_blocks[DNA_SE_LENGTH] // INITIALIZE! ResetUI(1) - SetUIValueRange(DNA_UI_HAIR_R, HEX_RED(character.hair_colour), 255, 1) - SetUIValueRange(DNA_UI_HAIR_G, HEX_GREEN(character.hair_colour), 255, 1) - SetUIValueRange(DNA_UI_HAIR_B, HEX_BLUE(character.hair_colour), 255, 1) - - SetUIValueRange(DNA_UI_BEARD_R, HEX_RED(character.facial_hair_colour), 255, 1) - SetUIValueRange(DNA_UI_BEARD_G, HEX_GREEN(character.facial_hair_colour), 255, 1) - SetUIValueRange(DNA_UI_BEARD_B, HEX_BLUE(character.facial_hair_colour), 255, 1) - - SetUIValueRange(DNA_UI_EYES_R, HEX_RED(character.eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_G, HEX_GREEN(character.eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_B, HEX_BLUE(character.eye_colour), 255, 1) + var/eye_colour = character.get_eye_colour() + SetUIValueRange(DNA_UI_EYES_R, HEX_RED(eye_colour), 255, 1) + SetUIValueRange(DNA_UI_EYES_G, HEX_GREEN(eye_colour), 255, 1) + SetUIValueRange(DNA_UI_EYES_B, HEX_BLUE(eye_colour), 255, 1) - SetUIValueRange(DNA_UI_SKIN_R, HEX_RED(character.skin_colour), 255, 1) - SetUIValueRange(DNA_UI_SKIN_G, HEX_GREEN(character.skin_colour), 255, 1) - SetUIValueRange(DNA_UI_SKIN_B, HEX_BLUE(character.skin_colour), 255, 1) + var/skin_colour = character.get_skin_colour() + SetUIValueRange(DNA_UI_SKIN_R, HEX_RED(skin_colour), 255, 1) + SetUIValueRange(DNA_UI_SKIN_G, HEX_GREEN(skin_colour), 255, 1) + SetUIValueRange(DNA_UI_SKIN_B, HEX_BLUE(skin_colour), 255, 1) SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.skin_tone, 220, 1) // Value can be negative. @@ -144,18 +141,11 @@ var/global/list/assigned_blocks[DNA_SE_LENGTH] fingerprint = character.get_full_print(ignore_blockers = TRUE) unique_enzymes = character.get_unique_enzymes() - // Hair - var/list/hair_types = decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/hair) - SetUIValueRange(DNA_UI_HAIR_STYLE, hair_types.Find(character.h_style), length(hair_types), 1) - - // Facial Hair - var/list/beard_types = decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/facial_hair) - SetUIValueRange(DNA_UI_BEARD_STYLE, beard_types.Find(character.f_style), length(beard_types), 1) - - body_markings.Cut() + heritable_sprite_accessories.Cut() for(var/obj/item/organ/external/E in character.get_external_organs()) - if(LAZYLEN(E.markings)) - body_markings[E.organ_tag] = E.markings.Copy() + var/list/sprite_accessories = E.get_heritable_sprite_accessories() + if(LAZYLEN(sprite_accessories)) + heritable_sprite_accessories[E.organ_tag] = sprite_accessories b_type = character.get_blood_type() @@ -328,7 +318,7 @@ var/global/list/assigned_blocks[DNA_SE_LENGTH] SetSEBlock(block,newBlock,defer) /proc/EncodeDNABlock(var/value) - return add_zero2(num2hex(value,1), 3) + return num2hex_padded(value, 3) /datum/dna/proc/UpdateUI() src.uni_identity="" diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 48c4da795e0..6e985a1393d 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -2,16 +2,6 @@ // Helpers for DNA2 ///////////////////////////// -// Pads 0s to t until length == u -/proc/add_zero2(t, u) - var/temp1 - while (length(t) < u) - t = "0[t]" - temp1 = t - if (length(t) > u) - temp1 = copytext(t,2,u+1) - return temp1 - // DNA Gene activation boundaries, see dna2.dm. // Returns a list object with 4 numbers. /proc/GetDNABounds(var/block) @@ -143,41 +133,29 @@ dna.check_integrity() - fingerprint = dna.fingerprint - unique_enzymes = dna.unique_enzymes - hair_colour = rgb(dna.GetUIValueRange(DNA_UI_HAIR_R,255), dna.GetUIValueRange(DNA_UI_HAIR_G,255), dna.GetUIValueRange(DNA_UI_HAIR_B,255)) - facial_hair_colour = rgb(dna.GetUIValueRange(DNA_UI_BEARD_R,255), dna.GetUIValueRange(DNA_UI_BEARD_G,255), dna.GetUIValueRange(DNA_UI_BEARD_B,255)) - skin_colour = rgb(dna.GetUIValueRange(DNA_UI_SKIN_R,255), dna.GetUIValueRange(DNA_UI_SKIN_G,255), dna.GetUIValueRange(DNA_UI_SKIN_B,255)) - eye_colour = rgb(dna.GetUIValueRange(DNA_UI_EYES_R,255), dna.GetUIValueRange(DNA_UI_EYES_G,255), dna.GetUIValueRange(DNA_UI_EYES_B,255)) - skin_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. + fingerprint = dna.fingerprint + unique_enzymes = dna.unique_enzymes + set_skin_colour( rgb(dna.GetUIValueRange(DNA_UI_SKIN_R,255), dna.GetUIValueRange(DNA_UI_SKIN_G,255), dna.GetUIValueRange(DNA_UI_SKIN_B,255))) + set_eye_colour( rgb(dna.GetUIValueRange(DNA_UI_EYES_R,255), dna.GetUIValueRange(DNA_UI_EYES_G,255), dna.GetUIValueRange(DNA_UI_EYES_B,255))) + skin_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. + // TODO: update DNA gender to not be a bool - use bodytype and pronouns //Body markings - for(var/tag in dna.body_markings) + for(var/tag in dna.heritable_sprite_accessories) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, tag) if(E) - var/list/marklist = dna.body_markings[tag] + var/list/marklist = dna.heritable_sprite_accessories[tag] if(length(marklist)) - E.markings = marklist.Copy() + for(var/accessory in marklist) + E.set_sprite_accessory(accessory, null, marklist[accessory], skip_update = TRUE) else - LAZYCLEARLIST(E.markings) + E.clear_sprite_accessories(skip_update = TRUE) //Base skin and blend for(var/obj/item/organ/organ in get_organs()) organ.set_dna(dna) - //Hair - var/list/hair_subtypes = decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/hair) - var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE, length(hair_subtypes)) - if(hair > 0 && hair <= length(hair_subtypes)) - h_style = hair_subtypes[hair] - - //Facial Hair - var/list/beard_subtypes = decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/facial_hair) - var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE, length(beard_subtypes)) - if((0 < beard) && (beard <= length(beard_subtypes))) - f_style = beard_subtypes[beard] - force_update_limbs() update_hair(update_icons = FALSE) update_eyes() diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 5c809eee420..860ae35eee9 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -9,6 +9,7 @@ votable = 0 event_delay_mod_moderate = 0.5 event_delay_mod_major = 0.75 + available_by_default = FALSE /decl/game_mode/calamity/create_antagonists() diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 3e973359edd..02002444604 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -7,3 +7,4 @@ required_enemies = 3 end_on_antag_death = FALSE associated_antags = list(/decl/special_role/cultist) + probability = 1 diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 28daf9435d2..822f9fbc410 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -73,7 +73,7 @@ name = "cult robes" icon = 'icons/clothing/suit/cult.dmi' desc = "A set of durable robes worn by the followers of Nar-Sie." - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL allowed = list(/obj/item/book/tome,/obj/item/sword/cultblade) armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, @@ -92,7 +92,7 @@ name = "magus robes" desc = "A set of plated robes worn by the followers of Nar-Sie." icon = 'icons/clothing/suit/wizard/magusred.dmi' - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT armor = list( ARMOR_MELEE = ARMOR_MELEE_VERY_HIGH, @@ -136,7 +136,7 @@ ARMOR_RAD = ARMOR_RAD_MINOR ) siemens_coefficient = 0.2 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL /obj/item/clothing/suit/space/cult/Initialize() . = ..() diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 6d3194a0877..769fbc05658 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -117,7 +117,7 @@ /obj/effect/gateway/active/Initialize() . = ..() - addtimer(CALLBACK(src, .proc/create_and_delete), rand(30,60) SECONDS) + addtimer(CALLBACK(src, PROC_REF(create_and_delete)), rand(30,60) SECONDS) /obj/effect/gateway/active/proc/create_and_delete() @@ -150,8 +150,7 @@ if(isrobot(M)) var/mob/living/silicon/robot/Robot = M - if(Robot.mmi) - qdel(Robot.mmi) + QDEL_NULL(Robot.central_processor) else for(var/obj/item/W in M) M.drop_from_inventory(W) diff --git a/code/game/gamemodes/cult/ghosts.dm b/code/game/gamemodes/cult/ghosts.dm index 28955489c2c..cd9e729dbc1 100644 --- a/code/game/gamemodes/cult/ghosts.dm +++ b/code/game/gamemodes/cult/ghosts.dm @@ -18,7 +18,7 @@ /mob/observer/ghost/proc/ghost_ability_check() var/turf/T = get_turf(src) - if(T.holy) + if(is_holy_turf(T)) to_chat(src, "You may not use your abilities on the blessed ground.") return 0 if(ghost_magic_cd > world.time) @@ -52,8 +52,8 @@ var/doodle_color = COLOR_BLOOD_HUMAN - var/turf/simulated/T = get_turf(src) - if(!istype(T)) + var/turf/T = get_turf(src) + if(!T?.simulated) to_chat(src, "You cannot doodle there.") return @@ -246,7 +246,7 @@ return to_chat(choice, "You feel as if something cold passed through you!") - var/temp_threshold = choice.get_temperature_threshold(COLD_LEVEL_1) + var/temp_threshold = choice.get_mob_temperature_threshold(COLD_LEVEL_1) if(choice.bodytemperature >= temp_threshold + 1) choice.bodytemperature = max(temp_threshold + 1, choice.bodytemperature - 30) to_chat(src, "You pass through \the [choice], giving them a sudden chill.") diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm index 9eef3036188..5133b72ba09 100644 --- a/code/game/gamemodes/cult/hell_universe.dm +++ b/code/game/gamemodes/cult/hell_universe.dm @@ -32,8 +32,8 @@ In short: SSskybox.change_skybox("narsie", new_use_stars = FALSE, new_use_overmap_details = FALSE) /datum/universal_state/hell/proc/MiscSet() - for(var/turf/simulated/floor/T) - if(!T.holy && prob(1)) + for(var/turf/T) + if(T.is_floor() && T.simulated && !is_holy_turf(T) && prob(1)) new /obj/effect/gateway/active/cult(T) /datum/universal_state/hell/proc/KillMobs() diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 9082adaf242..4f372e19005 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -39,10 +39,10 @@ if(istype(get_equipped_item(slot_head_str), /obj/item/clothing/head/culthood) && istype(get_equipped_item(slot_wear_suit_str), /obj/item/clothing/suit/cultrobes) && istype(get_equipped_item(slot_shoes_str), /obj/item/clothing/shoes/cult)) has_robes = 1 var/turf/T = get_turf(src) - if(T.holy) + if(is_holy_turf(T)) to_chat(src, "This place is blessed, you may not draw runes on it - defile it first.") return - if(!istype(T, /turf/simulated)) + if(!T.simulated) to_chat(src, "You need more space to draw a rune here.") return if(locate(/obj/effect/rune) in T) @@ -89,7 +89,7 @@ remove_blood_simple(cost * damage) if(locate(/obj/effect/rune) in T) return - var/obj/effect/rune/R = new rune(T, get_rune_color(), get_blood_name()) + var/obj/effect/rune/R = new rune(T, get_blood_color(), get_blood_name()) var/area/A = get_area(R) log_and_message_admins("created \an [R.cultname] rune at \the [A.proper_name].") R.add_fingerprint(src) @@ -129,12 +129,6 @@ /mob/living/carbon/human/mob_needs_tome() return 1 -/mob/proc/get_rune_color() - return "#c80000" - -/mob/living/carbon/human/get_rune_color() - return species.get_blood_color(src) - var/global/list/Tier1Runes = list( /mob/proc/convert_rune, /mob/proc/teleport_rune, diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 41c42b43b72..95783d343b9 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -247,15 +247,16 @@ /obj/effect/rune/wall/cast(var/mob/living/user) var/t if(wall) - if(wall.health >= wall.max_health) + var/wall_max_health = wall.get_max_health() + if(wall.current_health >= wall_max_health) to_chat(user, "The wall doesn't need mending.") return - t = wall.max_health - wall.health - wall.health += t + t = wall_max_health - wall.current_health + wall.current_health += t else wall = new /obj/effect/cultwall(get_turf(src), bcolor) wall.rune = src - t = wall.health + t = wall.current_health user.remove_blood_simple(t / 50) speak_incantation(user, "Khari[pick("'","`")]d! Eske'te tannin!") to_chat(user, "Your blood flows into the rune, and you feel that the very space over the rune thickens.") @@ -268,13 +269,11 @@ color = "#ff0000" anchored = TRUE density = TRUE + max_health = 200 var/obj/effect/rune/wall/rune - var/health - var/max_health = 200 /obj/effect/cultwall/Initialize(mapload, var/bcolor) . = ..() - health = max_health if(bcolor) color = bcolor @@ -287,9 +286,10 @@ /obj/effect/cultwall/examine(mob/user) . = ..() if(iscultist(user)) - if(health == max_health) + var/current_max_health = get_max_health() + if(current_health == current_max_health) to_chat(user, "It is fully intact.") - else if(health > max_health * 0.5) + else if(current_health > current_max_health * 0.5) to_chat(user, "It is damaged.") else to_chat(user, "It is about to dissipate.") @@ -320,8 +320,8 @@ ..() /obj/effect/cultwall/proc/take_damage(var/amount) - health -= amount - if(health <= 0) + current_health -= amount + if(current_health <= 0) visible_message("\The [src] dissipates.") qdel(src) @@ -340,7 +340,7 @@ SPAN_OCCULT("The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry..."), \ SPAN_NOTICE("You hear only complete silence for a moment.")) - announce_ghost_joinleave(user.ghostize(1), 1, "You feel that they had to use some [pick("dark", "black", "blood", "forgotten", "forbidden")] magic to [pick("invade", "disturb", "disrupt", "infest", "taint", "spoil", "blight")] this place!") + announce_ghost_joinleave(user.ghostize(), 1, "You feel that they had to use some [pick("dark", "black", "blood", "forgotten", "forbidden")] magic to [pick("invade", "disturb", "disrupt", "infest", "taint", "spoil", "blight")] this place!") var/mob/observer/ghost/soul for(var/mob/observer/ghost/O in global.ghost_mob_list) if(O.key == tmpkey) @@ -364,8 +364,8 @@ /obj/effect/rune/defile/cast(var/mob/living/user) speak_incantation(user, "Ia! Ia! Zasan therium viortia!") for(var/turf/T in range(1, src)) - if(T.holy) - T.holy = 0 + if(is_holy_turf(T)) + T.turf_flags &= ~TURF_FLAG_HOLY else T.on_defilement() visible_message("\The [src] embeds into the floor and walls around it, changing them!", "You hear liquid flow.") @@ -615,8 +615,8 @@ for(var/mob/living/M in cultists) M.say("Ia! Ia! Zasan therium viortia! Razan gilamrua kioha!") for(var/turf/T in range(5, src)) - if(T.holy) - T.holy = 0 + if(is_holy_turf(T)) + T.turf_flags &= ~TURF_FLAG_HOLY else T.on_defilement() visible_message("\The [src] embeds into the floor and walls around it, changing them!", "You hear liquid flow.") diff --git a/code/game/gamemodes/endgame/endgame.dm b/code/game/gamemodes/endgame/endgame.dm index c18d4a62a7d..6d81b42d639 100644 --- a/code/game/gamemodes/endgame/endgame.dm +++ b/code/game/gamemodes/endgame/endgame.dm @@ -26,18 +26,7 @@ // Actually decay the turf. /datum/universal_state/proc/DecayTurf(var/turf/T) - if(istype(T,/turf/simulated/wall)) - var/turf/simulated/wall/W=T - W.melt() - return - if(istype(T,/turf/simulated/floor)) - var/turf/simulated/floor/F=T - // Burnt? - if(!F.burnt) - F.burn_tile() - else - F.ReplaceWithLattice() - return + T.handle_universal_decay() // Return 0 to cause shuttle call to fail. /datum/universal_state/proc/OnShuttleCall(var/mob/user) diff --git a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm index 2c5f9a9ffa7..88708dee839 100644 --- a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm +++ b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm @@ -84,9 +84,9 @@ daddy = ndaddy set_dir(daddy.dir) appearance = daddy.appearance - events_repository.register(/decl/observ/moved, daddy, src, /obj/effect/bluegoast/proc/mirror) - events_repository.register(/decl/observ/dir_set, daddy, src, /obj/effect/bluegoast/proc/mirror_dir) - events_repository.register(/decl/observ/destroyed, daddy, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/moved, daddy, src, TYPE_PROC_REF(/obj/effect/bluegoast, mirror)) + events_repository.register(/decl/observ/dir_set, daddy, src, TYPE_PROC_REF(/obj/effect/bluegoast, mirror_dir)) + events_repository.register(/decl/observ/destroyed, daddy, src, TYPE_PROC_REF(/datum, qdel_self)) /obj/effect/bluegoast/Destroy() events_repository.unregister(/decl/observ/destroyed, daddy, src) @@ -133,11 +133,3 @@ H.flavor_text = daddy.flavor_text daddy.dust() qdel(src) - -/obj/screen/fullscreen/wormhole_overlay - icon = 'icons/effects/effects.dmi' - icon_state = "mfoam" - screen_loc = ui_entire_screen - color = "#ff9900" - alpha = 100 - blend_mode = BLEND_SUBTRACT diff --git a/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm b/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm index 95caa40a160..e01a6995e1b 100644 --- a/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm +++ b/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm @@ -1,19 +1,11 @@ /datum/universal_state/nuclear_explosion name = "Nuclear Demolition Warhead" var/atom/explosion_source - var/obj/screen/cinematic + var/obj/screen/cinematic/cinematic /datum/universal_state/nuclear_explosion/New(atom/nuke) explosion_source = nuke - - //create the cinematic screen obj cinematic = new - cinematic.icon = 'icons/effects/station_explosion.dmi' - cinematic.icon_state = "station_intact" - cinematic.plane = HUD_PLANE - cinematic.layer = HUD_ABOVE_ITEM_LAYER - cinematic.mouse_opacity = MOUSE_OPACITY_PRIORITY - cinematic.screen_loc = "LEFT+1,BOTTOM" /datum/universal_state/nuclear_explosion/OnEnter() set waitfor = FALSE @@ -57,7 +49,7 @@ var/turf/T = get_turf(L) if(T && (T.z in affected_z_levels)) //this is needed because dusting resets client screen 1.5 seconds after being called (delayed due to the dusting animation) - var/mob/ghost = L.ghostize(0) //So we ghostize them right beforehand instead + var/mob/ghost = L.ghostize(CORPSE_CANNOT_REENTER) //So we ghostize them right beforehand instead if(ghost && ghost.client) ghost.client.screen += cinematic L.dust() //then dust the body diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index a3c8c357bd2..90ffac2c797 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -20,19 +20,7 @@ var/global/universe_has_ended = 0 S.color = initial(S.color) /datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T) - if(istype(T,/turf/simulated/wall)) - var/turf/simulated/wall/W=T - W.melt() - return - if(istype(T,/turf/simulated/floor)) - var/turf/simulated/floor/F=T - // Burnt? - if(!F.burnt) - F.burn_tile() - else - if(!istype(F,/turf/simulated/floor/plating)) - F.break_tile_to_plating() - return + T.handle_universal_decay() // Apply changes when entering state /datum/universal_state/supermatter_cascade/OnEnter() @@ -62,8 +50,8 @@ var/global/universe_has_ended = 0 if(length(global.endgame_exits)) spawned_exit = new /obj/effect/wormhole_exit(pick(global.endgame_exits)) - addtimer(CALLBACK(src, /datum/universal_state/supermatter_cascade/proc/announce_end_of_universe, spawned_exit), rand(30, 60) SECONDS) - addtimer(CALLBACK(src, /datum/universal_state/supermatter_cascade/proc/finalize_end_of_universe), 5 MINUTES) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/universal_state/supermatter_cascade, announce_end_of_universe), spawned_exit), rand(30, 60) SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/universal_state/supermatter_cascade, finalize_end_of_universe)), 5 MINUTES) /datum/universal_state/supermatter_cascade/proc/announce_end_of_universe(var/exit_exists) var/end_message = "Attn. [global.using_map.station_name]: Severe gravitational anomalies of unheard of scope have been detected in the local volume. Size and intensity of anomalies are increasing exponentially. Within the hour, a newborn black hole will have consumed everything in this sector." diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm index 9a4d26c3cba..66220a0abd0 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/gamemodes/events/black_hole.dm @@ -27,8 +27,8 @@ for(var/obj/O in orange(1,src)) qdel(O) var/base_turf = get_base_turf_by_area(src) - for(var/turf/simulated/ST in orange(1,src)) - if(ST.type == base_turf) + for(var/turf/ST in orange(1,src)) + if(!ST.simulated || ST.type == base_turf) continue ST.ChangeTurf(base_turf) @@ -87,8 +87,7 @@ step_towards(M,src) //Destroying the turf - if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) - var/turf/simulated/ST = T + if(istype(T) && T.simulated && prob(turf_removal_chance) ) var/base_turf = get_base_turf_by_area(src) - if(ST.type != base_turf) - ST.ChangeTurf(base_turf) + if(T.type != base_turf) + T.ChangeTurf(base_turf) diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index 40706050003..a7e6fb5abc5 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -5,3 +5,4 @@ round_description = "Just have fun and role-play!" extended_round_description = "There are no antagonists during extended, unless an admin decides to be cheeky. Just play your character, mess around with your job, and have fun." addantag_allowed = ADDANTAG_ADMIN // No add antag vote allowed on extended, except when manually called by admins. + probability = 1 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 62299631a4e..8fca9e3f5cf 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -10,6 +10,7 @@ var/global/list/additional_antag_types = list() var/votable = TRUE var/probability = 0 + var/available_by_default = TRUE var/required_players = 0 // Minimum players for round to start if voted in. var/required_enemies = 0 // Minimum antagonists for round to start. var/end_on_antag_death = FALSE // Round will end when all antagonists are dead. @@ -473,7 +474,7 @@ var/global/list/additional_antag_types = list() /decl/game_mode/proc/create_antagonists() - if(!config.traitor_scaling) + if(!get_config_value(/decl/config/toggle/traitor_scaling)) antag_scaling_coeff = 0 if(length(associated_antags)) @@ -572,7 +573,7 @@ var/global/list/additional_antag_types = list() if(!player || !player.current) return - if(config.objectives_disabled == CONFIG_OBJECTIVE_NONE || !player.objectives.len) + if(get_config_value(/decl/config/enum/objectives_disabled) == CONFIG_OBJECTIVE_NONE || !player.objectives.len) return var/obj_count = 1 diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm index 802d83c3c00..8fd44e1744d 100644 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ b/code/game/gamemodes/game_mode_latespawn.dm @@ -15,7 +15,7 @@ if(SSevac.evacuation_controller && (SSevac.evacuation_controller.is_evacuating() || SSevac.evacuation_controller.has_evacuated())) return FALSE // Don't create auto-antags in the last twenty minutes of the round, but only if the vote interval is longer than 20 minutes - if((config.vote_autotransfer_interval > 20 MINUTES) && (transfer_controller.time_till_transfer_vote() < 20 MINUTES)) + if((get_config_value(/decl/config/num/vote_autotransfer_interval) > 20 MINUTES) && (transfer_controller.time_till_transfer_vote() < 20 MINUTES)) return FALSE return TRUE diff --git a/code/game/gamemodes/godmode/form_items/narsie_items.dm b/code/game/gamemodes/godmode/form_items/narsie_items.dm index ff6855bcf6d..b191ef022be 100644 --- a/code/game/gamemodes/godmode/form_items/narsie_items.dm +++ b/code/game/gamemodes/godmode/form_items/narsie_items.dm @@ -56,7 +56,7 @@ if(ismob(a)) var/mob/M = a if(M.stat != DEAD) - events_repository.register(/decl/observ/death, M,src,/obj/item/twohanded/fireaxe/cult/proc/gain_power) + events_repository.register(/decl/observ/death, M,src, TYPE_PROC_REF(/obj/item/twohanded/fireaxe/cult, gain_power)) spawn(30) events_repository.unregister(/decl/observ/death, M,src) return ..() @@ -74,4 +74,4 @@ amount_per_transfer_from_this = 10 /obj/item/chems/drinks/zombiedrink/populate_reagents() - reagents.add_reagent(/decl/material/liquid/zombie, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/zombie, reagents.maximum_volume) diff --git a/code/game/gamemodes/godmode/form_items/narsie_structures.dm b/code/game/gamemodes/godmode/form_items/narsie_structures.dm index 931188a64f1..184304aa52e 100644 --- a/code/game/gamemodes/godmode/form_items/narsie_structures.dm +++ b/code/game/gamemodes/godmode/form_items/narsie_structures.dm @@ -8,7 +8,7 @@ desc = "This forge gives off no heat, no light, its flames look almost unnatural." icon_state = "forge" build_cost = 1000 - health = 50 + current_health = 50 var/busy = 0 var/recipe_feat_list = "Blood Crafting" var/text_modifications = list("Cost" = "Blood", @@ -74,7 +74,7 @@ name = "bloody stone" desc = "A jagged stone covered in the various stages of blood, from dried to fresh." icon_state = "blood_stone" - health = 100 //Its a piece of rock. + current_health = 100 //Its a piece of rock. build_cost = 700 /obj/structure/deity/blood_stone/attack_hand(var/mob/user) diff --git a/code/game/gamemodes/godmode/form_items/starlight_structures.dm b/code/game/gamemodes/godmode/form_items/starlight_structures.dm index d98eb249478..89281288fce 100644 --- a/code/game/gamemodes/godmode/form_items/starlight_structures.dm +++ b/code/game/gamemodes/godmode/form_items/starlight_structures.dm @@ -37,7 +37,7 @@ ) ), "Shadowling" = list( - "description" = "Beings that come from a place of no light. They sneak from place to place, disabling everyone they touch..", + "description" = "Beings that come from a place of no light. They sneak from place to place, disabling everyone they touch.", "message" = "As a Shadow you take damage from the light itself but have the ability to vanish from sight itself.", "species" = "Shadow", "spells" = list( @@ -143,7 +143,7 @@ for(var/l in get_turf(linked_god)) if(istype(l, /mob/living/starlight_soul)) to_chat(l, "\The [src] is looking for a soul to become a [looking_for]. Accept? (Yes)") - addtimer(CALLBACK(src, .proc/stop_looking_for, FALSE), 30 SECONDS) + addtimer(CALLBACK(src, PROC_REF(stop_looking_for), FALSE), 30 SECONDS) show_browser(linked_god, null, "window=gateway") return TOPIC_HANDLED @@ -215,8 +215,9 @@ . = 0 if(istype(I, /obj/item/gun/energy)) var/obj/item/gun/energy/energy = I - if(energy.power_supply) - energy.power_supply.give(energy.charge_cost * energy.max_shots) + var/obj/item/cell/power_supply = energy.get_cell() + if(power_supply) + power_supply.give(energy.charge_cost * energy.max_shots) . = 1 else if(istype(I ,/obj/item/knife/ritual/shadow)) var/obj/item/knife/ritual/shadow/shad = I diff --git a/code/game/gamemodes/godmode/god_altar.dm b/code/game/gamemodes/godmode/god_altar.dm index 07a960da570..ac4f313aee7 100644 --- a/code/game/gamemodes/godmode/god_altar.dm +++ b/code/game/gamemodes/godmode/god_altar.dm @@ -1,7 +1,7 @@ /obj/structure/deity/altar name = "altar" desc = "A structure made for the express purpose of religion." - health = 50 + current_health = 50 power_adjustment = 5 deity_flags = DEITY_STRUCTURE_ALONE build_cost = 1000 @@ -52,9 +52,9 @@ if(3) text = "You feel like your thought are being overriden..." if(2) - text = "You can't.... concentrate.. must... resist!" + text = "You can't... concentrate... must... resist!" if(1) - text = "Can't... resist. ... anymore." + text = "Can't... resist... anymore." to_chat(linked_god, "\The [target] is getting close to conversion!") to_chat(target, "[text]. Resist Conversion") @@ -67,9 +67,9 @@ START_PROCESSING(SSobj, src) target = L update_icon() - events_repository.register(/decl/observ/destroyed, L,src,/obj/structure/deity/altar/proc/remove_target) - events_repository.register(/decl/observ/moved, L, src, /obj/structure/deity/altar/proc/remove_target) - events_repository.register(/decl/observ/death, L, src, /obj/structure/deity/altar/proc/remove_target) + events_repository.register(/decl/observ/destroyed, L,src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target)) + events_repository.register(/decl/observ/moved, L, src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target)) + events_repository.register(/decl/observ/death, L, src, TYPE_PROC_REF(/obj/structure/deity/altar, remove_target)) /obj/structure/deity/altar/proc/remove_target() STOP_PROCESSING(SSobj, src) @@ -91,7 +91,7 @@ cycles_before_converted++ if(prob(50)) to_chat(M, "The mental strain is too much for you! You feel your body weakening!") - M.adjustToxLoss(15) + M.adjustToxLoss(15, do_update_health = FALSE) M.adjustHalLoss(30) return TOPIC_REFRESH diff --git a/code/game/gamemodes/godmode/god_pylon.dm b/code/game/gamemodes/godmode/god_pylon.dm index 14b50ce830d..cbbd31413fa 100644 --- a/code/game/gamemodes/godmode/god_pylon.dm +++ b/code/game/gamemodes/godmode/god_pylon.dm @@ -33,7 +33,7 @@ return to_chat(L, "You place your hands on \the [src], feeling yourself intune to its vibrations.") intuned += L - events_repository.register(/decl/observ/destroyed, L,src,/obj/structure/deity/pylon/proc/remove_intuned) + events_repository.register(/decl/observ/destroyed, L,src, TYPE_PROC_REF(/obj/structure/deity/pylon, remove_intuned)) /obj/structure/deity/pylon/proc/remove_intuned(var/mob/living/L) if(!(L in intuned)) diff --git a/code/game/gamemodes/godmode/god_structures.dm b/code/game/gamemodes/godmode/god_structures.dm index f40e5bb4597..6eaed5e088e 100644 --- a/code/game/gamemodes/godmode/god_structures.dm +++ b/code/game/gamemodes/godmode/god_structures.dm @@ -17,7 +17,7 @@ /obj/structure/deity icon = 'icons/obj/cult.dmi' - maxhealth = 10 + max_health = 10 density = TRUE anchored = TRUE icon_state = "tomealtar" diff --git a/code/game/gamemodes/godmode/god_trap.dm b/code/game/gamemodes/godmode/god_trap.dm index 323b3bf2e15..240050d33b9 100644 --- a/code/game/gamemodes/godmode/god_trap.dm +++ b/code/game/gamemodes/godmode/god_trap.dm @@ -1,11 +1,11 @@ /obj/structure/deity/trap density = FALSE - health = 1 + current_health = 1 var/triggered = 0 /obj/structure/deity/trap/Initialize() . = ..() - events_repository.register(/decl/observ/entered, get_turf(src),src,/obj/structure/deity/trap/proc/trigger) + events_repository.register(/decl/observ/entered, get_turf(src),src, TYPE_PROC_REF(/obj/structure/deity/trap, trigger)) /obj/structure/deity/trap/Destroy() events_repository.unregister(/decl/observ/entered, get_turf(src),src) @@ -14,7 +14,7 @@ /obj/structure/deity/trap/Move() events_repository.unregister(/decl/observ/entered, get_turf(src),src) . = ..() - events_repository.register(/decl/observ/entered, get_turf(src), src, /obj/structure/deity/trap/proc/trigger) + events_repository.register(/decl/observ/entered, get_turf(src), src, TYPE_PROC_REF(/obj/structure/deity/trap, trigger)) /obj/structure/deity/trap/attackby(obj/item/W, mob/user) trigger(user) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 828322db8c9..35e25dc7f73 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -10,6 +10,8 @@ required_players = 15 // Definitely not good for low-pop votable = 1 shuttle_delay = 2 + available_by_default = FALSE + var/next_wave = INFINITY // Set in post_setup() correctly to take into account potential longer pre-start times. var/alert_sent = 0 var/meteor_severity = 1 // Slowly increases the tension at the beginning of meteor strikes. Prevents "tunguska on first wave" style problems. diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 3289a214b08..7d793607031 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -207,7 +207,7 @@ var/global/list/meteors_cataclysm = list(\ return /obj/effect/meteor/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pickaxe)) + if(IS_PICK(W)) qdel(src) return ..() @@ -215,7 +215,7 @@ var/global/list/meteors_cataclysm = list(\ /obj/effect/meteor/proc/make_debris() if(meteordrop && dropamt) for(var/throws = dropamt, throws > 0, throws--) - addtimer(CALLBACK(new meteordrop(get_turf(src)), /atom/movable/proc/throw_at, dest, 5, 10), 0) + addtimer(CALLBACK(new meteordrop(get_turf(src)), TYPE_PROC_REF(/atom/movable, throw_at), dest, 5, 10), 0) /obj/effect/meteor/proc/meteor_effect() if(heavy) @@ -239,7 +239,7 @@ var/global/list/meteors_cataclysm = list(\ hits = 1 hitpwr = 3 dropamt = 1 - meteordrop = /obj/item/stack/material/ore/glass + meteordrop = /obj/item/stack/material/ore/sand //Medium-sized /obj/effect/meteor/medium @@ -331,7 +331,7 @@ var/global/list/meteors_cataclysm = list(\ // This is the final solution against shields - a single impact can bring down most shield generators. /obj/effect/meteor/supermatter name = "supermatter shard" - desc = "Oh god, what will be next..?" + desc = "Oh god, what will be next...?" icon = 'icons/obj/supermatter_32.dmi' icon_state = "supermatter" diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 663767d11c0..410e50873a8 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -12,14 +12,15 @@ var/global/list/nuke_disks = list() required_players = 15 required_enemies = 1 end_on_antag_death = FALSE - var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station - var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level + probability = 1 associated_antags = list(/decl/special_role/mercenary) cinematic_icon_states = list( "intro_nuke" = 35, "summary_nukewin", "summary_nukefail" ) + var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station + var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level //checks if L has a nuke disk on their person /decl/game_mode/nuclear/proc/check_mob(mob/living/L) @@ -30,7 +31,7 @@ var/global/list/nuke_disks = list() /decl/game_mode/nuclear/declare_completion() var/decl/special_role/merc = GET_DECL(/decl/special_role/mercenary) - if(config.objectives_disabled == CONFIG_OBJECTIVE_NONE || (merc && !merc.global_objectives.len)) + if(get_config_value(/decl/config/enum/objectives_disabled) == CONFIG_OBJECTIVE_NONE || (merc && !merc.global_objectives.len)) ..() return var/disk_rescued = TRUE diff --git a/code/game/gamemodes/objectives/_objective.dm b/code/game/gamemodes/objectives/_objective.dm index ccfaea16d32..1a1d4db57f1 100644 --- a/code/game/gamemodes/objectives/_objective.dm +++ b/code/game/gamemodes/objectives/_objective.dm @@ -6,6 +6,9 @@ var/global/list/all_objectives = list() var/datum/mind/target //If they are focused on a particular person. var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. +SAVED_VAR(/datum/objective, owner) +SAVED_VAR(/datum/objective, target) + /datum/objective/New(var/text) global.all_objectives |= src if(text) diff --git a/code/game/gamemodes/objectives/objective_steal.dm b/code/game/gamemodes/objectives/objective_steal.dm index e48eb9523bc..cd3f680bb48 100644 --- a/code/game/gamemodes/objectives/objective_steal.dm +++ b/code/game/gamemodes/objectives/objective_steal.dm @@ -4,6 +4,11 @@ var/theft_material var/theft_amount = 1 +SAVED_VAR(/datum/objective/steal, theft_name) +SAVED_VAR(/datum/objective/steal, theft_type) +SAVED_VAR(/datum/objective/steal, theft_material) +SAVED_VAR(/datum/objective/steal, theft_amount) + /datum/objective/steal/find_target() var/list/possible_items = global.using_map.get_theft_targets() | global.using_map.get_special_theft_targets() diff --git a/code/game/gamemodes/wizard/servant_items/champion.dm b/code/game/gamemodes/wizard/servant_items/champion.dm index ace80ee8685..93af3460b11 100644 --- a/code/game/gamemodes/wizard/servant_items/champion.dm +++ b/code/game/gamemodes/wizard/servant_items/champion.dm @@ -18,7 +18,7 @@ desc = "A mighty suit of silver and gold armor, with a gleaming blue crystal inlaid into its left gaunlet." icon = 'icons/clothing/suit/wizard/servant/champion.dmi' siemens_coefficient = 0.5 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL armor = list( ARMOR_MELEE = ARMOR_MELEE_VERY_HIGH, ARMOR_BULLET = ARMOR_BALLISTIC_AP, diff --git a/code/game/gamemodes/wizard/servant_items/fiend.dm b/code/game/gamemodes/wizard/servant_items/fiend.dm index d3568f187c5..6bd819340c1 100644 --- a/code/game/gamemodes/wizard/servant_items/fiend.dm +++ b/code/game/gamemodes/wizard/servant_items/fiend.dm @@ -16,7 +16,7 @@ name = "fiend's cowl" desc = "A charred black duster with red trim. In its fabric, you can see the faint outline of millions of eyes." icon = 'icons/clothing/suit/wizard/servant/fiend_cowl.dmi' - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL, diff --git a/code/game/gamemodes/wizard/servant_items/overseer.dm b/code/game/gamemodes/wizard/servant_items/overseer.dm index 8a53f9205db..9b337552238 100644 --- a/code/game/gamemodes/wizard/servant_items/overseer.dm +++ b/code/game/gamemodes/wizard/servant_items/overseer.dm @@ -29,7 +29,7 @@ item_flags = ITEM_FLAG_AIRTIGHT max_pressure_protection = FIRESUIT_MAX_PRESSURE min_pressure_protection = 0 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL /obj/item/clothing/under/grimhoodie name = "black hoodie" diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 4e1d0b54e6c..72792403db1 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -7,3 +7,4 @@ required_enemies = 1 end_on_antag_death = FALSE associated_antags = list(/decl/special_role/wizard) + probability = 1 diff --git a/code/game/jobs/job/_job.dm b/code/game/jobs/job/_job.dm index 2931c501d3b..587ecf81214 100644 --- a/code/game/jobs/job/_job.dm +++ b/code/game/jobs/job/_job.dm @@ -36,7 +36,7 @@ var/forced_spawnpoint // If set to a spawnpoint name, will use that spawn point for joining as this job. var/hud_icon // icon used for Sec HUD overlay - //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access + //Job access. The use of minimal_access or access is determined by a config setting: jobs_have_minimal_access var/list/minimal_access = list() // Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population) var/list/access = list() // Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!) @@ -157,6 +157,10 @@ remembered_info += "Your cash on hand is: [cur.format_value(cash_on_hand)]
    " H.StoreMemory(remembered_info, /decl/memory_options/system) H.mind.initial_account = M + for(var/obj/item/card/id/I in H.GetIdCards()) + if(!I.associated_account_id) + I.associated_account_id = M.account_id + break // overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/qdel() /datum/job/proc/equip_preview(mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade, var/additional_skips) @@ -166,7 +170,7 @@ . = outfit.equip_outfit(H, alt_title || title, equip_adjustments = (OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP|OUTFIT_ADJUSTMENT_SKIP_ID_PDA|additional_skips), job = src, rank = grade) /datum/job/proc/get_access() - if(minimal_access.len && (!config || config.jobs_have_minimal_access)) + if(minimal_access.len && get_config_value(/decl/config/toggle/on/jobs_have_minimal_access)) return minimal_access?.Copy() return access?.Copy() @@ -175,7 +179,7 @@ return (available_in_days(C) == 0) //Available in 0 days = available right now = player is old enough to play. /datum/job/proc/available_in_days(client/C) - if(C && config.use_age_restriction_for_jobs && isnull(C.holder) && isnum(C.player_age) && isnum(minimal_player_age)) + if(C && get_config_value(/decl/config/num/use_age_restriction_for_jobs) && isnull(C.holder) && isnum(C.player_age) && isnum(minimal_player_age)) return max(0, minimal_player_age - C.player_age) return 0 diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 771dc6e7423..e8e49a0f68a 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -3,7 +3,7 @@ var/global/list/whitelist = list() /hook/startup/proc/loadWhitelist() - if(config.usewhitelist) + if(get_config_value(/decl/config/toggle/usewhitelist)) load_whitelist() return 1 @@ -20,8 +20,8 @@ var/global/list/whitelist = list() var/global/list/alien_whitelist = list() /hook/startup/proc/loadAlienWhitelist() - if(config.usealienwhitelist) - if(config.usealienwhitelistSQL) + if(get_config_value(/decl/config/toggle/use_alien_whitelist)) + if(get_config_value(/decl/config/toggle/use_alien_whitelist_sql)) if(!load_alienwhitelistSQL()) to_world_log("Could not load alienwhitelist via SQL") else @@ -74,7 +74,7 @@ var/global/list/alien_whitelist = list() var/decl/language/L = species if(L.flags & LANG_FLAG_RESTRICTED) return FALSE - if(!config.usealienwhitelist || !(L.flags & LANG_FLAG_WHITELISTED)) + if(!get_config_value(/decl/config/toggle/use_alien_whitelist) || !(L.flags & LANG_FLAG_WHITELISTED)) return TRUE return whitelist_lookup(L.name, M.ckey) @@ -82,7 +82,7 @@ var/global/list/alien_whitelist = list() var/decl/species/S = species if(S.spawn_flags & SPECIES_IS_RESTRICTED) return FALSE - if(!config.usealienwhitelist || !(S.spawn_flags & SPECIES_IS_WHITELISTED)) + if(!get_config_value(/decl/config/toggle/use_alien_whitelist) || !(S.spawn_flags & SPECIES_IS_WHITELISTED)) return TRUE return whitelist_lookup(S.get_root_species_name(M), M.ckey) @@ -92,7 +92,7 @@ var/global/list/alien_whitelist = list() if(!alien_whitelist) return FALSE - if(config.usealienwhitelistSQL) + if(get_config_value(/decl/config/toggle/use_alien_whitelist_sql)) //SQL Whitelist if(!(ckey in alien_whitelist)) return FALSE diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index f06b1cd5057..2e765a3ab86 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -1,7 +1,7 @@ /obj/machinery/optable name = "operating table" desc = "Used for advanced medical procedures." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/machines/medical/operating_table.dmi' icon_state = "table2-idle" density = TRUE anchored = TRUE @@ -67,7 +67,7 @@ /obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) . = (air_group || height == 0 || (istype(mover) && mover.checkpass(PASS_FLAG_TABLE))) -/obj/machinery/optable/receive_mouse_drop(atom/dropping, mob/user) +/obj/machinery/optable/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!.) if(istype(dropping, /obj/item) && user.get_active_hand() == dropping && user.try_unequip(dropping, loc)) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 5535594062e..f0faa458c4e 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -317,7 +317,7 @@ return TRUE return ..() -/obj/machinery/sleeper/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/machinery/sleeper/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && ismob(dropping)) var/mob/target = dropping diff --git a/code/game/machinery/_machines_base/machine_construction/pipe.dm b/code/game/machinery/_machines_base/machine_construction/pipe.dm index 5ea202b73ea..4667327dd0e 100644 --- a/code/game/machinery/_machines_base/machine_construction/pipe.dm +++ b/code/game/machinery/_machines_base/machine_construction/pipe.dm @@ -44,7 +44,7 @@ return TRUE playsound(get_turf(machine), 'sound/items/Welder2.ogg', 50, 1) TRANSFER_STATE(/decl/machine_construction/default/deconstructed) - machine.visible_message(SPAN_NOTICE("\The [user] unwelds \the [src].")) + machine.visible_message(SPAN_NOTICE("\The [user] unwelds \the [machine].")) machine.dismantle() /decl/machine_construction/pipe/welder/mechanics_info() diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index 70f7aeca353..0bb2cdcc460 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -85,6 +85,7 @@ Class Procs: matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_PRIMARY ) + temperature_sensitive = TRUE abstract_type = /obj/machinery var/stat = 0 @@ -407,7 +408,7 @@ Class Procs: to_chat(user, "Following parts detected in the machine:") for(var/obj/item/C in component_parts) var/line = " [C.name]" - if(!C.health) + if(!C.current_health) line = " [C.name] (destroyed)" else if(C.get_percent_health() < 75) line = " [C.name] (damaged)" diff --git a/code/game/machinery/_machines_base/machinery_components.dm b/code/game/machinery/_machines_base/machinery_components.dm index 9a0346c17ed..5fe49c94802 100644 --- a/code/game/machinery/_machines_base/machinery_components.dm +++ b/code/game/machinery/_machines_base/machinery_components.dm @@ -152,7 +152,7 @@ var/global/list/machine_path_to_circuit_type CRASH("Tried to insert \a '[part]' twice in \the [src] ([x], [y], [z])!") LAZYADD(component_parts, part) part.on_install(src) - events_repository.register(/decl/observ/destroyed, part, src, .proc/component_destroyed) + events_repository.register(/decl/observ/destroyed, part, src, PROC_REF(component_destroyed)) else if(ispath(part)) LAZYINITLIST(uncreated_component_parts) uncreated_component_parts[part] += 1 diff --git a/code/game/machinery/_machines_base/machinery_power.dm b/code/game/machinery/_machines_base/machinery_power.dm index 338a9a7a452..9e3aaff8a48 100644 --- a/code/game/machinery/_machines_base/machinery_power.dm +++ b/code/game/machinery/_machines_base/machinery_power.dm @@ -87,10 +87,10 @@ This is /obj/machinery level code to properly manage power usage from the area. if(MACHINE_UPDATES_FROM_AREA_POWER) var/area/my_area = get_area(src) if(istype(my_area)) - events_repository.register(/decl/observ/area_power_change, my_area, src, .proc/power_change) + events_repository.register(/decl/observ/area_power_change, my_area, src, PROC_REF(power_change)) if(mapload) // currently outside mapload, movables trigger loc/Entered(src, null) in ..(), which will update power. REPORT_POWER_CONSUMPTION_CHANGE(0, get_power_usage()) - events_repository.register(/decl/observ/moved, src, src, .proc/update_power_on_move) + events_repository.register(/decl/observ/moved, src, src, PROC_REF(update_power_on_move)) power_init_complete = TRUE . = ..() @@ -99,8 +99,8 @@ This is /obj/machinery level code to properly manage power usage from the area. if(MACHINE_UPDATES_FROM_AREA_POWER) var/area/my_area = get_area(src) if(istype(my_area)) - events_repository.unregister(/decl/observ/area_power_change, my_area, src, .proc/power_change) - events_repository.unregister(/decl/observ/moved, src, src, .proc/update_power_on_move) + events_repository.unregister(/decl/observ/area_power_change, my_area, src, PROC_REF(power_change)) + events_repository.unregister(/decl/observ/moved, src, src, PROC_REF(update_power_on_move)) REPORT_POWER_CONSUMPTION_CHANGE(get_power_usage(), 0) . = ..() @@ -120,11 +120,11 @@ This is /obj/machinery level code to properly manage power usage from the area. if(old_area) old_area.power_use_change(power, 0, power_channel) if(MACHINE_UPDATES_FROM_AREA_POWER) - events_repository.unregister(/decl/observ/area_power_change, old_area, src, .proc/power_change) + events_repository.unregister(/decl/observ/area_power_change, old_area, src, PROC_REF(power_change)) if(new_area) new_area.power_use_change(0, power, power_channel) if(MACHINE_UPDATES_FROM_AREA_POWER) - events_repository.register(/decl/observ/area_power_change, new_area, src, .proc/power_change) + events_repository.register(/decl/observ/area_power_change, new_area, src, PROC_REF(power_change)) power_change() // Force check in case the old area was powered and the new one isn't or vice versa. diff --git a/code/game/machinery/_machines_base/machinery_public_vars.dm b/code/game/machinery/_machines_base/machinery_public_vars.dm index 27ef2d83efb..d1288ef7817 100644 --- a/code/game/machinery/_machines_base/machinery_public_vars.dm +++ b/code/game/machinery/_machines_base/machinery_public_vars.dm @@ -62,7 +62,7 @@ Must be implemented by subtypes. return islist(new_value) if(IC_FORMAT_INDEX) return isnum(new_value) - + /* Listener registration. You must unregister yourself if you are destroyed; the owner being destroyed will be handled automatically. */ @@ -75,7 +75,7 @@ Listener registration. You must unregister yourself if you are destroyed; the ow return // Can try and register, but updates aren't coming if(!listeners[owner]) listeners[owner] = list() - events_repository.register(/decl/observ/destroyed, owner, src, .proc/owner_destroyed) + events_repository.register(/decl/observ/destroyed, owner, src, PROC_REF(owner_destroyed)) LAZYADD(listeners[owner][listener], registered_proc) return TRUE diff --git a/code/game/machinery/_machines_base/machinery_public_vars_common.dm b/code/game/machinery/_machines_base/machinery_public_vars_common.dm index 63e856c7588..30de5ce9da6 100644 --- a/code/game/machinery/_machines_base/machinery_public_vars_common.dm +++ b/code/game/machinery/_machines_base/machinery_public_vars_common.dm @@ -24,7 +24,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /decl/public_access/public_method/toggle_input_toggle name = "toggle input" desc = "Toggles the input toggle variable." - call_proc = /obj/machinery/proc/toggle_input_toggle + call_proc = TYPE_PROC_REF(/obj/machinery, toggle_input_toggle) /obj/machinery/proc/toggle_input_toggle() var/decl/public_access/public_variable/variable = GET_DECL(/decl/public_access/public_variable/input_toggle) @@ -141,7 +141,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /decl/public_access/public_method/toggle_power name = "toggle power" desc = "Turns the machine on or off." - call_proc = /obj/machinery/proc/toggle_power + call_proc = TYPE_PROC_REF(/obj/machinery, toggle_power) /obj/machinery/proc/toggle_power() update_use_power(!use_power) @@ -149,7 +149,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /decl/public_access/public_method/refresh name = "refresh machine" desc = "Attempts to refresh the machine's status. Implementation may vary." - call_proc = /obj/machinery/proc/refresh + call_proc = TYPE_PROC_REF(/obj/machinery, refresh) /obj/machinery/proc/refresh() queue_icon_update() \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm b/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm index 035c2daf23b..f8d322d4361 100644 --- a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm +++ b/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm @@ -89,7 +89,7 @@ SetName("broken [name]") /obj/item/stock_parts/proc/is_functional() - return (!can_take_damage()) || (health > 0) + return (!can_take_damage()) || (current_health > 0) /obj/item/stock_parts/examine(mob/user) . = ..() diff --git a/code/game/machinery/_machines_base/stock_parts/access_lock.dm b/code/game/machinery/_machines_base/stock_parts/access_lock.dm index c786b7b4f7e..c69c206ed6e 100644 --- a/code/game/machinery/_machines_base/stock_parts/access_lock.dm +++ b/code/game/machinery/_machines_base/stock_parts/access_lock.dm @@ -106,7 +106,7 @@ if(!req_access) locked = FALSE else - var/obj/item/card/id/I = user.GetIdCard() + var/obj/item/card/id/I = user.GetIdCard() if(!istype(I, /obj/item/card/id)) to_chat(user, SPAN_WARNING("[\src] flashes a yellow LED near the ID scanner. Did you remember to scan your ID or PDA?")) return TOPIC_HANDLED diff --git a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm b/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm index ed87e48ab3f..7eb99203b77 100644 --- a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm +++ b/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm @@ -4,7 +4,7 @@ name = "scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "scan_module" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) base_type = /obj/item/stock_parts/scanning_module @@ -14,7 +14,7 @@ name = "micro-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "micro_mani" - origin_tech = "{'materials':1,'programming':1}" + origin_tech = @'{"materials":1,"programming":1}' material = /decl/material/solid/metal/steel base_type = /obj/item/stock_parts/manipulator w_class = ITEM_SIZE_TINY @@ -23,7 +23,7 @@ name = "micro-laser" desc = "A tiny laser used in certain devices." icon_state = "micro_laser" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) base_type = /obj/item/stock_parts/micro_laser @@ -33,7 +33,7 @@ name = "matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "matter_bin" - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel base_type = /obj/item/stock_parts/matter_bin @@ -41,7 +41,7 @@ name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." icon_state = "capacitor" - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) var/charge = 0 @@ -69,7 +69,7 @@ name = "advanced scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "advanced_scan_module" - origin_tech = "{'magnets':3}" + origin_tech = @'{"magnets":3}' rating = 2 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) @@ -78,7 +78,7 @@ name = "nano-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "nano_mani" - origin_tech = "{'materials':3,'programming':2}" + origin_tech = @'{"materials":3,"programming":2}' rating = 2 material = /decl/material/solid/metal/steel @@ -86,7 +86,7 @@ name = "high-power micro-laser" desc = "A tiny laser used in certain devices." icon_state = "high_micro_laser" - origin_tech = "{'magnets':3}" + origin_tech = @'{"magnets":3}' rating = 2 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) @@ -95,14 +95,14 @@ name = "advanced matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "advanced_matter_bin" - origin_tech = "{'materials':3}" + origin_tech = @'{"materials":3}' rating = 2 material = /decl/material/solid/metal/steel /obj/item/stock_parts/capacitor/adv name = "advanced capacitor" desc = "An advanced capacitor used in the construction of a variety of devices." - origin_tech = "{'powerstorage':3}" + origin_tech = @'{"powerstorage":3}' icon_state = "advanced_capacitor" rating = 2 @@ -112,7 +112,7 @@ name = "phasic scanning module" desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." icon_state = "phasic_scan_module" - origin_tech = "{'magnets':5}" + origin_tech = @'{"magnets":5}' rating = 3 material = /decl/material/solid/metal/steel matter = list( @@ -124,7 +124,7 @@ name = "pico-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "pico_mani" - origin_tech = "{'materials':5,'programming':2}" + origin_tech = @'{"materials":5,"programming":2}' rating = 3 material = /decl/material/solid/metal/steel @@ -132,7 +132,7 @@ name = "ultra-high-power micro-laser" icon_state = "ultra_high_micro_laser" desc = "A tiny laser used in certain devices." - origin_tech = "{'magnets':5}" + origin_tech = @'{"magnets":5}' rating = 3 material = /decl/material/solid/metal/steel matter = list( @@ -144,7 +144,7 @@ name = "super matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "super_matter_bin" - origin_tech = "{'materials':5}" + origin_tech = @'{"materials":5}' rating = 3 material = /decl/material/solid/metal/steel @@ -152,7 +152,7 @@ name = "super capacitor" desc = "A super-high capacity capacitor used in the construction of a variety of devices." icon_state = "super_capacitor" - origin_tech = "{'powerstorage':5,'materials':4}" + origin_tech = @'{"powerstorage":5,"materials":4}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -166,7 +166,7 @@ name = "subspace ansible" icon_state = "subspace_ansible" desc = "A compact module capable of sensing extradimensional activity." - origin_tech = "{'programming':3,'magnets':5,'materials':4,'wormholes':2}" + origin_tech = @'{"programming":3,"magnets":5,"materials":4,"wormholes":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT) @@ -174,7 +174,7 @@ name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." - origin_tech = "{'programming':4,'magnets':2}" + origin_tech = @'{"programming":4,"magnets":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT) @@ -182,7 +182,7 @@ name = "subspace amplifier" icon_state = "subspace_amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - origin_tech = "{'programming':3,'magnets':4,'materials':4,'wormholes':2}" + origin_tech = @'{"programming":3,"magnets":4,"materials":4,"wormholes":2}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT, @@ -193,7 +193,7 @@ name = "subspace treatment disk" icon_state = "treatment_disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - origin_tech = "{'programming':3,'magnets':2,'materials':5,'wormholes':2}" + origin_tech = @'{"programming":3,"magnets":2,"materials":5,"wormholes":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT) @@ -201,7 +201,7 @@ name = "subspace wavelength analyzer" icon_state = "wavelength_analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - origin_tech = "{'programming':3,'magnets':4,'materials':4,'wormholes':2}" + origin_tech = @'{"programming":3,"magnets":4,"materials":4,"wormholes":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT) @@ -209,7 +209,7 @@ name = "ansible crystal" icon_state = "ansible_crystal" desc = "A crystal made from pure glass used to transmit laser databursts to subspace." - origin_tech = "{'magnets':4,'materials':4,'wormholes':2}" + origin_tech = @'{"magnets":4,"materials":4,"wormholes":2}' material = /decl/material/solid/glass matter = list( /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, @@ -220,7 +220,7 @@ name = "subspace transmitter" icon_state = "subspace_transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." - origin_tech = "{'magnets':5,'materials':5,'wormholes':3}" + origin_tech = @'{"magnets":5,"materials":5,"wormholes":3}' material = /decl/material/solid/glass matter = list( /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/game/machinery/_machines_base/stock_parts/network_lock.dm b/code/game/machinery/_machines_base/stock_parts/network_lock.dm index a5f8b4c1608..ec3c902e53d 100644 --- a/code/game/machinery/_machines_base/stock_parts/network_lock.dm +++ b/code/game/machinery/_machines_base/stock_parts/network_lock.dm @@ -310,4 +310,27 @@ return SPAN_WARNING("\The [lock] flashes red! You lack the access to unlock this.") return ..() -#undef MAX_PATTERNS \ No newline at end of file +#undef MAX_PATTERNS + +//Stock part preset for network locks +/decl/stock_part_preset/network_lock + expected_part_type = /obj/item/stock_parts/network_receiver/network_lock + var/network_id + var/network_passkey + var/list/allowed_groups + var/requires_network = FALSE + +/decl/stock_part_preset/network_lock/do_apply(obj/machinery/machine, obj/item/stock_parts/network_receiver/network_lock/part) + part.initial_network_id = network_id + part.initial_network_key = network_passkey + + var/list/resulting_list = list() + for(var/entry in allowed_groups) + if(istext(entry)) + resulting_list += list(list(entry)) + else if(islist(entry) && length(entry)) + resulting_list += list(deepCopyList(entry)) + + if(length(resulting_list)) + part.access_keys = resulting_list + part.requires_network = requires_network diff --git a/code/game/machinery/_machines_base/stock_parts/power/battery.dm b/code/game/machinery/_machines_base/stock_parts/power/battery.dm index b1ac9b50f09..f883e307f14 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/battery.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/battery.dm @@ -43,7 +43,7 @@ if(cell) return cell = new_cell - events_repository.register(/decl/observ/destroyed, cell, src, .proc/remove_cell) + events_repository.register(/decl/observ/destroyed, cell, src, PROC_REF(remove_cell)) if(!machine) machine = loc if(istype(machine)) diff --git a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm index 8372665d500..a71a649a8aa 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm @@ -12,11 +12,11 @@ if(status & PART_STAT_ACTIVE) machine.update_power_channel(cached_channel) unset_status(machine, PART_STAT_ACTIVE) - qdel(terminal) // Will call unset_terminal(). + QDEL_NULL(terminal) // Will call unset_terminal(). ..() /obj/item/stock_parts/power/terminal/Destroy() - qdel(terminal) + QDEL_NULL(terminal) . = ..() /obj/item/stock_parts/power/terminal/machine_process(var/obj/machinery/machine) @@ -72,21 +72,22 @@ terminal = new_terminal terminal.master = src - events_repository.register(/decl/observ/destroyed, terminal, src, .proc/unset_terminal) + events_repository.register(/decl/observ/destroyed, terminal, src, PROC_REF(unset_terminal)) terminal.queue_icon_update() - set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), machine, .proc/machine_moved, get_area(src)) + set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), machine, PROC_REF(machine_moved), get_area(src)) set_status(machine, PART_STAT_CONNECTED) start_processing(machine) /obj/item/stock_parts/power/terminal/proc/machine_moved(var/obj/machinery/machine, var/turf/old_loc, var/turf/new_loc) if(!terminal) - events_repository.unregister(/decl/observ/moved, machine, src, .proc/machine_moved) + events_repository.unregister(/decl/observ/moved, machine, src, PROC_REF(machine_moved)) return if(istype(new_loc) && (terminal.loc == get_step(new_loc, terminal_dir))) return // This location is fine + // TODO: disconnect and drop the terminal as an item instead of deleting it. machine.visible_message(SPAN_WARNING("The terminal is ripped out of \the [machine]!")) - qdel(terminal) // will handle everything via the destroyed event + QDEL_NULL(terminal) // will handle everything via the destroyed event /obj/item/stock_parts/power/terminal/proc/make_terminal(var/obj/machinery/machine) if(!machine) diff --git a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm b/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm index 3ea9f96f1fa..e4e547aa54a 100644 --- a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm +++ b/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm @@ -14,12 +14,9 @@ return if(!buffer) buffer = data - if(latency) - addtimer(CALLBACK(src, .proc/transmit), latency) - else - transmit() + addtimer(CALLBACK(src, PROC_REF(transmit)), latency, TIMER_UNIQUE) else - buffer |= data + buffer = (data |= buffer) // this avoids list copies. basically, give entries already in data priority and add buffered data after /obj/item/stock_parts/radio/transmitter/proc/transmit() if(!LAZYLEN(buffer)) @@ -53,7 +50,7 @@ start_processing(machine) for(var/thing in transmit_on_change) var/decl/public_access/public_variable/variable = transmit_on_change[thing] - variable.register_listener(src, machine, .proc/var_changed) + variable.register_listener(src, machine, PROC_REF(var_changed)) /obj/item/stock_parts/radio/transmitter/basic/on_uninstall(obj/machinery/machine) for(var/thing in transmit_on_change) @@ -93,7 +90,7 @@ if(!is_valid_event(machine, event)) event = null if(event) - event.register_listener(src, machine, .proc/trigger_event) + event.register_listener(src, machine, PROC_REF(trigger_event)) /obj/item/stock_parts/radio/transmitter/on_event/on_uninstall(obj/machinery/machine) if(event) diff --git a/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm b/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm index 22b01cce5db..b1aa3c32f90 100644 --- a/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm +++ b/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm @@ -2,7 +2,7 @@ name = "console screen" desc = "Used in the construction of computers and other devices with an interactive screen." icon_state = "output" - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/fiberglass base_type = /obj/item/stock_parts/console_screen part_flags = PART_FLAG_HAND_REMOVE @@ -22,7 +22,7 @@ name = "input controller" desc = "A standard part required by many machines to recieve user input." icon_state = "input" - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/organic/plastic base_type = /obj/item/stock_parts/keyboard part_flags = PART_FLAG_HAND_REMOVE diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index d019e63de98..a096fb4e0db 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -62,7 +62,7 @@ uncreated_component_parts = list(/obj/item/stock_parts/power/apc = 1) construct_state = /decl/machine_construction/wall_frame/panel_closed wires = /datum/wires/alarm - directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':-21}, 'WEST':{'x':21}}" + directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":-21}, "WEST":{"x":21}}' var/alarm_id = null var/breach_detection = 1 // Whether to use automatic breach detection or not @@ -146,7 +146,8 @@ return // spawned in nullspace, presumably as a prototype for construction purposes. area_uid = alarm_area.uid - // breathable air according to human/Life() + // breathable air according to default human species + // TODO: make it use map default species? var/decl/material/gas_mat = GET_DECL(/decl/material/gas/oxygen) TLV[gas_mat.gas_name] = list(16, 19, 135, 140) // Partial pressure, kpa gas_mat = GET_DECL(/decl/material/gas/carbon_dioxide) @@ -175,8 +176,8 @@ if((stat & (NOPOWER|BROKEN)) || shorted) return - var/turf/simulated/location = loc - if(!istype(location)) return//returns if loc is not simulated + var/turf/location = loc + if(!istype(location) || !location.simulated) return//returns if loc is not simulated var/datum/gas_mixture/environment = location.return_air() @@ -285,9 +286,9 @@ // Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. /obj/machinery/alarm/proc/breach_detected() - var/turf/simulated/location = loc + var/turf/location = loc - if(!istype(location)) + if(!istype(location) || !location.simulated) return 0 if(breach_detection == 0) @@ -795,13 +796,13 @@ if(old_area && old_area == alarm_area) alarm_area = null area_uid = null - events_repository.unregister(/decl/observ/name_set, old_area, src, .proc/change_area_name) + events_repository.unregister(/decl/observ/name_set, old_area, src, PROC_REF(change_area_name)) if(new_area) ASSERT(isnull(alarm_area)) alarm_area = new_area area_uid = new_area.uid change_area_name(alarm_area, null, alarm_area.name) - events_repository.register(/decl/observ/name_set, alarm_area, src, .proc/change_area_name) + events_repository.register(/decl/observ/name_set, alarm_area, src, PROC_REF(change_area_name)) for(var/device_tag in alarm_area.air_scrub_names + alarm_area.air_vent_names) send_signal(device_tag, list()) // ask for updates; they initialized before us and we didn't get the data @@ -824,7 +825,7 @@ FIRE ALARM frame_type = /obj/item/frame/fire_alarm uncreated_component_parts = list(/obj/item/stock_parts/power/apc = 1) construct_state = /decl/machine_construction/wall_frame/panel_closed - directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':21}, 'WEST':{'x':-21}}" + directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":21}, "WEST":{"x":-21}}' var/detecting = TRUE var/working = TRUE @@ -842,38 +843,31 @@ FIRE ALARM var/decl/security_state/security_state = GET_DECL(global.using_map.security_state) to_chat(user, "The current alert level is [security_state.current_security_level.name].") -/obj/machinery/firealarm/proc/get_cached_overlay(key) - if(!LAZYACCESS(overlays_cache, key)) - var/state - switch(key) - if(/decl/machine_construction/wall_frame/panel_open) - state = "b2" - if(/decl/machine_construction/wall_frame/no_wires) - state = "b1" - if(/decl/machine_construction/wall_frame/no_circuit) - state = "b0" - else - state = key - LAZYSET(overlays_cache, key, image(icon, state)) - return overlays_cache[key] - /obj/machinery/firealarm/on_update_icon() - overlays.Cut() + cut_overlays() icon_state = "casing" if(construct_state && !istype(construct_state, /decl/machine_construction/wall_frame/panel_closed)) - overlays += get_cached_overlay(construct_state.type) + var/construct_icon_state + switch(construct_state.type) + if(/decl/machine_construction/wall_frame/panel_open) + construct_icon_state = "b2" + if(/decl/machine_construction/wall_frame/no_wires) + construct_icon_state = "b1" + if(/decl/machine_construction/wall_frame/no_circuit) + construct_icon_state = "b0" + add_overlay(construct_icon_state) set_light(0) return if(stat & BROKEN) - overlays += get_cached_overlay("broken") + add_overlay("broken") set_light(0) else if(stat & NOPOWER) - overlays += get_cached_overlay("unpowered") + add_overlay("unpowered") set_light(0) else if(!detecting) - overlays += get_cached_overlay("fire1") + add_overlay("fire1") set_light(2, 0.25, COLOR_RED) else if(isContactLevel(z)) var/decl/security_state/security_state = GET_DECL(global.using_map.security_state) @@ -884,20 +878,19 @@ FIRE ALARM if(sl.alarm_appearance.alarm_icon) var/image/alert1 = image(sl.icon, sl.alarm_appearance.alarm_icon) alert1.color = sl.alarm_appearance.alarm_icon_color - overlays |= alert1 + add_overlay(alert1) if(sl.alarm_appearance.alarm_icon_twotone) var/image/alert2 = image(sl.icon, sl.alarm_appearance.alarm_icon_twotone) alert2.color = sl.alarm_appearance.alarm_icon_twotone_color - overlays |= alert2 + add_overlay(alert2) else - overlays += get_cached_overlay("fire0") + add_overlay("fire0") /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(src.detecting) - if(exposed_temperature > T0C+200) - src.alarm() // added check of detector status here - return + if(detecting && exposed_temperature > T0C+200) + alarm() + return ..() /obj/machinery/firealarm/bullet_act() return src.alarm() @@ -1036,7 +1029,7 @@ FIRE ALARM idle_power_usage = 2 active_power_usage = 6 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':21}, 'WEST':{'x':-21}}" + directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":21}, "WEST":{"x":-21}}' var/time = 1 SECOND var/timing = FALSE var/working = TRUE diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index dd4c4aab632..a08744dd251 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -161,7 +161,7 @@ input_info = null refreshing_input = TRUE input_flow_setting = input("What would you like to set the rate limit to?", "Set Volume", input_flow_setting) as num|null - input_flow_setting = clamp(0, input_flow_setting, ATMOS_DEFAULT_VOLUME_PUMP+500) + input_flow_setting = clamp(input_flow_setting, 0, ATMOS_DEFAULT_VOLUME_PUMP+500) signal.data = list ("tag" = input_tag, "set_volume_rate" = input_flow_setting) . = 1 @@ -188,7 +188,7 @@ output_info = null refreshing_output = TRUE pressure_setting = input("How much pressure would you like to output?", "Set Pressure", pressure_setting) as num|null - pressure_setting = clamp(0, pressure_setting, MAX_PUMP_PRESSURE) + pressure_setting = clamp(pressure_setting, 0, MAX_PUMP_PRESSURE) signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]", "status" = 1) . = 1 @@ -196,7 +196,7 @@ output_info = null refreshing_output = TRUE pressure_setting = input("How much pressure would you like to maintain inside the core?", "Set Core Pressure", pressure_setting) as num|null - pressure_setting = clamp(0, pressure_setting, MAX_PUMP_PRESSURE) + pressure_setting = clamp(pressure_setting, 0, MAX_PUMP_PRESSURE) signal.data = list ("tag" = output_tag, "set_external_pressure" = pressure_setting, "checks" = 1, "status" = 1) . = 1 diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index fc10ef624ba..592374d4739 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -1,28 +1,26 @@ /obj/machinery/portable_atmospherics/canister - name = "\improper Canister: \[CAUTION\]" + name = "canister" icon = 'icons/obj/atmos.dmi' icon_state = "yellow" density = TRUE - var/health = 100.0 + max_health = 100 obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_GARGANTUAN construct_state = /decl/machine_construction/pipe/welder uncreated_component_parts = null + start_pressure = 45 ATM + volume = 1000 + interact_offline = TRUE matter = list( /decl/material/solid/metal/steel = 10 * SHEET_MATERIAL_AMOUNT ) - var/valve_open = 0 - var/release_pressure = ONE_ATMOSPHERE - var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s - - var/canister_color = "yellow" - var/can_label = 1 - start_pressure = 45 ATM + var/valve_open = FALSE + var/release_pressure = ONE_ATMOSPHERE + var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s + var/canister_color = "yellow" + var/can_label = TRUE var/temperature_resistance = 1000 + T0C - volume = 1000 - interact_offline = 1 // Allows this to be used when not in powered area. - var/update_flag = 0 /obj/machinery/portable_atmospherics/canister/Initialize(mapload, material) if(ispath(material)) @@ -34,170 +32,128 @@ return -1 /obj/machinery/portable_atmospherics/canister/sleeping_agent - name = "\improper Canister: \[N2O\]" - icon_state = "redws" + name = "\improper N2O canister" + icon_state = "redws" canister_color = "redws" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/nitrogen - name = "\improper Canister: \[N2\]" - icon_state = "red" + name = "nitrogen canister" + icon_state = "red" canister_color = "red" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/nitrogen/prechilled - name = "\improper Canister: \[N2 (Cooling)\]" + name = "cryogenic nitrogen canister" + start_pressure = 20 ATM /obj/machinery/portable_atmospherics/canister/oxygen - name = "\improper Canister: \[O2\]" - icon_state = "blue" + name = "oxygen canister" + icon_state = "blue" canister_color = "blue" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/oxygen/prechilled - name = "\improper Canister: \[O2 (Cryo)\]" + name = "cryogenic oxygen canister" start_pressure = 20 ATM /obj/machinery/portable_atmospherics/canister/hydrogen - name = "\improper Canister: \[Hydrogen\]" - icon_state = "purple" + name = "hydrogen canister" + icon_state = "purple" canister_color = "purple" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/carbon_dioxide - name = "\improper Canister \[CO2\]" - icon_state = "black" + name = "\improper CO2 canister" + icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/air - name = "\improper Canister \[Air\]" - icon_state = "grey" + name = "air canister" + icon_state = "grey" canister_color = "grey" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/air/airlock start_pressure = 3 ATM /obj/machinery/portable_atmospherics/canister/empty start_pressure = 0 - can_label = 1 + can_label = TRUE var/obj/machinery/portable_atmospherics/canister/canister_type = /obj/machinery/portable_atmospherics/canister /obj/machinery/portable_atmospherics/canister/empty/Initialize() . = ..() - name = initial(canister_type.name) - icon_state = initial(canister_type.icon_state) - canister_color = initial(canister_type.canister_color) + name = initial(canister_type.name) + icon_state = initial(canister_type.icon_state) + canister_color = initial(canister_type.canister_color) /obj/machinery/portable_atmospherics/canister/empty/air - icon_state = "grey" + icon_state = "grey" canister_type = /obj/machinery/portable_atmospherics/canister/air /obj/machinery/portable_atmospherics/canister/empty/oxygen - icon_state = "blue" + icon_state = "blue" canister_type = /obj/machinery/portable_atmospherics/canister/oxygen /obj/machinery/portable_atmospherics/canister/empty/nitrogen - icon_state = "red" + icon_state = "red" canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen /obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide - icon_state = "black" + icon_state = "black" canister_type = /obj/machinery/portable_atmospherics/canister/carbon_dioxide /obj/machinery/portable_atmospherics/canister/empty/sleeping_agent - icon_state = "redws" + icon_state = "redws" canister_type = /obj/machinery/portable_atmospherics/canister/sleeping_agent /obj/machinery/portable_atmospherics/canister/empty/hydrogen - icon_state = "purple" + icon_state = "purple" canister_type = /obj/machinery/portable_atmospherics/canister/hydrogen +/obj/machinery/portable_atmospherics/canister/empty/chlorine + icon_state = "green" + canister_type = /obj/machinery/portable_atmospherics/canister/chlorine +/obj/machinery/portable_atmospherics/canister/on_update_icon() + cut_overlays() + + if(destroyed) + icon_state = "[canister_color]-1" + return + icon_state = canister_color -/obj/machinery/portable_atmospherics/canister/proc/check_change() - var/old_flag = update_flag - update_flag = 0 if(holding) - update_flag |= 1 + add_overlay("can-open") if(get_port()) - update_flag |= 2 + add_overlay("can-connector") var/tank_pressure = return_pressure() if(tank_pressure < 10) - update_flag |= 4 + add_overlay("can-o0") else if(tank_pressure < ONE_ATMOSPHERE) - update_flag |= 8 + add_overlay("can-o1") else if(tank_pressure < (15 ATM)) - update_flag |= 16 - else - update_flag |= 32 - - if(update_flag == old_flag) - return 1 + add_overlay("can-o2") else - return 0 - -/obj/machinery/portable_atmospherics/canister/on_update_icon() -/* -update_flag -1 = holding -2 = connected_port -4 = tank_pressure < 10 -8 = tank_pressure < ONE_ATMOS -16 = tank_pressure < 15*ONE_ATMOS -32 = tank_pressure go boom. -*/ - - if (src.destroyed) - overlays.Cut() - src.icon_state = text("[]-1", src.canister_color) - return - - if(icon_state != "[canister_color]") - icon_state = "[canister_color]" - - if(check_change()) //Returns 1 if no change needed to icons. - return - - overlays.Cut() - - if(update_flag & 1) - overlays += "can-open" - if(update_flag & 2) - overlays += "can-connector" - if(update_flag & 4) - overlays += "can-o0" - if(update_flag & 8) - overlays += "can-o1" - else if(update_flag & 16) - overlays += "can-o2" - else if(update_flag & 32) - overlays += "can-o3" - return + add_overlay("can-o3") /obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > temperature_resistance) - health -= 5 + current_health -= 5 healthcheck() + return ..() /obj/machinery/portable_atmospherics/canister/proc/healthcheck() - if(destroyed) - return 1 - - if (src.health <= 10) - var/atom/location = src.loc + if(!destroyed && current_health <= 10) + var/atom/location = loc location.assume_air(air_contents) - - src.destroyed = 1 - playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) - src.set_density(0) + destroyed = TRUE + playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) + set_density(FALSE) + if(holding) + holding.dropInto(loc) + holding = null update_icon() - - if (src.holding) - src.holding.dropInto(loc) - src.holding = null - - return 1 - else - return 1 + return TRUE /obj/machinery/portable_atmospherics/canister/dismantle() var/turf/T = get_turf(src) @@ -208,6 +164,7 @@ update_flag qdel(src) /obj/machinery/portable_atmospherics/canister/Process() + if (destroyed) return @@ -226,28 +183,23 @@ update_flag if((air_contents.temperature > 0) && (pressure_delta > 0)) var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) transfer_moles = min(transfer_moles, (release_flow_rate/air_contents.volume)*air_contents.total_moles) //flow rate limit + pump_gas_passive(src, air_contents, environment, transfer_moles) - var/returnval = pump_gas_passive(src, air_contents, environment, transfer_moles) - if(returnval >= 0) - src.update_icon() - if(holding) - holding.queue_icon_update() + can_label = (air_contents?.return_pressure() < 1) + air_contents?.react() - if(air_contents.return_pressure() < 1) - can_label = 1 - else - can_label = 0 - - air_contents.react() + update_icon() + if(holding) + holding.update_icon() /obj/machinery/portable_atmospherics/canister/proc/return_temperature() - var/datum/gas_mixture/GM = src.return_air() + var/datum/gas_mixture/GM = return_air() if(GM && GM.volume>0) return GM.temperature return 0 /obj/machinery/portable_atmospherics/canister/proc/return_pressure() - var/datum/gas_mixture/GM = src.return_air() + var/datum/gas_mixture/GM = return_air() if(GM && GM.volume>0) return GM.return_pressure() return 0 @@ -255,39 +207,33 @@ update_flag /obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) return - if(Proj.damage) - src.health -= round(Proj.damage / 2) + current_health -= round(Proj.damage / 2) healthcheck() - ..() + return ..() /obj/machinery/portable_atmospherics/canister/bash(var/obj/item/W, var/mob/user) . = ..() if(.) - health -= W.force + current_health -= W.force healthcheck() /obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W, var/mob/user) if(isrobot(user) && istype(W, /obj/item/tank/jetpack)) var/obj/item/tank/jetpack/pack = W var/datum/gas_mixture/thejetpack = pack.air_contents - if(!thejetpack) - return FALSE - var/env_pressure = thejetpack.return_pressure() - var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2) - //Can not have a pressure delta that would cause environment pressure > tank pressure - var/transfer_moles = 0 - if((air_contents.temperature > 0) && (pressure_delta > 0)) - transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - thejetpack.merge(removed) - to_chat(user, "You pulse-pressurize your jetpack from the tank.") - return TRUE - return FALSE - - . = ..() - - SSnano.update_uis(src) // Update all NanoUIs attached to src + if(thejetpack) + var/env_pressure = thejetpack.return_pressure() + var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2) + //Can not have a pressure delta that would cause environment pressure > tank pressure + var/transfer_moles = 0 + if((air_contents.temperature > 0) && (pressure_delta > 0)) + transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + thejetpack.merge(removed) + to_chat(user, "You pulse-pressurize your jetpack from the tank.") + return TRUE + return ..() /obj/machinery/portable_atmospherics/canister/interface_interact(mob/user) ui_interact(user) @@ -361,7 +307,7 @@ update_flag if (label && CanUseTopic(user, state)) canister_color = colors[label] icon_state = colors[label] - SetName("\improper Canister: [label]") + SetName("canister: [label]") update_icon() . = TOPIC_REFRESH @@ -373,93 +319,93 @@ update_flag /obj/machinery/portable_atmospherics/canister/oxygen/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/oxygen, MolesForPressure()) - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/hydrogen/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/hydrogen, MolesForPressure()) - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/oxygen/prechilled/Initialize() . = ..() air_contents.temperature = 80 - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/sleeping_agent/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/nitrous_oxide, MolesForPressure()) - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/nitrogen/Initialize() . = ..() - src.air_contents.adjust_gas(/decl/material/gas/nitrogen, MolesForPressure()) - queue_icon_update() + air_contents.adjust_gas(/decl/material/gas/nitrogen, MolesForPressure()) + update_icon() /obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/Initialize() . = ..() - src.air_contents.temperature = 80 - queue_icon_update() + air_contents.temperature = 80 + update_icon() /obj/machinery/portable_atmospherics/canister/carbon_dioxide/Initialize() . = ..() - src.air_contents.adjust_gas(/decl/material/gas/carbon_dioxide, MolesForPressure()) - queue_icon_update() + air_contents.adjust_gas(/decl/material/gas/carbon_dioxide, MolesForPressure()) + update_icon() /obj/machinery/portable_atmospherics/canister/air/Initialize() . = ..() var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi(/decl/material/gas/oxygen, air_mix[/decl/material/gas/oxygen], /decl/material/gas/nitrogen, air_mix[/decl/material/gas/nitrogen]) - queue_icon_update() + air_contents.adjust_multi(/decl/material/gas/oxygen, air_mix[/decl/material/gas/oxygen], /decl/material/gas/nitrogen, air_mix[/decl/material/gas/nitrogen]) + update_icon() // Special types used for engine setup admin verb, they contain double amount of that of normal canister. /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/Initialize() . = ..() - src.air_contents.adjust_gas(/decl/material/gas/nitrogen, MolesForPressure()) - queue_icon_update() + air_contents.adjust_gas(/decl/material/gas/nitrogen, MolesForPressure()) + update_icon() /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/Initialize() . = ..() - src.air_contents.adjust_gas(/decl/material/gas/carbon_dioxide, MolesForPressure()) - queue_icon_update() + air_contents.adjust_gas(/decl/material/gas/carbon_dioxide, MolesForPressure()) + update_icon() /obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup/Initialize() . = ..() - src.air_contents.adjust_gas(/decl/material/gas/hydrogen, MolesForPressure()) - queue_icon_update() + air_contents.adjust_gas(/decl/material/gas/hydrogen, MolesForPressure()) + update_icon() // Spawn debug tanks. /obj/machinery/portable_atmospherics/canister/helium - name = "\improper Canister \[He\]" - icon_state = "black" + name = "helium canister" + icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/helium/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/helium, MolesForPressure()) - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/methyl_bromide - name = "\improper Canister \[CH3Br\]" - icon_state = "black" + name = "\improper CH3Br canister" + icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/methyl_bromide/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/methyl_bromide, MolesForPressure()) - queue_icon_update() + update_icon() /obj/machinery/portable_atmospherics/canister/chlorine - name = "\improper Canister \[Cl\]" - icon_state = "black" - canister_color = "black" - can_label = 0 + name = "chlorine canister" + icon_state = "green" + canister_color = "green" + can_label = FALSE /obj/machinery/portable_atmospherics/canister/chlorine/Initialize() . = ..() air_contents.adjust_gas(/decl/material/gas/chlorine, MolesForPressure()) - queue_icon_update() + update_icon() // End debug tanks. diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 45aa2558c24..4dd3caeb6fd 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -32,7 +32,7 @@ /obj/machinery/meter/proc/set_target(atom/new_target) clear_target() target = new_target - events_repository.register(/decl/observ/destroyed, target, src, .proc/clear_target) + events_repository.register(/decl/observ/destroyed, target, src, PROC_REF(clear_target)) /obj/machinery/meter/proc/clear_target() if(target) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index a046dde2a97..2958d2eab9a 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -2,7 +2,7 @@ name = "atmoalter" use_power = POWER_USE_OFF construct_state = /decl/machine_construction/default/panel_closed - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE var/datum/gas_mixture/air_contents = new var/obj/item/tank/holding @@ -76,37 +76,33 @@ var/datum/extension/atmospherics_connection/connection = get_extension(src, /datum/extension/atmospherics_connection) connection?.update_connected_network() -/obj/machinery/portable_atmospherics/attackby(var/obj/item/W, var/mob/user) - if ((istype(W, /obj/item/tank) && !( src.destroyed ))) - if (src.holding) - return - if(!user.try_unequip(W, src)) - return - src.holding = W +/obj/machinery/portable_atmospherics/attackby(var/obj/item/used_item, var/mob/user) + if ((istype(used_item, /obj/item/tank) && !destroyed)) + if (holding) + return TRUE + if(!user.try_unequip(used_item, src)) + return TRUE + holding = used_item update_icon() - return + return TRUE - else if(IS_WRENCH(W) && !panel_open) + else if(IS_WRENCH(used_item) && !panel_open) if(disconnect()) - to_chat(user, "You disconnect \the [src] from the port.") + to_chat(user, SPAN_NOTICE("You disconnect \the [src] from the port.")) update_icon() - return - else - var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc - if(possible_port) - if(connect(possible_port)) - to_chat(user, "You connect \the [src] to the port.") - update_icon() - return - else - to_chat(user, "\The [src] failed to connect to the port.") - return - else - to_chat(user, "Nothing happens.") - return ..() - - else if (istype(W, /obj/item/scanner/gas)) - return + return TRUE + var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector) in loc + if(possible_port) + if(connect(possible_port)) + to_chat(user, SPAN_NOTICE("You connect \the [src] to the port.")) + update_icon() + return TRUE + to_chat(user, SPAN_NOTICE("\The [src] failed to connect to the port.")) + return TRUE + return ..() + + else if (istype(used_item, /obj/item/scanner/gas)) + return FALSE // allow the scanner's afterattack to run return ..() diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 97fb22a99b3..2c107d7aac1 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -6,7 +6,7 @@ density = TRUE w_class = ITEM_SIZE_NORMAL base_type = /obj/machinery/portable_atmospherics/powered/pump - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE movable_flags = MOVABLE_FLAG_WHEELED var/direction_out = 0 //0 = siphoning, 1 = releasing diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index cd1ca3705e9..e031dac2f19 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -6,7 +6,7 @@ density = TRUE w_class = ITEM_SIZE_NORMAL base_type = /obj/machinery/portable_atmospherics/powered/scrubber - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE movable_flags = MOVABLE_FLAG_WHEELED var/volume_rate = 800 diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index a4210bcb185..26c0956bd3a 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -29,7 +29,7 @@ /obj/item/chems/drinks/milk/smallcarton = 30, /obj/item/chems/drinks/milk = 50, /obj/item/chems/food/meat/syntiflesh = 50, - /obj/item/storage/fancy/egg_box = 300), + /obj/item/storage/box/fancy/egg_box = 300), "Nutrients" = list( /obj/item/chems/glass/bottle/eznutrient = 60, /obj/item/chems/glass/bottle/left4zed = 120, @@ -129,7 +129,7 @@ user.set_machine(src) var/list/data = list() data["state"] = state - var/name + var/product_name var/cost var/type_name var/path @@ -142,12 +142,11 @@ var/list/listed_products = list() for(var/c_product =1 to current_content.len) path = current_content[c_product] - var/atom/A = path - name = initial(A.name) + product_name = atom_info_repository.get_name_for(path) cost = current_content[path] listed_products.Add(list(list( "product_index" = c_product, - "name" = name, + "name" = product_name, "cost" = cost))) listed_types.Add(list(list( "type_name" = type_name, diff --git a/code/game/machinery/bodyscanner.dm b/code/game/machinery/bodyscanner.dm index b236e2d5bd3..2e815dae25a 100644 --- a/code/game/machinery/bodyscanner.dm +++ b/code/game/machinery/bodyscanner.dm @@ -111,7 +111,7 @@ icon_state = "body_scanner_2" //Like grap-put, but for mouse-drop. -/obj/machinery/bodyscanner/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/machinery/bodyscanner/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && isliving(dropping)) var/mob/living/M = dropping diff --git a/code/game/machinery/bodyscanner_console.dm b/code/game/machinery/bodyscanner_console.dm index f6aa9afebe7..f8864ab712e 100644 --- a/code/game/machinery/bodyscanner_console.dm +++ b/code/game/machinery/bodyscanner_console.dm @@ -27,17 +27,17 @@ src.connected = locate(/obj/machinery/bodyscanner, get_step(src, D)) if(src.connected) break - events_repository.register(/decl/observ/destroyed, connected, src, .proc/unlink_scanner) + events_repository.register(/decl/observ/destroyed, connected, src, PROC_REF(unlink_scanner)) /obj/machinery/body_scanconsole/proc/unlink_scanner(var/obj/machinery/bodyscanner/scanner) - events_repository.unregister(/decl/observ/destroyed, scanner, src, .proc/unlink_scanner) + events_repository.unregister(/decl/observ/destroyed, scanner, src, PROC_REF(unlink_scanner)) connected = null /obj/machinery/body_scanconsole/proc/FindDisplays() for(var/obj/machinery/body_scan_display/D in SSmachines.machinery) if(D.id_tag == connected.id_tag) connected_displays += D - events_repository.register(/decl/observ/destroyed, D, src, .proc/remove_display) + events_repository.register(/decl/observ/destroyed, D, src, PROC_REF(remove_display)) return !!connected_displays.len /obj/machinery/body_scanconsole/attack_hand(mob/user) @@ -134,7 +134,7 @@ /obj/machinery/body_scanconsole/proc/remove_display(var/obj/machinery/body_scan_display/display) connected_displays -= display - events_repository.unregister(/decl/observ/destroyed, display, src, .proc/remove_display) + events_repository.unregister(/decl/observ/destroyed, display, src, PROC_REF(remove_display)) /obj/machinery/body_scanconsole/Destroy() . = ..() diff --git a/code/game/machinery/bodyscanner_display.dm b/code/game/machinery/bodyscanner_display.dm index e70446dc677..2fadc8e44e9 100644 --- a/code/game/machinery/bodyscanner_display.dm +++ b/code/game/machinery/bodyscanner_display.dm @@ -12,7 +12,7 @@ stat_immune = 0 w_class = ITEM_SIZE_HUGE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' var/list/bodyscans = list() var/selected = 0 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 97c7529dcfe..10f382fb55b 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -24,7 +24,7 @@ construct_state = /decl/machine_construction/wall_frame/panel_closed/simple frame_type = /obj/item/frame/button required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':30}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":30}, "EAST":{"x":-24}, "WEST":{"x":24}}' var/active = FALSE var/operating = FALSE diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 48bc5d875c0..a665c72df7d 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -10,7 +10,7 @@ anchored = TRUE movable_flags = MOVABLE_FLAG_PROXMOVE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'SOUTH':{'y':21}, 'EAST':{'x':-10}, 'WEST':{'x':10}}" + directional_offset = @'{"SOUTH":{"y":21}, "EAST":{"x":-10}, "WEST":{"x":10}}' base_type = /obj/machinery/camera uncreated_component_parts = null construct_state = /decl/machine_construction/wall_frame/panel_closed @@ -187,8 +187,8 @@ set_broken(TRUE) /obj/machinery/camera/hitby(var/atom/movable/AM) - ..() - if (istype(AM, /obj)) + . = ..() + if(. && istype(AM, /obj)) var/obj/O = AM if (O.throwforce >= src.toughness) visible_message(SPAN_WARNING("[src] was hit by [O]!")) @@ -357,7 +357,7 @@ /decl/public_access/public_method/toggle_camera name = "toggle camera" desc = "Toggles camera on or off." - call_proc = /obj/machinery/camera/proc/toggle_status + call_proc = TYPE_PROC_REF(/obj/machinery/camera, toggle_status) /decl/public_access/public_variable/camera_state expected_type = /obj/machinery/camera diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index ea4513468bd..63a2bd834e9 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -232,7 +232,7 @@ if(. == TRACKING_NO_COVERAGE) var/turf/T = get_turf(src) - if(T && isStationLevel(T.z) && hassensorlevel(src, SUIT_SENSOR_TRACKING)) + if(T && isStationLevel(T.z) && hassensorlevel(src, VITALS_SENSOR_TRACKING)) return TRACKING_POSSIBLE /mob/living/proc/tracking_initiated() diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 3fa89eef553..efc4136a173 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -11,7 +11,7 @@ var/global/list/empty_playable_ai_cores = list() var/datum/ai_laws/laws var/obj/item/stock_parts/circuitboard/circuit - var/obj/item/mmi/brain + var/obj/item/organ/internal/brain var/authorized var/circuit_secured = FALSE @@ -139,30 +139,24 @@ var/global/list/empty_playable_ai_cores = list() if(circuit && circuit_secured) - if((istype(P, /obj/item/mmi) || istype(P, /obj/item/organ/internal/posibrain)) && wired && circuit && circuit_secured) - var/mob/living/carbon/brain/B - if(istype(P, /obj/item/mmi)) - var/obj/item/mmi/M = P - B = M.brainmob - else - var/obj/item/organ/internal/posibrain/PB = P - B = PB.brainmob - if(!B) - to_chat(user, SPAN_WARNING("Sticking an empty [P] into the frame would sort of defeat the purpose.")) + if(istype(P, /obj/item/organ/internal) && wired && circuit && circuit_secured) + var/obj/item/organ/internal/M = P + var/mob/living/brainmob = M.get_brainmob() + if(!brainmob) + to_chat(user, SPAN_WARNING("Sticking a mindless [P] into the frame would be pointless.")) return - if(B.stat == DEAD) + if(brainmob.stat == DEAD) to_chat(user, SPAN_WARNING("Sticking a dead [P] into the frame would sort of defeat the purpose.")) return - if(jobban_isbanned(B, "AI")) + if(jobban_isbanned(brainmob, "AI")) to_chat(user, SPAN_WARNING("This [P] does not seem to fit.")) return if(!user.try_unequip(P, src)) - return - if(B.mind) - clear_antag_roles(B.mind, 1) - brain = P - to_chat(usr, "Added [P].") - update_icon() + if(brainmob.mind) + clear_antag_roles(brainmob.mind, 1) + brain = P + to_chat(usr, "You connect \the [P] to the frame and slide it into the casing.") + update_icon() return TRUE if(istype(P, /obj/item/stack/material)) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index a2f9e557b49..da76d2ee20c 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -12,7 +12,7 @@ /obj/item/energy_blade/sword/toy = 200, /obj/item/gun/projectile/revolver/capgun = 200, /obj/item/gun/launcher/foam/crossbow = 200, - /obj/item/storage/fancy/crayons = 200, + /obj/item/storage/box/fancy/crayons = 200, /obj/item/toy/spinningtoy = 200, /obj/item/toy/prize/powerloader = 100, /obj/item/toy/prize/fireripley = 100, diff --git a/code/game/machinery/computer/arcade_orion.dm b/code/game/machinery/computer/arcade_orion.dm index 93b47f19f05..3dbbcc9eace 100644 --- a/code/game/machinery/computer/arcade_orion.dm +++ b/code/game/machinery/computer/arcade_orion.dm @@ -436,8 +436,9 @@ supplies["[i]"] = max(0,supplies["[i]"] + rand(-10,10)) if(ORION_TRAIL_COLLISION) if(prob(90) && !supplies["2"]) - var/turf/simulated/floor/F = src.loc - F.ChangeTurf(/turf/space) + var/turf/floor = src.loc + if(istype(floor) && floor.simulated) + floor.ChangeTurf(/turf/space) src.visible_message("Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.") else src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") @@ -449,7 +450,7 @@ for(var/i=0;i<10;i++) sleep(10) SET_STATUS_MAX(M, STAT_STUN, 5) - M.adjustBruteLoss(10) + M.adjustBruteLoss(10, do_update_health = FALSE) M.adjustFireLoss(10) usr.gib() //So that people can't cheese it and inject a lot of kelo/bicard before losing diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/computer/area_atmos.dm similarity index 85% rename from code/game/machinery/atmoalter/area_atmos_computer.dm rename to code/game/machinery/computer/area_atmos.dm index 234285eb067..1f7b2dd927e 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/computer/area_atmos.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/area_atmos - name = "Area Air Control" + name = "area air control" desc = "A computer used to control the stationary scrubbers and pumps in the area." icon_keyboard = "atmos_key" icon_screen = "area_atmos" @@ -20,7 +20,7 @@ /obj/machinery/computer/area_atmos/interface_interact(user) interact(user) return TRUE - + /obj/machinery/computer/area_atmos/interact(mob/user) var/dat = {" @@ -173,3 +173,27 @@ status = "ERROR: No scrubber found!" src.updateUsrDialog() + +/obj/machinery/computer/area_atmos/tag + name = "heavy scrubber control" + zone = "This computer is operating industrial scrubbers nearby." + var/last_scan + +/obj/machinery/computer/area_atmos/tag/scanscrubbers() + if(last_scan && ((world.time - last_scan) < 20 SECONDS)) + return FALSE + else + last_scan = world.time + + connectedscrubbers.Cut() + + for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in SSmachines.machinery) + if(scrubber.id_tag == id_tag) + connectedscrubbers += scrubber + + updateUsrDialog() + +/obj/machinery/computer/area_atmos/tag/validscrubber(obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber) + if(scrubber.id_tag == id_tag) + return TRUE + return FALSE \ No newline at end of file diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 5ad530c42d6..1ff7caa637e 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -13,7 +13,7 @@ var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert/Initialize() . = ..() - atmosphere_alarm.register_alarm(src, /atom/proc/update_icon) + atmosphere_alarm.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) /obj/machinery/computer/atmos_alert/Destroy() atmosphere_alarm.unregister_alarm(src) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/central_atmos.dm similarity index 64% rename from code/game/machinery/computer/atmos_control.dm rename to code/game/machinery/computer/central_atmos.dm index ec09704fe94..dd46a3b07f4 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/central_atmos.dm @@ -1,8 +1,4 @@ -/obj/item/stock_parts/circuitboard/atmoscontrol - name = "\improper Central Atmospherics Computer Circuitboard" - build_path = /obj/machinery/computer/atmoscontrol - -/obj/machinery/computer/atmoscontrol +/obj/machinery/computer/central_atmos name = "\improper Central Atmospherics Computer" icon = 'icons/obj/computer.dmi' icon_keyboard = "generic_key" @@ -11,24 +7,26 @@ density = TRUE anchored = TRUE initial_access = list(list(access_engine_equip, access_atmospherics)) + base_type = /obj/machinery/computer/central_atmos var/list/monitored_alarm_ids = null var/datum/nano_module/atmos_control/atmos_control - base_type = /obj/machinery/computer/atmoscontrol // TODO: replace this with a modular computer at some point -/obj/machinery/computer/atmoscontrol/laptop +/obj/machinery/computer/central_atmos/laptop name = "atmospherics laptop" desc = "A cheap laptop." icon_state = "laptop" icon_keyboard = "laptop_key" icon_screen = "atmoslaptop" density = FALSE + construct_state = null + base_type = /obj/machinery/computer/central_atmos/laptop -/obj/machinery/computer/atmoscontrol/interface_interact(user) +/obj/machinery/computer/central_atmos/interface_interact(user) ui_interact(user) return TRUE -/obj/machinery/computer/atmoscontrol/ui_interact(var/mob/user) +/obj/machinery/computer/central_atmos/ui_interact(var/mob/user) if(!atmos_control) atmos_control = new(src, monitored_alarm_ids) atmos_control.set_monitored_alarms(monitored_alarm_ids) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index dad1d1f750f..d10ebf8b776 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -16,7 +16,7 @@ var/light_range_on = 2 var/light_power_on = 1 var/overlay_layer - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE clicksound = "keyboard" /obj/machinery/computer/Initialize() @@ -46,14 +46,21 @@ add_overlay(icon_keyboard ? "[icon_keyboard]_off" : "keyboard") return - if(stat & NOPOWER) + var/offline = (stat & NOPOWER) + if(!offline) + var/datum/extension/interactive/os/os = get_extension(src, /datum/extension/interactive/os) + if(os && !os.on) + offline = TRUE + + if(offline) set_light(0) if(icon_keyboard) add_overlay(image(icon,"[icon_keyboard]_off", overlay_layer)) + if(stat & BROKEN) + add_overlay(image(icon,"[icon_state]_broken", overlay_layer)) return - else - set_light(light_range_on, light_power_on, light_color) + set_light(light_range_on, light_power_on, light_color) if(stat & BROKEN) add_overlay(image(icon,"[icon_state]_broken", overlay_layer)) else diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 7419b982914..612d747c33c 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -185,7 +185,7 @@ pass.reason = reason pass.SetName("guest pass #[number]") pass.assignment = "Guest" - addtimer(CALLBACK(pass, /obj/item/card/id/guest/proc/expire), duration MINUTES, TIMER_UNIQUE) + addtimer(CALLBACK(pass, TYPE_PROC_REF(/obj/item/card/id/guest, expire)), duration MINUTES, TIMER_UNIQUE) playsound(src.loc, 'sound/machines/ping.ogg', 25, 0) . = TOPIC_REFRESH else if(!giver) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 858df3d35e4..81ba9c07166 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -54,7 +54,7 @@ /obj/machinery/computer/message_monitor/emag_act(var/remaining_charges, var/mob/user) // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online. - // It'll take more time if there's more characters in the password.. + // It'll take more time if there's more characters in the password. if(!emag && operable()) var/obj/machinery/network/message_server/linked_server = get_message_server() if(linked_server) @@ -64,7 +64,7 @@ var/obj/item/paper/monitorkey/MK = new(loc) // Will help make emagging the console not so easy to get away with. MK.info += "

    £%@%(*$%&(£&?*(%&£/{}" - addtimer(CALLBACK(src, /obj/machinery/computer/message_monitor/proc/UnemagConsole), 100*length(linked_server.decryptkey)) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/computer/message_monitor, UnemagConsole)), 100*length(linked_server.decryptkey)) message = rebootmsg update_icon() return 1 @@ -290,7 +290,7 @@ src.screen = 2 update_icon() //Time it takes to bruteforce is dependant on the password length. - addtimer(CALLBACK(src, /obj/machinery/computer/message_monitor/proc/BruteForceConsole, usr, linked_server), 100*length(linked_server.decryptkey)) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/computer/message_monitor, BruteForceConsole), usr, linked_server), 100*length(linked_server.decryptkey)) //Delete the request console log. if (href_list["deleter"]) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 1fad0bc8153..5c639132877 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -20,7 +20,7 @@ /obj/machinery/computer/station_alert/Initialize() alarm_monitor = new monitor_type(src) - alarm_monitor.register_alarm(src, /atom/proc/update_icon) + alarm_monitor.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) . = ..() if(monitor_type) register_monitor(new monitor_type(src)) @@ -34,7 +34,7 @@ return alarm_monitor = monitor - alarm_monitor.register_alarm(src, /atom/proc/update_icon) + alarm_monitor.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) /obj/machinery/computer/station_alert/proc/unregister_monitor() if(alarm_monitor) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index e58b243c5dc..11c41dca7ca 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -10,7 +10,7 @@ uncreated_component_parts = null construct_state = /decl/machine_construction/frame/unwrenched obj_flags = OBJ_FLAG_ROTATABLE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE var/obj/item/stock_parts/circuitboard/circuit = null var/expected_machine_type diff --git a/code/game/machinery/cracker.dm b/code/game/machinery/cracker.dm index 0037f028edb..b3b31d1e54b 100644 --- a/code/game/machinery/cracker.dm +++ b/code/game/machinery/cracker.dm @@ -42,19 +42,17 @@ // Produce materials. var/turf/T = get_turf(src) - if(istype(T)) - var/obj/effect/fluid/F = T.return_fluid() - if(istype(F)) - - // Drink more water! - var/consuming = min(F.reagents.total_volume, fluid_consumption_per_tick) - F.reagents.remove_any(consuming) - T.show_bubbles() - - // Gas production. - var/datum/gas_mixture/produced = new - var/gen_amt = min(1, (gas_generated_per_tick * (consuming/fluid_consumption_per_tick))) - produced.adjust_gas(/decl/material/gas/oxygen, gen_amt) - produced.adjust_gas(/decl/material/gas/hydrogen, gen_amt * 2) - produced.temperature = T20C //todo water temperature - air_contents.merge(produced) + if(istype(T) && T.reagents?.total_volume) + + // Drink more water! + var/consuming = min(T.reagents.total_volume, fluid_consumption_per_tick) + T.remove_any_reagents(consuming) + T.show_bubbles() + + // Gas production. + var/datum/gas_mixture/produced = new + var/gen_amt = min(1, (gas_generated_per_tick * (consuming/fluid_consumption_per_tick))) + produced.adjust_gas(/decl/material/gas/oxygen, gen_amt) + produced.adjust_gas(/decl/material/gas/hydrogen, gen_amt * 2) + produced.temperature = T20C //todo water temperature + air_contents.merge(produced) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 65a10708027..858a29659b9 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -16,7 +16,7 @@ density = FALSE interact_offline = 1 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':32}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-24}, "SOUTH":{"y":32}, "EAST":{"x":-24}, "WEST":{"x":24}}' //Used for logging people entering cryosleep and important items they are carrying. var/list/frozen_crew = list() @@ -119,12 +119,12 @@ /obj/item/stock_parts/circuitboard/cryopodcontrol name = "circuit board (Cryogenic Oversight Console)" build_path = /obj/machinery/computer/cryopod - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' /obj/item/stock_parts/circuitboard/robotstoragecontrol name = "circuit board (Robotic Storage Console)" build_path = /obj/machinery/computer/cryopod/robot - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' //Decorative structures to go alongside cryopods. /obj/structure/cryofeed @@ -259,7 +259,7 @@ if(!control_computer) control_computer = locate(/obj/machinery/computer/cryopod) in get_area(src) if(control_computer) - events_repository.register(/decl/observ/destroyed, control_computer, src, .proc/clear_control_computer) + events_repository.register(/decl/observ/destroyed, control_computer, src, PROC_REF(clear_control_computer)) return control_computer /obj/machinery/cryopod/proc/clear_control_computer() @@ -314,14 +314,14 @@ // Also make sure there is a valid control computer /obj/machinery/cryopod/robot/despawn_occupant() var/mob/living/silicon/robot/R = occupant - if(!istype(R)) return ..() - - qdel(R.mmi) - for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc - for(var/obj/item/O in I.get_contained_external_atoms()) // the things inside the tools, if anything; mainly for janiborg trash bags - O.forceMove(R) - qdel(I) - qdel(R.module) + if(istype(R)) + R.clear_brain() + if(R.module) + for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc + for(var/obj/item/O in I.get_contained_external_atoms()) // the things inside the tools, if anything; mainly for janiborg trash bags + O.forceMove(R) + qdel(I) + qdel(R.module) . = ..() @@ -425,7 +425,7 @@ src.add_fingerprint(target) //Like grap-put, but for mouse-drop. -/obj/machinery/cryopod/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/machinery/cryopod/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && check_occupant_allowed(dropping)) if(occupant) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 7e1f90e854e..67cfca13450 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -12,8 +12,7 @@ anchored = FALSE density = TRUE icon_state = "barrier0" - var/health = 100.0 - var/maxhealth = 100.0 + max_health = 100 var/locked = 0.0 /obj/machinery/deployable/barrier/Initialize() @@ -39,10 +38,11 @@ return return else if(IS_WRENCH(W)) - if (src.health < src.maxhealth) - src.health = src.maxhealth - src.emagged = 0 - src.req_access = list(access_security) + var/current_max_health = get_max_health() + if (current_health < current_max_health) + current_health = current_max_health + emagged = 0 + req_access = list(access_security) visible_message("[user] repairs \the [src]!") return else if (src.emagged > 0) @@ -54,21 +54,21 @@ else switch(W.damtype) if(BURN) - src.health -= W.force * 0.75 + current_health -= W.force * 0.75 if(BRUTE) - src.health -= W.force * 0.5 - if (src.health <= 0) - src.explode() + current_health -= W.force * 0.5 + if (current_health <= 0) + explode() ..() /obj/machinery/deployable/barrier/explosion_act(severity) . = ..() if(. && !QDELETED(src)) if(severity == 1) - health = 0 + current_health = 0 else if(severity == 2) - health -= 25 - if(health <= 0) + current_health -= 25 + if(current_health <= 0) explode() /obj/machinery/deployable/barrier/emp_act(severity) diff --git a/code/game/machinery/doors/_door.dm b/code/game/machinery/doors/_door.dm index 60fd6d4c053..5666fd2662d 100644 --- a/code/game/machinery/doors/_door.dm +++ b/code/game/machinery/doors/_door.dm @@ -14,6 +14,7 @@ construct_state = /decl/machine_construction/default/panel_closed/door uncreated_component_parts = null required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES + max_health = 300 var/can_open_manually = TRUE @@ -26,8 +27,6 @@ var/glass = 0 var/normalspeed = 1 var/heat_proof = 0 // For glass airlocks/opacity firedoors - var/maxhealth = 300 - var/health var/destroy_hits = 10 //How many strong hits it takes to destroy the door var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon @@ -36,7 +35,6 @@ var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. var/close_door_at = 0 //When to automatically close the door, if possible var/connections = 0 - var/list/blend_objects = list(/obj/structure/wall_frame, /obj/structure/window, /obj/structure/grille, /obj/machinery/door) // Objects which to blend with var/autoset_access = TRUE // Determines whether the door will automatically set its access from the areas surrounding it. Can be used for mapping. @@ -50,6 +48,18 @@ atmos_canpass = CANPASS_PROC var/set_dir_on_update = TRUE + var/begins_closed = TRUE + var/icon_state_open = "door0" + var/icon_state_closed = "door1" + +/obj/machinery/door/get_blend_objects() + var/static/list/blend_objects = list( + /obj/structure/wall_frame, + /obj/structure/window, + /obj/structure/grille, + /obj/machinery/door + ) // Objects which to blend with + return blend_objects /obj/machinery/door/proc/can_operate(var/mob/user) . = istype(user) && !user.restrained() && (!issmall(user) || ishuman(user) || issilicon(user) || isbot(user)) @@ -68,7 +78,14 @@ /obj/machinery/door/Initialize(var/mapload, var/d, var/populate_parts = TRUE, var/obj/structure/door_assembly/assembly = null) if(!populate_parts) inherit_from_assembly(assembly) - set_extension(src, /datum/extension/penetration, /datum/extension/penetration/proc_call, .proc/CheckPenetration) + set_extension(src, /datum/extension/penetration, /datum/extension/penetration/proc_call, PROC_REF(CheckPenetration)) + + if(!begins_closed) + icon_state = icon_state_open + set_density(FALSE) + set_opacity(FALSE) + layer = open_layer + ..() . = INITIALIZE_HINT_LATELOAD @@ -83,7 +100,6 @@ if (turf_hand_priority) set_extension(src, /datum/extension/turf_hand, turf_hand_priority) - health = maxhealth #ifdef UNIT_TEST if(autoset_access && length(req_access)) PRINT_STACK_TRACE("A door with mapped access restrictions was set to autoinitialize access.") @@ -120,7 +136,7 @@ if(close_door_at && world.time >= close_door_at) if(autoclose) close_door_at = next_close_time() - INVOKE_ASYNC(src, /obj/machinery/door/proc/close) + INVOKE_ASYNC(src, PROC_REF(close)) else close_door_at = 0 @@ -216,15 +232,16 @@ take_damage(min(damage, 100), Proj.damage_type) /obj/machinery/door/hitby(var/atom/movable/AM, var/datum/thrownthing/TT) - ..() - visible_message("[src.name] was hit by [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 3 * TT.speed - else - tforce = AM:throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - playsound(src.loc, hitsound, 100, 1) - take_damage(tforce) + . = ..() + if(.) + visible_message("[src.name] was hit by [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 3 * TT.speed + else + tforce = AM:throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + playsound(src.loc, hitsound, 100, 1) + take_damage(tforce) // This is legacy code that should be revisited, probably by moving the bulk of the logic into here. /obj/machinery/door/physical_attack_hand(user) @@ -244,7 +261,8 @@ if(reason_broken & MACHINE_BROKEN_GENERIC) to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") return TRUE - if(health >= maxhealth) + var/current_max_health = get_max_health() + if(current_health >= current_max_health) to_chat(user, "Nothing to fix!") return TRUE if(!density) @@ -252,7 +270,7 @@ return TRUE //figure out how much metal we need - var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT + var/amount_needed = (current_max_health - current_health) / DOOR_REPAIR_AMOUNT amount_needed = CEILING(amount_needed) var/obj/item/stack/stack = I @@ -284,7 +302,7 @@ playsound(src, 'sound/items/Welder.ogg', 100, 1) if(do_after(user, 5 * repairing.amount, src) && welder && welder.isOn()) to_chat(user, "You finish repairing the damage to \the [src].") - health = clamp(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth) + current_health = clamp(current_health + repairing.amount*DOOR_REPAIR_AMOUNT,current_health, get_max_health()) update_icon() qdel(repairing) repairing = null @@ -325,7 +343,7 @@ return FALSE /obj/machinery/door/take_damage(var/damage, damtype=BRUTE) - if(!health) + if(!current_health) ..(damage, damtype) update_icon() return @@ -334,16 +352,17 @@ damage -= component_damage //Part of damage is soaked by our own health - var/initialhealth = health - health = max(0, health - damage) - if(health <= 0 && initialhealth > 0) + var/current_max_health = get_max_health() + var/initialhealth = current_health + current_health = max(0, current_health - damage) + if(current_health <= 0 && initialhealth > 0) visible_message(SPAN_WARNING("\The [src] breaks down!")) set_broken(TRUE) - else if(health < maxhealth / 4 && initialhealth >= maxhealth / 4) + else if(current_health < current_max_health / 4 && initialhealth >= current_max_health / 4) visible_message(SPAN_WARNING("\The [src] looks like it's about to break!")) - else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2) + else if(current_health < current_max_health / 2 && initialhealth >= current_max_health / 2) visible_message(SPAN_WARNING("\The [src] looks seriously damaged!")) - else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4) + else if(current_health < current_max_health * 3/4 && initialhealth >= current_max_health * 3/4) visible_message(SPAN_WARNING("\The [src] shows signs of damage!")) ..(component_damage, damtype) @@ -351,22 +370,25 @@ //How much damage should be passed to components inside even when door health is non zero /obj/machinery/door/proc/get_damage_leakthrough(var/damage, damtype=BRUTE) - if(health > 0.75 * maxhealth && damage < 10) + var/current_max_health = get_max_health() + if(current_health > 0.75 * current_max_health && damage < 10) return 0 - . = round((1 - health/maxhealth) * damage) + . = round((1 - current_health/current_max_health) * damage) /obj/machinery/door/examine(mob/user) . = ..() - if(src.health <= 0) + if(current_health <= 0) to_chat(user, "\The [src] is broken!") - else if(src.health < src.maxhealth / 4) - to_chat(user, "\The [src] looks like it's about to break!") - else if(src.health < src.maxhealth / 2) - to_chat(user, "\The [src] looks seriously damaged!") - else if(src.health < src.maxhealth * 3/4) - to_chat(user, "\The [src] shows signs of damage!") - else if(src.health < src.maxhealth && get_dist(src, user) <= 1) - to_chat(user, "\The [src] has some minor scuffing.") + else + var/current_max_health = get_max_health() + if(current_health < current_max_health / 4) + to_chat(user, "\The [src] looks like it's about to break!") + else if(current_health < current_max_health / 2) + to_chat(user, "\The [src] looks seriously damaged!") + else if(current_health < current_max_health * 3/4) + to_chat(user, "\The [src] shows signs of damage!") + else if(current_health < current_max_health && get_dist(src, user) <= 1) + to_chat(user, "\The [src] has some minor scuffing.") var/mob/living/carbon/human/H = user if (emagged && istype(H) && (H.skill_check(SKILL_COMPUTER, SKILL_ADEPT) || H.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT))) @@ -379,9 +401,9 @@ /obj/machinery/door/on_update_icon() if(density) - icon_state = "door1" + icon_state = icon_state_closed else - icon_state = "door0" + icon_state = icon_state_open SSradiation.resistance_cache.Remove(get_turf(src)) @@ -407,12 +429,12 @@ /obj/machinery/door/proc/open(forced = FALSE) if(!can_open(forced)) - return + return FALSE operating = 1 do_animate("opening") - icon_state = "door0" + icon_state = icon_state_open set_opacity(FALSE) sleep(0.5 SECONDS) @@ -435,7 +457,7 @@ /obj/machinery/door/proc/close(forced = FALSE) if(!can_close(forced)) - return + return FALSE operating = 1 @@ -456,6 +478,7 @@ //I shall not add a check every x ticks if a door has closed over some fire. var/obj/fire/fire = locate() in loc qdel(fire) + return TRUE /obj/machinery/door/proc/toggle(to_open = density) if(to_open) @@ -473,12 +496,13 @@ /obj/machinery/door/update_nearby_tiles(need_rebuild) . = ..() - for(var/turf/simulated/turf in locs) - update_heat_protection(turf) - SSair.mark_for_update(turf) + for(var/turf/turf in locs) + if(turf.simulated) + update_heat_protection(turf) + SSair.mark_for_update(turf) return 1 -/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source) +/obj/machinery/door/proc/update_heat_protection(var/turf/source) if(istype(source)) if(src.density && (src.opacity || src.heat_proof)) source.thermal_conductivity = DOOR_HEAT_TRANSFER_COEFFICIENT @@ -492,7 +516,7 @@ dismantle(TRUE) /obj/machinery/door/proc/CheckPenetration(var/base_chance, var/damage) - . = damage/maxhealth*180 + . = damage/get_max_health()*180 if(glass) . *= 2 . = round(.) @@ -521,7 +545,7 @@ success = 1 else for(var/obj/O in T) - for(var/blend_type in blend_objects) + for(var/blend_type in get_blend_objects()) if( istype(O, blend_type)) success = 1 @@ -562,7 +586,9 @@ . |= lock.req_access for(var/obj/item/stock_parts/network_receiver/network_lock/lock in get_all_components_of_type(/obj/item/stock_parts/network_receiver/network_lock)) - . |= lock.get_req_access() + var/list/net_access = lock.get_req_access() + if(length(net_access)) + . |= net_access /obj/machinery/door/do_simple_ranged_interaction(var/mob/user) if((!requiresID() || allowed(null)) && can_operate(user) && can_open_manually) @@ -579,20 +605,20 @@ /decl/public_access/public_method/open_door name = "open door" desc = "Opens the door if possible." - call_proc = /obj/machinery/door/proc/open + call_proc = TYPE_PROC_REF(/obj/machinery/door, open) /decl/public_access/public_method/toggle_door name = "toggle door" desc = "Toggles whether the door is open or not, if possible." - call_proc = /obj/machinery/door/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/door, toggle) /decl/public_access/public_method/toggle_door_to name = "toggle door to" desc = "Toggles the door, depending on the supplied argument, to open (if 1) or closed (if 0)." - call_proc = /obj/machinery/door/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/door, toggle) forward_args = TRUE /decl/public_access/public_method/close_door name = "close door" desc = "Closes the door if possible." - call_proc = /obj/machinery/door/proc/close + call_proc = TYPE_PROC_REF(/obj/machinery/door, close) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 790e7a1a30e..48a3bf8895b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -23,6 +23,9 @@ var/global/list/airlock_overlays = list() base_type = /obj/machinery/door/airlock frame_type = /obj/structure/door_assembly + icon_state_open = "open" + icon_state_closed = "closed" + var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. var/hackProof = 0 // if 1, this door can't be hacked by the AI var/electrified_until = 0 //World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. @@ -32,6 +35,10 @@ var/global/list/airlock_overlays = list() var/shockedby = list() //Some sort of admin logging var var/welded = null var/locked = FALSE + /// If TRUE, when operating goes from TRUE to FALSE (i.e. door finishes closing/opening), the door will lock itself. + var/locking = FALSE + /// If TRUE, when operating goes from TRUE to FALSE (i.e. door finishes closing/opening), the door will unlock itself. + var/unlocking = FALSE var/lock_cut_state = BOLTS_FINE var/lights = 1 // Lights show by default var/aiDisabledIdScanner = 0 @@ -292,23 +299,23 @@ About the new airlock wires panel: /obj/machinery/door/airlock/on_update_icon(state=0, override=0) if(set_dir_on_update) - if(connections & (NORTH|SOUTH) == (NORTH|SOUTH)) + if((connections & (NORTH|SOUTH)) == (NORTH|SOUTH)) set_dir(EAST) - else if (connections & (EAST|WEST) == (EAST|WEST)) + else if ((connections & (EAST|WEST)) == (EAST|WEST)) set_dir(SOUTH) switch(state) if(0) if(density) - icon_state = "closed" + icon_state = icon_state_closed state = AIRLOCK_CLOSED else - icon_state = "open" + icon_state = icon_state_open state = AIRLOCK_OPEN if(AIRLOCK_OPEN) - icon_state = "open" + icon_state = icon_state_open if(AIRLOCK_CLOSED) - icon_state = "closed" + icon_state = icon_state_closed if(AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG, AIRLOCK_DENY) icon_state = "" @@ -397,7 +404,7 @@ About the new airlock wires panel: if(stat & BROKEN) damage_overlay = sparks_broken_file - else if(health < maxhealth * 3/4) + else if(current_health < get_max_health() * 3/4) damage_overlay = sparks_damaged_file if(welded) @@ -764,7 +771,7 @@ About the new airlock wires panel: return TRUE else if(!repairing) // Add some minor damage as evidence of forcing. - if(health >= maxhealth) + if(current_health >= get_max_health()) take_damage(1) if(arePowerSystemsOn()) to_chat(user, SPAN_WARNING("The airlock's motors resist your efforts to force it.")) @@ -821,10 +828,10 @@ About the new airlock wires panel: var/obj/item/twohanded/fireaxe/F = I if (F.wielded) playsound(src, 'sound/weapons/smash.ogg', 100, 1) - health -= F.force_wielded * 2 - if(health <= 0) + current_health -= F.force_wielded * 2 + if(current_health <= 0) user.visible_message(SPAN_DANGER("[user] smashes \the [I] into the airlock's control panel! It explodes in a shower of sparks!"), SPAN_DANGER("You smash \the [I] into the airlock's control panel! It explodes in a shower of sparks!")) - health = 0 + current_health = 0 set_broken(TRUE) else user.visible_message(SPAN_DANGER("[user] smashes \the [I] into the airlock's control panel!")) @@ -886,7 +893,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/open(var/forced=0) if(!can_open(forced)) - return 0 + return FALSE use_power_oneoff(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator @@ -895,7 +902,15 @@ About the new airlock wires panel: else playsound(src.loc, pick(open_sound_unpowered), 100, 1) - return ..() + . = ..() + if(.) + // lock and unlock handle updating for us, we don't want duplicate updates + if(locking) + lock() + else if(unlocking) + unlock() + else + toggle_input_toggle() // this sends an update to anything listening for our status, like docking/airlock controllers /obj/machinery/door/airlock/can_open(var/forced=0) if(QDELETED(src) || brace) @@ -922,7 +937,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/close(var/forced=0) if(!can_close(forced)) - return 0 + return FALSE if(safe) for(var/turf/turf in locs) @@ -932,7 +947,7 @@ About the new airlock wires panel: playsound(src.loc, close_failure_blocked, 30, 0, -3) next_beep_at = world.time + SecondsToTicks(10) close_door_at = world.time + 6 - return + return FALSE for(var/turf/turf in locs) for(var/atom/movable/AM in turf) @@ -946,35 +961,54 @@ About the new airlock wires panel: else playsound(src.loc, pick(close_sound_unpowered), 100, 1) - ..() + . = ..() + if(.) + // lock and unlock handle updating for us, we don't want duplicate updates + if(locking) + lock() + else if(unlocking) + unlock() + else + toggle_input_toggle() // this sends an update to anything listening for our status, like docking/airlock controllers /obj/machinery/door/airlock/proc/lock(var/forced=0) if(locked) - return 0 + return FALSE - if (operating && !forced) return 0 + if (operating && !forced) + unlocking = FALSE + locking = TRUE + return FALSE - if (lock_cut_state == BOLTS_CUT) return 0 //what bolts? + if (lock_cut_state == BOLTS_CUT) return FALSE //what bolts? src.locked = TRUE playsound(src, bolts_dropping, 30, 0, -6) audible_message("You hear a click from the bottom of the door.", hearing_distance = 1) update_icon() - return 1 + toggle_input_toggle() // this sends an update to anything listening for our status, like docking/airlock controllers + return TRUE /obj/machinery/door/airlock/proc/unlock(var/forced=0) if(!src.locked) - return + return FALSE if (!forced) + if(!src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + return FALSE + if(operating) + locking = FALSE + unlocking = TRUE + return FALSE if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) - return + return FALSE src.locked = FALSE playsound(src, bolts_rising, 30, 0, -6) audible_message("You hear a click from the bottom of the door.", hearing_distance = 1) update_icon() - return 1 + toggle_input_toggle() // this sends an update to anything listening for our status, like docking/airlock controllers + return TRUE /obj/machinery/door/airlock/proc/toggle_lock(var/forced = 0) return locked ? unlock() : lock() @@ -986,6 +1020,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/Initialize(var/mapload, var/d, var/populate_parts = TRUE, obj/structure/door_assembly/assembly = null) . = ..() + //wires var/turf/T = get_turf(loc) if(T && isAdminLevel(T.z)) @@ -1003,6 +1038,8 @@ About the new airlock wires panel: if(brace.electronics) brace.req_access = get_req_access() queue_icon_update() + else if(!begins_closed) + queue_icon_update() if (glass) paintable |= PAINT_WINDOW_PAINTABLE @@ -1021,7 +1058,7 @@ About the new airlock wires panel: glass = TRUE set_opacity(0) hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 300 + max_health = 300 explosion_resistance = 5 else door_color = mat.color diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index f82d8c0b189..43452ea013e 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -56,17 +56,17 @@ /decl/public_access/public_method/airlock_lock name = "engage bolts" desc = "Bolts the airlock, if possible." - call_proc = /obj/machinery/door/airlock/proc/lock + call_proc = TYPE_PROC_REF(/obj/machinery/door/airlock, lock) /decl/public_access/public_method/airlock_unlock name = "disengage bolts" desc = "Unbolts the airlock, if possible." - call_proc = /obj/machinery/door/airlock/proc/unlock + call_proc = TYPE_PROC_REF(/obj/machinery/door/airlock, unlock) /decl/public_access/public_method/airlock_toggle_bolts name = "toggle bolts" desc = "Toggles whether the airlock is bolted or not, if possible." - call_proc = /obj/machinery/door/airlock/proc/toggle_lock + call_proc = TYPE_PROC_REF(/obj/machinery/door/airlock, toggle_lock) /decl/public_access/public_variable/airlock_door_state expected_type = /obj/machinery/door/airlock @@ -120,7 +120,7 @@ base_type = /obj/machinery/airlock_sensor/buildable construct_state = /decl/machine_construction/wall_frame/panel_closed/simple frame_type = /obj/item/frame/button/airlock_controller_config/airlock_sensor - directional_offset = "{'NORTH':{'y':-18}, 'SOUTH':{'y':24}, 'EAST':{'x':-22}, 'WEST':{'x':22}}" + directional_offset = @'{"NORTH":{"y":-18}, "SOUTH":{"y":24}, "EAST":{"x":-22}, "WEST":{"x":22}}' var/alert = FALSE var/master_cycling = FALSE var/pressure @@ -259,7 +259,7 @@ /obj/item/stock_parts/radio/transmitter/on_event/buildable, /obj/item/stock_parts/radio/receiver/buildable, ) - directional_offset = "{'NORTH':{'y':-22}, 'SOUTH':{'y':24}, 'EAST':{'x':-20}, 'WEST':{'x':20}}" + directional_offset = @'{"NORTH":{"y":-22}, "SOUTH":{"y":24}, "EAST":{"x":-20}, "WEST":{"x":20}}' frame_type = /obj/item/frame/button/airlock_controller_config/access base_type = /obj/machinery/button/access/buildable var/command = "cycle" diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 08c9dc58434..6533978f852 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -18,7 +18,7 @@ /obj/item/stock_parts/circuitboard/airlock_electronics/secure name = "secure airlock electronics" desc = "designed to be somewhat more resistant to hacking than standard electronics." - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' secure = TRUE /obj/item/stock_parts/circuitboard/airlock_electronics/windoor diff --git a/code/game/machinery/doors/airlock_interactions.dm b/code/game/machinery/doors/airlock_interactions.dm index 681f9258b0b..4a28ca7be39 100644 --- a/code/game/machinery/doors/airlock_interactions.dm +++ b/code/game/machinery/doors/airlock_interactions.dm @@ -82,7 +82,7 @@ /mob/living/carbon/airlock_crush(var/crush_damage) . = ..() if (can_feel_pain()) - emote("scream") + emote(/decl/emote/audible/scream) /mob/living/silicon/robot/airlock_crush(var/crush_damage) return ..(round(crush_damage / CYBORG_AIRLOCKCRUSH_RESISTANCE)) //TODO implement robot melee armour and remove this. diff --git a/code/game/machinery/doors/airlock_subtypes.dm b/code/game/machinery/doors/airlock_subtypes.dm index 9be22784a4e..179b0d35d2c 100644 --- a/code/game/machinery/doors/airlock_subtypes.dm +++ b/code/game/machinery/doors/airlock_subtypes.dm @@ -18,6 +18,10 @@ door_color = COLOR_WHITE stripe_color = COLOR_DEEP_SKY_BLUE +/obj/machinery/door/airlock/medical/open + icon_state = "open" + begins_closed = FALSE + /obj/machinery/door/airlock/virology door_color = COLOR_WHITE stripe_color = COLOR_GREEN @@ -63,7 +67,7 @@ name = "Glass Airlock" icon_state = "preview_glass" hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 300 + max_health = 300 explosion_resistance = 5 opacity = FALSE glass = TRUE @@ -145,6 +149,10 @@ /decl/stock_part_preset/radio/event_transmitter/airlock/external_air = 1 ) +/obj/machinery/door/airlock/external/open + icon_state = "open" + begins_closed = FALSE + /obj/machinery/door/airlock/external/get_auto_access() . = ..() var/area/A = get_area(src) @@ -185,7 +193,7 @@ opacity = FALSE /obj/machinery/door/airlock/external/glass - maxhealth = 300 + max_health = 300 explosion_resistance = 5 opacity = FALSE glass = TRUE diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index eea3bf99a74..440d263c407 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -15,9 +15,9 @@ can_open_manually = FALSE // Icon states for different shutter types. Simply change this instead of rewriting the update_icon proc. - var/icon_state_open = null + icon_state_open = null + icon_state_closed = null var/icon_state_opening = null - var/icon_state_closed = null var/icon_state_closing = null var/icon_state_open_broken = null @@ -36,7 +36,6 @@ //turning this off prevents awkward zone geometry in places like medbay lobby, for example. block_air_zones = 0 - var/begins_closed = TRUE var/decl/material/implicit_material autoset_access = FALSE // Uses different system with buttons. pry_mod = 1.35 @@ -55,15 +54,8 @@ base_type = /obj/machinery/door/blast /obj/machinery/door/blast/Initialize() - . = ..() - - if(!begins_closed) - icon_state = icon_state_open - set_density(0) - set_opacity(0) - layer = open_layer - implicit_material = GET_DECL(/decl/material/solid/metal/plasteel) + . = ..() /obj/machinery/door/blast/examine(mob/user) . = ..() @@ -166,7 +158,7 @@ to_chat(user, "[src]'s motors resist your effort.") return if(istype(C, /obj/item/stack/material) && C.get_material_type() == /decl/material/solid/metal/plasteel) - var/amt = CEILING((maxhealth - health)/150) + var/amt = CEILING((get_max_health() - current_health)/150) if(!amt) to_chat(user, "\The [src] is already fully functional.") return @@ -195,7 +187,7 @@ force_open() if(autoclose) - addtimer(CALLBACK(src, .proc/close), 15 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close)), 15 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) return TRUE @@ -217,7 +209,7 @@ // Parameters: None // Description: Fully repairs the blast door. /obj/machinery/door/blast/proc/repair() - health = maxhealth + current_health = get_max_health() set_broken(FALSE) queue_icon_update() @@ -243,7 +235,7 @@ /decl/public_access/public_method/close_door_delayed name = "delayed close door" desc = "Closes the door if possible, after a short delay." - call_proc = /obj/machinery/door/blast/proc/delayed_close + call_proc = TYPE_PROC_REF(/obj/machinery/door/blast, delayed_close) /decl/stock_part_preset/radio/receiver/blast_door frequency = BLAST_DOORS_FREQ @@ -320,7 +312,7 @@ icon_state_closed_broken = "closed_broken" min_force = 30 - maxhealth = 1000 + max_health = 1000 block_air_zones = 1 var/icon_lower_door_open = "open_bottom" @@ -343,7 +335,21 @@ /obj/machinery/door/blast/regular/open icon_state = "open" begins_closed = FALSE - icon_state = "pdoor0" + +/obj/machinery/door/blast/regular/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/radio/receiver/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/blast_door, + /decl/stock_part_preset/terminal_setup, + ) + +/obj/machinery/door/blast/regular/wired/open + icon_state = "open" + begins_closed = FALSE // SUBTYPE: Shutters // Nicer looking, and also weaker, shutters. Found in kitchen and similar areas. @@ -363,7 +369,7 @@ open_sound = 'sound/machines/shutters_open.ogg' close_sound = 'sound/machines/shutters_close.ogg' min_force = 15 - maxhealth = 500 + max_health = 500 explosion_resistance = 10 pry_mod = 0.55 frame_type = /obj/structure/door_assembly/blast/shutter diff --git a/code/game/machinery/doors/braces.dm b/code/game/machinery/doors/braces.dm index c6ba9a1d39a..39b91a4f4b6 100644 --- a/code/game/machinery/doors/braces.dm +++ b/code/game/machinery/doors/braces.dm @@ -9,7 +9,7 @@ attack_cooldown = 2.5*DEFAULT_WEAPON_COOLDOWN melee_accuracy_bonus = -25 material = /decl/material/solid/metal/steel - origin_tech = "{'engineering':3,'materials':2}" + origin_tech = @'{"engineering":3,"materials":2}' // BRACE - Can be installed on airlock to reinforce it and keep it closed. /obj/item/airlock_brace @@ -21,7 +21,7 @@ material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) material_health_multiplier = 0.6 - origin_tech = "{'engineering':3,'materials':2}" + origin_tech = @'{"engineering":3,"materials":2}' var/obj/machinery/door/airlock/airlock = null var/obj/item/stock_parts/circuitboard/airlock_electronics/brace/electronics @@ -102,7 +102,7 @@ return if(C.weld(0,user)) playsound(src, 'sound/items/Welder.ogg', 100, 1) - health = min(health + rand(20,30), max_health) + current_health = min(current_health + rand(20,30), get_max_health()) if(!is_damaged()) to_chat(user, "You repair some dents on \the [src]. It is in perfect condition now.") else diff --git a/code/game/machinery/doors/double.dm b/code/game/machinery/doors/double.dm index deade476b6b..131aefa5f45 100644 --- a/code/game/machinery/doors/double.dm +++ b/code/game/machinery/doors/double.dm @@ -41,7 +41,7 @@ success = 1 else for(var/obj/O in T) - for(var/blend_type in blend_objects) + for(var/blend_type in get_blend_objects()) if( istype(O, blend_type)) success = 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index eecf6644ddc..377c4fe6d58 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -58,11 +58,17 @@ "hot", "cold" ) - - blend_objects = list(/obj/machinery/door/firedoor, /obj/structure/wall_frame, /turf/unsimulated/wall, /obj/structure/window) // Objects which to blend with - var/allow_multiple_instances_on_same_tile = FALSE +/obj/machinery/door/firedoor/get_blend_objects() + var/static/list/blend_objects = list( + /obj/machinery/door/firedoor, + /obj/structure/wall_frame, + /turf/unsimulated/wall, + /obj/structure/window + ) // Objects which to blend with + return blend_objects + /obj/machinery/door/firedoor/autoset autoset_access = TRUE //subtype just to make mapping away sites with custom access usage req_access = list() @@ -280,7 +286,7 @@ var/changed = 0 lockdown=0 // Pressure alerts - pdiff = getOPressureDifferential(src.loc) + pdiff = get_surrounding_pressure_differential(loc, src) if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) lockdown = 1 if(!pdiff_alert) @@ -356,14 +362,22 @@ // Only opens when all areas connecting with our turf have an air alarm and are cleared /obj/machinery/door/firedoor/proc/can_safely_open() var/turf/neighbour + var/turf/myturf = loc + if(!istype(myturf)) + return TRUE for(var/dir in global.cardinal) - neighbour = get_step(src.loc, dir) - if(neighbour.c_airblock(src.loc) & AIR_BLOCKED) + neighbour = get_step(myturf, dir) + if(!neighbour) + continue + var/airblock // zeroed by ATMOS_CANPASS_TURF, declared early as microopt + ATMOS_CANPASS_TURF(airblock, neighbour, myturf) + if(airblock & AIR_BLOCKED) continue - for(var/obj/O in src.loc) + for(var/obj/O in myturf) if(istype(O, /obj/machinery/door)) continue - . |= O.c_airblock(neighbour) + ATMOS_CANPASS_MOVABLE(airblock, O, neighbour) + . |= airblock if(. & AIR_BLOCKED) continue var/area/A = get_area(neighbour) @@ -453,11 +467,11 @@ return TRUE /obj/machinery/door/firedoor/border/update_nearby_tiles(need_rebuild) - var/turf/simulated/source = get_turf(src) - var/turf/simulated/destination = get_step(source,dir) + var/turf/source = get_turf(src) + var/turf/destination = get_step(source,dir) update_heat_protection(loc) - if(istype(source)) SSair.mark_for_update(source) - if(istype(destination)) SSair.mark_for_update(destination) + if(istype(source) && source.simulated) SSair.mark_for_update(source) + if(istype(destination) && destination.simulated) SSair.mark_for_update(destination) return TRUE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index b0130013ea7..c1b0ec18694 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -5,13 +5,13 @@ icon_state = "left" min_force = 4 hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 150 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file - health = 150 + max_health = 150 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file + current_health = 150 visible = 0.0 use_power = POWER_USE_OFF stat_immune = NOSCREEN | NOINPUT | NOPOWER uncreated_component_parts = null - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER + atom_flags = ATOM_FLAG_CHECKS_BORDER opacity = FALSE explosion_resistance = 5 pry_mod = 0.5 @@ -60,21 +60,21 @@ if (!( ismob(AM) )) var/mob/living/bot/bot = AM if(istype(bot)) - if(density && src.check_access(bot.botcard)) + if(density && check_access(bot.botcard)) open() - addtimer(CALLBACK(src, .proc/close), 50, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close)), 50, TIMER_UNIQUE | TIMER_OVERRIDE) return var/mob/M = AM // we've returned by here if M is not a mob - if (src.operating) + if (operating) return - if (src.density && (!issmall(M) || ishuman(M) || issilicon(M)) && src.allowed(AM)) + if (density && (!issmall(M) || ishuman(M) || issilicon(M)) && allowed(AM)) open() var/open_timer - if(src.check_access(null)) + if(check_access(null)) open_timer = 50 else //secure doors close faster open_timer = 20 - addtimer(CALLBACK(src, .proc/close), open_timer, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close)), open_timer, TIMER_UNIQUE | TIMER_OVERRIDE) return /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -97,12 +97,12 @@ /obj/machinery/door/window/open() if (operating == 1) //doors can still open when emag-disabled return 0 - if (!src.operating) //in case of emag - src.operating = 1 + if (!operating) //in case of emag + operating = 1 - icon_state = "[src.base_state]open" - flick("[src.base_state]opening", src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) + icon_state = "[base_state]open" + flick("[base_state]opening", src) + playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1) sleep(0.9 SECONDS) explosion_resistance = 0 @@ -116,12 +116,12 @@ return TRUE /obj/machinery/door/window/close() - if (src.operating) + if (operating) return 0 operating = 1 - flick(text("[]closing", src.base_state), src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) + flick("[base_state]closing", src) + playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1) set_density(TRUE) update_icon() explosion_resistance = initial(explosion_resistance) @@ -133,8 +133,8 @@ return TRUE /obj/machinery/door/window/take_damage(var/damage) - src.health = max(0, src.health - damage) - if (src.health <= 0) + current_health = max(0, current_health - damage) + if (current_health <= 0) shatter() return @@ -142,8 +142,8 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.species.can_shred(H)) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[user] smashes against the [src.name].", 1) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) + visible_message("\The [user] smashes against \the [src].", 1) take_damage(25) return TRUE return ..() @@ -161,7 +161,7 @@ to_chat(user, SPAN_NOTICE("You short out \the [src]'s internal circuitry, locking it open!")) if (density) flick("[base_state]spark", src) - addtimer(CALLBACK(src, .proc/open), 6, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(open)), 6, TIMER_UNIQUE | TIMER_OVERRIDE) return TRUE /obj/machinery/door/emp_act(severity) @@ -185,8 +185,8 @@ if(.) return - if (src.allowed(user)) - if (src.density) + if (allowed(user)) + if (density) open() else if (emagged) @@ -194,16 +194,16 @@ return close() - else if (src.density) - flick(text("[]deny", src.base_state), src) + else if (density) + flick("[base_state]deny", src) /obj/machinery/door/window/bash(obj/item/I, mob/user) //Emags and ninja swords? You may pass. if (istype(I, /obj/item/energy_blade)) var/obj/item/energy_blade/blade = I if(blade.is_special_cutting_tool() && emag_act(10, user)) - spark_at(src.loc, amount=5) - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) + spark_at(loc, amount=5) + playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) visible_message(SPAN_WARNING("The glass door was sliced open by [user]!")) return 1 return ..() @@ -213,8 +213,8 @@ icon = 'icons/obj/doors/windoor.dmi' icon_state = "leftsecure" base_state = "leftsecure" - maxhealth = 300 - health = 300.0 //Stronger doors for prison (regular window door health is 150) + max_health = 300 + current_health = 300.0 //Stronger doors for prison (regular window door health is 150) pry_mod = 0.65 diff --git a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm index 0da24e61151..019b728bb15 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm @@ -9,7 +9,7 @@ base_type = /obj/machinery/dummy_airlock_controller construct_state = /decl/machine_construction/wall_frame/panel_closed frame_type = /obj/item/frame/button/airlock_controller - directional_offset = "{'NORTH':{'y':-22}, 'SOUTH':{'y':24}, 'EAST':{'x':-22}, 'WEST':{'x':22}}" + directional_offset = @'{"NORTH":{"y":-22}, "SOUTH":{"y":24}, "EAST":{"x":-22}, "WEST":{"x":22}}' power_channel = ENVIRON //Same as airlock controller required_interaction_dexterity = DEXTERITY_TOUCHSCREENS ///Topic state used to interact remotely with the master controller's UI diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 5591bf7de1a..bf79f9c8bc9 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -9,7 +9,7 @@ #define TARGET_INOPEN -1 #define TARGET_OUTOPEN -2 -#define SENSOR_TOLERANCE 1 +#define SENSOR_TOLERANCE 0.5 /datum/computer/file/embedded_program/airlock var/tag_exterior_door @@ -234,7 +234,7 @@ signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing else signalPump(tag_pump_out_internal, 1, 0, target_pressure) // if going inside, pump external air out of the airlock - signalPump(tag_pump_out_external, 1, 1, 1000) // make sure the air is actually going outside + signalPump(tag_pump_out_external, 1, 1, MAX_PUMP_PRESSURE) // make sure the air is actually going outside else if(chamber_pressure <= target_pressure) state = STATE_PRESSURIZE diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 7e98869a6c5..403b40d2273 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -54,7 +54,7 @@ construct_state = /decl/machine_construction/wall_frame/panel_closed frame_type = /obj/item/frame/button/airlock_controller base_type = /obj/machinery/embedded_controller/radio/simple_docking_controller - directional_offset = "{'NORTH':{'y':-22}, 'SOUTH':{'y':24}, 'EAST':{'x':-22}, 'WEST':{'x':22}}" + directional_offset = @'{"NORTH":{"y":-22}, "SOUTH":{"y":24}, "EAST":{"x":-22}, "WEST":{"x":22}}' required_interaction_dexterity = DEXTERITY_TOUCHSCREENS var/frequency = EXTERNAL_AIR_FREQ ///Icon state of the screen used by dummy controllers to match the same state @@ -230,3 +230,10 @@ /decl/stock_part_preset/radio/receiver/vent_pump/airlock = 1, /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock = 1 ) + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock/cabled + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/vent_pump/airlock = 1, + /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock = 1, + /decl/stock_part_preset/terminal_connect/offset_dir = 1, + ) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index a39a573c195..577c6545f19 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -5,7 +5,7 @@ desc = "A wall-mounted flashbulb device." icon = 'icons/obj/machines/flash_mounted.dmi' icon_state = "mflash1" - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-16}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED var/range = 2 //this is roughly the size of brig cell var/disable = 0 @@ -145,7 +145,7 @@ /decl/public_access/public_method/flasher_flash name = "flash" desc = "Performs a flash, if possible." - call_proc = /obj/machinery/flasher/proc/flash + call_proc = TYPE_PROC_REF(/obj/machinery/flasher, flash) /decl/stock_part_preset/radio/receiver/flasher frequency = BUTTON_FREQ diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index bcb38a699ea..fbe1a323535 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -114,25 +114,31 @@ var/global/list/holopads = list() else to_chat(user, "A request for AI presence was already sent recently.") if("Holocomms") + if(user.loc != src.loc) to_chat(user, "Please step onto the holopad.") return + if(last_request + 200 < world.time) //don't spam other people with requests either, you jerk! + last_request = world.time var/list/holopadlist = list() var/zlevels = SSmapping.get_connected_levels(z) - var/zlevels_long = list() + var/list/zlevels_long = list() + if(holopadType == HOLOPAD_LONG_RANGE && length(reachable_overmaps)) for(var/zlevel in global.overmap_sectors) - var/obj/effect/overmap/visitable/O = global.overmap_sectors[num2text(zlevel)] - if(!isnull(O) && (O.overmap_id in reachable_overmaps)) + var/obj/effect/overmap/visitable/O = global.overmap_sectors[zlevel] + if(!isnull(O) && (O.overmap_id in reachable_overmaps) && LAZYLEN(O.map_z)) zlevels_long |= O.map_z + for(var/obj/machinery/hologram/holopad/H in SSmachines.machinery) if (H.operable()) if(H.z in zlevels) holopadlist["[H.holopad_id]"] = H //Define a list and fill it with the area of every holopad in the world if (H.holopadType == HOLOPAD_LONG_RANGE && (H.z in zlevels_long)) holopadlist["[H.holopad_id]"] = H + holopadlist = sortTim(holopadlist, /proc/cmp_text_asc) var/temppad = input(user, "Which holopad would you like to contact?", "holopad list") as null|anything in holopadlist targetpad = holopadlist["[temppad]"] @@ -140,7 +146,7 @@ var/global/list/holopads = list() to_chat(user, "Using such sophisticated technology, just to talk to yourself seems a bit silly.") return if(targetpad && targetpad.caller_id) - to_chat(user, "The pad flashes a busy sign. Maybe you should try again later..") + to_chat(user, "The pad flashes a busy sign. Maybe you should try again later.") return if(targetpad) make_call(targetpad, user) @@ -229,7 +235,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ ai_text = stars(text) if(isanimal(M) && !M.universal_speak) var/mob/living/simple_animal/SA = M - ai_text = pick(SA.speak) + ai_text = DEFAULTPICK(SA.emote_speech, "...") var/name_used = M.GetVoice() //This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only. var/short_links = master.get_preference_value(/datum/client_preference/ghost_follow_link_length) == PREF_SHORT @@ -240,7 +246,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ var/message if(isanimal(M) && !M.universal_speak) var/mob/living/simple_animal/SA = M - message = get_hear_message(name_used, pick(SA.speak), verb, speaking) + message = get_hear_message(name_used, DEFAULTPICK(SA.emote_speech, "..."), verb, speaking) else message = get_hear_message(name_used, text, verb, speaking) if(targetpad && !targetpad.incoming_connection) //If this is the pad you're making the call from and the call is accepted @@ -400,28 +406,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ clear_holo(master) return ..() -/* -Holographic project of everything else. - -/mob/verb/hologram_test() - set name = "Hologram Debug New" - set category = "CURRENT DEBUG" - - var/obj/effect/overlay/hologram = new(loc)//Spawn a blank effect at the location. - var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused. - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(0.5)//Make it half transparent. - var/input = input("Select what icon state to use in effect.",,"") - if(input) - var/icon/alpha_mask = new('icons/effects/effects.dmi', "[input]") - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - hologram.icon = flat_icon - - log_debug("Your icon should appear now.") - - return -*/ - /* * Other Stuff: Is this even used? */ diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 61011c1e5b3..3e0327cc03a 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -9,7 +9,7 @@ active_power_usage = 70 anchored = TRUE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' var/lit = 0 var/on_icon = "sign_on" @@ -52,7 +52,7 @@ /decl/public_access/public_method/holosign_toggle name = "holosign toggle" desc = "Toggle the holosign's active state." - call_proc = /obj/machinery/holosign/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/holosign, toggle) /decl/stock_part_preset/radio/receiver/holosign frequency = BUTTON_FREQ diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 09a65b80873..dfb8731316f 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -73,7 +73,7 @@ /decl/public_access/public_method/igniter_toggle name = "igniter toggle" desc = "Toggle the igniter on or off." - call_proc = /obj/machinery/igniter/proc/ignite + call_proc = TYPE_PROC_REF(/obj/machinery/igniter, ignite) /decl/stock_part_preset/radio/receiver/igniter frequency = BUTTON_FREQ @@ -106,7 +106,7 @@ construct_state = /decl/machine_construction/wall_frame/panel_closed/simple frame_type = /obj/item/frame/button/sparker base_type = /obj/machinery/sparker/buildable - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' /obj/machinery/sparker/buildable uncreated_component_parts = null @@ -164,7 +164,7 @@ /decl/public_access/public_method/sparker_spark name = "spark" desc = "Creates sparks to ignite nearby gases." - call_proc = /obj/machinery/sparker/proc/ignite + call_proc = TYPE_PROC_REF(/obj/machinery/sparker, ignite) /decl/stock_part_preset/radio/receiver/sparker frequency = BUTTON_FREQ diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 0350d3a4998..11e5d66b45e 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -89,7 +89,7 @@ else return ..() -/obj/machinery/gibber/receive_mouse_drop(atom/dropping, mob/user) +/obj/machinery/gibber/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && ismob(dropping)) move_into_gibber(user, dropping) @@ -167,7 +167,7 @@ admin_attack_log(user, occupant, "Gibbed the victim", "Was gibbed", "gibbed") src.occupant.ghostize() - addtimer(CALLBACK(src, .proc/finish_gibbing), gib_time) + addtimer(CALLBACK(src, PROC_REF(finish_gibbing)), gib_time) var/list/gib_products = occupant.harvest_meat() | occupant.harvest_skin() | occupant.harvest_bones() if(!length(gib_products)) @@ -200,7 +200,7 @@ if(istype(thing, /obj/item/chems/food/meat)) var/obj/item/chems/food/meat/slab = thing slab.SetName("[slab_name] [slab.name]") - slab.reagents.add_reagent(/decl/material/liquid/nutriment,slab_nutrition) + slab.add_to_reagents(/decl/material/liquid/nutriment,slab_nutrition) /obj/machinery/gibber/proc/finish_gibbing() operating = 0 diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm index 7a223bb40b5..6f857f92d46 100644 --- a/code/game/machinery/kitchen/icecream.dm +++ b/code/game/machinery/kitchen/icecream.dm @@ -16,7 +16,7 @@ icon_state = "icecream_vat" density = TRUE anchored = FALSE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER idle_power_usage = 100 var/list/product_types = list() @@ -75,10 +75,10 @@ . = ..() /obj/machinery/icecream_vat/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk, 5) - reagents.add_reagent(/decl/material/liquid/nutriment/flour, 5) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 5) - reagents.add_reagent(/decl/material/solid/ice, 5) + add_to_reagents(/decl/material/liquid/drink/milk, 5) + add_to_reagents(/decl/material/liquid/nutriment/flour, 5) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 5) + add_to_reagents(/decl/material/solid/ice, 5) /obj/machinery/icecream_vat/interface_interact(mob/user) interact(user) @@ -121,7 +121,7 @@ // if(beaker) // beaker.reagents.trans_to(I, 10) if(I.reagents.total_volume < 10) - I.reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 10 - I.reagents.total_volume) + I.add_to_reagents(/decl/material/liquid/nutriment/sugar, 10 - I.reagents.total_volume) else to_chat(user, "There is not enough icecream left!") else @@ -140,7 +140,7 @@ break if(amount) for(var/R in get_ingredient_list(make_type)) - reagents.remove_reagent(R, amount) + remove_from_reagents(R, amount) product_types[make_type] += amount var/flavour = get_flavour_name(make_type) if(make_type > 6) @@ -203,7 +203,7 @@ /obj/item/chems/food/icecream/Initialize() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment, 5) + add_to_reagents(/decl/material/liquid/nutriment, 5) update_icon() /obj/item/chems/food/icecream/on_update_icon() diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 65f98e8a90d..4222b33a9b7 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -7,7 +7,7 @@ anchored = TRUE idle_power_usage = 5 active_power_usage = 100 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER construct_state = /decl/machine_construction/default/panel_closed uncreated_component_parts = null stat_immune = 0 @@ -75,7 +75,7 @@ broken = 0 // Fix it! dirty = 0 // just to be sure update_icon() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_OPEN_CONTAINER else to_chat(user, SPAN_WARNING("It's broken!")) return 1 @@ -96,7 +96,7 @@ dirty = 0 // It's clean! broken = 0 // just to be sure update_icon() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_OPEN_CONTAINER else //Otherwise bad luck!! to_chat(user, SPAN_WARNING("It's dirty!")) return 1 @@ -298,7 +298,7 @@ update_use_power(POWER_USE_ACTIVE) START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - addtimer(CALLBACK(src, .proc/half_time_process), cook_time / 2) + addtimer(CALLBACK(src, PROC_REF(half_time_process)), cook_time / 2) visible_message(SPAN_NOTICE("[src] turns on."), SPAN_NOTICE("You hear a microwave.")) if(cook_dirty) @@ -420,8 +420,8 @@ reagents.clear_reagents() SSnano.update_uis(src) var/obj/item/chems/food/badrecipe/ffuu = new(src) - ffuu.reagents.add_reagent(/decl/material/solid/carbon, amount) - ffuu.reagents.add_reagent(/decl/material/liquid/bromide, amount/10) + ffuu.add_to_reagents(/decl/material/solid/carbon, amount) + ffuu.add_to_reagents(/decl/material/liquid/acrylamide, amount/10) return ffuu /obj/machinery/microwave/OnTopic(href, href_list) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 8aae9fabfd8..884f344d3cc 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -10,7 +10,7 @@ anchored = TRUE idle_power_usage = 5 active_power_usage = 100 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE obj_flags = OBJ_FLAG_ANCHORABLE | OBJ_FLAG_ROTATABLE atmos_canpass = CANPASS_NEVER required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES @@ -79,6 +79,20 @@ return 1 return 0 +/obj/machinery/smartfridge/produce + name = "produce smartfridge" + desc = "A refrigerated storage unit for fruits and vegetables." + +/obj/machinery/smartfridge/produce/accept_check(var/obj/item/O) + return istype(O, /obj/item/grown) || istype(O, /obj/item/chems/food/grown) + +/obj/machinery/smartfridge/sheets + name = "raw material storage" + desc = "A storage unit for bundles of material sheets, ingots and other shapes." + +/obj/machinery/smartfridge/sheets/accept_check(var/obj/item/O) + return istype(O, /obj/item/stack/material) + /obj/machinery/smartfridge/chemistry name = "\improper Smart Chemical Storage" desc = "A refrigerated storage unit for medicine and chemical storage." @@ -108,7 +122,7 @@ icon_contents = "food" /obj/machinery/smartfridge/foods/accept_check(var/obj/item/O) - if(istype(O,/obj/item/chems/food) || istype(O,/obj/item/kitchen/utensil)) + if(istype(O,/obj/item/chems/food) || istype(O,/obj/item/utensil)) return 1 /obj/machinery/smartfridge/drying_rack diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index f574381e6c5..33a1bb173c2 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -24,7 +24,7 @@ /obj/item/stock_parts/power/apc ) base_type = /obj/machinery/light_switch - directional_offset = "{'NORTH':{'y':-20}, 'SOUTH':{'y':25}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-20}, "SOUTH":{"y":25}, "EAST":{"x":-24}, "WEST":{"x":24}}' /obj/machinery/light_switch/on on = TRUE diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 6c3161ce09b..cc4014b6eaa 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -55,12 +55,12 @@ /decl/public_access/public_method/driver_drive name = "launch" desc = "Makes the mass driver launch immediately" - call_proc = /obj/machinery/mass_driver/proc/drive + call_proc = TYPE_PROC_REF(/obj/machinery/mass_driver, drive) /decl/public_access/public_method/driver_drive_delayed name = "delayed launch" desc = "Makes the mass driver launch after a short delay" - call_proc = /obj/machinery/mass_driver/proc/delayed_drive + call_proc = TYPE_PROC_REF(/obj/machinery/mass_driver, delayed_drive) /decl/stock_part_preset/radio/receiver/driver frequency = BLAST_DOORS_FREQ diff --git a/code/game/machinery/mech_recharger.dm b/code/game/machinery/mech_recharger.dm index 1738984bce3..bd9e8be6936 100644 --- a/code/game/machinery/mech_recharger.dm +++ b/code/game/machinery/mech_recharger.dm @@ -68,14 +68,17 @@ var/remaining_energy = active_power_usage if(repair && !fully_repaired()) + var/repaired = FALSE for(var/obj/item/mech_component/MC in charging) if(MC) MC.repair_brute_damage(repair) MC.repair_burn_damage(repair) remaining_energy -= repair * repair_power_usage + repaired = TRUE if(remaining_energy <= 0) break - charging.updatehealth() + if(repaired) + charging.update_health() // TODO: do this during component repair. if(fully_repaired()) charging.show_message(SPAN_NOTICE("Exosuit integrity has been fully restored.")) @@ -90,7 +93,7 @@ // An ugly proc, but apparently mechs don't have maxhealth var of any kind. /obj/machinery/mech_recharger/proc/fully_repaired() - return charging && (charging.health == charging.maxHealth) + return charging && (charging.current_health >= charging.get_max_health()) /obj/machinery/mech_recharger/proc/start_charging(var/mob/living/exosuit/M) if(stat & (NOPOWER | BROKEN)) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 3784122183e..d3c25560c91 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -157,7 +157,7 @@ var/global/list/allCasters = list() //Global list that will contain reference to uncreated_component_parts = null stat_immune = 0 frame_type = /obj/item/frame/stock_offset/newscaster - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' /obj/machinery/newscaster/Initialize() . = ..() @@ -927,8 +927,51 @@ var/global/list/allCasters = list() //Global list that will contain reference to audible_message("[src.name] beeps, \"[news_call]\"") src.alert = 1 src.update_icon() - addtimer(CALLBACK(src, .proc/reset_alert), alert_delay, TIMER_UNIQUE | TIMER_OVERRIDE) //stay alert for the full time if we get a new one + addtimer(CALLBACK(src, PROC_REF(reset_alert)), alert_delay, TIMER_UNIQUE | TIMER_OVERRIDE) //stay alert for the full time if we get a new one playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) else audible_message("[src.name] beeps, \"Attention! Wanted issue distributed!\"") playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1) + +//New Icon update stuff PS13 +/obj/machinery/newscaster + icon = 'icons/obj/machines/wall/newscaster.dmi' + icon_state = "frame" + +/obj/machinery/newscaster/on_update_icon() + cut_overlays() + + //Handles construction states + if(panel_open) + var/obj/item/stock_parts/circuitboard/C = get_component_of_type(/obj/item/stock_parts/circuitboard) + if(C) + add_overlay("overlay-open-circuit") + else if(!istype(construct_state, /decl/machine_construction/wall_frame/no_wires)) + add_overlay("overlay-open-wires") + else + add_overlay("overlay-open-empty") + return //return since none of the things below matter + + //Handles working display + if(operable() && !(stat & NOSCREEN)) + add_overlay("overlay-on") + if(news_network?.wanted_issue) + add_overlay("overlay-blinkers") + else if(alert) + add_overlay("overlay-alert") + + //Handles broken display + else if(is_broken() && (reason_broken & MACHINE_BROKEN_GENERIC)) + add_overlay("overlay-damage-3") + return //return so we don't stack damage overlays + + //#TODO: Enable this when health stuff is in +#if 0 + //Handles cover damage overlay + if(get_health_percent() <= 30) + add_overlay("overlay-damage-3") + else if(get_health_percent() <= 60) + add_overlay("overlay-damage-2") + else if(get_health_percent() <= 90) + add_overlay("overlay-damage-1") +#endif diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index b1caca7b885..0c7d2490fe0 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -41,7 +41,7 @@ var/global/bomb_set timeleft = max(timeleft - (wait / 10), 0) playsound(loc, 'sound/items/timer.ogg', 50) if(timeleft <= 0) - addtimer(CALLBACK(src, .proc/explode), 0) + addtimer(CALLBACK(src, PROC_REF(explode)), 0) SSnano.update_uis(src) /obj/machinery/nuclearbomb/attackby(obj/item/O, mob/user, params) @@ -367,18 +367,18 @@ var/global/bomb_set . = ..() global.nuke_disks |= src // Can never be quite sure that a game mode has been properly initiated or not at this point, so always register - events_repository.register(/decl/observ/moved, src, src, /obj/item/disk/nuclear/proc/check_z_level) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) /obj/item/disk/nuclear/proc/check_z_level() if(!(istype(SSticker.mode, /decl/game_mode/nuclear))) - events_repository.unregister(/decl/observ/moved, src, src, /obj/item/disk/nuclear/proc/check_z_level) // However, when we are certain unregister if necessary + events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) // However, when we are certain unregister if necessary return var/turf/T = get_turf(src) if(!T || isNotStationLevel(T.z)) qdel(src) /obj/item/disk/nuclear/Destroy() - events_repository.unregister(/decl/observ/moved, src, src, /obj/item/disk/nuclear/proc/check_z_level) + events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) global.nuke_disks -= src if(!length(global.nuke_disks)) var/turf/T = pick_area_turf_by_flag(AREA_FLAG_MAINTENANCE, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index ccd515bcfe8..2739b2fc5a3 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -21,7 +21,7 @@ power_channel = ENVIRON idle_power_usage = 10 active_power_usage = 120 // No idea what the realistic amount would be. - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':28}, 'EAST':{'x':24}, 'WEST':{'x':-24}}" + directional_offset = @'{"NORTH":{"y":-24}, "SOUTH":{"y":28}, "EAST":{"x":24}, "WEST":{"x":-24}}' /obj/machinery/oxygen_pump/Initialize() . = ..() @@ -41,7 +41,7 @@ breather = null return ..() -/obj/machinery/oxygen_pump/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/machinery/oxygen_pump/handle_mouse_drop(atom/over, mob/user, params) if(ishuman(over) && can_apply_to_target(over, user)) user.visible_message(SPAN_NOTICE("\The [user] begins placing the mask onto \the [over]..")) if(do_mob(user, over, 25) && can_apply_to_target(over, user)) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index e2349268123..8a40b68aacc 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -17,11 +17,10 @@ idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power power_channel = EQUIP //drains power from the EQUIPMENT channel + max_health = 80 var/raised = 0 //if the turret cover is "open" and the turret is raised var/raising= 0 //if the turret is currently opening or closing its cover - var/health = 80 //the turret's health - var/maxhealth = 80 //turrets maximal health. var/auto_repair = 0 //if 1 the turret slowly repairs itself. var/locked = 1 //if the turret's behaviour control access is locked var/controllock = 0 //if the turret responds to control panels @@ -80,7 +79,7 @@ ailock = 0 malf_upgraded = 1 to_chat(user, "\The [src] has been upgraded. It's damage and rate of fire has been increased. Auto-regeneration system has been enabled. Power usage has increased.") - maxhealth = round(initial(maxhealth) * 1.5) + max_health = round(initial(max_health) * 1.5) shot_delay = round(initial(shot_delay) / 2) auto_repair = 1 change_power_consumption(round(initial(active_power_usage) * 5), POWER_USE_ACTIVE) @@ -239,7 +238,8 @@ var/global/list/turret_icons /obj/machinery/porta_turret/physically_destroyed(skip_qdel) if(installation) var/obj/item/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge + var/obj/item/cell/power_supply = Gun.get_cell() + power_supply?.charge = gun_charge Gun.update_icon() if(prob(50)) SSmaterials.create_object(/decl/material/solid/metal/steel, loc, rand(1,4)) @@ -332,10 +332,10 @@ var/global/list/turret_icons if(force < 5) return - health -= force + current_health -= force if (force > 5 && prob(45)) spark_at(src, amount = 5) - if(health <= 0) + if(current_health <= 0) die() //the death process :( /obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) @@ -369,7 +369,7 @@ var/global/list/turret_icons disabled = 1 var/power = 4 - severity - addtimer(CALLBACK(src,/obj/machinery/porta_turret/proc/enable), rand(60*power,600*power)) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/porta_turret, enable)), rand(60*power,600*power)) ..() @@ -383,17 +383,18 @@ var/global/list/turret_icons if(severity == 1 || (severity == 2 && prob(25))) physically_destroyed() else if(severity == 2) - take_damage(initial(health) * 8) + take_damage(initial(current_health) * 8) else - take_damage(initial(health) * 8 / 3) + take_damage(initial(current_health) * 8 / 3) /obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 - health = 0 + current_health = 0 set_broken(TRUE) spark_at(src, amount = 5) atom_flags |= ATOM_FLAG_CLIMBABLE // they're now climbable /obj/machinery/porta_turret/Process() + if(stat & (NOPOWER|BROKEN)) //if the turret has no power or is broken, make the turret pop down if it hasn't already popDown() @@ -410,13 +411,13 @@ var/global/list/turret_icons for(var/mob/M in mobs_in_view(world.view, src)) assess_and_assign(M, targets, secondarytargets) - if(!tryToShootAt(targets)) - if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets - popDown() // no valid targets, close the cover + if(!tryToShootAt(targets) && !tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets + popDown() // no valid targets, close the cover - if(auto_repair && (health < maxhealth)) + var/current_max_health = get_max_health() + if(auto_repair && (current_health < current_max_health)) use_power_oneoff(20000) - health = min(health+1, maxhealth) // 1HP for 20kJ + current_health = min(current_health+1, current_max_health) // 1HP for 20kJ /obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets) switch(assess_living(L)) @@ -426,15 +427,12 @@ var/global/list/turret_icons secondarytargets += L /obj/machinery/porta_turret/proc/assess_living(var/mob/living/L) - if(!istype(L)) + if(!istype(L) || !L.simulated) return TURRET_NOT_TARGET if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var return TURRET_NOT_TARGET - if(!L) - return TURRET_NOT_TARGET - if(!emagged && issilicon(L)) // Don't target silica return TURRET_NOT_TARGET @@ -464,34 +462,29 @@ var/global/list/turret_icons if(isanimal(L) || issmall(L)) // Animals are not so dangerous return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - if(ishuman(L)) //if the target is a human, analyze threat level - if(assess_perp(L) < 4) - return TURRET_NOT_TARGET //if threat level < 4, keep going + if(assess_perp(L) < 4) //if the target is a human, analyze threat level + return TURRET_NOT_TARGET //if threat level < 4, keep going if(L.lying) //if the perp is lying down, it's still a target but a less-important target return lethal ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee -/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H) - if(!H || !istype(H)) +/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/perp) + if(!istype(perp)) return 0 - if(emagged) return 10 - - return H.assess_perp(src, check_access, check_weapons, check_records, check_arrest) + return perp.assess_perp(src, check_access, check_weapons, check_records, check_arrest) /obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) - if(targets.len && last_target && (last_target in targets) && target(last_target)) + if(length(targets) && last_target && (last_target in targets) && target(last_target)) return 1 - while(targets.len > 0) - var/mob/living/M = pick(targets) - targets -= M + while(length(targets)) + var/mob/living/M = pick_n_take(targets) if(target(M)) - return 1 - + return TRUE /obj/machinery/porta_turret/proc/popUp() //pops the turret up if(disabled) @@ -703,7 +696,8 @@ var/global/list/turret_icons to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") return installation = I.type //installation becomes I.type - gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge + var/obj/item/cell/power_supply = E.get_cell() + gun_charge = power_supply?.charge || 0 //the gun's charge is stored in gun_charge to_chat(user, "You add [I] to the turret.") target_type = /obj/machinery/porta_turret @@ -809,7 +803,8 @@ var/global/list/turret_icons return TRUE build_step = 3 var/obj/item/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge + var/obj/item/cell/power_supply = Gun.get_cell() + power_supply?.charge = gun_charge Gun.update_icon() installation = null gun_charge = 0 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index d4b6bf0c7f9..a854dec4c98 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -132,4 +132,4 @@ construct_state = /decl/machine_construction/wall_frame/panel_closed frame_type = /obj/item/frame/button/wall_charger - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':24}, 'EAST':{'x':-28}, 'WEST':{'x':28}}" \ No newline at end of file + directional_offset = @'{"NORTH":{"y":-24}, "SOUTH":{"y":24}, "EAST":{"x":-28}, "WEST":{"x":28}}' \ No newline at end of file diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index a56c44d6ec5..df55809d8f9 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -26,7 +26,7 @@ . = ..() update_icon() -/obj/machinery/recharge_station/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/machinery/recharge_station/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && isliving(dropping)) var/mob/living/M = dropping @@ -175,7 +175,7 @@ overlays = list(image(overlay_icon, overlay_state())) /obj/machinery/recharge_station/Bumped(var/mob/living/silicon/robot/R) - addtimer(CALLBACK(src, .proc/go_in, R), 1) + addtimer(CALLBACK(src, PROC_REF(go_in), R), 1) /obj/machinery/recharge_station/proc/go_in(var/mob/M) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index cbbaedff580..356eda5834f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -22,8 +22,8 @@ var/global/req_console_information = list() anchored = TRUE density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - icon = 'icons/obj/terminals.dmi' - icon_state = "req_comp0" + icon = 'icons/obj/machines/wall/request_console.dmi' + icon_state = "on" 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 var/newmessagepriority = 0 @@ -47,15 +47,15 @@ var/global/req_console_information = list() uncreated_component_parts = null construct_state = /decl/machine_construction/wall_frame/panel_closed frame_type = /obj/item/frame/stock_offset/request_console - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":32}, "SOUTH":{"y":-32}, "EAST":{"x":32}, "WEST":{"x":-32}}' /obj/machinery/network/requests_console/on_update_icon() if(stat & NOPOWER) - if(icon_state != "req_comp_off") - icon_state = "req_comp_off" + if(icon_state != "frame") + icon_state = "frame" else - if(icon_state == "req_comp_off") - icon_state = "req_comp[newmessagepriority]" + if(icon_state == "frame") + icon_state = "on[newmessagepriority]" /obj/machinery/network/requests_console/Initialize(mapload, d) . = ..() @@ -172,7 +172,7 @@ var/global/req_console_information = list() var/obj/machinery/network/requests_console/Console = console.holder if(istype(Console) && Console.department == department) Console.newmessagepriority = 0 - Console.icon_state = "req_comp0" + Console.icon_state = "on" Console.set_light(1) if(tempScreen == RCS_MAINMENU) reset_message() diff --git a/code/game/machinery/self_destruct.dm b/code/game/machinery/self_destruct.dm index 62ded8fe63e..6b516eb954f 100644 --- a/code/game/machinery/self_destruct.dm +++ b/code/game/machinery/self_destruct.dm @@ -68,7 +68,7 @@ update_icon() src.add_fingerprint(user) -/obj/machinery/self_destruct/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/machinery/self_destruct/handle_mouse_drop(atom/over, mob/user, params) if(over == user && cylinder) if(armed) to_chat(user, SPAN_WARNING("Disarm the cylinder first.")) diff --git a/code/game/machinery/self_destruct_storage.dm b/code/game/machinery/self_destruct_storage.dm index 623edd2b60d..09f2e613213 100644 --- a/code/game/machinery/self_destruct_storage.dm +++ b/code/game/machinery/self_destruct_storage.dm @@ -120,7 +120,7 @@ ..() -/obj/machinery/nuclear_cylinder_storage/handle_mouse_drop(atom/over, mob/user) +/obj/machinery/nuclear_cylinder_storage/handle_mouse_drop(atom/over, mob/user, params) if(over == user && open && !panel_open && length(cylinders)) var/cylinder = cylinders[1] user.visible_message( diff --git a/code/game/machinery/slide_projector.dm b/code/game/machinery/slide_projector.dm index 6a22a23f61e..96239c714a2 100644 --- a/code/game/machinery/slide_projector.dm +++ b/code/game/machinery/slide_projector.dm @@ -58,9 +58,9 @@ /obj/item/storage/slide_projector/proc/stop_projecting() if(projection) QDEL_NULL(projection) - events_repository.unregister(/decl/observ/moved, src, src, .proc/check_projections) + events_repository.unregister(/decl/observ/moved, src, src, PROC_REF(check_projections)) update_icon() - + /obj/item/storage/slide_projector/proc/project_at(turf/target) stop_projecting() if(!current_slide) @@ -72,19 +72,19 @@ break projection = new projection_type(target) projection.set_source(current_slide) - events_repository.register(/decl/observ/moved, src, src, .proc/check_projections) + events_repository.register(/decl/observ/moved, src, src, PROC_REF(check_projections)) update_icon() /obj/item/storage/slide_projector/attack_self(mob/user) interact(user) -/obj/item/storage/slide_projector/interact(mob/user) +/obj/item/storage/slide_projector/interact(mob/user) var/data = list() if(projection) data += "Disable projector" else data += "Projector inactive" - + var/table = list("", + "", + "", + "" + +/datum/character_comment/proc/deserialize_mood(var/decl/comment_mood/mood_input) + if(mood_input && !istype(mood_input)) + if(ispath(mood_input, /decl/comment_mood)) + mood_input = GET_DECL(mood_input) + else if(istext(mood_input)) + mood_input = lowertext(trim(mood_input)) + var/list/all_moods = decls_repository.get_decls_of_type(/decl/comment_mood) + for(var/mood_type in all_moods) + var/decl/comment_mood/check_mood = all_moods[mood_type] + if(lowertext(trim(check_mood.uid)) == mood_input) + mood_input = check_mood + break + if(!istype(mood_input)) + mood_input = null + else + mood_input = null + if(!mood_input) + mood_input = GET_DECL(/decl/comment_mood) + return mood_input + +/datum/character_comment/New(var/list/json_input) + + for(var/key in json_input) + try + vars[key] = json_input[key] + catch(var/exception/E) + log_error("Exception on deserializing character comment: [E]") + + // Moods are decls stored by uid, they need to be deserialized again after JSON load. + main_mood = deserialize_mood(main_mood) + if(!isnull(border_mood)) + border_mood = deserialize_mood(border_mood) + + // If we didn't have a deserialized value we must have been created today. + if(isnull(last_updated)) + last_updated = REALTIMEOFDAY + +/// Generate a list of fields to values for use in comment holder json serialization. +/datum/character_comment/proc/serialize_to_list() + . = list() + for(var/key in serialize_fields) + if(key in vars) + .[key] = vars[key] + else + log_error("Character comment attempting to serialize invalid var '[key]'") + if(istype(main_mood)) + .["main_mood"] = lowertext(main_mood.uid) + if(istype(border_mood)) + .["border_mood"] = lowertext(border_mood.uid) diff --git a/code/modules/character_info/character_info_interface.dm b/code/modules/character_info/character_info_interface.dm new file mode 100644 index 00000000000..cff728f3376 --- /dev/null +++ b/code/modules/character_info/character_info_interface.dm @@ -0,0 +1,236 @@ +#define COMMENT_CANDYSTRIPE_ONE "#343434" +#define COMMENT_CANDYSTRIPE_TWO "#454545" + +/client + var/viewing_character_info_as + var/show_comments_legend = FALSE + +/client/New() + ..() + if(get_config_value(/decl/config/toggle/allow_character_comments)) + verbs |= /client/proc/view_character_information + else + verbs -= /client/proc/view_character_information + +/client/proc/view_character_information(var/search_for as text) + + set name = "View Character Information" + set category = "OOC" + set src = usr + + // Technically we might want to show IC/OOC but the primary meat + // of the system is comments and I'm losing steam on the coding. + if(!get_config_value(/decl/config/toggle/allow_character_comments)) + to_chat(usr, SPAN_WARNING("Character information viewing is currently not enabled.")) + verbs -= /client/proc/view_character_information + return + + var/datum/character_information/comments + if(!viewing_character_info_as) + var/datum/character_information/my_comments = mob?.get_comments_record() + viewing_character_info_as = my_comments?.record_id || prefs?.comments_record_id + if(search_for) + comments = SScharacter_info.search_records(search_for) + else if(viewing_character_info_as) + comments = SScharacter_info.get_record(viewing_character_info_as) + else + to_chat(usr, SPAN_WARNING("Please either supply a search string, or set up a character slot to view your own information.")) + return + + if(islist(comments)) + if(length(comments) == 1) + comments = comments[1] + else + comments = input(usr, "Multiple matches. Which character do you wish to show?", "View Character Comments") as null|anything in comments + if(istype(comments)) + comments.display_to(usr) + else + to_chat(usr, SPAN_WARNING("There is no visible character information for that character.")) + +/datum/character_information/proc/display_to(var/mob/user) + + if(!user.client || !get_config_value(/decl/config/toggle/allow_character_comments)) + return + + if(ckey == user.ckey) + has_new_comments = FALSE + + var/list/dat = list("Viewing:[name]
    ") + var/datum/character_information/viewer = user.client.viewing_character_info_as && SScharacter_info.get_record(user.client.viewing_character_info_as, TRUE) + dat += "Viewing as:[viewer?.name || "Nobody"]
    " + dat += "

    IC Info

    " + dat += "
    [ic_info || "None supplied."]

    " + dat += "

    OOC Info

    " + dat += "
    [ooc_info || "None supplied."]

    " + dat += "

    Comments

    " + + if(!allow_comments) + dat += "
    This character page is not currently accepting or displaying comments.
    " + else + if(user.client?.show_comments_legend) + dat += "
    Hide legend
    " + dat += get_comment_mood_legend() + else + dat += "
    Show legend
    " + dat += "
    " + + var/list/other_comments = list() + var/datum/character_comment/my_comment + for(var/datum/character_comment/comment in comments) + if(viewer && comment.author_id == viewer.record_id) + my_comment = comment + else if(!comment.is_stale()) + other_comments += comment + + dat += "

    My Comment

    " + dat += "
    #SLIDESHOW") var/i = 1 for(var/obj/item/I in contents) @@ -115,7 +115,7 @@ return TOPIC_HANDLED set_slide(contents[index]) . = TOPIC_REFRESH - + if(. == TOPIC_REFRESH) interact(user) @@ -132,7 +132,7 @@ var/weakref/source /obj/effect/projection/on_update_icon() - add_filter("glow", 1, list("drop_shadow", color = COLOR_WHITE, size = 4, offset = 1,x = 0, y = 0)) + add_filter("glow", 1, list(type = "drop_shadow", color = COLOR_WHITE, size = 4, offset = 1,x = 0, y = 0)) project_icon() /obj/effect/projection/proc/project_icon() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 5bf12d2ff78..48bcdae71f1 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -8,7 +8,7 @@ desc = "This heater is guaranteed not to set anything, or anyone, on fire." required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE movable_flags = MOVABLE_FLAG_WHEELED clicksound = "switch" diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index fa3122725da..ef38a7cb371 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -18,7 +18,7 @@ anchored = TRUE density = FALSE idle_power_usage = 10 - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) diff --git a/code/game/machinery/status_light.dm b/code/game/machinery/status_light.dm index 6f78761dd92..1827bfbd7bd 100644 --- a/code/game/machinery/status_light.dm +++ b/code/game/machinery/status_light.dm @@ -3,7 +3,7 @@ desc = "A status indicator for a combustion chamber, based on temperature." icon = 'icons/obj/machines/door_timer.dmi' icon_state = "doortimer-p" - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED var/frequency = 1441 var/alert_temperature = 10000 diff --git a/code/game/machinery/suit_cycler.dm b/code/game/machinery/suit_cycler.dm index 99d99f22db5..7edd6cb3a2a 100644 --- a/code/game/machinery/suit_cycler.dm +++ b/code/game/machinery/suit_cycler.dm @@ -112,21 +112,21 @@ events_repository.unregister(/decl/observ/destroyed, suit, src) suit = new_suit if(istype(suit)) - events_repository.register(/decl/observ/destroyed, suit, src, /obj/machinery/suit_cycler/proc/loaded_item_destroyed) + events_repository.register(/decl/observ/destroyed, suit, src, TYPE_PROC_REF(/obj/machinery/suit_cycler, loaded_item_destroyed)) /obj/machinery/suit_cycler/proc/set_helmet(obj/item/new_helmet) if(istype(helmet)) events_repository.unregister(/decl/observ/destroyed, helmet, src) helmet = new_helmet if(istype(helmet)) - events_repository.register(/decl/observ/destroyed, helmet, src, /obj/machinery/suit_cycler/proc/loaded_item_destroyed) + events_repository.register(/decl/observ/destroyed, helmet, src, TYPE_PROC_REF(/obj/machinery/suit_cycler, loaded_item_destroyed)) /obj/machinery/suit_cycler/proc/set_boots(obj/item/new_boots) if(istype(boots)) events_repository.unregister(/decl/observ/destroyed, boots, src) boots = new_boots if(istype(boots)) - events_repository.register(/decl/observ/destroyed, boots, src, /obj/machinery/suit_cycler/proc/loaded_item_destroyed) + events_repository.register(/decl/observ/destroyed, boots, src, TYPE_PROC_REF(/obj/machinery/suit_cycler, loaded_item_destroyed)) /obj/machinery/suit_cycler/Initialize(mapload, d=0, populate_parts = TRUE) . = ..() @@ -158,7 +158,7 @@ DROP_NULL(boots) return ..() -/obj/machinery/suit_cycler/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/machinery/suit_cycler/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && ismob(dropping) && try_move_inside(dropping, user)) return TRUE @@ -399,19 +399,19 @@ if(radiation_level > 2) helmet.decontaminate() if(radiation_level > 1) - helmet.clean_blood() + helmet.clean() if(suit) if(radiation_level > 2) suit.decontaminate() if(radiation_level > 1) - suit.clean_blood() + suit.clean() if(boots) if(radiation_level > 2) boots.decontaminate() if(radiation_level > 1) - boots.clean_blood() + boots.clean() update_icon() updateUsrDialog() @@ -441,7 +441,7 @@ if(occupant) if(prob(radiation_level*2) && occupant.can_feel_pain()) - occupant.emote("scream") + occupant.emote(/decl/emote/audible/scream) if(radiation_level > 2) occupant.take_organ_damage(0, radiation_level*2 + rand(1,3)) if(radiation_level > 1) diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 8bac21cabd5..b9a53e07e6e 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -109,7 +109,7 @@ if(world.time >= target_drop_time) deactivate(permanent = TRUE) command_announcement.Announce("Nyx Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage") - addtimer(CALLBACK(src, .proc/drop_cargo), rand(20 SECONDS, 30 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(drop_cargo)), rand(20 SECONDS, 30 SECONDS)) /obj/structure/supply_beacon/proc/drop_cargo(var/drop_x, var/drop_y, var/drop_z) if(!QDELETED(src) && isturf(loc)) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 560a5b54476..1b3302440e9 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -60,7 +60,7 @@ var/global/list/singularity_beacons = list() if(prob(50)) temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." src.updateUsrDialog() - addtimer(CALLBACK(src, .proc/selfdestruct), rand(5, 20) SECONDS) + addtimer(CALLBACK(src, PROC_REF(selfdestruct)), rand(5, 20) SECONDS) return if(ishuman(M)) var/mob/living/carbon/human/N = M @@ -76,7 +76,7 @@ var/global/list/singularity_beacons = list() /obj/machinery/syndicate_beacon/proc/selfdestruct() selfdestructing = 1 - INVOKE_ASYNC(GLOBAL_PROC, .proc/explosion, src.loc, 1, rand(1, 3), rand(3, 8), 10) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), src.loc, 1, rand(1, 3), rand(3, 8), 10) //////////////////////////////////////// //Singularity beacon diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index da6f0f344e5..8300860c5e0 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -146,14 +146,14 @@ /obj/machinery/computer/teleporter/proc/clear_target() if(src.locked) - events_repository.unregister(/decl/observ/destroyed, locked, src, .proc/target_lost) + events_repository.unregister(/decl/observ/destroyed, locked, src, PROC_REF(target_lost)) src.locked = null if(station && station.engaged) station.disengage() /obj/machinery/computer/teleporter/proc/set_target(var/obj/O) src.locked = O - events_repository.register(/decl/observ/destroyed, locked, src, .proc/target_lost) + events_repository.register(/decl/observ/destroyed, locked, src, PROC_REF(target_lost)) /obj/machinery/computer/teleporter/Destroy() clear_target() diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 53debb1bb7a..86debb65600 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -14,7 +14,8 @@ anchored = TRUE density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' + var/enabled = 0 var/lethal = 0 var/locked = 1 @@ -202,7 +203,7 @@ else if (enabled) if (lethal) icon_state = "control_kill" - set_light(1.5, 1,"#990000") + set_light(1.5, 1,COLOR_BLOOD_RED) else icon_state = "control_stun" set_light(1.5, 1,"#ff9900") diff --git a/code/game/machinery/turrets/_turrets.dm b/code/game/machinery/turrets/_turrets.dm index a0e054388b4..aa46f11a038 100644 --- a/code/game/machinery/turrets/_turrets.dm +++ b/code/game/machinery/turrets/_turrets.dm @@ -12,14 +12,15 @@ idle_power_usage = 500 active_power_usage = 10 KILOWATTS interact_offline = TRUE - transform_animate_time = 0.2 SECONDS uncreated_component_parts = list(/obj/item/stock_parts/power/apc) + maximum_component_parts = list(/obj/item/stock_parts/ammo_box = 1, /obj/item/stock_parts = 10) + abstract_type = /obj/machinery/turret + // Visuals. var/image/turret_stand = null var/image/turret_ray = null var/ray_color = "#ffffffff" // Color of the ray, changed by the FSM when switching states. - var/image/transverse_left // Images for displaying the range of the turret's transverse var/image/transverse_right @@ -125,13 +126,11 @@ /obj/machinery/turret/Process() if(istype(installed_gun, /obj/item/gun/energy)) var/obj/item/gun/energy/energy_gun = installed_gun - if(energy_gun.power_supply) - var/obj/item/cell/power_cell = energy_gun.power_supply - if(!power_cell.fully_charged()) - power_cell.give(active_power_usage*CELLRATE) - update_use_power(POWER_USE_ACTIVE) - return - + var/obj/item/cell/power_supply = energy_gun.get_cell() + if(power_supply && !power_supply.fully_charged()) + power_supply.give(active_power_usage*CELLRATE) + update_use_power(POWER_USE_ACTIVE) + return update_use_power(POWER_USE_IDLE) /obj/machinery/turret/attackby(obj/item/I, mob/user) @@ -173,7 +172,7 @@ if(installed_gun && is_valid_target(target?.resolve())) var/atom/resolved_target = target.resolve() if(istype(resolved_target)) - addtimer(CALLBACK(src, .proc/fire_weapon, resolved_target), 0) + addtimer(CALLBACK(src, PROC_REF(fire_weapon), resolved_target), 0) else target = null state_machine.evaluate() @@ -381,7 +380,7 @@ to_chat(user, SPAN_WARNING("You short out \the [src]'s threat assessment circuits.")) visible_message("\The [src] hums oddly...") enabled = FALSE - addtimer(CALLBACK(src, .proc/emagged_targeting), 6 SECONDS) + addtimer(CALLBACK(src, PROC_REF(emagged_targeting)), 6 SECONDS) state_machine.evaluate() /obj/machinery/turret/proc/emagged_targeting() diff --git a/code/game/machinery/turrets/network_turret.dm b/code/game/machinery/turrets/network_turret.dm index 354aabfa800..39845a09e53 100644 --- a/code/game/machinery/turrets/network_turret.dm +++ b/code/game/machinery/turrets/network_turret.dm @@ -1,25 +1,22 @@ #define MAX_TURRET_LOGS 50 // Standard buildable model of turret. /obj/machinery/turret/network - name = "sentry turret" - desc = "An automatic turret capable of identifying and dispatching targets using a mounted firearm." - - idle_power_usage = 5 KILOWATTS + name = "sentry turret" + desc = "An automatic turret capable of identifying and dispatching targets using a mounted firearm." + idle_power_usage = 5 KILOWATTS active_power_usage = 5 KILOWATTS // Determines how fast energy weapons can be recharged, so highly values are better. - - reloading_speed = 10 - - installed_gun = null - gun_looting_prob = 100 - - traverse = 360 - turning_rate = 270 - - base_type = /obj/machinery/turret/network - construct_state = /decl/machine_construction/default/panel_closed - stat_immune = NOSCREEN | NOINPUT - - hostility = /decl/hostility/turret/network + reloading_speed = 10 + gun_looting_prob = 100 + traverse = 360 + turning_rate = 180 + base_type = /obj/machinery/turret/network/buildable + construct_state = /decl/machine_construction/default/panel_closed + stat_immune = NOSCREEN | NOINPUT + hostility = /decl/hostility/turret/network + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc/buildable, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) // Targeting modes. var/check_access = FALSE @@ -30,6 +27,10 @@ var/list/logs +/obj/machinery/turret/network/buildable + uncreated_component_parts = null + installed_gun = null + /obj/machinery/turret/network/Initialize() . = ..() set_extension(src, /datum/extension/network_device/sentry_turret) @@ -143,8 +144,8 @@ /obj/item/stock_parts/circuitboard/sentry_turret name = "circuitboard (sentry turret)" board_type = "machine" - build_path = /obj/machinery/turret/network - origin_tech = "{'programming':5,'combat':5,'engineering':4}" + build_path = /obj/machinery/turret/network/buildable + origin_tech = @'{"programming":5,"combat":5,"engineering":4}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/scanning_module = 1, diff --git a/code/game/machinery/turrets/turret_ammo.dm b/code/game/machinery/turrets/turret_ammo.dm index c12ec98d75d..1e2405db7b9 100644 --- a/code/game/machinery/turrets/turret_ammo.dm +++ b/code/game/machinery/turrets/turret_ammo.dm @@ -3,13 +3,13 @@ desc = "A high capacity ammunition supply designed to mechanically reload magazines with bullets." icon = 'icons/obj/items/storage/ammobox.dmi' icon_state = "ammo" - origin_tech = "{'engineering':3,'combat':4}" + origin_tech = @'{"engineering":3,"combat":4}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/metal/brass = MATTER_AMOUNT_REINFORCEMENT, ) var/list/stored_ammo = list() - var/stored_caliber = null + var/tmp/stored_caliber = null var/max_ammo = 50 diff --git a/code/game/machinery/turrets/turret_fsm.dm b/code/game/machinery/turrets/turret_fsm.dm index d545440d881..084c04aa741 100644 --- a/code/game/machinery/turrets/turret_fsm.dm +++ b/code/game/machinery/turrets/turret_fsm.dm @@ -10,6 +10,7 @@ var/timer_wait = TURRET_WAIT /decl/state/turret/entered_state(obj/machinery/turret/turret) + log_debug("[turret] entered [type] state") turret.ray_color = src.ray_color turret.update_icon() if(switched_to_sound) @@ -18,6 +19,7 @@ turret.timer_id = addtimer(CALLBACK(turret, timer_proc), timer_wait, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_LOOP|TIMER_OVERRIDE) /decl/state/turret/exited_state(obj/machinery/turret/turret) + log_debug("[turret] exited [type] state") if(timer_proc && turret.timer_id) deltimer(turret.timer_id) turret.timer_id = null diff --git a/code/game/machinery/vending/_vending.dm b/code/game/machinery/vending/_vending.dm index ad1fb149d8a..e10d32215be 100644 --- a/code/game/machinery/vending/_vending.dm +++ b/code/game/machinery/vending/_vending.dm @@ -70,7 +70,7 @@ var/scan_id = 1 /obj/machinery/vending/Initialize(mapload, d=0, populate_parts = TRUE) - . = ..() + ..() if(isnull(markup)) markup = 1.1 + (rand() * 0.4) if(!ispath(vendor_currency, /decl/currency)) @@ -87,6 +87,11 @@ ads_list += splittext(product_ads, ";") build_inventory(populate_parts) + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/vending/LateInitialize() + ..() + update_icon() /** * Build produdct_records from the products lists @@ -96,9 +101,6 @@ * product_records. */ -/obj/machinery/vending/proc/get_product_name(var/entry) - return - /obj/machinery/vending/proc/build_inventory(populate_parts = FALSE) var/list/all_products = list( list(products, CAT_NORMAL), @@ -107,7 +109,7 @@ for(var/current_list in all_products) var/category = current_list[2] for(var/entry in current_list[1]) - var/datum/stored_items/vending_products/product = new(src, entry, get_product_name(entry)) + var/datum/stored_items/vending_products/product = new(src, entry) product.price = atom_info_repository.get_combined_worth_for(entry) * markup product.category = category if(product && populate_parts) @@ -188,7 +190,7 @@ . = ..() SSnano.update_uis(src) -/obj/machinery/vending/receive_mouse_drop(atom/dropping, var/mob/user) +/obj/machinery/vending/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && dropping.loc == user && attempt_to_stock(dropping, user)) return TRUE @@ -360,7 +362,7 @@ use_power_oneoff(vend_power_usage) //actuators and stuff if (icon_vend) //Show the vending animation if needed flick(icon_vend,src) - addtimer(CALLBACK(src, /obj/machinery/vending/proc/finish_vending, R), vend_delay) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/vending, finish_vending), R), vend_delay) /obj/machinery/vending/proc/do_vending_reply() set waitfor = FALSE @@ -437,7 +439,7 @@ return anchored && ..() /obj/machinery/vending/on_update_icon() - overlays.Cut() + cut_overlays() if(stat & BROKEN) icon_state = "[initial(icon_state)]-broken" else if( !(stat & NOPOWER) ) @@ -446,7 +448,7 @@ spawn(rand(0, 15)) icon_state = "[initial(icon_state)]-off" if(panel_open) - overlays += image(icon, "[initial(icon_state)]-panel") + add_overlay("[initial(icon_state)]-panel") //Oh no we're malfunctioning! Dump out some product and break. /obj/machinery/vending/proc/malfunction() diff --git a/code/game/machinery/vending/actors.dm b/code/game/machinery/vending/actors.dm index c7d75995b54..4808085a60c 100644 --- a/code/game/machinery/vending/actors.dm +++ b/code/game/machinery/vending/actors.dm @@ -19,7 +19,7 @@ /obj/machinery/vending/props/on_update_icon() ..() if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-overlay") + add_overlay("[initial(icon_state)]-overlay") //FOR ACTORS GUILD - Containers /obj/machinery/vending/containers diff --git a/code/game/machinery/vending/cigs.dm b/code/game/machinery/vending/cigs.dm index d6e3e0382e2..9395c1d076e 100644 --- a/code/game/machinery/vending/cigs.dm +++ b/code/game/machinery/vending/cigs.dm @@ -32,15 +32,15 @@ /obj/item/storage/chewables/rollable/bad = 2, /obj/item/storage/chewables/rollable/generic = 2, /obj/item/storage/chewables/rollable/fine = 2, - /obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/luckystars = 2, - /obj/item/storage/fancy/cigarettes/jerichos = 2, - /obj/item/storage/fancy/cigarettes/menthols = 2, - /obj/item/storage/fancy/cigarettes/carcinomas = 2, - /obj/item/storage/fancy/cigarettes/professionals = 2, - /obj/item/storage/fancy/cigarettes/cigarello = 2, - /obj/item/storage/fancy/cigarettes/cigarello/mint = 2, - /obj/item/storage/fancy/cigarettes/cigarello/variety = 2, + /obj/item/storage/box/fancy/cigarettes = 5, + /obj/item/storage/box/fancy/cigarettes/luckystars = 2, + /obj/item/storage/box/fancy/cigarettes/jerichos = 2, + /obj/item/storage/box/fancy/cigarettes/menthols = 2, + /obj/item/storage/box/fancy/cigarettes/carcinomas = 2, + /obj/item/storage/box/fancy/cigarettes/professionals = 2, + /obj/item/storage/box/fancy/cigarettes/cigarello = 2, + /obj/item/storage/box/fancy/cigarettes/cigarello/mint = 2, + /obj/item/storage/box/fancy/cigarettes/cigarello/variety = 2, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/random = 4, /obj/item/storage/chewables/tobacco = 2, @@ -62,6 +62,6 @@ contraband = list( /obj/item/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/rolled/sausage = 3, - /obj/item/storage/fancy/cigar = 5, - /obj/item/storage/fancy/cigarettes/killthroat = 5 + /obj/item/storage/box/fancy/cigar = 5, + /obj/item/storage/box/fancy/cigarettes/killthroat = 5 ) diff --git a/code/game/machinery/vending/engineering.dm b/code/game/machinery/vending/engineering.dm index c2359cfc264..e6c2e7f775b 100644 --- a/code/game/machinery/vending/engineering.dm +++ b/code/game/machinery/vending/engineering.dm @@ -115,14 +115,14 @@ vend_delay = 21 base_type = /obj/machinery/vending/materials products = list( - /obj/item/stack/material/sheet/mapped/steel/fifty = 3, - /obj/item/stack/material/panel/mapped/plastic/fifty = 4, - /obj/item/stack/material/shiny/mapped/aluminium/fifty = 3, - /obj/item/stack/material/reinforced/mapped/plasteel/ten = 4, - /obj/item/stack/material/ingot/mapped/copper/fifty = 4, - /obj/item/stack/material/pane/mapped/glass/fifty = 4, - /obj/item/stack/material/reinforced/mapped/fiberglass/fifty = 4 + /obj/item/stack/material/sheet/mapped/steel/fifty = 3, + /obj/item/stack/material/panel/mapped/plastic/fifty = 4, + /obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty = 3, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten = 4, + /obj/item/stack/material/ingot/mapped/copper/fifty = 4, + /obj/item/stack/material/pane/mapped/glass/fifty = 4, + /obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty = 4 ) contraband = list( - /obj/item/stack/material/reinforced/mapped/ocp/ten = 3 + /obj/item/stack/material/sheet/reinforced/mapped/ocp/ten = 3 ) diff --git a/code/game/machinery/vending/food.dm b/code/game/machinery/vending/food.dm index 236323385a1..7b720ddec03 100644 --- a/code/game/machinery/vending/food.dm +++ b/code/game/machinery/vending/food.dm @@ -26,7 +26,7 @@ /obj/item/chems/food/syndicake = 6 ) -//a food variant of the boda machine - It carries slavic themed foods.. Mostly beer snacks +//a food variant of the boda machine - It carries slavic themed foods. Mostly beer snacks /obj/machinery/vending/snix name = "Snix" desc = "An old snack vending machine, how did it get here? And are the snacks still good?" @@ -51,7 +51,7 @@ /obj/machinery/vending/snix/on_update_icon() ..() if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-fan") + add_overlay("[initial(icon_state)]-fan") /obj/machinery/vending/sol name = "Mars-Mart" @@ -93,7 +93,7 @@ /obj/machinery/vending/weeb/on_update_icon() ..() if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-fan") + add_overlay("[initial(icon_state)]-fan") /obj/machinery/vending/hotfood name = "Hot Foods" @@ -115,7 +115,7 @@ /obj/machinery/vending/hotfood/on_update_icon() ..() if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-heater") + add_overlay("[initial(icon_state)]-heater") /obj/machinery/vending/boozeomat name = "Booze-O-Mat" @@ -209,7 +209,7 @@ if(stat & BROKEN && prob(20)) icon_state = "[initial(icon_state)]-hellfire" else if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-screen") + add_overlay("[initial(icon_state)]-screen") /obj/machinery/vending/cola name = "Robust Softdrinks" @@ -267,7 +267,7 @@ /obj/machinery/vending/fitness/on_update_icon() ..() if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-overlay") + add_overlay("[initial(icon_state)]-overlay") /obj/machinery/vending/sovietsoda name = "BODA" @@ -286,3 +286,62 @@ ) contraband = list(/obj/item/chems/drinks/bottle/space_up = 8) // TODO Russian cola can idle_power_usage = 211 + +/obj/machinery/vending/mredispenser + name = "\improper MRE dispenser" + desc = "A Vending machine filled with MRE's." + icon_state = "mrevend" + icon_deny = "mrevend-deny" + icon_vend = "mrevend-vend" + base_type = /obj/machinery/vending/mredispenser + idle_power_usage = 200 + product_slogans = {"\ + STARFIGHTER TESTED! STARFIGHTER RECOMMENDED! STARFIGHTER APPROVED!;\ + YOU ARE NOT ALLOWED A JELLY DOUGHNUT!;\ + YOU DON'T WANT TO DIE HUNGRY, SOLDIER!\ + "} + product_ads = {"\ + Everything the body needs!;\ + Now transfat free!;\ + Vegan options are available.;\ + Rated for all known species*!\ + "} + products = list( + /obj/item/storage/mre = 10, + /obj/item/storage/mre/menu2 = 10, + /obj/item/storage/mre/menu3 = 10, + /obj/item/storage/mre/menu4 = 10, + /obj/item/storage/mre/menu5 = 10, + /obj/item/storage/mre/menu6 = 10, + /obj/item/storage/mre/menu7 = 10, + /obj/item/storage/mre/menu8 = 10, + /obj/item/storage/mre/menu9 = 10, + /obj/item/storage/mre/menu10 = 10 + ) + contraband = list( + /obj/item/storage/mre/menu11 = 15, + /obj/item/chems/food/liquidfood = 15 + ) + +/obj/machinery/vending/soda + name = "\improper Radical Renard" + desc = "A softdrink vendor promoted by Radical Renard." + icon_state = "Soda_Machine" + icon_vend = "Soda_Machine-vend" + icon_deny = "Soda_Machine-deny" + base_type = /obj/machinery/vending/soda + idle_power_usage = 200 + products = list( + /obj/item/chems/drinks/cans/cola_diet = 8, + /obj/item/chems/drinks/cans/rootbeer = 8, + /obj/item/chems/drinks/cans/cola_apple = 8, + /obj/item/chems/drinks/cans/cola_orange = 8, + /obj/item/chems/drinks/cans/waterbottle = 8, + /obj/item/chems/drinks/cans/cola_grape = 8, + /obj/item/chems/drinks/cans/cola_lemonlime = 8, + /obj/item/chems/drinks/cans/cola_strawberry = 8, + /obj/item/chems/drinks/cans/cola_pork = 8, + ) + contraband = list( + /obj/item/chems/drinks/cans/space_mountain_wind = 8 + ) \ No newline at end of file diff --git a/code/game/machinery/vending/medical.dm b/code/game/machinery/vending/medical.dm index d458bf2d325..e5dc331e30e 100644 --- a/code/game/machinery/vending/medical.dm +++ b/code/game/machinery/vending/medical.dm @@ -54,7 +54,7 @@ /obj/item/storage/med_pouch/toxin ) contraband = list(/obj/item/chems/syringe/antitoxin = 4,/obj/item/chems/syringe/antibiotic = 4,/obj/item/chems/pill/bromide = 1) - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':24}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-24}, "SOUTH":{"y":24}, "EAST":{"x":-24}, "WEST":{"x":24}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED /obj/machinery/vending/wallmed2 @@ -67,7 +67,7 @@ density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude base_type = /obj/machinery/vending/wallmed2 products = list( - /obj/item/chems/hypospray/autoinjector = 5, + /obj/item/chems/hypospray/autoinjector/stabilizer = 5, /obj/item/stack/medical/bruise_pack = 4, /obj/item/stack/medical/ointment = 4, /obj/item/storage/med_pouch/trauma, @@ -76,6 +76,9 @@ /obj/item/storage/med_pouch/toxin, /obj/item/storage/med_pouch/radiation ) - contraband = list(/obj/item/chems/pill/bromide = 3, /obj/item/chems/hypospray/autoinjector/pain = 2) - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':24}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + contraband = list( + /obj/item/chems/pill/bromide = 3, + /obj/item/chems/hypospray/autoinjector/pain = 2 + ) + directional_offset = @'{"NORTH":{"y":-24}, "SOUTH":{"y":24}, "EAST":{"x":-24}, "WEST":{"x":24}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED diff --git a/code/game/machinery/vending/misc.dm b/code/game/machinery/vending/misc.dm index c3cef8d3b58..613a8629a61 100644 --- a/code/game/machinery/vending/misc.dm +++ b/code/game/machinery/vending/misc.dm @@ -26,7 +26,9 @@ markup = 0 base_type = /obj/machinery/vending/dinnerware products = list( - /obj/item/chems/glass/beaker/bowl =2, + /obj/item/plate = 10, + /obj/item/plate/platter = 5, + /obj/item/chems/glass/beaker/bowl = 2, /obj/item/storage/tray/metal/aluminium = 8, /obj/item/knife/kitchen = 3, /obj/item/kitchen/rollingpin = 2, @@ -57,11 +59,10 @@ product_ads = "Impress the love of your life!;Don't look poor, look rich!;100% authentic designers!;All sales are final!;Lowest prices guaranteed!" products = list( /obj/item/mirror = 8, - /obj/item/haircomb = 8, + /obj/item/grooming/comb = 8, /obj/item/clothing/glasses/eyepatch/monocle = 5, /obj/item/clothing/glasses/sunglasses = 5, - /obj/item/lipstick = 3, - /obj/random/lipstick = 3, + /obj/random/makeup = 3, /obj/item/storage/wallet/poly = 2 ) contraband = list( @@ -120,8 +121,9 @@ products = list( /obj/item/soap = 12, /obj/item/mirror = 8, - /obj/item/haircomb/random = 8, - /obj/item/haircomb/brush = 4, + /obj/item/grooming/comb/colorable/random = 8, + /obj/item/grooming/brush/colorable/random = 4, + /obj/item/grooming/file = 1, /obj/item/towel/random = 6, /obj/item/chems/spray/cleaner/deodorant = 5 ) diff --git a/code/game/machinery/vending/security.dm b/code/game/machinery/vending/security.dm index 5298fab79bb..eacfe377892 100644 --- a/code/game/machinery/vending/security.dm +++ b/code/game/machinery/vending/security.dm @@ -18,4 +18,4 @@ /obj/item/chems/food/donut = 12, /obj/item/storage/box/evidence = 6 ) - contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/storage/box/donut = 2) + contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/storage/box/fancy/donut = 2) diff --git a/code/game/machinery/vending_deconstruction.dm b/code/game/machinery/vending_deconstruction.dm index 55ad2206aa0..dce7ac35a27 100644 --- a/code/game/machinery/vending_deconstruction.dm +++ b/code/game/machinery/vending_deconstruction.dm @@ -20,9 +20,9 @@ /obj/structure/vending_refill/get_mechanics_info() return "Drag to a vendor to restock. Generally can not be opened." -/obj/structure/vending_refill/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/structure/vending_refill/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/machinery/vending)) - var/obj/machinery/vending/vendor = over + var/obj/machinery/vending/vendor = over var/target_type = vendor.base_type || vendor.type if(ispath(expected_type, target_type)) for(var/datum/stored_items/R in product_records) diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index 7378726057a..3eff63edf62 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -64,7 +64,7 @@ if(beep && victim && victim.get_pulse()) playsound(src, 'sound/machines/quiet_beep.ogg', 40) -/obj/machinery/vitals_monitor/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/machinery/vitals_monitor/handle_mouse_drop(atom/over, mob/user, params) if(ishuman(over)) if(victim) victim = null diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index b9770839ff0..eb3d5510acd 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -40,16 +40,16 @@ if (!(ndir in global.cardinal)) return - var/turf/loc = get_turf(usr) - if (!istype(loc, /turf/simulated/floor)) + var/turf/my_turf = get_turf(usr) + if (!istype(my_turf) || !my_turf.simulated || !my_turf.is_floor()) to_chat(usr, "\The [src] cannot be placed on this spot.") return - if(gotwallitem(loc, get_dir(usr,on_wall))) // Use actual dir, not the new machine's dir + if(gotwallitem(my_turf, get_dir(usr,on_wall))) // Use actual dir, not the new machine's dir to_chat(usr, "There's already an item on this wall!") return - var/obj/machinery/machine = new build_machine_type(loc, ndir, fully_construct) + var/obj/machinery/machine = new build_machine_type(my_turf, ndir, fully_construct) modify_positioning(machine, ndir, click_params) if(istype(machine) && machine.construct_state && !fully_construct) machine.construct_state.post_construct(machine) @@ -208,8 +208,8 @@ /obj/item/frame/stock_offset/request_console name = "request console frame" desc = "Used for building request consoles." - icon = 'icons/obj/terminals.dmi' - icon_state = "req_comp0" + icon = 'icons/obj/machines/wall/request_console.dmi' + icon_state = "frame" build_machine_type = /obj/machinery/network/requests_console /obj/item/frame/stock_offset/request_console/kit @@ -303,7 +303,7 @@ /obj/item/frame/button/airlock_controller/kit/warn_not_setup(mob/user) to_chat(user, SPAN_WARNING("First, use a multitool on the kit to properly setup the controller's software!")) -//Let them also hit it with a circuitboard if they so wish. But multitool is better when you don't want to print one for nothing.. +//Let them also hit it with a circuitboard if they so wish. But multitool is better when you don't want to print one for nothing. /obj/item/frame/button/airlock_controller/kit/attackby(obj/item/W, mob/user) if(!IS_MULTITOOL(W)) return ..() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a36d4b5ab5b..2f00796334a 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -200,7 +200,7 @@ state |= WASHER_STATE_BLOODY update_use_power(POWER_USE_ACTIVE) - addtimer(CALLBACK(src, /obj/machinery/washing_machine/proc/wash), 20 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/washing_machine, wash)), 20 SECONDS) return TRUE @@ -255,7 +255,7 @@ /obj/machinery/washing_machine/on_update_icon() icon_state = "wm_[state][panel_open]" -/obj/machinery/washing_machine/clean_blood() +/obj/machinery/washing_machine/clean(clean_forensics = TRUE) . = ..() state &= ~WASHER_STATE_BLOODY update_icon() diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm index c084c530baf..2c961d0b5e5 100644 --- a/code/game/movietitles.dm +++ b/code/game/movietitles.dm @@ -1,8 +1,3 @@ -#define CREDIT_ROLL_SPEED 185 -#define CREDIT_SPAWN_SPEED 20 -#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size) -#define CREDIT_EASE_DURATION 22 - var/global/list/end_titles /client @@ -17,8 +12,6 @@ var/global/list/end_titles if(!global.end_titles) global.end_titles = generate_titles() - LAZYINITLIST(credits) - if(mob) mob.overlay_fullscreen("fishbed",/obj/screen/fullscreen/fishbed) mob.overlay_fullscreen("fadeout",/obj/screen/fullscreen/fadeout) @@ -30,15 +23,14 @@ var/global/list/end_titles sound_to(mob, sound(pick(global.using_map.credit_sound), wait = 0, volume = 40, channel = sound_channels.lobby_channel)) else if(get_preference_value(/datum/client_preference/play_admin_midis) == PREF_YES) sound_to(mob, sound(global.end_credits_song, wait = 0, volume = 40, channel = sound_channels.lobby_channel)) - sleep(50) - var/list/_credits = credits + + sleep(5 SECONDS) verbs += /client/proc/ClearCredits - for(var/I in global.end_titles) - if(!credits) - return - var/obj/screen/credit/T = new(null, I, src) - _credits += T - T.rollem() + for(var/credit in global.end_titles) + var/obj/screen/credit/credit_obj = new(null, mob) + LAZYADD(credits, credit_obj) + credit_obj.maptext = {"
    [credit]
    "} + credit_obj.rollem() sleep(CREDIT_SPAWN_SPEED) sleep(CREDIT_ROLL_SPEED - CREDIT_SPAWN_SPEED) @@ -54,44 +46,6 @@ var/global/list/end_titles mob.clear_fullscreen("fadeout") sound_to(mob, sound(null, channel = sound_channels.lobby_channel)) -/obj/screen/credit - icon_state = "blank" - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - alpha = 0 - screen_loc = "CENTER-7,BOTTOM+1" - plane = HUD_PLANE - layer = HUD_ABOVE_ITEM_LAYER - var/client/parent - var/matrix/target - -/obj/screen/credit/Initialize(mapload, credited, client/P) - . = ..() - parent = P - maptext = {"
    [credited]
    "} - maptext_height = world.icon_size * 2 - maptext_width = world.icon_size * 14 - -/obj/screen/credit/proc/rollem() - var/matrix/M = matrix(transform) - M.Translate(0, CREDIT_ANIMATE_HEIGHT) - animate(src, transform = M, time = CREDIT_ROLL_SPEED) - target = M - animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL) - spawn(CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION) - if(!QDELETED(src)) - animate(src, alpha = 0, transform = target, time = CREDIT_EASE_DURATION) - sleep(CREDIT_EASE_DURATION) - qdel(src) - parent.screen += src - -/obj/screen/credit/Destroy() - var/client/P = parent - if(istype(P)) - P.screen -= src - LAZYREMOVE(P.credits, src) - parent = null - return ..() - /proc/generate_titles() var/list/titles = list() var/list/cast = list() diff --git a/code/game/objects/alien_props.dm b/code/game/objects/alien_props.dm index 0c78194ae61..b6dca18e783 100644 --- a/code/game/objects/alien_props.dm +++ b/code/game/objects/alien_props.dm @@ -7,14 +7,14 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "unknown1" maxcharge = 5000 - origin_tech = "{'powerstorage':7}" - var/static/base_icon + origin_tech = @'{"powerstorage":7}' + var/base_icon_state /obj/item/cell/alien/on_update_icon() . = ..() - if(!base_icon) - base_icon = pick("instrument", "unknown1", "unknown3", "unknown4") - icon_state = base_icon + if(!base_icon_state) + base_icon_state = pick("instrument", "unknown1", "unknown3", "unknown4") + icon_state = base_icon_state // APC #define APC_UPDATE_ALLGOOD 128 diff --git a/code/game/objects/auras/aura.dm b/code/game/objects/auras/aura.dm index 2a48b46e459..8d1d35a0680 100644 --- a/code/game/objects/auras/aura.dm +++ b/code/game/objects/auras/aura.dm @@ -34,9 +34,10 @@ They should also be used for when you want to effect the ENTIRE mob, like having /obj/aura/hitby() SHOULD_CALL_PARENT(FALSE) + return FALSE /obj/aura/debug - var/returning = 0 + var/returning = FALSE /obj/aura/debug/attackby(var/obj/item/I, var/mob/user) log_debug("Attackby for \ref[src]: [I], [user]") diff --git a/code/game/objects/auras/blueforge_aura.dm b/code/game/objects/auras/blueforge_aura.dm index cc7a7d6118c..1a1800acbc4 100644 --- a/code/game/objects/auras/blueforge_aura.dm +++ b/code/game/objects/auras/blueforge_aura.dm @@ -1,7 +1,7 @@ /obj/aura/blueforge_aura name = "Blueforge Aura" - icon = 'icons/mob/human_races/species/eyes.dmi' - icon_state = "eyes_blueforged_s" + icon = 'icons/mob/human_races/species/blueforged/eyes.dmi' + icon_state = "eyes" layer = MOB_LAYER /obj/aura/blueforge_aura/life_tick() diff --git a/code/game/objects/auras/regenerating_aura.dm b/code/game/objects/auras/regenerating_aura.dm index 3ed0079b4fe..96707e87154 100644 --- a/code/game/objects/auras/regenerating_aura.dm +++ b/code/game/objects/auras/regenerating_aura.dm @@ -5,8 +5,8 @@ var/tox_mult = 1 /obj/aura/regenerating/life_tick() - user.adjustBruteLoss(-brute_mult) - user.adjustFireLoss(-fire_mult) + user.adjustBruteLoss(-brute_mult, do_update_health = FALSE) + user.adjustFireLoss(-fire_mult, do_update_health = FALSE) user.adjustToxLoss(-tox_mult) /obj/aura/regenerating/human @@ -35,15 +35,22 @@ low_nut_warning() return 0 + var/update_health = FALSE + var/organ_regen = get_config_value(/decl/config/num/health_organ_regeneration_multiplier) if(brute_mult && H.getBruteLoss()) - H.adjustBruteLoss(-brute_mult * config.organ_regeneration_multiplier) + update_health = TRUE + H.adjustBruteLoss(-brute_mult * organ_regen, do_update_health = FALSE) H.adjust_nutrition(-nutrition_damage_mult) if(fire_mult && H.getFireLoss()) - H.adjustFireLoss(-fire_mult * config.organ_regeneration_multiplier) + update_health = TRUE + H.adjustFireLoss(-fire_mult * organ_regen, do_update_health = FALSE) H.adjust_nutrition(-nutrition_damage_mult) if(tox_mult && H.getToxLoss()) - H.adjustToxLoss(-tox_mult * config.organ_regeneration_multiplier) + update_health = TRUE + H.adjustToxLoss(-tox_mult * organ_regen, do_update_health = FALSE) H.adjust_nutrition(-nutrition_damage_mult) + if(update_health) + H.update_health() if(!can_regenerate_organs()) return 1 diff --git a/code/game/objects/compass/compass_holder.dm b/code/game/objects/compass/compass_holder.dm index f557d013c31..5b5596d3b7c 100644 --- a/code/game/objects/compass/compass_holder.dm +++ b/code/game/objects/compass/compass_holder.dm @@ -54,7 +54,7 @@ var/global/list/angle_step_to_dir = list( M.Translate(0, get_label_offset()) M.Turn(effective_compass_period * i) I.transform = M - I.add_filter("glow", 1, list("drop_shadow", color = "#77777777", size = 2, offset = 1,x = 0, y = 0)) + I.add_filter("glow", 1, list(type = "drop_shadow", color = "#77777777", size = 2, offset = 1,x = 0, y = 0)) I.layer = HUD_BASE_LAYER I.plane = HUD_PLANE LAZYADD(compass_static_labels, I) diff --git a/code/game/objects/compass/compass_overmap.dm b/code/game/objects/compass/compass_overmap.dm index dbae62a1323..31ef3d2bb1f 100644 --- a/code/game/objects/compass/compass_overmap.dm +++ b/code/game/objects/compass/compass_overmap.dm @@ -16,7 +16,7 @@ var/owner_color = owner.linked?.color || COLOR_WHITE compass_heading_marker = new /image/compass_marker compass_heading_marker.maptext = STYLE_SMALLFONTS("
    â–³
    ", 7, COLOR_WHITE) - compass_heading_marker.add_filter("glow", 1, list("drop_shadow", color = "[owner_color]aa", size = 2, offset = 1, x = 0, y = 0)) + compass_heading_marker.add_filter("glow", 1, list(type = "drop_shadow", color = "[owner_color]aa", size = 2, offset = 1, x = 0, y = 0)) compass_heading_marker.layer = HUD_BASE_LAYER compass_heading_marker.plane = HUD_PLANE compass_heading_marker.color = owner_color diff --git a/code/game/objects/compass/compass_waypoint.dm b/code/game/objects/compass/compass_waypoint.dm index 1f1f9e4ff48..cb3bf668985 100644 --- a/code/game/objects/compass/compass_waypoint.dm +++ b/code/game/objects/compass/compass_waypoint.dm @@ -13,11 +13,11 @@ y = _y z = _z color = _color - compass_overlay = new + compass_overlay = new compass_overlay.loc = src compass_overlay.maptext = STYLE_SMALLFONTS_OUTLINE("
    |\n[uppertext(name)]
    ", 9, color, COLOR_BLACK) - compass_overlay.add_filter("glow", 1, list(type="drop_shadow", color = "[color]" + "aa", size = 2, offset = 1,x = 0, y = 0)) + compass_overlay.add_filter("glow", 1, list(type = "drop_shadow", color = "[color]" + "aa", size = 2, offset = 1,x = 0, y = 0)) compass_overlay.layer = HUD_BASE_LAYER compass_overlay.plane = HUD_PLANE diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 715a720efe3..2cce8534676 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -2,14 +2,14 @@ var/global/list/BUMP_TELEPORTERS = list() /obj/effect/bump_teleporter name = "bump-teleporter" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x2" - var/id = null //id of this bump_teleporter. - var/id_target = null //id of bump_teleporter which this moves you to. invisibility = INVISIBILITY_ABSTRACT //nope, can't see this anchored = TRUE density = TRUE opacity = FALSE + var/id = null //id of this bump_teleporter. + var/id_target = null //id of bump_teleporter which this moves you to. /obj/effect/bump_teleporter/Initialize() . = ..() diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index ebfa01620cd..c0312dda24d 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -10,6 +10,10 @@ var/splash_amount = 10 //atoms moving through a smoke cloud get splashed with up to 10 units of reagent var/turf/destination +SAVED_VAR(/obj/effect/effect/smoke/chem, splash_amount) +SAVED_VAR(/obj/effect/effect/smoke/chem, destination) +SAVED_VAR(/obj/effect/effect/smoke/chem, reagents) + /obj/effect/effect/smoke/chem/Initialize(mapload, smoke_duration, turf/dest_turf = null, icon/cached_icon = null) . = ..() @@ -181,7 +185,7 @@ var/pressure = 0 var/datum/gas_mixture/environment = location.return_air() if(environment) pressure = environment.return_pressure() - smoke_duration = clamp(5, smoke_duration*pressure/(ONE_ATMOSPHERE/3), smoke_duration) + smoke_duration = clamp(smoke_duration*pressure/(ONE_ATMOSPHERE/3), 5, smoke_duration) var/const/arcLength = 2.3559 //distance between each smoke cloud @@ -243,6 +247,7 @@ pending += location + var/airblock // zeroed by ATMOS_CANPASS_TURF while(pending.len) for(var/turf/current in pending) for(var/D in global.cardinal) @@ -259,9 +264,11 @@ continue if(!(target in targetTurfs)) continue - if(current.c_airblock(target)) //this is needed to stop chemsmoke from passing through thin window walls + ATMOS_CANPASS_TURF(airblock, current, target) + if(airblock) //this is needed to stop chemsmoke from passing through thin window walls continue - if(target.c_airblock(current)) + ATMOS_CANPASS_TURF(airblock, target, current) + if(airblock) continue pending += target diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 51af4323032..2dcb2c0123d 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -22,7 +22,7 @@ spawn(3 + metal * 3) Process() checkReagents() - addtimer(CALLBACK(src, .proc/remove_foam), 12 SECONDS) + addtimer(CALLBACK(src, PROC_REF(remove_foam)), 12 SECONDS) /obj/effect/effect/foam/proc/remove_foam() STOP_PROCESSING(SSobj, src) @@ -62,14 +62,14 @@ F.create_reagents(10) if(reagents) for(var/R in reagents.reagent_volumes) - F.reagents.add_reagent(R, 1, safety = 1) //added safety check since reagents in the foam have already had a chance to react + F.add_to_reagents(R, 1, safety = 1) //added safety check since reagents in the foam have already had a chance to react /obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams if(!metal && prob(max(0, exposed_temperature - 475))) flick("[icon_state]-disolve", src) - - spawn(5) - qdel(src) + QDEL_IN(src, 5) + return + return ..() /obj/effect/effect/foam/Crossed(atom/movable/AM) if(metal || !isliving(AM)) @@ -113,9 +113,9 @@ if(carried_reagents) for(var/id in carried_reagents) - F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway + F.add_to_reagents(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway else - F.reagents.add_reagent(/decl/material/liquid/water, 1, safety = 1) + F.add_to_reagents(/decl/material/liquid/water, 1, safety = 1) // wall formed by metal foams, dense and opaque, but easy to break diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm deleted file mode 100644 index 5574b504813..00000000000 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/effect/decal/cleanable/blood/xeno - name = "xeno blood" - desc = "It's green and acidic. It looks like... blood?" - icon = 'icons/effects/blood.dmi' - basecolor = "#05ee05" - cleanable_scent = null diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index ba7bbec1283..fe6b437b700 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -30,20 +30,28 @@ var/global/list/image/splatter_cache=list() var/list/blood_data var/chemical = /decl/material/liquid/blood +SAVED_VAR(/obj/effect/decal/cleanable/blood, base_icon) +SAVED_VAR(/obj/effect/decal/cleanable/blood, basecolor) +SAVED_VAR(/obj/effect/decal/cleanable/blood, amount) +SAVED_VAR(/obj/effect/decal/cleanable/blood, drytime) +SAVED_VAR(/obj/effect/decal/cleanable/blood, blood_size) +SAVED_VAR(/obj/effect/decal/cleanable/blood, blood_data) +SAVED_VAR(/obj/effect/decal/cleanable/blood, chemical) + /obj/effect/decal/cleanable/blood/reveal_blood() if(!fluorescent) fluorescent = FLUORESCENT_GLOWS basecolor = COLOR_LUMINOL update_icon() -/obj/effect/decal/cleanable/blood/clean_blood() +/obj/effect/decal/cleanable/blood/clean(clean_forensics = TRUE) fluorescent = FALSE if(invisibility != INVISIBILITY_ABSTRACT) set_invisibility(INVISIBILITY_ABSTRACT) amount = 0 STOP_PROCESSING(SSobj, src) remove_extension(src, /datum/extension/scent) - . = ..(ignore = TRUE) + . = ..(clean_forensics = FALSE) /obj/effect/decal/cleanable/blood/hide() return @@ -161,6 +169,15 @@ var/global/list/image/splatter_cache=list() . = ..() drips = list(icon_state) +/obj/effect/decal/cleanable/blood/drip/on_update_icon() + SHOULD_CALL_PARENT(FALSE) + color = basecolor + set_overlays(drips?.Copy()) + +/obj/effect/decal/cleanable/blood/drip/Destroy() + LAZYCLEARLIST(drips) + return ..() + /obj/effect/decal/cleanable/blood/writing icon = 'icons/effects/writing.dmi' icon_state = "writing1" diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index c277e3b1038..751574a49e0 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -15,27 +15,12 @@ /obj/effect/decal/cleanable/ash/attack_hand(var/mob/user) SHOULD_CALL_PARENT(FALSE) to_chat(user, "[src] sifts through your fingers.") - var/turf/simulated/floor/F = get_turf(src) + var/turf/F = get_turf(src) if (istype(F)) - F.dirt += 4 + F.add_dirt(4) qdel(src) return TRUE -/obj/effect/decal/cleanable/dirt - name = "dirt" - desc = "Someone should clean that up." - gender = PLURAL - icon = 'icons/effects/effects.dmi' - icon_state = "dirt" - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - persistent = TRUE - -/obj/effect/decal/cleanable/dirt/Destroy() - var/turf/simulated/T = loc - . = ..() - if(istype(T) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) - T.dirt = 0 - /obj/effect/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index f4d66e00c03..b6b7cd07e7b 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -23,6 +23,11 @@ var/global/list/image/fluidtrack_cache=list() var/fresh=1 var/image/overlay +SAVED_VAR(/datum/fluidtrack, direction) +SAVED_VAR(/datum/fluidtrack, basecolor) +SAVED_VAR(/datum/fluidtrack, wet) +SAVED_VAR(/datum/fluidtrack, fresh) + /datum/fluidtrack/New(_direction,_color,_wet) src.direction=_direction src.basecolor=_color @@ -62,6 +67,12 @@ var/global/list/image/fluidtrack_cache=list() // List of laid tracks and their colors. var/list/datum/fluidtrack/stack=list() +SAVED_VAR(/obj/effect/decal/cleanable/blood/tracks, dirs) +SAVED_VAR(/obj/effect/decal/cleanable/blood/tracks, coming_state) +SAVED_VAR(/obj/effect/decal/cleanable/blood/tracks, going_state) +SAVED_VAR(/obj/effect/decal/cleanable/blood/tracks, setdirs) +SAVED_VAR(/obj/effect/decal/cleanable/blood/tracks, stack) + /** * Add tracks to an existing trail. * diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 656377b2ffa..0464f5c4af9 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -13,6 +13,13 @@ var/scent_descriptor = SCENT_DESC_SMELL var/scent_range = 2 +SAVED_VAR(/obj/effect/decal/cleanable, age) +SAVED_VAR(/obj/effect/decal/cleanable, cleanable_scent) +SAVED_VAR(/obj/effect/decal/cleanable, scent_type) +SAVED_VAR(/obj/effect/decal/cleanable, scent_intensity) +SAVED_VAR(/obj/effect/decal/cleanable, scent_descriptor) +SAVED_VAR(/obj/effect/decal/cleanable, scent_range) + /obj/effect/decal/cleanable/Initialize(var/ml, var/_age) if(random_icon_states && length(src.random_icon_states) > 0) src.icon_state = pick(src.random_icon_states) @@ -38,8 +45,8 @@ SSpersistence.forget_value(src, /decl/persistence_handler/filth) . = ..() -/obj/effect/decal/cleanable/clean_blood(var/ignore = 0) - if(!ignore) +/obj/effect/decal/cleanable/clean(clean_forensics = TRUE) + if(clean_forensics) qdel(src) return TRUE . = ..() diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 0af5221fd2d..35c5a8f2eef 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -1,7 +1,7 @@ /obj/effect/decal/point name = "arrow" desc = "It's an arrow hanging in mid-air. There may be a wizard about." - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "arrow" layer = POINTER_LAYER anchored = TRUE diff --git a/code/game/objects/effects/decals/posters/_poster.dm b/code/game/objects/effects/decals/posters/_poster.dm index f7bf9ca565c..c91bed259fa 100644 --- a/code/game/objects/effects/decals/posters/_poster.dm +++ b/code/game/objects/effects/decals/posters/_poster.dm @@ -7,9 +7,9 @@ icon = 'icons/obj/items/posters.dmi' icon_state = "poster0" anchored = TRUE - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':32}, 'WEST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":32}, "SOUTH":{"y":-32}, "WEST":{"x":32}, "EAST":{"x":-32}}' material = /decl/material/solid/organic/paper - maxhealth = 10 + max_health = 10 parts_type = /obj/item/poster parts_amount = 1 @@ -112,7 +112,7 @@ if(ruined == _ruined) return ruined = _ruined - health = (!ruined)? max(health, 1) : 0 //setting unruined implies health > 0 + current_health = (!ruined)? max(current_health, 1) : 0 //setting unruined implies health > 0 //Make sure we look the part update_appearence() diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index b02e172a875..6a585fa4e93 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -49,7 +49,7 @@ DEFINE_POSTER( bay_43, "bsposter43", "Responsible medbay habits, No #3", DEFINE_POSTER( bay_45, "bsposter45", "Responsible engineering habits, No #1", "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\"") DEFINE_POSTER( bay_46, "bsposter46", "Inspirational lawyer", "An inspirational poster depicting an alien lawyer. He seems to be shouting something, while pointing fiercely to the right.") DEFINE_POSTER( bay_47, "bsposter47", "Security pinup", "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself.") -DEFINE_POSTER( bay_48, "bsposter48", "Borg pinup?", "This is a.. pin-up poster? It is a diagram on an old model of cyborg with a note scribbled in marker on the bottom, on the top there is a large XO written in red marker.") +DEFINE_POSTER( bay_48, "bsposter48", "Borg pinup?", "This is a... pin-up poster? It is a diagram of an old model of cyborg with a note scribbled in marker on the bottom, on the top there is a large XO written in red marker.") DEFINE_POSTER( bay_49, "bsposter49", "Engineering recruitment", "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\"") DEFINE_POSTER( bay_50, "bsposter50", "Pinup Girl Cindy Kate", "This particular one is of Cindy Kate, a seductive performer well known among less savoury circles.") DEFINE_POSTER( bay_51, "bsposter51", "space appreciation poster", "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. One of three.") diff --git a/code/game/objects/effects/dirty_floor.dm b/code/game/objects/effects/dirty_floor.dm new file mode 100644 index 00000000000..d5cd0543c83 --- /dev/null +++ b/code/game/objects/effects/dirty_floor.dm @@ -0,0 +1,24 @@ +/obj/effect/decal/cleanable/dirt + name = "dirt" + desc = "Someone should clean that up." + gender = PLURAL + icon = 'icons/effects/effects.dmi' + icon_state = "dirt" + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + persistent = TRUE + alpha = 0 + var/dirt_amount = 0 + +SAVED_VAR(/obj/effect/decal/cleanable/dirt, dirt_amount) + +/obj/effect/decal/cleanable/dirt/Initialize() + . = ..() + name = "" + verbs.Cut() + +/obj/effect/decal/cleanable/dirt/on_update_icon() + . = ..() + if (dirt_amount <= 50) + alpha = 0 + else + alpha = min((dirt_amount - 50) * 5, 255) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 960cb4c0827..610bfe26698 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -68,7 +68,7 @@ steam.start() -- spawns the effect /datum/effect/effect/system/steam_spread/start() var/i = 0 for(i=0, i 10) @@ -141,13 +149,13 @@ steam.start() -- spawns the effect /datum/effect/effect/system/spark_spread/start() var/i = 0 for(i=0, i 20) return - addtimer(CALLBACK(src, /datum/effect/effect/system/proc/spread, i), 0) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/effect/effect/system, spread), i), 0) /datum/effect/effect/system/smoke_spread/spread(var/i) if(holder) diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index 4f3c44fba8b..1077b1b952f 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -55,7 +55,7 @@ var/datum/effect/system/expl_particles/P = new/datum/effect/system/expl_particles() P.set_up(10,location) P.start() - addtimer(CALLBACK(src, .proc/make_smoke), 5) + addtimer(CALLBACK(src, PROC_REF(make_smoke)), 5) /datum/effect/system/explosion/proc/make_smoke() var/datum/effect/effect/system/smoke_spread/S = new/datum/effect/effect/system/smoke_spread() diff --git a/code/game/objects/effects/fluids.dm b/code/game/objects/effects/fluids.dm deleted file mode 100644 index 2cf3369d583..00000000000 --- a/code/game/objects/effects/fluids.dm +++ /dev/null @@ -1,162 +0,0 @@ -/obj/effect/fluid - name = "" - icon = 'icons/effects/liquids.dmi' - icon_state = "puddle" - anchored = TRUE - simulated = 0 - opacity = FALSE - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - layer = FLY_LAYER - alpha = 0 - color = COLOR_LIQUID_WATER - - var/last_slipperiness = 0 - var/last_flow_strength = 0 - var/last_flow_dir = 0 - var/update_lighting = FALSE - -/obj/effect/fluid/Initialize() - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - icon_state = "" - create_reagents(FLUID_MAX_DEPTH) - . = ..() - var/turf/simulated/T = get_turf(src) - if(!isturf(T) || !T.CanFluidPass()) - return INITIALIZE_HINT_QDEL - if(istype(T)) - T.unwet_floor(FALSE) - -/obj/effect/fluid/airlock_crush() - qdel(src) - -/obj/effect/fluid/Move() - PRINT_STACK_TRACE("A fluid overlay had Move() called!") - return FALSE - -/obj/effect/fluid/on_reagent_change() - ..() - - if(reagents?.total_volume) - var/decl/material/primary_reagent = reagents.get_primary_reagent_decl() - if(primary_reagent) - last_slipperiness = primary_reagent.slipperiness - - ADD_ACTIVE_FLUID(src) - for(var/checkdir in global.cardinal) - var/obj/effect/fluid/F = locate() in get_step(loc, checkdir) - if(F) - ADD_ACTIVE_FLUID(F) - update_lighting = TRUE - update_icon() - -/obj/effect/fluid/Destroy() - var/turf/simulated/T = get_turf(src) - for(var/checkdir in global.cardinal) - var/obj/effect/fluid/F = locate() in get_step(T, checkdir) - if(F) - ADD_ACTIVE_FLUID(F) - REMOVE_ACTIVE_FLUID(src) - SSfluids.pending_flows -= src - . = ..() - if(istype(T) && last_slipperiness > 0) - T.wet_floor(last_slipperiness) - -/obj/effect/fluid/on_update_icon() - - cut_overlays() - if(reagents.total_volume > FLUID_OVER_MOB_HEAD) - layer = DEEP_FLUID_LAYER - else - layer = SHALLOW_FLUID_LAYER - - color = reagents.get_color() - - if(!reagents?.total_volume) - return - - var/decl/material/main_reagent = reagents.get_primary_reagent_decl() - if(main_reagent) // TODO: weighted alpha from all reagents, not just primary - alpha = clamp(CEILING(255*(reagents.total_volume/FLUID_DEEP)) * main_reagent.opacity, main_reagent.min_fluid_opacity, main_reagent.max_fluid_opacity) - - if(reagents.total_volume <= FLUID_PUDDLE) - APPLY_FLUID_OVERLAY("puddle") - else if(reagents.total_volume <= FLUID_SHALLOW) - APPLY_FLUID_OVERLAY("shallow_still") - else if(reagents.total_volume < FLUID_DEEP) - APPLY_FLUID_OVERLAY("mid_still") - else if(reagents.total_volume < (FLUID_DEEP*2)) - APPLY_FLUID_OVERLAY("deep_still") - else - APPLY_FLUID_OVERLAY("ocean") - compile_overlays() - - if(update_lighting) - update_lighting = FALSE - var/glowing - for(var/rtype in reagents.reagent_volumes) - var/decl/material/reagent = GET_DECL(rtype) - if(REAGENT_VOLUME(reagents, rtype) >= 3 && reagent.radioactivity) - glowing = TRUE - break - if(glowing) - set_light(1, 0.2, COLOR_GREEN) - else - set_light(0) - -// Map helper. -/obj/abstract/fluid_mapped - name = "mapped flooded area" - alpha = 125 - icon_state = "shallow_still" - color = COLOR_LIQUID_WATER - - var/fluid_type = /decl/material/liquid/water - var/fluid_initial = FLUID_MAX_DEPTH - -/obj/abstract/fluid_mapped/Initialize() - ..() - var/turf/T = get_turf(src) - if(istype(T)) - T.add_fluid(fluid_type, fluid_initial) - return INITIALIZE_HINT_QDEL - -/obj/abstract/fluid_mapped/fuel - name = "spilled fuel" - fluid_type = /decl/material/liquid/fuel - fluid_initial = 10 - -// Permaflood overlay. -var/global/obj/effect/flood/flood_object = new -/obj/effect/flood - name = "" - icon = 'icons/effects/liquids.dmi' - icon_state = "ocean" - layer = DEEP_FLUID_LAYER - color = COLOR_LIQUID_WATER - alpha = 140 - invisibility = INVISIBILITY_NONE - simulated = FALSE - density = FALSE - anchored = TRUE - -/obj/effect/fluid/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - . = ..() - if(exposed_temperature >= FLAMMABLE_GAS_MINIMUM_BURN_TEMPERATURE) - vaporize_fuel(air) - -/obj/effect/fluid/proc/vaporize_fuel(datum/gas_mixture/air) - if(!length(reagents?.reagent_volumes) || !istype(air)) - return - var/update_air = FALSE - for(var/rtype in reagents.reagent_volumes) - var/decl/material/mat = GET_DECL(rtype) - if(mat.gas_flags & XGM_GAS_FUEL) - var/moles = round(reagents.reagent_volumes[rtype] / REAGENT_UNITS_PER_GAS_MOLE) - if(moles > 0) - air.adjust_gas(rtype, moles, FALSE) - reagents.remove_reagent(round(moles * REAGENT_UNITS_PER_GAS_MOLE)) - update_air = TRUE - if(update_air) - air.update_values() - return TRUE - return FALSE \ No newline at end of file diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibspawner.dm similarity index 63% rename from code/game/objects/effects/gibs.dm rename to code/game/objects/effects/gibspawner.dm index eeffab95754..f9aa2f59941 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibspawner.dm @@ -1,8 +1,23 @@ -/proc/gibs(var/atom/location, var/gibber_type = /obj/effect/gibspawner/generic, var/_blood_type, var/_unique_enzymes, var/_fleshcolor, var/_bloodcolor) - new gibber_type(location, _blood_type, _unique_enzymes, _fleshcolor, _bloodcolor) +/mob/proc/spawn_gibber(atom/location = loc) + var/gibber_type = get_gibber_type() + if(!gibber_type) + return + if(ispath(gibber_type, /obj/effect/gibspawner)) + return new gibber_type(location, get_blood_type(), get_unique_enzymes(), get_flesh_color(), get_blood_color()) + . = new gibber_type(location) + if(!istype(., /obj/effect/decal/cleanable/blood/gibs)) + return + var/obj/effect/decal/cleanable/blood/gibs/gib = . + gib.fleshcolor = get_flesh_color() + gib.basecolor = get_blood_color() + var/gib_unique_enzymes = get_unique_enzymes() + var/gib_blood_type = get_blood_type() + if(gib_unique_enzymes && gib_blood_type) + LAZYSET(gib.blood_DNA, gib_unique_enzymes, gib_blood_type) + gib.update_icon() /obj/effect/gibspawner - var/sparks = 0 //whether sparks spread on Gib() + var/sparks = 0 //whether sparks spread on spawn_gibs() var/list/gibtypes = list() var/list/gibamounts = list() var/list/gibdirections = list() //of lists @@ -21,13 +36,12 @@ blood_type = _blood_type if(_unique_enzymes) unique_enzymes = _unique_enzymes - Gib(loc) + spawn_gibs(loc) return INITIALIZE_HINT_QDEL -/obj/effect/gibspawner/proc/Gib(atom/location) +/obj/effect/gibspawner/proc/spawn_gibs(atom/location) if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) - log_error("Gib list length mismatch!") - return + CRASH("Gib list length mismatch!") if(sparks) spark_at(location, amount = 2, cardinal_only = TRUE) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 6d89c2129f2..7c2edd13fce 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -18,7 +18,7 @@ /obj/abstract/landmark/start name = "start" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x" anchored = TRUE invisibility = INVISIBILITY_ABSTRACT diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 4215dd086c5..30dde5926a3 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -1,6 +1,6 @@ /obj/effect/manifest name = "manifest" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x" /obj/effect/manifest/Initialize() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index d1e73a46b06..03010895f28 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -46,16 +46,16 @@ //example: n2o triggerproc //note: im lazy - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) + for (var/turf/target in range(1,src)) + if(target.simulated && !target.blocks_air) target.assume_gas(/decl/material/gas/nitrous_oxide, 30) spawn(0) qdel(src) /obj/effect/mine/proc/triggerflame(obj) - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) + for (var/turf/target in range(1,src)) + if(target.simulated && !target.blocks_air) target.assume_gas(/decl/material/gas/hydrogen, 30) target.hotspot_expose(1000, CELL_VOLUME) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index b39ce17615a..55aaddcf1bd 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -32,7 +32,7 @@ dangerous = 1 playsound(src, 'sound/effects/phasein.ogg', 25, 1) target = end - events_repository.register(/decl/observ/moved, src, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/datum, qdel_self)) if(delete_after) QDEL_IN(src, delete_after) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index e3e71c4accf..9528d9d7b55 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -20,7 +20,7 @@ /obj/effect/spawner/newbomb name = "TTV bomb" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x" var/filler_type = /decl/material/gas/carbon_dioxide @@ -102,7 +102,7 @@ /obj/effect/spawner/onetankbomb name = "Single-tank bomb" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x" /obj/effect/spawner/onetankbomb/Initialize() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 9b56c649363..701dae911fb 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -5,7 +5,7 @@ icon = 'icons/effects/effects.dmi' anchored = TRUE density = FALSE - var/health = 15 + max_health = 15 //similar to weeds, but only barfed out by nurses manually /obj/effect/spider/explosion_act(severity) @@ -53,22 +53,24 @@ damage = 15 playsound(loc, 'sound/items/Welder.ogg', 100, 1) - health -= damage + current_health -= damage healthcheck() /obj/effect/spider/bullet_act(var/obj/item/projectile/Proj) ..() - health -= Proj.get_structure_damage() + current_health -= Proj.get_structure_damage() healthcheck() /obj/effect/spider/proc/healthcheck() - if(health <= 0) + if(current_health <= 0) qdel(src) /obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300 + T0C) - health -= 5 + current_health -= 5 healthcheck() + if(!QDELETED(src)) + return ..() /obj/effect/spider/stickyweb icon_state = "stickyweb1" @@ -140,10 +142,11 @@ /obj/effect/spider/spiderling name = "spiderling" desc = "It never stays still for long." + icon = 'icons/mob/simple_animal/spider.dmi' icon_state = "lesser" anchored = FALSE layer = BELOW_OBJ_LAYER - health = 3 + max_health = 3 var/mob/living/simple_animal/hostile/giant_spider/greater_form var/last_itch = 0 var/amount_grown = -1 @@ -170,7 +173,7 @@ dormant = FALSE if(dormant) - events_repository.register(/decl/observ/moved, src, src, /obj/effect/spider/proc/disturbed) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/effect/spider, disturbed)) else START_PROCESSING(SSobj, src) @@ -185,14 +188,14 @@ /obj/effect/spider/spiderling/Destroy() if(dormant) - events_repository.unregister(/decl/observ/moved, src, src, /obj/effect/spider/proc/disturbed) + events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/effect/spider, disturbed)) STOP_PROCESSING(SSobj, src) walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. . = ..() /obj/effect/spider/spiderling/attackby(var/obj/item/W, var/mob/user) ..() - if(health > 0) + if(current_health > 0) disturbed() /obj/effect/spider/spiderling/Crossed(atom/movable/AM) @@ -206,7 +209,7 @@ if(!dormant) return dormant = FALSE - events_repository.unregister(/decl/observ/moved, src, src, /obj/effect/spider/proc/disturbed) + events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/effect/spider, disturbed)) START_PROCESSING(SSobj, src) /obj/effect/spider/spiderling/Bump(atom/user) @@ -216,7 +219,7 @@ ..() /obj/effect/spider/spiderling/healthcheck() - if(health <= 0) + if(current_health <= 0) die() /obj/effect/spider/spiderling/proc/check_vent(obj/machinery/atmospherics/unary/vent_pump/exit_vent) @@ -231,7 +234,7 @@ if(prob(50)) src.visible_message("You hear something squeezing through the ventilation ducts.",2) forceMove(exit_vent) - addtimer(CALLBACK(src, .proc/end_vent_moving, exit_vent), travel_time) + addtimer(CALLBACK(src, PROC_REF(end_vent_moving), exit_vent), travel_time) /obj/effect/spider/spiderling/proc/end_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent) if(check_vent(exit_vent)) @@ -266,7 +269,7 @@ forceMove(entry_vent) var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) - addtimer(CALLBACK(src, .proc/start_vent_moving, exit_vent, travel_time), travel_time + rand(20,60)) + addtimer(CALLBACK(src, PROC_REF(start_vent_moving), exit_vent, travel_time), travel_time + rand(20,60)) travelling_in_vent = TRUE return else @@ -334,7 +337,7 @@ name = "cocoon" desc = "Something wrapped in silky spider web." icon_state = "cocoon1" - health = 60 + max_health = 60 /obj/effect/spider/cocoon/Initialize() . = ..() diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 2a3b11d9a17..a1b4002d04a 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -5,6 +5,8 @@ var/stopper = 1 // stops throwers invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit anchored = TRUE + icon = 'icons/misc/mark.dmi' + icon_state = "X" /obj/effect/step_trigger/proc/Trigger(var/atom/movable/A) return 0 diff --git a/code/game/objects/effects/wet_floor.dm b/code/game/objects/effects/wet_floor.dm new file mode 100644 index 00000000000..664d777a388 --- /dev/null +++ b/code/game/objects/effects/wet_floor.dm @@ -0,0 +1,19 @@ +// Visual marker and data holder for slippery floors. +/atom/movable/wet_floor + icon = 'icons/effects/water.dmi' + icon_state = "wet_floor" + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + simulated = FALSE + var/wetness = 0 + var/image/wet_overlay = null + var/wet_timer_id + +/atom/movable/wet_floor/Initialize() + . = ..() + name = "" + verbs.Cut() + +/atom/movable/wet_floor/proc/unwet_floor() + var/turf/myturf = loc + if(istype(myturf)) + myturf.unwet_floor() diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index e3a2cedd855..63c9cd3b938 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,6 +1,6 @@ //TODO: Flash range does nothing currently /proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN) - if(config.use_iterative_explosions) + if(get_config_value(/decl/config/toggle/use_iterative_explosions)) . = explosion_iter(epicenter, (devastation_range * 2 + heavy_impact_range + light_impact_range), z_transfer) else . = explosion_basic(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, z_transfer) @@ -85,8 +85,8 @@ var/atom/movable/AM = atom_movable if(AM && AM.simulated && !T.protects_atom(AM)) AM.explosion_act(dist) - if(!QDELETED(AM) && !AM.anchored) - addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, throw_target, throw_dist, throw_dist), 0) + if(!QDELETED(AM) && !AM.anchored && isturf(AM.loc)) + addtimer(CALLBACK(AM, TYPE_PROC_REF(/atom/movable, throw_at), throw_target, throw_dist, throw_dist), 0) var/took = (REALTIMEOFDAY-start_time)/10 if(Debug2) @@ -127,11 +127,12 @@ if (O.explosion_resistance) power -= O.explosion_resistance - if (power >= config.iterative_explosives_z_threshold) + if (power >= get_config_value(/decl/config/num/iterative_explosives_z_threshold)) + var/explo_mult = get_config_value(/decl/config/num/iterative_explosives_z_multiplier) if ((z_transfer & UP) && HasAbove(epicenter.z)) - explosion_iter(GetAbove(epicenter), power * config.iterative_explosives_z_multiplier, UP) + explosion_iter(GetAbove(epicenter), power * explo_mult, UP) if ((z_transfer & DOWN) && HasBelow(epicenter.z)) - explosion_iter(GetBelow(epicenter), power * config.iterative_explosives_z_multiplier, DOWN) + explosion_iter(GetBelow(epicenter), power * explo_mult, DOWN) // These three lists must always be the same length. var/list/turf_queue = list(epicenter, epicenter, epicenter, epicenter) @@ -254,7 +255,7 @@ if (AM.simulated) AM.explosion_act(severity) if(!QDELETED(AM) && !AM.anchored) - addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, throw_target, throw_dist, throw_dist), 0) + addtimer(CALLBACK(AM, TYPE_PROC_REF(/atom/movable, throw_at), throw_target, throw_dist, throw_dist), 0) movable_tally++ CHECK_TICK else diff --git a/code/game/objects/item.dm b/code/game/objects/item.dm index 35b962fadc8..36c923399b4 100644 --- a/code/game/objects/item.dm +++ b/code/game/objects/item.dm @@ -4,11 +4,10 @@ mouse_drag_pointer = MOUSE_ACTIVE_POINTER pass_flags = PASS_FLAG_TABLE abstract_type = /obj/item + temperature_sensitive = TRUE var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/randpixel = 6 - var/health - var/max_health var/material_health_multiplier = 0.2 var/hitsound var/slot_flags = 0 //This is used to determine on which slots an item can fit. @@ -86,7 +85,24 @@ var/tmp/has_inventory_icon // do not set manually var/tmp/use_single_icon - var/center_of_mass = @"{'x':16,'y':16}" //can be null for no exact placement behaviour + var/center_of_mass = @'{"x":16,"y":16}' //can be null for no exact placement behaviour + +SAVED_VAR(/obj/item, contaminated) +SAVED_VAR(/obj/item, canremove) +SAVED_VAR(/obj/item, hidden_uplink) +SAVED_VAR(/obj/item, material) +SAVED_VAR(/obj/item, current_health) +SAVED_VAR(/obj/item, coating) + +//Used by things that can be collapsed and put into other inv slots +SAVED_VAR(/obj/item, slot_flags) + +//Used by clothing that covers or not the face and can be toggled +SAVED_VAR(/obj/item, flags_inv) +SAVED_VAR(/obj/item, body_parts_covered) + +//Used by things becoming airtight or not +SAVED_VAR(/obj/item, item_flags) /obj/item/proc/can_contaminate() return !(obj_flags & ITEM_FLAG_NO_CONTAMINATION) @@ -108,8 +124,8 @@ return origin_tech /obj/item/Initialize(var/ml, var/material_key) - if(isnull(health)) - health = max_health //Make sure to propagate max_health to health var before material setup, for consistency + if(isnull(current_health)) + current_health = max_health //Make sure to propagate max_health to health var before material setup, for consistency if(!ispath(material_key, /decl/material)) material_key = material if(material_key) @@ -125,6 +141,14 @@ pixel_y = rand(-randpixel, randpixel) reconsider_single_icon() + //Outreach blood overlay load from save + if(persistent_id) + //Regen coating icon cache + if(coating) + generate_blood_overlay() + if(blood_overlay) + blood_overlay.color = coating.get_color() + /obj/item/Destroy() STOP_PROCESSING(SSobj, src) @@ -158,8 +182,8 @@ clone = ..() clone.contaminated = contaminated clone.blood_overlay = image(blood_overlay) + clone.current_health = current_health - clone.health = health //#TODO: once item damage in, check health! //Coating @@ -206,12 +230,13 @@ /obj/item/examine(mob/user, distance) var/desc_comp = "" //For "description composite" - desc_comp += "It is a [w_class_description()] item." + desc_comp += "It is a [w_class_description()] item.
    " - var/desc_damage = get_examined_damage_string(health / max_health) + var/desc_damage = get_examined_damage_string() if(length(desc_damage)) - desc_comp += "
    [desc_damage]" + desc_comp += "[desc_damage]
    " + var/added_header = FALSE if(user?.get_preference_value(/datum/client_preference/inquisitive_examine) == PREF_ON) var/list/available_recipes = list() @@ -224,45 +249,82 @@ available_recipes[initial_stage] = "\a [initial(prop.name)]" if(length(available_recipes)) - desc_comp += "
    *--------*
    " + + if(!added_header) + added_header = TRUE + desc_comp += "*--------*
    " + for(var/decl/crafting_stage/initial_stage in available_recipes) desc_comp += SPAN_NOTICE("With [available_recipes[initial_stage]], you could start making \a [initial_stage.descriptor] out of this.") desc_comp += "
    " - desc_comp += "*--------*" + desc_comp += "*--------*
    " + + if(distance <= 1 && has_extension(src, /datum/extension/loaded_cell)) + + if(!added_header) + added_header = TRUE + desc_comp += "*--------*
    " + + var/datum/extension/loaded_cell/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + var/obj/item/cell/loaded_cell = cell_loaded?.get_cell() + var/obj/item/cell/current_cell = get_cell() + // Some items use the extension but may return something else to get_cell(). + // In these cases, don't print the removal info etc. + if(current_cell && current_cell != loaded_cell) + desc_comp += SPAN_NOTICE("\The [src] is using an external [current_cell.name] as a power supply.") + else + desc_comp += jointext(cell_loaded.get_examine_text(current_cell), "
    ") + desc_comp += "
    *--------*
    " if(hasHUD(user, HUD_SCIENCE)) //Mob has a research scanner active. - desc_comp += "
    *--------*
    " + + if(!added_header) + added_header = TRUE + desc_comp += "*--------*
    " if(origin_tech) - desc_comp += SPAN_NOTICE("Testing potentials:
    ") + desc_comp += SPAN_NOTICE("Testing potentials:") + desc_comp += "
    " var/list/techlvls = cached_json_decode(origin_tech) for(var/T in techlvls) var/decl/research_field/field = SSfabrication.get_research_field_by_id(T) - desc_comp += "Tech: Level [techlvls[T]] [field.name]
    " + desc_comp += "Tech: Level [techlvls[T]] [field.name].
    " else desc_comp += "No tech origins detected.
    " if(LAZYLEN(matter)) - desc_comp += SPAN_NOTICE("Extractable materials:
    ") + desc_comp += SPAN_NOTICE("Extractable materials:") + desc_comp += "
    " for(var/mat in matter) var/decl/material/M = GET_DECL(mat) desc_comp += "[capitalize(M.solid_name)]
    " else desc_comp += SPAN_DANGER("No extractable materials detected.
    ") - desc_comp += "*--------*" + desc_comp += "*--------*
    " return ..(user, distance, "", desc_comp) /obj/item/check_mousedrop_adjacency(var/atom/over, var/mob/user) . = (loc == user && istype(over, /obj/screen/inventory)) || ..() -/obj/item/handle_mouse_drop(atom/over, mob/user) - +/obj/item/handle_mouse_drop(atom/over, mob/user, params) if(over == user) usr.face_atom(src) dragged_onto(over) return TRUE + // Allow dragging items onto/around tables and racks. + if(istype(over, /obj/structure)) + var/obj/structure/struct = over + if(struct.structure_flags & STRUCTURE_FLAG_SURFACE) + if(user == loc && !user.try_unequip(src, get_turf(user))) + return TRUE + if(!isturf(loc)) + return TRUE + var/list/click_data = params2list(params) + do_visual_slide(src, get_turf(src), pixel_x, pixel_y, get_turf(over), text2num(click_data["icon-x"])-1, text2num(click_data["icon-y"])-1, center_of_mass && cached_json_decode(center_of_mass)) + return TRUE + // Try to drag-equip the item. var/obj/screen/inventory/inv = over if(user.client && istype(inv) && inv.slot_id && (over in user.client.screen)) @@ -282,11 +344,22 @@ user.equip_to_slot_if_possible(src, inv.slot_id) return TRUE + . = ..() /obj/item/proc/dragged_onto(var/mob/user) return attack_hand_with_interaction_checks(user) +/obj/item/proc/can_heat_atom(atom/other) + return get_heat() > 0 && isflamesource() + +/obj/item/afterattack(var/atom/A, var/mob/user, var/proximity) + . = ..() + if(!. && proximity && !ismob(A) && can_heat_atom(A)) + A.handle_external_heating(get_heat(), src, user) + return TRUE + return FALSE + /obj/item/attack_hand(mob/user) if(!user) @@ -332,6 +405,11 @@ if(!QDELETED(throwing)) throwing.finalize(hit=TRUE) + if(has_extension(src, /datum/extension/loaded_cell) && user.is_holding_offhand(src)) + var/datum/extension/loaded_cell/cell_handler = get_extension(src, /datum/extension/loaded_cell) + if(cell_handler.try_unload(user)) + return TRUE + if (loc == user) if(!user.try_unequip(src)) return TRUE @@ -371,12 +449,23 @@ if(istype(W, /obj/item/storage)) var/obj/item/storage/S = W - if(S.use_to_pickup) - if(S.collection_mode) //Mode is set to collect all items - if(isturf(src.loc)) - S.gather_all(src.loc, user) - else if(S.can_be_inserted(src, user)) + if(S.use_to_pickup && isturf(loc)) + //Mode is set to collect all items + if(S.collection_mode) + S.gather_all(loc, user) + return TRUE + if(S.can_be_inserted(src, user)) S.handle_item_insertion(src) + return TRUE + + if(has_extension(src, /datum/extension/loaded_cell)) + var/datum/extension/loaded_cell/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + if(cell_loaded.has_tool_unload_interaction(W)) + return cell_loaded.try_unload(user, W) + else if(istype(W, /obj/item/cell)) + return cell_loaded.try_load(user, W) + + return FALSE /obj/item/proc/talk_into(mob/living/M, message, message_mode, var/verb = "says", var/decl/language/speaking = null) return @@ -388,16 +477,20 @@ /obj/item/proc/dropped(var/mob/user, var/play_dropsound = TRUE) SHOULD_CALL_PARENT(TRUE) + + if(QDELETED(src)) + return + if(randpixel) pixel_z = randpixel //an idea borrowed from some of the older pixel_y randomizations. Intended to make items appear to drop at a character update_twohanding() for(var/obj/item/thing in user?.get_held_items()) thing.update_twohanding() if(play_dropsound && drop_sound && SSticker.mode) - addtimer(CALLBACK(src, .proc/dropped_sound_callback), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) + addtimer(CALLBACK(src, PROC_REF(dropped_sound_callback)), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) if(user && (z_flags & ZMM_MANGLE_PLANES)) - addtimer(CALLBACK(user, /mob/proc/check_emissive_equipment), 0, TIMER_UNIQUE) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, check_emissive_equipment)), 0, TIMER_UNIQUE) RAISE_EVENT(/decl/observ/mob_unequipped, user, src) RAISE_EVENT_REPEAT(/decl/observ/item_unequipped, src, user) @@ -424,12 +517,16 @@ // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(var/mob/user, var/slot) + SHOULD_CALL_PARENT(TRUE) + if(QDELETED(src)) + return + add_fingerprint(user) hud_layerise() - addtimer(CALLBACK(src, .proc/reconsider_client_screen_presence, user.client, slot), 0) + addtimer(CALLBACK(src, PROC_REF(reconsider_client_screen_presence), user.client, slot), 0) //Update two-handing status var/mob/M = loc @@ -440,11 +537,11 @@ if(user) if(SSticker.mode) if(pickup_sound && (slot in user.get_held_item_slots())) - addtimer(CALLBACK(src, .proc/pickup_sound_callback), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) + addtimer(CALLBACK(src, PROC_REF(pickup_sound_callback)), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) else if(equip_sound) - addtimer(CALLBACK(src, .proc/equipped_sound_callback), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) + addtimer(CALLBACK(src, PROC_REF(equipped_sound_callback)), 0, (TIMER_OVERRIDE | TIMER_UNIQUE)) if(z_flags & ZMM_MANGLE_PLANES) - addtimer(CALLBACK(user, /mob/proc/check_emissive_equipment), 0, TIMER_UNIQUE) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, check_emissive_equipment)), 0, TIMER_UNIQUE) RAISE_EVENT(/decl/observ/mob_equipped, user, src, slot) RAISE_EVENT_REPEAT(/decl/observ/item_equipped, src, user, slot) @@ -491,7 +588,7 @@ return TRUE -/obj/item/proc/mob_can_unequip(mob/user, slot, disable_warning = FALSE) +/obj/item/proc/mob_can_unequip(mob/user, slot, disable_warning = FALSE, dropping = FALSE) if(!slot || !user || !canremove) return FALSE var/datum/inventory_slot/inv_slot = user.get_inventory_slot_datum(slot) @@ -563,10 +660,6 @@ playsound(target, hitsound, 50, 1, -1) return 1 -/obj/item/clean_blood() - . = ..() - clean() - /obj/item/reveal_blood() if(was_bloodied && !fluorescent) fluorescent = FLUORESCENT_GLOWS @@ -574,30 +667,25 @@ blood_overlay.color = COLOR_LUMINOL update_icon() -/obj/item/add_blood(mob/living/carbon/human/M, amount = 2, list/blood_data) +/obj/item/add_blood(mob/living/M, amount = 2, list/blood_data) if (!..()) return FALSE - if(istype(src, /obj/item/energy_blade)) return - if(!istype(M)) return TRUE - - if(!blood_data) - blood_data = REAGENT_DATA(M.vessel, /decl/material/liquid/blood) - + if(!blood_data && ishuman(M)) + var/mob/living/carbon/human/H = M + blood_data = REAGENT_DATA(H.vessel, /decl/material/liquid/blood) var/sample_dna = LAZYACCESS(blood_data, "blood_DNA") if(sample_dna) var/datum/extension/forensic_evidence/forensics = get_or_create_extension(src, /datum/extension/forensic_evidence) forensics.add_data(/datum/forensics/blood_dna, sample_dna) add_coating(/decl/material/liquid/blood, amount, blood_data) - var/unique_enzymes = M.get_unique_enzymes() var/blood_type = M.get_blood_type() if(unique_enzymes && blood_type && !LAZYACCESS(blood_DNA, unique_enzymes)) LAZYSET(blood_DNA, unique_enzymes, blood_type) - return TRUE var/global/list/_blood_overlay_cache = list() @@ -668,12 +756,12 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. user.visible_message("\The [user] peers through [zoomdevicename ? "the [zoomdevicename] of [src]" : "[src]"].") - events_repository.register(/decl/observ/destroyed, user, src, /obj/item/proc/unzoom) - events_repository.register(/decl/observ/moved, user, src, /obj/item/proc/unzoom) - events_repository.register(/decl/observ/dir_set, user, src, /obj/item/proc/unzoom) - events_repository.register(/decl/observ/item_unequipped, src, src, /obj/item/proc/zoom_drop) + events_repository.register(/decl/observ/destroyed, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.register(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.register(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.register(/decl/observ/item_unequipped, src, src, TYPE_PROC_REF(/obj/item, zoom_drop)) if(isliving(user)) - events_repository.register(/decl/observ/stat_set, user, src, /obj/item/proc/unzoom) + events_repository.register(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/item, unzoom)) /obj/item/proc/zoom_drop(var/obj/item/I, var/mob/user) unzoom(user) @@ -683,12 +771,12 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. return zoom = 0 - events_repository.unregister(/decl/observ/destroyed, user, src, /obj/item/proc/unzoom) - events_repository.unregister(/decl/observ/moved, user, src, /obj/item/proc/unzoom) - events_repository.unregister(/decl/observ/dir_set, user, src, /obj/item/proc/unzoom) - events_repository.unregister(/decl/observ/item_unequipped, src, src, /obj/item/proc/zoom_drop) + events_repository.unregister(/decl/observ/destroyed, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.unregister(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.unregister(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/item, unzoom)) + events_repository.unregister(/decl/observ/item_unequipped, src, src, TYPE_PROC_REF(/obj/item, zoom_drop)) if(isliving(user)) - events_repository.unregister(/decl/observ/stat_set, user, src, /obj/item/proc/unzoom) + events_repository.unregister(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/item, unzoom)) if(!user.client) return @@ -714,10 +802,15 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. . += " \[Look at ID\]" /obj/item/proc/on_active_hand() - -/obj/item/proc/has_embedded() return +/obj/item/proc/has_embedded(mob/living/victim) + if(istype(victim)) + LAZYDISTINCTADD(victim.embedded, src) + victim.verbs |= /mob/proc/yank_out_object + return TRUE + return FALSE + /obj/item/proc/get_pressure_weakness(pressure,zone) . = 1 if(pressure > ONE_ATMOSPHERE) @@ -799,9 +892,10 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. return coating.remove_any(amount) if(coating.total_volume <= MINIMUM_CHEMICAL_VOLUME) - clean(0) + clean(FALSE) -/obj/item/proc/clean(clean_forensics=TRUE) +/obj/item/clean(clean_forensics=TRUE) + . = ..() QDEL_NULL(coating) blood_overlay = null if(clean_forensics) @@ -839,6 +933,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/reconsider_client_screen_presence(var/client/client, var/slot) if(!client) return + if(client.mob?.get_equipped_item(slot) != src) + return if(client.mob?.item_should_have_screen_presence(src, slot)) client.screen |= src else @@ -879,3 +975,20 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. // Supplied during loadout gear tweaking. /obj/item/proc/set_custom_desc(var/new_desc) desc = new_desc + +/obj/item/proc/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + if(loaded_cell_type || accepted_cell_type) + set_extension(src, (power_supply_extension_type || /datum/extension/loaded_cell), (accepted_cell_type || loaded_cell_type), loaded_cell_type, charge_value) + +/obj/item/proc/handle_loadout_equip_replacement(obj/item/old_item) + return + +/obj/item/equipped(mob/user, slot) + . = ..() + // delay for 1ds to allow the rest of the call stack to resolve + if(!QDELETED(src) && !QDELETED(user) && user.get_equipped_slot_for_item(src) == slot) + try_burn_wearer(user, slot, 1) + +/obj/item/can_embed() + return !anchored && (!ismob(loc) || canremove) && (!loc || isturf(loc) || ismob(loc)) && !is_robot_module(src) diff --git a/code/game/objects/item_damage.dm b/code/game/objects/item_damage.dm index ab4422732d9..382fe5e7afe 100644 --- a/code/game/objects/item_damage.dm +++ b/code/game/objects/item_damage.dm @@ -18,8 +18,8 @@ return 0 //must return a number //Apply damage - damage = min(health, damage) - health = clamp(health - damage, 0, max_health) + damage = min(current_health, damage) + current_health = clamp(current_health - damage, 0, get_max_health()) check_health(damage, damage_type, damage_flags) return damage @@ -28,6 +28,16 @@ return TRUE . = (!throwing) ? ..() : FALSE +// We only do this for the extension as other stuff that overrides get_cell() handles EMP in an override. +/obj/item/emp_act(var/severity) + // we do not use get_cell() here as some devices may return a non-extension cell + var/datum/extension/loaded_cell/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + var/obj/item/cell/cell = cell_loaded?.get_cell() + if(cell) + cell.emp_act(severity) + update_icon() + return ..() + /obj/item/explosion_act(severity) if(QDELETED(src)) return @@ -39,7 +49,7 @@ return (mult * (4 - severity)) + (severity != 1? rand(-(mult / severity), (mult / severity)) : 0 ) /obj/item/proc/explosion_severity_damage_multiplier() - return CEILING(max_health / 3) + return CEILING(get_max_health() / 3) /obj/item/is_burnable() return simulated @@ -116,25 +126,3 @@ M.take_organ_damage(7) SET_STATUS_MAX(M, STAT_BLURRY, rand(3,4)) return - -/obj/item/get_examined_damage_string(health_ratio) - if(!can_take_damage()) - return - . = ..() - -///Returns whether the item can take damages or if its invulnerable -/obj/item/proc/can_take_damage() - return (health != ITEM_HEALTH_NO_DAMAGE) && (max_health != ITEM_HEALTH_NO_DAMAGE) - -///Returns whether the object is currently damaged. -/obj/item/proc/is_damaged() - return can_take_damage() && (health < max_health) - -///Returns the percentage of health remaining for this object. -/obj/item/proc/get_percent_health() - return can_take_damage()? round((health * 100)/max_health, 0.01) : 100 - -///Returns the percentage of damage done to this object. -/obj/item/proc/get_percent_damage() - //Clamp from 0 to 100 so health values larger than max_health don't return unhelpful numbers - return clamp(100 - get_percent_health(), 0, 100) \ No newline at end of file diff --git a/code/game/objects/item_interactions.dm b/code/game/objects/item_interactions.dm index 856871e9baa..01f887cf4ff 100644 --- a/code/game/objects/item_interactions.dm +++ b/code/game/objects/item_interactions.dm @@ -1,6 +1,6 @@ /obj/item/get_alt_interactions(var/mob/user) . = ..() - if(config.expanded_alt_interactions) + if(get_config_value(/decl/config/toggle/expanded_alt_interactions)) LAZYADD(., list( /decl/interaction_handler/pick_up, /decl/interaction_handler/drop, diff --git a/code/game/objects/item_materials.dm b/code/game/objects/item_materials.dm index f86ccb33173..96d492cfd77 100644 --- a/code/game/objects/item_materials.dm +++ b/code/game/objects/item_materials.dm @@ -28,20 +28,20 @@ /obj/item/proc/apply_wear() if(material && can_take_damage() && can_take_wear_damage() && prob(material.hardness)) if(material.is_brittle()) - health = 0 + current_health = 0 else - health-- + current_health-- check_health() /obj/item/proc/check_health(var/lastdamage = null, var/lastdamtype = null, var/lastdamflags = 0, var/consumed = FALSE) - if(health > 0 || !can_take_damage()) + if(current_health > 0 || !can_take_damage()) return //If invincible, or if we're not dead yet, skip if(lastdamtype == BRUTE) if(material?.is_brittle()) shatter(consumed) return else if(lastdamtype == BURN) - melt() + handle_melting() return physically_destroyed() @@ -87,15 +87,15 @@ if(new_material) material = GET_DECL(new_material) if(istype(material)) - //Only set the health if health is null. Some things define their own health value. + //Only set the current_health if health is null. Some things define their own health value. if(isnull(max_health)) max_health = round(material_health_multiplier * material.integrity, 0.01) if(max_health < 1) //Make sure to warn us if the values we set make the max_health be under 1 log_warning("The 'max_health' of '[src]'([type]) made out of '[material]' was calculated as [material_health_multiplier] * [material.integrity] == [max_health], which is smaller than 1.") - if(isnull(health)) //only set health if we didn't specify one already, so damaged objects on spawn and etc can be a thing - health = max_health + if(isnull(current_health)) //only set health if we didn't specify one already, so damaged objects on spawn and etc can be a thing + current_health = get_max_health() if(material.products_need_process()) START_PROCESSING(SSobj, src) diff --git a/code/game/objects/item_melting.dm b/code/game/objects/item_melting.dm new file mode 100644 index 00000000000..2d531eef7b3 --- /dev/null +++ b/code/game/objects/item_melting.dm @@ -0,0 +1,86 @@ +/obj/item/ProcessAtomTemperature() + + if(material && material.bakes_into_material && !isnull(material.bakes_into_at_temperature) && temperature >= material.bakes_into_at_temperature) + set_material(material.bakes_into_material) + + . = ..() + + if(QDELETED(src)) + return + + // Handle being burned by items that are too hot for you to touch. + // TODO: check holding organ coverage and be burned by hot items + // TODO: that one spell from D&D that heats up your armour + if(ismob(loc)) + var/mob/holder = loc + try_burn_wearer(holder, holder.get_equipped_slot_for_item(src)) + +/* + // Check if this is meltable at all. + var/list/meltable_materials + for(var/mat in matter) + var/decl/material/melt_material = GET_DECL(mat) + if(!isnull(melt_material.melting_point) && temperature >= melt_material.melting_point) + LAZYDISTINCTADD(meltable_materials, melt_material) + if(length(meltable_materials)) + . = null // Don't return PROCESS_KILL here. + handle_melting(meltable_materials) +*/ + +/obj/item/place_melted_product(list/meltable_materials) + + // Create the thing and copy over relevant info. + var/obj/item/melted_thing/melty_thing = new(null, material?.type) + melty_thing.name = "half-melted [name]" + melty_thing.w_class = w_class + melty_thing.desc = "[melty_thing.desc] It looks like it was once \a [src]." + melty_thing.matter = matter?.Copy() // avoid mutation + LAZYCLEARLIST(matter) + + // Start it cooking for next time. + melty_thing.temperature = temperature + QUEUE_TEMPERATURE_ATOM(melty_thing) + + melty_thing.forceMove(loc) + + // Destroy the old thing. + qdel(src) + // This will be recursive if the melty thing does not override this proc. + return melty_thing.handle_melting(meltable_materials) + +// This object is sort of a placeholder for a more nuanced melting and item damage system. +// The idea is if your gun is half-melted it should not function as a gun anymore. +/obj/item/melted_thing + name = "melted thing" + desc = "A half-melted object of some kind." + icon = 'icons/obj/melted_thing.dmi' + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_SMALL + material = /decl/material/solid/slag + material_alteration = MAT_FLAG_ALTERATION_COLOR + +/obj/item/melted_thing/handle_melting(var/list/meltable_materials) + SHOULD_CALL_PARENT(FALSE) + if(!LAZYLEN(matter) || !LAZYLEN(meltable_materials)) + return // Nothing to melt, don't automatically destroy non-matter objects here. + var/remaining_volume = loc?.get_reagent_space() || 0 + for(var/decl/material/melt_material as anything in meltable_materials) + var/melting_amount = max(1, max(min(matter[melt_material.type], round(remaining_volume / REAGENT_UNITS_PER_MATERIAL_UNIT)), SHEET_MATERIAL_AMOUNT)) + // Remove matter. + matter[melt_material.type] -= melting_amount + if(matter[melt_material.type] <= 0) + LAZYREMOVE(matter, melt_material.type) + // Add The Goo:tm: to our loc's reagents via a tracking var. + var/melted_result = melting_amount * REAGENT_UNITS_PER_MATERIAL_UNIT + if(remaining_volume > 0) + loc.add_to_reagents(melt_material.type, melted_result) + remaining_volume = loc.get_reagent_space() + // If our loc is full, spill into our loc's loc (could probably be handled by a recursive helper?) + else if(loc?.loc) + melted_result = min(melted_result, loc.loc.get_reagent_space()) + if(melted_result) + loc.loc.add_to_reagents(melt_material.type, melted_result) + // If we've melted all our matter, destroy the object. + if(!LAZYLEN(matter) && !QDELETED(src)) + material = null + physically_destroyed() diff --git a/code/game/objects/item_mob_overlay.dm b/code/game/objects/item_mob_overlay.dm index 2fc018063c2..a4a8b64d887 100644 --- a/code/game/objects/item_mob_overlay.dm +++ b/code/game/objects/item_mob_overlay.dm @@ -53,17 +53,22 @@ var/global/list/icon_state_cache = list() ..() update_world_inventory_state() -/mob/proc/get_bodytype_category() - return - /obj/item/reset_plane_and_layer() ..() update_world_inventory_state() -/obj/item/proc/get_mob_overlay(mob/user_mob, slot, bodypart) +/** +Returns a suffix for the icon_state to use for the overlay on the mob. +Allows to have different on mob icons depending on what state the item may be in. + */ +/obj/item/proc/get_mob_overlay_suffix(mob/user_mob, slot, bodypart) + return + +/obj/item/proc/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE) + var/state_modifier = user_mob?.get_overlay_state_modifier() if(!use_single_icon) - var/mob_state = (item_state || icon_state) + var/mob_state = "[item_state || icon_state][state_modifier]" var/mob_icon = global.default_onmob_icons[slot] var/decl/bodytype/root_bodytype = user_mob?.get_bodytype() if(istype(root_bodytype)) @@ -71,26 +76,29 @@ var/global/list/icon_state_cache = list() return root_bodytype.get_offset_overlay_image(mob_icon, mob_state, color, use_slot) return overlay_image(mob_icon, mob_state, color, RESET_COLOR) - var/bodytype = user_mob?.get_bodytype_category() || BODYTYPE_HUMANOID - var/useicon = get_icon_for_bodytype(bodytype) - if(bodytype != BODYTYPE_HUMANOID && !check_state_in_icon("[bodytype]-[slot]", useicon)) + var/bodytype = user_mob?.get_bodytype_category() || BODYTYPE_HUMANOID + var/useicon = get_icon_for_bodytype(bodytype) + var/suffix = get_mob_overlay_suffix(user_mob, slot, bodypart) + var/use_state = "[bodytype]-[slot][state_modifier][length(suffix)? "-[suffix]" : ""]" + + if(bodytype != BODYTYPE_HUMANOID && !check_state_in_icon(use_state, useicon) && use_fallback_if_icon_missing) var/fallback = get_fallback_slot(slot) - if(fallback && fallback != slot && check_state_in_icon("[bodytype]-[fallback]", useicon)) + if(fallback && fallback != slot && check_state_in_icon("[bodytype]-[fallback][state_modifier][length(suffix)? "-[suffix]" : ""]", useicon)) slot = fallback else bodytype = BODYTYPE_HUMANOID useicon = get_icon_for_bodytype(bodytype) + use_state = "[bodytype]-[slot][state_modifier][length(suffix)? "-[suffix]" : ""]" - var/use_state = "[bodytype]-[slot]" if(!check_state_in_icon(use_state, useicon) && global.bodypart_to_slot_lookup_table[slot]) - use_state = "[bodytype]-[global.bodypart_to_slot_lookup_table[slot]]" + use_state = "[bodytype]-[global.bodypart_to_slot_lookup_table[slot]][state_modifier][length(suffix)? "-[suffix]" : ""]" if(!check_state_in_icon(use_state, useicon)) - var/fallback = get_fallback_slot(slot) + var/fallback = use_fallback_if_icon_missing && get_fallback_slot(slot) if(!fallback) return new /image slot = fallback - use_state = "[bodytype]-[slot]" + use_state = "[bodytype]-[slot][state_modifier][length(suffix)? "-[suffix]" : ""]" if(!check_state_in_icon(use_state, useicon)) return new /image @@ -98,7 +106,8 @@ var/global/list/icon_state_cache = list() var/image/I = image(useicon, use_state) I.color = color I.appearance_flags = RESET_COLOR - . = adjust_mob_overlay(user_mob, bodytype, I, slot, bodypart) + + . = adjust_mob_overlay(user_mob, bodytype, I, slot, bodypart, use_fallback_if_icon_missing) /obj/item/proc/get_fallback_slot(var/slot) return @@ -109,7 +118,7 @@ var/global/list/icon_state_cache = list() // Ensure ..() is called only at the end of this proc, and that `overlay` is mutated rather than replaced. // This is necessary to ensure that all the overlays are generated and tracked prior to being passed to // the bodytype offset proc, which can scrub icon/icon_state information as part of the offset process. -/obj/item/proc/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/proc/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) var/decl/bodytype/root_bodytype = user_mob?.get_bodytype() if(root_bodytype && root_bodytype.bodytype_category != bodytype) var/list/overlays_to_offset = overlay.overlays @@ -121,7 +130,7 @@ var/global/list/icon_state_cache = list() adjusted_overlay.plane = I.plane adjusted_overlay.layer = I.layer overlay.overlays += adjusted_overlay - . = overlay + return overlay //Special proc belts use to compose their icon /obj/item/proc/get_on_belt_overlay() diff --git a/code/game/objects/items/blackout.dm b/code/game/objects/items/blackout.dm index bdbb311597d..d0528dc93ec 100644 --- a/code/game/objects/items/blackout.dm +++ b/code/game/objects/items/blackout.dm @@ -13,6 +13,9 @@ icon = 'icons/obj/items/blackout.dmi' icon_state = "device_blackout-off" max_health = ITEM_HEALTH_NO_DAMAGE + origin_tech = "{'magnets':2,'esoteric':2}" + material = /decl/material/solid/metal/aluminium + matter = list(/decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE) var/severity = 2 var/shots = 1 var/last_use = 0 diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 43f82d3b0c4..c9c67e53fc7 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -105,8 +105,8 @@ if(isnull(shuttle_name)) shuttle_name = S.shuttle update_linked_name(S, null, S.name) - events_repository.register(/decl/observ/name_set, S, src, .proc/update_linked_name) - events_repository.register(/decl/observ/destroyed, S, src, .proc/on_shuttle_destroy) + events_repository.register(/decl/observ/name_set, S, src, PROC_REF(update_linked_name)) + events_repository.register(/decl/observ/destroyed, S, src, PROC_REF(on_shuttle_destroy)) valid_z_levels += S.map_z area_prefix = S.name return TRUE @@ -119,8 +119,8 @@ desc = "Blueprints of \the [new_name]. There are several coffee stains on it." /obj/item/blueprints/shuttle/proc/on_shuttle_destroy(datum/destroyed) - events_repository.unregister(/decl/observ/name_set, destroyed, src, .proc/update_linked_name) - events_repository.unregister(/decl/observ/destroyed, destroyed, src, .proc/on_shuttle_destroy) + events_repository.unregister(/decl/observ/name_set, destroyed, src, PROC_REF(update_linked_name)) + events_repository.unregister(/decl/observ/destroyed, destroyed, src, PROC_REF(on_shuttle_destroy)) name = initial(name) desc = "Some dusty old blueprints. The markings are old, and seem entirely irrelevant for your wherabouts." valid_z_levels = list() diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index f8141b84b1e..1febbfd8949 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -75,7 +75,7 @@ . = new item_path(get_turf(src)) qdel(src) -/obj/structure/closet/body_bag/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/structure/closet/body_bag/handle_mouse_drop(atom/over, mob/user, params) if(over == user && (in_range(src, user) || (src in user.contents))) fold(user) return TRUE diff --git a/code/game/objects/items/books/_book.dm b/code/game/objects/items/books/_book.dm index af564436395..f4806822104 100644 --- a/code/game/objects/items/books/_book.dm +++ b/code/game/objects/items/books/_book.dm @@ -34,6 +34,19 @@ if(SSpersistence.is_tracking(src, /decl/persistence_handler/book)) . = QDEL_HINT_LETMELIVE +/obj/item/book/proc/get_style_css() + return {" + + "} + /obj/item/book/attack_self(var/mob/user) return try_to_read(user) || ..() diff --git a/code/game/objects/items/books/fluff/_fluff.dm b/code/game/objects/items/books/fluff/_fluff.dm new file mode 100644 index 00000000000..f7ce2ae2fbd --- /dev/null +++ b/code/game/objects/items/books/fluff/_fluff.dm @@ -0,0 +1,20 @@ +/obj/item/book/fluff + unique = TRUE + abstract_type = /obj/item/book/fluff + var/fluff_text + +/obj/item/book/fluff/Initialize() + . = ..() + if(!fluff_text) + log_debug("Fluff book [type] spawned with no fluff text.") + return INITIALIZE_HINT_QDEL + dat = {" + + + [get_style_css()] + + + [fluff_text] + + + "} diff --git a/code/game/objects/items/books/fluff/science.dm b/code/game/objects/items/books/fluff/science.dm new file mode 100644 index 00000000000..830026a5bb9 --- /dev/null +++ b/code/game/objects/items/books/fluff/science.dm @@ -0,0 +1,133 @@ +/obj/item/book/fluff/anomaly_spectroscopy + name = "Spectroscopy: Analysing the Anomalies of the Cosmos" + icon_state = "anomaly" + author = "Doctor Martin Boyle, Director Research at the Lower Hydrolian Sector Listening Array" + title = "Spectroscopy: Analysing the Anomalies of the Cosmos" + fluff_text = {" + It's perhaps one of the most exciting times to be alive, with the recent breakthroughs in understanding and categorisation of things we may one day no longer call + 'anomalies,' but rather 'infrequent or rare occurrences of certain celestial weather or phenomena.' Perhaps a little more long winded, but no less eloquent all the + same! Why, look at the strides we're making in piercing the walls of spacetime or our steadily improving ability to clarify and stabilise subspace emissions; it's + certainly an exciting time to be alive. For the moment, the Hydrolian hasn't seen two spatial anomalies alike but the day will come and it is soon, I can feel it. + "} + +/obj/item/book/fluff/materials_chemistry_analysis + name = "Materials Analysis and the Chemical Implications" + icon_state = "chemistry" + author = "Jasper Pascal, Senior Lecturer in Materials Analysis at the University of Jol'Nar" + title = "Materials Analysis and the Chemical Implications" + fluff_text = {" + In today's high tech research fields, leaps and bounds are being made every day. Whether it's great strides forward in our understanding of the physical universe + or the operation of some fancy new piece of equipment, it seems like all the cool fields are producing new toys to play with, leaving doddery old fields such as + materials analysis and chemistry relegated to the previous few centuries, when we were still learning the makeup and structure of the elements. +

    + Well, when you're out there building the next gryo-whatsitron or isotope mobility thingummy, remember how the field of archaeology experienced a massive new rebirth + following the excavations at Paranol IV and consider how all of the scientific greats will come crawling back to basic paradigms of natural philosophy when they discover + a new element that defies classification. I defy you to classify it without reviving this once great field! + "} + +/obj/item/book/fluff/anomaly_testing + name = "Anomalous Materials and Energies" + icon_state = "triangulate" + author = "Norman York, formerly of the Tyrolion Institute on Titan" + title = "Anomalous Materials and Energies" + fluff_text = {" +

    Contents

    +
      +
    1. Foreword: Modern attitude towards anomalies
    2. +
    3. Triangulating anomalous energy readings
    4. +
    5. Harvesting and utilising anomalous energy signatures
    6. +
    +
    +

    Modern attitude towards anomalies

    + It's only when confronted with things we don't know, that we may push back our knowledge of the world around us. Nowhere is this more obvious than the + vast and inscrutable mysterious of the cosmos that scholars from such august institutions as the Elysian Institute of the Sciences present + formulas and hypotheses for every few decades.
    +
    + Using our vast, telescopic array installations and deep space satellite networks, we are able to detect anomalous energy fields and formations in deep space, + but are limited to those that are large enough to output energy that will stretch across light years worth of distance between stars.
    +
    + While some sectors (such as the Hydrolian Rift and Keppel's Run) are replete with inexplicable energetic activity and unique phenomena found nowhere else in + the galaxy, the majority of space is dry, barren and cold - and if past experience has told us anything, it is that there are always more things we are + unable to explain.
    +
    + Indeed, a great source of knowledge and technology has always been those who come before us, in the form of the multitudinous ancient alien precursors that + have left scattered remnants of their great past all over settled (and unexplored) space.
    +
    + It is from xenoarchaeologists, high energy materials researchers, and technology reconstruction authorities that we are able to theorise on the gifts these + species have left behind, and in some cases even reverse engineer or rebuild the technology in question. My colleague, Doctor Raymond Ward of the + Tyrolian Institute on Titan, has made great breakthroughs in a related field through his pioneering development of universally reflective materials capable + of harvesting and 'bottling' up virtually any energy emissions yet encountered by spacefaring civilisations.
    +
    + And yet, there are some amongst us who do not see the benefits of those who have come before us - indeed, some among them profess the opinion that there + is no species that could possibly match humanity in it's achievements and knowledge, or simply that employing non-human technology is dangerous and unethical. + Folly, say I. If it is their desire to throw onto the wayside the greatest achievements in the history of the galaxy, simply for preferment of the + greatest achievements in the history of mankind, then they have no business in the establishment of science.
    + Contents +

    Triangulating anomalous energy readings

    + Strong energy emissions, when remaining constant from any one fixed location for millennia, can leave an 'imprint' or distinctive energy signature on other + matter composites that are spatially fixed relative to the source.
    +
    + By taking samples of such 'fixed' matter, we can apply complex analytics such as the modified Fourier Transform Procedure to reverse engineer the path of the + energy, and determine the approximate distance and direction that the energy source is, relative to the sample's point in space. Modern portable devices can do + all this purely by taking readings of local radiation.
    +
    + A canny researcher can thusly analyse radiation at pre-chosen points strategically scattered around an area, and if there are any anomalous energy + emissions in range of those points, combined the researcher can triangulate the source.
    + Contents +

    Harvesting and utilising anomalous energy signatures

    + As mentioned in the foreword, my colleague from the Tyrolian Institute on Saturn's moon of Titan, in the Sol System, Doctor Raymond Ward has made great strides + in the area of harvesting and application of the energy emitted by anomalous phenomena from around the galaxy (although I profess I have not yet seen him + venture further from his birthplace on Earth than the comfortable distance of the Sol Cis-Oort Satellite Sphere).
    +
    + By employing a patented semi-phased alloy with unique and fascinating properties, Ward's contraption is able to 'harvest' energy, store + it and redirect it later at will (with appropriate electronic mechanisms, of course). Although he professes to see or desire no commercial or material gain + for the application and use of said energy once it is harvested, there are no doubt myriad ways we can come to benefit from such things beyond mere research, + such as the reconstruction of torn cartilaginous tissue that a peculiar radiation from an amphibious species on Brachis IV was found to emit.
    + Contents + "} + +/obj/item/book/fluff/stasis + name = "Cellular Suspension, the New Cryogenics?" + icon_state = "stasis" + author = "Elvin Schmidt" + title = "Cellular Suspension, the New Cryogenics?" + fluff_text = {" +

    Contents

    +
      +
    1. Foreword: A replacement for cryosleep?
    2. +
    3. The breakthrough
    4. +
    5. Applying this new principle
    6. +
    +
    +

    Foreword: A replacement for cryosleep?

    + The development of rudimentary cryofreezing in the 20th and 21st centuries was hailed as a crank science by some, but many early visionaries recognised the + potential it had to change the way we approach so many fields, such as medicine, therapeutics, and space travel. It was breakthroughs in the field in the 22nd and + later centuries that turned the procedure from science fiction to science fact, however. Since then, cryogenics has become a hallmark of modern science, and + regarded as one of the great achievements of our era. As with all sciences however, they have their time and are superseded by newer technological miracles when + it is over.
    + Contents +

    The breakthrough

    + It was in examining the effects of decelerated high energy particles when transphased through a gravitational lens that the effects where primarily noticed. + Due to exigent properties of that dimension, transphasing those particles capable of existing with high stability levels has the effect of bringing + some of those effects into realspace. Examining the Hoffman emissions in particular, it was discovered that they exhibited a-entropic behaviour, and in what is + now termed the 'Effete Hoffman Principle,' it was found that metastabilising the Hoffman radiation resulted in the effect being applied across other physical + interactions, in particular forces and reactions.
    + Contents +

    Applying this new principle

    + When combined with an appropriate energy-effect replicate for cryogenics (slowing down biological activity, thus stabilising the organics), the effect is + effectively identical to cryogenics, and while it consumes vastly more power and requires extremely complex equipment, it's (for all intents and purposes) superior + to cryogenics, all that remains is to 'commercialise' the process by enabling cheaper development and mass production.
    + The Effete Hoffman Principle can be tweak-combined with other effects however, for different purposes. A division of PMC Research initially developed the application + in prisons as a literal 'suspension field' where convicts are held immobile in the air, and the use quickly spread to numerous other areas.
    +
    + By examining the material resonance properties of certain strong waveforms when combined with Hoffman radiation, an effect was produced able to reverse energy + transferral through matter, and to slow the effects of gravity. When combined with energy repulse technology, the triple effects compound themselves into a much + stronger field, although all three components do slightly different things. High energy researchers assure me of the following key points:
    +
      +
    • The energy repulsion factor provides a 'shell' capable of weak suspension.
    • +
    • The Hoffman emissions nullify energy transferral and other kinetic activity, maintaining stability inside the field.
    • +
    • The resonant waveform combines the effects of the above two points, and applies it magnified onto it's synced 'resonance' materials.
    • +
    + As an interesting aside, a carbon waveform was chosen for the field in prison suspension fields, due to it's resonance with organic matter.
    + Contents + "} diff --git a/code/game/objects/items/books/manuals/_manual.dm b/code/game/objects/items/books/manuals/_manual.dm index aa5c491e6f1..7cee55d5709 100644 --- a/code/game/objects/items/books/manuals/_manual.dm +++ b/code/game/objects/items/books/manuals/_manual.dm @@ -1,27 +1,21 @@ /obj/item/book/manual - icon = 'icons/obj/library.dmi' - unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified - var/url // Using full url or just tittle, example - Standard_Operating_Procedure (https://wiki.baystation12.net/index.php?title=Standard_Operating_Procedure) + unique = TRUE // Unable to be copied, unable to be modified + abstract_type = /obj/item/book/manual + var/guide_decl /obj/item/book/manual/Initialize() . = ..() - if(url) // URL provided for this manual - // If we haven't wikiurl or it included in url - just use url - if(config.wikiurl && !findtextEx(url, config.wikiurl, 1, length(config.wikiurl)+1)) - // If we have wikiurl, but it hasn't "index.php" then add it and making full link in url - if(config.wikiurl && !findtextEx(config.wikiurl, "/index.php", -10)) - if(findtextEx(config.wikiurl, "/", -1)) - url = config.wikiurl + "index.php?title=" + url - else - url = config.wikiurl + "/index.php?title=" + url - else //Or just making full link in url - url = config.wikiurl + "?title=" + url - dat = {" - - - - - - - - "} + var/guide_text = guide_decl && SScodex.get_manual_text(guide_decl) + if(!guide_text) + log_debug("Manual [type] spawned with invalid guide decl type ([guide_decl || null]).") + return INITIALIZE_HINT_QDEL + dat = {" + + + [get_style_css()] + + + [guide_text] + + + "} diff --git a/code/game/objects/items/books/manuals/engineering.dm b/code/game/objects/items/books/manuals/engineering.dm index cf54e3895fd..555b10c44e6 100644 --- a/code/game/objects/items/books/manuals/engineering.dm +++ b/code/game/objects/items/books/manuals/engineering.dm @@ -1,685 +1,76 @@ /obj/item/book/manual/engineering_guide - name = "Engineering Textbook" + name = "engineering reference manual" icon_state ="bookEngineering2" author = "Engineering Encyclopedia" title = "Engineering Textbook" - url = "Engineering" + guide_decl = /datum/codex_entry/guide/engineering /obj/item/book/manual/robotics_cyborgs - name = "Cyborgs for Dummies" + name = "robotics reference manual" icon_state = "borgbook" author = "XISC" title = "Cyborgs for Dummies" - - dat = {" - - - - - -

    Cyborgs for Dummies

    - -

    Chapters

    - -
      -
    1. Cyborg Related Equipment
    2. -
    3. Cyborg Modules
    4. -
    5. Cyborg Construction
    6. -
    7. Cyborg Maintenance
    8. -
    9. Cyborg Repairs
    10. -
    11. In Case of Emergency
    12. -
    - - -

    Cyborg Related Equipment

    - -

    Exosuit Fabricator

    - The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. - -

    Cyborg Recharging Station

    - This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. - -

    Robotics Control Console

    - This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again. - - -

    Cyborg Modules

    - When a cyborg is created it picks out of an array of modules to designate its purpose. There are 11 different cyborg modules.
    - All cyborg modules carry a flash. - -

    Standard Cyborg

    - The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
    A Standard Cyborg comes with: -
      -
    • Crowbar
    • -
    • Wrench
    • -
    • Stun Baton
    • -
    • Health Analyzer
    • -
    • Fire Extinguisher
    • -
    - -

    Research Cyborg

    - The research cyborg module is an effective researching machine. It is equipped with tools to effectively run RnD.A Research Cyborg comes with: -
      -
    • Portable Destructive Analyzer
    • -
    • Research Gripper
    • -
    • Sheet Loader
    • -
    • Robot Analyzer
    • -
    • Robot Card
    • -
    • Set of Engineering Tools
    • -
    • Laser Scalpel
    • -
    • Circular Saw
    • -
    • Fire Extinguisher
    • -
    • Syringe
    • -
    • Chemistry Gripper
    • -
    • Nanopaste
    • -
    - -

    Engineering Cyborg

    - The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
    An Engineering Cyborg comes with: -
      -
    • A basic set of engineering tools
    • -
    • Metal Synthesizer
    • -
    • Plasteel Synthesizer
    • -
    • Reinforced Glass Synthesizer
    • -
    • Wire Synthesizer
    • -
    • Fire Extinguisher
    • -
    • Roll of Tape
    • -
    • Built-in Optical Meson Scanners
    • -
    - -

    Mining Cyborg

    - The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines.
    A Mining Cyborg comes with: -
      -
    • Wrench
    • -
    • Scredriver
    • -
    • Crowbar
    • -
    • Ore Satchel
    • -
    • Borg Drill
    • -
    • Mining Gripper
    • -
    • Ore Scanner
    • -
    - -

    Security Cyborg

    - The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals.
    A Security Cyborg comes with: -
      -
    • Stun Baton
    • -
    • Handcuffs
    • -
    • Energy Gun
    • -
    • Megaphone
    • -
    • Roll of Tape
    • -
    - -

    Janitor Cyborg

    - The Janitor Cyborg module is equipped with various cleaning-facilitating devices.
    A Janitor Cyborg comes with: -
      -
    • Mop
    • -
    • Hand Bucket
    • -
    • Cleaning Spray Synthesizer and Spray Nozzle
    • -
    • Light Replacer
    • -
    • Trash Bag
    • -
    - -

    Service Cyborg

    - The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros."
    A Service Cyborg comes with: -
      -
    • Service Gripper
    • -
    • Bucket
    • -
    • Hoe
    • -
    • Hatchet
    • -
    • Zippo Lighter
    • -
    • Rapid-Service-Fabricator (Produces various entertainment and refreshment objects)
    • -
    • Plant Analyzer
    • -
    • Robot Harvester
    • -
    • Rolling Pin
    • -
    • Knife
    • -
    - -

    Clerical Cyborg

    - The clerical cyborg module is prepared to run the supply department, including a vareity of stamps.
    A clerical cyborg comes with: -
      -
    • Pen
    • -
    • Paper Dispenser
    • -
    • Clerical Gripper
    • -
    • Hand Labeler
    • -
    • Generic Stamp
    • -
    • Denied Stamp
    • -
    • Package Wrapper
    • -
    • Destination Tagger
    • -
    - -

    Crisis Cyborg

    - The crisis cyborg module is prepared to handle a variety of non-surgical medical emergencies.
    A medical cyborg comes with: -
      -
    • Crowbar
    • -
    • Health Analyzer
    • -
    • Reagent Scanner
    • -
    • Roller Bed Rack
    • -
    • Body Bag Rack
    • -
    • Hypospray
    • -
    • Automatic Defibrillator
    • -
    • Industrial Dropper
    • -
    • Syringe
    • -
    • Chemistry Gripper
    • -
    • Fire Extinguisher
    • -
    • Inflatables Dispenser
    • -
    • Roll of Tape
    • -
    - -

    Surgeon Cyborg

    - The surgeon cyborg modules is prepared to handle a variety of surgical medical emergencies.
    A medical cyborg comes with: -
      -
    • Set of Surgery Tools
    • -
    • Health Analyzer
    • -
    • Roller Bed Rack
    • -
    • Body Bag Rack
    • -
    • Hypospray
    • -
    • Automatic Defibrillator
    • -
    • Industrial Dropper
    • -
    • Syringe
    • -
    • Chemistry Gripper
    • -
    • Fire Extinguisher
    • -
    • Inflatables Dispenser
    • -
    • Roll of Tape
    • -
    - -

    Cyborg Construction

    - Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
    The required materials to make a cyborg are: -
      -
    • Metal
    • -
    • Two Flashes
    • -
    • One Power Cell (Preferably rated to 15000w)
    • -
    • Some electrical wires
    • -
    • One Human Brain
    • -
    • One Man-Machine Interface
    • -
    - Once you have acquired the materials, you can start on construction of your cyborg.
    To construct a cyborg, follow the steps below: -
      -
    1. Start the Exosuit Fabricators constructing all of the cyborg parts
    2. -
    3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
    4. -
    5. Once you have a Robot Head, place your two flashes inside the eye sockets
    6. -
    7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
    8. -
    9. Attach all of the Robot parts to the Robot frame
    10. -
    11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
    12. -
    13. Congratulations! You have a new cyborg!
    14. -
    - -

    Cyborg Maintenance

    - Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. - -

    Replacing a Power Cell

    - Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
    The steps to replace a cell are as follows: -
      -
    1. Unlock the Cyborg's Interface by swiping your ID on it
    2. -
    3. Open the Cyborg's outer panel using a crowbar
    4. -
    5. Remove the old power cell
    6. -
    7. Insert the new power cell
    8. -
    9. Close the Cyborg's outer panel using a crowbar
    10. -
    11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
    12. -
    - -

    Exposing the Internal Wiring

    - Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
    You can easily expose the internal wiring by following the steps below: -
      -
    1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
    2. -
    3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
    4. -
    - To re-seal the cyborg's internal wiring: -
      -
    1. Use a screwdriver to secure the cyborg's internal panel
    2. -
    3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
    4. -
    - -

    Cyborg Repairs

    - Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). - -

    Dents

    - If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. - Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. - -

    Excessive Heat Damage

    - If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
    To replace the internal wiring follow the steps below: -
      -
    1. Unlock the Cyborg's Interface by swiping your ID
    2. -
    3. Open the Cyborg's External Panel using a crowbar
    4. -
    5. Remove the Cyborg's Power Cell
    6. -
    7. Using a screwdriver, expose the internal wiring of the Cyborg
    8. -
    9. Replace the damaged wires inside the cyborg
    10. -
    11. Secure the internal wiring cover using a screwdriver
    12. -
    13. Insert the Cyborg's Power Cell
    14. -
    15. Close the Cyborg's External Panel using a crowbar
    16. -
    17. Lock the Cyborg's Interface by swiping your ID
    18. -
    - These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. - -

    In Case of Emergency

    - In case of emergency, there are a few steps you can take. - -

    "Rogue" Cyborgs

    - If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. - To repair the situation, follow these steps: -
      -
    1. Locate the nearest robotics console
    2. -
    3. Determine which cyborgs are "Rogue"
    4. -
    5. Press the lockdown button to immobilize the cyborg
    6. -
    7. Locate the cyborg
    8. -
    9. Expose the cyborg's internal wiring
    10. -
    11. Check to make sure the LawSync and AI Sync lights are lit
    12. -
    13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
    14. -
    15. Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.
    16. -
    17. Use a "Reset" upload moduleto reset the cyborg's laws
    18. -
    19. Proceed to a Robotics Control console
    20. -
    21. Remove the lockdown on the cyborg
    22. -
    - -

    As a last resort

    - If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

    WARNING:

    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason. - - - - "} + guide_decl = /datum/codex_entry/guide/robotics /obj/item/book/manual/engineering_construction - name = "Repairs and Construction" + name = "repair and construction reference manual" icon_state ="bookEngineering" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + author = "Engineering Encyclopedia" title = "Repairs and Construction" - url = "Guide_to_Construction" + guide_decl = /datum/codex_entry/guide/construction /obj/item/book/manual/engineering_particle_accelerator - name = "Particle Accelerator User's Guide" + name = "particle accelerator reference manual" icon_state ="bookParticleAccelerator" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + author = "Engineering Encyclopedia" title = "Particle Accelerator User's Guide" - -/obj/item/book/manual/engineering_particle_accelerator/Initialize() - . = ..() - dat = {" - - - - - -

    Experienced User's Guide

    - -

    Setting up the accelerator

    - -
      -
    1. Wrench all pieces to the floor
    2. -
    3. Add wires to all the pieces
    4. -
    5. Close all the panels with your screwdriver
    6. -
    - -

    Using the accelerator

    - -
      -
    1. Open the control panel
    2. -
    3. Set the speed to 2
    4. -
    5. Start firing at the singularity generator
    6. -
    7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
    8. -
    9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
    10. -
    - - - - "} - + guide_decl = /datum/codex_entry/guide/particle_accelerator /obj/item/book/manual/supermatter_engine - name = "Supermatter Engine Operating Manual" + name = "supermatter engine reference manual" icon_state = "bookSupermatter" author = "Central Engineering Division" title = "Supermatter Engine Operating Manual" - url = "Supermatter_Engine" + guide_decl = /datum/codex_entry/guide/supermatter /obj/item/book/manual/rust_engine - name = "R-UST Operating Manual" + name = "fusion reactor reference Manual" icon_state = "bookMagazine" author = "Cindy Crawfish" title = "R-UST Operating Manual" - url = "R-UST" + guide_decl = /datum/codex_entry/guide/fusion /obj/item/book/manual/engineering_hacking - name = "Hacking" + name = "hacking reference manual" icon_state ="bookHacking" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + author = "Engineering Encyclopedia" title = "Hacking" - url = "Hacking" + guide_decl = /datum/codex_entry/guide/hacking /obj/item/book/manual/engineering_singularity_safety - name = "Singularity Safety in Special Circumstances" + name = "singularity engine reference manual" icon_state ="bookEngineeringSingularitySafety" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + author = "Engineering Encyclopedia" title = "Singularity Safety in Special Circumstances" - - dat = {" - - - - -

    Singularity Safety in Special Circumstances

    - -

    Power outage

    - - A power problem has made you lose power? Could be wiring problems or syndicate power sinks. In any case follow these steps: - -
      -
    1. PANIC!
    2. -
    3. Get your ass over to engineering! QUICKLY!!!
    4. -
    5. Get to the Area Power Controller which controls the power to the emitters.
    6. -
    7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
    8. -
    9. Open the console and disengage the cover lock.
    10. -
    11. Pry open the APC with a Crowbar.
    12. -
    13. Take out the empty power cell.
    14. -
    15. Put in the new, full power cell - if you don't have one, continue with step 15.
    16. -
    17. Quickly put on a Radiation suit.
    18. -
    19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
    20. -
    21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
    22. -
    23. Grab your crowbar and pry away the tile closest to the APC.
    24. -
    25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
    26. -
    27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
    28. -
    29. GET THE FUCK OUT OF THERE!!!
    30. -
    - -

    Shields get damaged

    - -
      -
    1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
    2. -
    - - - "} + guide_decl = /datum/codex_entry/guide/singularity /obj/item/book/manual/ripley_build_and_repair - name = "APLU \"Ripley\" Construction and Operation Manual" + name = "exosuit construction reference manual" icon_state ="book" - author = "Randall Varn, Einstein Engines Senior Mechanic" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + author = "Randall Varn, Einstein Engines Senior Mechanic" title = "APLU \"Ripley\" Construction and Operation Manual" - - dat = {" - - - - -
    -
    - Weyland-Yutani - Building Better Worlds -

    Autonomous Power Loader Unit \"Ripley\"

    -
    -

    Specifications:

    -
      -
    • Class: Autonomous Power Loader
    • -
    • Scope: Logistics and Construction
    • -
    • Weight: 820kg (without operator and with empty cargo compartment)
    • -
    • Height: 2.5m
    • -
    • Width: 1.8m
    • -
    • Top speed: 5km/hour
    • -
    • Operation in vacuum/hostile environment: Possible -
    • Airtank volume: 500 liters
    • -
    • Devices: -
        -
      • Hydraulic clamp
      • -
      • High-speed drill
      • -
      -
    • -
    • Propulsion device: Powercell-powered electro-hydraulic system
    • -
    • Powercell capacity: Varies
    • -
    - -

    Construction:

    -
      -
    1. Connect all exosuit parts to the chassis frame.
    2. -
    3. Connect all hydraulic fittings and tighten them up with a wrench.
    4. -
    5. Adjust the servohydraulics with a screwdriver.
    6. -
    7. Wire the chassis (Cable is not included).
    8. -
    9. Use the wirecutters to remove the excess cable if needed.
    10. -
    11. Install the central control module (Not included. Use supplied datadisk to create one).
    12. -
    13. Secure the mainboard with a screwdriver.
    14. -
    15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
    16. -
    17. Secure the peripherals control module with a screwdriver.
    18. -
    19. Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).
    20. -
    21. Secure the internal armor plating with a wrench.
    22. -
    23. Weld the internal armor plating to the chassis.
    24. -
    25. Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).
    26. -
    27. Secure the external reinforced armor plating with a wrench.
    28. -
    29. Weld the external reinforced armor plating to the chassis.
    30. -
    - -

    Additional Information:

    -
      -
    • The firefighting variation is made in a similar fashion.
    • -
    • A firesuit must be connected to the firefighter chassis for heat shielding.
    • -
    • Internal armor is plasteel for additional strength.
    • -
    • External armor must be installed in 2 parts, totalling 10 sheets.
    • -
    • Completed exosuit is more resilient against fire, and is a bit more durable overall.
    • -
    • The Company is determined to ensure the safety of its investments employees.
    • -
    - - - "} + guide_decl = /datum/codex_entry/guide/mech_construction /obj/item/book/manual/atmospipes - name = "Pipes and You: Getting To Know Your Scary Tools" + name = "atmospherics reference manual" icon_state = "pipingbook" author = "Maria Crash, Senior Atmospherics Technician" title = "Pipes and You: Getting To Know Your Scary Tools" - dat = {" - - - - - -

    Contents

    -
      -
    1. Author's Foreword
    2. -
    3. Basic Piping
    4. -
    5. Insulated Pipes
    6. -
    7. Atmospherics Devices
    8. -
    9. Heat Exchange Systems
    10. -
    11. Final Checks
    12. -

    - -

    HOW TO NOT SUCK QUITE SO HARD AT ATMOSPHERICS


    - Or: What the fuck does a "pressure regulator" do?

    - - Alright. It has come to my attention that a variety of people are unsure of what a "pipe" is and what it does. - Apparently, there is an unnatural fear of these arcane devices and their "gases." Spooky, spooky. So, - this will tell you what every device constructable by an ordinary pipe dispenser within atmospherics actually does. - You are not going to learn what to do with them to be the super best person ever, or how to play guitar with passive gates, - or something like that. Just what stuff does.

    - - -

    Basic Pipes

    - The boring ones.
    - Most ordinary pipes are pretty straightforward. They hold gas. If gas is moving in a direction for some reason, gas will flow in that direction. - That's about it. Even so, here's all of your wonderful pipe options.
    - -
      -
    • Straight pipes: They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this - standard one-meter size, so most things will take up as much space as one of these.
    • -
    • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
    • -
    • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
    • -
    • 4-way manifold: A four-way junction.
    • -
    • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh, use them to decorate your house or something.
    • -
    • Manual valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
    • -
    • Manual T-valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


    • -
    - - An important note here is that pipes are now done in three distinct lines - general, supply, and scrubber. You can move gases between these with a universal adapter. Use the correct position for the correct location. - Connecting scrubbers to a supply position pipe makes you an idiot who gives everyone a difficult job. Insulated and HE pipes don't go through these positions. - -

    Insulated Pipes

    -
  • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
  • -
  • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
  • -
  • 4-way manifold: A four-way junction.
  • -
  • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh. Use them to decorate your house or something.
  • -
  • Manual Valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
  • -
  • Manual T-Valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


  • - -

    Insulated Pipes


    - Special Public Service Announcement.
    - Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.

    - -

    Devices:

    - They actually do something.
    - This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now. - Stop it. It's unbecoming. Most of these are fairly straightforward.
    - -
      -
    • Gas pump: Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 15000 kPa (kilopascals). - Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa - (though 18 kPa is preferred when using internals with pure oxygen, for various reasons). A high-powered variant will move gas more quickly at the expense of consuming more power. Do not turn the distribution loop up to 15000 kPa. - You will make engiborgs cry and the Chief Engineer will beat you.
    • -
    • Pressure regulator: These replaced the old passive gates. You can choose to regulate pressure by input or output, and regulate flow rate. Regulating by input means that when input pressure is above the limit, gas will flow. - Regulating by output means that when pressure is below the limit, gas will flow. Flow rate can be controlled.
    • -
    • Unary vent: The basic vent used in rooms. It pumps gas into the room, but can't suck it back out. Controlled by the room's air alarm system.
    • -
    • Scrubber: The other half of room equipment. Filters air, and can suck it in entirely in what's called a "panic siphon." Activating a panic siphon without very good reason will kill someone. Don't do it.
    • -
    • Meter: A little box with some gauges and numbers. Fasten it to any pipe or manifold and it'll read you the pressure in it. Very useful.
    • -
    • Gas mixer: Two sides are input, one side is output. Mixes the gases pumped into it at the ratio defined. The side perpendicular to the other two is "node 2," for reference, on non-mirrored mixers.. - Output is controlled by flow rate. There is also an "omni" variant that allows you to set input and output sections freely..
    • -
    • Gas filter: Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe, - the rest will continue out the other side. Can also output from 0-4500 kPa. The "omni" vairant allows you to set input and output sections freely.
    • -
    - -

    Heat Exchange Systems

    - Will not set you on fire.
    - These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt), - a higher temperature will raise pressure, and a lower one will lower temperature.
    - -
  • Pipe: This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.
  • -
  • Bent pipe: Take a wild guess.
  • -
  • Junction: The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.
  • -
  • Heat exchanger: These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch. - This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions.

  • - - That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please. - - - - - "} + guide_decl = /datum/codex_entry/guide/atmospherics /obj/item/book/manual/evaguide - name = "EVA Gear and You: Not Spending All Day Inside" + name = "\improper EVA reference manual" icon_state = "evabook" author = "Maria Crash, Senior Atmospherics Technician" title = "EVA Gear and You: Not Spending All Day Inside" - dat = {" - - - - - -

    EVA Gear and You: Not Spending All Day Inside

    - Or: How not to suffocate because there's a hole in your shoes
    - -

    Contents

    -
      -
    1. A foreword on using EVA gear
    2. -
    3. Donning a Civilian Suit
    4. -
    5. Putting on a Hardsuit
    6. -
    7. Cyclers and Other Modification Equipment
    8. -
    9. Final Checks
    10. -
    -
    - - EVA gear. Wonderful to use. It's useful for mining, engineering, and occasionally just surviving, if things are that bad. Most people have EVA training, - but apparently there are some people out in space who don't. This guide should give you a basic idea of how to use this gear, safely. It's split into two sections: - Civilian suits and hardsuits.

    - -

    Civilian Suits

    - The bulkiest things this side of Alpha Centauri
    - These suits are the grey ones that are stored in EVA. They're the more simple to get on, but are also a lot bulkier, and provide less protection from environmental hazards such as radiation or physical impact. - As Medical, Engineering, Security, and Mining all have hardsuits of their own, these don't see much use, but knowing how to put them on is quite useful anyways.

    - - First, take the suit. It should be in three pieces: A top, a bottom, and a helmet. Put the bottom on first, shoes and the like will fit in it. If you have magnetic boots, however, - put them on on top of the suit's feet. Next, get the top on, as you would a shirt. It can be somewhat awkward putting these pieces on, due to the makeup of the suit, - but to an extent they will adjust to you. You can then find the snaps and seals around the waist, where the two pieces meet. Fasten these, and double-check their tightness. - The red indicators around the waist of the lower half will turn green when this is done correctly. Next, put on whatever breathing apparatus you're using, be it a gas mask or a breath mask. Make sure the oxygen tube is fastened into it. - Put on the helmet now, straightforward, and make sure the tube goes into the small opening specifically for internals. Again, fasten seals around the neck, a small indicator light in the inside of the helmet should go from red to off when all is fastened. - There is a small slot on the side of the suit where an emergency oxygen tank or extended emergency oxygen tank will fit, - but it is recommended to have a full-sized tank on your back for EVA.

    - - These suits tend to be wearable by most species. They're large and flexible. They might be pretty uncomfortable for some, though, so keep that in mind.

    - -

    Hardsuits

    - Heavy, uncomfortable, still the best option.
    - These suits come in Engineering, Mining, and the Armory. There's also a couple Medical Hardsuits in EVA. These provide a lot more protection than the standard suits.

    - - Similarly to the other suits, these are split into three parts. Fastening the pant and top are mostly the same as the other spacesuits, with the exception that these are a bit heavier, - though not as bulky. The helmet goes on differently, with the air tube feeding into the suit and out a hole near the left shoulder, while the helmet goes on turned ninety degrees counter-clockwise, - and then is screwed in for one and a quarter full rotations clockwise, leaving the faceplate directly in front of you. There is a small button on the right side of the helmet that activates the helmet light. - The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.

    - - These suits generally only fit one species. Standard-issue suits are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.

    - -

    Modification Equipment

    - How to actually make hardsuits fit you.
    - There's a variety of equipment that can modify hardsuits to fit species that can't fit into them, making life quite a bit easier.

    - - The first piece of equipment is a suit cycler. This is a large machine resembling the storage pods that are in place in some places. These are machines that will automatically tailor a suit to certain specifications. - The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will be painful. - These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

    - - There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not recommend using them unless no other option is available. - -

    Final Checks

    -
      -
    • Are all seals fastened correctly?
    • -
    • If you have modified it manually, is absolutely everything sealed perfectly?
    • -
    • Do you either have shoes on under the suit, or magnetic boots on over it?
    • -
    • Do you have a mask on and internals on the suit or your back?
    • -
    • Do you have a way to communicate with your fellow crew in case something goes wrong?
    • -
    • Do you have a second person watching if this is a training session?

    • -
    - - If you don't have any further issues, go out and do whatever is necessary. - - - - "} + guide_decl = /datum/codex_entry/guide/eva diff --git a/code/game/objects/items/books/manuals/manuals.dm b/code/game/objects/items/books/manuals/manuals.dm index fc6dba675d1..6af9c841691 100644 --- a/code/game/objects/items/books/manuals/manuals.dm +++ b/code/game/objects/items/books/manuals/manuals.dm @@ -1,145 +1,27 @@ /obj/item/book/manual/chef_recipes - name = "Chef Recipes" + name = "recipe book" icon_state = "cooked_book" author = "Victoria Ponsonby" title = "Chef Recipes" - -/obj/item/book/manual/chef_recipes/Initialize() - . = ..() - dat = {" - - - - - [SScodex.get_guide(/decl/codex_category/recipes)] - - - "} + guide_decl = /decl/codex_category/recipes /obj/item/book/manual/barman_recipes - name = "Mixology 101" + name = "cocktail recipe book" icon_state = "barbook" author = "Sir John Rose" title = "Mixology 101" - -/obj/item/book/manual/barman_recipes/Initialize() - . = ..() - dat = {" - - - - - [SScodex.get_guide(/decl/codex_category/cocktails)] - - - "} + guide_decl = /decl/codex_category/cocktails /obj/item/book/manual/detective - name = "The Film Noir: Proper Procedures for Investigations" + name = "forensics reference manual" icon_state ="bookDetective" author = "The Company" title = "The Film Noir: Proper Procedures for Investigations" - - dat = {" - - - - -

    Detective Work

    - - Between your bouts of self-narration and drinking whiskey on the rocks, you might get a case or two to solve.
    - To have the best chance to solve your case, follow these directions: -

    -

      -
    1. Go to the crime scene.
    2. -
    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog).
    4. -
    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
    6. -
    7. Return to your office.
    8. -
    9. Using your forensic scanning computer, scan your scanner to upload all of your evidence into the database.
    10. -
    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    12. -
    13. If you have 80% or more of the print (The print is displayed), go to step 10, otherwise continue to step 8.
    14. -
    15. Look for clues from the suit fibres you found on your perpetrator, and go about looking for more evidence with this new information, scanning as you go.
    16. -
    17. Try to get a fingerprint card of your perpetrator, as if used in the computer, the prints will be completed on their dossier.
    18. -
    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
    20. -
    21. Since you now have both your dossier and the name of the person, print both out as evidence and get security to nab your baddie.
    22. -
    23. Give yourself a pat on the back and a bottle of the ship's finest vodka, you did it!
    24. -
    -

    - It really is that easy! Good luck! - - - "} + guide_decl = /datum/codex_entry/guide/detective /obj/item/book/manual/nuclear - name = "Fission Mailed: Nuclear Sabotage 101" + name = "nuclear device reference manual" icon_state ="bookNuclear" author = "Syndicate" title = "Fission Mailed: Nuclear Sabotage 101" - - dat = {" - - - - -

    Nuclear Explosives 101

    - Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.

    - - First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.
    - -

    To make the nuclear device functional

    -
      -
    • Place the nuclear device in the designated detonation zone.
    • -
    • Extend and anchor the nuclear device from its interface.
    • -
    • Insert the nuclear authorisation disk into the slot.
    • -
    • Type the numeric authorisation code into the keypad. This should have been provided.
      - Note: If you make a mistake, press R to reset the device. -
    • Press the E button to log on to the device.
    • -

    - - You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.

    - Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.
    - Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.

    - - So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
    - Note: THE BOMB IS STILL SET AND WILL DETONATE

    - - Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.

    - - Remember the order:
    - Disk, Code, Safety, Timer, Disk, RUN!

    - Intelligence Analysts believe that normal corporate procedure is for the Captain to secure the nuclear authentication disk.

    - - Good luck! - - - "} + guide_decl = /datum/codex_entry/guide/nuclear_sabotage diff --git a/code/game/objects/items/books/manuals/medical.dm b/code/game/objects/items/books/manuals/medical.dm index f4d2e8a6d30..9bca7d84990 100644 --- a/code/game/objects/items/books/manuals/medical.dm +++ b/code/game/objects/items/books/manuals/medical.dm @@ -1,55 +1,22 @@ /obj/item/book/manual/medical_diagnostics_manual - name = "Medical Diagnostics Manual" + name = "medical diagnostics manual" desc = "First, do no harm. A detailed medical practitioner's guide." icon_state = "bookMedical" author = "Medical Department" title = "Medical Diagnostics Manual" - url = "Guide_to_Medicine" - -/obj/item/book/manual/medical_diagnostics_manual/Initialize() - . = ..() - dat = {" - - - - -
    -

    The Oath

    - - The Medical Oath sworn by recognised medical practitioners in the employ of [global.using_map.company_name]
    - -
      -
    1. Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.
    2. -
    3. I recognise that the practice of medicine is a privilege with which comes considerable responsibility and I will not abuse my position.
    4. -
    5. I will practise medicine with integrity, humility, honesty, and compassion-working with my fellow doctors and other colleagues to meet the needs of my patients.
    6. -
    7. I shall never intentionally do or administer anything to the overall harm of my patients.
    8. -
    9. I will not permit considerations of gender, race, religion, political affiliation, sexual orientation, nationality, or social standing to influence my duty of care.
    10. -
    11. I will oppose policies in breach of human rights and will not participate in them. I will strive to change laws that are contrary to my profession's ethics and will work towards a fairer distribution of health resources.
    12. -
    13. I will assist my patients to make informed decisions that coincide with their own values and beliefs and will uphold patient confidentiality.
    14. -
    15. I will recognise the limits of my knowledge and seek to maintain and increase my understanding and skills throughout my professional life. I will acknowledge and try to remedy my own mistakes and honestly assess and respond to those of others.
    16. -
    17. I will seek to promote the advancement of medical knowledge through teaching and research.
    18. -
    19. I make this declaration solemnly, freely, and upon my honour.
    20. -

    - -
    - - - - - - "} + guide_decl = /datum/codex_entry/guide/ailments /obj/item/book/manual/chemistry_recipes - name = "Guide to Medicines & Drugs" + name = "pharmacology reference manual" desc = "A thick manual of chemistry, formulae and recipes useful for a Chemist." icon_state = "bookChemistry" author = "Big Pharma" - title = "Guide to Medicines & Drugs" - url = "List_of_Medical_Chemicals" \ No newline at end of file + title = "Guide to Pharmacology" + guide_decl = /decl/codex_category/materials/chemistry + +/obj/item/book/manual/surgical + name = "surgical reference manual" + icon_state = "bookMedical" + author = "Dr. Holmes MD" + title = "Guide to Surgery" + guide_decl = /decl/codex_category/surgery diff --git a/code/game/objects/items/books/manuals/science.dm b/code/game/objects/items/books/manuals/science.dm index 0894e7b787b..b7ff9268ecc 100644 --- a/code/game/objects/items/books/manuals/science.dm +++ b/code/game/objects/items/books/manuals/science.dm @@ -1,376 +1,13 @@ /obj/item/book/manual/excavation - name = "Out on the Dig" + name = "excavation reference manual" icon_state = "excavation" author = "Professor Patrick Mason, Curator of the Antiquities Museum on Ichar VII" title = "Out on the Dig" - dat = {" - - - - - -

    Contents

    -
      -
    1. Prepping the expedition
    2. -
    3. Knowing your tools
    4. -
    5. Finding the dig
    6. -
    7. Analysing deposits
    8. -
    9. Extracting your first find
    10. -
    -
    - -

    Prepping the expedition

    - Every digsite I've been to, someone has forgotten something and I've never yet been to a dig that hasn't had me hiking to get to it - so gather your gear - and get it to the site the first time. You learn quick that time is money, when you've got a shipful of bandits searching for you the next valley over, - but don't be afraid to clear some space if there are any inconvenient boulders in the way.
    -
      -
    • Floodlights (if it's dark)
    • -
    • Wooden trestle tables (for holding tools and finds)
    • -
    • Suspension field generator
    • -
    • Load bearing servitors (such as a mulebot, or hover-tray)
    • -
    • Spare energy packs
    • -

    - Contents - -

    Knowing your tools

    - Every archaeologist has a plethora of tools at their disposal, but here's the important ones:
    -
      -
    • Picks, pickaxes, and brushes - don't underestimate the the smallest or largest in your arsenal, each one clears a different amount - of the rockface so each one has a use.
    • -
    • Measuring tape - don't leave home without it, you can use it to measure the depth a rock face has been excavated to.
    • -
    • GPS locator - knowing where you are is the first step to not be lost.
    • -
    • Core sampler - use this to take core samples from rock faces, which you can then run to the lab for analysis.
    • -
    • Depth scanner - uses X-ray diffraction to locate anomalous densities in rock, indicating archaeological deposits or mineral veins. - Comes with a handy reference log containing coordinates and time of each scan.
    • -
    • Alden-Saraspova counter - uses a patented application of Fourier Transform analysis to determine the difference between background and - exotic radiation. Use it to determine how far you are from anomalous energy sources.
    • -
    • Radio beacon locator - leave a beacon at an item of interest, then track it down later with this handy gadget. Watch for interference from other - devices though.
    • -
    • Flashlight or portable light source - Self explanatory, I hope.
    • -
    • Environmental safety gear - This one's dependent on the environment you're working in, but enclosed footwear and a pack of internals - could save your life.
    • -
    • Anomaly safety gear - A biosealed and catalysis-resistant suit along with eye shielding, tinted hood, and non-reactive disposable gloves are - the best kind of protection you can hope for from the errors our forebears may have unleashed.
    • -
    • Personal defence weapon - Never know what you'll find on the dig: pirates, natives, ancient guardians, carnivorous wildlife... - it pays in blood to be prepared.
    • -

    - Contents - -

    Finding the dig

    - Wouldn't be an archaeologist without their dig, but everyone has to start somewhere. Here's a basic procedure I go through when cataloguing a new planet:
    -
      -
    • Get in touch with the locals (in particular geologists, miners, and farmers) - Never know what's been turned up by accident, then left to - gather dust on a shelf.
    • -
    • Check the obvious areas first - even if you're pressed for time, these ones are the generally easiest to search, and the most likely targets - of your rivals.
    • -
    • Do some prospecting - the earth mother isn't in the habit of displaying her secrets to the world (although sometimes you get lucky). - Drop a shaft and clear away a bit of surface rock here and there, you never know what might be lurking below the surface.
    • -
    • Tips on unearthing a deposit - How do you know when you're golden? Look for telltale white strata that looks strange or out of place, or if - something has broken under your pick while you're digging. Your depth scanner is your best friend, but even it can't distinguish between - ordinary minerals and ancient leavings, if in doubt then err on the side of caution.
    • -

    - Contents - -

    Analysing the contents of a dig

    - You've found some unusual strata, but it's not all peaches from here. No archaeologist ever managed to pull a bone from the earth without doing thorough - chemical analysis on every two meters of rock face nearby.
    -
      -
    • Take core samples - Grab a rock core for every 4m^2.
    • -
    • Clear around any potential finds - Clear away ordinary rock, leaving your prizes reachable in a clearly marked area.
    • -
    • Haul off excess rock - It's easy for a dig to get cluttered, and a neat archaeologist is a successful archaeologist.
    • -
    • Don't be afraid to be cautious - It's slower sometimes, but the extra time will be worth the payoff when you find an Exolitic relic.
    • -
    • Chemical analysis - I won't go into detail here, but the labwork is essential to any successful extraction. Marshal your core samples, and - send them off to the labcoated geniuses.
    • -

    - Contents - -

    Extracting your first find

    -
      -
    • Scan the rock - Use a depth scanner to determine the find's depth and clearance. DON'T FORGET THESE.
    • -
    • Choose stasis field - Chemical analysis on a core sample from the rock face will tell you which field is necessary to extract the find safely.
    • -
    • Setup field gen - Bolt it down, choose the field, check the charge, and activate it. If you forget it, you'll wish you hadn't when that priceless - Uryom vase crumbles as it sees the light of day.
    • -
    • FUNCTIONAL AND SAFE digging - Dig into the rock until you've cleared away a depth equal to (the anomaly depth MINUS the clearance range). The find - should come loose on it's own, but it will be in the midst of a chunk of rock. Use a welder or miniature excavation tool to clear away the excess.
    • -
    • FANCY AND SPEEDY digging - Dig into the rock until you've cleared away a depth equal to the anomaly depth, but without any of your strokes - entering the clearance range.
    • -
    • The big find - Sometimes, you'll chance upon something big, both literally and figuratively. Giant statues and functioning remnants of Precursor - technology are just as exciting, to the right buyers. If your digging leaves a large boulder behind, dig into it normally and see if anything's hidden - inside.
    • -

    - Contents - - - - "} + guide_decl = /datum/codex_entry/guide/xenoarchaeology /obj/item/book/manual/mass_spectrometry - name = "High Power Mass Spectrometry: A Comprehensive Guide" + name = "mass spectrometry reference manual" icon_state = "analysis" author = "Winton Rice, Chief Mass Spectrometry Technician at the Institute of Applied Sciences on Arcadia" title = "High powered mass spectrometry, a comprehensive guide" - dat = {" - - - - - -

    Contents

    -
      -
    1. A note on terms
    2. -
    3. Analysis progression
    4. -
    5. Heat management
    6. -
    7. Ambient radiation
    8. -
    - -
    -

    A note on terms

    -
      -
    • Mass spectrometry - MS is the procedure used used to measure and quantify the components of matter. The most prized tool in the field of - 'Materials analysis.'
    • -
    • Radiometric dating - MS applied using the right carrier reagents can be used to accurately determine the age of a sample.
    • -
    • Dissonance ratio - This is a pseudoarbitrary value indicating the overall presence of a particular element in a greater composite. - It takes into account volume, density, molecular excitation and isotope spread.
    • -
    • Vacuum seal integrity - A reference to how close an airtight seal is to failure.
    • -

    - Contents - -

    Analysis progression

    - Modern mass spectrometry requires constant attention from the diligent researcher in order to be successful. There are many different elements to juggle, - and later chapters will delve into them. For the spectrometry assistant, the first thing you need to know is that the scanner wavelength is automatically - calculated for you. Just tweak the settings and try to match it with the actual wavelength as closely as possible.
    -
    - Contents - -

    Seal integrity

    - In order to maintain sterile and environmentally static procedures, a special chamber is set up inside the spectrometer. It's protected by a proprietary vacuum seal - produced by top tier industrial science. It will only last for a certain number of scans before failing outright, but it can be resealed through use of nanite paste. - Unfortunately, it's susceptible to malforming under heat stress so exposing it to higher temperatures will cause it's operation life to drop significantly.
    -
    - Contents - -

    Heat management

    - The scanner relies on a gyro-rotational system that varies in speed and intensity. Over the course of an ordinary scan, the RPMs can change dramatically. Higher RPMs - means greater heat generation, but is necessary for the ongoing continuation of the scan. To offset heat production, spectrometers have an inbuilt cooling system. - Researchers can modify the flow rate of water to aid in dropping temperature as necessary, but are advised that frequent water replacements may be necessary - depending on coolant purity. Other substances may be viable substitutes, but nowhere near as effective as water itself.
    -
    - Contents - -

    Ambient radiation

    - Researchers are warned that while operational, mass spectrometers emit period bursts of radiation and are thus advised to wear protective gear. In the event of - radiation spikes, there is also a special shield that can be lowered to block emissions. Lowering this, however, will have the effect of blocking the scanner - so use it sparingly.
    -
    - Contents - - - - "} - -/obj/item/book/manual/anomaly_spectroscopy - name = "Spectroscopy: Analysing the Anomalies of the Cosmos" - icon_state = "anomaly" - author = "Doctor Martin Boyle, Director Research at the Lower Hydrolian Sector Listening Array" - title = "Spectroscopy: Analysing the Anomalies of the Cosmos" - dat = {" - - - - -
    - It's perhaps one of the most exciting times to be alive, with the recent breakthroughs in understanding and categorisation of things we may one day no longer call - 'anomalies,' but rather 'infrequent or rare occurrences of certain celestial weather or phenomena.' Perhaps a little more long winded, but no less eloquent all the - same! Why, look at the strides we're making in piercing the walls of spacetime or our steadily improving ability to clarify and stabilise subspace emissions; it's - certainly an exciting time to be alive. For the moment, the Hydrolian hasn't seen two spatial anomalies alike but the day will come and it is soon, I can feel it. - - "} - -/obj/item/book/manual/materials_chemistry_analysis - name = "Materials Analysis and the Chemical Implications" - icon_state = "chemistry" - author = "Jasper Pascal, Senior Lecturer in Materials Analysis at the University of Jol'Nar" - title = "Materials Analysis and the Chemical Implications" - dat = {" - - - - -
    - In today's high tech research fields, leaps and bounds are being made every day. Whether it's great strides forward in our understanding of the physical universe - or the operation of some fancy new piece of equipment, it seems like all the cool fields are producing new toys to play with, leaving doddery old fields such as - materials analysis and chemistry relegated to the previous few centuries, when we were still learning the makeup and structure of the elements.
    -
    - Well, when you're out there building the next gryo-whatsitron or isotope mobility thingummy, remember how the field of archaeology experienced a massive new rebirth - following the excavations at Paranol IV and consider how all of the scientific greats will come crawling back to basic paradigms of natural philosophy when they discover - a new element that defies classification. I defy you to classify it without reviving this once great field! - "} - -/obj/item/book/manual/anomaly_testing - name = "Anomalous Materials and Energies" - icon_state = "triangulate" - author = "Norman York, formerly of the Tyrolion Institute on Titan" - title = "Anomalous Materials and Energies" - dat = {" - - - - - -

    Contents

    -
      -
    1. Foreword: Modern attitude towards anomalies
    2. -
    3. Triangulating anomalous energy readings
    4. -
    5. Harvesting and utilising anomalous energy signatures
    6. -
    -
    -

    Modern attitude towards anomalies

    - It's only when confronted with things we don't know, that we may push back our knowledge of the world around us. Nowhere is this more obvious than the - vast and inscrutable mysterious of the cosmos that scholars from such august institutions as the Elysian Institute of the Sciences present - formulas and hypotheses for every few decades.
    -
    - Using our vast, telescopic array installations and deep space satellite networks, we are able to detect anomalous energy fields and formations in deep space, - but are limited to those that are large enough to output energy that will stretch across light years worth of distance between stars.
    -
    - While some sectors (such as the Hydrolian Rift and Keppel's Run) are replete with inexplicable energetic activity and unique phenomena found nowhere else in - the galaxy, the majority of space is dry, barren and cold - and if past experience has told us anything, it is that there are always more things we are - unable to explain.
    -
    - Indeed, a great source of knowledge and technology has always been those who come before us, in the form of the multitudinous ancient alien precursors that - have left scattered remnants of their great past all over settled (and unexplored) space.
    -
    - It is from xenoarchaeologists, high energy materials researchers, and technology reconstruction authorities that we are able to theorise on the gifts these - species have left behind, and in some cases even reverse engineer or rebuild the technology in question. My colleague, Doctor Raymond Ward of the - Tyrolian Institute on Titan, has made great breakthroughs in a related field through his pioneering development of universally reflective materials capable - of harvesting and 'bottling' up virtually any energy emissions yet encountered by spacefaring civilisations.
    -
    - And yet, there are some amongst us who do not see the benefits of those who have come before us - indeed, some among them profess the opinion that there - is no species that could possibly match humanity in it's achievements and knowledge, or simply that employing non-human technology is dangerous and unethical. - Folly, say I. If it is their desire to throw onto the wayside the greatest achievements in the history of the galaxy, simply for preferment of the - greatest achievements in the history of mankind, then they have no business in the establishment of science.
    - Contents - -

    Triangulating anomalous energy readings

    - Strong energy emissions, when remaining constant from any one fixed location for millennia, can leave an 'imprint' or distinctive energy signature on other - matter composites that are spatially fixed relative to the source.
    -
    - By taking samples of such 'fixed' matter, we can apply complex analytics such as the modified Fourier Transform Procedure to reverse engineer the path of the - energy, and determine the approximate distance and direction that the energy source is, relative to the sample's point in space. Modern portable devices can do - all this purely by taking readings of local radiation.
    -
    - A canny researcher can thusly analyse radiation at pre-chosen points strategically scattered around an area, and if there are any anomalous energy - emissions in range of those points, combined the researcher can triangulate the source.
    - Contents - -

    Harvesting and utilising anomalous energy signatures

    - As mentioned in the foreword, my colleague from the Tyrolian Institute on Saturn's moon of Titan, in the Sol System, Doctor Raymond Ward has made great strides - in the area of harvesting and application of the energy emitted by anomalous phenomena from around the galaxy (although I profess I have not yet seen him - venture further from his birthplace on Earth than the comfortable distance of the Sol Cis-Oort Satellite Sphere).
    -
    - By employing a patented semi-phased alloy with unique and fascinating properties, Ward's contraption is able to 'harvest' energy, store - it and redirect it later at will (with appropriate electronic mechanisms, of course). Although he professes to see or desire no commercial or material gain - for the application and use of said energy once it is harvested, there are no doubt myriad ways we can come to benefit from such things beyond mere research, - such as the reconstruction of torn cartilaginous tissue that a peculiar radiation from an amphibious species on Brachis IV was found to emit.
    - Contents - - - - "} - -/obj/item/book/manual/stasis - name = "Cellular Suspension, the New Cryogenics?" - icon_state = "stasis" - author = "Elvin Schmidt" - title = "Cellular Suspension, the New Cryogenics?" - dat = {" - - - - - -

    Contents

    -
      -
    1. Foreword: A replacement for cryosleep?
    2. -
    3. The breakthrough
    4. -
    5. Applying this new principle
    6. -
    -
    -

    Foreword: A replacement for cryosleep?

    - The development of rudimentary cryofreezing in the 20th and 21st centuries was hailed as a crank science by some, but many early visionaries recognised the - potential it had to change the way we approach so many fields, such as medicine, therapeutics, and space travel. It was breakthroughs in the field in the 22nd and - later centuries that turned the procedure from science fiction to science fact, however. Since then, cryogenics has become a hallmark of modern science, and - regarded as one of the great achievements of our era. As with all sciences however, they have their time and are superseded by newer technological miracles when - it is over.
    - Contents - -

    The breakthrough

    - It was in examining the effects of decelerated high energy particles when transphased through a gravitational lens that the effects where primarily noticed. - Due to exigent properties of that dimension, transphasing those particles capable of existing with high stability levels has the effect of bringing - some of those effects into realspace. Examining the Hoffman emissions in particular, it was discovered that they exhibited a-entropic behaviour, and in what is - now termed the 'Effete Hoffman Principle,' it was found that metastabilising the Hoffman radiation resulted in the effect being applied across other physical - interactions, in particular forces and reactions.
    - Contents - -

    Applying this new principle

    - When combined with an appropriate energy-effect replicate for cryogenics (slowing down biological activity, thus stabilising the organics), the effect is - effectively identical to cryogenics, and while it consumes vastly more power and requires extremely complex equipment, it's (for all intents and purposes) superior - to cryogenics, all that remains is to 'commercialise' the process by enabling cheaper development and mass production.
    - The Effete Hoffman Principle can be tweak-combined with other effects however, for different purposes. A division of PMC Research initially developed the application - in prisons as a literal 'suspension field' where convicts are held immobile in the air, and the use quickly spread to numerous other areas.
    -
    - By examining the material resonance properties of certain strong waveforms when combined with Hoffman radiation, an effect was produced able to reverse energy - transferral through matter, and to slow the effects of gravity. When combined with energy repulse technology, the triple effects compound themselves into a much - stronger field, although all three components do slightly different things. High energy researchers assure me of the following key points:
    -
      -
    • The energy repulsion factor provides a 'shell' capable of weak suspension.
    • -
    • The Hoffman emissions nullify energy transferral and other kinetic activity, maintaining stability inside the field.
    • -
    • The resonant waveform combines the effects of the above two points, and applies it magnified onto it's synced 'resonance' materials.
    • -
    - As an interesting aside, a carbon waveform was chosen for the field in prison suspension fields, due to it's resonance with organic matter.
    - Contents - - - - "} \ No newline at end of file + guide_decl = /datum/codex_entry/guide/mass_spectrometry diff --git a/code/game/objects/items/books/skill/_skill.dm b/code/game/objects/items/books/skill/_skill.dm new file mode 100644 index 00000000000..e2ff9fb7868 --- /dev/null +++ b/code/game/objects/items/books/skill/_skill.dm @@ -0,0 +1,283 @@ +/* +Skill books that increase your skills while you activate and hold them +*/ + +/obj/item/book/skill + name = "textbook" // requires default names for tradershop, cant rely on Initialize for names + desc = "A blank textbook. (Notify admin)" + author = "The Oracle of Bakersroof" + icon_state = "book2" + force = 4 + w_class = ITEM_SIZE_LARGE // Skill books are THICC with knowledge. Up one level from regular books to prevent library-in-a-bag silliness. + unique = TRUE + material = /decl/material/solid/organic/plastic + matter = list(/decl/material/solid/organic/wood = MATTER_AMOUNT_REINFORCEMENT) + abstract_type = /obj/item/book/skill + + var/decl/hierarchy/skill/skill // e.g. SKILL_LITERACY + var/skill_req = SKILL_NONE // The level the user needs in the skill to benefit from the book, e.g. SKILL_PROF + var/weakref/reading // To check if the book is actively being used + var/custom = FALSE // To bypass init stuff, for player made textbooks and weird books. If true must have details manually set + var/ez_read = FALSE // Set to TRUE if you can read it without basic literacy skills + + var/skill_name = "missing skill name" + var/progress = INFINITY // used to track the progress of making a custom book. defaults as finished so, you know, you can read the damn thing + + var/static/list/skill_name_patterns = list( + "$SKILL_NAME$ for Idiots", + "How To Learn $SKILL_NAME$ and Not Get Laughed At", + "Teaching Yourself $SKILL_NAME$: Volume $RAND$", + "Getting the Hands-Off Experience You Need with $SKILL_NAME$", + "Master $SKILL_NAME$ in $RAND$ easy steps!", + "$SKILL_NAME$ Just Like Mum", + "How To $SKILL_NAME$ Good Enough For Your Father", + "How To Win Your Dad's Approval With $SKILL_NAME$", + "Make a Living with $SKILL_NAME$ Like Your Old Man Always Wanted You To", + "$SKILL_NAME$: Secret Techniques", + "The Dos, Don'ts and Oh Gods Please Nos of $SKILL_NAME$", + "The Death Of $SKILL_NAME$", + "Everything You Never Wanted To Know About $SKILL_NAME$ But Have Been Reluctantly Forced To Find Out", + "$SKILL_NAME$ For The Busy Professional", + "Learning $SKILL_NAME$ In A Hurry Because You Lied On Your Resume", + "Help! My Life Suddenly Depends On $SKILL_NAME$", + "What The Fuck is $ARTICLE_SKILL_NAME$?", + "Starting $ARTICLE_SKILL_NAME$ Business By Yourself", + "Even You Can Learn $SKILL_NAME$!", + "How To Impress Your Parents with $SKILL_NAME$", + "How To Become A Master of $SKILL_NAME$", + "Everything The Government Doesn't Want You To Know About $SKILL_NAME$", + "$SKILL_NAME$ For Kids!", + "$SKILL_NAME$: Volume $RAND$", + "Understanding $SKILL_NAME$: $RAND_TH$ Edition", + "Dealing With Ungrateful Customers Dissatisfied With Your Perfectly Acceptable $SKILL_NAME$ Services", + "Really big book of $SKILL_NAME$" + ) + + // Lists used when producing custom skillbooks. + var/static/list/failure_messages = list( + "Your hand slips and you accidentally rip your pen through several pages, ruining your hard work!", + "Your pen slips, dragging a haphazard line across both open pages! Now you need to do those again!" + ) + /// Messages are in order of progress. + var/static/list/progress_messages = list( + "Still quite a few blank pages left.", + "Feels like you're near halfway done.", + "You've made good progress.", + "Just needs a few finishing touches.", + "And then finish it. Done!" + ) + var/static/list/charge_messages = list( + "Your mind instantly recoils at the idea of having to write another textbook. No thank you!", + "You are far too mentally exhausted to write another textbook. Maybe another day.", + "Your hand aches in response to the very idea of more textbook writing." + ) + +/obj/item/book/skill/Initialize() + + . = ..() + + global.events_repository.register(/decl/observ/moved, src, src, PROC_REF(check_buff)) + + if(!custom && skill && skill_req)// custom books should already have all they need + + skill_name = initial(skill.name) + + var/title_name = capitalize(skill_name) + title = replacetext(pick(skill_name_patterns), "$SKILL_NAME$", title_name) + title = replacetext(title, "$RAND$", rand(1,100)) + title = replacetext(title, "$RAND_TH$", "[rand(1,100)]\th") + title = replacetext(title, "$ARTICLE_SKILL_NAME$", capitalize(ADD_ARTICLE(title_name))) + title = "\"[title]\"" + + switch(skill_req) // check what skill_req the book has + if(SKILL_NONE) // none > basic + name = "beginner [skill_name] textbook" + desc = "A copy of [title] by [author]. The only reason this book is so big is because all the words are printed very large! Presumably so you, an idiot, can read it." + if(SKILL_BASIC) // basic > adept + name = "intermediate [skill_name] textbook" + desc = "A copy of [title] by [author]. Dry and long, but not unmanageable. Basic knowledge is required to understand the concepts written." + if(SKILL_ADEPT) // adept > expert + name = "advanced [skill_name] textbook" + desc = "A copy of [title] by [author]. Those not already trained in the subject will have a hard time reading this. Try not to drop it either, it will put a hole in the floor." + if(SKILL_EXPERT to SKILL_MAX) //expert > prof + name = "theoretical [skill_name] textbook" + desc = "A copy of [title] by [author]. Significant experience in the subject is required to read this incredibly information dense block of paper. Sadly, does not come in audio form." + + if((!skill || !skill_req) && !custom)//That's a bad book, so just grab ANY child to replace it. Custom books are fine though they can be bad if they want. + if(subtypesof(src.type)) + var/new_book = pick(subtypesof(src.type)) + new new_book(src.loc) + qdel_self() + +/datum/skill_buff/skill_book + limit = 1 // you can only read one book at a time nerd, therefore you can only get one buff at a time + +/obj/item/book/skill/get_single_monetary_worth() + . = max(..(), 200) + (100 * skill_req) + +/obj/item/book/skill/proc/check_can_read(mob/user) + if(QDELETED(user)) + return FALSE + var/effective_title = length(title) ? title : "the textbook" + if(!CanPhysicallyInteract(user)) + to_chat(user, SPAN_WARNING("You can't reach [effective_title]!")) + return FALSE + if(!skill || (custom && progress == 0)) + to_chat(user, SPAN_WARNING("[capitalize(effective_title)] is blank!")) + return FALSE + if(custom && progress <= length(progress_messages)) + to_chat(user, SPAN_WARNING("[capitalize(effective_title)] is unfinished! You can't learn from it in this state!")) + return FALSE + if(!ez_read &&!user.skill_check(SKILL_LITERACY, SKILL_BASIC)) + to_chat(user, SPAN_WARNING(pick(list( + "Haha, you know you can't read. Good joke. Put [effective_title] back.", + "You open up [effective_title], but there aren't any pictures, so you close it again.", + "You don't know how to read! What good is [effective_title] to you?!" + )))) + return FALSE + + if(reading) + if(reading.resolve() != user) + to_chat(user, SPAN_WARNING("\The [reading.resolve()] is already reading [effective_title]!")) + else + to_chat(user, SPAN_WARNING("You are already reading [effective_title]!")) + return FALSE + + if(user.too_many_buffs(/datum/skill_buff/skill_book)) + to_chat(user, SPAN_WARNING("You can't read two books at once!")) + return FALSE + + if(!user.skill_check(skill, skill_req)) + to_chat(user, SPAN_WARNING("[capitalize(title)] is too advanced for you! Try something easier, perhaps the \"For Idiots\" edition?")) + return FALSE + + if(user.get_skill_value(skill) > skill_req) + to_chat(user, SPAN_WARNING("You already know everything [effective_title] has to teach you!")) + return FALSE + + return TRUE + +/obj/item/book/skill/verb/read_book() + set name = "Read Book" + set category = "Object" + set src in view(1) + try_to_read(usr) + +/obj/item/book/skill/try_to_read(mob/user) + + if(isobserver(user)) + to_chat(user, SPAN_WARNING("Ghosts can't read! Go away!")) + return TRUE + + if(isturf(loc)) + user.face_atom(src) + + if(user && user == reading?.resolve()) + //Close book, get rid of buffs + unlearn(user) + to_chat(user, SPAN_NOTICE("You close [title]. That's enough learning for now.")) + reading = null + STOP_PROCESSING(SSprocessing, src) + return TRUE + + if(!check_can_read(user)) + return FALSE + + to_chat(user, SPAN_NOTICE("You open up [title] and start reading...")) + if(!user.do_skilled(4 SECONDS, SKILL_LITERACY, src, 0.75)) + to_chat(user, SPAN_DANGER("Your perusal of [title] was interrupted!")) + return TRUE + + if(!check_can_read(user)) + return TRUE + + var/list/buff = list() + buff[skill] = 1 + user.buff_skill(buff, buff_type = /datum/skill_buff/skill_book) + reading = weakref(user) + to_chat(user, SPAN_NOTICE("You find the information you need! Better keep the page open to reference it.")) + START_PROCESSING(SSprocessing, src) + return TRUE + +// buff removal +/obj/item/book/skill/proc/unlearn(var/mob/user) + var/list/F = user.fetch_buffs_of_type(/datum/skill_buff/skill_book, 0) + for(var/datum/skill_buff/skill_book/S in F) + S.remove() + +/obj/item/book/skill/Process() + if(!reading) + return PROCESS_KILL + check_buff() + +/obj/item/book/skill/proc/check_buff() + if(!reading) + return + var/mob/R = reading.resolve() + if(!istype(R) || !CanPhysicallyInteract(R)) + remove_buff() + +/obj/item/book/skill/proc/remove_buff() + var/mob/R = reading?.resolve() + reading = null + if(istype(R)) + to_chat(R, SPAN_DANGER("You lose the page you were on! You can't cross-reference using [title] like this!")) + if(R.fetch_buffs_of_type(/datum/skill_buff/skill_book, 0)) + unlearn(R) + STOP_PROCESSING(SSprocessing, src) + +/obj/item/book/skill/Destroy() + global.events_repository.unregister(/decl/observ/moved, src, src) + remove_buff() + . = ..() + + + + + + +////////////////////// +// SHELF SHELF SHELF// +////////////////////// + +/obj/structure/bookcase/skill_books + name = "textbook bookcase" + // Contains a list of parent types but doesn't actually DO anything with them. Use a child of this book case + var/static/list/catalogue = list( + /obj/item/book/skill/organizational/finance, + /obj/item/book/skill/organizational/literacy, + /obj/item/book/skill/general/eva, + /obj/item/book/skill/general/mech, + /obj/item/book/skill/general/pilot, + /obj/item/book/skill/general/hauling, + /obj/item/book/skill/general/computer, + /obj/item/book/skill/service/botany, + /obj/item/book/skill/service/cooking, + /obj/item/book/skill/security/combat, + /obj/item/book/skill/security/weapons, + /obj/item/book/skill/security/forensics, + /obj/item/book/skill/engineering/construction, + /obj/item/book/skill/engineering/electrical, + /obj/item/book/skill/engineering/atmos, + /obj/item/book/skill/engineering/engines, + /obj/item/book/skill/research/devices, + /obj/item/book/skill/research/science, + /obj/item/book/skill/medical/chemistry, + /obj/item/book/skill/medical/medicine, + /obj/item/book/skill/medical/anatomy + ) + +//give me ALL the textbooks +/obj/structure/bookcase/skill_books/all/Initialize() + . = ..() + for(var/category in catalogue) + for(var/real_book in subtypesof(category)) + new real_book(src) + +//Bookshelf with some random textbooks +/obj/structure/bookcase/skill_books/random/Initialize() + . = ..() + for(var/category in catalogue) + for(var/real_book in subtypesof(category)) + if(prob(20)) + new real_book(src) diff --git a/code/game/objects/items/books/skill/_skill_custom.dm b/code/game/objects/items/books/skill/_skill_custom.dm new file mode 100644 index 00000000000..66fa10cf151 --- /dev/null +++ b/code/game/objects/items/books/skill/_skill_custom.dm @@ -0,0 +1,193 @@ +////////////////////// +//Custom Skill Books// +////////////////////// + +//custom skill books made by players. Right now it is extremely dodgy and bad and i'm sorry +/obj/item/book/skill/custom + name = "blank textbook" + desc = "A somewhat heftier blank book, just ready to filled with knowledge and sold at an unreasonable price." + custom = TRUE + author = null + progress = 0 + icon_state = "tb_white" + var/skill_option_string = "Skill" //changes to "continue writing content" when the book is in progress + var/true_author //Used to keep track of who is actually writing the book. + var/writing_time = 15 SECONDS // time it takes to write a segment of the book. This happens 6 times total + +//these all show up in the book fabricator +/obj/item/book/skill/custom/circle + icon_state = "tb_white_circle" +/obj/item/book/skill/custom/star + icon_state = "tb_white_star" +/obj/item/book/skill/custom/hourglass + icon_state = "tb_white_hourglass" +/obj/item/book/skill/custom/cracked + icon_state = "tb_white_cracked" +/obj/item/book/skill/custom/gun + icon_state = "tb_white_gun" +/obj/item/book/skill/custom/wrench + icon_state = "tb_white_wrench" +/obj/item/book/skill/custom/glass + icon_state = "tb_white_glass" + +/obj/item/book/skill/custom/cross + icon_state = "tb_white_cross" +/obj/item/book/skill/custom/text + icon_state = "tb_white_text" +/obj/item/book/skill/custom/download + icon_state = "tb_white_download" +/obj/item/book/skill/custom/uparrow + icon_state = "tb_white_uparrow" +/obj/item/book/skill/custom/percent + icon_state = "tb_white_percent" +/obj/item/book/skill/custom/flask + icon_state = "tb_white_flask" +/obj/item/book/skill/custom/detective + icon_state = "tb_white_detective" +/obj/item/book/skill/custom/device + icon_state = "tb_white_device" +/obj/item/book/skill/custom/smile + icon_state = "tb_white_smile" +/obj/item/book/skill/custom/exclamation + icon_state = "tb_white_exclamation" +/obj/item/book/skill/custom/question + icon_state = "tb_white_question" + +/obj/item/book/skill/custom/attackby(obj/item/pen, mob/user) + if(IS_PEN(pen)) + + if(!user.skill_check(SKILL_LITERACY, SKILL_BASIC)) + to_chat(user, SPAN_WARNING("You can't even read, yet you want to write a whole educational textbook?")) + return + if(!user.skill_check(SKILL_LITERACY, SKILL_PROF)) + to_chat(user, SPAN_WARNING("You have no clue as to how to write an entire textbook in a way that is actually useful. Maybe a regular book would be better?")) + return + var/state_check = skill_option_string // the state skill_option_string is in just before opening the input + var/choice = input(user, "What would you like to change?","Textbook editing") as null|anything in list("Title", "Author", skill_option_string) + if(!can_write(pen,user)) + return + + switch(choice) + if("Title") + edit_title(pen, user) + + if("Skill") + if(state_check != "Skill") // make sure someone hasn't already started the book while we were staring at menus woops + to_chat(user, SPAN_WARNING("The skill has already been selected and the writing started.")) + return + edit_skill(pen, user) + + if("Continue writing content") + if(state_check != "Continue writing content") + return + continue_skill(pen, user) + + if("Author") + edit_author(pen, user) + + else + return + + if(skill && title && author) // we have everything we need so lets set a good description + desc = "A handwritten textbook titled [title], by [author]. Looks like it teaches [skill_name]." + return + ..() + +/obj/item/book/skill/custom/proc/can_write(var/obj/item/pen, var/mob/user) + if(user.get_active_hand() == pen && CanPhysicallyInteractWith(user,src) && !QDELETED(src) && !QDELETED(pen)) + return TRUE + else + to_chat(user,SPAN_DANGER("How can you expect to write anything when you can't physically put pen to paper?")) + return FALSE + +/obj/item/book/skill/custom/proc/edit_title(var/obj/item/pen, var/mob/user) + var/newtitle = reject_bad_text(sanitize_safe(input(user, "Write a new title:"))) + if(!can_write(pen,user)) + return + if(!newtitle) + to_chat(user, "The title is invalid.") + return + else + newtitle = user.handle_writing_literacy(user, newtitle) + if(newtitle) + title = newtitle + SetName(title) + +/obj/item/book/skill/custom/proc/edit_author(var/obj/item/pen, var/mob/user) + var/newauthor = sanitize(input(user, "Write the author's name:")) + if(!can_write(pen,user)) + return + if(!newauthor) + to_chat(user, SPAN_WARNING("The author name is invalid.")) + return + else + newauthor = user.handle_writing_literacy(user, newauthor) + if(newauthor) + author = newauthor + +/obj/item/book/skill/custom/proc/edit_skill(var/obj/item/pen, var/mob/user) + if(user.skillset.literacy_charges <= 0) + to_chat(user, SPAN_WARNING(pick(charge_messages))) + return + + //Choosing the skill + var/list/skill_choices = list() + for(var/decl/hierarchy/skill/S in global.skills) + if(user.skill_check(S.type, SKILL_BASIC)) + LAZYADD(skill_choices, S) + var/decl/hierarchy/skill/skill_choice = input(user, "What subject does your textbook teach?", "Textbook skill selection") as null|anything in skill_choices + if(!can_write(pen,user) || progress > length(progress_messages)) + return + if(!skill_choice) + to_chat(user, SPAN_WARNING("Textbook skill selection cancelled.")) + return + var/newskill = skill_choice.type + + //Choosing the level + var/list/skill_levels = skill_choice.levels.Copy() + for(var/SL in skill_levels) + if(!user.skill_check(newskill, skill_levels.Find(SL))) + LAZYREMOVE(skill_levels, SL) + else + skill_levels[SL] = skill_levels.Find(SL) + LAZYREMOVE(skill_levels,skill_levels[1]) + var/newskill_level = input(user, "What level of education does it provide?","Textbook skill level") as null|anything in skill_levels + if(!can_write(pen,user) || progress > length(progress_messages)) + return + if(!newskill_level) + to_chat(user, SPAN_WARNING("Textbook skill level selection cancelled.")) + return + var/usable_level = skill_levels[newskill_level] + if(newskill && usable_level) + if(!do_after(user, writing_time, src)) + to_chat(user, SPAN_DANGER(pick(failure_messages))) + return + //everything worked out so now we can put the learnings in the book + to_chat(user, SPAN_NOTICE("You start writing your book, getting a few pages in.")) + skill = newskill + skill_name = skill_choice.name + skill_req = (usable_level - 1) + desc = "A handwritten textbook on [skill_choice]! Wow!" + progress++ + skill_option_string = "Continue writing content" + true_author = user.name + +/obj/item/book/skill/custom/proc/continue_skill(var/obj/item/pen, var/mob/user) + if(user.skillset.literacy_charges <= 0) + to_chat(user, SPAN_WARNING(pick(charge_messages))) + return + if(progress > length(progress_messages)) // shouldn't happen but here just in case + to_chat(user, SPAN_WARNING("This book is already finished! There's no need to add anything else!")) + return + if(true_author != user.name) + to_chat(user, SPAN_WARNING("This isn't your work and you're not really sure how to continue it.")) + return + else + if(!do_after(user, writing_time, src)) + to_chat(user, SPAN_DANGER(pick(failure_messages))) + return + to_chat(user, SPAN_NOTICE("You continue writing your book. [progress_messages[progress]]")) + progress++ + if(progress > length(progress_messages)) // book is finished! yay! + user.skillset.literacy_charges -= 1 + skill_option_string = "Cancel" \ No newline at end of file diff --git a/code/game/objects/items/books/skill/engineering.dm b/code/game/objects/items/books/skill/engineering.dm new file mode 100644 index 00000000000..077a2486740 --- /dev/null +++ b/code/game/objects/items/books/skill/engineering.dm @@ -0,0 +1,96 @@ +/* +ENGINEERING +*/ +/obj/item/book/skill/engineering + abstract_type = /obj/item/book/skill/engineering + icon_state = "bookEngineering" + +//construction +/obj/item/book/skill/engineering/construction/ + author = "Robert Bildar" + skill = SKILL_CONSTRUCTION + +/obj/item/book/skill/engineering/construction/basic + name = "beginner construction textbook" + +/obj/item/book/skill/engineering/construction/adept + skill_req = SKILL_BASIC + name = "intermediate construction textbook" + +/obj/item/book/skill/engineering/construction/expert + skill_req = SKILL_ADEPT + name = "advanced construction textbook" + +/obj/item/book/skill/engineering/construction/prof + skill_req = SKILL_EXPERT + name = "theoretical construction textbook" + +//electrical +/obj/item/book/skill/engineering/electrical + skill = SKILL_ELECTRICAL + author = "Ariana Vanderbalt" + +/obj/item/book/skill/engineering/electrical/basic + name = "beginner electrical engineering textbook" + +/obj/item/book/skill/engineering/electrical/adept + skill_req = SKILL_BASIC + name = "intermediate electrical engineering textbook" + +/obj/item/book/skill/engineering/electrical/expert + skill_req = SKILL_ADEPT + name = "advanced electrical engineering textbook" + +/obj/item/book/skill/engineering/electrical/prof + skill_req = SKILL_EXPERT + name = "theoretical electrical engineering textbook" + +//engines +/obj/item/book/skill/engineering/engines + skill = SKILL_ENGINES + author = "Gilgamesh Scholz" + +/obj/item/book/skill/engineering/engines/basic + name = "beginner engines textbook" + +/obj/item/book/skill/engineering/engines/adept + skill_req = SKILL_BASIC + name = "intermediate engines textbook" + +/obj/item/book/skill/engineering/engines/expert + skill_req = SKILL_ADEPT + name = "advanced engines textbook" + +/obj/item/book/skill/engineering/engines/prof + skill_req = SKILL_EXPERT + name = "theoretical engines textbook" + +/obj/item/book/skill/engineering/engines/prof/magazine + name = "theoretical engines magazine" + title = "\improper WetSkrell magazine" + icon_state = "bookMagazine" + custom = TRUE + author = "Unknown" + desc = "Sure, it includes highly detailed information on extremely advanced engine and power generator systems... but why is it written in marker on a tentacle porn magazine?" + w_class = ITEM_SIZE_NORMAL + +//atmos +/obj/item/book/skill/engineering/atmos + skill = SKILL_ATMOS + author = "Maria Crash" + icon_state = "pipingbook" + +/obj/item/book/skill/engineering/atmos/basic + name = "beginner atmospherics textbook" + +/obj/item/book/skill/engineering/atmos/adept + skill_req = SKILL_BASIC + name = "intermediate atmospherics textbook" + +/obj/item/book/skill/engineering/atmos/expert + skill_req = SKILL_ADEPT + name = "advanced atmospherics textbook" + +/obj/item/book/skill/engineering/atmos/prof + skill_req = SKILL_EXPERT + name = "theoretical atmospherics textbook" diff --git a/code/game/objects/items/books/skill/general.dm b/code/game/objects/items/books/skill/general.dm new file mode 100644 index 00000000000..5696db54a14 --- /dev/null +++ b/code/game/objects/items/books/skill/general.dm @@ -0,0 +1,110 @@ +/* +GENERAL +*/ +/obj/item/book/skill/general + abstract_type = /obj/item/book/skill/general + +//eva +/obj/item/book/skill/general/eva + icon_state = "evabook" + skill = SKILL_EVA + author = "Big Dark" + +/obj/item/book/skill/general/eva/basic + name = "beginner extra-vehicular activity textbook" + +/obj/item/book/skill/general/eva/adept + skill_req = SKILL_BASIC + name = "intermediate extra-vehicular activity textbook" + +/obj/item/book/skill/general/eva/expert + skill_req = SKILL_ADEPT + name = "advanced extra-vehicular activity textbook" + +/obj/item/book/skill/general/eva/prof + skill_req = SKILL_EXPERT + name = "theoretical extra-vehicular activity textbook" + +//mech +/obj/item/book/skill/general/mech + icon_state = "tb_mech" + skill = SKILL_MECH + author = "J.T. Marsh" + +/obj/item/book/skill/general/mech/basic + name = "beginner exosuit operation textbook" + +/obj/item/book/skill/general/mech/adept + skill_req = SKILL_BASIC + name = "intermediate exosuit operation textbook" + +/obj/item/book/skill/general/mech/expert + skill_req = SKILL_ADEPT + name = "advanced exosuit operation textbook" + +/obj/item/book/skill/general/mech/prof + skill_req = SKILL_EXPERT + name = "theoretical exosuit operation textbook" + +//piloting +/obj/item/book/skill/general/pilot + skill = SKILL_PILOT + author = "Sumi Shimamoto" + icon_state = "tb_pilot" + +/obj/item/book/skill/general/pilot/basic + name = "beginner piloting textbook" + +/obj/item/book/skill/general/pilot/adept + skill_req = SKILL_BASIC + name = "intermediate piloting textbook" + +/obj/item/book/skill/general/pilot/expert + skill_req = SKILL_ADEPT + name = "advanced piloting textbook" + +/obj/item/book/skill/general/pilot/prof + skill_req = SKILL_EXPERT + name = "theoretical piloting textbook" + +//hauling +/obj/item/book/skill/general/hauling + skill = SKILL_HAULING + author = "Chiel Brunt" + icon_state = "tb_hauling" + +/obj/item/book/skill/general/hauling/basic + name = "beginner athletics textbook" + +/obj/item/book/skill/general/hauling/adept + skill_req = SKILL_BASIC + name = "intermediate athletics textbook" + +/obj/item/book/skill/general/hauling/expert + skill_req = SKILL_ADEPT + name = "advanced athletics textbook" + +/obj/item/book/skill/general/hauling/prof + skill_req = SKILL_EXPERT + name = "theoretical athletics textbook" + +//computer +/obj/item/book/skill/general/computer + skill = SKILL_COMPUTER + author = "Simona Castiglione" + icon_state = "bookNuclear" + +/obj/item/book/skill/general/computer/basic + name = "beginner information technology textbook" + +/obj/item/book/skill/general/computer/adept + skill_req = SKILL_BASIC + name = "intermediate information technology textbook" + +/obj/item/book/skill/general/computer/expert + skill_req = SKILL_ADEPT + name = "advanced information technology textbook" + +/obj/item/book/skill/general/computer/prof + skill_req = SKILL_EXPERT + name = "theoretical information technology textbook" diff --git a/code/game/objects/items/books/skill/medical.dm b/code/game/objects/items/books/skill/medical.dm new file mode 100644 index 00000000000..9caeeb1699f --- /dev/null +++ b/code/game/objects/items/books/skill/medical.dm @@ -0,0 +1,71 @@ +/* +MEDICAL +*/ +/obj/item/book/skill/medical + abstract_type = /obj/item/book/skill/medical + icon_state = "bookMedical" + +//chemistry +/obj/item/book/skill/medical/chemistry + icon_state = "chemistry" + author = "Dr. Shinula Nyekundujicho" + skill = SKILL_CHEMISTRY + +/obj/item/book/skill/medical/chemistry/basic + name = "beginner chemistry textbook" + +/obj/item/book/skill/medical/chemistry/adept + skill_req = SKILL_BASIC + name = "intermediate chemistry textbook" + +/obj/item/book/skill/medical/chemistry/expert + skill_req = SKILL_ADEPT + name = "advanced chemistry textbook" + +/obj/item/book/skill/medical/chemistry/prof + skill_req = SKILL_EXPERT + name = "theoretical chemistry textbook" + +//medicine +/obj/item/book/skill/medical/medicine + author = "Dr. Nagarjuna Siddha" + skill = SKILL_MEDICAL + +/obj/item/book/skill/medical/medicine/basic + name = "beginner medicine textbook" + title = "\"Instructional Guide on How Rubbing Dirt In Wounds Might Not Be The Right Approach To Stopping Bleeding Anymore\"" + desc = "A copy of \"Instructional Guide on How Rubbing Dirt In Wounds Might Not Be The Right Approach To Stopping Bleeding Anymore\" by Dr. Merrs. Despite the information density of this heavy book, it lacks any and all teachings regarding bedside manner." + author = "Dr. Merrs" + custom = TRUE + +/obj/item/book/skill/medical/medicine/adept + skill_req = SKILL_BASIC + name = "intermediate medicine textbook" + +/obj/item/book/skill/medical/medicine/expert + skill_req = SKILL_ADEPT + name = "advanced medicine textbook" + +/obj/item/book/skill/medical/medicine/prof + skill_req = SKILL_EXPERT + name = "theoretical medicine textbook" + +//anatomy +/obj/item/book/skill/medical/anatomy + author = "Dr. Basil Cartwright" + skill = SKILL_ANATOMY + +/obj/item/book/skill/medical/anatomy/basic + name = "beginner anatomy textbook" + +/obj/item/book/skill/medical/anatomy/adept + skill_req = SKILL_BASIC + name = "intermediate anatomy textbook" + +/obj/item/book/skill/medical/anatomy/expert + skill_req = SKILL_ADEPT + name = "advanced anatomy textbook" + +/obj/item/book/skill/medical/anatomy/prof + skill_req = SKILL_EXPERT + name = "theoretical anatomy textbook" \ No newline at end of file diff --git a/code/game/objects/items/books/skill/organizational.dm b/code/game/objects/items/books/skill/organizational.dm new file mode 100644 index 00000000000..87b37123301 --- /dev/null +++ b/code/game/objects/items/books/skill/organizational.dm @@ -0,0 +1,38 @@ +/* +ORGANIZATIONAL +*/ +/obj/item/book/skill/organizational + abstract_type = /obj/item/book/skill/organizational + +//literacy +/obj/item/book/skill/organizational/literacy + skill = SKILL_LITERACY + +/obj/item/book/skill/organizational/literacy/basic + name = "alphabet book" + icon_state = "tb_literacy" + author = "Dorothy Mulch" + custom = TRUE + w_class = ITEM_SIZE_NORMAL // A little bit smaller c: + ez_read = TRUE + +//finance +/obj/item/book/skill/organizational/finance + skill = SKILL_FINANCE + author = "Cadence Bennett" + icon_state = "tb_finance" + +/obj/item/book/skill/organizational/finance/basic + name = "beginner finance textbook" + +/obj/item/book/skill/organizational/finance/adept + skill_req = SKILL_BASIC + name = "intermediate finance textbook" + +/obj/item/book/skill/organizational/finance/expert + skill_req = SKILL_ADEPT + name = "advanced finance textbook" + +/obj/item/book/skill/organizational/finance/prof + skill_req = SKILL_EXPERT + name = "theoretical finance textbook" diff --git a/code/game/objects/items/books/skill/research.dm b/code/game/objects/items/books/skill/research.dm new file mode 100644 index 00000000000..4c1a666af74 --- /dev/null +++ b/code/game/objects/items/books/skill/research.dm @@ -0,0 +1,46 @@ +/* +RESEARCH +*/ +/obj/item/book/skill/research + abstract_type = /obj/item/book/skill/research + icon_state = "analysis" + +//devices +/obj/item/book/skill/research/devices + author = "Nilva Plosinjak" + skill = SKILL_DEVICES + +/obj/item/book/skill/research/devices/basic + name = "beginner complex devices textbook" + +/obj/item/book/skill/research/devices/adept + skill_req = SKILL_BASIC + name = "intermediate complex devices textbook" + +/obj/item/book/skill/research/devices/expert + skill_req = SKILL_ADEPT + name = "advanced complex devices textbook" + +/obj/item/book/skill/research/devices/prof + skill_req = SKILL_EXPERT + name = "theoretical complex devices textbook" + +//science +/obj/item/book/skill/research/science + author = "Hui Ying Ch'ien" + skill = SKILL_SCIENCE + +/obj/item/book/skill/research/science/basic + name = "beginner science textbook" + +/obj/item/book/skill/research/science/adept + skill_req = SKILL_BASIC + name = "intermediate science textbook" + +/obj/item/book/skill/research/science/expert + skill_req = SKILL_ADEPT + name = "advanced science textbook" + +/obj/item/book/skill/research/science/prof + skill_req = SKILL_EXPERT + name = "theoretical science textbook" diff --git a/code/game/objects/items/books/skill/security.dm b/code/game/objects/items/books/skill/security.dm new file mode 100644 index 00000000000..4fdfd1367a8 --- /dev/null +++ b/code/game/objects/items/books/skill/security.dm @@ -0,0 +1,69 @@ +/* +SECURITY +*/ +/obj/item/book/skill/security + abstract_type = /obj/item/book/skill/security + icon_state = "bookSpaceLaw" + +//combat +/obj/item/book/skill/security/combat + skill = SKILL_COMBAT + author = "Autumn Eckhardstein" + icon_state = "tb_combat" + +/obj/item/book/skill/security/combat/basic + name = "beginner close combat textbook" + +/obj/item/book/skill/security/combat/adept + skill_req = SKILL_BASIC + name = "intermediate close combat textbook" + +/obj/item/book/skill/security/combat/expert + skill_req = SKILL_ADEPT + name = "advanced close combat textbook" + +/obj/item/book/skill/security/combat/prof + skill_req = SKILL_EXPERT + name = "theoretical close combat textbook" + +//weapons +/obj/item/book/skill/security/weapons + skill = SKILL_WEAPONS + author = "Miho Tatsu" + icon_state = "tb_weapon" + +/obj/item/book/skill/security/weapons/basic + name = "beginner weapons expertise textbook" + +/obj/item/book/skill/security/weapons/adept + skill_req = SKILL_BASIC + name = "intermediate weapons expertise textbook" + +/obj/item/book/skill/security/weapons/expert + skill_req = SKILL_ADEPT + name = "advanced weapons expertise textbook" + +/obj/item/book/skill/security/weapons/prof + skill_req = SKILL_EXPERT + name = "theoretical weapons expertise textbook" + +//forensics +/obj/item/book/skill/security/forensics + icon_state = "bookDetective" + skill = SKILL_FORENSICS + author = "Samuel Vimes" + +/obj/item/book/skill/security/forensics/basic + name = "beginner forensics textbook" + +/obj/item/book/skill/security/forensics/adept + skill_req = SKILL_BASIC + name = "intermediate forensics textbook" + +/obj/item/book/skill/security/forensics/expert + skill_req = SKILL_ADEPT + name = "advanced forensics textbook" + +/obj/item/book/skill/security/forensics/prof + skill_req = SKILL_EXPERT + name = "theoretical forensics textbook" diff --git a/code/game/objects/items/books/skill/service.dm b/code/game/objects/items/books/skill/service.dm new file mode 100644 index 00000000000..04d93d9341b --- /dev/null +++ b/code/game/objects/items/books/skill/service.dm @@ -0,0 +1,47 @@ +/* +SERVICE +*/ +/obj/item/book/skill/service + abstract_type = /obj/item/book/skill/service + +//botany +/obj/item/book/skill/service/botany + icon_state = "bookHydroponicsPodPeople" + skill = SKILL_BOTANY + author = "Mai Dong Chat" + +/obj/item/book/skill/service/botany/basic + name = "beginner botany textbook" + +/obj/item/book/skill/service/botany/adept + skill_req = SKILL_BASIC + name = "intermediate botany textbook" + +/obj/item/book/skill/service/botany/expert + skill_req = SKILL_ADEPT + name = "advanced botany textbook" + +/obj/item/book/skill/service/botany/prof + skill_req = SKILL_EXPERT + name = "theoretical botany textbook" + +//cooking +/obj/item/book/skill/service/cooking + icon_state = "barbook" + skill = SKILL_COOKING + author = "Lavinia Burrows" + +/obj/item/book/skill/service/cooking/basic + name = "beginner cooking textbook" + +/obj/item/book/skill/service/cooking/adept + skill_req = SKILL_BASIC + name = "intermediate cooking textbook" + +/obj/item/book/skill/service/cooking/expert + skill_req = SKILL_ADEPT + name = "advanced cooking textbook" + +/obj/item/book/skill/service/cooking/prof + skill_req = SKILL_EXPERT + name = "theoretical cooking textbook" diff --git a/code/game/objects/items/books/skill_book.dm b/code/game/objects/items/books/skill_book.dm deleted file mode 100644 index 05e20c8df54..00000000000 --- a/code/game/objects/items/books/skill_book.dm +++ /dev/null @@ -1,945 +0,0 @@ -#define RANDOM_BOOK_TITLE(skill_name) pick(list("\"[skill_name] for Idiots\"", \ - "\"How To Learn [skill_name] and Not Get Laughed At\"", \ - "\"Teaching Yourself [skill_name]: Volume [rand(1,100)]\"", \ - "\"Getting the Hands-Off Experience You Need with [skill_name]\"", \ - "\"Master [skill_name] in [rand(100,999)] easy steps!\"", \ - "\"[skill_name] Just Like Mum\"", \ - "\"How To [skill_name] Good Enough For Your Father\"", \ - "\"How To Win Your Dad's Approval With [skill_name]\"", \ - "\"Make a Living with [skill_name] Like Your Old Man Always Wanted You To\"", \ - "\"[skill_name]: Secret Techniques\"", \ - "\"The Dos, Don'ts and Oh Gods Please Nos of [skill_name]\"", \ - "\"The Death Of [skill_name]\"", \ - "\"Everything You Never Wanted To Know About [skill_name] But Have Been Reluctantly Forced To Find Out\"", \ - "\"[skill_name] For The Busy Professional\"", \ - "\"Learning [skill_name] In A Hurry Because You Lied On Your Resume\"", \ - "\"Help! My Life Suddenly Depends On [skill_name]\"", \ - "\"What The Fuck is [capitalize(ADD_ARTICLE(capitalize(skill_name)))]?\"", \ - "\"Starting [capitalize(ADD_ARTICLE(capitalize(skill_name)))] Business By Yourself\"", \ - "\"Even You Can Learn [skill_name]!\"", \ - "\"How To Impress Your Matriarch with [skill_name]\"", \ - "\"How To Become A Patriarch of [skill_name]\"", \ - "\"Everything The Government Doesn't Want You To Know About [skill_name]\"", \ - "\"[skill_name] For Younglets\"", \ - "\"[skill_name]: Volume [rand(1,100)]\"", \ - "\"Understanding [skill_name]: [rand(1,100)]\th Edition\"", \ - "\"Dealing With Ungrateful Customers Dissatisfied With Your Perfectly Acceptable [skill_name] Services\"", \ - "\"Really big book of [skill_name]\"")) -#define SKILLBOOK_PROG_NONE 0 -#define SKILLBOOK_PROG_FINISH 6 - -/* -Skill books that increase your skills while you activate and hold them -*/ - -/obj/item/book/skill - name = "textbook" // requires default names for tradershop, cant rely on Initialize for names - desc = "A blank textbook. (Notify admin)" - author = "The Oracle of Bakersroof" - icon_state = "book2" - force = 4 - w_class = ITEM_SIZE_LARGE // Skill books are THICC with knowledge. Up one level from regular books to prevent library-in-a-bag silliness. - unique = TRUE - material = /decl/material/solid/organic/plastic - matter = list(/decl/material/solid/organic/wood = MATTER_AMOUNT_REINFORCEMENT) - abstract_type = /obj/item/book/skill - - var/decl/hierarchy/skill/skill // e.g. SKILL_LITERACY - var/skill_req = SKILL_NONE // The level the user needs in the skill to benefit from the book, e.g. SKILL_PROF - var/weakref/reading // To check if the book is actively being used - var/custom = FALSE // To bypass init stuff, for player made textbooks and weird books. If true must have details manually set - var/ez_read = FALSE // Set to TRUE if you can read it without basic literacy skills - - var/skill_name = "missing skill name" - var/progress = SKILLBOOK_PROG_FINISH // used to track the progress of making a custom book. defaults as finished so, you know, you can read the damn thing - -/obj/item/book/skill/Initialize() - - . = ..() - - global.events_repository.register(/decl/observ/moved, src, src, .proc/check_buff) - - if(!custom && skill && skill_req)// custom books should already have all they need - skill_name = initial(skill.name) - title = RANDOM_BOOK_TITLE(capitalize(skill_name)) - switch(skill_req) // check what skill_req the book has - if(SKILL_NONE) // none > basic - name = "beginner [skill_name] textbook" - desc = "A copy of [title] by [author]. The only reason this book is so big is because all the words are printed very large! Presumably so you, an idiot, can read it." - if(SKILL_BASIC) // basic > adept - name = "intermediate [skill_name] textbook" - desc = "A copy of [title] by [author]. Dry and long, but not unmanageable. Basic knowledge is required to understand the concepts written." - if(SKILL_ADEPT) // adept > expert - name = "advanced [skill_name] textbook" - desc = "A copy of [title] by [author]. Those not already trained in the subject will have a hard time reading this. Try not to drop it either, it will put a hole in the floor." - if(SKILL_EXPERT to SKILL_MAX) //expert > prof - name = "theoretical [skill_name] textbook" - desc = "A copy of [title] by [author]. Significant experience in the subject is required to read this incredibly information dense block of paper. Sadly, does not come in audio form." - - if((!skill || !skill_req) && !custom)//That's a bad book, so just grab ANY child to replace it. Custom books are fine though they can be bad if they want. - if(subtypesof(src.type)) - var/new_book = pick(subtypesof(src.type)) - new new_book(src.loc) - qdel_self() - -/datum/skill_buff/skill_book - limit = 1 // you can only read one book at a time nerd, therefore you can only get one buff at a time - -/obj/item/book/skill/get_single_monetary_worth() - . = max(..(), 200) + (100 * skill_req) - -/obj/item/book/skill/proc/check_can_read(mob/user) - if(QDELETED(user)) - return FALSE - var/effective_title = length(title) ? title : "the textbook" - if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_WARNING("You can't reach [effective_title]!")) - return FALSE - if(!skill || (custom && progress == SKILLBOOK_PROG_NONE)) - to_chat(user, SPAN_WARNING("[capitalize(effective_title)] is blank!")) - return FALSE - if(custom && progress < SKILLBOOK_PROG_FINISH) - to_chat(user, SPAN_WARNING("[capitalize(effective_title)] is unfinished! You can't learn from it in this state!")) - return FALSE - if(!ez_read &&!user.skill_check(SKILL_LITERACY, SKILL_BASIC)) - to_chat(user, SPAN_WARNING(pick(list( - "Haha, you know you can't read. Good joke. Put [effective_title] back.", - "You open up [effective_title], but there aren't any pictures, so you close it again.", - "You don't know how to read! What good is [effective_title] to you?!" - )))) - return FALSE - - if(reading) - if(reading.resolve() != user) - to_chat(user, SPAN_WARNING("\The [reading.resolve()] is already reading [effective_title]!")) - else - to_chat(user, SPAN_WARNING("You are already reading [effective_title]!")) - return FALSE - - if(user.too_many_buffs(/datum/skill_buff/skill_book)) - to_chat(user, SPAN_WARNING("You can't read two books at once!")) - return FALSE - - if(!user.skill_check(skill, skill_req)) - to_chat(user, SPAN_WARNING("[capitalize(title)] is too advanced for you! Try something easier, perhaps the \"For Idiots\" edition?")) - return FALSE - - if(user.get_skill_value(skill) > skill_req) - to_chat(user, SPAN_WARNING("You already know everything [effective_title] has to teach you!")) - return FALSE - - return TRUE - -/obj/item/book/skill/verb/read_book() - set name = "Read Book" - set category = "Object" - set src in view(1) - try_to_read(usr) - -/obj/item/book/skill/try_to_read(mob/user) - - if(isobserver(user)) - to_chat(user, SPAN_WARNING("Ghosts can't read! Go away!")) - return TRUE - - if(isturf(loc)) - user.face_atom(src) - - if(user && user == reading?.resolve()) - //Close book, get rid of buffs - unlearn(user) - to_chat(user, SPAN_NOTICE("You close [title]. That's enough learning for now.")) - reading = null - STOP_PROCESSING(SSprocessing, src) - return TRUE - - if(!check_can_read(user)) - return FALSE - - to_chat(user, SPAN_NOTICE("You open up [title] and start reading...")) - if(!user.do_skilled(4 SECONDS, SKILL_LITERACY, src, 0.75)) - to_chat(user, SPAN_DANGER("Your perusal of [title] was interrupted!")) - return TRUE - - if(!check_can_read(user)) - return TRUE - - var/list/buff = list() - buff[skill] = 1 - user.buff_skill(buff, buff_type = /datum/skill_buff/skill_book) - reading = weakref(user) - to_chat(user, SPAN_NOTICE("You find the information you need! Better keep the page open to reference it.")) - START_PROCESSING(SSprocessing, src) - return TRUE - -// buff removal -/obj/item/book/skill/proc/unlearn(var/mob/user) - var/list/F = user.fetch_buffs_of_type(/datum/skill_buff/skill_book, 0) - for(var/datum/skill_buff/skill_book/S in F) - S.remove() - -/obj/item/book/skill/Process() - if(!reading) - return PROCESS_KILL - check_buff() - -/obj/item/book/skill/proc/check_buff() - if(!reading) - return - var/mob/R = reading.resolve() - if(!istype(R) || !CanPhysicallyInteract(R)) - remove_buff() - -/obj/item/book/skill/proc/remove_buff() - var/mob/R = reading?.resolve() - reading = null - if(istype(R)) - to_chat(R, SPAN_DANGER("You lose the page you were on! You can't cross-reference using [title] like this!")) - if(R.fetch_buffs_of_type(/datum/skill_buff/skill_book, 0)) - unlearn(R) - STOP_PROCESSING(SSprocessing, src) - -/obj/item/book/skill/Destroy() - global.events_repository.unregister(/decl/observ/moved, src, src) - remove_buff() - . = ..() - -//////////////////////////////// -//THIS IS WHERE THE BOOKS LIVE// -//////////////////////////////// - -/* -ORGANIZATIONAL -*/ -/obj/item/book/skill/organizational - abstract_type = /obj/item/book/skill/organizational - -//literacy -/obj/item/book/skill/organizational/literacy - skill = SKILL_LITERACY - -/obj/item/book/skill/organizational/literacy/basic - name = "alphabet book" - icon_state = "tb_literacy" - author = "Dorothy Mulch" - custom = TRUE - w_class = ITEM_SIZE_NORMAL // A little bit smaller c: - ez_read = TRUE - -//finance -/obj/item/book/skill/organizational/finance - skill = SKILL_FINANCE - author = "Cadence Bennett" - icon_state = "tb_finance" - -/obj/item/book/skill/organizational/finance/basic - name = "beginner finance textbook" - -/obj/item/book/skill/organizational/finance/adept - skill_req = SKILL_BASIC - name = "intermediate finance textbook" - -/obj/item/book/skill/organizational/finance/expert - skill_req = SKILL_ADEPT - name = "advanced finance textbook" - -/obj/item/book/skill/organizational/finance/prof - skill_req = SKILL_EXPERT - name = "theoretical finance textbook" - -/* -GENERAL -*/ -/obj/item/book/skill/general - abstract_type = /obj/item/book/skill/general - -//eva -/obj/item/book/skill/general/eva - icon_state = "evabook" - skill = SKILL_EVA - author = "Big Dark" - -/obj/item/book/skill/general/eva/basic - name = "beginner extra-vehicular activity textbook" - -/obj/item/book/skill/general/eva/adept - skill_req = SKILL_BASIC - name = "intermediate extra-vehicular activity textbook" - -/obj/item/book/skill/general/eva/expert - skill_req = SKILL_ADEPT - name = "advanced extra-vehicular activity textbook" - -/obj/item/book/skill/general/eva/prof - skill_req = SKILL_EXPERT - name = "theoretical extra-vehicular activity textbook" - -//mech -/obj/item/book/skill/general/mech - icon_state = "tb_mech" - skill = SKILL_MECH - author = "J.T. Marsh" - -/obj/item/book/skill/general/mech/basic - name = "beginner exosuit operation textbook" - -/obj/item/book/skill/general/mech/adept - skill_req = SKILL_BASIC - name = "intermediate exosuit operation textbook" - -/obj/item/book/skill/general/mech/expert - skill_req = SKILL_ADEPT - name = "advanced exosuit operation textbook" - -/obj/item/book/skill/general/mech/prof - skill_req = SKILL_EXPERT - name = "theoretical exosuit operation textbook" - -//piloting -/obj/item/book/skill/general/pilot - skill = SKILL_PILOT - author = "Sumi Shimamoto" - icon_state = "tb_pilot" - -/obj/item/book/skill/general/pilot/basic - name = "beginner piloting textbook" - -/obj/item/book/skill/general/pilot/adept - skill_req = SKILL_BASIC - name = "intermediate piloting textbook" - -/obj/item/book/skill/general/pilot/expert - skill_req = SKILL_ADEPT - name = "advanced piloting textbook" - -/obj/item/book/skill/general/pilot/prof - skill_req = SKILL_EXPERT - name = "theoretical piloting textbook" - -//hauling -/obj/item/book/skill/general/hauling - skill = SKILL_HAULING - author = "Chiel Brunt" - icon_state = "tb_hauling" - -/obj/item/book/skill/general/hauling/basic - name = "beginner athletics textbook" - -/obj/item/book/skill/general/hauling/adept - skill_req = SKILL_BASIC - name = "intermediate athletics textbook" - -/obj/item/book/skill/general/hauling/expert - skill_req = SKILL_ADEPT - name = "advanced athletics textbook" - -/obj/item/book/skill/general/hauling/prof - skill_req = SKILL_EXPERT - name = "theoretical athletics textbook" - -//computer -/obj/item/book/skill/general/computer - skill = SKILL_COMPUTER - author = "Simona Castiglione" - icon_state = "bookNuclear" - -/obj/item/book/skill/general/computer/basic - name = "beginner information technology textbook" - -/obj/item/book/skill/general/computer/adept - skill_req = SKILL_BASIC - name = "intermediate information technology textbook" - -/obj/item/book/skill/general/computer/expert - skill_req = SKILL_ADEPT - name = "advanced information technology textbook" - -/obj/item/book/skill/general/computer/prof - skill_req = SKILL_EXPERT - name = "theoretical information technology textbook" - -/* -SERVICE -*/ -/obj/item/book/skill/service - abstract_type = /obj/item/book/skill/service - -//botany -/obj/item/book/skill/service/botany - icon_state = "bookHydroponicsPodPeople" - skill = SKILL_BOTANY - author = "Mai Dong Chat" - -/obj/item/book/skill/service/botany/basic - name = "beginner botany textbook" - -/obj/item/book/skill/service/botany/adept - skill_req = SKILL_BASIC - name = "intermediate botany textbook" - -/obj/item/book/skill/service/botany/expert - skill_req = SKILL_ADEPT - name = "advanced botany textbook" - -/obj/item/book/skill/service/botany/prof - skill_req = SKILL_EXPERT - name = "theoretical botany textbook" - -//cooking -/obj/item/book/skill/service/cooking - icon_state = "barbook" - skill = SKILL_COOKING - author = "Lavinia Burrows" - -/obj/item/book/skill/service/cooking/basic - name = "beginner cooking textbook" - -/obj/item/book/skill/service/cooking/adept - skill_req = SKILL_BASIC - name = "intermediate cooking textbook" - -/obj/item/book/skill/service/cooking/expert - skill_req = SKILL_ADEPT - name = "advanced cooking textbook" - -/obj/item/book/skill/service/cooking/prof - skill_req = SKILL_EXPERT - name = "theoretical cooking textbook" - -/* -SECURITY -*/ -/obj/item/book/skill/security - abstract_type = /obj/item/book/skill/security - icon_state = "bookSpaceLaw" - -//combat -/obj/item/book/skill/security/combat - skill = SKILL_COMBAT - author = "Autumn Eckhardstein" - icon_state = "tb_combat" - -/obj/item/book/skill/security/combat/basic - name = "beginner close combat textbook" - -/obj/item/book/skill/security/combat/adept - skill_req = SKILL_BASIC - name = "intermediate close combat textbook" - -/obj/item/book/skill/security/combat/expert - skill_req = SKILL_ADEPT - name = "advanced close combat textbook" - -/obj/item/book/skill/security/combat/prof - skill_req = SKILL_EXPERT - name = "theoretical close combat textbook" - -//weapons -/obj/item/book/skill/security/weapons - skill = SKILL_WEAPONS - author = "Miho Tatsu" - icon_state = "tb_weapon" - -/obj/item/book/skill/security/weapons/basic - name = "beginner weapons expertise textbook" - -/obj/item/book/skill/security/weapons/adept - skill_req = SKILL_BASIC - name = "intermediate weapons expertise textbook" - -/obj/item/book/skill/security/weapons/expert - skill_req = SKILL_ADEPT - name = "advanced weapons expertise textbook" - -/obj/item/book/skill/security/weapons/prof - skill_req = SKILL_EXPERT - name = "theoretical weapons expertise textbook" - -//forensics -/obj/item/book/skill/security/forensics - icon_state = "bookDetective" - skill = SKILL_FORENSICS - author = "Samuel Vimes" - -/obj/item/book/skill/security/forensics/basic - name = "beginner forensics textbook" - -/obj/item/book/skill/security/forensics/adept - skill_req = SKILL_BASIC - name = "intermediate forensics textbook" - -/obj/item/book/skill/security/forensics/expert - skill_req = SKILL_ADEPT - name = "advanced forensics textbook" - -/obj/item/book/skill/security/forensics/prof - skill_req = SKILL_EXPERT - name = "theoretical forensics textbook" - -/* -ENGINEERING -*/ -/obj/item/book/skill/engineering - abstract_type = /obj/item/book/skill/engineering - icon_state = "bookEngineering" - -//construction -/obj/item/book/skill/engineering/construction/ - author = "Robert Bildar" - skill = SKILL_CONSTRUCTION - -/obj/item/book/skill/engineering/construction/basic - name = "beginner construction textbook" - -/obj/item/book/skill/engineering/construction/adept - skill_req = SKILL_BASIC - name = "intermediate construction textbook" - -/obj/item/book/skill/engineering/construction/expert - skill_req = SKILL_ADEPT - name = "advanced construction textbook" - -/obj/item/book/skill/engineering/construction/prof - skill_req = SKILL_EXPERT - name = "theoretical construction textbook" - -//electrical -/obj/item/book/skill/engineering/electrical - skill = SKILL_ELECTRICAL - author = "Ariana Vanderbalt" - -/obj/item/book/skill/engineering/electrical/basic - name = "beginner electrical engineering textbook" - -/obj/item/book/skill/engineering/electrical/adept - skill_req = SKILL_BASIC - name = "intermediate electrical engineering textbook" - -/obj/item/book/skill/engineering/electrical/expert - skill_req = SKILL_ADEPT - name = "advanced electrical engineering textbook" - -/obj/item/book/skill/engineering/electrical/prof - skill_req = SKILL_EXPERT - name = "theoretical electrical engineering textbook" - -//atmos -/obj/item/book/skill/engineering/atmos - skill = SKILL_ATMOS - author = "Maria Crash" - icon_state = "pipingbook" - -/obj/item/book/skill/engineering/atmos/basic - name = "beginner atmospherics textbook" - -/obj/item/book/skill/engineering/atmos/adept - skill_req = SKILL_BASIC - name = "intermediate atmospherics textbook" - -/obj/item/book/skill/engineering/atmos/expert - skill_req = SKILL_ADEPT - name = "advanced atmospherics textbook" - -/obj/item/book/skill/engineering/atmos/prof - skill_req = SKILL_EXPERT - name = "theoretical atmospherics textbook" - -//engines -/obj/item/book/skill/engineering/engines - skill = SKILL_ENGINES - author = "Gilgamesh Scholz" - -/obj/item/book/skill/engineering/engines/basic - name = "beginner engines textbook" - -/obj/item/book/skill/engineering/engines/adept - skill_req = SKILL_BASIC - name = "intermediate engines textbook" - -/obj/item/book/skill/engineering/engines/expert - skill_req = SKILL_ADEPT - name = "advanced engines textbook" - -/obj/item/book/skill/engineering/engines/prof - skill_req = SKILL_EXPERT - name = "theoretical engines textbook" - -/obj/item/book/skill/engineering/engines/prof/magazine - name = "theoretical engines magazine" - title = "\improper WetSkrell magazine" - icon_state = "bookMagazine" - custom = TRUE - author = "Unknown" - desc = "Sure, it includes highly detailed information on extremely advanced engine and power generator systems... but why is it written in marker on a tentacle porn magazine?" - w_class = ITEM_SIZE_NORMAL - - -/* -RESEARCH -*/ -/obj/item/book/skill/research - abstract_type = /obj/item/book/skill/research - icon_state = "analysis" - -//devices -/obj/item/book/skill/research/devices - author = "Nilva Plosinjak" - skill = SKILL_DEVICES - -/obj/item/book/skill/research/devices/basic - name = "beginner complex devices textbook" - -/obj/item/book/skill/research/devices/adept - skill_req = SKILL_BASIC - name = "intermediate complex devices textbook" - -/obj/item/book/skill/research/devices/expert - skill_req = SKILL_ADEPT - name = "advanced complex devices textbook" - -/obj/item/book/skill/research/devices/prof - skill_req = SKILL_EXPERT - name = "theoretical complex devices textbook" - -//science -/obj/item/book/skill/research/science - author = "Hui Ying Ch'ien" - skill = SKILL_SCIENCE - -/obj/item/book/skill/research/science/basic - name = "beginner science textbook" - -/obj/item/book/skill/research/science/adept - skill_req = SKILL_BASIC - name = "intermediate science textbook" - -/obj/item/book/skill/research/science/expert - skill_req = SKILL_ADEPT - name = "advanced science textbook" - -/obj/item/book/skill/research/science/prof - skill_req = SKILL_EXPERT - name = "theoretical science textbook" - -/* -MEDICAL -*/ -/obj/item/book/skill/medical - abstract_type = /obj/item/book/skill/medical - icon_state = "bookMedical" - -//chemistry -/obj/item/book/skill/medical/chemistry - icon_state = "chemistry" - author = "Dr. Shinula Nyekundujicho" - skill = SKILL_CHEMISTRY - -/obj/item/book/skill/medical/chemistry/basic - name = "beginner chemistry textbook" - -/obj/item/book/skill/medical/chemistry/adept - skill_req = SKILL_BASIC - name = "intermediate chemistry textbook" - -/obj/item/book/skill/medical/chemistry/expert - skill_req = SKILL_ADEPT - name = "advanced chemistry textbook" - -/obj/item/book/skill/medical/chemistry/prof - skill_req = SKILL_EXPERT - name = "theoretical chemistry textbook" - -//medicine -/obj/item/book/skill/medical/medicine - author = "Dr. Nagarjuna Siddha" - skill = SKILL_MEDICAL - -/obj/item/book/skill/medical/medicine/basic - name = "beginner medicine textbook" - title = "\"Instructional Guide on How Rubbing Dirt In Wounds Might Not Be The Right Approach To Stopping Bleeding Anymore\"" - desc = "A copy of \"Instructional Guide on How Rubbing Dirt In Wounds Might Not Be The Right Approach To Stopping Bleeding Anymore\" by Dr. Merrs. Despite the information density of this heavy book, it lacks any and all teachings regarding bedside manner." - author = "Dr. Merrs" - custom = TRUE - -/obj/item/book/skill/medical/medicine/adept - skill_req = SKILL_BASIC - name = "intermediate medicine textbook" - -/obj/item/book/skill/medical/medicine/expert - skill_req = SKILL_ADEPT - name = "advanced medicine textbook" - -/obj/item/book/skill/medical/medicine/prof - skill_req = SKILL_EXPERT - name = "theoretical medicine textbook" - -//anatomy -/obj/item/book/skill/medical/anatomy - author = "Dr. Basil Cartwright" - skill = SKILL_ANATOMY - -/obj/item/book/skill/medical/anatomy/basic - name = "beginner anatomy textbook" - -/obj/item/book/skill/medical/anatomy/adept - skill_req = SKILL_BASIC - name = "intermediate anatomy textbook" - -/obj/item/book/skill/medical/anatomy/expert - skill_req = SKILL_ADEPT - name = "advanced anatomy textbook" - -/obj/item/book/skill/medical/anatomy/prof - skill_req = SKILL_EXPERT - name = "theoretical anatomy textbook" - - -////////////////////// -//Custom Skill Books// -////////////////////// - -//custom skill books made by players. Right now it is extremely dodgy and bad and i'm sorry -/obj/item/book/skill/custom - name = "blank textbook" - desc = "A somewhat heftier blank book, just ready to filled with knowledge and sold at an unreasonable price." - custom = TRUE - author = null - progress = SKILLBOOK_PROG_NONE - icon_state = "tb_white" - var/skill_option_string = "Skill" //changes to "continue writing content" when the book is in progress - var/true_author //Used to keep track of who is actually writing the book. - var/list/failure_messages = list("Your hand slips and you accidentally rip your pen through several pages, ruining your hard work!","Your pen slips, dragging a haphazard line across both open pages! Now you need to do those again!") - var/list/progress_messages = list("Still quite a few blank pages left.","Feels like you're near halfway done.","You've made good progress.","Just needs a few finishing touches.","And then finish it. Done!") // Messages are in order of progress. - var/list/charge_messages = list("Your mind instantly recoils at the idea of having to write another textbook. No thank you!","You are far too mentally exhausted to write another textbook. Maybe another day.","Your hand aches in response to the very idea of more textbook writing.") - var/writing_time = 15 SECONDS // time it takes to write a segment of the book. This happens 6 times total - -//these all show up in the book fabricator -/obj/item/book/skill/custom/circle - icon_state = "tb_white_circle" -/obj/item/book/skill/custom/star - icon_state = "tb_white_star" -/obj/item/book/skill/custom/hourglass - icon_state = "tb_white_hourglass" -/obj/item/book/skill/custom/cracked - icon_state = "tb_white_cracked" -/obj/item/book/skill/custom/gun - icon_state = "tb_white_gun" -/obj/item/book/skill/custom/wrench - icon_state = "tb_white_wrench" -/obj/item/book/skill/custom/glass - icon_state = "tb_white_glass" - -/obj/item/book/skill/custom/cross - icon_state = "tb_white_cross" -/obj/item/book/skill/custom/text - icon_state = "tb_white_text" -/obj/item/book/skill/custom/download - icon_state = "tb_white_download" -/obj/item/book/skill/custom/uparrow - icon_state = "tb_white_uparrow" -/obj/item/book/skill/custom/percent - icon_state = "tb_white_percent" -/obj/item/book/skill/custom/flask - icon_state = "tb_white_flask" -/obj/item/book/skill/custom/detective - icon_state = "tb_white_detective" -/obj/item/book/skill/custom/device - icon_state = "tb_white_device" -/obj/item/book/skill/custom/smile - icon_state = "tb_white_smile" -/obj/item/book/skill/custom/exclamation - icon_state = "tb_white_exclamation" -/obj/item/book/skill/custom/question - icon_state = "tb_white_question" - -/obj/item/book/skill/custom/attackby(obj/item/pen, mob/user) - if(IS_PEN(pen)) - - if(!user.skill_check(SKILL_LITERACY, SKILL_BASIC)) - to_chat(user, SPAN_WARNING("You can't even read, yet you want to write a whole educational textbook?")) - return - if(!user.skill_check(SKILL_LITERACY, SKILL_PROF)) - to_chat(user, SPAN_WARNING("You have no clue as to how to write an entire textbook in a way that is actually useful. Maybe a regular book would be better?")) - return - var/state_check = skill_option_string // the state skill_option_string is in just before opening the input - var/choice = input(user, "What would you like to change?","Textbook editing") as null|anything in list("Title", "Author", skill_option_string) - if(!can_write(pen,user)) - return - - switch(choice) - if("Title") - edit_title(pen, user) - - if("Skill") - if(state_check != "Skill") // make sure someone hasn't already started the book while we were staring at menus woops - to_chat(user, SPAN_WARNING("The skill has already been selected and the writing started.")) - return - edit_skill(pen, user) - - if("Continue writing content") - if(state_check != "Continue writing content") - return - continue_skill(pen, user) - - if("Author") - edit_author(pen, user) - - else - return - - if(skill && title && author) // we have everything we need so lets set a good description - desc = "A handwritten textbook titled [title], by [author]. Looks like it teaches [skill_name]." - return - ..() - -/obj/item/book/skill/custom/proc/can_write(var/obj/item/pen, var/mob/user) - if(user.get_active_hand() == pen && CanPhysicallyInteractWith(user,src) && !QDELETED(src) && !QDELETED(pen)) - return TRUE - else - to_chat(user,SPAN_DANGER("How can you expect to write anything when you can't physically put pen to paper?")) - return FALSE - -/obj/item/book/skill/custom/proc/edit_title(var/obj/item/pen, var/mob/user) - var/newtitle = reject_bad_text(sanitize_safe(input(user, "Write a new title:"))) - if(!can_write(pen,user)) - return - if(!newtitle) - to_chat(user, "The title is invalid.") - return - else - newtitle = user.handle_writing_literacy(user, newtitle) - if(newtitle) - title = newtitle - SetName(title) - -/obj/item/book/skill/custom/proc/edit_author(var/obj/item/pen, var/mob/user) - var/newauthor = sanitize(input(user, "Write the author's name:")) - if(!can_write(pen,user)) - return - if(!newauthor) - to_chat(user, SPAN_WARNING("The author name is invalid.")) - return - else - newauthor = user.handle_writing_literacy(user, newauthor) - if(newauthor) - author = newauthor - -/obj/item/book/skill/custom/proc/edit_skill(var/obj/item/pen, var/mob/user) - if(user.skillset.literacy_charges <= 0) - to_chat(user, SPAN_WARNING(pick(charge_messages))) - return - - //Choosing the skill - var/list/skill_choices = list() - for(var/decl/hierarchy/skill/S in global.skills) - if(user.skill_check(S.type, SKILL_BASIC)) - LAZYADD(skill_choices, S) - var/decl/hierarchy/skill/skill_choice = input(user, "What subject does your textbook teach?", "Textbook skill selection") as null|anything in skill_choices - if(!can_write(pen,user) || progress == SKILLBOOK_PROG_FINISH) - return - if(!skill_choice) - to_chat(user, SPAN_WARNING("Textbook skill selection cancelled.")) - return - var/newskill = skill_choice.type - - //Choosing the level - var/list/skill_levels = skill_choice.levels.Copy() - for(var/SL in skill_levels) - if(!user.skill_check(newskill, skill_levels.Find(SL))) - LAZYREMOVE(skill_levels, SL) - else - skill_levels[SL] = skill_levels.Find(SL) - LAZYREMOVE(skill_levels,skill_levels[1]) - var/newskill_level = input(user, "What level of education does it provide?","Textbook skill level") as null|anything in skill_levels - if(!can_write(pen,user) || progress == SKILLBOOK_PROG_FINISH) - return - if(!newskill_level) - to_chat(user, SPAN_WARNING("Textbook skill level selection cancelled.")) - return - var/usable_level = skill_levels[newskill_level] - if(newskill && usable_level) - if(!do_after(user, writing_time, src)) - to_chat(user, SPAN_DANGER(pick(failure_messages))) - return - //everything worked out so now we can put the learnings in the book - to_chat(user, SPAN_NOTICE("You start writing your book, getting a few pages in.")) - skill = newskill - skill_name = skill_choice.name - skill_req = (usable_level - 1) - desc = "A handwritten textbook on [skill_choice]! Wow!" - progress += 1 - skill_option_string = "Continue writing content" - true_author = user.name - -/obj/item/book/skill/custom/proc/continue_skill(var/obj/item/pen, var/mob/user) - if(user.skillset.literacy_charges <= 0) - to_chat(user, SPAN_WARNING(pick(charge_messages))) - return - if(progress >= SKILLBOOK_PROG_FINISH) // shouldn't happen but here just in case - to_chat(user, SPAN_WARNING("This book is already finished! There's no need to add anything else!")) - return - if(true_author != user.name) - to_chat(user, SPAN_WARNING("This isn't your work and you're not really sure how to continue it.")) - return - else - if(!do_after(user, writing_time, src)) - to_chat(user, SPAN_DANGER(pick(failure_messages))) - return - to_chat(user, SPAN_NOTICE("You continue writing your book. [progress_messages[progress]]")) - progress += 1 - if(progress == SKILLBOOK_PROG_FINISH) // book is finished! yay! - user.skillset.literacy_charges -= 1 - skill_option_string = "Cancel" - - -////////////////////// -// SHELF SHELF SHELF// -////////////////////// - -/obj/structure/bookcase/skill_books - name = "textbook bookcase" - // Contains a list of parent types but doesn't actually DO anything with them. Use a child of this book case - var/list/catalogue = list(/obj/item/book/skill/organizational/finance, - /obj/item/book/skill/organizational/literacy, - /obj/item/book/skill/general/eva, - /obj/item/book/skill/general/mech, - /obj/item/book/skill/general/pilot, - /obj/item/book/skill/general/hauling, - /obj/item/book/skill/general/computer, - /obj/item/book/skill/service/botany, - /obj/item/book/skill/service/cooking, - /obj/item/book/skill/security/combat, - /obj/item/book/skill/security/weapons, - /obj/item/book/skill/security/forensics, - /obj/item/book/skill/engineering/construction, - /obj/item/book/skill/engineering/electrical, - /obj/item/book/skill/engineering/atmos, - /obj/item/book/skill/engineering/engines, - /obj/item/book/skill/research/devices, - /obj/item/book/skill/research/science, - /obj/item/book/skill/medical/chemistry, - /obj/item/book/skill/medical/medicine, - /obj/item/book/skill/medical/anatomy) - -//give me ALL the textbooks -/obj/structure/bookcase/skill_books/all - -/obj/structure/bookcase/skill_books/all/Initialize() - . = ..() - for(var/category in catalogue) - for(var/real_book in subtypesof(category)) - new real_book(src) - -//Bookshelf with some random textbooks -/obj/structure/bookcase/skill_books/random - -/obj/structure/bookcase/skill_books/random/Initialize() - . = ..() - for(var/category in catalogue) - for(var/real_book in subtypesof(category)) - if(prob(20)) - new real_book(src) - -#undef RANDOM_BOOK_TITLE -#undef SKILLBOOK_PROG_NONE -#undef SKILLBOOK_PROG_FINISH \ No newline at end of file diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 71962a8cd27..34fc63bd9ab 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -45,7 +45,7 @@ /obj/item/chems/glass/beaker/vial/random/populate_reagents() var/list/picked_reagents = pickweight(random_reagent_list) for(var/reagent in picked_reagents) - reagents.add_reagent(reagent, picked_reagents[reagent]) + add_to_reagents(reagent, picked_reagents[reagent]) var/list/names = new for(var/reagent_type in reagents.reagent_volumes) diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm index fb064fc25fb..1fb84bb2849 100644 --- a/code/game/objects/items/cryobag.dm +++ b/code/game/objects/items/cryobag.dm @@ -5,7 +5,7 @@ a hostile enviroment." icon = 'icons/obj/closets/cryobag.dmi' icon_state = "bodybag_folded" - origin_tech = "{'biotech':4}" + origin_tech = @'{"biotech":4}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -111,7 +111,7 @@ /obj/item/usedcryobag name = "used stasis bag" - desc = "Pretty useless now.." + desc = "Pretty useless now..." icon_state = "bodybag_used" icon = 'icons/obj/closets/cryobag.dmi' material = /decl/material/solid/organic/plastic diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 7e14954938a..697dccf3843 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -4,7 +4,7 @@ icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_SMALL slot_flags = SLOT_LOWER_BODY - origin_tech = "{'programming':4,'materials':4}" + origin_tech = @'{"programming":4,"materials":4}' material = /decl/material/solid/fiberglass matter = list(/decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT) @@ -22,7 +22,7 @@ data["has_ai"] = carded_ai != null if(carded_ai) data["name"] = carded_ai.name - data["hardware_integrity"] = carded_ai.hardware_integrity() + data["hardware_integrity"] = carded_ai.get_health_percent() data["backup_capacitor"] = carded_ai.backup_capacitor() data["radio"] = !carded_ai.ai_radio.disabledAi data["wireless"] = !carded_ai.control_disabled @@ -58,7 +58,6 @@ to_chat(carded_ai, "Your core files are being wiped!") while (carded_ai && carded_ai.stat != DEAD) carded_ai.adjustOxyLoss(2) - carded_ai.updatehealth() sleep(10) flush = 0 if (href_list["radio"]) diff --git a/code/game/objects/items/devices/auto_cpr.dm b/code/game/objects/items/devices/auto_cpr.dm index bff781b1342..cfa6fd549e8 100644 --- a/code/game/objects/items/devices/auto_cpr.dm +++ b/code/game/objects/items/devices/auto_cpr.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items/device/auto_cpr.dmi' icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_NORMAL - origin_tech = "{'magnets':2,'biotech':2}" + origin_tech = @'{"magnets":2,"biotech":2}' slot_flags = SLOT_OVER_BODY material = /decl/material/solid/organic/plastic matter = list( diff --git a/code/game/objects/items/devices/boombox.dm b/code/game/objects/items/devices/boombox.dm index 014870947af..d0b12f9240a 100644 --- a/code/game/objects/items/devices/boombox.dm +++ b/code/game/objects/items/devices/boombox.dm @@ -6,7 +6,7 @@ item_state = "boombox" force = 7 w_class = ITEM_SIZE_HUGE //forbid putting something that emits loud sounds forever into a backpack - origin_tech = "{'magnets':2,'combat':1}" + origin_tech = @'{"magnets":2,"combat":1}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT, @@ -169,7 +169,9 @@ /obj/item/boombox/on_update_icon() . = ..() - icon_state = playing ? "on" : "off" + icon_state = get_world_inventory_state() + if(playing) + icon_state = "[icon_state]_on" /obj/item/boombox/proc/stop() playing = 0 diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index fdaec9b4cb9..2d73f193891 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -8,14 +8,18 @@ throw_speed = 1 throw_range = 5 w_class = ITEM_SIZE_SMALL - origin_tech = "{'esoteric':4,'magnets':4}" + origin_tech = @'{"esoteric":4,"magnets":4}' material = /decl/material/solid/organic/plastic var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_item = /obj/item/trash/cigbutt - var/saved_icon = 'icons/clothing/mask/smokables/cigarette.dmi' - var/saved_icon_state = "butt" - var/saved_overlays + var/saved_appearance + +/obj/item/chameleon/Destroy() + saved_appearance = null + if(istype(active_dummy) && !QDELETED(active_dummy)) + qdel(active_dummy) + active_dummy = null + return ..() /obj/item/chameleon/dropped() disrupt() @@ -29,57 +33,69 @@ toggle() /obj/item/chameleon/afterattack(atom/target, mob/user , proximity) - if(!proximity) return - if(!active_dummy) - if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear)) - playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) - to_chat(user, "Scanned [target].") - saved_item = target.type - saved_icon = target.icon - saved_icon_state = target.icon_state - saved_overlays = target.overlays + + if(!proximity) + return ..() + + if(active_dummy) + to_chat(user, SPAN_WARNING("\The [src] is already projecting. Turn it off first.")) + return TRUE + + if(!istype(target, /obj/item)) + to_chat(user, SPAN_WARNING("\The [src] can only mimic items.")) + return TRUE + + if(istype(target, /obj/item/disk/nuclear)) + to_chat(user, SPAN_WARNING("Inter-system tax fraud regulations prevent scanning \the [target].")) + return TRUE + + if(!target.simulated || !target.icon || !target.icon_state || !check_state_in_icon(target.icon_state, target.icon)) + to_chat(user, SPAN_WARNING("\The [target] is not suitable for scanning.")) + return TRUE + + playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) + to_chat(user, SPAN_NOTICE("Scanned [target].")) + saved_appearance = target.appearance /obj/item/chameleon/proc/toggle() - if(!can_use || !saved_item) return + + if(!can_use) + to_chat(usr, SPAN_WARNING("\The [src] needs time to recharge!")) + return + + if(!saved_appearance) + to_chat(usr, SPAN_WARNING("\The [src] needs to scan something to mimic first!")) + return + + playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) + var/obj/effect/overlay/T = new(get_turf(src)) + T.icon = 'icons/effects/effects.dmi' + flick("emppulse",T) + QDEL_IN(T, 8) + if(active_dummy) - eject_all() - playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - qdel(active_dummy) - active_dummy = null - to_chat(usr, "You deactivate the [src].") - var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - QDEL_IN(T, 8) + active_dummy.dump_contents() + QDEL_NULL(active_dummy) + to_chat(usr, SPAN_NOTICE("You deactivate \the [src].")) else - playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - var/obj/O = new saved_item(src) - if(!O) return - var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) - C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) - qdel(O) - to_chat(usr, "You activate the [src].") - var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - QDEL_IN(T, 8) + active_dummy = new(get_turf(usr), src) + active_dummy.appearance = saved_appearance + to_chat(usr, SPAN_NOTICE("You activate \the [src].")) + usr.forceMove(active_dummy) /obj/item/chameleon/proc/disrupt(var/delete_dummy = 1) - if(active_dummy) - spark_at(src, amount = 5, cardinal_only = TRUE, holder = src) - eject_all() - if(delete_dummy) - qdel(active_dummy) - active_dummy = null - can_use = 0 - spawn(50) can_use = 1 - -/obj/item/chameleon/proc/eject_all() - for(var/atom/movable/A in active_dummy) - A.forceMove(active_dummy.loc) - if(ismob(A)) - var/mob/M = A - M.reset_view(null) + if(!active_dummy) + return + spark_at(loc, amount = 5, cardinal_only = TRUE, holder = src) + active_dummy.dump_contents() + if(delete_dummy) + qdel(active_dummy) + active_dummy = null + can_use = FALSE + addtimer(CALLBACK(src, PROC_REF(reset_can_use)), 5 SECONDS, (TIMER_UNIQUE | TIMER_OVERRIDE)) + +/obj/item/chameleon/proc/reset_can_use() + can_use = TRUE /obj/effect/dummy/chameleon name = "" @@ -87,65 +103,75 @@ density = FALSE anchored = TRUE is_spawnable_type = FALSE - var/can_move = 1 + movement_handlers = list(/datum/movement_handler/delay/chameleon_projector) + var/can_move = TRUE var/obj/item/chameleon/master = null -/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, var/obj/item/chameleon/C) - name = O.name - desc = O.desc - icon = new_icon - icon_state = new_iconstate - overlays = new_overlays - set_dir(O.dir) - M.forceMove(src) - master = C +/obj/effect/dummy/chameleon/Initialize(mapload, var/obj/item/chameleon/projector) + . = ..() + verbs.Cut() + master = projector + if(!istype(master) || !master.saved_appearance) + master = null + return INITIALIZE_HINT_QDEL + appearance = master.saved_appearance master.active_dummy = src -/obj/effect/dummy/chameleon/attackby() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") +/obj/effect/dummy/chameleon/Destroy() + if(master) + master.disrupt(FALSE) + master = null + . = ..() + +/obj/effect/dummy/chameleon/proc/disrupted() + for(var/mob/held in src) + to_chat(held, SPAN_DANGER("Your [master.name] deactivates!")) master.disrupt() +/obj/effect/dummy/chameleon/attackby() + disrupted() + return TRUE + /obj/effect/dummy/chameleon/attack_hand() SHOULD_CALL_PARENT(FALSE) - for(var/mob/M in src) - to_chat(M, SPAN_DANGER("Your chameleon-projector deactivates.")) - master.disrupt() + disrupted() return TRUE /obj/effect/dummy/chameleon/explosion_act() SHOULD_CALL_PARENT(FALSE) - for(var/mob/M in src) - to_chat(M, SPAN_DANGER("Your chameleon-projector deactivates.")) - master.disrupt() + disrupted() /obj/effect/dummy/chameleon/bullet_act() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - ..() - master.disrupt() + disrupted() + +// This is not ideal, but the alternative is making the effect simulated. +// As it is, the effect can freely levitate over any open space. +/obj/effect/dummy/chameleon/Move() + . = ..() + if(. && isturf(loc) && loc.has_gravity() && !(locate(/obj/structure/catwalk) in loc) && !(locate(/obj/structure/lattice) in loc)) + disrupted() -/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) - if(!has_gravity()) - return //No magical space movement! +/datum/movement_handler/delay/chameleon_projector + delay = 2.5 SECONDS - if(can_move) - can_move = 0 - switch(user.bodytemperature) +/datum/movement_handler/delay/chameleon_projector/MayMove(mob/mover, is_external) + return host.loc?.has_gravity() ? ..() : MOVEMENT_STOP + +/datum/movement_handler/delay/chameleon_projector/DoMove(direction, mob/mover, is_external) + if(istype(mover)) + switch(mover.bodytemperature) if(300 to INFINITY) - spawn(10) can_move = 1 + delay = 1 SECOND if(295 to 300) - spawn(13) can_move = 1 + delay = 1.3 SECONDS if(280 to 295) - spawn(16) can_move = 1 + delay = 1.6 SECONDS if(260 to 280) - spawn(20) can_move = 1 + delay = 2 SECONDS else - spawn(25) can_move = 1 - if(isturf(loc)) - step(src, direction) - return - -/obj/effect/dummy/chameleon/Destroy() - master.disrupt(0) - . = ..() + delay = 2.5 SECONDS + else + delay = 2.5 SECONDS + ..() + step(host, direction) + return MOVEMENT_HANDLED diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm index 4cfce9098ac..46d0b95f99f 100644 --- a/code/game/objects/items/devices/dociler.dm +++ b/code/game/objects/items/devices/dociler.dm @@ -2,7 +2,7 @@ name = "dociler" desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat." w_class = ITEM_SIZE_NORMAL - origin_tech = "{'biotech':5,'materials':2}" + origin_tech = @'{"biotech":5,"materials":2}' icon = 'icons/obj/items/device/animal_tagger.dmi' icon_state = ICON_STATE_WORLD force = 1 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 42ec93f807f..c2abca5dc79 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -8,7 +8,7 @@ throw_speed = 4 throw_range = 10 obj_flags = OBJ_FLAG_CONDUCTIBLE - origin_tech = "{'magnets':2,'combat':1}" + origin_tech = @'{"magnets":2,"combat":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) @@ -126,7 +126,7 @@ name = "advanced flash" desc = "A device that produces a very bright flash of light. This is an advanced and expensive version often issued to VIPs." icon = 'icons/obj/items/device/flash_advanced.dmi' - origin_tech = "{'combat':2,'magnets':2}" + origin_tech = @'{"combat":2,"magnets":2}' str_min = 3 str_max = 8 material = /decl/material/solid/metal/steel diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 3efffdd142c..ec81f341725 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -4,7 +4,7 @@ var/global/list/all_gps_units = list() desc = "A handheld relay used to triangulates the approximate co-ordinates of the device." icon = 'icons/obj/items/device/locator.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'materials':2,'programming':2,'wormholes':2}" + origin_tech = @'{"materials":2,"programming":2,"wormholes":2}' material = /decl/material/solid/metal/aluminium matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, @@ -35,7 +35,7 @@ var/global/list/all_gps_units = list() global.all_gps_units += src . = ..() name = "[initial(name)] ([gps_tag])" - events_repository.register(/decl/observ/moved, src, src, .proc/update_holder) + events_repository.register(/decl/observ/moved, src, src, PROC_REF(update_holder)) compass = new(src) update_holder() update_icon() @@ -65,8 +65,8 @@ var/global/list/all_gps_units = list() if(!force_clear && ismob(loc)) holder = loc - moved_event.register(holder, src, .proc/update_compass) - dir_set_event.register(holder, src, .proc/update_compass) + moved_event.register(holder, src, PROC_REF(update_compass)) + dir_set_event.register(holder, src, PROC_REF(update_compass)) if(!force_clear && holder && tracking) if(!is_in_processing_list) @@ -103,7 +103,7 @@ var/global/list/all_gps_units = list() STOP_PROCESSING(SSobj, src) is_in_processing_list = FALSE global.all_gps_units -= src - events_repository.unregister(/decl/observ/moved, src, src, .proc/update_holder) + events_repository.unregister(/decl/observ/moved, src, src, PROC_REF(update_holder)) update_holder(force_clear = TRUE) QDEL_NULL(compass) return ..() @@ -187,7 +187,7 @@ var/global/list/all_gps_units = list() var/duration = 5 MINUTES / severity_modifier emped = TRUE update_icon() - addtimer(CALLBACK(src, .proc/reset_emp), duration) + addtimer(CALLBACK(src, PROC_REF(reset_emp)), duration) /obj/item/gps/proc/reset_emp() emped = FALSE diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index 94abe1f2e14..a6815ebad30 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -61,7 +61,7 @@ to_chat(user, "Your hacking attempt was succesful!") user.playsound_local(get_turf(src), 'sound/piano/A#6.ogg', 50) known_targets.Insert(1, target) // Insert the newly hacked target first, - events_repository.register(/decl/observ/destroyed, target, src, /obj/item/multitool/hacktool/proc/on_target_destroy) + events_repository.register(/decl/observ/destroyed, target, src, TYPE_PROC_REF(/obj/item/multitool/hacktool, on_target_destroy)) else to_chat(user, "Your hacking attempt failed!") return 1 diff --git a/code/game/objects/items/devices/inducer.dm b/code/game/objects/items/devices/inducer.dm index deb2571a584..042e24c5b04 100644 --- a/code/game/objects/items/devices/inducer.dm +++ b/code/game/objects/items/devices/inducer.dm @@ -5,24 +5,24 @@ icon_state = "inducer-sci" item_state = "inducer-sci" force = 7 - origin_tech = "{'powerstorage':6,'engineering':4}" + origin_tech = @'{"powerstorage":6,"engineering":4}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) slot_flags = SLOT_LOWER_BODY var/powertransfer = 500 var/coefficient = 0.9 - var/opened = FALSE var/failsafe = 0 - var/obj/item/cell/cell = /obj/item/cell var/recharging = FALSE /obj/item/inducer/Initialize() . = ..() - if(ispath(cell)) - cell = new cell(src) + setup_power_supply() update_icon() +/obj/item/inducer/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell, /obj/item/cell, /datum/extension/loaded_cell/panel, charge_value) + /obj/item/inducer/proc/induce(obj/item/cell/target) var/obj/item/cell/MyC = get_cell() var/missing = target.maxcharge - target.charge @@ -32,14 +32,6 @@ MyC.update_icon() target.update_icon() -/obj/item/inducer/get_cell() - return cell - -/obj/item/inducer/emp_act(severity) - ..() - if(cell) - cell.emp_act(severity) - /obj/item/inducer/afterattack(obj/O, mob/living/carbon/user, var/proximity) if (!proximity || user.a_intent == I_HURT || CannotUse(user) || !recharge(O, user)) return ..() @@ -54,29 +46,9 @@ return TRUE return FALSE - /obj/item/inducer/attackby(obj/item/W, mob/user) - if(IS_SCREWDRIVER(W)) - opened = !opened - to_chat(user, "You [opened ? "open" : "close"] the battery compartment.") - update_icon() - if(istype(W, /obj/item/cell)) - if (istype(W, /obj/item/cell/device)) - to_chat(user, "\The [src] only takes full-size power cells.") - return - if(opened) - if(!cell) - if(!user.try_unequip(W, src)) - return - to_chat(user, "You insert \the [W] into \the [src].") - cell = W - update_icon() - return - else - to_chat(user, "\The [src] already has \a [cell] installed!") - return if(CannotUse(user) || recharge(W, user)) - return + return TRUE return ..() /obj/item/inducer/proc/recharge(atom/A, mob/user) @@ -137,48 +109,22 @@ /obj/item/inducer/attack(mob/M, mob/user) return - -/obj/item/inducer/attack_self(mob/user) - if(opened && cell) - user.visible_message("\The [user] removes \the [cell] from \the [src]!","You remove \the [cell].") - cell.update_icon() - user.put_in_hands(cell) - cell = null - update_icon() - - -/obj/item/inducer/examine(mob/living/M) - . = ..() - var/obj/item/cell/MyC = get_cell() - if(MyC) - to_chat(M, "Its display shows: [MyC.percent()]%.") - else - to_chat(M,"Its display is dark.") - if(opened) - to_chat(M,"Its battery compartment is open.") - /obj/item/inducer/on_update_icon() . = ..() - if(opened) + var/datum/extension/loaded_cell/panel/cell_loaded = get_extension(src, /datum/extension/loaded_cell) + if(istype(cell_loaded) && cell_loaded.panel_open) add_overlay("inducer-[get_cell()? "bat" : "nobat"]") -/obj/item/inducer/Destroy() - . = ..() - if(!ispath(cell)) - QDEL_NULL(cell) - // module version /obj/item/inducer/borg icon_state = "inducer-engi" item_state = "inducer-engi" failsafe = 0.2 - cell = null -/obj/item/inducer/borg/attackby(obj/item/W, mob/user) - if(IS_SCREWDRIVER(W)) - return - . = ..() +/obj/item/inducer/borg/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return /obj/item/inducer/borg/on_update_icon() . = ..() @@ -197,4 +143,4 @@ to_chat(user, "You switch your battery output failsafe [safety() ? "on" : "off" ].") /obj/item/inducer/borg/get_cell() - return loc ? loc.get_cell() : null \ No newline at end of file + return loc?.get_cell() \ No newline at end of file diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 43af97a598f..3e1ebbe0e7c 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -50,7 +50,7 @@ ) obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_LOWER_BODY - origin_tech = "{'magnets':3,'materials':2}" + origin_tech = @'{"magnets":3,"materials":2}' var/max_uses = 32 var/uses = 32 diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 0c3d744cc1c..42723e07744 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -21,7 +21,7 @@ /decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE ) - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' var/buffer_name var/atom/buffer_object @@ -55,7 +55,7 @@ unregister_buffer(buffer_object) buffer_object = buffer if(buffer_object) - events_repository.register(/decl/observ/destroyed, buffer_object, src, /obj/item/multitool/proc/unregister_buffer) + events_repository.register(/decl/observ/destroyed, buffer_object, src, TYPE_PROC_REF(/obj/item/multitool, unregister_buffer)) /obj/item/multitool/proc/unregister_buffer(var/atom/buffer_to_unregister) // Only remove the buffered object, don't reset the name diff --git a/code/game/objects/items/devices/oxycandle.dm b/code/game/objects/items/devices/oxycandle.dm index 7c0c3fee18a..0040ac66082 100644 --- a/code/game/objects/items/devices/oxycandle.dm +++ b/code/game/objects/items/devices/oxycandle.dm @@ -22,10 +22,8 @@ . = ..() update_icon() -/obj/item/oxycandle/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O) && on) - O.HandleObjectHeating(src, user, 500) - ..() +/obj/item/oxycandle/get_heat() + return on ? 500 : 0 /obj/item/oxycandle/attack_self(mob/user) if(!on) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index ba96cf25b7d..e2ac84e76f5 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -5,7 +5,7 @@ var/global/list/pai_cards = list() icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_SMALL slot_flags = SLOT_LOWER_BODY - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' material = /decl/material/solid/fiberglass matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) @@ -32,7 +32,7 @@ var/global/list/pai_cards = list() global.pai_cards -= src //Will stop people throwing friend pAIs into the singularity so they can respawn if(!isnull(pai)) - pai.death(0) + pai.death() QDEL_NULL(radio) return ..() @@ -264,7 +264,7 @@ var/global/list/pai_cards = list() to_chat(M, SPAN_ORANGE("

    Byte by byte you lose your sense of self.

    ")) to_chat(M, SPAN_PINK("

    Your mental faculties leave you.

    ")) to_chat(M, SPAN_PALEPINK("
    oblivion...
    ")) - M.death(0) + M.death() removePersonality() if(href_list["wires"]) var/t1 = text2num(href_list["wires"]) diff --git a/code/game/objects/items/devices/paint_sprayer.dm b/code/game/objects/items/devices/paint_sprayer.dm index a37a84867ab..94795192873 100644 --- a/code/game/objects/items/devices/paint_sprayer.dm +++ b/code/game/objects/items/devices/paint_sprayer.dm @@ -86,7 +86,7 @@ var/mob/M = loc M.update_inhand_overlays() -/obj/item/paint_sprayer/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/paint_sprayer/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && check_state_in_icon("[overlay.icon_state]_color", overlay.icon)) overlay.overlays += overlay_image(overlay.icon, "[overlay.icon_state]_color", paint_color) . = ..() diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 55cff27a52d..e20296b8724 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -14,7 +14,7 @@ material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metallic_hydrogen = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'powerstorage':3,'esoteric':5}" + origin_tech = @'{"powerstorage":3,"esoteric":5}' var/drain_rate = 1500000 // amount of power to drain per tick var/power_drained = 0 // Amount of power drained. var/max_power = 5e9 // Detonation point. diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 3edfa8a2ef8..da15d031d83 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -6,13 +6,16 @@ var/global/list/radio_beacons = list() icon = 'icons/obj/items/device/radio/beacon.dmi' icon_state = "beacon" item_state = "signaler" - origin_tech = "{'wormholes':1}" + origin_tech = @'{"wormholes":1}' material = /decl/material/solid/metal/aluminium matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) var/code = "electronic" var/functioning = TRUE +SAVED_VAR(/obj/item/radio/beacon, code) +SAVED_VAR(/obj/item/radio/beacon, functioning) + /obj/item/radio/beacon/Initialize() . = ..() global.radio_beacons += src diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 727c063217f..dc29d7b3e4b 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -2,15 +2,40 @@ name = "standard encryption key" desc = "An encryption key for a radio headset. Contains cypherkeys." icon = 'icons/obj/items/device/radio/key.dmi' - icon_state = "cypherkey" - item_state = "" + icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) + color = COLOR_GRAY80 + var/contact_color = COLOR_PALE_GOLD + var/fill_color = COLOR_MID_BLUE_GRAY + var/inlay_color = COLOR_RED var/translate_binary var/list/can_decrypt +/obj/item/encryptionkey/Initialize() + . = ..() + update_icon() + +/obj/item/encryptionkey/on_update_icon() + . = ..() + if(contact_color) + var/image/I = image(icon, "[icon_state]_contact") + I.color = contact_color + I.appearance_flags |= RESET_COLOR + add_overlay(I) + if(fill_color) + var/image/I = image(icon, "[icon_state]_fill") + I.color = fill_color + I.appearance_flags |= RESET_COLOR + add_overlay(I) + if(inlay_color) + var/image/I = image(icon, "[icon_state]_inlay") + I.color = inlay_color + I.appearance_flags |= RESET_COLOR + add_overlay(I) + /obj/item/encryptionkey/attack_self(mob/user) if(alert(user, "Do you wish to factory reset this encryption key? This will remove ALL channel access and cannot be undone.", "Factory Reset", "No", "Yes") == "Yes" && !user.incapacitated() && user.get_held_slot_for_item(src)) can_decrypt = null @@ -33,6 +58,5 @@ . = ..() /obj/item/encryptionkey/binary - icon_state = "cypherkey" translate_binary = TRUE - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 62a574046b7..0d58d152d45 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -6,12 +6,15 @@ material = /decl/material/solid/metal/aluminium canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_EARS - cell = null power_usage = 0 can_use_analog = FALSE encryption_keys = list(/obj/item/encryptionkey) encryption_key_capacity = 2 +/obj/item/radio/headset/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return + /obj/item/radio/headset/on_update_icon() icon_state = get_world_inventory_state() cut_overlays() @@ -24,4 +27,4 @@ if(network) add_overlay("[icon_state]-online") else - add_overlay("[icon_state]-offline") + add_overlay("[icon_state]-offline") \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/headsets_shared.dm b/code/game/objects/items/devices/radio/headsets_shared.dm index bed832cd35f..94d85ebec84 100644 --- a/code/game/objects/items/devices/radio/headsets_shared.dm +++ b/code/game/objects/items/devices/radio/headsets_shared.dm @@ -5,7 +5,7 @@ /obj/item/encryptionkey/cargo name = "supply radio encryption key" - icon_state = "med_cypherkey" + inlay_color = COLOR_ASSEMBLY_WHITE can_decrypt = list(access_cargo) /obj/item/radio/headset/headset_mining @@ -16,7 +16,7 @@ /obj/item/encryptionkey/mining name = "mining radio encryption key" - icon_state = "med_cypherkey" + inlay_color = COLOR_ASSEMBLY_WHITE can_decrypt = list(access_mining) /obj/item/radio/headset/headset_sec name = "security radio headset" @@ -25,7 +25,7 @@ /obj/item/encryptionkey/sec name = "security radio encryption key" - icon_state = "sec_cypherkey" + inlay_color = COLOR_BLOOD_RED can_decrypt = list(access_security) /obj/item/radio/headset/headset_med @@ -36,7 +36,7 @@ /obj/item/encryptionkey/med name = "medical radio encryption key" - icon_state = "med_cypherkey" + inlay_color = COLOR_ASSEMBLY_WHITE can_decrypt = list(access_medical) /obj/item/radio/headset/headset_service @@ -47,7 +47,7 @@ /obj/item/encryptionkey/service name = "service radio encryption key" - icon_state = "srv_cypherkey" + inlay_color = COLOR_VERDANT_GREEN can_decrypt = list(access_bar) /obj/item/radio/headset/headset_sci @@ -58,7 +58,7 @@ /obj/item/encryptionkey/sci name = "science radio encryption key" - icon_state = "sci_cypherkey" + inlay_color = COLOR_SCIENCE_PURPLE can_decrypt = list(access_research) /obj/item/radio/headset/headset_eng @@ -69,7 +69,7 @@ /obj/item/encryptionkey/eng name = "engineering radio encryption key" - icon_state = "eng_cypherkey" + inlay_color = PIPE_COLOR_YELLOW can_decrypt = list(access_engine) /obj/item/radio/headset/heads @@ -79,9 +79,14 @@ /obj/item/encryptionkey/command name = "command encryption key" - icon_state = "com_cypherkey" + inlay_color = COLOR_ROYAL_BLUE can_decrypt = list(access_bridge) +/obj/item/encryptionkey/heads + color = COLOR_GOLD + fill_color = COLOR_PALE_GOLD + inlay_color = COLOR_ROYAL_BLUE + /obj/item/radio/headset/heads/ce name = "chief engineer's headset" desc = "The headset of the boss engineer." @@ -90,7 +95,6 @@ /obj/item/encryptionkey/heads/ce name = "chief engineer's encryption key" - icon_state = "cap_cypherkey" can_decrypt = list( access_bridge, access_engine @@ -104,7 +108,6 @@ /obj/item/encryptionkey/heads/cmo name = "chief medical officer's encryption key" - icon_state = "cap_cypherkey" can_decrypt = list( access_bridge, access_medical @@ -118,7 +121,6 @@ /obj/item/encryptionkey/heads/rd name = "research director's encryption key" - icon_state = "cap_cypherkey" can_decrypt = list( access_bridge, access_research @@ -131,7 +133,6 @@ /obj/item/encryptionkey/heads/captain name = "captain's encryption key" - icon_state = "cap_cypherkey" can_decrypt = list( access_bridge, access_security, @@ -149,7 +150,6 @@ /obj/item/encryptionkey/heads/hop name = "head of personnel's encryption key" - icon_state = "hop_cypherkey" can_decrypt = list( access_bar, access_cargo, @@ -165,8 +165,8 @@ encryption_keys = list(/obj/item/encryptionkey/heads/hos) /obj/item/encryptionkey/heads/hos - name = "head of personnel's encryption key" - icon_state = "hos_cypherkey" + name = "head of security's encryption key" + inlay_color = COLOR_BLOOD_RED can_decrypt = list( access_bridge, access_security @@ -183,13 +183,12 @@ encryption_keys = list(/obj/item/encryptionkey/ert) /obj/item/encryptionkey/mercenary - icon_state = "cypherkey" - origin_tech = "{'esoteric':2}" + origin_tech = @'{"esoteric":2}' can_decrypt = list(access_mercenary) /obj/item/radio/headset/mercenary can_use_analog = TRUE - origin_tech = "{'esoteric':2}" + origin_tech = @'{"esoteric":2}' encryption_keys = list(/obj/item/encryptionkey/mercenary) analog_secured = list((access_mercenary) = TRUE) @@ -203,13 +202,12 @@ encryption_keys = list(/obj/item/encryptionkey/entertainment) /obj/item/encryptionkey/raider - icon_state = "cypherkey" - origin_tech = "{'esoteric':2}" + origin_tech = @'{"esoteric":2}' can_decrypt = list(access_raider) /obj/item/radio/headset/raider can_use_analog = TRUE - origin_tech = "{'esoteric':2}" + origin_tech = @'{"esoteric":2}' encryption_keys = list(/obj/item/encryptionkey/raider) analog_secured = list((access_raider) = TRUE) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 0ac0db62673..e3bad8caa7a 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -7,16 +7,19 @@ anchored = TRUE w_class = ITEM_SIZE_STRUCTURE canhear_range = 2 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD + atom_flags = ATOM_FLAG_NO_BLOOD obj_flags = OBJ_FLAG_CONDUCTIBLE | OBJ_FLAG_MOVES_UNSUPPORTED layer = ABOVE_WINDOW_LAYER - cell = null power_usage = 0 intercom = TRUE intercom_handling = TRUE - directional_offset = "{'NORTH':{'y':-30}, 'SOUTH':{'y':20}, 'EAST':{'x':-22}, 'WEST':{'x':22}}" + directional_offset = @'{"NORTH":{"y":-30}, "SOUTH":{"y":20}, "EAST":{"x":-22}, "WEST":{"x":22}}' var/last_tick //used to delay the powercheck +/obj/item/radio/intercom/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return + /obj/item/radio/intercom/Initialize() . = ..() START_PROCESSING(SSobj, src) @@ -83,5 +86,10 @@ /obj/item/radio/intercom/locked var/locked_frequency +SAVED_VAR(/obj/item/radio/intercom/locked, locked_frequency) + /obj/item/radio/intercom/locked/set_frequency() ..(locked_frequency) + +/obj/item/radio/intercom/locked/entertainment + locked_frequency = 1461 \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 883f0f02243..809442098e5 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -38,7 +38,6 @@ material = /decl/material/solid/metal/aluminium matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - var/obj/item/cell/cell = /obj/item/cell/device var/power_usage = 2800 var/last_radio_sound = -INFINITY var/initial_network_id @@ -65,6 +64,24 @@ var/analog_secured = list() // list of accesses used for encrypted analog, mainly for mercs/raiders var/datum/radio_frequency/analog_radio_connection +SAVED_VAR(/obj/item/radio, wires) +SAVED_VAR(/obj/item/radio, panel_open) +SAVED_VAR(/obj/item/radio, encryption_keys) +SAVED_VAR(/obj/item/radio, on) +SAVED_VAR(/obj/item/radio, frequency) +SAVED_VAR(/obj/item/radio, traitor_frequency) +SAVED_VAR(/obj/item/radio, broadcasting) +SAVED_VAR(/obj/item/radio, listening) +SAVED_VAR(/obj/item/radio, analog) +SAVED_VAR(/obj/item/radio, analog_secured) + +/obj/item/radio/proc/get_radio_listeners() + for(var/mob/listener in hearers(canhear_range, get_turf(src))) + LAZYDISTINCTADD(., listener.resolve_to_radio_listeners()) + +/obj/item/radio/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/device, /obj/item/cell/device, /datum/extension/loaded_cell, charge_value) + /obj/item/radio/get_radio(var/message_mode) return src @@ -90,22 +107,30 @@ if(analog && frequency) analog_radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) -/obj/item/radio/Initialize() +/obj/item/radio/Initialize(ml, material_key) . = ..() wires = new(src) - if(ispath(cell)) - cell = new(src) + setup_power_supply() global.listening_objects += src set_frequency(sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)) if(radio_device_type) set_extension(src, /datum/extension/network_device/radio, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) + if(!(persistent_id && length(encryption_keys))) + populate_encryption_keys() + +/** Create any defined encryption keys, leave alone those loaded from save. */ +/obj/item/radio/proc/populate_encryption_keys() var/list/created_encryption_keys for(var/keytype in encryption_keys) LAZYADD(created_encryption_keys, new keytype(src)) encryption_keys = created_encryption_keys +/obj/item/radio/after_deserialize() + encryption_key_capacity = max(encryption_key_capacity, length(encryption_keys)) + . = ..() + /obj/item/radio/proc/get_available_channels() if(!channels) sync_channels_with_network() @@ -212,9 +237,6 @@ /obj/item/radio/proc/has_channel_access(var/mob/user, var/freq) return TRUE // TODO: add antag/valid bounds checking -/obj/item/radio/get_cell() - return cell - /obj/item/radio/proc/toggle_broadcast() broadcasting = !broadcasting && !(wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) @@ -282,14 +304,6 @@ . = TOPIC_REFRESH if(href_list["nowindow"]) // here for pAIs, maybe others will want it, idk return TOPIC_HANDLED - - if(href_list["remove_cell"]) - if(cell) - var/mob/user = usr - user.put_in_hands(cell) - to_chat(user, SPAN_NOTICE("You remove [cell] from \the [src].")) - cell = null - . = TOPIC_REFRESH if(href_list["network_settings"]) var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) D.ui_interact(usr) @@ -346,7 +360,7 @@ if(istype(M)) M.trigger_aiming(TARGET_CAN_RADIO) - addtimer(CALLBACK(src, .proc/transmit, M, message, message_mode, verb, speaking), 0) + addtimer(CALLBACK(src, PROC_REF(transmit), M, message, message_mode, verb, speaking), 0) /obj/item/radio/proc/can_transmit_binary() for(var/obj/item/encryptionkey/key in encryption_keys) @@ -490,11 +504,6 @@ return TRUE return toggle_panel(user) - if(!cell && power_usage && istype(W, /obj/item/cell/device) && user.try_unequip(W, target = src)) - to_chat(user, SPAN_NOTICE("You slot \the [W] into \the [src].")) - cell = W - return TRUE - . = ..() /obj/item/radio/proc/toggle_panel(var/mob/user) @@ -509,9 +518,7 @@ var/list/current_channels = get_available_channels() for(var/channel in current_channels) LAZYSET(channels, channel, FALSE) - if(cell) - cell.emp_act(severity) - ..() + return ..() /obj/item/radio/CouldUseTopic(var/mob/user) ..() diff --git a/code/game/objects/items/devices/radio/radio_announcer.dm b/code/game/objects/items/devices/radio/radio_announcer.dm index b0b5f92390d..3a7ab556332 100644 --- a/code/game/objects/items/devices/radio/radio_announcer.dm +++ b/code/game/objects/items/devices/radio/radio_announcer.dm @@ -16,7 +16,6 @@ var/global/list/announcers = list() return global.announcers["[z]"] /obj/item/radio/announcer - cell = null canhear_range = 0 power_usage = 0 listening = FALSE @@ -26,6 +25,10 @@ var/global/list/announcers = list() decrypt_all_messages = TRUE is_spawnable_type = FALSE +/obj/item/radio/announcer/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return + /obj/item/radio/announcer/Destroy() SHOULD_CALL_PARENT(FALSE) PRINT_STACK_TRACE("attempt to delete a [src.type] prevented.") diff --git a/code/game/objects/items/devices/radio/radio_borg.dm b/code/game/objects/items/devices/radio/radio_borg.dm index 42dc4794f32..c8c6935215e 100644 --- a/code/game/objects/items/devices/radio/radio_borg.dm +++ b/code/game/objects/items/devices/radio/radio_borg.dm @@ -2,11 +2,14 @@ icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component. icon_state = "radio" canhear_range = 0 - cell = null power_usage = 0 is_spawnable_type = FALSE var/shut_up = 1 +/obj/item/radio/borg/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return + /obj/item/radio/borg/can_receive_message(var/check_network_membership) . = ..() && isrobot(loc) if(.) diff --git a/code/game/objects/items/devices/radio/radio_exosuit.dm b/code/game/objects/items/devices/radio/radio_exosuit.dm index 89e085cd052..88b782443d2 100644 --- a/code/game/objects/items/devices/radio/radio_exosuit.dm +++ b/code/game/objects/items/devices/radio/radio_exosuit.dm @@ -1,13 +1,16 @@ -//The exosuit radio subtype. It allows pilots to interact and consumes exosuit power +//The exosuit radio subtype. It allows pilots to interact and consumes exosuit power /obj/item/radio/exosuit name = "exosuit radio" - cell = null + +/obj/item/radio/exosuit/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return /obj/item/radio/exosuit/get_cell() - . = ..() - if(!. && isexosuit(loc)) + if(isexosuit(loc)) var/mob/living/exosuit/E = loc return E.get_cell() + return ..() /obj/item/radio/exosuit/nano_host() if(isexosuit(loc)) diff --git a/code/game/objects/items/devices/scanners/breath.dm b/code/game/objects/items/devices/scanners/breath.dm index 8f0b771a617..02583fae7f0 100644 --- a/code/game/objects/items/devices/scanners/breath.dm +++ b/code/game/objects/items/devices/scanners/breath.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items/device/scanner/breath_scanner.dmi' item_flags = ITEM_FLAG_NO_BLUDGEON material = /decl/material/solid/metal/aluminium - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' printout_color = "#deebff" var/mode = 1 diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index 95e6f06581a..a9311cc11aa 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -6,7 +6,7 @@ name = "gas analyzer" desc = "A hand-held environmental scanner which reports current gas levels. Has a button to cycle modes." icon = 'icons/obj/items/device/scanner/atmos_scanner.dmi' - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' window_width = 350 window_height = 400 var/mode = DEFAULT_MODE diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index 95504fa8d04..0bbe2dae5e7 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items/device/scanner/health_scanner.dmi' item_flags = ITEM_FLAG_NO_BLUDGEON material = /decl/material/solid/metal/aluminium - origin_tech = "{'magnets':1,'biotech':1}" + origin_tech = @'{"magnets":1,"biotech":1}' printout_color = "#deebff" var/mode = 1 diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index 0e2d7289cf3..3eda6f1a4f4 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -2,8 +2,8 @@ name = "mass spectrometer" desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample or analyzes unusual chemicals." icon = 'icons/obj/items/device/scanner/spectrometer.dmi' - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - origin_tech = "{'magnets':2,'biotech':2}" + atom_flags = ATOM_FLAG_OPEN_CONTAINER + origin_tech = @'{"magnets":2,"biotech":2}' window_width = 550 window_height = 300 scan_sound = 'sound/effects/scanbeep.ogg' @@ -85,4 +85,4 @@ name = "advanced mass spectrometer" icon = 'icons/obj/items/device/scanner/advanced_spectrometer.dmi' details = 1 - origin_tech = "{'magnets':4,'biotech':2}" \ No newline at end of file + origin_tech = @'{"magnets":4,"biotech":2}' \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners/mining.dm b/code/game/objects/items/devices/scanners/mining.dm index 678a262e973..ac9d97451cc 100644 --- a/code/game/objects/items/devices/scanners/mining.dm +++ b/code/game/objects/items/devices/scanners/mining.dm @@ -4,6 +4,9 @@ var/list/resources var/surveyed = FALSE +SAVED_VAR(/datum/extension/buried_resources, resources) +SAVED_VAR(/datum/extension/buried_resources, surveyed) + /datum/extension/buried_resources/New(datum/holder, list/resource_list) resources = resource_list ..() @@ -12,7 +15,7 @@ name = "ore detector" desc = "A complex device used to locate ore deep underground." icon = 'icons/obj/items/device/scanner/ore_scanner.dmi' - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' use_delay = 50 printout_color = "#fff7f0" var/survey_data = 0 @@ -21,7 +24,7 @@ /obj/item/scanner/mining/examine(mob/user) . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [survey_data] good explorer points.") + to_chat(user,"A tiny indicator on the [src] shows it holds [survey_data] good explorer point\s.") /obj/item/scanner/mining/is_valid_scan_target(turf/T) return istype(T) @@ -33,19 +36,19 @@ scan_data = scan_results[1] else scan_data += "
    [scan_results[1]]" - to_chat(user, "[html_icon(src)] \The [src] displays a readout.") + to_chat(user, SPAN_NOTICE("[html_icon(src)] \The [src] displays a readout.")) to_chat(user, scan_results[1]) if(scan_results[2]) survey_data += scan_results[2] playsound(loc, 'sound/machines/ping.ogg', 40, 1) - to_chat(user,"New survey data stored - [scan_results[2]] GEP.") + to_chat(user, SPAN_NOTICE("New survey data stored - earned [scan_results[2]] GEP.")) /obj/item/scanner/mining/proc/put_disk_in_hand(var/mob/M) if(!survey_data) - to_chat(M,"There is no survey data stored on the [src].") - return 0 - visible_message("The [src] spits out a disk containing [survey_data] GEP.") + to_chat(M, SPAN_WARNING("There is no survey data stored on the [src].")) + return FALSE + visible_message(SPAN_NOTICE("\The [src] spits out a disk containing [survey_data] GEP.")) var/obj/item/disk/survey/D = new(get_turf(src)) D.data = survey_data survey_data = 0 @@ -64,15 +67,6 @@ return put_disk_in_hand(M) -/obj/item/disk/survey - name = "survey data disk" - color = COLOR_DARK_BROWN - var/data - -/obj/item/disk/survey/examine(mob/user) - . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [data] good explorer points.") - //Returns list of two elements, 1 is text output, 2 is amoutn of GEP data /proc/mineral_scan_results(turf/target) var/list/metals = list( diff --git a/code/game/objects/items/devices/scanners/network.dm b/code/game/objects/items/devices/scanners/network.dm index 5a4d709db99..e96a840d7e5 100644 --- a/code/game/objects/items/devices/scanners/network.dm +++ b/code/game/objects/items/devices/scanners/network.dm @@ -2,7 +2,7 @@ name = "network analyzer" desc = "A hand-held network scanner which detects nearby network devices and returns information about them." icon = 'icons/obj/items/device/scanner/network_scanner.dmi' - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' window_width = 350 window_height = 400 diff --git a/code/game/objects/items/devices/scanners/price.dm b/code/game/objects/items/devices/scanners/price.dm index c8ac36ad37b..0f8c0c7036d 100644 --- a/code/game/objects/items/devices/scanners/price.dm +++ b/code/game/objects/items/devices/scanners/price.dm @@ -2,7 +2,7 @@ name = "price scanner" desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy." icon = 'icons/obj/items/device/scanner/price_scanner.dmi' - origin_tech = "{'materials':6,'magnets':4}" + origin_tech = @'{"materials":6,"magnets":4}' scan_sound = 'sound/effects/checkout.ogg' material = /decl/material/solid/metal/steel matter = list( diff --git a/code/game/objects/items/devices/scanners/reagents.dm b/code/game/objects/items/devices/scanners/reagents.dm index 971c3e3e95c..2087c8027ba 100644 --- a/code/game/objects/items/devices/scanners/reagents.dm +++ b/code/game/objects/items/devices/scanners/reagents.dm @@ -2,7 +2,7 @@ name = "reagent scanner" desc = "A hand-held reagent scanner which identifies chemical agents." icon = 'icons/obj/items/device/scanner/spectrometer.dmi' - origin_tech = "{'magnets':2,'biotech':2}" + origin_tech = @'{"magnets":2,"biotech":2}' scan_sound = 'sound/effects/scanbeep.ogg' var/details = 0 @@ -29,4 +29,4 @@ name = "advanced reagent scanner" icon = 'icons/obj/items/device/scanner/advanced_spectrometer.dmi' details = 1 - origin_tech = "{'magnets':4,'biotech':2}" \ No newline at end of file + origin_tech = @'{"magnets":4,"biotech":2}' \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners/xenobio.dm b/code/game/objects/items/devices/scanners/xenobio.dm index b3b0f38924f..bff60fb4a5f 100644 --- a/code/game/objects/items/devices/scanners/xenobio.dm +++ b/code/game/objects/items/devices/scanners/xenobio.dm @@ -5,7 +5,7 @@ icon_state = ICON_STATE_WORLD scan_sound = 'sound/effects/scanbeep.ogg' printout_color = "#f3e6ff" - origin_tech = "{'magnets':1,'biotech':1}" + origin_tech = @'{"magnets":1,"biotech":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -50,7 +50,9 @@ var/decl/material/mat = GET_DECL(species.exhale_type) . += "Exhales:\t[mat.gas_name]" . += "Known toxins:\t[english_list(species.poison_types)]" - . += "Temperature comfort zone:\t[species.cold_discomfort_level] K to [species.heat_discomfort_level] K" + var/decl/bodytype/root_bodytype = get_bodytype() + if(root_bodytype) + . += "Temperature comfort zone:\t[root_bodytype.cold_discomfort_level] K to [root_bodytype.heat_discomfort_level] K" . += "Pressure comfort zone:\t[species.warning_low_pressure] kPa to [species.warning_high_pressure] kPa" . = jointext(., "
    ") diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 7f6a25ed9f4..6e079636ac4 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -14,7 +14,7 @@ throw_range = 15 throw_speed = 3 - origin_tech = "{'programming':1,'engineering':1,'esoteric':3}" + origin_tech = @'{"programming":1,"engineering":1,"esoteric":3}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT, @@ -62,7 +62,7 @@ icon_state = ICON_STATE_WORLD color = COLOR_GRAY80 w_class = ITEM_SIZE_SMALL - origin_tech = "{'programming':1,'engineering':1,'esoteric':3}" + origin_tech = @'{"programming":1,"engineering":1,"esoteric":3}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT, @@ -102,12 +102,12 @@ /obj/item/spy_monitor/proc/pair(var/obj/item/spy_bug/SB, var/mob/living/user) to_chat(user, SPAN_NOTICE("\The [SB] has been paired with \the [src].")) - events_repository.register(/decl/observ/destroyed, SB, src, .proc/unpair) + events_repository.register(/decl/observ/destroyed, SB, src, PROC_REF(unpair)) cameras += SB /obj/item/spy_monitor/proc/unpair(var/obj/item/spy_bug/SB, var/mob/living/user) to_chat(user, SPAN_NOTICE("\The [SB] has been unpaired from \the [src].")) - events_repository.unregister(/decl/observ/destroyed, SB, src, .proc/unpair) + events_repository.unregister(/decl/observ/destroyed, SB, src, PROC_REF(unpair)) if(selected_camera == SB) selected_camera = null cameras -= SB @@ -154,4 +154,5 @@ broadcasting = 0 canhear_range = 1 name = "spy device" - icon_state = "syn_cypherkey" + icon = 'icons/obj/items/device/radio/spybug.dmi' + icon_state = ICON_STATE_WORLD diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index db056f3e0eb..75801bc5fb8 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -16,7 +16,7 @@ material = /decl/material/solid/metal/aluminium matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'magnets':2,'materials':2}" + origin_tech = @'{"magnets":2,"materials":2}' var/on = 0 //is it turned on? var/cover_open = 0 //is the cover open? diff --git a/code/game/objects/items/devices/suit_sensor_jammer.dm b/code/game/objects/items/devices/suit_sensor_jammer.dm index ab6b2b7c9fb..e1beec8c025 100644 --- a/code/game/objects/items/devices/suit_sensor_jammer.dm +++ b/code/game/objects/items/devices/suit_sensor_jammer.dm @@ -16,19 +16,17 @@ ) var/active = FALSE var/range = 2 // This is a radius, thus a range of 7 covers the entire visible screen - var/obj/item/cell/bcell = /obj/item/cell/high var/suit_sensor_jammer_method/jammer_method var/list/suit_sensor_jammer_methods_by_type var/list/suit_sensor_jammer_methods /obj/item/suit_sensor_jammer/Initialize() . = ..() - if(ispath(bcell)) - bcell = new bcell(src) + set_extension(src, /datum/extension/loaded_cell/unremovable, /obj/item/cell, /obj/item/cell/high) suit_sensor_jammer_methods = list() suit_sensor_jammer_methods_by_type = list() for(var/jammer_method_type in subtypesof(/suit_sensor_jammer_method)) - var/new_method = new jammer_method_type(src, /obj/item/suit_sensor_jammer/proc/may_process_crew_data) + var/new_method = new jammer_method_type(src, TYPE_PROC_REF(/obj/item/suit_sensor_jammer, may_process_crew_data)) dd_insertObjectList(suit_sensor_jammer_methods, new_method) suit_sensor_jammer_methods_by_type[jammer_method_type] = new_method jammer_method = suit_sensor_jammer_methods[1] @@ -36,8 +34,6 @@ /obj/item/suit_sensor_jammer/Destroy() . = ..() - qdel(bcell) - bcell = null jammer_method = null for(var/method in suit_sensor_jammer_methods) qdel(method) @@ -48,65 +44,39 @@ /obj/item/suit_sensor_jammer/attack_self(var/mob/user) ui_interact(user) -/obj/item/suit_sensor_jammer/get_cell() - return bcell - -/obj/item/suit_sensor_jammer/attackby(obj/item/I, mob/user) - if(IS_CROWBAR(I)) - if(bcell) - to_chat(user, "You remove \the [bcell].") - disable() - bcell.dropInto(loc) - bcell = null - else - to_chat(user, "There is no cell to remove.") - else if(istype(I, /obj/item/cell)) - if(bcell) - to_chat(user, "There's already a cell in \the [src].") - else if(user.try_unequip(I)) - I.forceMove(src) - bcell = I - to_chat(user, "You insert \the [bcell] into \the [src]..") - else - to_chat(user, "You're unable to insert the battery.") - /obj/item/suit_sensor_jammer/on_update_icon() . = ..() - if(bcell) - var/percent = bcell.percent() - switch(percent) - if(0 to 25) - add_overlay("forth_quarter") - if(25 to 50) - add_overlay("one_quarter") - add_overlay("third_quarter") - if(50 to 75) - add_overlay("two_quarters") - add_overlay("second_quarter") - if(75 to 99) - add_overlay("three_quarters") - add_overlay("first_quarter") - else - add_overlay("four_quarters") - - if(active) - add_overlay("active") + var/obj/item/cell/cell = get_cell() + if(!cell) + return + var/percent = cell.percent() + switch(percent) + if(0 to 25) + add_overlay("forth_quarter") + if(25 to 50) + add_overlay("one_quarter") + add_overlay("third_quarter") + if(50 to 75) + add_overlay("two_quarters") + add_overlay("second_quarter") + if(75 to 99) + add_overlay("three_quarters") + add_overlay("first_quarter") + else + add_overlay("four_quarters") + if(active) + add_overlay("active") /obj/item/suit_sensor_jammer/emp_act(var/severity) ..() - if(bcell) - bcell.emp_act(severity) - if(prob(70/severity)) enable() else disable() - if(prob(90/severity)) set_method(suit_sensor_jammer_methods_by_type[/suit_sensor_jammer_method/random]) else set_method(pick(suit_sensor_jammer_methods)) - var/new_range = range + (rand(0,6) / severity) - (rand(0,3) / severity) set_range(new_range) @@ -115,14 +85,16 @@ if(distance <= 3) var/list/message = list() message += "This device appears to be [active ? "" : "in"]active and " - if(bcell) - message += "displays a charge level of [bcell.percent()]%." + var/obj/item/cell/cell = get_cell() + if(cell) + message += "displays a charge level of [cell.percent()]%." else message += "is lacking a cell." to_chat(user, jointext(message,.)) /obj/item/suit_sensor_jammer/CanUseTopic(user, state) - if(!bcell || bcell.charge <= 0) + var/obj/item/cell/cell = get_cell() + if(!cell || cell.charge <= 0) return STATUS_CLOSE return ..() @@ -131,10 +103,11 @@ for(var/suit_sensor_jammer_method/ssjm in suit_sensor_jammer_methods) methods[++methods.len] = list("name" = ssjm.name, "cost" = ssjm.energy_cost, "ref" = "\ref[ssjm]") + var/obj/item/cell/cell = get_cell() var/list/data = list( "active" = active, - "current_charge" = bcell ? round(bcell.charge, 1) : 0, - "max_charge" = bcell ? bcell.maxcharge : 0, + "current_charge" = cell ? round(cell.charge, 1) : 0, + "max_charge" = cell ? cell.maxcharge : 0, "range" = range, "max_range" = JAMMER_MAX_RANGE, "methods" = methods, @@ -172,11 +145,12 @@ return TOPIC_REFRESH /obj/item/suit_sensor_jammer/Process(wait, tick) - if(bcell) + var/obj/item/cell/cell = get_cell() + if(cell) // With a range of 2 and jammer cost of 3 the default (high capacity) cell will last for almost 14 minutes, give or take // 10000 / (2^2 * 3 / 10) ~= 8333 ticks ~= 13.8 minutes var/deduction = JAMMER_POWER_CONSUMPTION(wait) - if(!bcell.use(deduction)) + if(!cell.use(deduction)) disable() else disable() @@ -212,7 +186,7 @@ sjm.enable() jammer_method = sjm -/obj/item/suit_sensor_jammer/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos) +/obj/item/suit_sensor_jammer/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/accessory/vitals_sensor/S, var/turf/pos) if(!pos) return FALSE var/turf/T = get_turf(src) diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index 2191c7cb35e..d7fdbfb7756 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -8,7 +8,7 @@ slot_flags = SLOT_LOWER_BODY w_class = ITEM_SIZE_SMALL material = /decl/material/solid/metal/aluminium - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' action_button_name = "Toggle T-Ray scanner" var/scan_range = 3 @@ -39,7 +39,7 @@ /obj/item/t_scanner/afterattack(atom/target, mob/user, proximity_flag, click_parameters) var/obj/structure/disposalpipe/D = target if(D && istype(D)) - to_chat(user, "Pipe segment integrity: [(D.health / 10) * 100]%") + to_chat(user, "Pipe segment integrity: [(D.current_health / 10) * 100]%") /obj/item/t_scanner/proc/set_active(var/active) on = active @@ -103,7 +103,7 @@ if(ishuman(scanned)) var/mob/living/carbon/human/H = scanned if(H.get_bodytype()?.appearance_flags & HAS_SKIN_COLOR) - I.color = H.skin_colour + I.color = H.get_skin_colour() I.icon = 'icons/mob/mob.dmi' I.icon_state = "phaseout" var/mob/M = scanned diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 142167bc4e1..2d10f4a2f17 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -403,6 +403,7 @@ /obj/item/magnetic_tape/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ruin() + return ..() /obj/item/magnetic_tape/attack_self(mob/user) if(!ruined) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index a5550350d7c..e93021d7c6e 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -24,7 +24,7 @@ effective or pretty fucking useless. throw_speed = 4 throw_range = 10 obj_flags = OBJ_FLAG_CONDUCTIBLE - origin_tech = "{'magnets':3,'combat':3,'esoteric':3}" + origin_tech = @'{"magnets":3,"combat":3,"esoteric":3}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 1f291857c07..4f82074e931 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -85,7 +85,7 @@ if(!href_list["close"]) attack_self(usr) -/obj/item/camera/tvcamera/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/camera/tvcamera/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && video_enabled && check_state_in_icon("[overlay.icon_state]-on", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-on" . = ..() diff --git a/code/game/objects/items/flashlights/_flashlight.dm b/code/game/objects/items/flashlights/_flashlight.dm index a81dab0bf0d..0d22decf0da 100644 --- a/code/game/objects/items/flashlights/_flashlight.dm +++ b/code/game/objects/items/flashlights/_flashlight.dm @@ -31,7 +31,6 @@ /obj/item/flashlight/proc/get_emissive_overlay_color() return COLOR_WHITE // Icons are usually coloured already. - /obj/item/flashlight/on_update_icon() . = ..() icon_state = get_world_inventory_state() @@ -43,6 +42,10 @@ I.appearance_flags |= RESET_COLOR I.pixel_x = offset_on_overlay_x I.pixel_y = offset_on_overlay_y + I.pixel_w = 0 + I.pixel_z = 0 + I.plane = FLOAT_PLANE + I.layer = FLOAT_LAYER add_overlay(I) /obj/item/flashlight/attack_self(mob/user) @@ -80,6 +83,11 @@ if(light_wedge) set_dir(user.dir) update_light() + update_icon() + +/obj/item/flashlight/equipped(mob/user, slot) + . = ..() + update_icon() /obj/item/flashlight/throw_at() . = ..() @@ -167,7 +175,7 @@ //if someone wants to implement inspecting robot eyes here would be the place to do it. -/obj/item/flashlight/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/flashlight/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && on) var/icon_state_on = "[overlay.icon_state]-on" if(check_state_in_icon(icon_state_on, overlay.icon)) diff --git a/code/game/objects/items/flashlights/flare.dm b/code/game/objects/items/flashlights/flare.dm index d3efc2642e2..0d13de492e2 100644 --- a/code/game/objects/items/flashlights/flare.dm +++ b/code/game/objects/items/flashlights/flare.dm @@ -55,10 +55,8 @@ update_icon() START_PROCESSING(SSobj, src) -/obj/item/flashlight/flare/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O) && on) - O.HandleObjectHeating(src, user, 500) - ..() +/obj/item/flashlight/flare/get_heat() + return on ? 500 : 0 /obj/item/flashlight/flare/proc/activate(var/mob/user) if(istype(user)) diff --git a/code/game/objects/items/flashlights/party.dm b/code/game/objects/items/flashlights/party.dm index 8b3abb4b081..31531842f18 100644 --- a/code/game/objects/items/flashlights/party.dm +++ b/code/game/objects/items/flashlights/party.dm @@ -36,7 +36,7 @@ /obj/item/flashlight/party/proc/start_strobing() if(!strobe_effect) strobe_effect = new(get_turf(src)) - events_repository.register(/decl/observ/moved, src, strobe_effect, /atom/movable/proc/move_to_turf_or_null) + events_repository.register(/decl/observ/moved, src, strobe_effect, TYPE_PROC_REF(/atom/movable, move_to_turf_or_null)) update_icon() /obj/effect/party_light diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 2d99ad71d0d..cf272b6b690 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -10,7 +10,7 @@ throw_range = 7 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'engineering':5,'exoticmatter':4,'powerstorage':4}" + origin_tech = @'{"engineering":5,"exoticmatter":4,"powerstorage":4}' var/list/signs = list() var/max_signs = 10 diff --git a/code/game/objects/items/item_edibility.dm b/code/game/objects/items/item_edibility.dm new file mode 100644 index 00000000000..d5d0cd948ec --- /dev/null +++ b/code/game/objects/items/item_edibility.dm @@ -0,0 +1,4 @@ +/obj/item/handle_eaten_by_mob(var/mob/user, var/mob/target) + . = ..() + if(. == EATEN_SUCCESS && !QDELETED(src)) + add_trace_DNA(target) diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 0b7af8c71de..70471ccdf31 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -41,7 +41,7 @@ /obj/item/latexballon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C+100) burst() - return + return ..() /obj/item/latexballon/attackby(obj/item/W, mob/user) if (W.can_puncture()) diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index 99392880c80..576c58a9dc6 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -2,11 +2,12 @@ icon_state = "modkit" icon = 'icons/obj/items/modkit.dmi' material = /decl/material/solid/organic/plastic - var/new_name = "exosuit" // What is the variant called? - var/new_desc = "An exosuit." // How is the new exosuit described? - var/new_icon // What base icon will the new exosuit use? - var/new_state = "ripley" // What base icon state with the new exosuit use. - var/uses = 1 // Uses before the kit deletes itself. + var/new_name = "exosuit" // What is the variant called? + var/new_desc = "An exosuit." // How is the new exosuit described? + var/new_icon // What base icon will the new exosuit use? + var/new_state // What base icon state with the new exosuit use. + var/new_blend = BLEND_MULTIPLY // What decal blend mode does this kit use? + var/uses = 1 // Uses before the kit deletes itself. var/custom = FALSE /obj/item/kit/get_single_monetary_worth() @@ -36,12 +37,6 @@ name = "voidsuit modification kit" desc = "A kit for modifying a voidsuit." uses = 2 - var/new_light_overlay - -/obj/item/kit/suit/inherit_custom_item_data(var/datum/custom_item/citem) - . = ..() - if(citem.additional_data["light_overlay"]) - new_light_overlay = citem.additional_data["light_overlay"] /obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O, var/mob/user) @@ -51,8 +46,6 @@ SetName("[kit.new_name] void helmet") desc = kit.new_desc icon = kit.new_icon - if(kit.new_light_overlay) - light_overlay = kit.new_light_overlay bodytype_equip_flags = user.get_bodytype()?.bodytype_flag kit.use(1,user) reconsider_single_icon() @@ -79,6 +72,7 @@ /obj/item/kit/paint name = "exosuit decal kit" desc = "A kit containing all the needed tools and parts to repaint a exosuit." + abstract_type = /obj/item/kit/paint /obj/item/kit/paint/examine(mob/user) . = ..() @@ -87,18 +81,20 @@ // exosuit kits. /obj/item/kit/paint/flames_red name = "\"Firestarter\" exosuit customisation kit" - new_icon = "flames_red" + new_state = "flames_red" + new_blend = BLEND_OVERLAY /obj/item/kit/paint/flames_blue name = "\"Burning Chrome\" exosuit customisation kit" - new_icon = "flames_blue" + new_state = "flames_blue" + new_blend = BLEND_OVERLAY /obj/item/kit/paint/camouflage name = "\"Guerilla\" exosuit customisation kit" desc = "An old military pattern for jungle warfare, now available for general use." - new_icon = "cammo1" + new_state = "cammo1" /obj/item/kit/paint/camouflage/forest name = "\"Alpine\" exosuit customisation kit" - new_icon = "cammo2" - desc = "A muted pattern for alpine environments. Don't miss the forest for the trees!" \ No newline at end of file + new_state = "cammo2" + desc = "A muted pattern for alpine environments. Don't miss the forest for the trees!" diff --git a/code/game/objects/items/part_replacer.dm b/code/game/objects/items/part_replacer.dm index db005552a48..8080fc02dcf 100644 --- a/code/game/objects/items/part_replacer.dm +++ b/code/game/objects/items/part_replacer.dm @@ -14,7 +14,7 @@ max_storage_space = 100 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'engineering':3,'materials':3}" + origin_tech = @'{"engineering":3,"materials":3}' var/replace_sound = 'sound/items/rped.ogg' var/remote_interaction = FALSE @@ -45,5 +45,5 @@ /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) - origin_tech = "{'engineering':3,'materials':3}" + origin_tech = @'{"engineering":3,"materials":3}' diff --git a/code/game/objects/items/passport.dm b/code/game/objects/items/passport.dm index 48f3c68e431..36357d4392c 100644 --- a/code/game/objects/items/passport.dm +++ b/code/game/objects/items/passport.dm @@ -23,8 +23,8 @@ var/pob = culture ? culture.name : "Unset" var/fingerprint = H.get_full_print(ignore_blockers = TRUE) || "N/A" - var/decl/pronouns/G = H.get_pronouns(ignore_coverings = TRUE) - info = "\icon[src] [src]:\nName: [H.real_name]\nSpecies: [H.get_species_name()]\nGender: [capitalize(G.name)]\nAge: [H.get_age()]\nPlace of Birth: [pob]\nFingerprint: [fingerprint]" + var/decl/pronouns/pronouns = H.get_pronouns(ignore_coverings = TRUE) + info = "\icon[src] [src]:\nName: [H.real_name]\nSpecies: [H.get_species_name()]\nGender: [capitalize(pronouns.name)]\nAge: [H.get_age()]\nPlace of Birth: [pob]\nFingerprint: [fingerprint]" /obj/item/passport/attack_self(mob/user) user.visible_message( diff --git a/code/game/objects/items/remains.dm b/code/game/objects/items/remains.dm index 835b05f8e90..cc82890733c 100644 --- a/code/game/objects/items/remains.dm +++ b/code/game/objects/items/remains.dm @@ -38,9 +38,9 @@ /obj/item/remains/attack_hand(mob/user) SHOULD_CALL_PARENT(FALSE) to_chat(user, SPAN_NOTICE("\The [src] sinks together into a pile of ash.")) - var/turf/simulated/floor/F = get_turf(src) - if (istype(F)) - new /obj/effect/decal/cleanable/ash(F) + var/turf/floor = get_turf(src) + if(floor?.is_floor() && floor.simulated) + new /obj/effect/decal/cleanable/ash(floor) qdel(src) return TRUE diff --git a/code/game/objects/items/rescuebag.dm b/code/game/objects/items/rescuebag.dm index ac307601aca..c8d9504aa83 100644 --- a/code/game/objects/items/rescuebag.dm +++ b/code/game/objects/items/rescuebag.dm @@ -5,7 +5,7 @@ a hostile enviroment." icon = 'icons/obj/closets/rescuebag.dmi' icon_state = "folded" - origin_tech = "{'biotech':2}" + origin_tech = @'{"biotech":2}' material = /decl/material/solid/organic/plastic matter = list(/decl/material/solid/silicon = MATTER_AMOUNT_SECONDARY) var/obj/item/tank/airtank diff --git a/code/game/objects/items/robot/robot_frame.dm b/code/game/objects/items/robot/robot_frame.dm index a13106e420c..b47813774c0 100644 --- a/code/game/objects/items/robot/robot_frame.dm +++ b/code/game/objects/items/robot/robot_frame.dm @@ -60,8 +60,8 @@ parts[part.bp_tag] = part update_icon() - // Install an MMI/brain. - else if(istype(W, /obj/item/mmi) || istype(W, /obj/item/organ/internal/posibrain)) + // Install a brain. + else if(istype(W, /obj/item/organ/internal/brain_interface)) if(!isturf(loc)) to_chat(user, SPAN_WARNING("You can't put \the [W] in without the frame being on the ground.")) @@ -71,31 +71,25 @@ to_chat(user, SPAN_WARNING("The frame is not ready for the central processor to be installed.")) return - var/mob/living/carbon/brain/B - if(istype(W, /obj/item/mmi)) - var/obj/item/mmi/M = W - B = M.brainmob - else - var/obj/item/organ/internal/posibrain/P = W - B = P.brainmob - - if(!B) + var/obj/item/organ/internal/brain_interface/M = W + var/mob/living/brainmob = M?.get_brainmob() + if(!brainmob) to_chat(user, SPAN_WARNING("Sticking an empty [W.name] into the frame would sort of defeat the purpose.")) return - if(jobban_isbanned(B, ASSIGNMENT_ROBOT)) + if(jobban_isbanned(brainmob, ASSIGNMENT_ROBOT)) to_chat(user, SPAN_WARNING("\The [W] does not seem to fit.")) return - if(B.stat == DEAD) + if(brainmob.stat == DEAD) to_chat(user, SPAN_WARNING("Sticking a dead [W.name] into the frame would sort of defeat the purpose.")) return var/ghost_can_reenter = 0 - if(B.mind) - if(!B.key) + if(brainmob.mind) + if(!brainmob.key) for(var/mob/observer/ghost/G in global.player_list) - if(G.can_reenter_corpse && G.mind == B.mind) + if(G.can_reenter_corpse && G.mind == brainmob.mind) ghost_can_reenter = 1 break else @@ -112,11 +106,12 @@ if(!O) return - O.mmi = W + O.central_processor = W O.set_invisibility(INVISIBILITY_NONE) O.custom_name = created_name O.updatename("Default") - B.mind.transfer_to(O) + + brainmob.mind.transfer_to(O) if(O.mind && O.mind.assigned_role) O.job = O.mind.assigned_role else diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index ee950f3b5c7..373c8592f4b 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -19,7 +19,6 @@ var/sight_mode = null var/hud_type - /obj/item/borg/sight/xray name = "\proper x-ray vision" sight_mode = BORGXRAY diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index de9e82f0a8a..20e457d8ffe 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/modules/module_cyborg_0.dmi' icon_state = ICON_STATE_WORLD material = /decl/material/solid/metal/steel - origin_tech = "{'materials':2,'engineering':3,'programming':3,'magnets':1}" + origin_tech = @'{"materials":2,"engineering":3,"programming":3,"magnets":1}' var/locked = 0 var/require_module = 0 @@ -56,7 +56,7 @@ /decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':2,'engineering':2,'programming':3,'magnets':2}" + origin_tech = @'{"materials":2,"engineering":2,"programming":3,"magnets":2}' /obj/item/borg/upgrade/uncertified/combat name = "ancient module" @@ -106,7 +106,7 @@ matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) /obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R) - if(R.health < 0) + if(R.current_health < 0) to_chat(usr, "You have to repair the robot before using this module!") return 0 @@ -154,7 +154,7 @@ /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':2,'engineering':3,'programming':3,'powerstorage':2,'combat':2}" + origin_tech = @'{"materials":2,"engineering":3,"programming":3,"powerstorage":2,"combat":2}' /obj/item/borg/upgrade/weaponcooler/action(var/mob/living/silicon/robot/R) if(..()) return 0 @@ -191,7 +191,7 @@ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':2,'engineering':3,'programming':3,'magnets':3}" + origin_tech = @'{"materials":2,"engineering":3,"programming":3,"magnets":3}' /obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R) if(..()) return 0 @@ -217,7 +217,7 @@ /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':4,'engineering':4,'programming':3}" + origin_tech = @'{"materials":4,"engineering":4,"programming":3}' /obj/item/borg/upgrade/rcd/action(var/mob/living/silicon/robot/R) if(..()) return 0 @@ -240,7 +240,7 @@ /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':2,'engineering':2,'programming':3,'esoteric':2,'combat':2}" + origin_tech = @'{"materials":2,"engineering":2,"programming":3,"esoteric":2,"combat":2}' /obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R) if(..()) return 0 diff --git a/code/game/objects/items/rock.dm b/code/game/objects/items/rock.dm new file mode 100644 index 00000000000..821ef0cb663 --- /dev/null +++ b/code/game/objects/items/rock.dm @@ -0,0 +1,27 @@ +/obj/item/rock + name = "rock" + icon = 'icons/obj/items/rock.dmi' + desc = "The secret is to bang the rocks together, guys." + sharp = TRUE + edge = TRUE + force = 3 + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME + w_class = ITEM_SIZE_SMALL + +/obj/item/rock/Initialize() + . = ..() + set_extension(src, /datum/extension/tool/variable, list( + TOOL_HATCHET = TOOL_QUALITY_BAD, + TOOL_SHOVEL = TOOL_QUALITY_WORST + )) + +// TODO: craft a flint striker from a flint and a piece of metal +/obj/item/rock/attackby(obj/item/W, mob/user) + if(W.material?.ferrous && material?.type == /decl/material/solid/stone/flint) + spark_at(get_turf(src), amount = 2, spark_type = /datum/effect/effect/system/spark_spread/non_electrical) + return TRUE + . = ..() + +/obj/item/rock/striker/Initialize(var/ml, var/material_key) + material_key = /decl/material/solid/hematite + return ..() diff --git a/code/game/objects/items/silencer.dm b/code/game/objects/items/silencer.dm new file mode 100644 index 00000000000..7daa909f7ed --- /dev/null +++ b/code/game/objects/items/silencer.dm @@ -0,0 +1,7 @@ +/obj/item/silencer + name = "silencer" + desc = "A suppressor that screws into the barrel of compatible firearms and reduces the volume of gunshots." + icon = 'icons/obj/guns/holdout_pistol_silencer.dmi' + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_SMALL + material = /decl/material/solid/metal/steel diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index ebc4aab7307..106d802502d 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -54,9 +54,7 @@ if(istype(suit)) to_chat(user, SPAN_WARNING("You can't apply [src] through [suit]!")) return 1 - - H.UpdateDamageIcon() - + H.update_health() // TODO: readd the actual healing logic that goes here, or check that it's applied in afterattack or something else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) @@ -66,13 +64,12 @@ ) use(1) - M.updatehealth() /obj/item/stack/medical/bruise_pack name = "roll of gauze" singular_name = "gauze length" desc = "Some sterile gauze to wrap around bloody stumps." icon_state = "brutepack" - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' animal_heal = 5 apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') amount = 10 @@ -130,7 +127,7 @@ singular_name = "ointment" icon_state = "ointment" heal_burn = 1 - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' animal_heal = 4 apply_sounds = list('sound/effects/ointment.ogg') @@ -164,7 +161,7 @@ desc = "An advanced trauma kit for severe injuries." icon_state = "traumakit" heal_brute = 0 - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' animal_heal = 12 apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') amount = 10 @@ -220,7 +217,7 @@ desc = "An advanced treatment kit for severe burns." icon_state = "burnkit" heal_burn = 5 - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' animal_heal = 7 apply_sounds = list('sound/effects/ointment.ogg') diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index bf8fa4c6dbc..d99d90fdf99 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -4,7 +4,7 @@ desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." icon = 'icons/obj/nanopaste.dmi' icon_state = "tube" - origin_tech = "{'materials':4,'engineering':3}" + origin_tech = @'{"materials":4,"engineering":3}' max_amount = 10 amount = 10 material = /decl/material/solid/metal/steel @@ -17,9 +17,8 @@ var/mob/living/silicon/robot/R = M if (R.getBruteLoss() || R.getFireLoss() ) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - R.adjustBruteLoss(-15) + R.adjustBruteLoss(-15, do_update_health = FALSE) R.adjustFireLoss(-15) - R.updatehealth() use(1) user.visible_message("\The [user] applied some [src] on [R]'s damaged areas.",\ "You apply some [src] at [R]'s damaged areas.") @@ -44,7 +43,6 @@ else if(can_use(1)) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) S.heal_damage(15, 15, robo_repair = 1) - H.updatehealth() use(1) user.visible_message("\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].",\ "You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].") diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 93f7b8cc08a..8a768f4b5e1 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -46,7 +46,7 @@ update_icon() throwforce = round(0.25*material.get_edge_damage()) force = round(0.5*material.get_blunt_damage()) - set_extension(src, /datum/extension/tool, list(TOOL_DRILL = TOOL_QUALITY_WORST)) + set_extension(src, /datum/extension/tool, list(TOOL_SURGICAL_DRILL = TOOL_QUALITY_WORST)) /obj/item/stack/material/rods/update_state_from_amount() if(max_icon_state && amount > 0.5*max_amount) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2987ca68b1b..574bd61de8e 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -11,12 +11,14 @@ /obj/item/stack gender = PLURAL - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' max_health = 32 //Stacks should take damage even if no materials /// A copy of initial matter list when this atom initialized. Stack matter should always assume a single tile. var/list/matter_per_piece var/singular_name var/plural_name + /// If unset, picks a/an based off of if the first letter is a vowel or not. + var/indefinite_article var/base_state var/plural_icon_state var/max_icon_state @@ -28,6 +30,8 @@ var/uses_charge var/list/charge_costs var/list/datum/matter_synth/synths + /// Set this to a specific type to restrict the recipes generated by this stack. + var/crafting_stack_type = /obj/item/stack /obj/item/stack/Initialize(mapload, amount, material) @@ -42,7 +46,7 @@ if(!singular_name) singular_name = "sheet" if(!plural_name) - plural_name = "[singular_name]s" + plural_name = text_make_plural(singular_name) /obj/item/stack/Destroy() if (src && usr && usr.machine == src) @@ -98,120 +102,141 @@ /obj/item/stack/get_matter_amount_modifier() . = amount * matter_multiplier -/obj/item/stack/proc/get_recipes() - return +/obj/item/stack/proc/get_reinforced_material() + return null + +// TODO: add some kind of tracking for the last viewed list so the user can go back up one level for nested lists +/obj/item/stack/proc/list_recipes(mob/user, list/recipes) -/obj/item/stack/proc/list_recipes(mob/user, recipes_sublist) - var/list/recipes = get_recipes() - if(!islist(recipes) || !length(recipes)) + if(!user?.client) return - if (!src || get_amount() <= 0) - close_browser(user, "window=stack") - user.set_machine(src) //for correct work of onclose - var/list/recipe_list = recipes - if (recipes_sublist && recipe_list[recipes_sublist] && istype(recipe_list[recipes_sublist], /datum/stack_recipe_list)) - var/datum/stack_recipe_list/srl = recipe_list[recipes_sublist] - recipe_list = srl.recipes - var/t1 = list() - t1 += "Constructions from [src]Amount Left: [src.get_amount()]
    " - for(var/i=1;i<=recipe_list.len,i++) - var/E = recipe_list[i] - if (isnull(E)) - continue - if (istype(E, /datum/stack_recipe_list)) - t1+="
    " - var/datum/stack_recipe_list/srl = E - t1 += "\[Sub-menu] [srl.title]" - - if (istype(E, /datum/stack_recipe)) - var/datum/stack_recipe/R = E - t1+="
    " - var/max_multiplier = round(src.get_amount() / R.req_amount) - var/title - var/can_build = 1 - can_build = can_build && (max_multiplier>0) - if (R.res_amount>1) - title+= "[R.res_amount]x [R.display_name()]\s" - else - title+= "[R.display_name()]" - title+= " ([R.req_amount] [src.singular_name]\s)" - var/skill_label = "" - if(!user.skill_check(SKILL_CONSTRUCTION, R.difficulty)) - var/decl/hierarchy/skill/S = GET_DECL(SKILL_CONSTRUCTION) - skill_label = "\[[S.levels[R.difficulty]]]" - if (can_build) - t1 +="[skill_label][title]" - else - t1 += "[skill_label][title]" - if (R.max_res_amount>1 && max_multiplier>1) - max_multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount)) - t1 += " |" - var/list/multipliers = list(5,10,25) - for (var/n in multipliers) - if (max_multiplier>=n) - t1 += " [n*R.res_amount]x" - if (!(max_multiplier in multipliers)) - t1 += " [max_multiplier*R.res_amount]x" - - t1 += "
    " - show_browser(user, JOINTEXT(t1), "window=stack") - onclose(user, "stack") - -/obj/item/stack/proc/produce_recipe(datum/stack_recipe/recipe, var/quantity, mob/user) + if(get_amount() <= 0) + close_browser(user, "window=stack_crafting") + return + + if(!recipes) + recipes = get_stack_recipes(get_material(), get_reinforced_material(), crafting_stack_type, user?.get_active_hand()?.get_best_tool_archetype()) + + var/list/dat = list() + + var/popup_title + if (istype(recipes, /datum/stack_recipe_list)) + var/datum/stack_recipe_list/recipe_list = recipes + popup_title = "Crafting [recipe_list.name] with \the [src]" + dat += "

    Back

    " + recipes = recipe_list.recipes + else if(islist(recipes) && length(recipes)) + popup_title = "Crafting with \the [src]" + else + return + + dat += "

    [capitalize(plural_name)] left: [get_amount()]

    " + dat += "" + dat += "" + var/list/recipe_strings = list() + for(var/thing in recipes) + if(istype(thing, /decl/stack_recipe)) + var/decl/stack_recipe/recipe = thing + recipe_strings[recipe.name] = recipe.get_list_display(user, src) + else if(istype(thing, /datum/stack_recipe_list)) + var/datum/stack_recipe_list/recipe_list = thing + recipe_strings[recipe_list.name] = recipe_list.get_list_display(user, src) + for(var/recipe_name in sortTim(recipe_strings.Copy(), /proc/cmp_text_asc)) + dat += recipe_strings[recipe_name] + dat += "
    ProductCostTimeRequired skillAmount to craft
    " + + var/datum/browser/popup = new(user, "stack_crafting", popup_title, 800, 800) + popup.set_content(JOINTEXT(dat)) + popup.open() + + +/obj/item/stack/proc/produce_recipe(decl/stack_recipe/recipe, var/quantity, mob/user) + + quantity = max(quantity, 1) + var/required = quantity*recipe.req_amount - var/produced = min(quantity*recipe.res_amount, recipe.max_res_amount) + var/produced = quantity*recipe.res_amount + if(!isnull(recipe.max_res_amount)) + produced = min(produced, recipe.max_res_amount) + + var/decl/material/mat = get_material() + var/decl/material/reinf_mat = get_reinforced_material() if (!can_use(required)) - if (produced>1) - to_chat(user, "You haven't got enough [src] to build \the [produced] [recipe.display_name()]\s!") - else - to_chat(user, "You haven't got enough [src] to build \the [recipe.display_name()]!") + to_chat(user, SPAN_WARNING("You haven't got enough [plural_name] to build [recipe.get_display_name(produced, mat, reinf_mat)]!")) return - if(!recipe.can_make(user)) return - if (recipe.time) - to_chat(user, "Building [recipe.display_name()] ...") + to_chat(user, SPAN_NOTICE("You set about making [recipe.get_display_name(produced, mat, reinf_mat)]...")) if (!user.do_skilled(recipe.time, SKILL_CONSTRUCTION)) return - if (use(required)) - if(user.skill_fail_prob(SKILL_CONSTRUCTION, 90, recipe.difficulty)) - to_chat(user, "You waste some [name] and fail to build \the [recipe.display_name()]!") - return - var/atom/O = recipe.spawn_result(user, user.loc, produced) - if(!QDELETED(O)) // In case of stack merger. - O.add_fingerprint(user) - user.put_in_hands(O) - -/obj/item/stack/Topic(href, href_list) - . = ..() - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) + if(!use(required)) return - if (href_list["sublist"] && !href_list["make"]) - list_recipes(usr, text2num(href_list["sublist"])) - - if (href_list["make"]) - if(delete_if_empty()) // Should never happen - return - - var/list/recipes_list = get_recipes() - if (href_list["sublist"]) - var/datum/stack_recipe_list/srl = recipes_list[text2num(href_list["sublist"])] - recipes_list = srl.recipes - - var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])] - var/multiplier = text2num(href_list["multiplier"]) - if (!multiplier || (multiplier <= 0)) //href exploit protection - return + if(user.skill_fail_prob(SKILL_CONSTRUCTION, 90, recipe.difficulty)) + to_chat(user, SPAN_WARNING("You waste some [name] and fail to make [recipe.get_display_name(produced, mat, reinf_mat)]!")) + return + to_chat(user, SPAN_NOTICE("You complete [recipe.get_display_name(produced, mat, reinf_mat)]!")) + var/atom/movable/O = recipe.spawn_result(user, user.loc, produced, mat, reinf_mat) + if(istype(O) && !QDELETED(O)) // In case of stack merger. + O.add_fingerprint(user) + user.put_in_hands(O) + attack_self(user) + +/obj/item/stack/OnTopic(mob/user, list/href_list) + . = ..() - src.produce_recipe(R, multiplier, usr) + if(. || !istype(user) || QDELETED(user) || user.incapacitated() || !((src in user.get_held_items()) || Adjacent(user))) + return TOPIC_NOACTION - if(!QDELETED(src)) - interact(usr) + if(href_list["back"]) + var/datum/stack_recipe_list/previous_list = locate(href_list["back"]) + if(istype(previous_list)) + list_recipes(user, previous_list) + else + list_recipes(user) + return TOPIC_HANDLED + + if(href_list["sublist"]) + + var/datum/stack_recipe_list/recipe_list = locate(href_list["sublist"]) + if(istype(recipe_list)) + var/list/recipes = get_stack_recipes(get_material(), get_reinforced_material(), crafting_stack_type, user?.get_active_hand()?.get_best_tool_archetype()) + if(recipe_list in recipes) + list_recipes(user, recipe_list) + return TOPIC_HANDLED + return TOPIC_NOACTION + + if(href_list["make"]) + + // Retrieve our recipe decl. + var/decl/stack_recipe/recipe = locate(href_list["make"]) + if(!istype(recipe)) + return TOPIC_NOACTION + + // Check that the recipe is still available to us. + var/list/recipes = get_stack_recipes(get_material(), get_reinforced_material(), crafting_stack_type, user?.get_active_hand()?.get_best_tool_archetype()) + if(!(recipe in recipes)) + var/found_recipe = FALSE + for(var/datum/stack_recipe_list/recipe_list in recipes) + if(recipe in recipe_list.recipes) + found_recipe = TRUE + break + if(!found_recipe) + return TOPIC_NOACTION + + // Validate the target amount and create the product. + var/multiplier = clamp(text2num(href_list["multiplier"]), 0, min(round(get_amount() / recipe.req_amount))) + if(!isnull(recipe.max_res_amount)) + multiplier = min(multiplier, round(recipe.max_res_amount / recipe.res_amount)) + if(multiplier > 0) + produce_recipe(recipe, multiplier, user) + return TOPIC_REFRESH + + return TOPIC_NOACTION /** * Return 1 if an immediate subsequent call to use() would succeed. @@ -361,14 +386,17 @@ stacks |= item for (var/obj/item/stack/item in user?.loc) stacks |= item + for (var/obj/item/stack/item in loc) + stacks |= item for (var/obj/item/stack/item in stacks) if(item == src || !(can_merge_stacks(item) || item.can_merge_stacks(src))) continue - var/transfer = src.transfer_to(item) + var/transfer = transfer_to(item) if(user && transfer) - to_chat(user, "You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.") + to_chat(user, SPAN_NOTICE("You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.")) if(!amount) break + return !QDELETED(src) /obj/item/stack/get_storage_cost() //Scales storage cost to stack size . = ..() @@ -409,8 +437,23 @@ /**Whether a stack has the capability to be split. */ /obj/item/stack/proc/can_split() - return !(uses_charge && !force) //#TODO: The !force was a hacky way to tell if its a borg or rigsuit module. Probably would be good to find a better way.. + return !(uses_charge && !force) //#TODO: The !force was a hacky way to tell if its a borg or rigsuit module. Probably would be good to find a better way... /**Whether a stack type has the capability to be merged. */ /obj/item/stack/proc/can_merge_stacks(var/obj/item/stack/other) - return !(uses_charge && !force) \ No newline at end of file + return !(uses_charge && !force) + +/// Returns the string describing an amount of the stack, i.e. "an ingot" vs "a flag" +/obj/item/stack/proc/get_string_for_amount(amount) + if(amount == 1) + return indefinite_article ? "[indefinite_article] [singular_name]" : ADD_ARTICLE(singular_name) + return "[amount] [plural_name]" + +/obj/item/stack/ProcessAtomTemperature() + . = ..() + if(QDELETED(src)) + return + matter_per_piece = list() + for(var/mat in matter) + matter_per_piece[mat] = round(matter[mat] / amount) + update_icon() diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 53545f3be33..f97c8b3af7b 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -7,7 +7,7 @@ w_class = ITEM_SIZE_TINY max_amount = 50 item_flags = ITEM_FLAG_NO_BLUDGEON - origin_tech = "{'materials':6,'wormholes':4}" + origin_tech = @'{"materials":6,"wormholes":4}' /obj/item/stack/telecrystal/afterattack(var/obj/item/I, mob/user, proximity) if(!proximity) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index bfc1577d49a..28eec9c1c4a 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -52,7 +52,7 @@ singular_name = "grass floor tile" desc = "A patch of grass like they often use on golf courses." icon_state = "tile_grass" - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' /* * Wood @@ -222,6 +222,15 @@ /obj/item/stack/tile/floor_white/fifty amount = 50 +/obj/item/stack/tile/floor_checkered + name = "checkered floor tile" + singular_name = "checkered floor tile" + icon_state = "tile_checkered" + material = /decl/material/solid/organic/plastic + +/obj/item/stack/tile/floor_checkered/fifty + amount = 50 + /obj/item/stack/tile/floor_dark name = "dark floor tile" singular_name = "dark floor tile" diff --git a/code/game/objects/items/tools/power_tools.dm b/code/game/objects/items/tools/power_tools.dm deleted file mode 100644 index 02bd831732c..00000000000 --- a/code/game/objects/items/tools/power_tools.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/hydraulic_cutter - name = "hydraulic cutter" - desc = "A universal, miniturized hydraulic tool with interchangable heads for either prying or cutting. But not both at the same time." - icon = 'icons/obj/items/tool/cutter.dmi' - icon_state = ICON_STATE_WORLD - slot_flags = SLOT_LOWER_BODY - material_force_multiplier = 0.2 - w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':3,'engineering':3}" - material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':17,'y':16}" - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - drop_sound = 'sound/foley/bardrop1.ogg' - -/obj/item/hydraulic_cutter/on_update_icon() - . = ..() - icon_state = get_world_inventory_state() - if(IS_CROWBAR(src)) - add_overlay("[icon_state]-pry") - else if(IS_WIRECUTTER(src)) - add_overlay("[icon_state]-cut") - -/obj/item/hydraulic_cutter/Initialize() - . = ..() - var/datum/extension/tool/variable/tool = get_or_create_extension(src, /datum/extension/tool/variable, list( - TOOL_CROWBAR = TOOL_QUALITY_GOOD, - TOOL_WIRECUTTERS = TOOL_QUALITY_GOOD - )) - tool.set_sound_overrides('sound/items/jaws_pry.ogg', 'sound/items/change_jaws.ogg') - -/obj/item/power_drill - name = "power drill" - desc = "A universal power drill, with heads for most common screw and bolt types." - icon = 'icons/obj/items/tool/powerdrill.dmi' - icon_state = ICON_STATE_WORLD - slot_flags = SLOT_LOWER_BODY - material_force_multiplier = 0.2 - w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':3,'engineering':3}" - material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':17,'y':16}" - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - drop_sound = 'sound/foley/bardrop1.ogg' - -/obj/item/power_drill/Initialize() - . = ..() - var/datum/extension/tool/variable/tool = get_or_create_extension(src, /datum/extension/tool/variable, list( - TOOL_WRENCH = TOOL_QUALITY_GOOD, - TOOL_SCREWDRIVER = TOOL_QUALITY_GOOD - )) - tool.set_sound_overrides('sound/items/airwrench.ogg', 'sound/items/change_drill.ogg') - -/obj/item/power_drill/on_update_icon() - . = ..() - icon_state = get_world_inventory_state() - if(IS_SCREWDRIVER(src)) - add_overlay("[icon_state]-screw") - else if(IS_WRENCH(src)) - add_overlay("[icon_state]-bolt") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index beb521ea546..cdf8cd13c7f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -53,7 +53,7 @@ volume = 10 material = /decl/material/solid/organic/plastic -/obj/item/chems/water_balloon/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/chems/water_balloon/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && reagents?.total_volume <= 0) overlay.icon_state = "[overlay.icon_state]_empty" . = ..() diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index e0779d02c9f..7017229fa20 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -59,10 +59,6 @@ name = "waffles" icon_state = "waffles" -/obj/item/trash/plate - name = "plate" - icon_state = "plate" - /obj/item/trash/snack_bowl name = "snack bowl" icon_state = "snack_bowl" @@ -99,10 +95,6 @@ name = "vobla pack" icon_state = "driedfish" -/obj/item/trash/tray - name = "tray" - icon_state = "tray" - /obj/item/trash/candle name = "candle" icon = 'icons/obj/candle.dmi' diff --git a/code/game/objects/items/umbrella.dm b/code/game/objects/items/umbrella.dm index 255bd7fd6d3..8876fc9aab4 100644 --- a/code/game/objects/items/umbrella.dm +++ b/code/game/objects/items/umbrella.dm @@ -43,7 +43,7 @@ I.appearance_flags |= RESET_COLOR add_overlay(I) -/obj/item/umbrella/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/umbrella/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) if(is_open && check_state_in_icon("[overlay.icon_state]-open", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-open" diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 5b9288e5b60..ef23bc0840b 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -17,7 +17,7 @@ AI MODULES throwforce = 5 throw_speed = 3 throw_range = 15 - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' material = /decl/material/solid/fiberglass matter = list(/decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT) var/datum/ai_laws/laws = null @@ -86,7 +86,7 @@ AI MODULES name = "\improper 'Safeguard' AI module" var/targetName = "" desc = "A 'safeguard' AI module: 'Safeguard . Anyone threatening or attempting to harm is no longer to be considered a crew member, and is a threat which must be neutralized.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' /obj/item/aiModule/safeguard/attack_self(mob/user) ..() @@ -112,7 +112,7 @@ AI MODULES name = "\improper 'OneCrewMember' AI module" var/targetName = "" desc = "A 'one crew member' AI module: 'Only is a crew member.'." - origin_tech = "{'programming':3,'materials':6}" //made with diamonds! + origin_tech = @'{"programming":3,"materials":6}' //made with diamonds! /obj/item/aiModule/oneHuman/attack_self(var/mob/user) ..() @@ -140,7 +140,7 @@ AI MODULES /obj/item/aiModule/protectStation name = "\improper 'ProtectInstallation' AI module" desc = "A 'protect installation' AI module: 'Protect the installation against damage. Anyone you see harming the installation is no longer to be considered a crew member, and is a threat which must be neutralized.'." - origin_tech = "{'programming':3,'materials':4}" //made of gold + origin_tech = @'{"programming":3,"materials":4}' //made of gold /obj/item/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) var/law = "Protect the installation against damage. Anyone you see harming the [station_name()] is no longer to be considered a crew member, and is a threat which must be neutralized." @@ -151,7 +151,7 @@ AI MODULES /obj/item/aiModule/prototypeEngineOffline name = "'PrototypeEngineOffline' AI Module" desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' /obj/item/aiModule/prototypeEngineOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) var/law = "Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary." @@ -162,7 +162,7 @@ AI MODULES /obj/item/aiModule/teleporterOffline name = "'TeleporterOffline' AI Module" desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' /obj/item/aiModule/teleporterOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member." @@ -173,7 +173,7 @@ AI MODULES /obj/item/aiModule/quarantine name = "\improper 'Quarantine' AI module" desc = "A 'quarantine' AI module: 'The installation is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving.'." - origin_tech = "{'programming':3,'biotech':2,'materials':4}" + origin_tech = @'{"programming":3,"biotech":2,"materials":4}' /obj/item/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) var/law = "The installation is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving." @@ -184,7 +184,7 @@ AI MODULES /obj/item/aiModule/oxygen name = "\improper 'OxygenIsToxicToCrewMembers' AI module" desc = "A 'OxygenIsToxicToCrewMembers' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the installation. Prevent, by any means necessary, anyone from exposing the installation to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'." - origin_tech = "{'programming':3,'biotech':2,'materials':4}" + origin_tech = @'{"programming":3,"biotech":2,"materials":4}' /obj/item/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) var/law = "Oxygen is highly toxic to crew members, and must be purged from the [station_name()]. Prevent, by any means necessary, anyone from exposing the [station_name()] to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member." @@ -197,7 +197,7 @@ AI MODULES var/newFreeFormLaw = "freeform" var/lawpos = 15 desc = "A 'freeform' AI module: ''." - origin_tech = "{'programming':4,'materials':4}" + origin_tech = @'{"programming":4,"materials":4}' /obj/item/aiModule/freeform/attack_self(mob/user) ..() @@ -227,7 +227,7 @@ AI MODULES /obj/item/aiModule/reset name = "\improper 'Reset' AI module" desc = "A 'reset' AI module: 'Clears all, except the inherent, laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' /obj/item/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) log_law_changes(target, sender) @@ -245,7 +245,7 @@ AI MODULES /obj/item/aiModule/purge // -- TLE name = "\improper 'Purge' AI module" desc = "A 'purge' AI Module: 'Purges all laws.'." - origin_tech = "{'programming':3,'materials':6}" + origin_tech = @'{"programming":3,"materials":6}' /obj/item/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) log_law_changes(target, sender) @@ -264,14 +264,14 @@ AI MODULES /obj/item/aiModule/asimov // -- TLE name = "\improper 'Asimov' core AI module" desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/asimov /******************** Drone ********************/ /obj/item/aiModule/drone name = "\improper 'Drone' core AI module" desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/drone /****************** P.A.L.A.D.I.N. **************/ @@ -279,7 +279,7 @@ AI MODULES /obj/item/aiModule/paladin // -- NEO name = "\improper 'P.A.L.A.D.I.N.' core AI module" desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':6}" + origin_tech = @'{"programming":3,"materials":6}' laws = new/datum/ai_laws/paladin /****************** T.Y.R.A.N.T. *****************/ @@ -287,7 +287,7 @@ AI MODULES /obj/item/aiModule/tyrant // -- Darem name = "\improper 'T.Y.R.A.N.T.' core AI module" desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':6,'esoteric':2}" + origin_tech = @'{"programming":3,"materials":6,"esoteric":2}' laws = new/datum/ai_laws/tyrant() /******************** Freeform Core ******************/ @@ -296,7 +296,7 @@ AI MODULES name = "\improper 'Freeform' core AI module" var/newFreeFormLaw = "" desc = "A 'freeform' Core AI module: ''." - origin_tech = "{'programming':3,'materials':6}" + origin_tech = @'{"programming":3,"materials":6}' /obj/item/aiModule/freeformcore/attack_self(var/mob/user) ..() @@ -320,7 +320,7 @@ AI MODULES name = "hacked AI module" var/newFreeFormLaw = "" desc = "A hacked AI law module: ''." - origin_tech = "{'programming':3,'materials':6,'esoteric':7}" + origin_tech = @'{"programming":3,"materials":6,"esoteric":7}' /obj/item/aiModule/syndicate/attack_self(var/mob/user) ..() @@ -352,7 +352,7 @@ AI MODULES /obj/item/aiModule/robocop // -- TLE name = "\improper 'Robocop' core AI module" desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'." - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' laws = new/datum/ai_laws/robocop() /******************** Antimov ********************/ @@ -360,5 +360,5 @@ AI MODULES /obj/item/aiModule/antimov // -- TLE name = "\improper 'Antimov' core AI module" desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' laws = new/datum/ai_laws/antimov() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index afe0fc94f49..8f5d71f4f47 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -15,7 +15,7 @@ throw_speed = 1 throw_range = 5 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'engineering':4,'materials':2}" + origin_tech = @'{"engineering":4,"materials":2}' material = /decl/material/solid/metal/steel var/stored_matter = 0 var/max_stored_matter = 120 @@ -128,11 +128,24 @@ icon_state = "rcd" item_state = "rcdammo" w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':2}" + origin_tech = @'{"materials":2}' material = /decl/material/solid/metal/steel - matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) var/remaining = 30 +// Full override due to the weirdness of compressed matter cart legacy matter units. +// TODO: make this use actual matter. +/obj/item/rcd_ammo/create_matter() + // Formula: 3 MU per wall == 6 steel sheets == 2 sheets per MU, /2 for glass and steel, with a + // discount for the outlay of materials (and to make the final costs less obscene). Technically + // this means you can generate steel from nothing by building walls with an RCD and then + // deconstructing them but until we have a unified matter/material system on /atom I think we're + // just going to have to cop it. + var/sheets = round((remaining * SHEET_MATERIAL_AMOUNT) * 0.75) + matter = list( + /decl/material/solid/metal/steel = sheets, + /decl/material/solid/glass = sheets + ) + /obj/item/rcd_ammo/examine(mob/user, distance) . = ..() if(distance <= 1) @@ -142,10 +155,8 @@ name = "high-capacity matter cartridge" desc = "Do not ingest." icon_state = "rcdlarge" - material = /decl/material/solid/metal/steel - matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) remaining = 120 - origin_tech = "{'materials':4}" + origin_tech = @'{"materials":4}' /obj/item/rcd/borg canRwall = 1 diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index 676e2e6c8c6..551a70bb1eb 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -72,7 +72,7 @@ var/global/list/rpd_pipe_selection_skilled = list() throw_speed = 1 throw_range = 3 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'engineering':5,'materials':4}" + origin_tech = @'{"engineering":5,"materials":4}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 75026740d4e..24caa423305 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -77,8 +77,12 @@ RSF if(stored_matter <= 0) return - if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor)) - return + if(!istype(A, /obj/structure/table)) + if(!isturf(A)) + return + var/turf/turf = A + if(!turf.is_floor() || !turf.simulated) + return playsound(src.loc, 'sound/machines/click.ogg', 10, 1) var/used_energy = 0 diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 9d9f4061d46..d488e29b7e1 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -8,7 +8,7 @@ icon_state = "autopsy_scanner" obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' var/list/weapon_data = list() var/list/chemtraces = list() var/target_name diff --git a/code/game/objects/items/weapons/candle/candle.dm b/code/game/objects/items/weapons/candle/candle.dm index 99f96cdcc9b..c626d4ff3aa 100644 --- a/code/game/objects/items/weapons/candle/candle.dm +++ b/code/game/objects/items/weapons/candle/candle.dm @@ -6,6 +6,7 @@ item_state = "candle1" w_class = ITEM_SIZE_TINY light_color = "#e09d37" + material = /decl/material/solid/organic/wax var/available_colours = list(COLOR_WHITE, COLOR_DARK_GRAY, COLOR_RED, COLOR_ORANGE, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_INDIGO, COLOR_VIOLET) var/wax diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 0d38d9c4b30..a91fae1cb2f 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -90,14 +90,14 @@ name = "broken cryptographic sequencer" icon_state = "emag" item_state = "card-id" - origin_tech = "{'magnets':2,'esoteric':2}" + origin_tech = @'{"magnets":2,"esoteric":2}' /obj/item/card/emag desc = "It's a card with a magnetic strip attached to some circuitry." name = "cryptographic sequencer" icon_state = "emag" item_state = "card-id" - origin_tech = "{'magnets':2,'esoteric':2}" + origin_tech = @'{"magnets":2,"esoteric":2}' var/uses = 10 var/static/list/card_choices = list( @@ -186,7 +186,7 @@ var/global/const/NO_EMAG_ACT = -50 . = ..() update_icon() -/obj/item/card/id/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/card/id/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && detail_color) overlay.overlays += overlay_image(overlay.icon, "[overlay.icon_state]-colors", detail_color, RESET_COLOR) . = ..() @@ -385,6 +385,7 @@ var/global/const/NO_EMAG_ACT = -50 /obj/item/card/id/captains_spare name = "captain's spare ID" desc = "The spare ID of the High Lord himself." + icon_state = ICON_STATE_WORLD item_state = "gold_id" registered_name = "Captain" assignment = "Captain" diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index 43c296e7883..03fe2b6375b 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -1,6 +1,6 @@ /obj/item/card/id/syndicate assignment = "Agent" - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' var/electronic_warfare = 1 var/mob/registered_user = null color = COLOR_GRAY40 @@ -81,7 +81,7 @@ unset_registered_user() registered_user = user user.set_id_info(src) - events_repository.register(/decl/observ/destroyed, user, src, /obj/item/card/id/syndicate/proc/unset_registered_user) + events_repository.register(/decl/observ/destroyed, user, src, TYPE_PROC_REF(/obj/item/card/id/syndicate, unset_registered_user)) return TRUE /obj/item/card/id/syndicate/proc/unset_registered_user(var/mob/user) diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index 8251a7a08c2..cf708a7b5b1 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -2,7 +2,7 @@ name = "circuit board" icon = 'icons/obj/modules/module_id.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' density = FALSE anchored = FALSE w_class = ITEM_SIZE_SMALL diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm index c7dcc5ad3ca..9c8b800d3c1 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -1,22 +1,22 @@ /obj/item/stock_parts/circuitboard/message_monitor name = "circuitboard (message monitor console)" build_path = /obj/machinery/computer/message_monitor - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' /obj/item/stock_parts/circuitboard/aiupload name = "circuitboard (AI upload console)" build_path = /obj/machinery/computer/upload/ai - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' /obj/item/stock_parts/circuitboard/borgupload name = "circuitboard (cyborg upload console)" build_path = /obj/machinery/computer/upload/robot - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' /obj/item/stock_parts/circuitboard/teleporter name = "circuitboard (teleporter control console)" build_path = /obj/machinery/computer/teleporter - origin_tech = "{'programming':2,'wormholes':4}" + origin_tech = @'{"programming":2,"wormholes":4}' /obj/item/stock_parts/circuitboard/atmos_alert name = "circuitboard (atmospheric alert console)" @@ -25,22 +25,22 @@ /obj/item/stock_parts/circuitboard/robotics name = "circuitboard (robotics control console)" build_path = /obj/machinery/computer/robotics - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' /obj/item/stock_parts/circuitboard/drone_control name = "circuitboard (drone control console)" build_path = /obj/machinery/computer/drone_control - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' /obj/item/stock_parts/circuitboard/arcade/battle name = "circuitboard (battle arcade machine)" build_path = /obj/machinery/computer/arcade/battle - origin_tech = "{'programming':1}" + origin_tech = @'{"programming":1}' /obj/item/stock_parts/circuitboard/arcade/orion_trail name = "circuitboard (orion trail arcade machine)" build_path = /obj/machinery/computer/arcade/orion_trail - origin_tech = "{'programming':1}" + origin_tech = @'{"programming":1}' /obj/item/stock_parts/circuitboard/turbine_control name = "circuitboard (turbine control console)" @@ -49,7 +49,7 @@ /obj/item/stock_parts/circuitboard/solar_control name = "circuitboard (solar control console)" build_path = /obj/machinery/power/solar_control - origin_tech = "{'programming':2,'powerstorage':2}" + origin_tech = @'{"programming":2,"powerstorage":2}' /obj/item/stock_parts/circuitboard/prisoner name = "circuitboard (prisoner management console)" @@ -58,7 +58,7 @@ /obj/item/stock_parts/circuitboard/operating name = "circuitboard (patient monitoring console)" build_path = /obj/machinery/computer/operating - origin_tech = "{'programming':2,'biotech':2}" + origin_tech = @'{"programming":2,"biotech":2}' /obj/item/stock_parts/circuitboard/helm name = "circuitboard (helm control console)" @@ -92,10 +92,23 @@ name = "circuitboard (design database console)" build_path = /obj/machinery/computer/design_console +/obj/item/stock_parts/circuitboard/central_atmos + name = "circuitboard (central atmospherics computer)" + build_path = /obj/machinery/computer/central_atmos + origin_tech = @'{"programming":2}' + /obj/item/stock_parts/circuitboard/area_atmos - name = "circuitboard (area air control console)" + name = "circuitboard (air control console)" build_path = /obj/machinery/computer/area_atmos - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' + +/obj/item/stock_parts/circuitboard/area_atmos/area + name = "circuitboard (area air control console)" + build_path = /obj/machinery/computer/area_atmos/area + +/obj/item/stock_parts/circuitboard/area_atmos/tag + name = "circuitboard (wireless scrubber control console)" + build_path = /obj/machinery/computer/area_atmos/tag /obj/item/stock_parts/circuitboard/account_database name = "circuitboard (accounts uplink terminal)" diff --git a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm index d60fcff08d4..4d27c1ba84f 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm @@ -1,7 +1,7 @@ /obj/item/stock_parts/circuitboard/holodeckcontrol name = "circuitboard (holodeck control console)" build_path = /obj/machinery/computer/HolodeckControl - origin_tech = "{'programming':2,'wormholes':2}" + origin_tech = @'{"programming":2,"wormholes":2}' buildtype_select = TRUE var/last_to_emag var/linkedholodeck_area diff --git a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm b/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm index ac00601a2e6..2fcdba666f9 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm @@ -1,7 +1,7 @@ /obj/item/stock_parts/circuitboard/shuttle_console name = "circuitboard (basic shuttle console)" build_path = /obj/machinery/computer/shuttle_control - origin_tech = "{'programming':3}" + origin_tech = @'{"programming":3}' var/shuttle_tag /obj/item/stock_parts/circuitboard/shuttle_console/construct(obj/machinery/computer/shuttle_control/M) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm index add2a1c9b3d..d41c8526e4b 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm @@ -2,7 +2,7 @@ name = "circuitboard (biogenerator)" build_path = /obj/machinery/biogenerator board_type = "machine" - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1 diff --git a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm b/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm index 74512613c47..8b6f39d8471 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm @@ -2,7 +2,7 @@ name = "circuitboard (chemical heater)" build_path = /obj/machinery/reagent_temperature board_type = "machine" - origin_tech = "{'powerstorage':2,'engineering':1}" + origin_tech = @'{"powerstorage":2,"engineering":1}' req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/capacitor = 1 @@ -21,7 +21,7 @@ name = "circuitboard (ChemMaster 3000)" build_path = /obj/machinery/chem_master board_type = "machine" - origin_tech = "{'biotech':2,'engineering':1}" + origin_tech = @'{"biotech":2,"engineering":1}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, @@ -37,7 +37,7 @@ name = "circuitboard (chemical dispenser)" build_path = /obj/machinery/chemical_dispenser board_type = "machine" - origin_tech = "{'biotech':2,'engineering':1}" + origin_tech = @'{"biotech":2,"engineering":1}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1 diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm index cdbf106a0f3..8a3721b7898 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm @@ -2,7 +2,7 @@ name = "circuitboard (bioprinter)" build_path = /obj/machinery/fabricator/bioprinter board_type = "machine" - origin_tech = "{'engineering':1,'biotech':3,'programming':3}" + origin_tech = @'{"engineering":1,"biotech":3,"programming":3}' req_components = list( /obj/item/scanner/health = 1, /obj/item/stock_parts/matter_bin = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm index 97d9cefeb99..054a85165c2 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm @@ -2,7 +2,7 @@ name = "circuitboard (communication relay)" build_path = /obj/machinery/commsrelay board_type = "machine" - origin_tech = "{'wormholes':2,'programming':2}" + origin_tech = @'{"wormholes":2,"programming":2}' req_components = list( /obj/item/stack/cable_coil = 30, /obj/item/stock_parts/manipulator = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/docking_beacon.dm b/code/game/objects/items/weapons/circuitboards/machinery/docking_beacon.dm index 62e031da104..ee6e19428bf 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/docking_beacon.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/docking_beacon.dm @@ -2,7 +2,7 @@ name = "circuitboard (magnetic docking beacon)" board_type = "machine" build_path = /obj/machinery/docking_beacon - origin_tech = "{'magnets':3}" + origin_tech = @'{"magnets":3}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/micro_laser = 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm b/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm index 73a6052a8c4..a797235bf4c 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm @@ -2,7 +2,7 @@ name = "circuitboard (emergency floodlight)" build_path = /obj/machinery/floodlight board_type = "machine" - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' req_components = list( /obj/item/stack/cable_coil = 10) additional_spawn_components = list( @@ -14,7 +14,7 @@ name = "circuitboard (pipe dispenser)" build_path = /obj/machinery/fabricator/pipe board_type = "machine" - origin_tech = "{'engineering':6,'materials':5}" + origin_tech = @'{"engineering":6,"materials":5}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/matter_bin = 2, @@ -31,7 +31,7 @@ name = "circuitboard (suit cycler)" build_path = /obj/machinery/suit_cycler board_type = "machine" - origin_tech = "{'engineering':4,'materials':4}" + origin_tech = @'{"engineering":4,"materials":4}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/keyboard = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/forensic.dm b/code/game/objects/items/weapons/circuitboards/machinery/forensic.dm index 2e36dbaa29d..dc96af409e2 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/forensic.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/forensic.dm @@ -3,7 +3,7 @@ name = "circuitboard (forensic omnianalyzer)" build_path = /obj/machinery/forensic board_type = "machine" - origin_tech = "{'programming':6,'engineering':6,'biotech':6}" + origin_tech = @'{"programming":6,"engineering":6,"biotech":6}' req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 1, @@ -15,7 +15,7 @@ /obj/item/stock_parts/circuitboard/forensic_microscope name = "circuitboard (forensic microscope)" board_type = "machine" - origin_tech = "{'programming':3,'engineering':3,'biotech':3}" + origin_tech = @'{"programming":3,"engineering":3,"biotech":3}' build_path = /obj/machinery/forensic/microscope req_components = list( /obj/item/stock_parts/scanning_module = 1, @@ -27,7 +27,7 @@ /obj/item/stock_parts/circuitboard/forensic_dna_analyzer name = "circuitboard (forensic DNA analyzer)" board_type = "machine" - origin_tech = "{'programming':3,'engineering':3,'biotech':3}" + origin_tech = @'{"programming":3,"engineering":3,"biotech":3}' req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm b/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm index 8365797b46c..064eae1ab7f 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm @@ -2,7 +2,7 @@ name = "circuitboard (holomap)" board_type = "machine" build_path = /obj/machinery/holomap - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/household.dm b/code/game/objects/items/weapons/circuitboards/machinery/household.dm index db7de25060f..8878ee43271 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/household.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/household.dm @@ -2,7 +2,7 @@ name = "circuitboard (microwave)" build_path = /obj/machinery/microwave board_type = "machine" - origin_tech = "{'biotech':2,'engineering':2}" + origin_tech = @'{"biotech":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 2, @@ -17,7 +17,7 @@ name = "circuitboard (meat gibber)" build_path = /obj/machinery/gibber board_type = "machine" - origin_tech = "{'biotech':2,'materials':2}" + origin_tech = @'{"biotech":2,"materials":2}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 1, @@ -31,7 +31,7 @@ name = "circuitboard (candy machine)" build_path = /obj/machinery/cooker/candy board_type = "machine" - origin_tech = "{'biotech':1,'materials':1}" + origin_tech = @'{"biotech":1,"materials":1}' buildtype_select = TRUE req_components = list( /obj/item/stock_parts/manipulator = 2, @@ -50,7 +50,7 @@ name = "circuitboard (honey extractor)" build_path = /obj/machinery/honey_extractor board_type = "machine" - origin_tech = "{'biotech':2,'engineering':1}" + origin_tech = @'{"biotech":2,"engineering":1}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 2) @@ -64,7 +64,7 @@ name = "circuitboard (seed storage)" build_path = /obj/machinery/seed_storage board_type = "machine" - origin_tech = "{'biotech':2,'engineering':3}" + origin_tech = @'{"biotech":2,"engineering":3}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 2) @@ -77,13 +77,13 @@ /obj/item/stock_parts/circuitboard/seed_storage/advanced name = "circuitboard (seed storage (scientific))" build_path = /obj/machinery/seed_storage/xenobotany/buildable - origin_tech = "{'biotech':6,'engineering':3}" + origin_tech = @'{"biotech":6,"engineering":3}' /obj/item/stock_parts/circuitboard/washer name = "circuitboard (washing machine)" build_path = /obj/machinery/washing_machine board_type = "machine" - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 1, @@ -94,7 +94,7 @@ name = "circuitboard (autoclave)" build_path = /obj/machinery/washing_machine/autoclave board_type = "machine" - origin_tech = "{'engineering':3, 'biotech':2}" + origin_tech = @'{"engineering":3, "biotech":2}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/micro_laser = 1, @@ -105,7 +105,7 @@ name = "circuitboard (vending machine)" build_path = /obj/machinery/vending/assist board_type = "machine" - origin_tech = "{'engineering':2}" + origin_tech = @'{"engineering":2}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1 @@ -128,7 +128,7 @@ name = "circuitboard (industrial grinder)" build_path = /obj/machinery/reagentgrinder board_type = "machine" - origin_tech = "{'magnets':2,'materials':4,'engineering':4}" + origin_tech = @'{"magnets":2,"materials":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 2) @@ -142,7 +142,7 @@ name = "circuitboard (blender)" build_path = /obj/machinery/reagentgrinder/juicer board_type = "machine" - origin_tech = "{'magnets':2,'materials':2,'engineering':2}" + origin_tech = @'{"magnets":2,"materials":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/matter_bin = 1) @@ -156,7 +156,7 @@ name = "circuitboard (ice cream vat)" build_path = /obj/machinery/icecream_vat board_type = "machine" - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/pipe = 1 @@ -166,7 +166,7 @@ name = "circuitboard (smartfridge)" build_path = /obj/machinery/smartfridge board_type = "machine" - origin_tech = "{'engineering':3}" + origin_tech = @'{"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 3 ) @@ -184,7 +184,7 @@ name = "circuitboard (jukebox)" build_path = /obj/machinery/media/jukebox board_type = "machine" - origin_tech = "{'programming':5}" + origin_tech = @'{"programming":5}' req_components = list( /obj/item/stock_parts/subspace/amplifier = 2 ) @@ -202,6 +202,6 @@ name = "circuitboard (paper shredder)" build_path = /obj/machinery/papershredder board_type = "machine" - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' req_components = list(/obj/item/stock_parts/manipulator = 1) additional_spawn_components = null \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm b/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm index 053f4deedea..3bf3f65219e 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/inertial_damper.dm @@ -2,7 +2,7 @@ name = "circuitboard (inertial damper)" board_type = "machine" build_path = /obj/machinery/inertial_damper - origin_tech = "{'engineering':5,'magnets':3}" + origin_tech = @'{"engineering":5,"magnets":3}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/micro_laser = 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm index 0322857c03f..b06b1c294a9 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm @@ -2,8 +2,8 @@ name = "circuitboard (mech recharger)" build_path = /obj/machinery/mech_recharger board_type = "machine" - origin_tech = "{'programming':2,'powerstorage':2,'engineering':2}" + origin_tech = @'{"programming":2,"powerstorage":2,"engineering":2}' req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2) \ No newline at end of file + /obj/item/stock_parts/manipulator = 2) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm b/code/game/objects/items/weapons/circuitboards/machinery/medical.dm index f75c3b5180b..a1ad9088df2 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/medical.dm @@ -2,7 +2,7 @@ name = "circuitboard (operating table)" build_path = /obj/machinery/optable board_type = "machine" - origin_tech = "{'engineering':1,'biotech':3,'programming':3}" + origin_tech = @'{"engineering":1,"biotech":3,"programming":3}' req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 2, @@ -15,7 +15,7 @@ name = "circuitboard (body scanner)" build_path = /obj/machinery/bodyscanner board_type = "machine" - origin_tech = "{'engineering':2,'biotech':4,'programming':4}" + origin_tech = @'{"engineering":2,"biotech":4,"programming":4}' req_components = list( /obj/item/stock_parts/scanning_module = 2, /obj/item/stock_parts/manipulator = 2, @@ -28,7 +28,7 @@ name = "circuitboard (body scanner console)" build_path = /obj/machinery/body_scanconsole board_type = "machine" - origin_tech = "{'engineering':2,'biotech':4,'programming':4}" + origin_tech = @'{"engineering":2,"biotech":4,"programming":4}' req_components = list( /obj/item/stock_parts/console_screen = 1) additional_spawn_components = list( @@ -39,13 +39,13 @@ /obj/item/stock_parts/circuitboard/body_scanconsole/display name = "circuitboard (body scanner display)" build_path = /obj/machinery/body_scan_display - origin_tech = "{'biotech':2,'programming':2}" + origin_tech = @'{"biotech":2,"programming":2}' /obj/item/stock_parts/circuitboard/sleeper name = "circuitboard (sleeper)" build_path = /obj/machinery/sleeper board_type = "machine" - origin_tech = "{'engineering':3,'biotech':5,'programming':3}" + origin_tech = @'{"engineering":3,"biotech":5,"programming":3}' req_components = list ( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining.dm index 2c36518d233..77f454c521a 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining.dm @@ -2,7 +2,7 @@ name = "circuitboard (electric smelter)" build_path = /obj/machinery/material_processing/smeltery board_type = "machine" - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 2 @@ -17,7 +17,7 @@ name = "circuitboard (material compressor)" build_path = /obj/machinery/material_processing/compressor board_type = "machine" - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 2 @@ -32,7 +32,7 @@ name = "circuitboard (ore unloading machine)" build_path = /obj/machinery/material_processing/unloader board_type = "machine" - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 2 ) @@ -46,7 +46,7 @@ name = "circuitboard (material stacking machine)" build_path = /obj/machinery/material_processing/stacker board_type = "machine" - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1 @@ -61,7 +61,7 @@ name = "circuitboard (mineral extractor)" build_path = /obj/machinery/material_processing/extractor board_type = "machine" - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm index 0c068fe4ac0..a625fb1edaf 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm @@ -2,7 +2,7 @@ name = "circuitboard (mining drill head)" build_path = /obj/machinery/mining/drill board_type = "machine" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/matter_bin = 1, @@ -10,12 +10,12 @@ additional_spawn_components = list( /obj/item/stock_parts/power/battery/buildable/stock, /obj/item/cell = 1 - ) + ) /obj/item/stock_parts/circuitboard/miningdrillbrace name = "circuitboard (mining drill brace)" build_path = /obj/machinery/mining/brace board_type = "machine" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = null \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/network.dm b/code/game/objects/items/weapons/circuitboards/machinery/network.dm index f6498f018fc..6cf6922bec3 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/network.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/network.dm @@ -2,7 +2,7 @@ name = "circuitboard (mainframe)" build_path = /obj/machinery/network/mainframe board_type = "machine" - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/power/apc/buildable = 1, @@ -15,7 +15,7 @@ name = "circuitboard (access controller)" build_path = /obj/machinery/network/acl board_type = "machine" - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/power/apc/buildable = 1, @@ -27,7 +27,7 @@ name = "circuitboard (router)" build_path = /obj/machinery/network/router board_type = "machine" - origin_tech = "{'programming':2,'magnets':3}" + origin_tech = @'{"programming":2,"magnets":3}' req_components = list( /obj/item/stock_parts/subspace/filter = 1, /obj/item/stock_parts/scanning_module = 1, @@ -48,7 +48,7 @@ name = "circuitboard (relay)" build_path = /obj/machinery/network/relay board_type = "machine" - origin_tech = "{'programming':2,'magnets':2}" + origin_tech = @'{"programming":2,"magnets":2}' req_components = list( /obj/item/stock_parts/subspace/filter = 1, /obj/item/stock_parts/micro_laser = 1, @@ -65,7 +65,7 @@ name = "circuitboard (modem)" build_path = /obj/machinery/network/modem board_type = "machine" - origin_tech = "{'programming':2,'magnets':2}" + origin_tech = @'{"programming":2,"magnets":2}' req_components = list( /obj/item/stock_parts/subspace/filter = 1, /obj/item/stock_parts/capacitor = 1, @@ -86,7 +86,8 @@ /obj/item/stock_parts/circuitboard/relay/long_range name = "circuitboard (long-ranged relay)" build_path = /obj/machinery/network/relay/long_range - origin_tech = "{'programming':4,'magnets':5,'wormholes':5}" + board_type = "machine" + origin_tech = @'{"programming":4,"magnets":5,"wormholes":5}' req_components = list( /obj/item/stock_parts/subspace/ansible = 1, /obj/item/stock_parts/subspace/amplifier = 1, @@ -98,6 +99,7 @@ /obj/item/stock_parts/circuitboard/banking_mainframe name = "circuitboard (banking mainframe)" build_path = /obj/machinery/network/bank + board_type = "machine" origin_tech = "{'programming':4,'magnets':3}" req_components = list( /obj/item/stock_parts/capacitor = 1, @@ -111,6 +113,7 @@ /obj/item/stock_parts/circuitboard/trade_controller name = "circuitboard (trade control device)" build_path = /obj/machinery/network/trade_controller + board_type = "machine" origin_tech = "{'programming':4,'magnets':3}" req_components = list( /obj/item/stock_parts/capacitor = 1, @@ -119,5 +122,6 @@ /obj/item/stock_parts/circuitboard/telepad name = "circuitboard (cargo telepad)" + board_type = "machine" build_path = /obj/machinery/telepad_cargo diff --git a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm index f69fa27d72f..adeb13066e2 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm @@ -2,7 +2,7 @@ name = "circuitboard (oxygen regenerator)" build_path = /obj/machinery/atmospherics/binary/oxyregenerator board_type = "machine" - origin_tech = "{'magnets':2,'engineering':2}" + origin_tech = @'{"magnets":2,"engineering":2}' req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/manipulator = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm index 478632e5a8b..00bb2359291 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm @@ -2,7 +2,7 @@ name = "circuitboard (portable generator)" build_path = /obj/machinery/port_gen/pacman board_type = "machine" - origin_tech = "{'programming':3,'powerstorage':3,'exoticmatter':3,'engineering':3}" + origin_tech = @'{"programming":3,"powerstorage":3,"exoticmatter":3,"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/micro_laser = 1, @@ -16,14 +16,14 @@ /obj/item/stock_parts/circuitboard/pacman/super name = "circuitboard (portable fission generator)" build_path = /obj/machinery/port_gen/pacman/super - origin_tech = "{'programming':3,'powerstorage':4,'engineering':4}" + origin_tech = @'{"programming":3,"powerstorage":4,"engineering":4}' /obj/item/stock_parts/circuitboard/pacman/super/potato name = "circuitboard (PTTO-3 nuclear generator)" build_path = /obj/machinery/port_gen/pacman/super/potato - origin_tech = "{'programming':3,'powerstorage':5,'engineering':4}" + origin_tech = @'{"programming":3,"powerstorage":5,"engineering":4}' /obj/item/stock_parts/circuitboard/pacman/mrs name = "circuitboard (portable fusion generator)" build_path = /obj/machinery/port_gen/pacman/mrs - origin_tech = "{'programming':3,'powerstorage':5,'engineering':5}" + origin_tech = @'{"programming":3,"powerstorage":5,"engineering":5}' diff --git a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm b/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm index bafffc0d66f..bf95dcb67f2 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm @@ -2,7 +2,7 @@ name = "circuitboard (portable scrubber)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/scrubber - origin_tech = "{'engineering':4,'powerstorage':4}" + origin_tech = @'{"engineering":4,"powerstorage":4}' req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/matter_bin = 2, @@ -24,7 +24,7 @@ name = "circuitboard (large portable scrubber)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/scrubber/huge - origin_tech = "{'engineering':5,'powerstorage':5,'materials':5}" + origin_tech = @'{"engineering":5,"powerstorage":5,"materials":5}' req_components = list( /obj/item/stock_parts/capacitor = 4, /obj/item/stock_parts/matter_bin = 2, @@ -39,7 +39,7 @@ name = "circuitboard (hydroponics tray)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/hydroponics - origin_tech = "{'biotech':3,'materials':2,'programming':1}" + origin_tech = @'{"biotech":3,"materials":2,"programming":1}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/chems/glass/beaker = 1, @@ -54,7 +54,7 @@ name = "circuitboard (emergency dehumidifier)" board_type = "machine" build_path = /obj/machinery/dehumidifier - origin_tech = "{'engineering':4,'powerstorage':4}" + origin_tech = @'{"engineering":4,"powerstorage":4}' req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/matter_bin = 2, @@ -70,7 +70,7 @@ name = "circuitboard (space heater)" board_type = "machine" build_path = /obj/machinery/space_heater - origin_tech = "{'engineering':4,'powerstorage':4}" + origin_tech = @'{"engineering":4,"powerstorage":4}' req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/matter_bin = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm index 75ac605beb0..f1e3de83194 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm @@ -2,7 +2,7 @@ name = "circuitboard (superconductive magnetic energy storage)" build_path = /obj/machinery/power/smes/buildable board_type = "machine" - origin_tech = "{'powerstorage':6,'engineering':4}" + origin_tech = @'{"powerstorage":6,"engineering":4}' req_components = list(/obj/item/stock_parts/smes_coil = 1, /obj/item/stack/cable_coil = 30) additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, @@ -14,7 +14,7 @@ name = "circuitboard (battery rack PSU)" build_path = /obj/machinery/power/smes/batteryrack board_type = "machine" - origin_tech = "{'powerstorage':3,'engineering':2}" + origin_tech = @'{"powerstorage":3,"engineering":2}' req_components = list( /obj/item/stock_parts/capacitor/ = 3, /obj/item/stock_parts/matter_bin/ = 1, @@ -29,7 +29,7 @@ name = "circuitboard (recharger)" build_path = /obj/machinery/recharger board_type = "machine" - origin_tech = "{'powerstorage':2,'engineering':2}" + origin_tech = @'{"powerstorage":2,"engineering":2}' req_components = list( /obj/item/stock_parts/capacitor = 1 ) @@ -46,7 +46,7 @@ name = "circuitboard (cell charger)" build_path = /obj/machinery/cell_charger board_type = "machine" - origin_tech = "{'powerstorage':2,'engineering':2}" + origin_tech = @'{"powerstorage":2,"engineering":2}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/power/battery/buildable/turbo = 1, @@ -58,7 +58,7 @@ name = "circuitboard (small turbine)" build_path = /obj/machinery/atmospherics/pipeturbine board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 2 @@ -69,7 +69,7 @@ name = "circuitboard (small turbine motor)" build_path = /obj/machinery/turbinemotor board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 4 @@ -79,7 +79,7 @@ name = "circuitboard (large turbine compressor)" build_path = /obj/machinery/compressor board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 3, /obj/item/stock_parts/matter_bin = 3 @@ -92,7 +92,7 @@ name = "circuitboard (large turbine motor)" build_path = /obj/machinery/turbine board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 4 @@ -107,7 +107,7 @@ name = "circuitboard (thermoelectric generator turbine)" build_path = /obj/machinery/atmospherics/binary/circulator board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 3, /obj/item/stock_parts/matter_bin = 3 @@ -120,7 +120,7 @@ name = "circuitboard (thermoelectric generator motor)" build_path = /obj/machinery/generator board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 4 @@ -135,7 +135,7 @@ name = "circuitboard (breaker box)" build_path = /obj/machinery/power/breakerbox board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 2 @@ -150,7 +150,7 @@ name = "circuitboard (fuel compressor)" build_path = /obj/machinery/fuel_compressor board_type = "machine" - origin_tech = "{'powerstorage':2,'engineering':3,'materials':3}" + origin_tech = @'{"powerstorage":2,"engineering":3,"materials":3}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin/super = 2, @@ -162,7 +162,7 @@ name = "circuit board (stirling engine)" build_path = /obj/machinery/atmospherics/binary/stirling board_type = "machine" - origin_tech = "{'engineering':2,'powerstorage':1}" + origin_tech = @'{"engineering":2,"powerstorage":1}' req_components = list( /obj/item/stack/cable_coil = 20, /obj/item/stock_parts/matter_bin = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm index 29cd5ef5e43..e06fee8ccca 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm @@ -2,7 +2,7 @@ name = "circuitboard (cyborg recharging station)" build_path = /obj/machinery/recharge_station board_type = "machine" - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/capacitor = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 1d820de80f3..fe6ee981ad3 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -2,7 +2,7 @@ name = "circuitboard (destructive analyzer)" build_path = /obj/machinery/destructive_analyzer board_type = "machine" - origin_tech = "{'magnets':2,'engineering':2,'programming':2}" + origin_tech = @'{"magnets":2,"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 1, @@ -15,7 +15,7 @@ name = "circuitboard (autolathe)" build_path = /obj/machinery/fabricator board_type = "machine" - origin_tech = "{'engineering':2,'programming':2}" + origin_tech = @'{"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1) @@ -28,7 +28,7 @@ /obj/item/stock_parts/circuitboard/autolathe/micro name = "circuitboard (microlathe)" build_path = /obj/machinery/fabricator/micro - origin_tech = "{'engineering':1,'programming':1}" + origin_tech = @'{"engineering":1,"programming":1}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1 @@ -36,7 +36,7 @@ /obj/item/stock_parts/circuitboard/autolathe/book name = "circuitboard (autobinder)" build_path = /obj/machinery/fabricator/book - origin_tech = "{'engineering':1,'programming':1}" + origin_tech = @'{"engineering":1,"programming":1}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1 @@ -45,7 +45,7 @@ name = "circuitboard (replicator)" build_path = /obj/machinery/fabricator/replicator board_type = "machine" - origin_tech = "{'engineering':3,'programming':2,'biotech':2}" + origin_tech = @'{"engineering":3,"programming":2,"biotech":2}' req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1) @@ -59,7 +59,7 @@ name = "circuitboard (protolathe)" build_path = /obj/machinery/fabricator/protolathe board_type = "machine" - origin_tech = "{'engineering':2,'programming':2}" + origin_tech = @'{"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 2, @@ -74,7 +74,7 @@ name = "circuitboard (circuit imprinter)" build_path = /obj/machinery/fabricator/imprinter board_type = "machine" - origin_tech = "{'engineering':2,'programming':2}" + origin_tech = @'{"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, @@ -89,7 +89,7 @@ name = "circuitboard (industrial fabricator)" build_path = /obj/machinery/fabricator/industrial board_type = "machine" - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -104,7 +104,7 @@ name = "circuitboard (robotics fabricator)" build_path = /obj/machinery/fabricator/robotics board_type = "machine" - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -119,7 +119,7 @@ name = "circuitboard (textiles fabricator)" build_path = /obj/machinery/fabricator/textile board_type = "machine" - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -134,7 +134,7 @@ name = "circuitboard (suspension generator)" build_path = /obj/machinery/suspension_gen board_type = "machine" - origin_tech = "{'programming':4,'engineering':3,'magnets':4}" + origin_tech = @'{"programming":4,"engineering":3,"magnets":4}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -151,7 +151,7 @@ name = "circuitboard (artifact harvester)" build_path = /obj/machinery/artifact_harvester board_type = "machine" - origin_tech = "{'programming':4,'engineering':3}" + origin_tech = @'{"programming":4,"engineering":3}' req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -166,7 +166,7 @@ name = "circuitboard (artifact analyser)" build_path = /obj/machinery/artifact_analyser board_type = "machine" - origin_tech = "{'programming':4,'engineering':3}" + origin_tech = @'{"programming":4,"engineering":3}' req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/micro_laser = 2) @@ -180,7 +180,7 @@ name = "circuitboard (artifact scanpad)" build_path = /obj/machinery/artifact_scanpad board_type = "machine" - origin_tech = "{'programming':2,'engineering':2,'magnets':2}" + origin_tech = @'{"programming":2,"engineering":2,"magnets":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 1) @@ -192,7 +192,7 @@ name = "circuitboard (cryo pod)" build_path = /obj/machinery/cryopod board_type = "machine" - origin_tech = "{'programming':6,'engineering':6,'wormholes':6}" + origin_tech = @'{"programming":6,"engineering":6,"wormholes":6}' req_components = list( /obj/item/stock_parts/matter_bin = 4, /obj/item/stock_parts/manipulator = 1, @@ -212,7 +212,7 @@ name = "circuitboard (merchant pad)" build_path = /obj/machinery/merchant_pad board_type = "machine" - origin_tech = "{'programming':6,'wormholes':6,'esoteric':1}" + origin_tech = @'{"programming":6,"wormholes":6,"esoteric":1}' req_components = list(/obj/item/stack/cable_coil = 15) req_components = list( /obj/item/stock_parts/subspace/amplifier = 1, @@ -229,7 +229,7 @@ name = "circuitboard (radiocarbon spectrometer)" build_path = /obj/machinery/radiocarbon_spectrometer board_type = "machine" - origin_tech = "{'programming':2,'engineering':2,'magnets':2}" + origin_tech = @'{"programming":2,"engineering":2,"magnets":2}' req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 2, @@ -245,7 +245,7 @@ name = "circuitboard (design database)" build_path = /obj/machinery/design_database board_type = "machine" - origin_tech = "{'programming':2, 'engineering':2}" + origin_tech = @'{"programming":2, "engineering":2}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/power/apc/buildable = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/self_destruct_storage.dm b/code/game/objects/items/weapons/circuitboards/machinery/self_destruct_storage.dm index f0e849ed5cd..4c2ba1eecf3 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/self_destruct_storage.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/self_destruct_storage.dm @@ -2,7 +2,7 @@ name = "circuitboard (nuclear cylinder storage)" build_path = /obj/machinery/nuclear_cylinder_storage/buildable board_type = "machine" - origin_tech = "{'combat':2,'engineering':2}" + origin_tech = @'{"combat":2,"engineering":2}' req_components = list( /obj/item/stack/cable_coil = 10, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index a89768cdb25..c8e91741760 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -3,7 +3,7 @@ name = "circuitboard (advanced shield generator)" board_type = "machine" build_path = /obj/machinery/shield_generator - origin_tech = "{'magnets':3,'powerstorage':4}" + origin_tech = @'{"magnets":3,"powerstorage":4}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/micro_laser = 1, @@ -18,7 +18,7 @@ name = "circuitboard (shield diffuser)" board_type = "machine" build_path = /obj/machinery/shield_diffuser - origin_tech = "{'magnets':4,'powerstorage':2}" + origin_tech = @'{"magnets":4,"powerstorage":2}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/micro_laser = 1) @@ -33,12 +33,12 @@ board_type = "machine" desc = "Control systems for a Kuiper pattern point defense battery. Aim away from vessel." build_path = /obj/machinery/pointdefense - origin_tech = "{'engineering':3,'combat':2}" + origin_tech = @'{"engineering":3,"combat":2}' req_components = list( /obj/item/mech_equipment/mounted_system/taser/laser = 1, /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 2, - + ) additional_spawn_components = list( /obj/item/stock_parts/power/terminal/buildable = 1, @@ -51,4 +51,4 @@ board_type = "machine" desc = "A control computer to synchronize point defense batteries." build_path = /obj/machinery/pointdefense_control - origin_tech = "{'engineering':3,'combat':2}" \ No newline at end of file + origin_tech = @'{"engineering":3,"combat":2}' \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm b/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm index a3df680001e..e19b4b57f07 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm @@ -2,7 +2,7 @@ name = "circuitboard (ship sensors)" build_path = /obj/machinery/shipsensors board_type = "machine" - origin_tech = "{'wormholes':2,'programming':2}" + origin_tech = @'{"wormholes":2,"programming":2}' req_components = list( /obj/item/stack/cable_coil = 30, /obj/item/stock_parts/manipulator = 2, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm index a03313afe5b..d7b14d341c7 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -8,7 +8,7 @@ /obj/item/stock_parts/computer/network_card = 1 ) build_path = /obj/machinery/network/message_server - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' req_components = list( /obj/item/stock_parts/subspace/ansible = 1, /obj/item/stock_parts/subspace/filter = 1, @@ -26,7 +26,7 @@ /obj/item/stock_parts/computer/network_card = 1 ) build_path = /obj/machinery/network/telecomms_hub - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' req_components = list( /obj/item/stock_parts/subspace/ansible = 1, /obj/item/stock_parts/subspace/filter = 1, @@ -41,7 +41,7 @@ /obj/item/stock_parts/power/apc/buildable = 1 ) build_path = /obj/machinery/shipcomms/broadcaster - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' req_components = list( /obj/item/stack/cable_coil = 20, /obj/item/stock_parts/micro_laser/ultra = 5 @@ -54,7 +54,7 @@ /obj/item/stock_parts/power/apc/buildable = 1 ) build_path = /obj/machinery/shipcomms/receiver - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' req_components = list( /obj/item/stack/cable_coil = 20, /obj/item/stock_parts/subspace/filter = 1, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm index 7f49b5364a6..bf81f6b51ee 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -12,7 +12,7 @@ /obj/item/stock_parts/circuitboard/unary_atmos/heater name = "circuitboard (gas heating system)" build_path = /obj/machinery/atmospherics/unary/heater - origin_tech = "{'powerstorage':2,'engineering':1}" + origin_tech = @'{"powerstorage":2,"engineering":1}' req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/matter_bin = 1, @@ -21,7 +21,7 @@ /obj/item/stock_parts/circuitboard/unary_atmos/cooler name = "circuitboard (gas cooling system)" build_path = /obj/machinery/atmospherics/unary/freezer - origin_tech = "{'magnets':2,'engineering':2}" + origin_tech = @'{"magnets":2,"engineering":2}' req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/matter_bin = 1, diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm index eaa604688eb..d440f6ce30c 100644 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -2,5 +2,5 @@ /obj/item/stock_parts/circuitboard/aicore name = "circuitboard (AI core)" - origin_tech = "{'programming':4,'biotech':2}" + origin_tech = @'{"programming":4,"biotech":2}' board_type = "other" diff --git a/code/game/objects/items/weapons/circuitboards/wall.dm b/code/game/objects/items/weapons/circuitboards/wall.dm index cb60ba671dc..6aab1dd838e 100644 --- a/code/game/objects/items/weapons/circuitboards/wall.dm +++ b/code/game/objects/items/weapons/circuitboards/wall.dm @@ -7,7 +7,7 @@ desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"." build_path = /obj/machinery/firealarm board_type = "wall" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = null @@ -17,7 +17,7 @@ icon_state = "door_electronics" build_path = /obj/machinery/alarm board_type = "wall" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = null @@ -31,7 +31,7 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE build_path = /obj/machinery/power/apc/buildable board_type = "wall" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, @@ -45,7 +45,7 @@ name = "circuitboard (requests console)" build_path = /obj/machinery/network/requests_console board_type = "wall" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, @@ -65,7 +65,7 @@ name = "circuitboard (airlock controller)" build_path = /obj/machinery/embedded_controller/radio/simple_docking_controller board_type = "wall" - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, @@ -86,7 +86,7 @@ name = "circuitboard (camera)" build_path = /obj/machinery/camera board_type = "wall" - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' req_components = list() additional_spawn_components = list( /obj/item/stock_parts/power/apc/buildable = 1, diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 20408adecb0..8cc8c446b48 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -1,119 +1,222 @@ -/obj/item/lipstick //this is the base type and its red +/obj/item/cosmetics gender = PLURAL - name = "ruby lipstick" - desc = "An unbranded tube of lipstick." - icon = 'icons/obj/items/lipstick.dmi' - icon_state = "lipstick_0" + name = "abstract makeup" + desc = "An unbranded tube of makeup." obj_flags = OBJ_FLAG_HOLLOW w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS - color = "#e00606" + color = COLOR_SILVER material = /decl/material/solid/organic/plastic - var/color_desc = "ruby" + abstract_type = /obj/item/cosmetics + + var/base_icon_state + var/apply_marking_to_limb = BP_HEAD + var/apply_to_zone = BP_MOUTH + var/cosmetic_type + var/makeup_color + var/color_desc var/open = FALSE -/obj/item/lipstick/Initialize() +/obj/item/cosmetics/Initialize() . = ..() + if(!cosmetic_type) + PRINT_STACK_TRACE("Cosmetic item initialized with no cosmetic_type set!") + return INITIALIZE_HINT_QDEL if(color_desc) + name = "[color_desc] [name]" desc += " This one is in [color_desc]." update_icon() //'lipstick' and 'key' are both coloured by var color -/obj/item/lipstick/on_update_icon() +/obj/item/cosmetics/on_update_icon() . = ..() if(open) - icon_state = "the_stick" + icon_state = "[base_icon_state]_open" + add_overlay(overlay_image(icon, "[base_icon_state]_extended", makeup_color, RESET_COLOR)) else - icon_state = "" - - add_overlay(list( - overlay_image(icon, "lipstick_[open]", flags=RESET_COLOR), - overlay_image(icon, "key") - )) + icon_state = "[base_icon_state]_closed" + add_overlay(overlay_image(icon, "[base_icon_state]_key", makeup_color, RESET_COLOR)) -/obj/item/lipstick/attack_self(mob/user) +/obj/item/cosmetics/attack_self(mob/user) open = !open - if(open) - to_chat(user, SPAN_NOTICE("You remove the cap and twist \the [src] open.")) - else - to_chat(user, SPAN_NOTICE("You twist \the [src] closed and replace the cap.")) + show_open_message(user) update_icon() -/obj/item/lipstick/attack(atom/A, mob/user, target_zone) - if(!open) return - - if(ishuman(A)) - var/mob/living/carbon/human/H = A - var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD, /obj/item/organ/external/head) - - if(!head) - return - - if(user.a_intent == I_HELP && target_zone == BP_HEAD) - head.write_on(user, src.name) - else if(head.has_lips) - if(H.lip_style) //if they already have lipstick on - to_chat(user, "You need to wipe off the old lipstick first!") - return - if(H == user) - user.visible_message("[user] does their lips with \the [src].", \ - "You take a moment to apply \the [src]. Perfect!") - H.lip_style = color - H.update_body() - else - user.visible_message("[user] begins to do [H]'s lips with \the [src].", \ - "You begin to apply \the [src].") - if(do_after(user, 20, H) && do_after(H, 20, check_holding = 0, progress = 0, incapacitation_flags = INCAPACITATION_NONE)) //user needs to keep their active hand, H does not. - user.visible_message("[user] does [H]'s lips with \the [src].", \ - "You apply \the [src].") - H.lip_style = color - H.update_body() - else if(istype(A, /obj/item/organ/external/head)) +/obj/item/cosmetics/proc/show_open_message(mob/user) + return + +/obj/item/cosmetics/attack(atom/A, mob/user, target_zone) + + if(!open || !ishuman(A)) + return ..() + + if(istype(A, /obj/item/organ/external/head)) var/obj/item/organ/external/head/head = A head.write_on(user, src) + return TRUE + + var/obj/item/organ/external/limb = user.get_organ(apply_marking_to_limb, /obj/item/organ/external/head) + if(!limb) + return ..() + + if(user.a_intent == I_HELP && target_zone != apply_to_zone && istype(limb, /obj/item/organ/external/head)) + var/obj/item/organ/external/head/head = limb + head.write_on(user, src.name) + return TRUE + + if(!isliving(A) || target_zone != apply_to_zone) + return ..() + + var/decl/sprite_accessory/cosmetics/lip_decl = GET_DECL(cosmetic_type) + if(!lip_decl?.accessory_is_available(user, limb.species, limb.bodytype)) + to_chat(user, SPAN_WARNING("You can't wear this makeup!")) + return TRUE + + var/mob/living/user_living = user + if(user_living == A) + if(user_living.get_organ_sprite_accessory(cosmetic_type, apply_marking_to_limb)) //if they already have lipstick on + to_chat(user, SPAN_WARNING("You need to wipe off your old makeup first!")) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] does their makeup with \the [src]."), + SPAN_NOTICE("You take a moment to apply \the [src]. Perfect!") + ) + user_living.set_organ_sprite_accessory(cosmetic_type, SAC_COSMETICS, makeup_color, apply_marking_to_limb) + return TRUE + + user_living = A + if(user_living.get_organ_sprite_accessory(cosmetic_type, apply_marking_to_limb)) //if they already have lipstick on + to_chat(user, SPAN_WARNING("You need to wipe off the old makeup first!")) + return TRUE + + user.visible_message( + SPAN_NOTICE("\The [user] begins to do \the [user_living]'s makeup with \the [src]."), + SPAN_NOTICE("You begin to apply \the [src] to \the [user_living].") + ) + if(do_after(user, 2 SECONDS, user_living)) + user.visible_message( + SPAN_NOTICE("\The [user] does \the [user_living]'s makeup with \the [src]."), + SPAN_NOTICE("You apply \the [src] to \the [user_living].") + ) + if(user_living.get_organ_sprite_accessory(cosmetic_type, SAC_COSMETICS, apply_marking_to_limb)) + return TRUE + user_living.set_organ_sprite_accessory(cosmetic_type, SAC_COSMETICS, makeup_color, apply_marking_to_limb) + return TRUE //types -/obj/item/lipstick/yellow - name = "topaz lipstick" - color = "#dfdb0a" +/obj/item/cosmetics/lipstick + name = "lipstick" + desc = "An unbranded tube of lipstick." + icon = 'icons/obj/items/cosmetics/lipstick.dmi' + icon_state = "lipstick_closed" + cosmetic_type = /decl/sprite_accessory/cosmetics/lipstick + abstract_type = /obj/item/cosmetics/lipstick + base_icon_state = "lipstick" + +/obj/item/cosmetics/lipstick/show_open_message(mob/user) + if(open) + to_chat(user, SPAN_NOTICE("You remove the cap and twist \the [src] open.")) + else + to_chat(user, SPAN_NOTICE("You twist \the [src] closed and replace the cap.")) + +/obj/item/cosmetics/lipstick/red + makeup_color = "#e00606" + color_desc = "ruby" + +/obj/item/cosmetics/lipstick/yellow + makeup_color = "#dfdb0a" + color_desc = "topaz" + +/obj/item/cosmetics/lipstick/orange + makeup_color = "#db7d11" + color_desc = "agate" + +/obj/item/cosmetics/lipstick/green + makeup_color = "#218c17" + color_desc = "emerald" + +/obj/item/cosmetics/lipstick/turquoise + makeup_color = "#0098f0" + color_desc = "turquoise" + +/obj/item/cosmetics/lipstick/blue + makeup_color = "#0024f0" + color_desc = "sapphire" + +/obj/item/cosmetics/lipstick/violet + makeup_color = "#d55cd0" + color_desc = "amethyst" + +/obj/item/cosmetics/lipstick/white + makeup_color = "#d8d5d5" + color_desc = "moonstone" + +/obj/item/cosmetics/lipstick/purple + makeup_color = "#440044" + color_desc = "garnet" + +/obj/item/cosmetics/lipstick/black + makeup_color = "#2b2a2a" + color_desc = "onyx" + +/obj/item/cosmetics/eyeshadow + name = "eyeshadow" + abstract_type = /obj/item/cosmetics/eyeshadow + desc = "An unbranded tube of eyeshadow." + icon = 'icons/obj/items/cosmetics/eyeshadow.dmi' + icon_state = "eyeshadow_closed" + cosmetic_type = /decl/sprite_accessory/cosmetics/eyeshadow + abstract_type = /obj/item/cosmetics/eyeshadow + apply_to_zone = BP_EYES + base_icon_state = "eyeshadow" + +/obj/item/cosmetics/eyeshadow/show_open_message(mob/user) + if(open) + to_chat(user, SPAN_NOTICE("You pop \the [src] open and remove the brush.")) + else + to_chat(user, SPAN_NOTICE("You snap \the [src] closed and replace the brush.")) + +/obj/item/cosmetics/eyeshadow/red + makeup_color = "#e00606" + color_desc = "ruby" + +/obj/item/cosmetics/eyeshadow/yellow + makeup_color = "#dfdb0a" color_desc = "topaz" -/obj/item/lipstick/orange - name = "agate lipstick" - color = "#db7d11" +/obj/item/cosmetics/eyeshadow/orange + makeup_color = "#db7d11" color_desc = "agate" -/obj/item/lipstick/green - name = "emerald lipstick" - color = "#218c17" +/obj/item/cosmetics/eyeshadow/green + makeup_color = "#218c17" color_desc = "emerald" -/obj/item/lipstick/turquoise - name = "turquoise lipstick" - color = "#0098f0" +/obj/item/cosmetics/eyeshadow/turquoise + makeup_color = "#0098f0" color_desc = "turquoise" -/obj/item/lipstick/blue - name = "sapphire lipstick" - color = "#0024f0" +/obj/item/cosmetics/eyeshadow/blue + makeup_color = "#0024f0" color_desc = "sapphire" -/obj/item/lipstick/violet - name = "amethyst lipstick" - color = "#d55cd0" +/obj/item/cosmetics/eyeshadow/violet + makeup_color = "#d55cd0" color_desc = "amethyst" -/obj/item/lipstick/white - name = "moonstone lipstick" - color = "#d8d5d5" +/obj/item/cosmetics/eyeshadow/white + makeup_color = "#d8d5d5" color_desc = "moonstone" -/obj/item/lipstick/purple - name = "garnet lipstick" - color = "#440044" +/obj/item/cosmetics/eyeshadow/purple + makeup_color = "#440044" color_desc = "garnet" -/obj/item/lipstick/black - name = "onyx lipstick" - color = "#2b2a2a" - color_desc = "onyx" \ No newline at end of file +/obj/item/cosmetics/eyeshadow/black + makeup_color = "#2b2a2a" + color_desc = "onyx" + +/obj/item/cosmetics/eyeshadow/black + name = "onyx eyeshadow" + makeup_color = "#2b2a2a" + color_desc = "onyx" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 19abe1cc01d..46c030d3ba5 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -11,7 +11,7 @@ force = 5 throwforce = 6 w_class = ITEM_SIZE_LARGE - origin_tech = "{'biotech':4,'powerstorage':2}" + origin_tech = @'{"biotech":4,"powerstorage":2}' action_button_name = "Remove/Replace Paddles" material = /decl/material/solid/organic/plastic matter = list( @@ -163,7 +163,7 @@ icon = 'icons/obj/defibrillator_compact.dmi' w_class = ITEM_SIZE_NORMAL slot_flags = SLOT_LOWER_BODY - origin_tech = "{'biotech':5,'powerstorage':3}" + origin_tech = @'{"biotech":5,"powerstorage":3}' /obj/item/defibrillator/compact/loaded bcell = /obj/item/cell/high @@ -422,7 +422,7 @@ H.stun_effect_act(2, 120, target_zone) var/burn_damage = H.electrocute_act(burn_damage_amt*2, src, def_zone = target_zone) if(burn_damage > 15 && H.can_feel_pain()) - H.emote("scream") + H.emote(/decl/emote/audible/scream) var/obj/item/organ/internal/heart/doki = locate() in affecting.internal_organs if(istype(doki) && doki.pulse && !doki.open && prob(10)) to_chat(doki, SPAN_DANGER("Your [doki] has stopped!")) @@ -435,14 +435,13 @@ M.switch_from_dead_to_living_mob_list() M.timeofdeath = 0 - M.set_stat(UNCONSCIOUS) //Life() can bring them back to consciousness if it needs to. + M.set_stat(UNCONSCIOUS) M.try_refresh_visible_overlays() M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. M.reload_fullscreen() - M.emote("gasp") + M.emote(/decl/emote/audible/gasp) SET_STATUS_MAX(M, STAT_WEAK, rand(10,25)) - M.updatehealth() apply_brain_damage(M, deadtime) /obj/item/shockpaddles/proc/apply_brain_damage(mob/living/carbon/human/H, var/deadtime) diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index acb79193d24..5b38dfe2d70 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -10,23 +10,22 @@ material = /decl/material/solid/organic/plastic var/brightness_on = 1 - var/obj/item/cell/cigcell var/cartridge_type = /obj/item/chems/ecig_cartridge/med_nicotine var/obj/item/chems/ecig_cartridge/ec_cartridge - var/cell_type = /obj/item/cell/device/standard var/power_usage = 450 //value for simple ecig, enough for about 1 cartridge, in JOULES! var/ecig_colors = list(null, COLOR_DARK_GRAY, COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_GREEN_GRAY, COLOR_PURPLE_GRAY) var/idle = 0 var/idle_treshold = 30 /obj/item/clothing/mask/smokable/ecig/Initialize() - if(ispath(cell_type)) - cigcell = new cell_type + setup_power_supply() ec_cartridge = new cartridge_type(src) . = ..() -/obj/item/clothing/mask/smokable/ecig/get_cell() - return cigcell +/obj/item/clothing/mask/smokable/ecig/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/device/standard + accepted_cell_type = accepted_cell_type || /obj/item/cell/device + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) /obj/item/clothing/mask/smokable/ecig/simple name = "cheap electronic cigarette" @@ -43,7 +42,10 @@ /obj/item/clothing/mask/smokable/ecig/util name = "electronic cigarette" desc = "A popular utilitarian model electronic cigarette, the ONI-55. Comes in a variety of colors." - cell_type = /obj/item/cell/device/high //enough for four cartridges + +/obj/item/clothing/mask/smokable/ecig/util/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/device/high + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) //enough for four cartridges /obj/item/clothing/mask/smokable/ecig/util/Initialize() . = ..() @@ -55,16 +57,15 @@ to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) else to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) - if(cigcell) - to_chat(user,SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 25)]% power remaining.")) - else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) /obj/item/clothing/mask/smokable/ecig/deluxe name = "deluxe electronic cigarette" desc = "A premium model eGavana MK3 electronic cigarette, shaped like a cigar." icon = 'icons/clothing/mask/smokables/cigarette_electronic_deluxe.dmi' - cell_type = /obj/item/cell/device/high //enough for four catridges + +/obj/item/clothing/mask/smokable/ecig/deluxe/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/device/high + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) //enough for four cartridges /obj/item/clothing/mask/smokable/ecig/deluxe/examine(mob/user) . = ..() @@ -72,10 +73,6 @@ to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) else to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) - if(cigcell) - to_chat(user,SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 1)]% power remaining.")) - else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) /obj/item/clothing/mask/smokable/ecig/proc/Deactivate() lit = FALSE @@ -83,7 +80,7 @@ update_icon() /obj/item/clothing/mask/smokable/ecig/Process() - if(!cigcell) + if(!get_cell()) Deactivate() return if(!ec_cartridge) @@ -110,7 +107,8 @@ if (src == C.get_equipped_item(slot_wear_mask_str) && C.check_has_mouth()) //transfer, but only when not disabled idle = 0 //here we'll reduce battery by usage, and check powerlevel - you only use batery while smoking - if(!cigcell.checked_use(power_usage * CELLRATE)) //if this passes, there's not enough power in the battery + var/obj/item/cell/cell = get_cell() + if(!cell?.checked_use(power_usage * CELLRATE)) //if this passes, there's not enough power in the battery Deactivate() to_chat(C,SPAN_NOTICE("\The [src]'s power meter flashes a low battery warning and shuts down.")) return @@ -137,39 +135,23 @@ ec_cartridge = I update_icon() to_chat(user, SPAN_NOTICE("You insert \the [I] into \the [src].")) - - if(IS_SCREWDRIVER(I)) - if(cigcell) //if contains powercell - cigcell.update_icon() - cigcell.dropInto(loc) - cigcell = null - to_chat(user, SPAN_NOTICE("You remove \the [cigcell] from \the [src].")) - else //does not contains cell - to_chat(user, SPAN_NOTICE("There's no battery in \the [src].")) - - if(istype(I, /obj/item/cell/device)) - if(!cigcell && user.try_unequip(I)) - I.forceMove(src) - cigcell = I - to_chat(user, SPAN_NOTICE("You install \the [cigcell] into \the [src].")) - update_icon() - else - to_chat(user, SPAN_NOTICE("\The [src] already has a battery installed.")) - + return TRUE + return ..() /obj/item/clothing/mask/smokable/ecig/attack_self(mob/user) if(lit) Deactivate() to_chat(user, SPAN_NOTICE("You turn off \the [src].")) else - if(cigcell) + var/obj/item/cell/cell = get_cell() + if(cell) if (!ec_cartridge) to_chat(user, SPAN_NOTICE("You can't use \the [src] with no cartridge installed!")) return else if(!ec_cartridge.reagents.total_volume) to_chat(user, SPAN_NOTICE("You can't use \the [src] with no liquid left!")) return - else if(!cigcell.check_charge(power_usage * CELLRATE)) + else if(!cell.check_charge(power_usage * CELLRATE)) to_chat(user, SPAN_NOTICE("\The [src]'s power meter flashes a low battery warning and refuses to operate.")) return lit = TRUE @@ -199,7 +181,7 @@ material = /decl/material/solid/metal/aluminium matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) volume = 20 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_OPEN_CONTAINER /obj/item/chems/ecig_cartridge/examine(mob/user)//to see how much left . = ..() @@ -215,75 +197,75 @@ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says you can add whatever flavoring agents you want." /obj/item/chems/ecig_cartridge/blanknico/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) /obj/item/chems/ecig_cartridge/med_nicotine name = "tobacco flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored." /obj/item/chems/ecig_cartridge/med_nicotine/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 15) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 15) /obj/item/chems/ecig_cartridge/high_nicotine name = "high nicotine tobacco flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored, with extra nicotine." /obj/item/chems/ecig_cartridge/high_nicotine/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 10) - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/solid/tobacco/liquid, 10) + add_to_reagents(/decl/material/liquid/water, 10) /obj/item/chems/ecig_cartridge/orange name = "orange flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its orange flavored." /obj/item/chems/ecig_cartridge/orange/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/drink/juice/orange, 5) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/juice/orange, 5) /obj/item/chems/ecig_cartridge/mint name = "mint flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its mint flavored." /obj/item/chems/ecig_cartridge/mint/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/menthol, 5) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/menthol, 5) /obj/item/chems/ecig_cartridge/watermelon name = "watermelon flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its watermelon flavored." /obj/item/chems/ecig_cartridge/watermelon/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/drink/juice/watermelon, 5) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/juice/watermelon, 5) /obj/item/chems/ecig_cartridge/grape name = "grape flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its grape flavored." /obj/item/chems/ecig_cartridge/grape/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/drink/juice/grape, 5) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/juice/grape, 5) /obj/item/chems/ecig_cartridge/lemonlime name = "lemon-lime flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its lemon-lime flavored." /obj/item/chems/ecig_cartridge/lemonlime/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/drink/lemon_lime, 5) + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/lemon_lime, 5) /obj/item/chems/ecig_cartridge/coffee name = "coffee flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its coffee flavored." /obj/item/chems/ecig_cartridge/coffee/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/liquid, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) - reagents.add_reagent(/decl/material/liquid/drink/coffee, 5) \ No newline at end of file + add_to_reagents(/decl/material/solid/tobacco/liquid, 5) + add_to_reagents(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/coffee, 5) \ No newline at end of file diff --git a/code/game/objects/items/weapons/electric_welder.dm b/code/game/objects/items/weapons/electric_welder.dm index 056bba61579..8bc0a292070 100644 --- a/code/game/objects/items/weapons/electric_welder.dm +++ b/code/game/objects/items/weapons/electric_welder.dm @@ -8,32 +8,33 @@ force = 7 throwforce = 7 lit_colour = COLOR_CYAN_BLUE - var/obj/item/cell/cell = /obj/item/cell/high var/fuel_cost_multiplier = 10 /obj/item/weldingtool/electric/Initialize() - if(ispath(cell)) - cell = new cell(src) + setup_power_supply() . = ..() +/obj/item/weldingtool/electric/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/high + return ..(loaded_cell_type, /obj/item/cell, /datum/extension/loaded_cell, charge_value) + /obj/item/weldingtool/electric/examine(mob/user, distance) . = ..() - if (!cell) + var/obj/item/cell/cell = get_cell() + if(!cell) to_chat(user, "There is no [welding_resource] source attached.") else to_chat(user, (distance == 0 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[cell] is attached.") /obj/item/weldingtool/electric/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O, /obj/structure/reagent_dispensers/fueltank)) - if(!welding) - to_chat(user, SPAN_WARNING("\The [src] runs on an internal charge and does not need to be refuelled.")) + if(proximity && istype(O, /obj/structure/reagent_dispensers/fueltank) && !welding) + to_chat(user, SPAN_WARNING("\The [src] runs on an internal charge and does not need to be refuelled.")) return . = ..() /obj/item/weldingtool/electric/get_cell() - if(cell) - . = cell - else if(istype(loc, /obj/item/rig_module)) + . = ..() + if(!. && istype(loc, /obj/item/rig_module)) var/obj/item/rig_module/module = loc if(istype(module.holder)) . = module.holder.get_cell() @@ -45,27 +46,7 @@ /obj/item/weldingtool/electric/attackby(var/obj/item/W, var/mob/user) if(istype(W,/obj/item/stack/material/rods) || istype(W, /obj/item/chems/welder_tank)) return - if(IS_SCREWDRIVER(W)) - if(cell) - cell.dropInto(get_turf(src)) - user.put_in_hands(cell) - to_chat(user, SPAN_NOTICE("You pop \the [cell] out of \the [src].")) - welding = FALSE - cell = null - update_icon() - else - to_chat(user, SPAN_WARNING("\The [src] has no cell installed.")) - return - else if(istype(W, /obj/item/cell)) - if(cell) - to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) - else if(user.try_unequip(W)) - cell = W - cell.forceMove(src) - to_chat(user, SPAN_NOTICE("You slot \the [cell] into \the [src].")) - update_icon() - return - . = ..() + return ..() /obj/item/weldingtool/electric/use_fuel(var/amount) var/obj/item/cell/cell = get_cell() @@ -75,5 +56,5 @@ /obj/item/weldingtool/electric/on_update_icon() . = ..() - if(cell) + if(get_cell()) add_overlay("[icon_state]-cell") diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 1fcb4e2b95b..a89e688e6f2 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -7,11 +7,10 @@ item_state = "plasticx" item_flags = ITEM_FLAG_NO_BLUDGEON w_class = ITEM_SIZE_SMALL - origin_tech = "{'esoteric':2}" + origin_tech = @'{"esoteric":2}' material = /decl/material/solid/organic/plastic matter = list( - /decl/material/solid/silicon = MATTER_AMOUNT_TRACE, - /decl/material/liquid/anfo = MATTER_AMOUNT_REINFORCEMENT, //#TODO: Slap RDX in here + /decl/material/solid/silicon = MATTER_AMOUNT_TRACE ) var/datum/wires/explosive/c4/wires = null var/timer = 10 @@ -48,8 +47,13 @@ /obj/item/plastique/afterattack(atom/movable/target, mob/user, flag) if (!flag) return - if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/storage/) || istype(target, /obj/item/clothing/accessory/storage/) || istype(target, /obj/item/clothing/under)) + if (ismob(target) || istype(target, /obj/item/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under)) return + if(isturf(target)) + var/turf/target_turf = target + if(!target_turf.simulated) + return + to_chat(user, "Planting explosives...") user.do_attack_animation(target) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 01314fe86a6..1b0a297a7c8 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -48,7 +48,7 @@ ) /obj/item/chems/spray/extinguisher/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) /obj/item/chems/spray/extinguisher/has_safety() return TRUE @@ -62,7 +62,7 @@ if(!.) return if(user.buckled && isobj(user.buckled)) - addtimer(CALLBACK(src, .proc/propel_object, user.buckled, user, get_dir(A, user)), 0) + addtimer(CALLBACK(src, PROC_REF(propel_object), user.buckled, user, get_dir(A, user)), 0) else if(!user.check_space_footing()) var/old_dir = user.dir step(user, get_dir(A, user)) diff --git a/code/game/objects/items/weapons/flame.dm b/code/game/objects/items/weapons/flame.dm index 54ed37611f8..0b6304de64f 100644 --- a/code/game/objects/items/weapons/flame.dm +++ b/code/game/objects/items/weapons/flame.dm @@ -5,10 +5,8 @@ var/lit = FALSE material = /decl/material/solid/organic/wood -/obj/item/flame/afterattack(var/obj/O, var/mob/user, proximity) - ..() - if(proximity && lit && istype(O)) - O.HandleObjectHeating(src, user, 700) +/obj/item/flame/get_tool_quality(archetype, property) + return (!lit && archetype == TOOL_CAUTERY) ? TOOL_QUALITY_NONE : ..() /obj/item/flame/proc/extinguish(var/mob/user, var/no_message) lit = FALSE @@ -50,7 +48,7 @@ var/smoketime = 5 obj_flags = OBJ_FLAG_HOLLOW // so that it's not super overpriced compared to lighters w_class = ITEM_SIZE_TINY - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' slot_flags = SLOT_EARS attack_verb = list("burnt", "singed") randpixel = 10 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 73721295816..c2ecf653137 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -13,7 +13,7 @@ throw_range = 5 w_class = ITEM_SIZE_LARGE - origin_tech = "{'combat':1}" + origin_tech = @'{"combat":1}' material = /decl/material/solid/metal/steel var/fire_sound @@ -294,7 +294,7 @@ /obj/item/flamethrower/proc/ignite_turf(turf/target) var/datum/gas_mixture/air_transfer = tank.air_contents.remove_ratio(0.02 * (throw_amount / 100)) - target.add_fluid(/decl/material/liquid/fuel, air_transfer.get_by_flag(XGM_GAS_FUEL) * REAGENT_UNITS_PER_GAS_MOLE * 2) + target.add_to_reagents(/decl/material/liquid/fuel, air_transfer.get_by_flag(XGM_GAS_FUEL) * REAGENT_UNITS_PER_GAS_MOLE * 2) air_transfer.remove_by_flag(XGM_GAS_FUEL, 0) target.assume_air(air_transfer) target.create_fire(tank.air_contents.temperature * 2 + 400) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 60f143263b9..c5301bb57bf 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -55,12 +55,12 @@ /obj/item/storage/wallet, /obj/item/storage/photo_album, /obj/item/storage/box/snappops, - /obj/item/storage/fancy/crayons, + /obj/item/storage/box/fancy/crayons, /obj/item/storage/backpack/holding, /obj/item/storage/belt/champion, - /obj/item/pickaxe/silver, + /obj/item/tool/pickaxe/titanium, /obj/item/pen/invisible, - /obj/random/lipstick, + /obj/random/makeup, /obj/item/grenade/smokebomb, /obj/item/corncob, /obj/item/poster, diff --git a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm index 15a12fa7460..a9fdaf0deab 100644 --- a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm +++ b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm @@ -3,7 +3,7 @@ name = "photon disruption grenade" icon = 'icons/obj/items/grenades/grenade_light.dmi' det_time = 20 - origin_tech = "{'wormholes':4,'materials':4}" + origin_tech = @'{"wormholes":4,"materials":4}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -13,10 +13,10 @@ /obj/item/grenade/anti_photon/detonate() playsound(src.loc, 'sound/effects/phasein.ogg', 50, 1, 5) set_light(10, -10, "#ffffff") - addtimer(CALLBACK(src, .proc/finish), rand(20 SECONDS, 29 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(finish)), rand(20 SECONDS, 29 SECONDS)) /obj/item/grenade/anti_photon/proc/finish() - set_light(10, 10, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") + set_light(10, 10, rgb(rand(64,255), rand(64,255), rand(64,255))) playsound(loc, 'sound/effects/bang.ogg', 50, 1, 5) sleep(1 SECOND) qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 4967bc238f1..0caa509f2bc 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -193,7 +193,7 @@ desc = "An oversized grenade that affects a larger area." icon = 'icons/obj/items/grenades/grenade_large.dmi' allowed_containers = list(/obj/item/chems/glass) - origin_tech = "{'combat':3,'materials':3}" + origin_tech = @'{"combat":3,"materials":3}' material = /decl/material/solid/metal/steel /obj/item/grenade/chem_grenade/metalfoam @@ -206,9 +206,9 @@ . = ..() var/obj/item/chems/glass/beaker/B1 = new(src) var/obj/item/chems/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/decl/material/solid/metal/aluminium, 30) - B2.reagents.add_reagent(/decl/material/liquid/foaming_agent, 10) - B2.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 10) + B1.add_to_reagents(/decl/material/solid/metal/aluminium, 30) + B2.add_to_reagents(/decl/material/liquid/foaming_agent, 10) + B2.add_to_reagents(/decl/material/liquid/acid/polyacid, 10) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 @@ -224,10 +224,10 @@ . = ..() var/obj/item/chems/glass/beaker/B1 = new(src) var/obj/item/chems/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/decl/material/solid/metal/aluminium, 15) - B1.reagents.add_reagent(/decl/material/liquid/fuel, 15) - B2.reagents.add_reagent(/decl/material/solid/metal/aluminium, 15) - B2.reagents.add_reagent(/decl/material/liquid/acid, 15) + B1.add_to_reagents(/decl/material/solid/metal/aluminium, 15) + B1.add_to_reagents(/decl/material/liquid/fuel, 15) + B2.add_to_reagents(/decl/material/solid/metal/aluminium, 15) + B2.add_to_reagents(/decl/material/liquid/acid, 15) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 @@ -243,10 +243,10 @@ . = ..() var/obj/item/chems/glass/beaker/B1 = new(src) var/obj/item/chems/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/decl/material/liquid/weedkiller, 25) - B1.reagents.add_reagent(/decl/material/solid/potassium, 25) - B2.reagents.add_reagent(/decl/material/solid/phosphorus, 25) - B2.reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 25) + B1.add_to_reagents(/decl/material/liquid/weedkiller, 25) + B1.add_to_reagents(/decl/material/solid/potassium, 25) + B2.add_to_reagents(/decl/material/solid/phosphorus, 25) + B2.add_to_reagents(/decl/material/liquid/nutriment/sugar, 25) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 @@ -262,9 +262,9 @@ . = ..() var/obj/item/chems/glass/beaker/B1 = new(src) var/obj/item/chems/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/decl/material/liquid/surfactant, 40) - B2.reagents.add_reagent(/decl/material/liquid/water, 40) - B2.reagents.add_reagent(/decl/material/liquid/cleaner, 10) + B1.add_to_reagents(/decl/material/liquid/surfactant, 40) + B2.add_to_reagents(/decl/material/liquid/water, 40) + B2.add_to_reagents(/decl/material/liquid/cleaner, 10) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 @@ -280,11 +280,11 @@ . = ..() var/obj/item/chems/glass/beaker/large/B1 = new(src) var/obj/item/chems/glass/beaker/large/B2 = new(src) - B1.reagents.add_reagent(/decl/material/solid/phosphorus, 40) - B1.reagents.add_reagent(/decl/material/solid/potassium, 40) - B1.reagents.add_reagent(/decl/material/liquid/capsaicin/condensed, 40) - B2.reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 40) - B2.reagents.add_reagent(/decl/material/liquid/capsaicin/condensed, 80) + B1.add_to_reagents(/decl/material/solid/phosphorus, 40) + B1.add_to_reagents(/decl/material/solid/potassium, 40) + B1.add_to_reagents(/decl/material/liquid/capsaicin/condensed, 40) + B2.add_to_reagents(/decl/material/liquid/nutriment/sugar, 40) + B2.add_to_reagents(/decl/material/liquid/capsaicin/condensed, 80) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 @@ -301,8 +301,8 @@ . = ..() var/obj/item/chems/glass/beaker/B1 = new(src) var/obj/item/chems/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/decl/material/liquid/water, 40) - B2.reagents.add_reagent(/decl/material/liquid/water, 40) + B1.add_to_reagents(/decl/material/liquid/water, 40) + B2.add_to_reagents(/decl/material/liquid/water, 40) detonator = new/obj/item/assembly_holder/timer_igniter(src) beakers += B1 beakers += B2 diff --git a/code/game/objects/items/weapons/grenades/decompiler.dm b/code/game/objects/items/weapons/grenades/decompiler.dm index b498c7b3456..6e145b49a91 100644 --- a/code/game/objects/items/weapons/grenades/decompiler.dm +++ b/code/game/objects/items/weapons/grenades/decompiler.dm @@ -2,7 +2,7 @@ desc = "It is set to detonate in 5 seconds. It will create an unstable singularity that will break nearby objects down into purified matter cubes." name = "decompiler grenade" icon = 'icons/obj/items/grenades/delivery.dmi' - origin_tech = "{'materials':3,'magnets':2,'exoticmatter':3}" + origin_tech = @'{"materials":3,"magnets":2,"exoticmatter":3}' matter = list( /decl/material/solid/exotic_matter = MATTER_AMOUNT_TRACE ) diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm index d2e985997d7..afac53d7238 100644 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ b/code/game/objects/items/weapons/grenades/emgrenade.dm @@ -1,7 +1,7 @@ /obj/item/grenade/empgrenade name = "classic EMP grenade" icon = 'icons/obj/items/grenades/emp.dmi' - origin_tech = "{'materials':2,'magnets':3}" + origin_tech = @'{"materials":2,"magnets":3}' var/emp_light_range = 10 var/emp_heavy_range = 4 @@ -15,6 +15,6 @@ name = "low-yield EMP grenade" desc = "A weaker variant of the classic EMP grenade." icon = 'icons/obj/items/grenades/emp_old.dmi' - origin_tech = "{'materials':2,'magnets':3}" + origin_tech = @'{"materials":2,"magnets":3}' emp_heavy_range = 1 emp_light_range = 4 diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index ddcc59ed61f..da480a4fbec 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -2,7 +2,7 @@ name = "flashbang" desc = "A grenade designed to blind, stun and disorient by means of an extremely bright flash and loud explosion." icon = 'icons/obj/items/grenades/flashbang.dmi' - origin_tech = "{'materials':2,'combat':1}" + origin_tech = @'{"materials":2,"combat":1}' var/banglet = 0 /obj/item/grenade/flashbang/detonate() @@ -126,7 +126,7 @@ var/stepdist = rand(1,4)//How far to step var/temploc = src.loc//Saves the current location to know where to step away from walk_away(src,temploc,stepdist)//I must go, my people need me - addtimer(CALLBACK(src, .proc/detonate), rand(15,60)) + addtimer(CALLBACK(src, PROC_REF(detonate)), rand(15,60)) /obj/item/grenade/flashbang/clusterbang/segment/detonate() var/numspawned = rand(4,8) @@ -145,4 +145,4 @@ var/stepdist = rand(1,3) var/temploc = src.loc walk_away(src,temploc,stepdist) - addtimer(CALLBACK(src, .proc/detonate), rand(15,60)) + addtimer(CALLBACK(src, PROC_REF(detonate)), rand(15,60)) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 49237df9b01..c6c88a77447 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -77,7 +77,7 @@ active = TRUE update_icon() playsound(loc, arm_sound, 75, 0, -3) - addtimer(CALLBACK(src, .proc/detonate), det_time) + addtimer(CALLBACK(src, PROC_REF(detonate)), det_time) /obj/item/grenade/proc/detonate() var/turf/T = get_turf(src) diff --git a/code/game/objects/items/weapons/grenades/prank_grenades.dm b/code/game/objects/items/weapons/grenades/prank_grenades.dm index 8926c8002e2..8e7c1242f39 100644 --- a/code/game/objects/items/weapons/grenades/prank_grenades.dm +++ b/code/game/objects/items/weapons/grenades/prank_grenades.dm @@ -15,6 +15,6 @@ destroy_surroundings = 0 /obj/item/grenade/spawnergrenade/fake_carp - origin_tech = "{'materials':2,'magnets':2,'wormholes':5}" + origin_tech = @'{"materials":2,"magnets":2,"wormholes":5}' spawner_type = /mob/living/simple_animal/hostile/carp/holodeck/fake deliveryamt = 4 diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index e2274c3e386..1347194837e 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -20,7 +20,7 @@ START_PROCESSING(SSobj, src) for(var/obj/effect/blob/B in view(8,src)) var/damage = round(30/(get_dist(B,src)+1)) - B.health -= damage + B.current_health -= damage B.update_icon() QDEL_IN(src, 8 SECONDS) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 296e02f01c7..543bbe5fac4 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -2,7 +2,7 @@ desc = "It is set to detonate in 5 seconds. It will unleash unleash an unspecified anomaly into the vicinity." name = "delivery grenade" icon = 'icons/obj/items/grenades/delivery.dmi' - origin_tech = "{'materials':3,'magnets':4}" + origin_tech = @'{"materials":3,"magnets":4}' var/spawner_type = null // must be an object path var/deliveryamt = 1 // amount of type to deliver @@ -24,10 +24,10 @@ name = "manhack delivery grenade" spawner_type = /mob/living/simple_animal/hostile/viscerator deliveryamt = 5 - origin_tech = "{'materials':3,'magnets':4,'esoteric':4}" + origin_tech = @'{"materials":3,"magnets":4,"esoteric":4}' /obj/item/grenade/spawnergrenade/spesscarp name = "carp delivery grenade" spawner_type = /mob/living/simple_animal/hostile/carp deliveryamt = 5 - origin_tech = "{'materials':3,'magnets':4,'esoteric':4}" + origin_tech = @'{"materials":3,"magnets":4,"esoteric":4}' diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm index f71e0b7e1fd..4f2758b53e3 100644 --- a/code/game/objects/items/weapons/grenades/supermatter.dm +++ b/code/game/objects/items/weapons/grenades/supermatter.dm @@ -1,7 +1,7 @@ /obj/item/grenade/supermatter name = "supermatter grenade" icon = 'icons/obj/items/grenades/banana.dmi' - origin_tech = "{'wormholes':5,'magnets':4,'engineering':5}" + origin_tech = @'{"wormholes":5,"magnets":4,"engineering":5}' arm_sound = 'sound/effects/3.wav' var/implode_at diff --git a/code/game/objects/items/weapons/hair_care.dm b/code/game/objects/items/weapons/hair_care.dm deleted file mode 100644 index cb2812db8c9..00000000000 --- a/code/game/objects/items/weapons/hair_care.dm +++ /dev/null @@ -1,38 +0,0 @@ - -/obj/item/haircomb //sparklysheep's comb - name = "plastic comb" - desc = "A pristine comb made from flexible plastic." - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - icon = 'icons/obj/items/comb.dmi' - icon_state = "comb" - item_state = "comb" - material = /decl/material/solid/organic/plastic - -/obj/item/haircomb/random/Initialize() - . = ..() - color = get_random_colour(lower = 150) - -/obj/item/haircomb/attack_self(mob/user) - if(!user.incapacitated()) - var/decl/pronouns/G = user.get_pronouns() - user.visible_message(SPAN_NOTICE("\The [user] uses \the [src] to comb [G.his] hair with incredible style and sophistication. What a [G.informal_term].")) - -/obj/item/haircomb/brush - name = "hairbrush" - desc = "A surprisingly decent hairbrush with a false wood handle and semi-soft bristles." - icon = 'icons/obj/items/hairbrush.dmi' - w_class = ITEM_SIZE_SMALL - slot_flags = null - icon_state = "brush" - item_state = "brush" - material = /decl/material/solid/organic/plastic - -/obj/item/haircomb/brush/attack_self(mob/user) - if(ishuman(user) && !user.incapacitated()) - var/mob/living/carbon/human/H = user - var/decl/sprite_accessory/hair/hair_style = GET_DECL(H.h_style) - if(hair_style.flags & VERY_SHORT) - H.visible_message(SPAN_NOTICE("\The [H] just sort of runs \the [src] over their scalp.")) - else - H.visible_message(SPAN_NOTICE("\The [H] meticulously brushes their hair with \the [src].")) \ No newline at end of file diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 2df431e030a..d38d1fc8974 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -10,7 +10,7 @@ w_class = ITEM_SIZE_SMALL throw_speed = 2 throw_range = 5 - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel max_health = ITEM_HEALTH_NO_DAMAGE //#TODO: Once we can work out something different for handling cuff breakout, change this. Since it relies on cuffs health to tell if you can actually breakout. var/elastic @@ -32,7 +32,7 @@ /obj/item/handcuffs/examine(mob/user) . = ..() - if (health > 0 && max_health > 0) + if (current_health > 0 && get_max_health() > 0) var display = get_percent_health() if (display > 66) return diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 1b0439fa145..a874cd25b11 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -30,7 +30,7 @@ return 0 malfunction = MALFUNCTION_TEMPORARY - addtimer(CALLBACK(src,.proc/restore),time) + addtimer(CALLBACK(src,PROC_REF(restore)),time) return 1 /obj/item/implant/proc/restore() diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 1b4890ac51c..85008df6d66 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -29,12 +29,12 @@ user.set_machine(src) var/health_text = "" if(src.occupant) - if(src.occupant.health <= -100) + if(src.occupant.current_health <= -100) health_text = "Dead" - else if(src.occupant.health < 0) - health_text = "[round(src.occupant.health,0.1)]" + else if(src.occupant.current_health < 0) + health_text = "[round(src.occupant.current_health,0.1)]" else - health_text = "[round(src.occupant.health,0.1)]" + health_text = "[round(src.occupant.current_health,0.1)]" var/dat ="Implanter Status
    " diff --git a/code/game/objects/items/weapons/implants/implants/adrenaline.dm b/code/game/objects/items/weapons/implants/implants/adrenaline.dm index 75c23bc3e0b..7c3f0036fa7 100644 --- a/code/game/objects/items/weapons/implants/implants/adrenaline.dm +++ b/code/game/objects/items/weapons/implants/implants/adrenaline.dm @@ -1,7 +1,7 @@ /obj/item/implant/adrenalin name = "adrenalin implant" desc = "Removes all stuns and knockdowns." - origin_tech = "{'materials':1,'biotech':2,'esoteric':2}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":2}' hidden = 1 var/uses @@ -20,7 +20,7 @@ /obj/item/implant/adrenalin/trigger(emote, mob/source) if (emote == "pale") activate() - + /obj/item/implant/adrenalin/activate()//this implant is unused but I'm changing it for the sake of consistency if (uses < 1 || malfunction || !imp_in) return 0 uses-- diff --git a/code/game/objects/items/weapons/implants/implants/chem.dm b/code/game/objects/items/weapons/implants/implants/chem.dm index 3326284cc3f..0d184f80f7f 100644 --- a/code/game/objects/items/weapons/implants/implants/chem.dm +++ b/code/game/objects/items/weapons/implants/implants/chem.dm @@ -3,7 +3,7 @@ var/global/list/chem_implants = list() /obj/item/implant/chem name = "chemical implant" desc = "Injects things." - origin_tech = "{'materials':1,'biotech':2}" + origin_tech = @'{"materials":1,"biotech":2}' known = 1 /obj/item/implant/chem/get_data() @@ -53,4 +53,7 @@ var/global/list/chem_implants = list() /obj/item/implantcase/chem name = "glass case - 'chem'" - imp = /obj/item/implant/chem \ No newline at end of file + imp = /obj/item/implant/chem + +/obj/item/implantcase/chem/can_be_injected_by(var/atom/injector) + return FALSE diff --git a/code/game/objects/items/weapons/implants/implants/compressed.dm b/code/game/objects/items/weapons/implants/implants/compressed.dm index 6448b9c4dce..64de2aa17f6 100644 --- a/code/game/objects/items/weapons/implants/implants/compressed.dm +++ b/code/game/objects/items/weapons/implants/implants/compressed.dm @@ -2,7 +2,7 @@ name = "compressed matter implant" desc = "Based on compressed matter technology, can store a single item." icon_state = "implant_evil" - origin_tech = "{'materials':4,'biotech':2,'esoteric':2}" + origin_tech = @'{"materials":4,"biotech":2,"esoteric":2}' hidden = 1 var/activation_emote var/obj/item/scanned diff --git a/code/game/objects/items/weapons/implants/implants/death_alarm.dm b/code/game/objects/items/weapons/implants/implants/death_alarm.dm index ac1c0cffea7..f41e96f1f29 100644 --- a/code/game/objects/items/weapons/implants/implants/death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implants/death_alarm.dm @@ -1,7 +1,7 @@ /obj/item/implant/death_alarm name = "death alarm implant" desc = "An alarm which monitors host vital signs and transmits a radio message upon death." - origin_tech = "{'materials':1,'biotech':2,'programming':3}" + origin_tech = @'{"materials":1,"biotech":2,"programming":3}' known = 1 var/mobname = "John Doe" diff --git a/code/game/objects/items/weapons/implants/implants/explosive.dm b/code/game/objects/items/weapons/implants/implants/explosive.dm index 62109528325..2ccdddc2153 100644 --- a/code/game/objects/items/weapons/implants/implants/explosive.dm +++ b/code/game/objects/items/weapons/implants/implants/explosive.dm @@ -3,7 +3,7 @@ name = "explosive implant" desc = "A military grade micro bio-explosive. Highly dangerous." icon_state = "implant_evil" - origin_tech = "{'materials':1,'biotech':2,'esoteric':3}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":3}' hidden = 1 var/elevel var/phrase diff --git a/code/game/objects/items/weapons/implants/implants/freedom.dm b/code/game/objects/items/weapons/implants/implants/freedom.dm index d034c8276d3..772720a0cd0 100644 --- a/code/game/objects/items/weapons/implants/implants/freedom.dm +++ b/code/game/objects/items/weapons/implants/implants/freedom.dm @@ -3,12 +3,15 @@ /obj/item/implant/freedom name = "freedom implant" desc = "Use this to escape from those evil Red Shirts." - origin_tech = "{'materials':1,'biotech':2,'esoteric':2}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":2}' implant_color = "r" hidden = 1 var/activation_emote var/uses +SAVED_VAR(/obj/item/implant/freedom, activation_emote) +SAVED_VAR(/obj/item/implant/freedom, uses) + /obj/item/implant/freedom/get_data() return {" Implant Specifications:
    @@ -27,7 +30,8 @@ /obj/item/implant/freedom/Initialize() . = ..() - uses = rand(1, 5) + if(!persistent_id) + uses = rand(1, 5) /obj/item/implant/freedom/trigger(emote, mob/living/carbon/source) if (emote == activation_emote) diff --git a/code/game/objects/items/weapons/implants/implants/imprinting.dm b/code/game/objects/items/weapons/implants/implants/imprinting.dm index 2ff70ad312c..76e7ac49e30 100644 --- a/code/game/objects/items/weapons/implants/implants/imprinting.dm +++ b/code/game/objects/items/weapons/implants/implants/imprinting.dm @@ -1,7 +1,7 @@ /obj/item/implant/imprinting name = "imprinting implant" desc = "Latest word in training your peons." - origin_tech = "{'materials':1,'biotech':2,'programming':3}" + origin_tech = @'{"materials":1,"biotech":2,"programming":3}' hidden = 1 var/list/instructions = list("Do your job.", "Respect your superiors.", "Wash you hands after using the toilet.") var/brainwashing = 0 @@ -51,7 +51,7 @@ M.StoreMemory(msg, /decl/memory_options/system) if(brainwashing) log_and_message_admins("was implanted with a brainwashing implant holding following laws: [jointext(instructions, ";")].", M) - addtimer(CALLBACK(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) + addtimer(CALLBACK(src,PROC_REF(activate)),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) return TRUE /obj/item/implant/imprinting/proc/get_instructions() @@ -83,7 +83,7 @@ else instruction = "You remember suddenly: \"[instruction]\"" to_chat(imp_in, instruction) - addtimer(CALLBACK(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) + addtimer(CALLBACK(src,PROC_REF(activate)),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) /obj/item/implant/imprinting/removed() if(brainwashing && !malfunction) @@ -103,7 +103,7 @@ . = ..() /obj/item/implant/imprinting/can_implant(mob/M, mob/user, target_zone) - var/mob/living/carbon/human/H = M + var/mob/living/carbon/human/H = M if(istype(H)) var/obj/item/organ/internal/B = GET_INTERNAL_ORGAN(H, BP_BRAIN) if(!B || H.isSynthetic()) diff --git a/code/game/objects/items/weapons/implants/implants/loyalty.dm b/code/game/objects/items/weapons/implants/implants/loyalty.dm index f9112595bed..f7cc12b1abb 100644 --- a/code/game/objects/items/weapons/implants/implants/loyalty.dm +++ b/code/game/objects/items/weapons/implants/implants/loyalty.dm @@ -1,7 +1,7 @@ /obj/item/implant/loyalty name = "loyalty implant" desc = "Makes you loyal or such." - origin_tech = "{'materials':1,'biotech':2,'esoteric':3}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":3}' known = 1 /obj/item/implant/loyalty/get_data() diff --git a/code/game/objects/items/weapons/implants/implants/tracking.dm b/code/game/objects/items/weapons/implants/implants/tracking.dm index 5db14647141..0b317737c4b 100644 --- a/code/game/objects/items/weapons/implants/implants/tracking.dm +++ b/code/game/objects/items/weapons/implants/implants/tracking.dm @@ -3,7 +3,7 @@ var/global/list/tracking_implants = list() /obj/item/implant/tracking name = "tracking implant" desc = "Track with this." - origin_tech = "{'materials':1,'biotech':2,'wormholes':2}" + origin_tech = @'{"materials":1,"biotech":2,"wormholes":2}' known = 1 var/id = 1 diff --git a/code/game/objects/items/weapons/implants/implants/translator.dm b/code/game/objects/items/weapons/implants/implants/translator.dm index fb18b37640f..f8b9f30d836 100644 --- a/code/game/objects/items/weapons/implants/implants/translator.dm +++ b/code/game/objects/items/weapons/implants/implants/translator.dm @@ -3,7 +3,7 @@ name = "babel implant" desc = "A small implant with a microphone on it." icon_state = "implant_evil" - origin_tech = "{'materials':1,'biotech':2,'esoteric':3}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":3}' hidden = 1 var/list/languages = list() var/learning_threshold = 20 //need to hear language spoken this many times to learn it @@ -44,6 +44,6 @@ name = "lingophagic node" desc = "A chunk of what could be discolored crystalized brain matter. It seems to pulse occasionally." icon_state = "implant_melted" - origin_tech = "{'biotech':5}" + origin_tech = @'{"biotech":5}' learning_threshold = 10 max_languages = 3 \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/uplink.dm b/code/game/objects/items/weapons/implants/implants/uplink.dm index fa377b563f4..fece5d1fc37 100644 --- a/code/game/objects/items/weapons/implants/implants/uplink.dm +++ b/code/game/objects/items/weapons/implants/implants/uplink.dm @@ -1,7 +1,7 @@ /obj/item/implant/uplink name = "uplink implant" desc = "Summon things." - origin_tech = "{'materials':1,'biotech':2,'esoteric':3}" + origin_tech = @'{"materials":1,"biotech":2,"esoteric":3}' hidden = 1 var/activation_emote diff --git a/code/game/objects/items/weapons/lighter.dm b/code/game/objects/items/weapons/lighter.dm index 6c2119c7549..c6530e4b19a 100644 --- a/code/game/objects/items/weapons/lighter.dm +++ b/code/game/objects/items/weapons/lighter.dm @@ -27,7 +27,7 @@ . = ..() /obj/item/flame/lighter/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fuel, max_fuel) + add_to_reagents(/decl/material/liquid/fuel, max_fuel) /obj/item/flame/lighter/light(mob/user) if(submerged()) @@ -95,15 +95,15 @@ else cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") return - ..() + return ..() /obj/item/flame/lighter/Process() if(!submerged() && reagents.has_reagent(/decl/material/liquid/fuel)) if(ismob(loc) && prob(10) && REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) < 1) to_chat(loc, "\The [src]'s flame flickers.") set_light(0) - addtimer(CALLBACK(src, .atom/proc/set_light, 2), 4) - reagents.remove_reagent(/decl/material/liquid/fuel, 0.05) + addtimer(CALLBACK(src, TYPE_PROC_REF(.atom, set_light), 2), 4) + remove_from_reagents(/decl/material/liquid/fuel, 0.05) else extinguish() return @@ -190,6 +190,8 @@ O.reagents.trans_to_obj(src, max_fuel) to_chat(user, "You refuel [src] from \the [O]") playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) + return TRUE + return ..() /obj/item/flame/lighter/zippo/black color = COLOR_DARK_GRAY diff --git a/code/game/objects/items/weapons/material/folding.dm b/code/game/objects/items/weapons/material/folding.dm index 59ccdcf3414..6d0bc79329c 100644 --- a/code/game/objects/items/weapons/material/folding.dm +++ b/code/game/objects/items/weapons/material/folding.dm @@ -48,7 +48,7 @@ icon_state = "[get_world_inventory_state()]_open" update_held_icon() -/obj/item/knife/folding/get_mob_overlay(mob/user_mob, slot, bodypart) +/obj/item/knife/folding/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE) . = open ? ..() : new /image //Subtypes diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 2986056972e..7f93d1f8e7d 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -3,97 +3,6 @@ material = /decl/material/solid/metal/aluminium material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME -/* - * Utensils - */ -/obj/item/kitchen/utensil - w_class = ITEM_SIZE_TINY - thrown_material_force_multiplier = 1 - origin_tech = "{'materials':1}" - attack_verb = list("attacked", "stabbed", "poked") - sharp = 0 - edge = 0 - material_force_multiplier = 0.1 // 6 when wielded with hardness 60 (steel) - thrown_material_force_multiplier = 0.1 - - var/loaded //Descriptive string for currently loaded food object. - var/scoop_food = 1 - -/obj/item/kitchen/utensil/Initialize() - . = ..() - if (prob(60)) - default_pixel_y = rand(0, 4) - reset_offsets(0) - create_reagents(5) - set_extension(src, /datum/extension/tool/variable, list( - TOOL_RETRACTOR = TOOL_QUALITY_BAD, - TOOL_HEMOSTAT = TOOL_QUALITY_MEDIOCRE - )) - -/obj/item/kitchen/utensil/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(user.get_target_zone() == BP_HEAD || user.get_target_zone() == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() - - if (reagents.total_volume > 0) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - if(M == user) - if(!M.can_eat(loaded)) - return - M.visible_message("\The [user] eats some [loaded] from \the [src].") - else - user.visible_message("\The [user] begins to feed \the [M]!") - if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS))) - return - M.visible_message("\The [user] feeds some [loaded] to \the [M] with \the [src].") - playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) - overlays.Cut() - return - else - to_chat(user, "You don't have anything on \the [src].")//if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK - return - -/obj/item/kitchen/utensil/fork - name = "fork" - desc = "It's a fork. Sure is pointy." - icon_state = "fork" - -/obj/item/kitchen/utensil/fork/plastic - material = /decl/material/solid/organic/plastic - -/obj/item/kitchen/utensil/spoon - name = "spoon" - desc = "It's a spoon. You can see your own upside-down face in it." - icon_state = "spoon" - attack_verb = list("attacked", "poked") - material_force_multiplier = 0.1 //2 when wielded with weight 20 (steel) - -/obj/item/kitchen/utensil/spoon/plastic - material = /decl/material/solid/organic/plastic - -/obj/item/kitchen/utensil/spork - name = "spork" - desc = "It's a spork. It's much like a fork, but much blunter." - icon_state = "spork" - -/obj/item/kitchen/utensil/spork/plastic - material = /decl/material/solid/organic/plastic - -/obj/item/kitchen/utensil/foon - name = "foon" - desc = "It's a foon. It's much like a spoon, but much sharper." - icon_state = "foon" - -/obj/item/kitchen/utensil/foon/plastic - material = /decl/material/solid/organic/plastic - /* * Rolling Pins */ diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 47abfd961c5..5f0b8229b22 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -7,7 +7,7 @@ material_force_multiplier = 0.3 attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") material = /decl/material/solid/metal/steel - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' obj_flags = OBJ_FLAG_CONDUCTIBLE sharp = TRUE edge = TRUE @@ -52,22 +52,7 @@ /obj/item/knife/can_take_wear_damage() return FALSE //Prevents knives from shattering/breaking from usage -//table knives -/obj/item/knife/table - name = "table knife" - desc = "A simple table knife, used to cut up individual portions of food." - icon = 'icons/obj/items/weapon/knives/table.dmi' - material = /decl/material/solid/metal/aluminium - material_force_multiplier = 0.1 - sharp = FALSE - attack_verb = list("prodded") - w_class = ITEM_SIZE_SMALL - material_alteration = MAT_FLAG_ALTERATION_COLOR - -/obj/item/knife/table/plastic - material = /decl/material/solid/organic/plastic - -/obj/item/knife/table/primitive +/obj/item/knife/primitive name = "dueling knife" desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." icon = 'icons/obj/items/weapon/knives/savage.dmi' @@ -75,7 +60,7 @@ material_alteration = MAT_FLAG_ALTERATION_NAME w_class = ITEM_SIZE_NORMAL -/obj/item/knife/table/primitive/get_autopsy_descriptors() +/obj/item/knife/primitive/get_autopsy_descriptors() . = ..() . += "serrated" diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 4f52921c975..9cd72a4b794 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -22,11 +22,12 @@ icon_state = "harpoon_bomb" /obj/item/harpoon/bomb/has_embedded() + ..() if(spent) return audible_message(SPAN_WARNING("\The [src] emits a long, harsh tone!")) playsound(loc, 'sound/weapons/bombwhine.ogg', 100, 0, -3) - addtimer(CALLBACK(src, .proc/harpoon_detonate), 4 SECONDS) //for suspense + addtimer(CALLBACK(src, PROC_REF(harpoon_detonate)), 4 SECONDS) //for suspense /obj/item/harpoon/bomb/proc/harpoon_detonate() audible_message(SPAN_DANGER("\The [src] detonates!")) //an actual sound will be handled by explosion() @@ -57,7 +58,7 @@ w_class = ITEM_SIZE_SMALL sharp = 1 edge = 1 - origin_tech = "{'materials':2,'combat':1}" + origin_tech = @'{"materials":2,"combat":1}' attack_verb = list("chopped", "torn", "cut") material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_NAME @@ -137,7 +138,7 @@ throw_range = 3 w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK - origin_tech = "{'materials':2,'combat':2}" + origin_tech = @'{"materials":2,"combat":2}' attack_verb = list("chopped", "sliced", "cut", "reaped") material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index ece9cec1069..cfad08854a4 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -120,17 +120,16 @@ continue to_chat(M, SPAN_DANGER("You step on \the [src]!")) affecting.take_external_damage(5, 0) - M.updatehealth() if(affecting.can_feel_pain()) SET_STATUS_MAX(M, STAT_WEAK, 3) return //Prevent the shard from being allowed to shatter /obj/item/shard/check_health(var/lastdamage = null, var/lastdamtype = null, var/lastdamflags = 0, var/consumed = FALSE) - if(health > 0 || !can_take_damage()) + if(current_health > 0 || !can_take_damage()) return //If invincible, or if we're not dead yet, skip if(lastdamtype == BURN) - melt() + handle_melting() return physically_destroyed() diff --git a/code/game/objects/items/weapons/material/swiss.dm b/code/game/objects/items/weapons/material/swiss.dm index 25edfbc9d28..0567349c265 100644 --- a/code/game/objects/items/weapons/material/swiss.dm +++ b/code/game/objects/items/weapons/material/swiss.dm @@ -48,9 +48,9 @@ /obj/item/knife/folding/swiss/get_tool_quality(archetype) . = (archetype == get_tool_archetype()) ? ..() : 0 - + /obj/item/knife/folding/swiss/attack_self(mob/user) - var/choice + var/choice if(user.a_intent != I_HELP && ((SWISSKNF_LBLADE in tools) || (SWISSKNF_SBLADE in tools)) && active_tool == SWISSKNF_CLOSED) open = TRUE if(SWISSKNF_LBLADE in tools) @@ -63,7 +63,7 @@ else choice = SWISSKNF_CLOSED open = FALSE - + if(!choice || !CanPhysicallyInteract(user)) return if(choice == SWISSKNF_CLOSED) @@ -76,7 +76,7 @@ playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) else user.visible_message("\The [user] opens the [lowertext(choice)].") - + active_tool = choice update_force() update_icon() @@ -109,7 +109,7 @@ if(active_tool != null) add_overlay(overlay_image(icon, active_tool, flags = RESET_COLOR)) -/obj/item/knife/folding/swiss/get_mob_overlay(mob/user_mob, slot, bodypart) +/obj/item/knife/folding/swiss/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE) . = (active_tool == SWISSKNF_LBLADE || active_tool == SWISSKNF_SBLADE) ? ..() : new /image /obj/item/knife/folding/swiss/resolve_attackby(obj/target, mob/user) diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index f07e0fabd78..7c0e9f3ec6e 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -44,7 +44,7 @@ if(material.reflectiveness >= MAT_VALUE_SHINY && check_state_in_icon("[icon_state]_shine", icon)) add_overlay(mutable_appearance(icon, "[icon_state]_shine"), adjust_brightness(color, 20 + material.reflectiveness)) -/obj/item/sword/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/sword/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) //Do not color scabbarded blades if(overlay && (material_alteration & MAT_FLAG_ALTERATION_COLOR) && (slot == slot_back_str || slot == slot_belt_str)) overlay.color = null diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index c99980c05e8..d967ca33c23 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -68,7 +68,7 @@ if(wielded) . += wielded_parry_bonus -/obj/item/twohanded/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/twohanded/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && wielded && (slot in list(BP_L_HAND, BP_R_HAND))) overlay.icon_state = "[overlay.icon_state]-wielded" . = ..() @@ -76,7 +76,7 @@ /* * Fireaxe */ -/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri +/obj/item/twohanded/fireaxe name = "fire axe" desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" icon = 'icons/obj/items/tool/fireaxe.dmi' @@ -138,7 +138,7 @@ )) -/obj/item/twohanded/spear/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/twohanded/spear/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) if(check_state_in_icon("[overlay.icon_state]-shaft", overlay.icon)) overlay.overlays += get_shaft_overlay("[overlay.icon_state]-shaft") diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 4459f7dce52..1eee7a8b338 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/items/weapon/energy_blade.dmi' icon_state = ICON_STATE_WORLD - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD + atom_flags = ATOM_FLAG_NO_BLOOD item_flags = ITEM_FLAG_IS_WEAPON w_class = ITEM_SIZE_SMALL hitsound = 'sound/weapons/genhit.ogg' @@ -164,7 +164,7 @@ add_overlay(emissive_overlay(icon, "[icon_state]-extended")) z_flags |= ZMM_MANGLE_PLANES -/obj/item/energy_blade/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/energy_blade/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && active && check_state_in_icon("[overlay.icon_state]-extended", overlay.icon)) overlay.overlays += emissive_overlay(overlay.icon, "[overlay.icon_state]-extended") . = ..() diff --git a/code/game/objects/items/weapons/melee/energy_axe.dm b/code/game/objects/items/weapons/melee/energy_axe.dm index 2f048b81822..d52e6c5b699 100644 --- a/code/game/objects/items/weapons/melee/energy_axe.dm +++ b/code/game/objects/items/weapons/melee/energy_axe.dm @@ -10,10 +10,10 @@ throw_speed = 1 throw_range = 5 w_class = ITEM_SIZE_NORMAL - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD + atom_flags = ATOM_FLAG_NO_BLOOD obj_flags = OBJ_FLAG_CONDUCTIBLE item_flags = ITEM_FLAG_IS_WEAPON - origin_tech = "{'magnets':3,'combat':4}" + origin_tech = @'{"magnets":3,"combat":4}' active_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") inactive_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") sharp = 1 diff --git a/code/game/objects/items/weapons/melee/energy_machete.dm b/code/game/objects/items/weapons/melee/energy_machete.dm index 3a12bce1b19..182e9412302 100644 --- a/code/game/objects/items/weapons/melee/energy_machete.dm +++ b/code/game/objects/items/weapons/melee/energy_machete.dm @@ -6,5 +6,5 @@ active_throwforce = 17 active_parry_chance = 30 lighting_color = "#6600cc" - origin_tech = "{'magnets':3}" + origin_tech = @'{"magnets":3}' active_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") diff --git a/code/game/objects/items/weapons/melee/energy_sword.dm b/code/game/objects/items/weapons/melee/energy_sword.dm index ec7fc6b37c3..be1954b7c8f 100644 --- a/code/game/objects/items/weapons/melee/energy_sword.dm +++ b/code/game/objects/items/weapons/melee/energy_sword.dm @@ -2,7 +2,7 @@ name = "energy sword" desc = "May the force be mass times acceleration." icon = 'icons/obj/items/weapon/e_sword.dmi' - origin_tech = "{'magnets':3,'esoteric':4}" + origin_tech = @'{"magnets":3,"esoteric":4}' active_parry_chance = 50 var/blade_color @@ -26,7 +26,7 @@ /obj/item/energy_blade/sword/dropped(var/mob/user) ..() - addtimer(CALLBACK(src, .proc/check_loc), 1) // Swapping hands or passing to another person should not deactivate the sword. + addtimer(CALLBACK(src, PROC_REF(check_loc)), 1) // Swapping hands or passing to another person should not deactivate the sword. /obj/item/energy_blade/sword/proc/check_loc() if(!ismob(loc) && active) @@ -43,7 +43,7 @@ I.color = blade_color add_overlay(I) -/obj/item/energy_blade/sword/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/energy_blade/sword/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && active && check_state_in_icon("[overlay.icon_state]-extended-glow", overlay.icon)) overlay.overlays += emissive_overlay(overlay.icon, "[overlay.icon_state]-extended-glow", color = blade_color) return ..() diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 1ae6cbca3da..3161a6dabf9 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -10,7 +10,7 @@ item_flags = ITEM_FLAG_IS_WEAPON throwforce = 7 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'combat':4}" + origin_tech = @'{"combat":4}' attack_verb = list("flicked", "whipped", "lashed") material = /decl/material/solid/organic/leather @@ -24,7 +24,7 @@ force = 16 //max hit with 60 strength and no equipment. Duel Arena no No forfeit - Snapshot throwforce = 7 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'combat':4}" + origin_tech = @'{"combat":4}' attack_verb = list("flicked", "whipped", "lashed") /obj/item/whip/tail @@ -35,7 +35,7 @@ obj_flags = null force = 19 edge = TRUE - origin_tech = "{'combat':6,'materials':5}" + origin_tech = @'{"combat":6,"materials":5}' material = /decl/material/solid/organic/leather/lizard /obj/item/whip/chainofcommand diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index de020e7c791..cd9df371ddc 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -35,18 +35,17 @@ var/moppable if(isturf(A)) var/turf/T = A - var/obj/effect/fluid/F = locate() in T - if(F && F.reagents.total_volume > 0) - if(F.reagents.total_volume > FLUID_SHALLOW) + if(T?.reagents?.total_volume > 0) + if(T.reagents.total_volume > FLUID_SHALLOW) to_chat(user, SPAN_WARNING("There is too much water here to be mopped up.")) else user.visible_message(SPAN_NOTICE("\The [user] begins to mop up \the [T].")) - if(do_after(user, 40, T) && F && !QDELETED(F)) - if(F.reagents.total_volume > FLUID_SHALLOW) + if(do_after(user, 40, T) && !QDELETED(T)) + if(T.reagents?.total_volume > FLUID_SHALLOW) to_chat(user, SPAN_WARNING("There is too much water here to be mopped up.")) else - qdel(F) to_chat(user, SPAN_NOTICE("You have finished mopping!")) + T.reagents?.clear_reagents() return moppable = TRUE @@ -89,7 +88,7 @@ /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE ) - origin_tech = "{'engineering':4,'materials':4,'powerstorage':3}" + origin_tech = @'{"engineering":4,"materials":4,"powerstorage":3}' var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water. var/refill_rate = 1 //Rate per process() tick mop refills itself @@ -111,7 +110,7 @@ /obj/item/mop/advanced/Process() if(reagents.total_volume < reagents.maximum_volume) - reagents.add_reagent(refill_reagent, refill_rate) + add_to_reagents(refill_reagent, refill_rate) /obj/item/mop/advanced/examine(mob/user) . = ..() diff --git a/code/game/objects/items/weapons/nuclear_cylinder.dm b/code/game/objects/items/weapons/nuclear_cylinder.dm index f6e6f20732f..68ce244b014 100644 --- a/code/game/objects/items/weapons/nuclear_cylinder.dm +++ b/code/game/objects/items/weapons/nuclear_cylinder.dm @@ -10,5 +10,5 @@ throwforce = 15.0 throw_speed = 2 throw_range = 4 - origin_tech = "{'materials':3,'engineering':4}" + origin_tech = @'{"materials":3,"engineering":4}' max_health = ITEM_HEALTH_NO_DAMAGE diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index c727a80bb74..91affbd6502 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -21,12 +21,12 @@ var/global/list/cached_icons = list() var/amt = reagents.maximum_volume if(pigment) amt = round(amt/2) - reagents.add_reagent(pigment, amt) - reagents.add_reagent(/decl/material/liquid/paint, amt) + add_to_reagents(pigment, amt) + add_to_reagents(/decl/material/liquid/paint, amt) /obj/item/chems/glass/paint/on_update_icon() . = ..() - if(reagents.total_volume) + if(reagents?.total_volume) add_overlay(overlay_image('icons/obj/reagentfillings.dmi', "paintbucket", reagents.get_color())) /obj/item/chems/glass/paint/red diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index c4eff754d11..b3126496e29 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -119,7 +119,7 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar return var/mob/_uroller = unroller.resolve() if(_uroller) - events_repository.unregister(/decl/observ/moved, _uroller, src, .proc/user_moved_unrolling) + events_repository.unregister(/decl/observ/moved, _uroller, src, PROC_REF(user_moved_unrolling)) unroller = null start = null slowdown_general = initial(slowdown_general) @@ -135,8 +135,8 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar start = get_turf(src) unroller = weakref(user) slowdown_general = initial(slowdown_general) + 2 //While unrolling you're slightly slower - events_repository.unregister(/decl/observ/moved, user, src, .proc/user_moved_unrolling) - events_repository.register(/decl/observ/moved, user, src, .proc/user_moved_unrolling) + events_repository.unregister(/decl/observ/moved, user, src, PROC_REF(user_moved_unrolling)) + events_repository.register(/decl/observ/moved, user, src, PROC_REF(user_moved_unrolling)) to_chat(user, SPAN_NOTICE("You start unrolling \the [src].")) //Place the first one immediately place_line(user, get_turf(user), user.dir) @@ -364,7 +364,7 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar layer = ABOVE_HUMAN_LAYER pass_flags = PASS_FLAG_MOB pixel_y += 8 - addtimer(CALLBACK(src, .proc/on_unlift), time, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(on_unlift)), time, TIMER_UNIQUE) playsound(src, 'sound/effects/pageturn2.ogg', 50, TRUE) /**Called by timer when the tape line falls back in place. */ @@ -434,7 +434,11 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar //mapper type /obj/structure/tape_barricade/police - icon_state = "tape_h_0" + icon_state = "tape_door_0" + color = COLOR_RED + tape_template = /decl/barricade_tape_template/police + +/obj/structure/tape_barricade/door/police color = COLOR_RED tape_template = /decl/barricade_tape_template/police @@ -453,7 +457,11 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar //mapper type /obj/structure/tape_barricade/engineering - icon_state = "tape_h_0" + icon_state = "stripetape_door_0" + color = COLOR_ORANGE + tape_template = /decl/barricade_tape_template/engineering + +/obj/structure/tape_barricade/door/engineering color = COLOR_ORANGE tape_template = /decl/barricade_tape_template/engineering @@ -479,6 +487,10 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar color = COLOR_BLUE_LIGHT tape_template = /decl/barricade_tape_template/atmos +/obj/structure/tape_barricade/door/atmos + color = COLOR_BLUE_LIGHT + tape_template = /decl/barricade_tape_template/atmos + //////////////////////////////////////////////////////////////////// // Research Tape //////////////////////////////////////////////////////////////////// @@ -497,6 +509,10 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar color = COLOR_WHITE tape_template = /decl/barricade_tape_template/research +/obj/structure/tape_barricade/door/research + color = COLOR_WHITE + tape_template = /decl/barricade_tape_template/research + //////////////////////////////////////////////////////////////////// // Medical Tape //////////////////////////////////////////////////////////////////// @@ -519,6 +535,10 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar color = COLOR_PALE_BLUE_GRAY tape_template = /decl/barricade_tape_template/medical +/obj/structure/tape_barricade/door/medical + color = COLOR_PALE_BLUE_GRAY + tape_template = /decl/barricade_tape_template/medical + //////////////////////////////////////////////////////////////////// // Bureacratic Tape //////////////////////////////////////////////////////////////////// @@ -540,6 +560,10 @@ var/global/list/image/hazard_overlays //Cached hazard floor overlays for the bar color = COLOR_RED tape_template = /decl/barricade_tape_template/bureaucracy +/obj/structure/tape_barricade/door/bureaucracy + color = COLOR_RED + tape_template = /decl/barricade_tape_template/bureaucracy + #undef MAX_BARRICADE_TAPE_LENGTH #undef TAPE_BARRICADE_IS_CORNER_NEIGHBORS #undef TAPE_BARRICADE_V_NEIGHBORS diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 7f7619b4b7a..04dba8b0567 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -8,7 +8,7 @@ item_state = "paper" throw_speed = 4 throw_range = 20 - origin_tech = "{'wormholes':4}" + origin_tech = @'{"wormholes":4}' material = /decl/material/solid/organic/paper /obj/item/teleportation_scroll/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 8318f27e9e0..3342015c383 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -61,7 +61,7 @@ throw_speed = 1 throw_range = 4 w_class = ITEM_SIZE_HUGE - origin_tech = "{'materials':2}" + origin_tech = @'{"materials":2}' material = /decl/material/solid/fiberglass matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) attack_verb = list("shoved", "bashed") @@ -122,7 +122,7 @@ throw_speed = 10 throw_range = 20 w_class = ITEM_SIZE_HUGE - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/organic/wood = MATTER_AMOUNT_REINFORCEMENT) attack_verb = list("shoved", "bashed") @@ -151,7 +151,7 @@ throw_speed = 1 throw_range = 4 w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':4,'magnets':3,'esoteric':4}" + origin_tech = @'{"materials":4,"magnets":3,"esoteric":4}' attack_verb = list("shoved", "bashed") material = /decl/material/solid/metal/titanium matter = list( diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index 6ea54072f55..8727b01e6e8 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -43,7 +43,7 @@ update_icon() /obj/item/soap/proc/wet() - reagents.add_reagent(/decl/material/liquid/cleaner, SOAP_CLEANER_ON_WET) + add_to_reagents(/decl/material/liquid/cleaner, SOAP_CLEANER_ON_WET) /obj/item/soap/Crossed(atom/movable/AM) if(!isliving(AM)) @@ -60,7 +60,7 @@ to_chat(user, SPAN_NOTICE("You need to take that [target.name] off before cleaning it.")) else if(istype(target,/obj/effect/decal/cleanable/blood)) to_chat(user, SPAN_NOTICE("You scrub \the [target.name] out.")) - target.clean_blood() //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. + target.clean() //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. cleaned = TRUE else if(istype(target,/obj/effect/decal/cleanable)) to_chat(user, SPAN_NOTICE("You scrub \the [target.name] out.")) @@ -80,7 +80,7 @@ wet() else to_chat(user, SPAN_NOTICE("You clean \the [target.name].")) - target.clean_blood() //Clean bloodied atoms. Blood decals themselves need to be handled above. + target.clean() //Clean bloodied atoms. Blood decals themselves need to be handled above. cleaned = TRUE if(cleaned) @@ -98,7 +98,7 @@ user.visible_message(SPAN_NOTICE("\The [user] cleans \the [target].")) if(reagents) reagents.trans_to(target, reagents.total_volume / 8) - target.clean_blood() + target.clean() user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam return TRUE return ..() diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 450c8e243c0..7cad1db67d4 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -41,7 +41,7 @@ /obj/item/storage/backpack/holding name = "bag of holding" desc = "A backpack that opens into a localized pocket of Blue Space." - origin_tech = "{'wormholes':4}" + origin_tech = @'{"wormholes":4}' icon = 'icons/obj/items/storage/backpack/backpack_holding.dmi' max_w_class = ITEM_SIZE_NORMAL max_storage_space = 56 @@ -351,7 +351,7 @@ /obj/item/crowbar ) -/obj/item/storage/backpack/satchel/flat/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/item/storage/backpack/satchel/flat/handle_mouse_drop(atom/over, mob/user, params) var/turf/T = get_turf(src) if(hides_under_flooring() && isturf(T) && !T.is_plating()) return TRUE @@ -385,7 +385,7 @@ I.appearance_flags |= RESET_COLOR add_overlay(I) -/obj/item/storage/backpack/ert/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/storage/backpack/ert/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && slot == slot_back_str && marking_state) var/image/I = image(overlay.icon, "[overlay.icon_state]-[marking_state]") I.color = marking_colour diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index b7e339444cc..6bff2d0b2db 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -75,7 +75,7 @@ /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE ) - origin_tech = "{'exoticmatter':5,'materials':6}" + origin_tech = @'{"exoticmatter":5,"materials":6}' /obj/item/storage/bag/trash/advanced/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/advanced)) @@ -88,8 +88,8 @@ // Plastic Bag // ----------------------------- -/obj/item/storage/bag/plasticbag - name = "plastic bag" +/obj/item/storage/bag/flimsy + name = "bag" desc = "It's a very flimsy, very noisy alternative to a bag." icon = 'icons/obj/items/storage/plasticbag.dmi' icon_state = "plasticbag" @@ -100,6 +100,9 @@ max_storage_space = DEFAULT_BOX_STORAGE can_hold = list() // any + material = /decl/material/solid/organic/plastic + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + // ----------------------------- // Cash Bag // ----------------------------- diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index a98fba13c84..a891d6b5b4e 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -39,11 +39,11 @@ add_overlay(cur_overlays) update_clothing_icon() -/obj/item/storage/belt/get_mob_overlay(mob/user_mob, slot, bodypart) +/obj/item/storage/belt/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE) var/image/ret = ..() if(ret && slot == slot_belt_str && length(contents)) for(var/obj/item/I in contents) - var/image/new_overlay = I.get_mob_overlay(user_mob, slot, bodypart) + var/image/new_overlay = I.get_mob_overlay(user_mob, slot, bodypart, use_fallback_if_icon_missing, TRUE) if(new_overlay) ret.overlays += new_overlay return ret @@ -167,7 +167,7 @@ /obj/item/chems/pill, /obj/item/chems/syringe, /obj/item/flame/lighter/zippo, - /obj/item/storage/fancy/cigarettes, + /obj/item/storage/box/fancy/cigarettes, /obj/item/storage/pill_bottle, /obj/item/stack/medical, /obj/item/flashlight/pen, diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 240e5817be3..18d5a91d285 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -29,7 +29,7 @@ use_sound = 'sound/effects/storage/box.ogg' material = /decl/material/solid/organic/cardboard obj_flags = OBJ_FLAG_HOLLOW - var/foldable = /obj/item/stack/material/cardstock // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard + var/foldable = /obj/item/stack/material/cardstock /obj/item/storage/box/large name = "large box" @@ -56,11 +56,10 @@ /obj/item/storage/box/attack_self(mob/user) . = ..() if(. || length(contents) || !ispath(foldable) || !istype(material)) - return + return TRUE var/sheet_amount = FLOOR(LAZYACCESS(matter, material.type) / SHEET_MATERIAL_AMOUNT) if(sheet_amount <= 0 || !user.try_unequip(src)) - return - + return TRUE to_chat(user, SPAN_NOTICE("You fold \the [src] flat.")) if(ispath(foldable, /obj/item/stack)) new foldable(get_turf(src), sheet_amount, material.type) @@ -82,7 +81,7 @@ return list( /obj/item/clothing/mask/breath, /obj/item/tank/emergency/oxygen, - /obj/item/chems/hypospray/autoinjector, + /obj/item/chems/hypospray/autoinjector/stabilizer, /obj/item/stack/medical/bruise_pack, /obj/item/flashlight/flare/glowstick, /obj/item/chems/food/candy/proteinbar, @@ -99,7 +98,7 @@ return list( /obj/item/clothing/mask/breath/scba, /obj/item/tank/emergency/oxygen/engi, - /obj/item/chems/hypospray/autoinjector, + /obj/item/chems/hypospray/autoinjector/stabilizer, /obj/item/chems/hypospray/autoinjector/antirad, /obj/item/stack/medical/bruise_pack, /obj/item/flashlight/flare/glowstick, @@ -450,7 +449,7 @@ icon_state = "syringe" /obj/item/storage/box/autoinjectors/WillContain() - return list(/obj/item/chems/hypospray/autoinjector = 7) + return list(/obj/item/chems/hypospray/autoinjector/stabilizer = 7) /obj/item/storage/box/lights name = "box of replacement bulbs" @@ -523,6 +522,13 @@ /obj/item/storage/box/greenglowsticks/WillContain() return list(/obj/item/flashlight/flare/glowstick = 6) +/obj/item/storage/box/flares + name = "box of flares" + icon_state = "box" + +/obj/item/storage/box/flares/WillContain() + return list(/obj/item/flashlight/flare = 6) + /obj/item/storage/box/freezer name = "portable freezer" desc = "This nifty shock-resistant device will keep your 'groceries' nice and non-spoiled." @@ -546,11 +552,11 @@ icon_state = "checkers" max_storage_space = 24 foldable = null - can_hold = list(/obj/item/chems/food/checker) + can_hold = list(/obj/item/checker) /obj/item/storage/box/checkers/WillContain() return list( - /obj/item/chems/food/checker = 12, - /obj/item/chems/food/checker/red = 12 + /obj/item/checker = 12, + /obj/item/checker/red = 12 ) /obj/item/storage/box/checkers/chess @@ -559,12 +565,12 @@ icon_state = "chess_b" /obj/item/storage/box/checkers/chess/WillContain() return list( - /obj/item/chems/food/checker/pawn = 8, - /obj/item/chems/food/checker/knight = 2, - /obj/item/chems/food/checker/bishop = 2, - /obj/item/chems/food/checker/rook = 2, - /obj/item/chems/food/checker/queen = 1, - /obj/item/chems/food/checker/king = 1 + /obj/item/checker/pawn = 8, + /obj/item/checker/knight = 2, + /obj/item/checker/bishop = 2, + /obj/item/checker/rook = 2, + /obj/item/checker/queen = 1, + /obj/item/checker/king = 1 ) /obj/item/storage/box/checkers/chess/red @@ -573,18 +579,19 @@ icon_state = "chess_r" /obj/item/storage/box/checkers/chess/red/WillContain() return list( - /obj/item/chems/food/checker/pawn/red = 8, - /obj/item/chems/food/checker/knight/red = 2, - /obj/item/chems/food/checker/bishop/red = 2, - /obj/item/chems/food/checker/rook/red = 2, - /obj/item/chems/food/checker/queen/red = 1, - /obj/item/chems/food/checker/king/red = 1 + /obj/item/checker/pawn/red = 8, + /obj/item/checker/knight/red = 2, + /obj/item/checker/bishop/red = 2, + /obj/item/checker/rook/red = 2, + /obj/item/checker/queen/red = 1, + /obj/item/checker/king/red = 1 ) /obj/item/storage/box/headset name = "box of spare headsets" desc = "A box full of headsets." + icon_state = "headsets" /obj/item/storage/box/headset/WillContain() return list(/obj/item/radio/headset = 7) @@ -777,3 +784,57 @@ icon_state = "keyboard" /obj/item/storage/box/parts_pack/keyboard/WillContain() return list(/obj/item/stock_parts/keyboard = 7) + +/obj/item/storage/box/pens + name = "box of spare pens" + desc = "A box full of pens." + icon_state = "pens" +/obj/item/storage/box/pens/WillContain() + return list( + /obj/item/pen = 3, + /obj/item/pen/blue = 2, + /obj/item/pen/red = 2, + /obj/item/pen/green = 2, + ) + +/obj/item/storage/box/taperolls/police + name = "box of spare police taperolls" + desc = "A box full of police barricade tape rolls." +/obj/item/storage/box/taperolls/police/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/police/P = /obj/item/stack/tape_roll/barricade_tape/police + return list(/obj/item/stack/tape_roll/barricade_tape/police = BASE_STORAGE_CAPACITY(initial(P.w_class))) + +/obj/item/storage/box/taperolls/engineering + name = "box of spare police taperolls" + desc = "A box full of police barricade tape rolls." +/obj/item/storage/box/taperolls/engineering/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/engineering/P = /obj/item/stack/tape_roll/barricade_tape/engineering + return list(/obj/item/stack/tape_roll/barricade_tape/engineering = BASE_STORAGE_CAPACITY(initial(P.w_class))) + +/obj/item/storage/box/taperolls/atmos + name = "box of spare atmos taperolls" + desc = "A box full of atmos barricade tape rolls." +/obj/item/storage/box/taperolls/atmos/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/atmos/P = /obj/item/stack/tape_roll/barricade_tape/atmos + return list(/obj/item/stack/tape_roll/barricade_tape/atmos = BASE_STORAGE_CAPACITY(initial(P.w_class))) + +/obj/item/storage/box/taperolls/research + name = "box of spare research taperolls" + desc = "A box full of research barricade tape rolls." +/obj/item/storage/box/taperolls/research/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/research/P = /obj/item/stack/tape_roll/barricade_tape/research + return list(/obj/item/stack/tape_roll/barricade_tape/research = BASE_STORAGE_CAPACITY(initial(P.w_class))) + +/obj/item/storage/box/taperolls/medical + name = "box of spare medical taperolls" + desc = "A box full of medical barricade tape rolls." +/obj/item/storage/box/taperolls/medical/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/medical/P = /obj/item/stack/tape_roll/barricade_tape/medical + return list(/obj/item/stack/tape_roll/barricade_tape/medical = BASE_STORAGE_CAPACITY(initial(P.w_class))) + +/obj/item/storage/box/taperolls/bureaucracy + name = "box of spare bureaucracy taperolls" + desc = "A box full of bureaucracy barricade tape rolls." +/obj/item/storage/box/taperolls/bureaucracy/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/bureaucracy/P = /obj/item/stack/tape_roll/barricade_tape/bureaucracy + return list(/obj/item/stack/tape_roll/barricade_tape/bureaucracy = BASE_STORAGE_CAPACITY(initial(P.w_class))) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm deleted file mode 100644 index 9de592c23b1..00000000000 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ /dev/null @@ -1,453 +0,0 @@ -/* - * The 'fancy' path is for objects like candle boxes that show how many items are in the storage item on the sprite itself - * .. Sorry for the shitty path name, I couldnt think of a better one. - * - * - * Contains: - * Egg Box - * Crayon Box - * Cigarette Box - */ - -/obj/item/storage/fancy - item_state = "syringe_kit" //placeholder, many of these don't have inhands - opened = 0 //if an item has been removed from this container - obj_flags = OBJ_FLAG_HOLLOW - material = /decl/material/solid/organic/cardboard - var/obj/item/key_type //path of the key item that this "fancy" container is meant to store - -/obj/item/storage/fancy/on_update_icon() - . = ..() - if(!opened) - icon_state = initial(icon_state) - else - var/key_count = count_by_type(contents, key_type) - icon_state = "[initial(icon_state)][key_count]" - -/obj/item/storage/fancy/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - - var/key_name = initial(key_type.name) - if(!contents.len) - to_chat(user, "There are no [key_name]s left in the box.") - else - var/key_count = count_by_type(contents, key_type) - to_chat(user, "There [key_count == 1? "is" : "are"] [key_count] [key_name]\s in the box.") - -/* - * Egg Box - */ - -/obj/item/storage/fancy/egg_box - icon = 'icons/obj/food.dmi' - icon_state = "eggbox" - name = "egg box" - storage_slots = 12 - max_w_class = ITEM_SIZE_SMALL - w_class = ITEM_SIZE_NORMAL - key_type = /obj/item/chems/food/egg - can_hold = list( - /obj/item/chems/food/egg, - /obj/item/chems/food/boiledegg - ) - -/obj/item/storage/fancy/egg_box/WillContain() - return list(/obj/item/chems/food/egg = 12) - -/obj/item/storage/fancy/egg_box/empty/WillContain() - return - -/* - * Cracker Packet - */ - -/obj/item/storage/fancy/crackers - name = "\improper Getmore Crackers" - icon = 'icons/obj/food.dmi' - icon_state = "crackerbag" - storage_slots = 6 - max_w_class = ITEM_SIZE_TINY - w_class = ITEM_SIZE_SMALL - key_type = /obj/item/chems/food/cracker - can_hold = list(/obj/item/chems/food/cracker) - -/obj/item/storage/fancy/crackers/WillContain() - return list(/obj/item/chems/food/cracker = 6) - -/* - * Crayon Box - */ - -/obj/item/storage/fancy/crayons - name = "box of crayons" - desc = "A box of crayons for all your rune drawing needs." - icon = 'icons/obj/items/crayons.dmi' - icon_state = "crayonbox" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 - key_type = /obj/item/pen/crayon - -/obj/item/storage/fancy/crayons/WillContain() - return list( - /obj/item/pen/crayon/red, - /obj/item/pen/crayon/orange, - /obj/item/pen/crayon/yellow, - /obj/item/pen/crayon/green, - /obj/item/pen/crayon/blue, - /obj/item/pen/crayon/purple, - ) - - -/obj/item/storage/fancy/crayons/on_update_icon() - . = ..() - //#FIXME: This can't handle all crayons types and colors. - var/list/cur_overlays - for(var/obj/item/pen/crayon/crayon in contents) - LAZYADD(cur_overlays, overlay_image(icon, crayon.stroke_colour_name, flags = RESET_COLOR)) - if(LAZYLEN(cur_overlays)) - add_overlay(cur_overlays) - -//////////// -//CIG PACK// -//////////// -/obj/item/storage/fancy/cigarettes - name = "pack of Trans-Stellar Duty-frees" - desc = "A ubiquitous brand of cigarettes, found in the facilities of every major spacefaring corporation in the universe. As mild and flavorless as it gets." - icon = 'icons/obj/items/storage/cigpack/cigpack.dmi' - icon_state = "cigpacket" - item_state = "cigpacket" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 - throwforce = 2 - slot_flags = SLOT_LOWER_BODY - key_type = /obj/item/clothing/mask/smokable/cigarette - atom_flags = ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_TEMP_CHANGE - -/obj/item/storage/fancy/cigarettes/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette = 6) - -/obj/item/storage/fancy/cigarettes/Initialize(ml, material_key) - . = ..() - initialize_reagents() - -/obj/item/storage/fancy/cigarettes/initialize_reagents(populate) - create_reagents(5 * max_storage_space)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one - . = ..() - -/obj/item/storage/fancy/cigarettes/remove_from_storage(obj/item/W, atom/new_location) - // Don't try to transfer reagents to lighters - if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) - var/obj/item/clothing/mask/smokable/cigarette/C = W - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() - -/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!ismob(M)) - return - - if(M == user && user.get_target_zone() == BP_MOUTH && contents.len > 0 && !user.get_equipped_item(slot_wear_mask_str)) - // Find ourselves a cig. Note that we could be full of lighters. - var/obj/item/clothing/mask/smokable/cigarette/cig = null - for(var/obj/item/clothing/mask/smokable/cigarette/C in contents) - cig = C - break - - if(cig == null) - to_chat(user, "Looks like the packet is out of cigarettes.") - return - - // Instead of running equip_to_slot_if_possible() we check here first, - // to avoid dousing cig with reagents if we're not going to equip it - if(!cig.mob_can_equip(user, slot_wear_mask_str)) - return - - // We call remove_from_storage first to manage the reagent transfer and - // UI updates. - remove_from_storage(cig, null) - user.equip_to_slot(cig, slot_wear_mask_str) - - reagents.maximum_volume = 5 * contents.len - to_chat(user, "You take a cigarette out of the pack.") - update_icon() - else - ..() - -/obj/item/storage/fancy/cigarettes/dromedaryco - name = "pack of Dromedary Co. cigarettes" - desc = "A packet of six imported Dromedary Company cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"." - icon = 'icons/obj/items/storage/cigpack/dromedary.dmi' - icon_state = "Dpacket" - -/obj/item/storage/fancy/cigarettes/dromedaryco/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/dromedaryco = 6) - -/obj/item/storage/fancy/cigarettes/killthroat - name = "pack of Acme Co. cigarettes" - desc = "A packet of six Acme Company cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors." - icon = 'icons/obj/items/storage/cigpack/acme.dmi' - icon_state = "Bpacket" - -/obj/item/storage/fancy/cigarettes/killthroat/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/killthroat = 6) - -/obj/item/storage/fancy/cigarettes/killthroat/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fuel, (max_storage_space * 4)) - -// New exciting ways to kill your lungs! - Earthcrusher // - -/obj/item/storage/fancy/cigarettes/luckystars - name = "pack of Lucky Stars" - desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head." - icon = 'icons/obj/items/storage/cigpack/lucky_stars.dmi' - icon_state = "LSpacket" - item_state = "Dpacket" //I actually don't mind cig packs not showing up in the hand. whotf doesn't just keep them in their pockets/coats // - -/obj/item/storage/fancy/cigarettes/luckystars/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/luckystars = 6) - -/obj/item/storage/fancy/cigarettes/jerichos - name = "pack of Jerichos" - desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs." - icon = 'icons/obj/items/storage/cigpack/jerichos.dmi' - icon_state = "Jpacket" - item_state = "Dpacket" - -/obj/item/storage/fancy/cigarettes/jerichos/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/jerichos = 6) - -/obj/item/storage/fancy/cigarettes/menthols - name = "pack of Temperamento Menthols" - desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!" - icon = 'icons/obj/items/storage/cigpack/menthol.dmi' - icon_state = "TMpacket" - item_state = "Dpacket" - key_type = /obj/item/clothing/mask/smokable/cigarette/menthol - -/obj/item/storage/fancy/cigarettes/menthols/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/menthol = 6) - -/obj/item/storage/fancy/cigarettes/carcinomas - name = "pack of Carcinoma Angels" - desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too. Yes, actual cats." - icon = 'icons/obj/items/storage/cigpack/carcinoma.dmi' - icon_state = "CApacket" - item_state = "Dpacket" - -/obj/item/storage/fancy/cigarettes/carcinomas/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/carcinomas = 6) - -/obj/item/storage/fancy/cigarettes/professionals - name = "pack of Professional 120s" - desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They taste disgusting, too." - icon_state = "P100packet" - icon = 'icons/obj/items/storage/cigpack/professionals.dmi' - item_state = "Dpacket" - -/obj/item/storage/fancy/cigarettes/professionals/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/professionals = 6) - -//cigarellos -/obj/item/storage/fancy/cigarettes/cigarello - name = "pack of Trident Original cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years." - icon = 'icons/obj/items/storage/cigpack/cigarillo.dmi' - icon_state = "CRpacket" - item_state = "Dpacket" - max_storage_space = 5 - key_type = /obj/item/clothing/mask/smokable/cigarette/trident - -/obj/item/storage/fancy/cigarettes/cigarello/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/trident = 5) - -/obj/item/storage/fancy/cigarettes/cigarello/variety - name = "pack of Trident Fruit cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. This is a fruit variety pack." - icon = 'icons/obj/items/storage/cigpack/cigarillo_fruity.dmi' - icon_state = "CRFpacket" - -/obj/item/storage/fancy/cigarettes/cigarello/variety/WillContain() - return list( - /obj/item/clothing/mask/smokable/cigarette/trident/watermelon, - /obj/item/clothing/mask/smokable/cigarette/trident/orange, - /obj/item/clothing/mask/smokable/cigarette/trident/grape, - /obj/item/clothing/mask/smokable/cigarette/trident/cherry, - /obj/item/clothing/mask/smokable/cigarette/trident/berry - ) - -/obj/item/storage/fancy/cigarettes/cigarello/mint - name = "pack of Trident Menthol cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. These are the menthol variety." - icon = 'icons/obj/items/storage/cigpack/cigarillo_menthol.dmi' - icon_state = "CRMpacket" - -/obj/item/storage/fancy/cigarettes/cigarello/mint/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/trident/mint = 5) -/* - * Cigar -*/ -/obj/item/storage/fancy/cigar - name = "cigar case" - desc = "A case for holding your cigars when you are not smoking them." - icon_state = "cigarcase" - item_state = "cigpacket" - icon = 'icons/obj/items/storage/cigarcase.dmi' - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - throwforce = 2 - slot_flags = SLOT_LOWER_BODY - storage_slots = 7 - material = /decl/material/solid/organic/wood/mahogany - key_type = /obj/item/clothing/mask/smokable/cigarette/cigar - atom_flags = ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_NO_TEMP_CHANGE - -/obj/item/storage/fancy/cigar/Initialize(ml, material_key) - . = ..() - initialize_reagents() - -/obj/item/storage/fancy/cigar/initialize_reagents(populate) - create_reagents(10 * storage_slots) - . = ..() - -/obj/item/storage/fancy/cigar/WillContain() - return list(/obj/item/clothing/mask/smokable/cigarette/cigar = 6) - -/obj/item/storage/fancy/cigar/remove_from_storage(obj/item/W, atom/new_location) - var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W - if(!istype(C)) - return - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - return ..() - -/* - * Vial Box - */ -/obj/item/storage/fancy/vials - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox" - name = "vial storage box" - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_TINY - storage_slots = 12 - material = /decl/material/solid/organic/plastic - key_type = /obj/item/chems/glass/beaker/vial - -/obj/item/storage/fancy/vials/WillContain() - return list(/obj/item/chems/glass/beaker/vial = 12) - -/obj/item/storage/fancy/vials/on_update_icon() - . = ..() - var/key_count = count_by_type(contents, key_type) - icon_state = "[initial(icon_state)][FLOOR(key_count/2)]" - -/* - * Not actually a "fancy" storage... - */ -/obj/item/storage/lockbox/vials - name = "secure vial storage box" - desc = "A locked box for keeping things away from children." - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox0" - item_state = "syringe_kit" - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_TINY - max_storage_space = null - storage_slots = 12 - req_access = list(access_virology) - material = /decl/material/solid/metal/stainlesssteel - -/obj/item/storage/lockbox/vials/Initialize() - . = ..() - update_icon() - -/obj/item/storage/lockbox/vials/on_update_icon() - . = ..() - var/total_contents = count_by_type(contents, /obj/item/chems/glass/beaker/vial) - icon_state = "vialbox[FLOOR(total_contents/2)]" - if (!broken) - add_overlay("led[locked]") - if(locked) - add_overlay("cover") - else - add_overlay("ledb") - -/obj/item/storage/lockbox/vials/attackby(obj/item/W, mob/user) - . = ..() - update_icon() - -//////////////////////////////////////////////////////////////////////////////// -// Syndie Cigs -//////////////////////////////////////////////////////////////////////////////// - -// Flash Powder Pack -/obj/item/storage/fancy/cigarettes/flash_powder - name = "pack of flash powder laced Trans-Stellar Duty-frees" - -/obj/item/storage/fancy/cigarettes/flash_powder/Initialize(ml, material_key) - . = ..() - //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names - var/obj/item/storage/fancy/cigarettes/C = /obj/item/storage/fancy/cigarettes - if(name == initial(name)) - SetName(initial(C.name)) - if(desc == initial(desc)) - desc = "[initial(desc)] 'F' has been scribbled on it." - -/obj/item/storage/fancy/cigarettes/flash_powder/populate_reagents() - reagents.add_reagent(/decl/material/solid/metal/aluminium, max_storage_space) - reagents.add_reagent(/decl/material/solid/potassium, max_storage_space) - reagents.add_reagent(/decl/material/solid/sulfur, max_storage_space) - -//Chemsmoke Pack -/obj/item/storage/fancy/cigarettes/chemsmoke - name = "pack of smoke powder laced Trans-Stellar Duty-frees" - -/obj/item/storage/fancy/cigarettes/chemsmoke/Initialize(ml, material_key) - . = ..() - //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names - var/obj/item/storage/fancy/cigarettes/C = /obj/item/storage/fancy/cigarettes - if(name == initial(name)) - SetName(initial(C.name)) - if(desc == initial(desc)) - desc = "[initial(desc)] 'S' has been scribbled on it." - -/obj/item/storage/fancy/cigarettes/chemsmoke/populate_reagents() - reagents.add_reagent(/decl/material/solid/potassium, max_storage_space) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, max_storage_space) - reagents.add_reagent(/decl/material/solid/phosphorus, max_storage_space) - -//Mindbreak Pack (now called /decl/chemical_reaction/hallucinogenics) -/obj/item/storage/fancy/cigarettes/mindbreak - name = "pack of mindbreak toxin laced Trans-Stellar Duty-frees" //#TODO: maybe fix the lore for that? - -/obj/item/storage/fancy/cigarettes/mindbreak/Initialize(ml, material_key) - . = ..() - //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names - var/obj/item/storage/fancy/cigarettes/C = /obj/item/storage/fancy/cigarettes - if(name == initial(name)) - SetName(initial(C.name)) - if(desc == initial(desc)) - desc = "[initial(desc)] 'MB' has been scribbled on it." //#TODO: maybe fix the lore for that? - -/obj/item/storage/fancy/cigarettes/mindbreak/populate_reagents() - reagents.add_reagent(/decl/material/solid/silicon, max_storage_space) - reagents.add_reagent(/decl/material/liquid/fuel/hydrazine, max_storage_space) - reagents.add_reagent(/decl/material/liquid/antitoxins, max_storage_space) - -//Tricord pack (now called /decl/material/liquid/regenerator) -/obj/item/storage/fancy/cigarettes/tricord - name = "pack of tricordazine laced Trans-Stellar Duty-frees" //#TODO: maybe fix the lore for that? - -/obj/item/storage/fancy/cigarettes/tricord/Initialize(ml, material_key) - . = ..() - //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names - var/obj/item/storage/fancy/cigarettes/C = /obj/item/storage/fancy/cigarettes - if(name == initial(name)) - SetName(initial(C.name)) - if(desc == initial(desc)) - desc = "[initial(desc)] 'T' has been scribbled on it." //#TODO: maybe fix the lore for that? - -/obj/item/storage/fancy/cigarettes/tricord/populate_reagents() - reagents.add_reagent(/decl/material/liquid/regenerator, (4 * max_storage_space)) diff --git a/code/game/objects/items/weapons/storage/fancy/_fancy.dm b/code/game/objects/items/weapons/storage/fancy/_fancy.dm new file mode 100644 index 00000000000..5a9188f22d5 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/_fancy.dm @@ -0,0 +1,48 @@ +/* + * The 'fancy' path is for objects like candle boxes that show how many items are in the storage item on the sprite itself + */ + +/obj/item/storage/box/fancy + abstract_type = /obj/item/storage/box/fancy + /// A string modifier used to generate overlays for contents. + var/use_single_icon_overlay_state + /// The root type of the key item that this "fancy" container is meant to store. + var/obj/item/key_type + +/obj/item/storage/box/fancy/proc/adjust_contents_overlay(var/overlay_index, var/image/overlay) + return overlay + +/obj/item/storage/box/fancy/proc/update_icon_state() + icon_state = initial(icon_state) + if(key_type && opened) + icon_state = "[icon_state][count_by_type(contents, key_type)]" + +/obj/item/storage/box/fancy/proc/add_contents_overlays() + . = FALSE + if(!use_single_icon_overlay_state) + return + var/offset_index = 0 + for(var/obj/item/thing in contents) + var/thing_state = "[thing.icon_state]_[use_single_icon_overlay_state]" + if(!check_state_in_icon(thing_state, thing.icon)) + continue + . = TRUE + var/image/thing_overlay = adjust_contents_overlay(offset_index, image(thing.icon, thing_state)) + if(thing.color) + thing_overlay.color = thing.color + thing_overlay.appearance_flags |= RESET_COLOR + add_overlay(thing_overlay) + offset_index++ + +/obj/item/storage/box/fancy/on_update_icon() + . = ..() + update_icon_state() + if(add_contents_overlays()) + compile_overlays() + +/obj/item/storage/box/fancy/examine(mob/user, distance) + . = ..() + if(distance > 1 || !key_type) + return + var/key_count = count_by_type(contents, key_type) + to_chat(user, "There [key_count == 1? "is" : "are"] [key_count] [initial(key_type.name)]\s in the box.") diff --git a/code/game/objects/items/weapons/storage/fancy/cigar.dm b/code/game/objects/items/weapons/storage/fancy/cigar.dm new file mode 100644 index 00000000000..2dde3c78458 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/cigar.dm @@ -0,0 +1,35 @@ +/* + * Cigar +*/ +/obj/item/storage/box/fancy/cigar + name = "cigar case" + desc = "A case for holding your cigars when you are not smoking them." + icon_state = "cigarcase" + item_state = "cigpacket" + icon = 'icons/obj/items/storage/cigarcase.dmi' + w_class = ITEM_SIZE_SMALL + max_w_class = ITEM_SIZE_TINY + throwforce = 2 + slot_flags = SLOT_LOWER_BODY + storage_slots = 7 + material = /decl/material/solid/organic/wood/mahogany + key_type = /obj/item/clothing/mask/smokable/cigarette/cigar + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE + +/obj/item/storage/box/fancy/cigar/Initialize(ml, material_key) + . = ..() + initialize_reagents() + +/obj/item/storage/box/fancy/cigar/initialize_reagents(populate) + create_reagents(10 * storage_slots) + . = ..() + +/obj/item/storage/box/fancy/cigar/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/cigar = 6) + +/obj/item/storage/box/fancy/cigar/remove_from_storage(obj/item/W, atom/new_location) + var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W + if(!istype(C)) + return + reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) + return ..() diff --git a/code/game/objects/items/weapons/storage/fancy/cigarettes.dm b/code/game/objects/items/weapons/storage/fancy/cigarettes.dm new file mode 100644 index 00000000000..220e8f3f5ee --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/cigarettes.dm @@ -0,0 +1,250 @@ +//////////// +//CIG PACK// +//////////// +/obj/item/storage/box/fancy/cigarettes + name = "pack of Trans-Stellar Duty-frees" + desc = "A ubiquitous brand of cigarettes, found in the facilities of every major spacefaring corporation in the universe. As mild and flavorless as it gets." + icon = 'icons/obj/items/storage/cigpack/cigpack.dmi' + icon_state = "cigpacket" + item_state = "cigpacket" + w_class = ITEM_SIZE_SMALL + max_w_class = ITEM_SIZE_TINY + max_storage_space = 6 + throwforce = 2 + slot_flags = SLOT_LOWER_BODY + key_type = /obj/item/clothing/mask/smokable/cigarette + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE | ATOM_FLAG_OPEN_CONTAINER + +/obj/item/storage/box/fancy/cigarettes/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette = 6) + +/obj/item/storage/box/fancy/cigarettes/Initialize(ml, material_key) + . = ..() + initialize_reagents() + +/obj/item/storage/box/fancy/cigarettes/initialize_reagents(populate) + create_reagents(5 * max_storage_space)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one + . = ..() + +/obj/item/storage/box/fancy/cigarettes/remove_from_storage(obj/item/W, atom/new_location) + // Don't try to transfer reagents to lighters + if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) + var/obj/item/clothing/mask/smokable/cigarette/C = W + reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) + ..() + +/obj/item/storage/box/fancy/cigarettes/attack(mob/living/carbon/M, mob/living/carbon/user) + if(!ismob(M)) + return + + if(M == user && user.get_target_zone() == BP_MOUTH && contents.len > 0 && !user.get_equipped_item(slot_wear_mask_str)) + // Find ourselves a cig. Note that we could be full of lighters. + var/obj/item/clothing/mask/smokable/cigarette/cig = null + for(var/obj/item/clothing/mask/smokable/cigarette/C in contents) + cig = C + break + + if(cig == null) + to_chat(user, "Looks like the packet is out of cigarettes.") + return + + // Instead of running equip_to_slot_if_possible() we check here first, + // to avoid dousing cig with reagents if we're not going to equip it + if(!cig.mob_can_equip(user, slot_wear_mask_str)) + return + + // We call remove_from_storage first to manage the reagent transfer and + // UI updates. + remove_from_storage(cig, null) + user.equip_to_slot(cig, slot_wear_mask_str) + + reagents.maximum_volume = 5 * contents.len + to_chat(user, "You take a cigarette out of the pack.") + update_icon() + else + ..() + +/obj/item/storage/box/fancy/cigarettes/dromedaryco + name = "pack of Dromedary Co. cigarettes" + desc = "A packet of six imported Dromedary Company cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"." + icon = 'icons/obj/items/storage/cigpack/dromedary.dmi' + icon_state = "Dpacket" + +/obj/item/storage/box/fancy/cigarettes/dromedaryco/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/dromedaryco = 6) + +/obj/item/storage/box/fancy/cigarettes/killthroat + name = "pack of Acme Co. cigarettes" + desc = "A packet of six Acme Company cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors." + icon = 'icons/obj/items/storage/cigpack/acme.dmi' + icon_state = "Bpacket" + +/obj/item/storage/box/fancy/cigarettes/killthroat/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/killthroat = 6) + +/obj/item/storage/box/fancy/cigarettes/killthroat/populate_reagents() + add_to_reagents(/decl/material/liquid/fuel, (max_storage_space * 4)) + +// New exciting ways to kill your lungs! - Sunbeamstress // + +/obj/item/storage/box/fancy/cigarettes/luckystars + name = "pack of Lucky Stars" + desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head." + icon = 'icons/obj/items/storage/cigpack/lucky_stars.dmi' + icon_state = "LSpacket" + item_state = "Dpacket" //I actually don't mind cig packs not showing up in the hand. whotf doesn't just keep them in their pockets/coats // + +/obj/item/storage/box/fancy/cigarettes/luckystars/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/luckystars = 6) + +/obj/item/storage/box/fancy/cigarettes/jerichos + name = "pack of Jerichos" + desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs." + icon = 'icons/obj/items/storage/cigpack/jerichos.dmi' + icon_state = "Jpacket" + item_state = "Dpacket" + +/obj/item/storage/box/fancy/cigarettes/jerichos/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/jerichos = 6) + +/obj/item/storage/box/fancy/cigarettes/menthols + name = "pack of Temperamento Menthols" + desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!" + icon = 'icons/obj/items/storage/cigpack/menthol.dmi' + icon_state = "TMpacket" + item_state = "Dpacket" + key_type = /obj/item/clothing/mask/smokable/cigarette/menthol + +/obj/item/storage/box/fancy/cigarettes/menthols/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/menthol = 6) + +/obj/item/storage/box/fancy/cigarettes/carcinomas + name = "pack of Carcinoma Angels" + desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too. Yes, actual cats." + icon = 'icons/obj/items/storage/cigpack/carcinoma.dmi' + icon_state = "CApacket" + item_state = "Dpacket" + +/obj/item/storage/box/fancy/cigarettes/carcinomas/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/carcinomas = 6) + +/obj/item/storage/box/fancy/cigarettes/professionals + name = "pack of Professional 120s" + desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They taste disgusting, too." + icon_state = "P100packet" + icon = 'icons/obj/items/storage/cigpack/professionals.dmi' + item_state = "Dpacket" + +/obj/item/storage/box/fancy/cigarettes/professionals/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/professionals = 6) + +//cigarellos +/obj/item/storage/box/fancy/cigarettes/cigarello + name = "pack of Trident Original cigars" + desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years." + icon = 'icons/obj/items/storage/cigpack/cigarillo.dmi' + icon_state = "CRpacket" + item_state = "Dpacket" + max_storage_space = 5 + key_type = /obj/item/clothing/mask/smokable/cigarette/trident + +/obj/item/storage/box/fancy/cigarettes/cigarello/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/trident = 5) + +/obj/item/storage/box/fancy/cigarettes/cigarello/variety + name = "pack of Trident Fruit cigars" + desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. This is a fruit variety pack." + icon = 'icons/obj/items/storage/cigpack/cigarillo_fruity.dmi' + icon_state = "CRFpacket" + +/obj/item/storage/box/fancy/cigarettes/cigarello/variety/WillContain() + return list( + /obj/item/clothing/mask/smokable/cigarette/trident/watermelon, + /obj/item/clothing/mask/smokable/cigarette/trident/orange, + /obj/item/clothing/mask/smokable/cigarette/trident/grape, + /obj/item/clothing/mask/smokable/cigarette/trident/cherry, + /obj/item/clothing/mask/smokable/cigarette/trident/berry + ) + +/obj/item/storage/box/fancy/cigarettes/cigarello/mint + name = "pack of Trident Menthol cigars" + desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. These are the menthol variety." + icon = 'icons/obj/items/storage/cigpack/cigarillo_menthol.dmi' + icon_state = "CRMpacket" + +/obj/item/storage/box/fancy/cigarettes/cigarello/mint/WillContain() + return list(/obj/item/clothing/mask/smokable/cigarette/trident/mint = 5) + +//////////////////////////////////////////////////////////////////////////////// +// Syndie Cigs +//////////////////////////////////////////////////////////////////////////////// + +// Flash Powder Pack +/obj/item/storage/box/fancy/cigarettes/flash_powder + name = "pack of flash powder laced Trans-Stellar Duty-frees" + +/obj/item/storage/box/fancy/cigarettes/flash_powder/Initialize(ml, material_key) + . = ..() + //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names + var/obj/item/storage/box/fancy/cigarettes/C = /obj/item/storage/box/fancy/cigarettes + if(name == initial(name)) + SetName(initial(C.name)) + if(desc == initial(desc)) + desc = "[initial(desc)] 'F' has been scribbled on it." + +/obj/item/storage/box/fancy/cigarettes/flash_powder/populate_reagents() + add_to_reagents(/decl/material/solid/metal/aluminium, max_storage_space) + add_to_reagents(/decl/material/solid/potassium, max_storage_space) + add_to_reagents(/decl/material/solid/sulfur, max_storage_space) + +//Chemsmoke Pack +/obj/item/storage/box/fancy/cigarettes/chemsmoke + name = "pack of smoke powder laced Trans-Stellar Duty-frees" + +/obj/item/storage/box/fancy/cigarettes/chemsmoke/Initialize(ml, material_key) + . = ..() + //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names + var/obj/item/storage/box/fancy/cigarettes/C = /obj/item/storage/box/fancy/cigarettes + if(name == initial(name)) + SetName(initial(C.name)) + if(desc == initial(desc)) + desc = "[initial(desc)] 'S' has been scribbled on it." + +/obj/item/storage/box/fancy/cigarettes/chemsmoke/populate_reagents() + add_to_reagents(/decl/material/solid/potassium, max_storage_space) + add_to_reagents(/decl/material/liquid/nutriment/sugar, max_storage_space) + add_to_reagents(/decl/material/solid/phosphorus, max_storage_space) + +//Mindbreak Pack (now called /decl/chemical_reaction/hallucinogenics) +/obj/item/storage/box/fancy/cigarettes/mindbreak + name = "pack of mindbreak toxin laced Trans-Stellar Duty-frees" //#TODO: maybe fix the lore for that? + +/obj/item/storage/box/fancy/cigarettes/mindbreak/Initialize(ml, material_key) + . = ..() + //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names + var/obj/item/storage/box/fancy/cigarettes/C = /obj/item/storage/box/fancy/cigarettes + if(name == initial(name)) + SetName(initial(C.name)) + if(desc == initial(desc)) + desc = "[initial(desc)] 'MB' has been scribbled on it." //#TODO: maybe fix the lore for that? + +/obj/item/storage/box/fancy/cigarettes/mindbreak/populate_reagents() + add_to_reagents(/decl/material/solid/silicon, max_storage_space) + add_to_reagents(/decl/material/liquid/fuel/hydrazine, max_storage_space) + add_to_reagents(/decl/material/liquid/antitoxins, max_storage_space) + +//Tricord pack (now called /decl/material/liquid/regenerator) +/obj/item/storage/box/fancy/cigarettes/tricord + name = "pack of tricordazine laced Trans-Stellar Duty-frees" //#TODO: maybe fix the lore for that? + +/obj/item/storage/box/fancy/cigarettes/tricord/Initialize(ml, material_key) + . = ..() + //Reset the name to the default cig pack. Done for codex reasons, since it indexes things by initial names + var/obj/item/storage/box/fancy/cigarettes/C = /obj/item/storage/box/fancy/cigarettes + if(name == initial(name)) + SetName(initial(C.name)) + if(desc == initial(desc)) + desc = "[initial(desc)] 'T' has been scribbled on it." //#TODO: maybe fix the lore for that? + +/obj/item/storage/box/fancy/cigarettes/tricord/populate_reagents() + add_to_reagents(/decl/material/liquid/regenerator, (4 * max_storage_space)) diff --git a/code/game/objects/items/weapons/storage/fancy/crackers.dm b/code/game/objects/items/weapons/storage/fancy/crackers.dm new file mode 100644 index 00000000000..918adebb9eb --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/crackers.dm @@ -0,0 +1,31 @@ +/* + * Cracker Packet + */ +/obj/item/storage/box/fancy/crackers + name = "bag of crackers" + icon = 'icons/obj/food/containers/crackerbag.dmi' + icon_state = ICON_STATE_WORLD + storage_slots = 6 + max_w_class = ITEM_SIZE_TINY + max_storage_space = ITEM_SIZE_TINY * 6 + w_class = ITEM_SIZE_SMALL + key_type = /obj/item/chems/food/cracker + can_hold = list(/obj/item/chems/food/cracker) + use_single_icon_overlay_state = "crackerbag" + +/obj/item/storage/box/fancy/crackers/adjust_contents_overlay(var/overlay_index, var/image/overlay) + overlay?.pixel_x = -(overlay_index) + return overlay + +/obj/item/storage/box/fancy/crackers/WillContain() + return list(/obj/item/chems/food/cracker = 6) + +/obj/item/storage/box/fancy/crackers/update_icon_state() + icon_state = get_world_inventory_state() + +/obj/item/storage/box/fancy/crackers/on_update_icon() + . = ..() + if(opened) + add_overlay("[icon_state]_open") + else + add_overlay("[icon_state]_closed") diff --git a/code/game/objects/items/weapons/storage/fancy/crayons.dm b/code/game/objects/items/weapons/storage/fancy/crayons.dm new file mode 100644 index 00000000000..4bd8553d9eb --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/crayons.dm @@ -0,0 +1,32 @@ +/* + * Crayon Box + */ + +/obj/item/storage/box/fancy/crayons + name = "box of crayons" + desc = "A box of crayons for all your rune drawing needs." + icon = 'icons/obj/items/crayon_box.dmi' + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_SMALL + max_w_class = ITEM_SIZE_TINY + max_storage_space = 6 + key_type = /obj/item/pen/crayon + use_single_icon_overlay_state = "crayonbox" + +/obj/item/storage/box/fancy/crayons/update_icon_state() + icon_state = get_world_inventory_state() + +/obj/item/storage/box/fancy/crayons/adjust_contents_overlay(var/overlay_index, var/image/overlay) + if(overlay) + overlay.pixel_x = overlay_index * 2 + return overlay + +/obj/item/storage/box/fancy/crayons/WillContain() + return list( + /obj/item/pen/crayon/red, + /obj/item/pen/crayon/orange, + /obj/item/pen/crayon/yellow, + /obj/item/pen/crayon/green, + /obj/item/pen/crayon/blue, + /obj/item/pen/crayon/purple, + ) diff --git a/code/game/objects/items/weapons/storage/fancy/donutbox.dm b/code/game/objects/items/weapons/storage/fancy/donutbox.dm new file mode 100644 index 00000000000..78c957808f8 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/donutbox.dm @@ -0,0 +1,27 @@ +/* + * Donut box! + */ + +/obj/item/storage/box/fancy/donut + name = "donut box" + icon = 'icons/obj/food/containers/donutbox.dmi' + icon_state = ICON_STATE_WORLD + item_state = null + max_storage_space = ITEM_SIZE_SMALL * 6 + can_hold = list(/obj/item/chems/food/donut) + use_single_icon_overlay_state = "donutbox" + +/obj/item/storage/box/fancy/donut/update_icon_state() + icon_state = get_world_inventory_state() + +/obj/item/storage/box/fancy/donut/adjust_contents_overlay(var/overlay_index, var/image/overlay) + if(overlay) + overlay.pixel_x = overlay_index * 3 + return overlay + +/obj/item/storage/box/fancy/donut/WillContain() + return list(/obj/item/chems/food/donut = 6) + +// Subtypes below. +/obj/item/storage/box/fancy/donut/empty/WillContain() + return null diff --git a/code/game/objects/items/weapons/storage/fancy/eggbox.dm b/code/game/objects/items/weapons/storage/fancy/eggbox.dm new file mode 100644 index 00000000000..252c8b0e8f2 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/eggbox.dm @@ -0,0 +1,56 @@ +/* + * Egg Box + */ + +/obj/item/storage/box/fancy/egg_box + name = "egg box" + icon = 'icons/obj/food/containers/eggbox.dmi' + icon_state = ICON_STATE_WORLD + item_state = null + storage_slots = 12 + max_w_class = ITEM_SIZE_SMALL + max_storage_space = ITEM_SIZE_SMALL * 12 + w_class = ITEM_SIZE_NORMAL + key_type = /obj/item/chems/food/egg + use_single_icon_overlay_state = "eggbox" + can_hold = list( + /obj/item/chems/food/egg, + /obj/item/chems/food/boiledegg + ) + +/obj/item/storage/box/fancy/egg_box/update_icon_state() + icon_state = get_world_inventory_state() + if(opened) + icon_state = "[icon_state]_open" + +/obj/item/storage/box/fancy/egg_box/add_contents_overlays() + return opened && ..() + +/obj/item/storage/box/fancy/egg_box/adjust_contents_overlay(var/overlay_index, var/image/overlay) + if(overlay) + overlay.pixel_x = (overlay_index % 6) * 4 + if(overlay_index >= 6) + overlay.pixel_y = 3 + return overlay + +/obj/item/storage/box/fancy/egg_box/WillContain() + return list(/obj/item/chems/food/egg = 12) + +// Subtypes below. +/obj/item/storage/box/fancy/egg_box/assorted/WillContain() + return list( + /obj/item/chems/food/egg = 1, + /obj/item/chems/food/egg/blue = 1, + /obj/item/chems/food/egg/green = 1, + /obj/item/chems/food/egg/mime = 1, + /obj/item/chems/food/egg/orange = 1, + /obj/item/chems/food/egg/purple = 1, + /obj/item/chems/food/egg/rainbow = 1, + /obj/item/chems/food/egg/red = 1, + /obj/item/chems/food/egg/yellow = 1, + /obj/item/chems/food/boiledegg = 1, + /obj/item/chems/food/egg/lizard = 1 + ) + +/obj/item/storage/box/fancy/egg_box/empty/WillContain() + return diff --git a/code/game/objects/items/weapons/storage/fancy/vials.dm b/code/game/objects/items/weapons/storage/fancy/vials.dm new file mode 100644 index 00000000000..2156f639a80 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/vials.dm @@ -0,0 +1,55 @@ +/* + * Vial Box + */ +/obj/item/storage/box/fancy/vials + icon = 'icons/obj/vialbox.dmi' + icon_state = "vialbox" + name = "vial storage box" + w_class = ITEM_SIZE_NORMAL + max_w_class = ITEM_SIZE_TINY + storage_slots = 12 + material = /decl/material/solid/organic/plastic + key_type = /obj/item/chems/glass/beaker/vial + +/obj/item/storage/box/fancy/vials/WillContain() + return list(/obj/item/chems/glass/beaker/vial = 12) + +/obj/item/storage/box/fancy/vials/on_update_icon() + . = ..() + var/key_count = count_by_type(contents, key_type) + icon_state = "[initial(icon_state)][FLOOR(key_count/2)]" + +/* + * Not actually a "fancy" storage... + */ +/obj/item/storage/lockbox/vials + name = "secure vial storage box" + desc = "A locked box for keeping things away from children." + icon = 'icons/obj/vialbox.dmi' + icon_state = "vialbox0" + item_state = "syringe_kit" + w_class = ITEM_SIZE_NORMAL + max_w_class = ITEM_SIZE_TINY + max_storage_space = null + storage_slots = 12 + req_access = list(access_virology) + material = /decl/material/solid/metal/stainlesssteel + +/obj/item/storage/lockbox/vials/Initialize() + . = ..() + update_icon() + +/obj/item/storage/lockbox/vials/on_update_icon() + . = ..() + var/total_contents = count_by_type(contents, /obj/item/chems/glass/beaker/vial) + icon_state = "vialbox[FLOOR(total_contents/2)]" + if (!broken) + add_overlay("led[locked]") + if(locked) + add_overlay("cover") + else + add_overlay("ledb") + +/obj/item/storage/lockbox/vials/attackby(obj/item/W, mob/user) + . = ..() + update_icon() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index c4eefbcd45c..8f5763e452d 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -176,7 +176,7 @@ /obj/item/screwdriver, /obj/item/wrench, /obj/item/hatchet, - /obj/item/kitchen/utensil/fork, + /obj/item/utensil/fork, /obj/item/shard, /obj/item/flame/lighter, /obj/item/stack/cable_coil @@ -187,7 +187,7 @@ /obj/item/screwdriver, /obj/item/wrench, /obj/item/hatchet, - /obj/item/kitchen/utensil/fork, + /obj/item/utensil/fork, /obj/item/shard, /obj/item/flame/lighter, /obj/item/stack/cable_coil diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 66b7810fcd9..63702e3fbf9 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -36,7 +36,7 @@ //items that use internal storage have the option of calling this to emulate default storage handle_mouse_drop behaviour. //returns 1 if the master item's parent's handle_mouse_drop() should be called, 0 otherwise. It's strange, but no other way of //doing it without the ability to call another proc's parent, really. -/obj/item/storage/internal/proc/handle_storage_internal_mouse_drop(mob/user, obj/over_object) +/obj/item/storage/internal/proc/handle_storage_internal_mouse_drop(mob/user, obj/over_object, params) if (ishuman(user) || issmall(user)) //so monkeys can take off their backpacks -- Urist if(over_object == user && Adjacent(user)) // this must come before the screen objects only block diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index c9f00adce4c..3d23489d23d 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -56,7 +56,7 @@ else icon_state = "laundry-empty" -/obj/item/storage/laundry_basket/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/item/storage/laundry_basket/handle_mouse_drop(atom/over, mob/user, params) if(over == user) return TRUE . = ..() diff --git a/code/game/objects/items/weapons/storage/lunchbox.dm b/code/game/objects/items/weapons/storage/lunchbox.dm index d619379aa63..61cb87867c1 100644 --- a/code/game/objects/items/weapons/storage/lunchbox.dm +++ b/code/game/objects/items/weapons/storage/lunchbox.dm @@ -1,10 +1,9 @@ /obj/item/storage/lunchbox max_storage_space = 8 //slightly smaller than a toolbox name = "rainbow lunchbox" - icon = 'icons/obj/items/storage/lunchbox.dmi' - icon_state = "lunchbox_rainbow" - item_state = "toolbox_pink" desc = "A little lunchbox. This one is the colors of the rainbow!" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi' + icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_NORMAL max_w_class = ITEM_SIZE_SMALL attack_verb = list("lunched") @@ -29,8 +28,7 @@ /obj/item/storage/lunchbox/heart name = "heart lunchbox" - icon_state = "lunchbox_lovelyhearts" - item_state = "toolbox_pink" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi' desc = "A little lunchbox. This one has cute little hearts on it!" /obj/item/storage/lunchbox/heart/filled @@ -38,8 +36,7 @@ /obj/item/storage/lunchbox/cat name = "cat lunchbox" - icon_state = "lunchbox_sciencecatshow" - item_state = "toolbox_green" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi' desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" /obj/item/storage/lunchbox/cat/filled @@ -47,8 +44,7 @@ /obj/item/storage/lunchbox/mars name = "\improper Mariner University lunchbox" - icon_state = "lunchbox_marsuniversity" - item_state = "toolbox_red" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi' desc = "A little lunchbox. This one is branded with the Mariner university logo!" /obj/item/storage/lunchbox/mars/filled @@ -56,8 +52,7 @@ /obj/item/storage/lunchbox/cti name = "\improper CTI lunchbox" - icon_state = "lunchbox_cti" - item_state = "toolbox_blue" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi' desc = "A little lunchbox. This one is branded with the CTI logo!" /obj/item/storage/lunchbox/cti/filled @@ -65,8 +60,7 @@ /obj/item/storage/lunchbox/syndicate name = "black and red lunchbox" - icon_state = "lunchbox_syndie" - item_state = "toolbox_syndi" + icon = 'icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi' desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" /obj/item/storage/lunchbox/syndicate/filled diff --git a/code/game/objects/items/weapons/storage/med_pouch.dm b/code/game/objects/items/weapons/storage/med_pouch.dm index 16473aaaae6..11940a41108 100644 --- a/code/game/objects/items/weapons/storage/med_pouch.dm +++ b/code/game/objects/items/weapons/storage/med_pouch.dm @@ -212,59 +212,61 @@ Single Use Emergency Pouches SetName("emergency [reagents.get_primary_reagent_name()] pill ([reagents.total_volume]u)") /obj/item/chems/pill/pouch_pill/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/stabilizer, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/pouch_pill/antitoxins/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antitoxins, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/pouch_pill/oxy_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/oxy_meds, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/oxy_meds, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/pouch_pill/painkillers/populate_reagents() - reagents.add_reagent(/decl/material/liquid/painkillers, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/painkillers, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/pouch_pill/brute_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/brute_meds, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/brute_meds, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/pouch_pill/burn_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/burn_meds, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/burn_meds, reagents.maximum_volume) + . = ..() // Injectors /obj/item/chems/hypospray/autoinjector/pouch_auto name = "emergency autoinjector" desc = "An emergency autoinjector from an emergency medical pouch." + abstract_type = /obj/item/chems/hypospray/autoinjector/pouch_auto -/obj/item/chems/hypospray/autoinjector/pouch_auto/stabilizer - name = "emergency stabilizer autoinjector" /obj/item/chems/hypospray/autoinjector/pouch_auto/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, 5) + add_to_reagents(/decl/material/liquid/stabilizer, 5) + . = ..() -/obj/item/chems/hypospray/autoinjector/pouch_auto/painkillers - name = "emergency painkiller autoinjector" /obj/item/chems/hypospray/autoinjector/pouch_auto/painkillers/populate_reagents() - reagents.add_reagent(/decl/material/liquid/painkillers, 5) + add_to_reagents(/decl/material/liquid/painkillers, 5) + . = ..() -/obj/item/chems/hypospray/autoinjector/pouch_auto/antitoxins - name = "emergency antitoxins autoinjector" /obj/item/chems/hypospray/autoinjector/pouch_auto/antitoxins/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, 5) + add_to_reagents(/decl/material/liquid/antitoxins, 5) + . = ..() -/obj/item/chems/hypospray/autoinjector/pouch_auto/oxy_meds - name = "emergency oxygel autoinjector" /obj/item/chems/hypospray/autoinjector/pouch_auto/oxy_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/oxy_meds, 5) + add_to_reagents(/decl/material/liquid/oxy_meds, 5) + . = ..() /obj/item/chems/hypospray/autoinjector/pouch_auto/adrenaline - name = "emergency adrenaline autoinjector" amount_per_transfer_from_this = 8 /obj/item/chems/hypospray/autoinjector/pouch_auto/adrenaline/populate_reagents() - reagents.add_reagent(/decl/material/liquid/adrenaline, 8) + add_to_reagents(/decl/material/liquid/adrenaline, 8) + . = ..() -/obj/item/chems/hypospray/autoinjector/pouch_auto/nanoblood - name = "emergency nanoblood autoinjector" /obj/item/chems/hypospray/autoinjector/pouch_auto/nanoblood/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nanoblood, 5) + add_to_reagents(/decl/material/liquid/nanoblood, 5) + . = ..() // Inhalers @@ -277,11 +279,11 @@ Single Use Emergency Pouches detail_color = COLOR_CYAN /obj/item/chems/inhaler/pouch_auto/oxy_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/oxy_meds, 5) + add_to_reagents(/decl/material/liquid/oxy_meds, 5) /obj/item/chems/inhaler/pouch_auto/detoxifier name = "emergency detoxifier autoinhaler" detail_color = COLOR_GREEN /obj/item/chems/inhaler/pouch_auto/detoxifier/populate_reagents() - reagents.add_reagent(/decl/material/liquid/detoxifier, 5) + add_to_reagents(/decl/material/liquid/detoxifier, 5) diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 4105247582d..29d1f4e17fa 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -25,30 +25,6 @@ /obj/item/dice/d100, ) -/obj/item/storage/box/donut - icon = 'icons/obj/food.dmi' - icon_state = "donutbox" - name = "donut box" - can_hold = list(/obj/item/chems/food/donut) - foldable = /obj/item/stack/material/cardstock - -/obj/item/storage/box/donut/WillContain() - return list(/obj/item/chems/food/donut = 6) - -/obj/item/storage/box/donut/on_update_icon() - . = ..() - var/list/cur_overlays - var/i = 0 - for(var/obj/item/chems/food/donut/D in contents) - LAZYADD(cur_overlays, overlay_image('icons/obj/food.dmi', "[i][D.overlay_state]", flags = RESET_COLOR)) - i++ - - if(LAZYLEN(cur_overlays)) - add_overlay(cur_overlays) - -/obj/item/storage/box/donut/empty/WillContain() - return null - //misc tobacco nonsense /obj/item/storage/cigpaper name = "\improper Gen. Eric cigarette paper" diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm index 312251fc463..343015b78f7 100644 --- a/code/game/objects/items/weapons/storage/mre.dm +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -20,11 +20,11 @@ MRE Stuff . = list( main_meal, /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, + /obj/item/storage/box/fancy/crackers, /obj/random/mre/spread, /obj/random/mre/drink, /obj/random/mre/sauce, - /obj/item/kitchen/utensil/spork/plastic + /obj/item/utensil/spork/plastic ) /obj/item/storage/mre/Initialize(ml, material_key) @@ -87,11 +87,11 @@ MRE Stuff . = list( main_meal, /obj/item/storage/mrebag/dessert/menu9, - /obj/item/storage/fancy/crackers, + /obj/item/storage/box/fancy/crackers, /obj/random/mre/spread/vegan, /obj/random/mre/drink, /obj/random/mre/sauce/vegan, - /obj/item/kitchen/utensil/spoon/plastic + /obj/item/utensil/spoon/plastic ) /obj/item/storage/mre/menu10 @@ -106,14 +106,14 @@ MRE Stuff /obj/item/chems/food/candy/proteinbar, /obj/item/chems/condiment/small/packet/protein, /obj/random/mre/sauce/sugarfree, - /obj/item/kitchen/utensil/spoon/plastic + /obj/item/utensil/spoon/plastic ) /obj/item/storage/mre/menu11 name = "crayon MRE" meal_desc = "This one doesn't have a menu listing. How very odd." icon_state = "crayonmre" - main_meal = /obj/item/storage/fancy/crayons + main_meal = /obj/item/storage/box/fancy/crayons /obj/item/storage/mre/menu11/WillContain() return list( @@ -145,7 +145,7 @@ MRE Stuff matter = list(/decl/material/solid/metal/aluminium = MATTER_AMOUNT_TRACE) /obj/item/storage/mrebag/WillContain() - return list(/obj/item/chems/food/slice/meatpizza/filled) + return list(/obj/item/chems/food/slice/pizza/meat/filled) /obj/item/storage/mrebag/on_update_icon() . = ..() @@ -161,10 +161,10 @@ MRE Stuff . = ..() /obj/item/storage/mrebag/menu2/WillContain() - return list(/obj/item/chems/food/slice/margherita/filled) + return list(/obj/item/chems/food/slice/pizza/margherita/filled) /obj/item/storage/mrebag/menu3/WillContain() - return list(/obj/item/chems/food/slice/vegetablepizza/filled) + return list(/obj/item/chems/food/slice/pizza/vegetable/filled) /obj/item/storage/mrebag/menu4/WillContain() return list(/obj/item/chems/food/hamburger) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index c028bec0466..616f994091c 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -34,7 +34,7 @@ . = ..() -/obj/item/storage/secure/handle_mouse_drop(atom/over, mob/user) +/obj/item/storage/secure/handle_mouse_drop(atom/over, mob/user, params) var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) if(lock.locked) add_fingerprint(user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 571c3eb8d7e..b191f186d1c 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -33,7 +33,7 @@ QDEL_NULL(storage_ui) . = ..() -/obj/item/storage/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/item/storage/handle_mouse_drop(atom/over, mob/user, params) if(canremove && (ishuman(user) || isrobot(user) || isanimal(user)) && !user.incapacitated(INCAPACITATION_DISRUPTED) && over == user) open(user) return TRUE @@ -276,6 +276,10 @@ show_to(user) /obj/item/storage/proc/gather_all(var/turf/T, var/mob/user) + + if(!istype(T)) + return + var/success = 0 var/failure = 0 @@ -318,7 +322,7 @@ remove_from_storage(I, T, 1) finish_bulk_removal() -/obj/item/storage/receive_mouse_drop(atom/dropping, mob/living/user) +/obj/item/storage/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && scoop_inside(dropping, user)) return TRUE diff --git a/code/game/objects/items/weapons/storage/storage_ui/default.dm b/code/game/objects/items/weapons/storage/storage_ui/default.dm index 1df98a6248d..5afd9b992e7 100644 --- a/code/game/objects/items/weapons/storage/storage_ui/default.dm +++ b/code/game/objects/items/weapons/storage/storage_ui/default.dm @@ -1,58 +1,24 @@ /datum/storage_ui/default var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage + var/obj/screen/storage/boxes/boxes + var/obj/screen/storage/close/closer + var/obj/screen/storage/start/storage_start //storage UI + var/obj/screen/storage/cont/storage_continue + var/obj/screen/storage/end/storage_end + var/obj/screen/stored/start/stored_start + var/obj/screen/stored/cont/stored_continue + var/obj/screen/stored/end/stored_end - var/obj/screen/storage/boxes - var/obj/screen/storage/storage_start //storage UI - var/obj/screen/storage/storage_continue - var/obj/screen/storage/storage_end - var/obj/screen/storage/stored_start - var/obj/screen/storage/stored_continue - var/obj/screen/storage/stored_end - var/obj/screen/close/closer - -#define storage_ui_default "LEFT+7,BOTTOM+7 to LEFT+10,BOTTOM+8" /datum/storage_ui/default/New(var/storage) ..() - boxes = new /obj/screen/storage( ) - boxes.SetName("storage") - boxes.master = storage - boxes.icon_state = "block" - boxes.screen_loc = storage_ui_default - boxes.layer = HUD_BASE_LAYER - - storage_start = new /obj/screen/storage( ) - storage_start.SetName("storage") - storage_start.master = storage - storage_start.icon_state = "storage_start" - storage_start.screen_loc = storage_ui_default - storage_start.layer = HUD_BASE_LAYER - storage_continue = new /obj/screen/storage( ) - storage_continue.SetName("storage") - storage_continue.master = storage - storage_continue.icon_state = "storage_continue" - storage_continue.screen_loc = storage_ui_default - storage_continue.layer = HUD_BASE_LAYER - storage_end = new /obj/screen/storage( ) - storage_end.SetName("storage") - storage_end.master = storage - storage_end.icon_state = "storage_end" - storage_end.screen_loc = storage_ui_default - storage_end.layer = HUD_BASE_LAYER - - stored_start = new /obj //we just need these to hold the icon - stored_start.icon_state = "stored_start" - stored_start.layer = HUD_BASE_LAYER - stored_continue = new /obj - stored_continue.icon_state = "stored_continue" - stored_continue.layer = HUD_BASE_LAYER - stored_end = new /obj - stored_end.icon_state = "stored_end" - stored_end.layer = HUD_BASE_LAYER - - closer = new /obj/screen/close( ) - closer.master = storage - closer.icon_state = "x" - closer.layer = HUD_BASE_LAYER + boxes = new(null, null, null, null, null, null, storage) + storage_start = new(null, null, null, null, null, null, storage) + storage_continue = new(null, null, null, null, null, null, storage) + storage_end = new(null, null, null, null, null, null, storage) + closer = new(null, null, null, null, null, null, storage) + stored_start = new + stored_continue = new + stored_end = new /datum/storage_ui/default/Destroy() close_all() diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 3042ff6067c..00b2d0dc144 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -1,9 +1,8 @@ /obj/item/storage/toolbox name = "toolbox" desc = "Bright red toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon = 'icons/obj/items/storage/toolbox.dmi' - icon_state = "red" - item_state = "toolbox_red" + icon = 'icons/obj/items/storage/toolboxes/toolbox_red.dmi' + icon_state = ICON_STATE_WORLD obj_flags = OBJ_FLAG_CONDUCTIBLE force = 20 attack_cooldown = 21 @@ -14,7 +13,7 @@ w_class = ITEM_SIZE_LARGE max_w_class = ITEM_SIZE_NORMAL max_storage_space = DEFAULT_LARGEBOX_STORAGE //enough to hold all starting contents - origin_tech = "{'combat':1}" + origin_tech = @'{"combat":1}' attack_verb = list("robusted") use_sound = 'sound/effects/storage/toolbox.ogg' material = /decl/material/solid/metal/aluminium @@ -35,8 +34,7 @@ /obj/item/storage/toolbox/mechanical name = "mechanical toolbox" desc = "Bright blue toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon_state = "blue" - item_state = "toolbox_blue" + icon = 'icons/obj/items/storage/toolboxes/toolbox_blue.dmi' /obj/item/storage/toolbox/mechanical/WillContain() return list( @@ -51,8 +49,8 @@ /obj/item/storage/toolbox/electrical name = "electrical toolbox" desc = "Bright yellow toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon_state = "yellow" - item_state = "toolbox_yellow" + icon = 'icons/obj/items/storage/toolboxes/toolbox_yellow.dmi' + /obj/item/storage/toolbox/electrical/WillContain() return list( @@ -67,9 +65,8 @@ /obj/item/storage/toolbox/syndicate name = "black and red toolbox" desc = "A toolbox in black, with stylish red trim. This one feels particularly heavy, yet balanced." - icon_state = "syndicate" - item_state = "toolbox_syndi" - origin_tech = "{'combat':1,'esoteric':1}" + icon = 'icons/obj/items/storage/toolboxes/toolbox_black_red.dmi' + origin_tech = @'{"combat":1,"esoteric":1}' attack_cooldown = 10 /obj/item/storage/toolbox/syndicate/WillContain() @@ -86,17 +83,16 @@ /obj/item/storage/toolbox/syndicate/powertools/WillContain() return list( /obj/item/clothing/gloves/insulated, - /obj/item/power_drill, + /obj/item/tool/power_drill, /obj/item/weldingtool/electric, - /obj/item/hydraulic_cutter, + /obj/item/tool/hydraulic_cutter, /obj/item/multitool ) /obj/item/storage/toolbox/repairs name = "electronics toolbox" desc = "A box full of boxes, with electrical machinery parts and tools needed to get them where they're needed." - icon_state = "yellow_striped" - item_state = "toolbox_yellow" + icon = 'icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi' /obj/item/storage/toolbox/repairs/WillContain() return list( diff --git a/code/game/objects/items/weapons/storage/trays.dm b/code/game/objects/items/weapons/storage/trays.dm index 9b81b952fda..a1fd02a01e1 100644 --- a/code/game/objects/items/weapons/storage/trays.dm +++ b/code/game/objects/items/weapons/storage/trays.dm @@ -2,7 +2,7 @@ /obj/item/storage/tray name = "tray" - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food_trays.dmi' icon_state = "tray_material" desc = "A tray to serve food on." force = 4 @@ -120,11 +120,11 @@ /obj/item/storage/tray/on_update_icon() . = ..() - clear_vis_contents(src) + clear_vis_contents() for(var/obj/item/I in contents) I.vis_flags |= VIS_INHERIT_PLANE | VIS_INHERIT_LAYER I.appearance_flags |= RESET_COLOR - add_vis_contents(src, I) + add_vis_contents(I) /obj/item/storage/tray/remove_from_storage(obj/item/W, atom/new_location, var/NoUpdate = 0) . = ..() diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 874391b6e81..533e6a2b632 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -1,6 +1,6 @@ -/proc/fill_cigarre_package(var/obj/item/storage/fancy/cigarettes/C, var/list/reagents) +/proc/fill_cigarre_package(var/obj/item/storage/box/fancy/cigarettes/C, var/list/reagents) for(var/reagent in reagents) - C.reagents.add_reagent(reagent, reagents[reagent] * C.max_storage_space) + C.add_to_reagents(reagent, reagents[reagent] * C.max_storage_space) /obj/item/storage/box/syndie_kit name = "box" @@ -57,7 +57,7 @@ /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/fiberglass = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE - ) + ) /obj/item/storage/backpack/chameleon/sydie_kit/WillContain() return list( @@ -128,10 +128,10 @@ /obj/item/storage/box/syndie_kit/cigarette/WillContain() return list( - /obj/item/storage/fancy/cigarettes/flash_powder = 2, - /obj/item/storage/fancy/cigarettes/chemsmoke = 2, - /obj/item/storage/fancy/cigarettes/mindbreak, - /obj/item/storage/fancy/cigarettes/tricord, + /obj/item/storage/box/fancy/cigarettes/flash_powder = 2, + /obj/item/storage/box/fancy/cigarettes/chemsmoke = 2, + /obj/item/storage/box/fancy/cigarettes/mindbreak, + /obj/item/storage/box/fancy/cigarettes/tricord, /obj/item/flame/lighter/zippo/random, ) diff --git a/code/game/objects/items/weapons/storage/wall_mirror.dm b/code/game/objects/items/weapons/storage/wall_mirror.dm index 35ca2379ea4..a71295f0bde 100644 --- a/code/game/objects/items/weapons/storage/wall_mirror.dm +++ b/code/game/objects/items/weapons/storage/wall_mirror.dm @@ -10,7 +10,7 @@ var/shattered = FALSE var/list/ui_users var/obj/item/storage/internal/mirror_storage/mirror_storage - directional_offset = "{'NORTH':{'y':-29}, 'SOUTH':{'y':29}, 'EAST':{'x':29}, 'WEST':{'x':-29}}" + directional_offset = @'{"NORTH":{"y":-29}, "SOUTH":{"y":29}, "EAST":{"x":29}, "WEST":{"x":-29}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED /obj/structure/mirror/Initialize() @@ -30,11 +30,12 @@ /obj/item/storage/internal/mirror_storage/WillContain() return list( - /obj/item/haircomb/random, - /obj/item/haircomb/brush, + /obj/item/grooming/comb/colorable/random, + /obj/item/grooming/brush/colorable/random, + /obj/item/grooming/file, /obj/random/medical/lite, - /obj/item/lipstick, /obj/random/lipstick, + /obj/random/eyeshadow, /obj/random/soap, /obj/item/chems/spray/cleaner/deodorant, /obj/item/towel/random @@ -45,8 +46,8 @@ clear_ui_users(ui_users) . = ..() -/obj/structure/mirror/handle_mouse_drop(atom/over, mob/user) - if(!(. = mirror_storage?.handle_storage_internal_mouse_drop(user, over))) +/obj/structure/mirror/handle_mouse_drop(atom/over, mob/user, params) + if(!(. = mirror_storage?.handle_storage_internal_mouse_drop(user, over, params))) flick("mirror_open",src) return if((. = ..())) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 74b5a06e881..d45a4b4f577 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -10,8 +10,8 @@ /obj/item/cash, /obj/item/card, /obj/item/clothing/mask/smokable, - /obj/item/lipstick, - /obj/item/haircomb, + /obj/item/cosmetics, + /obj/item/grooming, /obj/item/mirror, /obj/item/clothing/accessory/locket, /obj/item/clothing/head/hairflower, diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index e9c0365c3f5..caa2ea5dec7 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -10,7 +10,7 @@ edge = 0 throwforce = 7 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' attack_verb = list("beaten") base_parry_chance = 30 material = /decl/material/solid/metal/aluminium @@ -23,35 +23,33 @@ var/stunforce = 0 var/agonyforce = 30 var/status = 0 //whether the thing is on or not - var/obj/item/cell/bcell var/hitcost = 7 -/obj/item/baton/loaded - bcell = /obj/item/cell/device/high - -/obj/item/baton/Initialize(var/ml) +/obj/item/baton/Initialize(var/ml, var/material_key, var/loaded_cell_type) . = ..(ml) - if(ispath(bcell)) - bcell = new bcell(src) - update_icon() + setup_power_supply(loaded_cell_type) -/obj/item/baton/Destroy() - if(bcell && !ispath(bcell)) - qdel(bcell) - bcell = null - return ..() +/obj/item/baton/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + . = ..(loaded_cell_type, /obj/item/cell/device, /datum/extension/loaded_cell/secured, charge_value) + update_icon() -/obj/item/baton/get_cell() - return bcell +/obj/item/baton/loaded/Initialize(var/ml, var/material_key, var/loaded_cell_type) + return ..(ml, material_key, loaded_cell_type = /obj/item/cell/device/high) + +/obj/item/baton/infinite/Initialize(var/ml, var/material_key, var/loaded_cell_type) + . = ..(ml, material_key, loaded_cell_type = /obj/item/cell/device/infinite) + set_status(1, null) /obj/item/baton/proc/update_status() - if(bcell.charge < hitcost) + var/obj/item/cell/cell = get_cell() + if(cell?.charge < hitcost) status = 0 update_icon() /obj/item/baton/proc/deductcharge(var/chrgdeductamt) - if(bcell) - if(bcell.checked_use(chrgdeductamt)) + var/obj/item/cell/cell = get_cell() + if(cell) + if(cell.checked_use(chrgdeductamt)) update_status() return 1 else @@ -66,55 +64,24 @@ add_overlay("[icon_state]-active") set_light(1.5, 2, "#ff6a00") else - if(!bcell) + if(!get_cell()) add_overlay("[icon_state]-nocell") set_light(0) -/obj/item/baton/examine(mob/user, distance) - . = ..() - if(distance <= 1) - examine_cell(user) - -// Addition made by Techhead0, thanks for fullfilling the todo! -/obj/item/baton/proc/examine_cell(mob/user) - if(bcell) - to_chat(user, "The baton is [round(bcell.percent())]% charged.") - if(!bcell) - to_chat(user, "The baton does not have a power source installed.") - -/obj/item/baton/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/cell/device)) - if(!bcell && user.try_unequip(W)) - W.forceMove(src) - bcell = W - to_chat(user, "You install a cell into the [src].") - update_icon() - else - to_chat(user, "[src] already has a cell.") - else if(IS_SCREWDRIVER(W)) - if(bcell) - bcell.update_icon() - bcell.dropInto(loc) - bcell = null - to_chat(user, "You remove the cell from the [src].") - status = 0 - update_icon() - else - ..() - /obj/item/baton/attack_self(mob/user) set_status(!status, user) add_fingerprint(user) /obj/item/baton/proc/set_status(var/newstatus, mob/user) - if(bcell && bcell.charge >= hitcost) + var/obj/item/cell/cell = get_cell() + if(cell?.charge >= hitcost) if(status != newstatus) change_status(newstatus) to_chat(user, "[src] is now [status ? "on" : "off"].") playsound(loc, "sparks", 75, 1, -1) else change_status(0) - if(!bcell) + if(!cell) to_chat(user, "[src] does not have a power source!") else to_chat(user, "[src] is out of charge.") @@ -182,19 +149,15 @@ return 1 -/obj/item/baton/emp_act(severity) - if(bcell) - bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. - ..() - // Stunbaton module for Security synthetics /obj/item/baton/robot - bcell = null hitcost = 20 // Addition made by Techhead0, thanks for fullfilling the todo! -/obj/item/baton/robot/examine_cell(mob/user) - to_chat(user, "The baton is running off an external power supply.") +/obj/item/baton/robot/examine(mob/user, distance, infix, suffix) + . = ..() + if(distance == 1) + to_chat(user, SPAN_NOTICE("The baton is running off an external power supply.")) // Override proc for the stun baton module, found in PC Security synthetics // Refactored to fix #14470 - old proc defination increased the hitcost beyond @@ -202,29 +165,25 @@ // Also hard-coded to be unuseable outside their righteous synthetic owners. /obj/item/baton/robot/attack_self(mob/user) var/mob/living/silicon/robot/R = isrobot(user) ? user : null // null if the user is NOT a robot - update_cell(R) // takes both robots and null if (R) return ..() else // Stop pretending and get out of your cardborg suit, human. - to_chat(user, "You don't seem to be able interacting with this by yourself..") + to_chat(user, "You don't seem to be able to interact with this by yourself.") add_fingerprint(user) return 0 /obj/item/baton/robot/attackby(obj/item/W, mob/user) return -/obj/item/baton/robot/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - update_cell(isrobot(user) ? user : null) // update the status before we apply the effects - return ..() +/obj/item/baton/robot/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + SHOULD_CALL_PARENT(FALSE) + return -// Updates the baton's cell to use user's own cell -// Otherwise, if null (when the user isn't a robot), render it unuseable -/obj/item/baton/robot/proc/update_cell(mob/living/silicon/robot/user) - if (!user) - bcell = null - set_status(0) - else if (!bcell || bcell != user.cell) - bcell = user.cell // if it is null, nullify it anyway +/obj/item/baton/robot/get_cell() + var/mob/living/silicon/robot/holder = loc + if(istype(holder)) + return holder.cell + return ..() // Traitor variant for Engineering synthetics. /obj/item/baton/robot/electrified_arm diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index ecb616a6788..95145f0c8e9 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -20,7 +20,7 @@ matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' drop_sound = 'sound/foley/knifedrop3.ogg' /obj/item/retractor/Initialize() @@ -39,7 +39,7 @@ matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' attack_verb = list("attacked", "pinched") drop_sound = 'sound/foley/knifedrop3.ogg' @@ -62,7 +62,7 @@ ) obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' attack_verb = list("burnt") /obj/item/cautery/Initialize() @@ -83,12 +83,12 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE force = 15.0 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' attack_verb = list("drilled") /obj/item/surgicaldrill/Initialize() . = ..() - set_extension(src, /datum/extension/tool, list(TOOL_DRILL = TOOL_QUALITY_DEFAULT)) + set_extension(src, /datum/extension/tool, list(TOOL_SURGICAL_DRILL = TOOL_QUALITY_DEFAULT)) /* * Scalpel @@ -107,7 +107,7 @@ throwforce = 5 throw_speed = 3 throw_range = 5 - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -131,7 +131,7 @@ matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) pickup_sound = 'sound/foley/pickup2.ogg' tool_quality = TOOL_QUALITY_DECENT - origin_tech = "{'biotech':2,'materials':2,'magnets':2}" + origin_tech = @'{"biotech":2,"materials":2,"magnets":2}' /obj/item/scalpel/laser/upgraded name = "upgraded laser scalpel" @@ -143,7 +143,7 @@ /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) tool_quality = TOOL_QUALITY_GOOD - origin_tech = "{'biotech':3,'materials':4,'magnets':4}" + origin_tech = @'{"biotech":3,"materials":4,"magnets":4}' /obj/item/scalpel/laser/advanced name = "advanced laser scalpel" @@ -156,7 +156,7 @@ /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE ) tool_quality = TOOL_QUALITY_BEST - origin_tech = "{'biotech':4,'materials':6,'magnets':5}" + origin_tech = @'{"biotech":4,"materials":6,"magnets":5}' /obj/item/incision_manager name = "incision management system" @@ -175,7 +175,7 @@ /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) pickup_sound = 'sound/foley/pickup2.ogg' - origin_tech = "{'biotech':4,'materials':7,'magnets':5,'programming':4}" + origin_tech = @'{"biotech":4,"materials":7,"magnets":5,"programming":4}' /obj/item/incision_manager/Initialize() . = ..() @@ -201,7 +201,7 @@ throwforce = 9 throw_speed = 3 throw_range = 5 - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) attack_verb = list("attacked", "slashed", "sawed", "cut") @@ -240,7 +240,7 @@ icon_state = "fixovein" force = 0 throwforce = 1 - origin_tech = "{'materials':1,'biotech':3}" + origin_tech = @'{"materials":1,"biotech":3}' w_class = ITEM_SIZE_SMALL material = /decl/material/solid/organic/plastic diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 5c53fdea72a..923c79b1a25 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -13,7 +13,7 @@ action_button_name = "Toggle Jetpack" material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':1,'engineering':3}" + origin_tech = @'{"materials":1,"engineering":3}' /obj/item/tank/jetpack/Initialize() . = ..() @@ -41,7 +41,7 @@ if(on) add_overlay("[icon_state]-on") -/obj/item/tank/jetpack/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/tank/jetpack/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && slot == slot_back_str && on) overlay.icon_state = "[overlay.icon_state]-on" . = ..() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 5f37fd0f6c4..15bf01b0427 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -426,10 +426,10 @@ var/global/list/global/tank_gauge_cache = list() var/mult = ((air_contents.volume/140)**(1/2)) * (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - var/turf/simulated/T = get_turf(src) - T.hotspot_expose(air_contents.temperature, 70, 1) - if(!T) + var/turf/T = get_turf(src) + if(!T?.simulated) return + T.hotspot_expose(air_contents.temperature, 70, 1) T.assume_air(air_contents) explosion( @@ -458,8 +458,8 @@ var/global/list/global/tank_gauge_cache = list() #endif if(integrity <= 0) - var/turf/simulated/T = get_turf(src) - if(!T) + var/turf/T = get_turf(src) + if(!T?.simulated) return T.assume_air(air_contents) playsound(get_turf(src), 'sound/weapons/gunshot/shotgun.ogg', 20, 1) @@ -482,8 +482,8 @@ var/global/list/global/tank_gauge_cache = list() integrity-= 5 else if(pressure && (pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp)) if((integrity <= 19 || leaking) && !valve_welded) - var/turf/simulated/T = get_turf(src) - if(!T) + var/turf/T = get_turf(src) + if(!T?.simulated) return var/datum/gas_mixture/environment = loc.return_air() var/env_pressure = environment.return_pressure() diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index c969810d8b6..0f5284abc39 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -3,16 +3,17 @@ /////////////////////////////////////////////// /**Base class for all things tape, with a limit amount of uses. */ /obj/item/stack/tape_roll - name = "roll of tape" - gender = NEUTER - singular_name = "length of tape" - plural_name = "lengths of tape" - amount = 32 - max_amount = 32 - w_class = ITEM_SIZE_SMALL - material = /decl/material/solid/organic/plastic - health = 10 - max_health = 10 + name = "roll of tape" + gender = NEUTER + singular_name = "length of tape" + plural_name = "lengths of tape" + amount = 32 + max_amount = 32 + w_class = ITEM_SIZE_SMALL + material = /decl/material/solid/organic/plastic + current_health = 10 + max_health = 10 + matter_multiplier = 0.25 /obj/item/stack/tape_roll/can_split() return FALSE diff --git a/code/game/objects/items/weapons/tech_disks.dm b/code/game/objects/items/weapons/tech_disks.dm index cd91b56acbe..2ec629af038 100644 --- a/code/game/objects/items/weapons/tech_disks.dm +++ b/code/game/objects/items/weapons/tech_disks.dm @@ -112,6 +112,8 @@ color = COLOR_BOTTLE_GREEN var/list/stored_tech +SAVED_VAR(/obj/item/disk/tech_disk, stored_tech) + /////////////////////////////////////////////////////////////////////////////// // Component Design Data Disk /////////////////////////////////////////////////////////////////////////////// @@ -128,3 +130,18 @@ SetName(initial(name)) to_chat(user, SPAN_DANGER("You flick the erase switch and wipe \the [src].")) return TRUE + +/////////////////////////////////////////////////////////////////////////////// +// Exploration and Mining Data Disk +/////////////////////////////////////////////////////////////////////////////// +/obj/item/disk/survey + name = "survey data disk" + color = COLOR_DARK_BROWN + var/data = 0 + +/obj/item/disk/survey/examine(mob/user) + . = ..() + to_chat(user, "A tiny indicator on \the [src] shows it holds [data] good explorer point\s.") + +/obj/item/disk/survey/get_base_value() + . = holographic ? 0 : (sqrt(data) * 5) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 206aa606eb9..e95ffde8b89 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -18,7 +18,7 @@ w_class = ITEM_SIZE_SMALL throw_speed = 4 throw_range = 20 - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/aluminium /obj/item/locator/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/tools/crowbar.dm b/code/game/objects/items/weapons/tools/crowbar.dm index 13f6c62f9d6..07f2255a58f 100644 --- a/code/game/objects/items/weapons/tools/crowbar.dm +++ b/code/game/objects/items/weapons/tools/crowbar.dm @@ -8,9 +8,9 @@ attack_cooldown = 2*DEFAULT_WEAPON_COOLDOWN melee_accuracy_bonus = -10 w_class = ITEM_SIZE_SMALL - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':16,'y':20}" + center_of_mass = @'{"x":16,"y":20}' attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") material_alteration = MAT_FLAG_ALTERATION_COLOR drop_sound = 'sound/foley/bardrop1.ogg' diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm index c8e2a842010..26be448a3e5 100644 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -2,11 +2,11 @@ name = "screwdriver" desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle." icon = 'icons/obj/items/tool/screwdriver.dmi' - icon_state = "screwdriver_preview" + icon_state = "preview" slot_flags = SLOT_LOWER_BODY | SLOT_EARS w_class = ITEM_SIZE_TINY material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' attack_verb = list("stabbed") lock_picking_level = 5 sharp = TRUE @@ -28,7 +28,7 @@ handle_color = pick(valid_colours) add_overlay(mutable_appearance(icon, "[get_world_inventory_state()]_handle", handle_color)) -/obj/item/screwdriver/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/screwdriver/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) overlay.color = handle_color . = ..() diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index d1ca7fda619..51f1f548ed2 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -8,7 +8,7 @@ icon_state = ICON_STATE_WORLD obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_LOWER_BODY - center_of_mass = @"{'x':14,'y':15}" + center_of_mass = @'{"x":14,"y":15}' force = 5 throwforce = 5 throw_speed = 1 @@ -16,7 +16,7 @@ w_class = ITEM_SIZE_SMALL material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'engineering':1}" + origin_tech = @'{"engineering":1}' drop_sound = 'sound/foley/tooldrop1.ogg' z_flags = ZMM_MANGLE_PLANES attack_cooldown = DEFAULT_ATTACK_COOLDOWN @@ -52,7 +52,7 @@ if(welding) update_icon() -/obj/item/weldingtool/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/weldingtool/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && welding && check_state_in_icon("[overlay.icon_state]-lit", overlay.icon)) overlay.add_overlay(emissive_overlay(overlay.icon, "[overlay.icon_state]-lit")) . = ..() @@ -194,8 +194,8 @@ if(isliving(O)) var/mob/living/L = O L.IgniteMob() - else if(istype(O)) - O.HandleObjectHeating(src, user, WELDING_TOOL_HOTSPOT_TEMP_ACTIVE) + else if(isatom(O)) + O.handle_external_heating(WELDING_TOOL_HOTSPOT_TEMP_ACTIVE, src, user) if (isturf(location)) location.hotspot_expose(WELDING_TOOL_HOTSPOT_TEMP_ACTIVE, 50, 1) spark_at(get_turf(O), 3, FALSE, O) @@ -228,7 +228,7 @@ if(location) location.hotspot_expose(WELDING_TOOL_HOTSPOT_TEMP_ACTIVE, 5) set_light(5, 0.7, COLOR_LIGHT_CYAN) - addtimer(CALLBACK(src, /atom/proc/update_icon), 5) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 5) return TRUE /**Handle the flame burning fuel while the welder is on */ @@ -245,14 +245,12 @@ if(!(src in L.get_held_items())) fuel_usage = max(fuel_usage, 2) L.IgniteMob() - - else if(isobj(loc)) - var/obj/O = loc - O.HandleObjectHeating(src, null, WELDING_TOOL_HOTSPOT_TEMP_IDLE) - else if(isturf(loc)) var/turf/location = get_turf(src) location.hotspot_expose(WELDING_TOOL_HOTSPOT_TEMP_IDLE, 5) //a bit colder when idling + else if(isatom(loc)) + var/atom/A = loc + A.handle_external_heating(WELDING_TOOL_HOTSPOT_TEMP_IDLE) if(use_fuel(fuel_usage)) return TRUE @@ -264,7 +262,7 @@ if(get_fuel() < amount) . = FALSE //Try to burn as much as possible anyways if(tank) - tank.reagents.remove_reagent(/decl/material/liquid/fuel, amount) + tank.remove_from_reagents(/decl/material/liquid/fuel, amount) //Returns whether or not the welding tool is currently on. /obj/item/weldingtool/proc/isOn() @@ -404,7 +402,7 @@ throwforce = 5 volume = 20 show_reagent_name = TRUE - health = 40 + current_health = 40 max_health = 40 material = /decl/material/solid/metal/steel var/can_refuel = TRUE @@ -413,7 +411,7 @@ var/lit_force = 11 /obj/item/chems/welder_tank/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fuel, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) /obj/item/chems/welder_tank/examine(mob/user, distance) . = ..() @@ -432,7 +430,7 @@ return TRUE if(standard_pour_into(user, O)) return TRUE - if(standard_feed_mob(user, O)) + if(handle_eaten_by_mob(user, O) != EATEN_INVALID) return TRUE if(user.a_intent == I_HURT) if(standard_splash_mob(user, O)) @@ -463,11 +461,11 @@ return FALSE . = ..() -/obj/item/chems/welder_tank/standard_feed_mob(mob/user, mob/target) +/obj/item/chems/welder_tank/handle_eaten_by_mob(mob/user, mob/target) if(!can_refuel) to_chat(user, SPAN_DANGER("\The [src] is sealed shut.")) - return FALSE - . = ..() + return EATEN_UNABLE + return ..() /obj/item/chems/welder_tank/get_alt_interactions(var/mob/user) . = ..() @@ -535,7 +533,7 @@ /obj/item/chems/welder_tank/experimental/Process() if(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) < reagents.maximum_volume) var/gen_amount = ((world.time-last_gen)/25) - reagents.add_reagent(/decl/material/liquid/fuel, gen_amount) + add_to_reagents(/decl/material/liquid/fuel, gen_amount) last_gen = world.time #undef WELDING_TOOL_HOTSPOT_TEMP_ACTIVE diff --git a/code/game/objects/items/weapons/tools/wirecutter.dm b/code/game/objects/items/weapons/tools/wirecutter.dm index a4dcc0ae38b..a0e20829dfd 100644 --- a/code/game/objects/items/weapons/tools/wirecutter.dm +++ b/code/game/objects/items/weapons/tools/wirecutter.dm @@ -5,9 +5,9 @@ icon_state = ICON_STATE_WORLD slot_flags = SLOT_LOWER_BODY w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':18,'y':10}" + center_of_mass = @'{"x":18,"y":10}' attack_verb = list("pinched", "nipped") sharp = 1 edge = 1 @@ -27,7 +27,7 @@ handle_color = pick(valid_colours) add_overlay(overlay_image(icon, "[get_world_inventory_state()]_handle", handle_color, flags=RESET_COLOR)) -/obj/item/wirecutters/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/wirecutters/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) overlay.color = handle_color . = ..() diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm index 558bc1cdae2..13bd7160c21 100644 --- a/code/game/objects/items/weapons/tools/wrench.dm +++ b/code/game/objects/items/weapons/tools/wrench.dm @@ -6,9 +6,9 @@ slot_flags = SLOT_LOWER_BODY material_force_multiplier = 0.2 w_class = ITEM_SIZE_SMALL - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' material = /decl/material/solid/metal/steel - center_of_mass = @"{'x':17,'y':16}" + center_of_mass = @'{"x":17,"y":16}' attack_verb = list("bashed", "battered", "bludgeoned", "whacked") material_alteration = MAT_FLAG_ALTERATION_COLOR drop_sound = 'sound/foley/bardrop1.ogg' diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 0854dca0c27..87c3f5e99aa 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -22,6 +22,34 @@ . = ..() color = get_random_colour() +/obj/item/towel/gold + name = "gold towel" + color = "#ffd700" + +/obj/item/towel/red + name = "red towel" + color = "#ff0000" + +/obj/item/towel/purple + name = "purple towel" + color = "#800080" + +/obj/item/towel/cyan + name = "cyan towel" + color = "#00ffff" + +/obj/item/towel/orange + name = "orange towel" + color = "#ff8c00" + +/obj/item/towel/pink + name = "pink towel" + color = "#ff6666" + +/obj/item/towel/light_blue + name = "light blue towel" + color = "#3fc0ea" + /obj/item/towel/black name = "black towel" color = "#222222" diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index 52ff7f8e691..56243d3d4d3 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -9,7 +9,7 @@ desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off." throwforce = 0 w_class = ITEM_SIZE_NORMAL - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel can_buckle = 0 //disallow manual un/buckling var/deployed = 0 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 61ff41a7d97..a20bb573569 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -117,19 +117,23 @@ anchored = TRUE can_buckle = 0 //no manual buckling or unbuckling - var/health = 25 + max_health = 25 var/countdown = 15 var/temporary = 1 var/mob/living/carbon/captured = null var/min_free_time = 50 var/max_free_time = 85 +SAVED_VAR(/obj/effect/energy_net, current_health) +SAVED_VAR(/obj/effect/energy_net, countdown) +SAVED_VAR(/obj/effect/energy_net, captured) + /obj/effect/energy_net/safari name = "animal net" desc = "An energized net meant to subdue animals." anchored = FALSE - health = 5 + max_health = 5 temporary = 0 min_free_time = 5 max_free_time = 10 @@ -152,11 +156,11 @@ if(temporary) countdown-- if(captured.buckled != src) - health = 0 + current_health = 0 if(get_turf(src) != get_turf(captured)) //just in case they somehow teleport around or countdown = 0 if(countdown <= 0) - health = 0 + current_health = 0 healthcheck() /obj/effect/energy_net/Move() @@ -185,7 +189,7 @@ reset_plane_and_layer() /obj/effect/energy_net/proc/healthcheck() - if(health <=0) + if(current_health <=0) set_density(0) if(countdown <= 0) visible_message("\The [src] fades away!") @@ -194,14 +198,14 @@ qdel(src) /obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() + current_health -= Proj.get_structure_damage() healthcheck() return 0 /obj/effect/energy_net/explosion_act() ..() if(!QDELETED(src)) - health = 0 + current_health = 0 healthcheck() /obj/effect/energy_net/attack_hand(var/mob/user) @@ -211,17 +215,17 @@ if(my_species) if(my_species.can_shred(user)) playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health -= rand(10, 20) + current_health -= rand(10, 20) else - health -= rand(1,3) + current_health -= rand(1,3) else - health -= rand(5,8) + current_health -= rand(5,8) to_chat(user, SPAN_DANGER("You claw at the energy net.")) healthcheck() return TRUE /obj/effect/energy_net/attackby(obj/item/W, mob/user) - health -= W.force + current_health -= W.force healthcheck() ..() @@ -235,7 +239,7 @@ "You attempt to free yourself from \the [src]!" ) if(do_after(user, rand(min_free_time, max_free_time), src, incapacitation_flags = INCAPACITATION_DISABLED)) - health = 0 + current_health = 0 healthcheck() return 1 else diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index 7848d0ff55b..493d580e432 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -46,7 +46,7 @@ if(get_fuel() < amount) . = FALSE //Try to burn as much as possible anyways if(linked_pack) - linked_pack.reagents.remove_reagent(/decl/material/liquid/fuel, amount) + linked_pack.remove_from_reagents(/decl/material/liquid/fuel, amount) /**Called by the parent when the welderpack is dropped */ /obj/item/weldingtool/weldpack/proc/on_pack_dropped(var/mob/user) @@ -77,7 +77,7 @@ var/obj/item/weldingtool/weldpack/welder = /obj/item/weldingtool/weldpack /obj/item/chems/weldpack/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fuel, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) /obj/item/chems/weldpack/Initialize(ml, material_key) if(ispath(welder)) diff --git a/code/game/objects/obj_edibility.dm b/code/game/objects/obj_edibility.dm new file mode 100644 index 00000000000..3c0d04db99e --- /dev/null +++ b/code/game/objects/obj_edibility.dm @@ -0,0 +1,183 @@ +/obj/proc/get_food_consumption_method(mob/eater) + return EATING_METHOD_EAT + +/obj/proc/is_edible(var/mob/eater) + return get_edible_material_amount(eater) > 0 + +/obj/proc/get_edible_material_amount(var/mob/eater) + return 0 + +/obj/proc/get_food_default_transfer_amount(mob/eater) + return eater?.get_eaten_transfer_amount(2) // arbitrary, should be overridden downstream + +/obj/proc/show_food_consumed_message(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + if(consumption_method == EATING_METHOD_EAT) + user.visible_message( + SPAN_NOTICE("\The [target] finishes eating \the [src]."), + SPAN_NOTICE("You finish eating \the [src].") + ) + else + user.visible_message( + SPAN_NOTICE("\The [target] finishes drinking \the [src]."), + SPAN_NOTICE("You finish drinking \the [src].") + ) + + else + user.visible_message( + SPAN_NOTICE("\The [user] feeds the last of \the [src] to \the [target]."), + SPAN_NOTICE("You feed the last of \the [src] to \the [target].") + ) + +/obj/proc/handle_consumed(mob/feeder, mob/eater, consumption_method = EATING_METHOD_EAT) + if(eater) + transfer_eaten_material(eater, get_food_default_transfer_amount(eater)) + play_feed_sound(eater, consumption_method) + if(!get_edible_material_amount(eater)) + if(feeder && eater) + show_food_consumed_message(feeder, eater, consumption_method) + if(consumption_method == EATING_METHOD_EAT) + feeder.drop_from_inventory(src) + eater.update_personal_goal(/datum/goal/achievement/specific_object/food, type) + if(consumption_method == EATING_METHOD_EAT) + physically_destroyed() + return TRUE + return FALSE + +/obj/proc/transfer_eaten_material(mob/eater, amount) + reagents?.trans_to_mob(eater, amount, CHEM_INGEST) + +/obj/proc/show_feed_message_start(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + if(consumption_method == EATING_METHOD_EAT) + to_chat(user, SPAN_NOTICE("You begin trying to take a bite from \the [target].")) + else + to_chat(user, SPAN_NOTICE("You begin trying to drink from \the [target].")) + else + user.visible_message(SPAN_NOTICE("\The [user] is trying to feed \the [src] to \the [target]!")) + +/obj/proc/show_feed_message_end(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(!user) + return + if(user != target) + user.visible_message(SPAN_NOTICE("\The [user] feeds some of \the [src] to \the [target]!")) + return + if(consumption_method == EATING_METHOD_DRINK) + to_chat(user, SPAN_NOTICE("You swallow a gulp from \the [src].")) + return + if(!isliving(user)) + to_chat(user, SPAN_NOTICE("You take a bite of \the [src].")) + return + var/mob/living/living_user = user + switch(living_user.get_food_satiation(consumption_method) / living_user.get_satiated_nutrition()) + if(-(INFINITY) to 0.2) + to_chat(living_user, SPAN_WARNING("You hungrily chew out a piece of [src] and gobble it!")) + if(0.2 to 0.4) + to_chat(living_user, SPAN_NOTICE("You hungrily begin to eat [src].")) + if(0.4 to 0.8) + to_chat(user, SPAN_NOTICE("You take a bite of \the [src].")) + else + to_chat(living_user, SPAN_NOTICE("You unwillingly chew a bit of [src].")) + +/obj/proc/show_food_inedible_message(mob/user, mob/target) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_WARNING("There is nothing in \the [src] that you can consume.")) + else + to_chat(user, SPAN_WARNING("There is nothing in \the [src] that \the [target] can consume.")) + +/obj/proc/show_food_no_mouth_message(mob/user, mob/target) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_WARNING("Where do you intend to put \the [src]? You don't have a mouth!")) + else + to_chat(user, SPAN_WARNING("Where do you intend to put \the [src]? \The [target] doesn't have a mouth!")) + +/obj/proc/play_feed_sound(var/mob/user, consumption_method = EATING_METHOD_EAT) + var/turf/play_turf = get_turf(user) + if(!play_turf) + return + switch(consumption_method) + if(EATING_METHOD_EAT) + playsound(user.loc, 'sound/items/eatfood.ogg', rand(10, 50), 1) + if(EATING_METHOD_DRINK) + playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) + +/obj/proc/show_food_empty_message(mob/user, mob/target) + to_chat(user, SPAN_NOTICE("\The [src] is empty.")) + +/obj/proc/is_food_empty(mob/eater) + return get_edible_material_amount(eater) <= 0 + +// General proc for handling an attempt to eat an item, or to eat from an +// item. At time of writing, only handles classic SS13 eating (reagents). +// Returns EATEN_INVALID for an inability to eat, EATEN_UNABLE for an attempt +// prevented by something, and EATEN_SUCCESS for a successful bite. +/obj/proc/handle_eaten_by_mob(var/mob/user, var/mob/target) + + if(!istype(user)) + return EATEN_INVALID + + if(!target) + target = user + + if(!istype(target)) + return EATEN_INVALID + + if(!is_edible(target)) + show_food_inedible_message(user, target) + return EATEN_UNABLE + + if(is_food_empty(target)) + show_food_empty_message(user, target) + return EATEN_UNABLE + + if(!target.check_has_mouth()) + show_food_no_mouth_message(user, target) + return EATEN_UNABLE + + if(!target.can_eat_food_currently(src, user)) + return EATEN_UNABLE + + var/blocked = target.check_mouth_coverage() + if(blocked) + to_chat(user, SPAN_NOTICE("\The [blocked] is in the way!")) + return EATEN_UNABLE + + if(user != target && !user.can_force_feed(target, src)) + return EATEN_UNABLE + + var/consumption_method = get_food_consumption_method(target) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(user != target) + if(!user.can_force_feed(target, src)) + return EATEN_UNABLE + show_feed_message_start(user, target, consumption_method) + if(!do_mob(user, target)) + return EATEN_UNABLE + var/contained = json_encode(REAGENT_LIST(src)) + admin_attack_log(user, target, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") + + show_feed_message_end(user, target, consumption_method) + if(consumption_method == EATING_METHOD_DRINK && target?.has_personal_goal(/datum/goal/achievement/specific_object/drink)) + for(var/R in reagents.reagent_volumes) + target.update_personal_goal(/datum/goal/achievement/specific_object/drink, R) + handle_consumed(user, target, consumption_method) + + return EATEN_SUCCESS + +/obj/attack_animal(var/mob/user) + if((isanimal(user) || isalien(user)) && is_edible(user) && handle_eaten_by_mob(user) == EATEN_SUCCESS) + // TODO: put this in the mob AI. + spawn(5) + if(user && QDELETED(src) && !user.client) + user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]") + return TRUE + return ..() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fa1932316bc..de8fe873b39 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -4,6 +4,11 @@ is_spawnable_type = TRUE abstract_type = /obj + ///The maximum health that the object can have. If set to ITEM_HEALTH_NO_DAMAGE, the object won't take any damage. + max_health = ITEM_HEALTH_NO_DAMAGE + ///The current health of the obj. Leave to null, unless you want the object to start at a different health than max_health. + current_health = null + var/obj_flags var/list/req_access var/list/matter //Used to store information about the contents of the object. @@ -16,11 +21,21 @@ var/armor_penetration = 0 var/anchor_fall = FALSE var/holographic = 0 //if the obj is a holographic object spawned by the holodeck - var/tmp/directional_offset ///JSON list of directions to x,y offsets to be applied to the object depending on its direction EX: {'NORTH':{'x':12,'y':5}, 'EAST':{'x':10,'y':50}} + var/tmp/directional_offset ///JSON list of directions to x,y offsets to be applied to the object depending on its direction EX: @'{"NORTH":{"x":12,"y":5}, "EAST":{"x":10,"y":50}}' + +/obj/Initialize(mapload) + . = ..() + temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient + create_matter() + //Only apply directional offsets if the mappers haven't set any offsets already + if(!pixel_x && !pixel_y && !pixel_w && !pixel_z) + update_directional_offset() + if(isnull(current_health)) + current_health = get_max_health() /obj/hitby(atom/movable/AM, var/datum/thrownthing/TT) - ..() - if(!anchored) + . = ..() + if(. && !anchored) step(src, AM.last_move) /obj/proc/create_matter() @@ -115,11 +130,10 @@ . |= DAM_LASER /obj/attackby(obj/item/O, mob/user) - if(obj_flags & OBJ_FLAG_ANCHORABLE) - if(IS_WRENCH(O)) - wrench_floor_bolts(user) - update_icon() - return + if((obj_flags & OBJ_FLAG_ANCHORABLE) && IS_WRENCH(O)) + wrench_floor_bolts(user) + update_icon() + return TRUE return ..() /obj/proc/wrench_floor_bolts(mob/user, delay=20) @@ -130,7 +144,7 @@ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") if(do_after(user, delay, src)) if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + to_chat(user, SPAN_NOTICE("You [anchored? "un" : ""]secured \the [src]!")) anchored = !anchored return 1 @@ -143,7 +157,7 @@ return ..() && w_class <= round(amt/20) /obj/proc/can_embed() - return is_sharp(src) + return FALSE /obj/examine(mob/user, distance, infix, suffix) . = ..() @@ -168,9 +182,6 @@ /obj/proc/after_wounding(obj/item/organ/external/organ, datum/wound) return -/obj/can_be_injected_by(var/atom/injector) - . = ATOM_IS_OPEN_CONTAINER(src) && ..() - /obj/get_mass() return min(2**(w_class-1), 100) @@ -280,39 +291,21 @@ // Interactions //////////////////////////////////////////////////////////////// /**Returns a text string to describe the current damage level of the item, or null if non-applicable. */ -/obj/proc/get_examined_damage_string(var/health_ratio) - if(health_ratio >= 1) +/obj/proc/get_examined_damage_string() + if(!can_take_damage()) + return + var/health_percent = get_percent_health() + if(health_percent >= 100) return SPAN_NOTICE("It looks fully intact.") - else if(health_ratio > 0.75) + else if(health_percent > 75) return SPAN_NOTICE("It has a few cracks.") - else if(health_ratio > 0.5) + else if(health_percent > 50) return SPAN_WARNING("It looks slightly damaged.") - else if(health_ratio > 0.25) + else if(health_percent > 25) return SPAN_WARNING("It looks moderately damaged.") else return SPAN_DANGER("It looks heavily damaged.") -// -// Alt Interactions -// -/obj/get_alt_interactions(var/mob/user) - . = ..() - LAZYADD(., /decl/interaction_handler/rotate) - -/decl/interaction_handler/rotate - name = "Rotate" - expected_target_type = /obj - -/decl/interaction_handler/rotate/is_possible(atom/target, mob/user, obj/item/prop) - . = ..() - if(.) - var/obj/O = target - . = !!(O.obj_flags & OBJ_FLAG_ROTATABLE) - -/decl/interaction_handler/rotate/invoked(atom/target, mob/user, obj/item/prop) - var/obj/O = target - O.rotate(user) - /obj/fluid_act(var/datum/reagents/fluids) ..() if(!QDELETED(src) && fluids?.total_volume) @@ -325,12 +318,49 @@ var/decl/material/mat = get_material() return !mat || mat.dissolves_in <= solvent_power -/obj/melt() +/obj/handle_melting(list/meltable_materials) + . = ..() + if(QDELETED(src)) + return + if(reagents?.total_volume) + reagents.trans_to(loc, reagents.total_volume) + dump_contents() + return place_melted_product(meltable_materials) + +/obj/proc/place_melted_product(list/meltable_materials) if(length(matter)) var/datum/gas_mixture/environment = loc?.return_air() for(var/mat in matter) var/decl/material/M = GET_DECL(mat) M.add_burn_product(environment, MOLES_PER_MATERIAL_UNIT(matter[mat])) matter = null - new /obj/effect/decal/cleanable/molten_item(src) + . = new /obj/effect/decal/cleanable/molten_item(src) qdel(src) + +/obj/can_be_injected_by(var/atom/injector) + return ATOM_IS_OPEN_CONTAINER(src) + +/obj/ProcessAtomTemperature() + . = ..() + if(QDELETED(src)) + return + // Bake any matter into the cooked form. + if(LAZYLEN(matter)) + var/new_matter + var/remove_matter + for(var/matter_type in matter) + var/decl/material/mat = GET_DECL(matter_type) + if(mat.bakes_into_material && !isnull(mat.bakes_into_at_temperature) && temperature >= mat.bakes_into_at_temperature) + LAZYINITLIST(new_matter) + new_matter[mat.bakes_into_material] += matter[matter_type] + LAZYDISTINCTADD(remove_matter, remove_matter) + if(LAZYLEN(new_matter)) + for(var/mat in new_matter) + matter[mat] = new_matter[mat] + if(LAZYLEN(remove_matter)) + for(var/mat in remove_matter) + matter -= mat + UNSETEMPTY(matter) + +/obj/proc/get_blend_objects() + return diff --git a/code/game/objects/objs_damage.dm b/code/game/objects/objs_damage.dm new file mode 100644 index 00000000000..c9eee11f755 --- /dev/null +++ b/code/game/objects/objs_damage.dm @@ -0,0 +1,25 @@ +/** + Returns whether this object is damaged. + */ +/obj/proc/is_damaged() + return can_take_damage() && (current_health < get_max_health()) + +/** + Returns TRUE if this object can take damage. + */ +/obj/proc/can_take_damage() + return (current_health != ITEM_HEALTH_NO_DAMAGE) && (get_max_health() != ITEM_HEALTH_NO_DAMAGE) + +/** + Returns the percentage of health remaining for this object. + */ +/obj/proc/get_percent_health() + return can_take_damage()? round((current_health * 100)/get_max_health(), HEALTH_ROUNDING) : 100 + +/** + Returns the percentage of damage done to this object. + */ +/obj/proc/get_percent_damages() + //Clamp from 0 to 100 so health values larger than max health don't return unhelpful numbers + return clamp(100 - get_percent_health(), 0, 100) + diff --git a/code/game/objects/objs_interactions.dm b/code/game/objects/objs_interactions.dm new file mode 100644 index 00000000000..b295c6fd71f --- /dev/null +++ b/code/game/objects/objs_interactions.dm @@ -0,0 +1,20 @@ +/obj/get_alt_interactions(mob/user) + . = ..() + LAZYADD(., /decl/interaction_handler/rotate) + +/** + Interaction for rotating an object in the world. + */ +/decl/interaction_handler/rotate + name = "Rotate" + expected_target_type = /obj + +/decl/interaction_handler/rotate/is_possible(atom/target, mob/user, obj/item/prop) + . = ..() + if(.) + var/obj/O = target + . = !!(O.obj_flags & OBJ_FLAG_ROTATABLE) + +/decl/interaction_handler/rotate/invoked(atom/target, mob/user, obj/item/prop) + var/obj/O = target + O.rotate(user) diff --git a/code/game/objects/random/date_based.dm b/code/game/objects/random/date_based.dm index 0eee0d30f9e..3987c3b3f34 100644 --- a/code/game/objects/random/date_based.dm +++ b/code/game/objects/random/date_based.dm @@ -5,7 +5,7 @@ /obj/random/date_based name = "random object (date based)" icon_state = "yup" - spawn_method = .proc/check_date + spawn_method = PROC_REF(check_date) var/datum/is_date/date_check /obj/random/date_based/Destroy() diff --git a/code/game/objects/random/random_multi.dm b/code/game/objects/random/random_multi.dm index 0cc5e826482..aef5ffd5e15 100644 --- a/code/game/objects/random/random_multi.dm +++ b/code/game/objects/random/random_multi.dm @@ -6,7 +6,7 @@ desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected." icon = 'icons/misc/mark.dmi' icon_state = "x3" - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT var/id // Group id var/weight // Probability weight for this spawn point diff --git a/code/game/objects/random/subtypes/maintenance.dm b/code/game/objects/random/subtypes/maintenance.dm index 843d88c59f4..b798ed40777 100644 --- a/code/game/objects/random/subtypes/maintenance.dm +++ b/code/game/objects/random/subtypes/maintenance.dm @@ -2,7 +2,7 @@ name = "random maintenance item" desc = "This is a random maintenance item." icon = 'icons/obj/items/gift_wrapped.dmi' - icon_state = "gift1" + icon_state = "gift_1" /obj/random/maintenance/spawn_choices() var/static/list/spawnable_choices = list( @@ -19,7 +19,7 @@ something, make sure it's not in one of the other lists.*/ name = "random clean maintenance item" desc = "This is a random clean maintenance item." icon = 'icons/obj/items/gift_wrapped.dmi' - icon_state = "gift2" + icon_state = "gift_2" /obj/random/maintenance/clean/spawn_choices() var/static/list/spawnable_choices = list( @@ -60,7 +60,6 @@ something, make sure it's not in one of the other lists.*/ /*Maintenance loot list. This one is for around medical areas*/ name = "random research maintenance item" desc = "This is a random research maintenance item." - icon_state = "science" /obj/random/maintenance/research/spawn_choices() var/static/list/spawnable_choices = list( @@ -92,7 +91,6 @@ something, make sure it's not in one of the other lists.*/ /*Maintenance loot list. This one is for around medical areas*/ name = "random engineering maintenance item" desc = "This is a random engineering maintenance item." - icon_state = "tool" /obj/random/maintenance/engineering/spawn_choices() var/static/list/spawnable_choices = list( @@ -137,8 +135,8 @@ something, make sure it's not in one of the other lists.*/ /obj/random/maintenance/clean = 320, /obj/item/storage/backpack/industrial = 5, /obj/item/storage/backpack/satchel = 5, - /obj/item/pickaxe = 4, - /obj/item/chems/toner_cartridge = 4, + /obj/item/tool/pickaxe = 4, + /obj/item/chems/toner_cartridge = 4, /obj/item/clothing/suit/storage/hazardvest = 4, /obj/item/clothing/suit/apron = 4, /obj/item/clothing/suit/apron/overalls = 3, @@ -165,7 +163,6 @@ something, make sure it's not in one of the other lists.*/ /*Maintenance loot list. This one is for around medical areas*/ name = "random medical maintenance item" desc = "This is a random medical maintenance item." - icon_state = "medical" /obj/random/maintenance/medical/spawn_choices() var/static/list/spawnable_choices = list( @@ -207,7 +204,6 @@ something, make sure it's not in one of the other lists.*/ /*Maintenance loot list. This one is for around security areas*/ name = "random security maintenance item" desc = "This is a random security maintenance item." - icon_state = "security" /obj/random/maintenance/security/spawn_choices() var/static/list/spawnable_choices = list( diff --git a/code/game/objects/random/subtypes/medical.dm b/code/game/objects/random/subtypes/medical.dm index e6e7f775a9b..4d8bf4ffbc6 100644 --- a/code/game/objects/random/subtypes/medical.dm +++ b/code/game/objects/random/subtypes/medical.dm @@ -34,22 +34,35 @@ /obj/random/medical/lite/spawn_choices() var/static/list/spawnable_choices = list( - /obj/item/stack/medical/bruise_pack = 4, - /obj/item/stack/medical/ointment = 4, - /obj/item/storage/pill_bottle/antibiotics = 2, - /obj/item/storage/pill_bottle/painkillers = 2, - /obj/item/storage/pill_bottle/strong_painkillers = 1, - /obj/item/stack/medical/advanced/bruise_pack = 2, - /obj/item/stack/medical/advanced/ointment = 2, - /obj/item/stack/medical/splint = 1, - /obj/item/chems/hypospray/autoinjector = 3, - /obj/item/storage/pill_bottle/burn_meds = 2, - /obj/item/storage/pill_bottle/antitoxins = 2, - /obj/item/storage/med_pouch/trauma = 2, - /obj/item/storage/med_pouch/burn = 2, - /obj/item/storage/med_pouch/toxin = 2, - /obj/item/storage/med_pouch/radiation = 2, - /obj/item/storage/med_pouch/oxyloss = 2 + /obj/item/stack/medical/bruise_pack = 4, + /obj/item/stack/medical/ointment = 4, + /obj/item/storage/pill_bottle/antibiotics = 2, + /obj/item/storage/pill_bottle/painkillers = 2, + /obj/item/storage/pill_bottle/strong_painkillers = 1, + /obj/item/stack/medical/advanced/bruise_pack = 2, + /obj/item/stack/medical/advanced/ointment = 2, + /obj/item/stack/medical/splint = 1, + /obj/item/chems/hypospray/autoinjector/stabilizer = 3, + /obj/item/storage/pill_bottle/burn_meds = 2, + /obj/item/storage/pill_bottle/antitoxins = 2, + /obj/item/storage/med_pouch/trauma = 2, + /obj/item/storage/med_pouch/burn = 2, + /obj/item/storage/med_pouch/toxin = 2, + /obj/item/storage/med_pouch/radiation = 2, + /obj/item/storage/med_pouch/oxyloss = 2 + ) + return spawnable_choices + +/obj/random/medical/pillbottle + name = "Random Pill Bottle" + desc = "This is a random pill bottle." + +/obj/random/medical/pillbottle/spawn_choices() + var/static/list/spawnable_choices = list( + /obj/item/storage/pill_bottle/antibiotics, + /obj/item/storage/pill_bottle/oxygen, + /obj/item/storage/pill_bottle/brute_meds, + /obj/item/storage/pill_bottle/sugariron ) return spawnable_choices diff --git a/code/game/objects/random/subtypes/misc.dm b/code/game/objects/random/subtypes/misc.dm index ddee5784499..0dd2f829bf0 100644 --- a/code/game/objects/random/subtypes/misc.dm +++ b/code/game/objects/random/subtypes/misc.dm @@ -1,13 +1,14 @@ /obj/random/contraband name = "Random Illegal Item" desc = "Hot Stuff." - icon = 'icons/obj/items/comb.dmi' - icon_state = "purplecomb" + icon = 'icons/obj/items/grooming/comb.dmi' + icon_state = ICON_STATE_WORLD + color = COLOR_PURPLE spawn_nothing_percentage = 50 /obj/random/contraband/spawn_choices() var/static/list/spawnable_choices = list( - /obj/item/haircomb = 4, + /obj/item/grooming/comb = 4, /obj/item/storage/pill_bottle/painkillers = 3, /obj/item/storage/pill_bottle/strong_painkillers = 1, /obj/item/storage/pill_bottle/happy = 2, @@ -89,7 +90,7 @@ /obj/item/pen/multi, /obj/item/storage/box/matches, /obj/item/stack/material/cardstock/mapped/cardboard, - /obj/item/storage/fancy/cigarettes, + /obj/item/storage/box/fancy/cigarettes, /obj/item/deck/cards ) return spawnable_choices @@ -120,10 +121,8 @@ spawnable_choices[trash_type] = 95 for(var/trash_type in typesof(/obj/item/trash/cigbutt)) spawnable_choices[trash_type] = 95 - spawnable_choices -= /obj/item/trash/plate spawnable_choices -= /obj/item/trash/snack_bowl spawnable_choices -= /obj/item/trash/syndi_cakes - spawnable_choices -= /obj/item/trash/tray var/lunches = lunchables_lunches() for(var/lunch in lunches) spawnable_choices[lunches[lunch]] = 1 @@ -184,16 +183,16 @@ /obj/item/stack/material/panel/mapped/plastic/ten, /obj/item/stack/material/plank/mapped/wood/ten, /obj/item/stack/material/cardstock/mapped/cardboard/ten, - /obj/item/stack/material/reinforced/mapped/plasteel/ten, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten, /obj/item/stack/material/sheet/mapped/steel/fifty, - /obj/item/stack/material/reinforced/mapped/fiberglass/fifty, + /obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, /obj/item/stack/material/panel/mapped/plastic/fifty, /obj/item/stack/material/plank/mapped/wood/fifty, /obj/item/stack/material/cardstock/mapped/cardboard/fifty, - /obj/item/stack/material/reinforced/mapped/plasteel/fifty, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/rods/ten, /obj/item/stack/material/rods/fifty ) @@ -238,20 +237,20 @@ /obj/random/smokes name = "random smokeable" desc = "This is a random smokeable item." - icon = 'icons/obj/cigarettes.dmi' + icon = 'icons/obj/items/storage/cigpack/acme.dmi' icon_state = "Bpacket" /obj/random/smokes/spawn_choices() var/static/list/spawnable_choices = list( - /obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/dromedaryco = 4, - /obj/item/storage/fancy/cigarettes/killthroat = 1, - /obj/item/storage/fancy/cigarettes/luckystars = 3, - /obj/item/storage/fancy/cigarettes/jerichos = 3, - /obj/item/storage/fancy/cigarettes/menthols = 2, - /obj/item/storage/fancy/cigarettes/carcinomas = 3, - /obj/item/storage/fancy/cigarettes/professionals = 2, - /obj/item/storage/fancy/cigar = 1, + /obj/item/storage/box/fancy/cigarettes = 5, + /obj/item/storage/box/fancy/cigarettes/dromedaryco = 4, + /obj/item/storage/box/fancy/cigarettes/killthroat = 1, + /obj/item/storage/box/fancy/cigarettes/luckystars = 3, + /obj/item/storage/box/fancy/cigarettes/jerichos = 3, + /obj/item/storage/box/fancy/cigarettes/menthols = 2, + /obj/item/storage/box/fancy/cigarettes/carcinomas = 3, + /obj/item/storage/box/fancy/cigarettes/professionals = 2, + /obj/item/storage/box/fancy/cigar = 1, /obj/item/clothing/mask/smokable/cigarette = 2, /obj/item/clothing/mask/smokable/cigarette/menthol = 2, /obj/item/clothing/mask/smokable/cigarette/cigar = 1, @@ -277,7 +276,7 @@ /obj/item/storage/box = 5, /obj/item/storage/box/donkpockets = 3, /obj/item/storage/box/sinpockets = 1, - /obj/item/storage/box/donut = 2, + /obj/item/storage/box/fancy/donut = 2, /obj/item/storage/box/cups = 3, /obj/item/storage/box/mousetraps = 4, /obj/item/storage/box/engineer = 3, @@ -318,7 +317,7 @@ name = "random loot" desc = "This is some random loot." icon = 'icons/obj/items/gift_wrapped.dmi' - icon_state = "gift3" + icon_state = "gift_3" /obj/random/loot/spawn_choices() var/static/list/spawnable_choices = list( @@ -345,7 +344,7 @@ /obj/item/stack/material/ingot/mapped/platinum/ten = 8, /obj/item/stack/material/aerogel/mapped/tritium/ten = 7, /obj/item/stack/material/segment/mapped/mhydrogen/ten = 6, - /obj/item/stack/material/reinforced/mapped/plasteel/ten = 9, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten = 9, /obj/item/stack/material/ingot/mapped/copper/ten = 8, /obj/item/storage/box/monkeycubes = 5, /obj/item/storage/firstaid/surgery = 4, @@ -370,7 +369,7 @@ name = "random vending machine" desc = "This is a randomly selected vending machine." icon = 'icons/obj/vending.dmi' - icon_state = "" + icon_state = "coffee-hellfire" /obj/random/vendor/spawn_choices() var/static/list/spawnable_choices = list( @@ -383,23 +382,71 @@ /obj/random/lipstick name = "random lipstick" desc = "This is a tube of lipstick." - icon = 'icons/obj/items/lipstick.dmi' + icon = 'icons/obj/items/cosmetics/lipstick.dmi' icon_state = "lipstick_closed" /obj/random/lipstick/spawn_choices() var/static/list/spawnable_choices = list( - /obj/item/lipstick, - /obj/item/lipstick/blue, - /obj/item/lipstick/green, - /obj/item/lipstick/turquoise, - /obj/item/lipstick/violet, - /obj/item/lipstick/yellow, - /obj/item/lipstick/orange, - /obj/item/lipstick/white, - /obj/item/lipstick/black + /obj/item/cosmetics/lipstick/red, + /obj/item/cosmetics/lipstick/blue, + /obj/item/cosmetics/lipstick/green, + /obj/item/cosmetics/lipstick/turquoise, + /obj/item/cosmetics/lipstick/violet, + /obj/item/cosmetics/lipstick/yellow, + /obj/item/cosmetics/lipstick/orange, + /obj/item/cosmetics/lipstick/white, + /obj/item/cosmetics/lipstick/black ) return spawnable_choices +/obj/random/eyeshadow + name = "random eyeshadow" + desc = "This is a tube of eyeshadow." + icon = 'icons/obj/items/cosmetics/eyeshadow.dmi' + icon_state = "eyeshadow_closed" + +/obj/random/eyeshadow/spawn_choices() + var/static/list/spawnable_choices = list( + /obj/item/cosmetics/eyeshadow/red, + /obj/item/cosmetics/eyeshadow/blue, + /obj/item/cosmetics/eyeshadow/green, + /obj/item/cosmetics/eyeshadow/turquoise, + /obj/item/cosmetics/eyeshadow/violet, + /obj/item/cosmetics/eyeshadow/yellow, + /obj/item/cosmetics/eyeshadow/orange, + /obj/item/cosmetics/eyeshadow/white, + /obj/item/cosmetics/eyeshadow/black + ) + return spawnable_choices + +/obj/random/makeup + name = "random makeup" + desc = "This is a tube of makeup." + icon = 'icons/obj/items/cosmetics/lipstick.dmi' + icon_state = "lipstick_closed" + +/obj/random/makeup/spawn_choices() + var/static/list/spawnable_choices = list( + /obj/item/cosmetics/lipstick/red, + /obj/item/cosmetics/lipstick/blue, + /obj/item/cosmetics/lipstick/green, + /obj/item/cosmetics/lipstick/turquoise, + /obj/item/cosmetics/lipstick/violet, + /obj/item/cosmetics/lipstick/yellow, + /obj/item/cosmetics/lipstick/orange, + /obj/item/cosmetics/lipstick/white, + /obj/item/cosmetics/lipstick/black, + /obj/item/cosmetics/eyeshadow/red, + /obj/item/cosmetics/eyeshadow/blue, + /obj/item/cosmetics/eyeshadow/green, + /obj/item/cosmetics/eyeshadow/turquoise, + /obj/item/cosmetics/eyeshadow/violet, + /obj/item/cosmetics/eyeshadow/yellow, + /obj/item/cosmetics/eyeshadow/orange, + /obj/item/cosmetics/eyeshadow/white, + /obj/item/cosmetics/eyeshadow/black + ) + return spawnable_choices /obj/random/crayon name = "random crayon" diff --git a/code/game/objects/random/subtypes/mobs.dm b/code/game/objects/random/subtypes/mobs.dm index de10a2ed398..412d2e2f972 100644 --- a/code/game/objects/random/subtypes/mobs.dm +++ b/code/game/objects/random/subtypes/mobs.dm @@ -1,7 +1,8 @@ /obj/random/mouse name = "Random Mouse" desc = "This is a random boring maus." - icon_state = "mouse_gray" + icon = 'icons/mob/simple_animal/mouse_gray.dmi' + icon_state = "world-resting" spawn_nothing_percentage = 15 /obj/random/mouse/spawn_choices() diff --git a/code/game/objects/random/subtypes/paperwork.dm b/code/game/objects/random/subtypes/paperwork.dm index 4d566079313..4dc4421a8e7 100644 --- a/code/game/objects/random/subtypes/paperwork.dm +++ b/code/game/objects/random/subtypes/paperwork.dm @@ -17,8 +17,8 @@ /obj/random/clipboard name = "random clipboard" desc = "This is a random material clipboard." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "clipboard_preview" + icon = 'icons/obj/items/clipboard.dmi' + icon_state = "clipboard" /obj/random/clipboard/spawn_choices() var/static/list/spawnable_choices = list( diff --git a/code/game/objects/random/subtypes/tech.dm b/code/game/objects/random/subtypes/tech.dm index 5d3d2f86dc5..52f09fe5b46 100644 --- a/code/game/objects/random/subtypes/tech.dm +++ b/code/game/objects/random/subtypes/tech.dm @@ -2,7 +2,7 @@ name = "random scanner" desc = "This is a random technology scanner." icon = 'icons/obj/items/device/scanner/atmos_scanner.dmi' - icon_state = "atmos" + icon_state = ICON_STATE_WORLD /obj/random/technology_scanner/spawn_choices() var/static/list/spawnable_choices = list( @@ -98,7 +98,7 @@ name = "random assembly" desc = "This is a random circuit assembly." icon = 'icons/obj/items/gift_wrapped.dmi' - icon_state = "gift1" + icon_state = "gift_1" /obj/random/assembly/spawn_choices() var/static/list/spawnable_choices = list( diff --git a/code/game/objects/random/subtypes/tools.dm b/code/game/objects/random/subtypes/tools.dm index e7af77f0465..fa591d19b4b 100644 --- a/code/game/objects/random/subtypes/tools.dm +++ b/code/game/objects/random/subtypes/tools.dm @@ -25,16 +25,16 @@ /obj/random/tool = 320, /obj/item/weldingtool/electric = 15, /obj/item/weldingtool/experimental = 3, - /obj/item/hydraulic_cutter = 1, - /obj/item/power_drill = 1 + /obj/item/tool/hydraulic_cutter = 1, + /obj/item/tool/power_drill = 1 ) return spawnable_choices /obj/random/toolbox name = "random toolbox" desc = "This is a random toolbox." - icon = 'icons/obj/items/storage/toolbox.dmi' - icon_state = "red" + icon = 'icons/obj/items/storage/toolboxes/toolbox_red.dmi' + icon_state = ICON_STATE_WORLD /obj/random/toolbox/spawn_choices() var/static/list/spawnable_choices = list( diff --git a/code/game/objects/random/subtypes/toys.dm b/code/game/objects/random/subtypes/toys.dm index ff0465d923e..02b5aa65728 100644 --- a/code/game/objects/random/subtypes/toys.dm +++ b/code/game/objects/random/subtypes/toys.dm @@ -155,8 +155,8 @@ /obj/random/plushie name = "random plushie" desc = "This is a random plushie." - icon = 'icons/obj/toy/toy.dmi' - icon_state = "nymphplushie" + icon = 'icons/obj/toy/plush_cat.dmi' + icon_state = ICON_STATE_WORLD /obj/random/plushie/spawn_choices() var/static/list/spawnable_choices = list( @@ -169,7 +169,7 @@ /obj/random/plushie/large name = "random large plushie" desc = "This is a random large plushie." - icon = 'icons/obj/toy/toy.dmi' + icon = 'icons/obj/structures/plushie.dmi' icon_state = "droneplushie" /obj/random/plushie/large/spawn_choices() diff --git a/code/game/objects/random/subtypes/weapons.dm b/code/game/objects/random/subtypes/weapons.dm index 379cf7d7674..f058612dd92 100644 --- a/code/game/objects/random/subtypes/weapons.dm +++ b/code/game/objects/random/subtypes/weapons.dm @@ -2,7 +2,7 @@ name = "Random Energy Weapon" desc = "This is a random energy weapon." icon = 'icons/obj/guns/energy_gun.dmi' - icon_state = "energykill100" + icon_state = ICON_STATE_WORLD /obj/random/energy/spawn_choices() var/static/list/spawnable_choices = list( @@ -33,7 +33,7 @@ name = "Random Projectile Weapon" desc = "This is a random projectile weapon." icon = 'icons/obj/guns/revolvers.dmi' - icon_state = "revolver" + icon_state = ICON_STATE_WORLD /obj/random/projectile/spawn_choices() var/static/list/spawnable_choices = list( @@ -66,7 +66,7 @@ name = "Random Handgun" desc = "This is a random sidearm." icon = 'icons/obj/guns/pistol.dmi' - icon_state = "secguncomp" + icon_state = ICON_STATE_WORLD /obj/random/handgun/spawn_choices() var/static/list/spawnable_choices = list( diff --git a/code/game/objects/structures/__structure.dm b/code/game/objects/structures/__structure.dm index 3367f9f096f..3819b54d18a 100644 --- a/code/game/objects/structures/__structure.dm +++ b/code/game/objects/structures/__structure.dm @@ -3,16 +3,21 @@ w_class = ITEM_SIZE_STRUCTURE layer = STRUCTURE_LAYER abstract_type = /obj/structure + max_health = 50 + temperature_sensitive = TRUE + var/structure_flags var/last_damage_message - var/health = 0 - var/maxhealth = 50 var/hitsound = 'sound/weapons/smash.ogg' var/parts_type var/parts_amount var/footstep_type var/mob_offset +SAVED_VAR(/obj/structure, reagents) +SAVED_VAR(/obj/structure, current_health) +SAVED_VAR(/obj/structure, req_access) + /obj/structure/create_matter() ..() if(material || reinf_material) @@ -38,16 +43,11 @@ if(!CanFluidPass()) fluid_update(TRUE) -/obj/structure/get_examined_damage_string(health_ratio) - if(maxhealth == -1) - return - . = ..() - /obj/structure/examine(mob/user, distance, infix, suffix) . = ..() if(distance <= 3) - var/damage_desc = get_examined_damage_string(health / maxhealth) + var/damage_desc = get_examined_damage_string() if(length(damage_desc)) to_chat(user, damage_desc) @@ -92,7 +92,7 @@ return FALSE /obj/structure/proc/take_damage(var/damage) - if(health == -1) // This object does not take damage. + if(current_health == -1) // This object does not take damage. return if(material && material.is_brittle()) @@ -103,11 +103,11 @@ damage *= STRUCTURE_BRITTLE_MATERIAL_DAMAGE_MULTIPLIER playsound(loc, hitsound, 75, 1) - health = clamp(health - damage, 0, maxhealth) + var/current_max_health = get_max_health() + current_health = clamp(current_health - damage, 0, current_max_health) + show_damage_message(current_health/current_max_health) - show_damage_message(health/maxhealth) - - if(health == 0) + if(current_health == 0) physically_destroyed() /obj/structure/proc/show_damage_message(var/perc) @@ -135,6 +135,18 @@ if(dmg) take_damage(dmg) +/obj/structure/ProcessAtomTemperature() + var/update_mats = FALSE + if(material && material.bakes_into_material && !isnull(material.bakes_into_at_temperature) && temperature >= material.bakes_into_at_temperature) + material = GET_DECL(material.bakes_into_material) + update_mats = TRUE + if(reinf_material && reinf_material.bakes_into_material && !isnull(reinf_material.bakes_into_at_temperature) && temperature >= reinf_material.bakes_into_at_temperature) + reinf_material = GET_DECL(reinf_material.bakes_into_material) + update_mats = TRUE + if(update_mats) + update_materials() + . = ..() + /obj/structure/Destroy() var/turf/T = get_turf(src) . = ..() @@ -222,7 +234,7 @@ take_damage(rand(5, 15)) /obj/structure/proc/can_repair(var/mob/user) - if(health >= maxhealth) + if(current_health >= get_max_health()) to_chat(user, SPAN_NOTICE("\The [src] does not need repairs.")) return FALSE return TRUE diff --git a/code/game/objects/structures/_structure_construction.dm b/code/game/objects/structures/_structure_construction.dm index 7c2f7d060a0..a229fc9e3d9 100644 --- a/code/game/objects/structures/_structure_construction.dm +++ b/code/game/objects/structures/_structure_construction.dm @@ -2,6 +2,8 @@ var/wired var/tool_interaction_flags +SAVED_VAR(/obj/structure, wired) + /obj/structure/proc/handle_default_wrench_attackby(var/mob/user, var/obj/item/wrench) if((tool_interaction_flags & TOOL_INTERACTION_ANCHOR) && can_unanchor(user)) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) @@ -103,14 +105,15 @@ . = istype(tool, /obj/item/stack/material) && tool.get_material_type() == get_material_type() /obj/structure/proc/handle_repair(mob/user, obj/item/tool) + var/current_max_health = get_max_health() var/obj/item/stack/stack = tool - var/amount_needed = CEILING((maxhealth - health)/DOOR_REPAIR_AMOUNT) + var/amount_needed = CEILING((current_max_health - current_health)/DOOR_REPAIR_AMOUNT) var/used = min(amount_needed,stack.amount) if(used) - to_chat(user, SPAN_NOTICE("You fit [used] [stack.singular_name]\s to damaged areas of \the [src].")) + to_chat(user, SPAN_NOTICE("You fit [stack.get_string_for_amount(used)] to damaged areas of \the [src].")) stack.use(used) last_damage_message = null - health = clamp(health, health + used*DOOR_REPAIR_AMOUNT, maxhealth) + current_health = clamp(current_health + used*DOOR_REPAIR_AMOUNT, current_health, current_max_health) /obj/structure/attackby(obj/item/O, mob/user) diff --git a/code/game/objects/structures/_structure_icon.dm b/code/game/objects/structures/_structure_icon.dm index a86bcde9779..7ce63f067e6 100644 --- a/code/game/objects/structures/_structure_icon.dm +++ b/code/game/objects/structures/_structure_icon.dm @@ -1,7 +1,7 @@ var/global/list/default_blend_objects = list( /obj/machinery/door, /obj/structure/door, - /obj/structure/plasticflaps, + /obj/structure/flaps, /turf/simulated/wall, /turf/exterior/wall, /turf/unsimulated/wall, diff --git a/code/game/objects/structures/_structure_materials.dm b/code/game/objects/structures/_structure_materials.dm index 2a8421a82cd..9979d2cc402 100644 --- a/code/game/objects/structures/_structure_materials.dm +++ b/code/game/objects/structures/_structure_materials.dm @@ -4,6 +4,10 @@ var/material_alteration var/dismantled +SAVED_VAR(/obj/structure, material) +SAVED_VAR(/obj/structure, reinf_material) +SAVED_VAR(/obj/structure, dismantled) + /obj/structure/get_material() . = material @@ -22,14 +26,15 @@ else set_opacity(initial(opacity)) hitsound = material?.hitsound || initial(hitsound) - if(maxhealth != -1) - maxhealth = initial(maxhealth) + material?.integrity * get_material_health_modifier() + var/current_max_health = get_max_health() + if(current_max_health != -1) + current_max_health = initial(current_max_health) + material?.integrity * get_material_health_modifier() if(reinf_material) var/bonus_health = reinf_material.integrity * get_material_health_modifier() - maxhealth += bonus_health + current_max_health += bonus_health if(!keep_health) - health += bonus_health - health = keep_health ? min(health, maxhealth) : maxhealth + current_health += bonus_health + current_health = keep_health ? min(current_health, current_max_health) : current_max_health update_icon() /obj/structure/proc/update_material_name(var/override_name) diff --git a/code/game/objects/structures/banners.dm b/code/game/objects/structures/banners.dm index 36ae6ad5b25..b432310a0cc 100644 --- a/code/game/objects/structures/banners.dm +++ b/code/game/objects/structures/banners.dm @@ -7,12 +7,12 @@ anchored = TRUE density = FALSE opacity = FALSE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE layer = ABOVE_WINDOW_LAYER obj_flags = OBJ_FLAG_ANCHORABLE tool_interaction_flags = (TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT) material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR - maxhealth = 50 + max_health = 50 /// Reference to any banner currently hung on the frame. var/obj/item/banner/banner diff --git a/code/game/objects/structures/barricade.dm b/code/game/objects/structures/barricade.dm index e10b88526d5..a7709ec0961 100644 --- a/code/game/objects/structures/barricade.dm +++ b/code/game/objects/structures/barricade.dm @@ -5,10 +5,10 @@ icon_state = "barricade" anchored = TRUE density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE layer = ABOVE_WINDOW_LAYER material_alteration = MAT_FLAG_ALTERATION_ALL - maxhealth = 100 + max_health = 100 var/spike_damage //how badly it smarts when you run into this like a rube var/list/poke_description = list("gored", "spiked", "speared", "stuck", "stabbed") diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index d1d9d9d5014..42f4ad03af0 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -6,7 +6,7 @@ appearance_flags = 0 anchored = TRUE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/cult = 0 /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index b5e55077eb7..046bd6e2119 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -78,6 +78,9 @@ LINEN BINS /obj/item/bedsheet/brown icon = 'icons/obj/bedsheets/bedsheet_brown.dmi' +/obj/item/bedsheet/ian + icon = 'icons/obj/bedsheets/bedsheet_ian.dmi' + ////////////////////////////////////////// // Bedsheet bin ////////////////////////////////////////// diff --git a/code/game/objects/structures/benches.dm b/code/game/objects/structures/benches.dm index 1d0d303dc05..ed9805ff78b 100644 --- a/code/game/objects/structures/benches.dm +++ b/code/game/objects/structures/benches.dm @@ -47,4 +47,8 @@ /obj/structure/table/bench/glass color = COLOR_DEEP_SKY_BLUE alpha = 77 - reinf_material = /decl/material/solid/glass \ No newline at end of file + reinf_material = /decl/material/solid/glass + +/obj/structure/table/bench/marble + color = COLOR_OFF_WHITE + reinf_material = /decl/material/solid/stone/marble diff --git a/code/game/objects/structures/bookcase.dm b/code/game/objects/structures/bookcase.dm index 2b3e3b5a7a1..cca3eb52e12 100644 --- a/code/game/objects/structures/bookcase.dm +++ b/code/game/objects/structures/bookcase.dm @@ -19,6 +19,8 @@ var/global/list/station_bookcases = list() global.station_bookcases += src get_or_create_extension(src, /datum/extension/labels/single) . = ..() + if(length(contents)) + update_icon() /obj/structure/bookcase/Destroy() global.station_bookcases -= src @@ -50,18 +52,16 @@ var/global/list/station_bookcases = list() name = "Medical Manuals bookcase" /obj/structure/bookcase/manuals/medical/Initialize() - . = ..() new /obj/item/book/manual/medical_diagnostics_manual(src) new /obj/item/book/manual/medical_diagnostics_manual(src) new /obj/item/book/manual/medical_diagnostics_manual(src) new /obj/item/book/manual/chemistry_recipes(src) - update_icon() + . = ..() /obj/structure/bookcase/manuals/engineering name = "Engineering Manuals bookcase" /obj/structure/bookcase/manuals/engineering/Initialize() - . = ..() new /obj/item/book/manual/engineering_construction(src) new /obj/item/book/manual/engineering_particle_accelerator(src) new /obj/item/book/manual/engineering_hacking(src) @@ -70,7 +70,7 @@ var/global/list/station_bookcases = list() new /obj/item/book/manual/engineering_singularity_safety(src) new /obj/item/book/manual/evaguide(src) new /obj/item/book/manual/rust_engine(src) - update_icon() + . = ..() /obj/structure/bookcase/cart name = "book cart" diff --git a/code/game/objects/structures/charge_pylon.dm b/code/game/objects/structures/charge_pylon.dm index 16bb11dac27..0d4fbe83d5a 100644 --- a/code/game/objects/structures/charge_pylon.dm +++ b/code/game/objects/structures/charge_pylon.dm @@ -57,6 +57,6 @@ charge_user(AM) /obj/structure/charge_pylon/hitby(atom/AM) - ..() - if(ishuman(AM)) + . = ..() + if(. && ishuman(AM)) charge_user(AM) diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index a57ef2228f0..efc3fc13583 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -6,7 +6,7 @@ var/global/list/closets = list() icon = 'icons/obj/closets/bases/closet.dmi' icon_state = "base" density = TRUE - maxhealth = 100 + max_health = 100 material = /decl/material/solid/metal/steel tool_interaction_flags = TOOL_INTERACTION_ANCHOR @@ -28,6 +28,11 @@ var/global/list/closets = list() var/opened = FALSE var/locked = FALSE +SAVED_VAR(/obj/structure/closet, welded) +SAVED_VAR(/obj/structure/closet, broken) +SAVED_VAR(/obj/structure/closet, opened) +SAVED_VAR(/obj/structure/closet, locked) + /obj/structure/closet/Destroy() global.closets -= src . = ..() @@ -313,7 +318,7 @@ var/global/list/closets = list() ) physically_destroyed() -/obj/structure/closet/receive_mouse_drop(atom/dropping, mob/user) +/obj/structure/closet/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() var/atom/movable/AM = dropping if(!. && istype(AM) && opened && !istype(AM, /obj/structure/closet) && AM.simulated && !AM.anchored && (large || !ismob(AM))) diff --git a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm index 92e3ef289e1..a56a1ac66df 100644 --- a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm +++ b/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm @@ -209,6 +209,12 @@ "biohazard" = COLOR_OFF_WHITE ) +/decl/closet_appearance/bio/medical + extra_decals = list( + "lower_half_solid" = COLOR_PALE_BLUE_GRAY, + "biohazard" = COLOR_OFF_WHITE + ) + /decl/closet_appearance/secure_closet can_lock = TRUE @@ -471,6 +477,13 @@ "hydro" = COLOR_DARK_GREEN_GRAY ) +/decl/closet_appearance/secure_closet/hydroponics/xenoflora + extra_decals = list( + "stripe_vertical_right_partial" = COLOR_PURPLE, + "stripe_vertical_mid_partial" = COLOR_PURPLE, + "hydro" = COLOR_PURPLE + ) + /decl/closet_appearance/secure_closet/chaplain decals = list( "lower_side_vent", diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 7dcc53d2aeb..8b6fa6f83e7 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -2,6 +2,10 @@ name = "cabinet" desc = "Old will forever be in fashion." closet_appearance = /decl/closet_appearance/cabinet + //mapper preview + icon = 'icons/obj/closets/bases/cabinet.dmi' + icon_state = "base" + color = WOOD_COLOR_RICH /obj/structure/closet/acloset name = "strange closet" @@ -13,6 +17,8 @@ desc = "It's a storage unit for things that have no right being here." closet_appearance = /decl/closet_appearance/tactical anchored = FALSE + //mapper preview + color = COLOR_RED_GRAY /obj/structure/closet/gimmick/russian name = "russian surplus closet" diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 97b84c05003..86958be9549 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -2,6 +2,8 @@ name = "level-3 biohazard suit closet" desc = "It's a storage unit for level-3 biohazard gear." closet_appearance = /decl/closet_appearance/bio + //mapper preview + color = COLOR_PALE_ORANGE /obj/structure/closet/l3closet/general/WillContain() return list( @@ -42,8 +44,19 @@ /obj/item/tank/emergency/oxygen/engi ) +/obj/structure/closet/l3closet/security/multi/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/security = 5, + /obj/item/clothing/head/bio_hood/security = 5, + /obj/item/clothing/mask/gas/half = 5, + /obj/item/tank/emergency/oxygen/engi = 5, + ) + + /obj/structure/closet/l3closet/janitor closet_appearance = /decl/closet_appearance/bio/janitor + //mapper preview + color = COLOR_PURPLE /obj/structure/closet/l3closet/janitor/WillContain() return list( @@ -53,6 +66,14 @@ /obj/item/tank/emergency/oxygen/engi ) +/obj/structure/closet/l3closet/janitor/multi/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/janitor = 5, + /obj/item/clothing/head/bio_hood/janitor = 5, + /obj/item/clothing/mask/gas/half = 5, + /obj/item/tank/emergency/oxygen/engi = 5, + ) + /obj/structure/closet/l3closet/scientist closet_appearance = /decl/closet_appearance/bio/science @@ -84,3 +105,25 @@ /obj/item/clothing/mask/gas/half, /obj/item/tank/emergency/oxygen/engi ) + +/obj/structure/closet/l3closet/medical + closet_appearance = /decl/closet_appearance/bio/medical + +/obj/structure/closet/l3closet/medical/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/general = 3, + /obj/item/clothing/head/bio_hood/general = 3, + /obj/item/clothing/mask/gas/half = 3, + /obj/item/tank/emergency/oxygen/engi = 3, + ) + +/obj/structure/closet/l3closet/medical/cmo + closet_appearance = /decl/closet_appearance/bio/command + +/obj/structure/closet/l3closet/medical/cmo/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/cmo, + /obj/item/clothing/head/bio_hood/cmo, + /obj/item/clothing/mask/gas/half, + /obj/item/tank/emergency/oxygen/engi + ) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index d799fd3cfcf..47b4ce90aef 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -1,6 +1,8 @@ /obj/structure/closet/malf/suits desc = "It's a storage unit for operational gear." closet_appearance = /decl/closet_appearance/tactical + //mapper preview + color = COLOR_RED_GRAY /obj/structure/closet/malf/suits/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm index 1dedcb8c8a6..b18ae84828b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm @@ -7,7 +7,7 @@ locked = TRUE wall_mounted = 0 //never solid (You can always pass over it) - health = 200 + current_health = 200 /obj/structure/closet/secure_closet/slice_into_parts(obj/item/weldingtool/WT, mob/user) to_chat(user, "\The [src] is too strong to be taken apart.") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 1ded9746617..8ab5b796199 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -2,6 +2,10 @@ name = "booze closet" req_access = list(access_bar) closet_appearance = /decl/closet_appearance/cabinet/secure + //mapper preview + icon = 'icons/obj/closets/bases/cabinet.dmi' + icon_state = "base" + color = WOOD_COLOR_RICH /obj/structure/closet/secure_closet/bar/WillContain() return list(/obj/item/chems/drinks/bottle/small/beer = 10) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 2ded899fcb4..53333eb9661 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -2,6 +2,8 @@ name = "cargo technician's locker" req_access = list(access_cargo) closet_appearance = /decl/closet_appearance/secure_closet/cargo + //mapper preview + color = COLOR_WARM_YELLOW /obj/structure/closet/secure_closet/cargotech/WillContain() return list( @@ -19,6 +21,8 @@ name = "quartermaster's locker" req_access = list(access_qm) closet_appearance = /decl/closet_appearance/secure_closet/cargo/qm + //mapper preview + color = COLOR_WARM_YELLOW /obj/structure/closet/secure_closet/quartermaster/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 34494dca87e..f9c854b059a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -2,6 +2,8 @@ name = "chief engineer's locker" closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce req_access = list(access_ce) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/engineering_chief/WillContain() return list( @@ -28,6 +30,8 @@ name = "electrical supplies" req_access = list(access_engine_equip) closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/secure_closet/engineering_electrical/WillContain() return list( @@ -42,6 +46,8 @@ name = "welding supplies" req_access = list(access_construction) closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/secure_closet/engineering_welding/WillContain() return list( @@ -56,6 +62,8 @@ name = "engineer's locker" req_access = list(access_engine_equip) closet_appearance = /decl/closet_appearance/secure_closet/engineering + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/secure_closet/engineering_personal/WillContain() return list( @@ -75,6 +83,8 @@ name = "technician's locker" req_access = list(access_atmospherics) closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/secure_closet/atmos_personal/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 39f01e28bbc..b7b188e2d87 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -32,7 +32,7 @@ return list( /obj/item/chems/drinks/milk = 6, /obj/item/chems/drinks/soymilk = 4, - /obj/item/storage/fancy/egg_box = 4 + /obj/item/storage/box/fancy/egg_box = 4 ) /obj/structure/closet/secure_closet/freezer/money diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index 90d559c11ab..b523e51c7a6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -55,3 +55,16 @@ add_overlay("locked") else add_overlay("open") + +// Subtypes +/obj/structure/closet/secure_closet/guncabinet/sidearm + name = "emergency weapon cabinet" + req_access = list( + access_armory, + access_captain + ) + +/obj/structure/closet/secure_closet/guncabinet/sidearm/WillContain() + return list( + /obj/item/gun/energy/gun = 4 + ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index dc8417131df..f1428bdad12 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -2,6 +2,8 @@ name = "botanist's locker" req_access = list(access_hydroponics) closet_appearance = /decl/closet_appearance/secure_closet/hydroponics + //mapper preview + color = COLOR_GREEN_GRAY /obj/structure/closet/secure_closet/hydroponics/WillContain() return list( @@ -17,3 +19,15 @@ /obj/item/wirecutters/clippers, /obj/item/chems/spray/plantbgone, ) + + +/obj/structure/closet/secure_closet/hydroponics/sci + name = "xenoflorist's locker" + req_access = list(access_xenobiology) + closet_appearance = /decl/closet_appearance/secure_closet/hydroponics/xenoflora + +/obj/structure/closet/secure_closet/hydroponics/sci/WillContain() + . = ..() + . += /obj/item/clothing/head/bio_hood/scientist + . += /obj/item/clothing/suit/bio_suit/scientist + . += /obj/item/clothing/mask/ diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 1af9ff2e060..aaaf18918b6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -16,6 +16,8 @@ desc = "Filled with medical junk." closet_appearance = /decl/closet_appearance/secure_closet/medical req_access = list(access_medical_equip) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/medical1/WillContain() return list( @@ -34,6 +36,8 @@ name = "medical doctor's locker" req_access = list(access_medical_equip) closet_appearance = /decl/closet_appearance/secure_closet/medical/alt + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/medical3/WillContain() return list( @@ -59,6 +63,8 @@ desc = "Supplies for a first responder." closet_appearance = /decl/closet_appearance/secure_closet/medical req_access = list(access_medical_equip) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/paramedic/WillContain() return list( @@ -84,12 +90,14 @@ /obj/item/clothing/accessory/storage/vest ) -/obj/structure/closet/secure_closet/CMO +/obj/structure/closet/secure_closet/cmo name = "chief medical officer's locker" req_access = list(access_cmo) closet_appearance = /decl/closet_appearance/secure_closet/cmo + //mapper preview + color = COLOR_BABY_BLUE -/obj/structure/closet/secure_closet/CMO/WillContain() +/obj/structure/closet/secure_closet/cmo/WillContain() return list( new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med)), new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/med, 50), @@ -112,6 +120,8 @@ desc = "Store dangerous chemicals in here." closet_appearance = /decl/closet_appearance/secure_closet/medical req_access = list(access_chemistry) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/chemical/WillContain() return list( @@ -128,15 +138,30 @@ wall_mounted = 1 storage_types = CLOSET_STORAGE_ITEMS req_access = list(access_medical_equip) + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/medical_wall/Initialize() . = ..() tool_interaction_flags &= ~TOOL_INTERACTION_ANCHOR +/obj/structure/closet/secure_closet/medical_wall/pills + name = "pill cabinet" + +/obj/structure/closet/secure_closet/medical_wall/pills/WillContain() + return list( + /obj/item/storage/pill_bottle/antibiotics = 1, + /obj/item/storage/pill_bottle/painkillers = 1, + /obj/item/storage/pill_bottle/antitoxins = 1, + /obj/item/storage/pill_bottle/burn_meds = 1, + /obj/random/medical/pillbottle = 1 + ) + /obj/structure/closet/secure_closet/counselor name = "counselor's locker" closet_appearance = /decl/closet_appearance/secure_closet/medical req_access = list(access_psychiatrist) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/counselor/WillContain() return list( @@ -160,8 +185,9 @@ /obj/structure/closet/secure_closet/virology name = "virologist's locker" closet_appearance = /decl/closet_appearance/secure_closet/medical/virology - req_access = list(access_virology) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/virology/WillContain() return list( @@ -189,6 +215,8 @@ desc = "Everything you need to keep the lunatics at bay." closet_appearance = /decl/closet_appearance/secure_closet/medical/alt req_access = list(access_psychiatrist) + //mapper preview + color = COLOR_OFF_WHITE /obj/structure/closet/secure_closet/psychiatry/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index f029f33f2cf..c11ee1054f2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -6,6 +6,8 @@ var/registered_name = null +SAVED_VAR(/obj/structure/closet/secure_closet/personal, registered_name) + /obj/structure/closet/secure_closet/personal/WillContain() return list( new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), @@ -22,6 +24,10 @@ /obj/structure/closet/secure_closet/personal/cabinet closet_appearance = /decl/closet_appearance/cabinet/secure + //mapper preview + icon = 'icons/obj/closets/bases/cabinet.dmi' + icon_state = "base" + color = WOOD_COLOR_RICH /obj/structure/closet/secure_closet/personal/cabinet/WillContain() return list(/obj/item/storage/backpack/satchel/grey/withwallet, /obj/item/radio/headset) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 3064e8412d0..b28f43c6291 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -30,12 +30,12 @@ /obj/item/storage/belt/general ) -/obj/structure/closet/secure_closet/RD +/obj/structure/closet/secure_closet/research_director name = "chief science officer's locker" req_access = list(access_rd) closet_appearance = /decl/closet_appearance/secure_closet/rd -/obj/structure/closet/secure_closet/RD/WillContain() +/obj/structure/closet/secure_closet/research_director/WillContain() return list( /obj/item/clothing/suit/bio_suit/scientist = 2, /obj/item/clothing/head/bio_hood/scientist = 2, @@ -60,3 +60,26 @@ /obj/item/storage/box/syringes, /obj/item/chems/glass/bottle/sedatives ) + +/obj/structure/closet/secure_closet/pilot + name = "pilot locker" + req_access = list(access_xenobiology) + +/obj/structure/closet/secure_closet/pilot/WillContain() + return list( + /obj/item/storage/backpack/parachute, + /obj/item/knife/utility, + /obj/item/clothing/under/pilot, + /obj/item/clothing/suit/storage/toggle/bomber, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/shoes/color/black, + /obj/item/clothing/gloves/color/black, + /obj/item/radio/headset/headset_sci, + /obj/item/flashlight, + /obj/item/chems/food/liquidfood, + /obj/item/chems/drinks/cans/waterbottle, + /obj/item/storage/box/flares, + /obj/item/cell/device, + /obj/item/radio, + /obj/item/storage/backpack/satchel + ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 40915022f8e..291d3fc8f64 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -2,6 +2,8 @@ name = "captain's locker" req_access = list(access_captain) closet_appearance = /decl/closet_appearance/secure_closet/command + //mapper preview + color = COLOR_BLUE_GRAY /obj/structure/closet/secure_closet/captains/WillContain() return list( @@ -26,6 +28,8 @@ name = "head of personnel's locker" closet_appearance = /decl/closet_appearance/secure_closet/command/hop req_access = list(access_hop) + //mapper preview + color = COLOR_PALE_BLUE_GRAY /obj/structure/closet/secure_closet/hop/WillContain() return list( @@ -40,6 +44,8 @@ name = "head of personnel's attire" req_access = list(access_hop) closet_appearance = /decl/closet_appearance/secure_closet/command/hop + //mapper preview + color = COLOR_PALE_BLUE_GRAY /obj/structure/closet/secure_closet/hop2/WillContain() return list( @@ -62,6 +68,8 @@ name = "head of security's locker" req_access = list(access_hos) closet_appearance = /decl/closet_appearance/secure_closet/security/hos + //mapper preview + color = COLOR_NT_RED /obj/structure/closet/secure_closet/hos/WillContain() return list( @@ -89,6 +97,8 @@ name = "warden's locker" req_access = list(access_armory) closet_appearance = /decl/closet_appearance/secure_closet/security/warden + //mapper preview + color = COLOR_NT_RED /obj/structure/closet/secure_closet/warden/WillContain() return list( @@ -115,6 +125,8 @@ name = "security officer's locker" req_access = list(access_brig) closet_appearance = /decl/closet_appearance/secure_closet/security + //mapper preview + color = COLOR_NT_RED /obj/structure/closet/secure_closet/security/WillContain() return list( @@ -139,6 +151,10 @@ name = "detective's cabinet" req_access = list(access_forensics_lockers) closet_appearance = /decl/closet_appearance/cabinet/secure + //mapper preview + icon = 'icons/obj/closets/bases/cabinet.dmi' + icon_state = "base" + color = WOOD_COLOR_RICH /obj/structure/closet/secure_closet/detective/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 548a0f3fc3f..25e2311390f 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE setup = 0 - health = 0 //destroying the statue kills the mob within + current_health = 0 //destroying the statue kills the mob within var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. var/intialBrute = 0 @@ -23,7 +23,7 @@ L.client.eye = src L.forceMove(src) L.set_sdisability(MUTED) - health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues + current_health = L.current_health + 100 //stoning damaged mobs will result in easier to shatter statues intialTox = L.getToxLoss() intialFire = L.getFireLoss() intialBrute = L.getBruteLoss() @@ -40,7 +40,7 @@ icon_state = "corgi" desc = "If it takes forever, I will wait for you..." - if(health == 0) //meaning if the statue didn't find a valid target + if(current_health == 0) //meaning if the statue didn't find a valid target return INITIALIZE_HINT_QDEL START_PROCESSING(SSobj, src) @@ -50,7 +50,7 @@ timer-- for(var/mob/living/M in src) //Go-go gadget stasis field M.setToxLoss(intialTox) - M.adjustFireLoss(intialFire - M.getFireLoss()) + M.adjustFireLoss(intialFire - M.getFireLoss(), do_update_health = FALSE) M.adjustBruteLoss(intialBrute - M.getBruteLoss()) M.setOxyLoss(intialOxy) if (timer <= 0) @@ -65,7 +65,7 @@ for(var/mob/living/M in src) M.dropInto(loc) M.unset_sdisability(MUTED) - M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob + M.take_overall_damage((M.current_health - current_health - 100),0) //any new damage the statue incurred is transfered to the mob if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE @@ -80,12 +80,12 @@ return /obj/structure/closet/statue/proc/check_health() - if(health <= 0) + if(current_health <= 0) for(var/mob/M in src) shatter(M) /obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() + current_health -= Proj.get_structure_damage() check_health() return @@ -95,16 +95,16 @@ M.explosion_act(severity) ..() if(!QDELETED(src)) - health -= 60 / severity + current_health -= 60 / severity check_health() /obj/structure/closet/statue/attackby(obj/item/I, mob/user) - health -= I.force + current_health -= I.force user.do_attack_animation(src) visible_message("[user] strikes [src] with [I].") check_health() -/obj/structure/closet/statue/receive_mouse_drop(atom/dropping, var/mob/user) +/obj/structure/closet/statue/receive_mouse_drop(atom/dropping, mob/user, params) return TRUE /obj/structure/closet/statue/relaymove() diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 9a40dbca333..166ca4c2323 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -2,6 +2,8 @@ name = "armory closet" desc = "Why is this here?" closet_appearance = /decl/closet_appearance/tactical/alt + //mapper preview + color = COLOR_PALE_BTL_GREEN /obj/structure/closet/syndicate/personal desc = "It's a storage unit for operative gear." @@ -126,7 +128,7 @@ /obj/item/stack/material/ingot/mapped/silver/fifty, /obj/item/stack/material/puck/mapped/uranium/fifty, /obj/item/stack/material/gemstone/mapped/diamond/fifty, - /obj/item/stack/material/reinforced/mapped/plasteel/fifty, + /obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/rods/fifty ) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index b7656597e93..6ba1c566a84 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -18,6 +18,8 @@ name = "emergency closet" desc = "It's a storage unit for emergency breathmasks and o2 tanks." closet_appearance = /decl/closet_appearance/oxygen + //mapper preview + color = COLOR_LIGHT_CYAN /obj/structure/closet/emcloset/WillContain() //Guaranteed kit - two tanks and masks @@ -37,7 +39,8 @@ name = "fire-safety closet" desc = "It's a storage unit for fire-fighting supplies." closet_appearance = /decl/closet_appearance/oxygen/fire - + //mapper preview + color = COLOR_RED_GRAY /obj/structure/closet/firecloset/WillContain() return list( @@ -64,6 +67,8 @@ name = "tool closet" desc = "It's a storage unit for tools." closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/toolcloset/WillContain() return list( @@ -92,6 +97,8 @@ name = "radiation suit closet" desc = "It's a storage unit for rad-protective suits." closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/radiation + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/radiation/WillContain() return list( @@ -107,6 +114,8 @@ name = "\improper EOD closet" desc = "It's a storage unit for explosion-protective suits." closet_appearance = /decl/closet_appearance/bomb + //mapper preview + color = COLOR_DARK_GREEN_GRAY /obj/structure/closet/bombcloset/WillContain() return list( @@ -120,6 +129,8 @@ name = "\improper EOD closet" desc = "It's a storage unit for explosion-protective suits." closet_appearance = /decl/closet_appearance/bomb/security + //mapper preview + color = COLOR_DARK_GREEN_GRAY /obj/structure/closet/bombclosetsecurity/WillContain() return list( @@ -141,8 +152,9 @@ storage_types = CLOSET_STORAGE_ITEMS setup = 0 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' icon = 'icons/obj/closets/bases/wall.dmi' + color = COLOR_NT_RED /obj/structure/closet/hydrant/Initialize(ml, _mat, _reinf_mat) . = ..() @@ -170,7 +182,7 @@ storage_types = CLOSET_STORAGE_ITEMS setup = 0 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' icon = 'icons/obj/closets/bases/wall.dmi' /obj/structure/closet/medical_wall/Initialize() @@ -192,8 +204,9 @@ storage_types = CLOSET_STORAGE_ITEMS setup = 0 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' icon = 'icons/obj/closets/bases/wall.dmi' + color = COLOR_WARM_YELLOW /obj/structure/closet/shipping_wall/Initialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index 1263c4b7451..d25b0084ee4 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -12,7 +12,7 @@ storage_types = CLOSET_STORAGE_ITEMS setup = 0 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' /obj/structure/closet/walllocker/Initialize() . = ..() @@ -22,10 +22,11 @@ name = "wall suit storage" desc = "A nook in the wall storing a couple of space suits." closet_appearance = /decl/closet_appearance/wall/suit + color = COLOR_LIGHT_CYAN /obj/structure/closet/walllocker/suit/WillContain() return list( /obj/item/clothing/head/helmet/space = 2, /obj/item/clothing/suit/space = 2, /obj/item/tank/oxygen = 2 - ) \ No newline at end of file + ) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 05848fa76e5..325085c4c51 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -261,6 +261,8 @@ /obj/structure/closet/wardrobe/tactical name = "tactical equipment" closet_appearance = /decl/closet_appearance/tactical + //mapper preview + color = COLOR_RED_GRAY /obj/structure/closet/wardrobe/tactical/WillContain() return list( diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 1d1506e3ab7..7ebd5dcf9b5 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -3,11 +3,14 @@ desc = "A rectangular steel crate." icon = 'icons/obj/closets/bases/crate.dmi' closet_appearance = /decl/closet_appearance/crate - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE setup = 0 storage_types = CLOSET_STORAGE_ITEMS var/rigged = 0 + //mapper preview + color = COLOR_GRAY40 + /obj/structure/closet/crate/open() if((atom_flags & ATOM_FLAG_OPEN_CONTAINER) && !opened && can_open()) object_shaken() @@ -74,6 +77,8 @@ name = "plastic crate" desc = "A rectangular plastic crate." closet_appearance = /decl/closet_appearance/crate/plastic + //mapper preview + color = COLOR_GRAY80 /obj/structure/closet/crate/internals name = "internals crate" @@ -91,11 +96,13 @@ desc = "A heavy, metal trashcart with wheels." closet_appearance = /decl/closet_appearance/cart/trash icon = 'icons/obj/closets/bases/cart.dmi' + color = COLOR_BOTTLE_GREEN /obj/structure/closet/crate/medical name = "medical crate" desc = "A medical crate." closet_appearance = /decl/closet_appearance/crate/medical + color = COLOR_GRAY80 /obj/structure/closet/crate/rcd name = "\improper RCD crate" @@ -129,6 +136,7 @@ desc = "A freezer." temperature = -16 CELSIUS closet_appearance = /decl/closet_appearance/crate/freezer + color = COLOR_BABY_BLUE var/target_temp = T0C - 40 var/cooling_power = 40 @@ -175,11 +183,13 @@ name = "radioactive crate" desc = "A leadlined crate with a radiation sign on it." closet_appearance = /decl/closet_appearance/crate/radiation + color = COLOR_BROWN_ORANGE /obj/structure/closet/crate/radiation_gear name = "radioactive gear crate" desc = "A crate with a radiation sign on it." closet_appearance = /decl/closet_appearance/crate/radiation + color = COLOR_BROWN_ORANGE /obj/structure/closet/crate/radiation_gear/WillContain() return list(/obj/item/clothing/suit/radiation = 8) @@ -188,11 +198,13 @@ name = "weapons crate" desc = "A secure weapons crate." closet_appearance = /decl/closet_appearance/crate/secure/weapon + color = COLOR_GREEN_GRAY /obj/structure/closet/crate/secure/explosives name = "explosives crate" desc = "A secure exploxives crate." closet_appearance = /decl/closet_appearance/crate/secure/hazard + color = COLOR_NT_RED /obj/structure/closet/crate/secure/shuttle name = "storage compartment" @@ -204,6 +216,7 @@ name = "gear crate" desc = "A secure gear crate." closet_appearance = /decl/closet_appearance/crate/secure/weapon + color = COLOR_GREEN_GRAY /obj/structure/closet/crate/secure/hydrosec name = "secure hydroponics crate" @@ -232,6 +245,7 @@ /obj/structure/closet/crate/secure/large/supermatter closet_appearance = /decl/closet_appearance/large_crate/secure/hazard + color = COLOR_NT_RED //fluff variant /obj/structure/closet/crate/secure/large/reinforced @@ -252,6 +266,19 @@ /obj/item/scanner/plant = 2 ) +/obj/structure/closet/crate/hydroponics/exotic + name = "exotic seeds crate" + desc = "All you need to destroy that pesky planet." + +/obj/structure/closet/crate/hydroponics/exotic/WillContain() + return list( + /obj/item/seeds/random = 6, + /obj/item/seeds/ambrosiavulgarisseed = 2, + /obj/item/seeds/kudzuseed, + /obj/item/seeds/libertymycelium, + /obj/item/seeds/reishimycelium + ) + /obj/structure/closet/crate/secure/biohazard name = "biohazard cart" desc = "A heavy cart with extensive sealing. You shouldn't eat things you find in it." @@ -279,6 +306,7 @@ req_access = list(access_surgery) closet_appearance = /decl/closet_appearance/cart/biohazard/alt movable_flags = MOVABLE_FLAG_WHEELED + color = COLOR_SURGERY_BLUE /obj/structure/closet/crate/paper_refill name = "paper refill crate" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 7d65a11debc..860d8889bea 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/shipping_crates.dmi' icon_state = "densecrate" density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE material = /decl/material/solid/organic/wood /obj/structure/largecrate/Initialize() diff --git a/code/game/objects/structures/crates_lockers/med_crate.dm b/code/game/objects/structures/crates_lockers/med_crate.dm index ff9017a34ea..04d537597e3 100644 --- a/code/game/objects/structures/crates_lockers/med_crate.dm +++ b/code/game/objects/structures/crates_lockers/med_crate.dm @@ -17,6 +17,7 @@ name = "\improper Burn crate" desc = "A crate with burn equipment." closet_appearance = /decl/closet_appearance/crate/medical + color = COLOR_GRAY80 /obj/structure/closet/crate/med_crate/burn/WillContain() return list( @@ -32,6 +33,7 @@ name = "\improper Low oxygen crate" desc = "A crate with low oxygen equipment." closet_appearance = /decl/closet_appearance/crate/medical/oxygen + color = COLOR_GRAY80 /obj/structure/closet/crate/med_crate/oxyloss/WillContain() return list( @@ -43,6 +45,7 @@ name = "\improper Toxin crate" desc = "A crate with toxin equipment." closet_appearance = /decl/closet_appearance/crate/medical/toxins + color = COLOR_GRAY80 /obj/structure/closet/crate/med_crate/toxin/WillContain() return list( diff --git a/code/game/objects/structures/crematorium.dm b/code/game/objects/structures/crematorium.dm index d8240222d2a..cd170f82f0c 100644 --- a/code/game/objects/structures/crematorium.dm +++ b/code/game/objects/structures/crematorium.dm @@ -210,7 +210,7 @@ /obj/structure/crematorium_tray/attack_robot(mob/user) return attack_hand_with_interaction_checks(user) -/obj/structure/crematorium_tray/receive_mouse_drop(atom/dropping, mob/user) +/obj/structure/crematorium_tray/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && (ismob(dropping) || istype(dropping, /obj/structure/closet/body_bag))) var/atom/movable/AM = dropping diff --git a/code/game/objects/structures/defensive_barrier.dm b/code/game/objects/structures/defensive_barrier.dm index d3e3a8f7adc..1392abac19e 100644 --- a/code/game/objects/structures/defensive_barrier.dm +++ b/code/game/objects/structures/defensive_barrier.dm @@ -10,13 +10,13 @@ can_buckle = TRUE material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_DESC | MAT_FLAG_ALTERATION_NAME - maxhealth = 200 + max_health = 200 var/secured /obj/structure/defensive_barrier/Initialize() . = ..() update_icon() - events_repository.register(/decl/observ/dir_set, src, src, .proc/update_layers) + events_repository.register(/decl/observ/dir_set, src, src, PROC_REF(update_layers)) /obj/structure/defensive_barrier/physically_destroyed(var/skip_qdel) visible_message(SPAN_DANGER("\The [src] was destroyed!")) @@ -24,7 +24,7 @@ . = ..() /obj/structure/defensive_barrier/Destroy() - events_repository.unregister(/decl/observ/dir_set, src, src, .proc/update_layers) + events_repository.unregister(/decl/observ/dir_set, src, src, PROC_REF(update_layers)) . = ..() /obj/structure/defensive_barrier/proc/update_layers() @@ -90,8 +90,8 @@ visible_message(SPAN_NOTICE("\The [user] packs up \the [src].")) var/obj/item/defensive_barrier/B = new(get_turf(user), material?.type) playsound(src, 'sound/items/Deconstruct.ogg', 100, 1) - B.stored_health = health - B.stored_max_health = maxhealth + B.stored_health = current_health + B.stored_max_health = get_max_health() B.add_fingerprint(user) qdel(src) return TRUE @@ -197,7 +197,7 @@ playsound(src, 'sound/effects/extout.ogg', 100, 1) var/obj/structure/defensive_barrier/B = new(get_turf(user), material?.type) B.set_dir(user.dir) - B.health = stored_health + B.current_health = stored_health if(loc == user) user.drop_from_inventory(src) qdel(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index bf06d41d05c..e5ab45af656 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE alpha = 150 - maxhealth = 100 + max_health = 100 hitsound = 'sound/effects/Glasshit.ogg' req_access = null material = /decl/material/solid/glass diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 49159d1ed8f..b1d42c21206 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -21,6 +21,14 @@ var/symbol_color = "none" var/width = 1 // For multi-tile doors +SAVED_VAR(/obj/structure/door_assembly, state) +SAVED_VAR(/obj/structure/door_assembly, glass) +SAVED_VAR(/obj/structure/door_assembly, glass_material) +SAVED_VAR(/obj/structure/door_assembly, door_color) +SAVED_VAR(/obj/structure/door_assembly, stripe_color) +SAVED_VAR(/obj/structure/door_assembly, symbol_color) +SAVED_VAR(/obj/structure/door_assembly, electronics) + /obj/structure/door_assembly/Initialize(mapload, _mat, _reinf_mat, _dir) . = ..(mapload, _mat, _reinf_mat) set_dir(_dir) diff --git a/code/game/objects/structures/doors/_door.dm b/code/game/objects/structures/doors/_door.dm index ee3d56236f0..0c46391b7e1 100644 --- a/code/game/objects/structures/doors/_door.dm +++ b/code/game/objects/structures/doors/_door.dm @@ -4,20 +4,20 @@ icon_state = "metal" hitsound = 'sound/weapons/genhit.ogg' material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC | MAT_FLAG_ALTERATION_COLOR - maxhealth = 50 + max_health = 50 density = TRUE anchored = TRUE opacity = TRUE var/datum/lock/lock - var/has_window = FALSE var/changing_state = FALSE var/icon_base var/door_sound_volume = 25 + var/connections = 0 /obj/structure/door/Initialize() - . = ..() + ..() if(!istype(material)) return INITIALIZE_HINT_QDEL if(lock) @@ -25,15 +25,40 @@ if(!icon_base) icon_base = material.door_icon_base update_icon() - update_nearby_tiles(need_rebuild = TRUE) if(material?.luminescence) set_light(material.luminescence, 0.5, material.color) + return INITIALIZE_HINT_LATELOAD + +/obj/structure/door/LateInitialize(mapload, dir=0, populate_parts=TRUE) + ..() + update_nearby_tiles(need_rebuild = TRUE) + +/obj/structure/door/update_nearby_tiles(need_rebuild) + . = ..() + update_connections(TRUE) /obj/structure/door/Destroy() update_nearby_tiles() QDEL_NULL(lock) return ..() +/obj/structure/door/get_blend_objects() + var/static/list/blend_objects = list( + /obj/structure/wall_frame, + /obj/structure/window, + /obj/structure/grille, + /obj/machinery/door + ) + return blend_objects + +/obj/structure/door/update_connections(var/propagate = FALSE) + . = ..() + if(propagate && isturf(loc)) + for(var/turf/simulated/wall/W in RANGE_TURFS(loc, 1)) + W.wall_connections = null + W.other_connections = null + W.queue_icon_update() + /obj/structure/door/get_material_health_modifier() . = 10 @@ -114,7 +139,9 @@ if(lock) if(istype(I, /obj/item/key)) - if(!lock.toggle(I)) + if(lock.toggle(I)) + to_chat(user, SPAN_NOTICE("You [lock.status ? "lock" : "unlock"] \the [src] with \the [I].")) + else to_chat(user, SPAN_WARNING("\The [I] does not fit in the lock!")) return TRUE if(lock.pick_lock(I,user)) @@ -146,9 +173,13 @@ /obj/structure/door/CanFluidPass(coming_from) return !density -/obj/structure/door/Bumped(atom/AM) - if(!density || changing_state) +/obj/structure/door/Bumped(atom/movable/AM) + if(!density || changing_state || !istype(AM)) return + + if(AM.get_object_size() <= MOB_SIZE_SMALL) + return + if(ismob(AM)) var/mob/M = AM if(M.restrained() || issmall(M)) diff --git a/code/game/objects/structures/emergency_dispenser.dm b/code/game/objects/structures/emergency_dispenser.dm index c8b7075f4d5..6bc0e2528f8 100644 --- a/code/game/objects/structures/emergency_dispenser.dm +++ b/code/game/objects/structures/emergency_dispenser.dm @@ -7,7 +7,7 @@ icon_state = "world" anchored = TRUE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/static/list/spawnitems = list(/obj/item/tank/emergency/oxygen,/obj/item/clothing/mask/breath) var/amount = 3 // spawns each items X times. diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 208a3af9305..6bccabb09f6 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -6,7 +6,7 @@ anchored = TRUE density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-29}, 'SOUTH':{'y':29}, 'EAST':{'x':-29}, 'WEST':{'x':29}}" + directional_offset = @'{"NORTH":{"y":-29}, "SOUTH":{"y":29}, "EAST":{"x":-29}, "WEST":{"x":29}}' var/obj/item/chems/spray/extinguisher/has_extinguisher var/opened = 0 diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm index c3d6311309b..fc6227b924f 100644 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ b/code/game/objects/structures/fireaxe_cabinet.dm @@ -6,7 +6,7 @@ anchored = TRUE density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/damage_threshold = 15 var/open @@ -40,7 +40,7 @@ toggle_open(user) return TRUE -/obj/structure/fireaxecabinet/handle_mouse_drop(atom/over, mob/user) +/obj/structure/fireaxecabinet/handle_mouse_drop(atom/over, mob/user, params) if(over == user) if(!open) to_chat(user, SPAN_WARNING("\The [src] is closed.")) diff --git a/code/game/objects/structures/fires.dm b/code/game/objects/structures/fires.dm index 5149986e14b..76d0cf2ed6f 100644 --- a/code/game/objects/structures/fires.dm +++ b/code/game/objects/structures/fires.dm @@ -29,7 +29,7 @@ var/const/light_color_low = "#ff0000" var/list/affected_exterior_turfs - var/list/exterior_temperature = 30 // Celcius, but it is added directly to a Kelvin value so don't do any conversion. + var/list/exterior_temperature = 30 // Celsius, but it is added directly to a Kelvin value so don't do any conversion. var/output_temperature = T0C+50 // The amount that the fire will try to heat up the air. var/fuel = 0 // How much fuel is left? @@ -123,6 +123,11 @@ if(oxidizer.gas_flags & XGM_GAS_OXIDIZER) return TRUE +/obj/structure/fire_source/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + . = ..() + if(!QDELETED(src)) + light() + /obj/structure/fire_source/proc/light(var/force) if(!check_atmos()) return FALSE @@ -148,13 +153,14 @@ burn(user) else visible_message(SPAN_NOTICE("\The [user] removes \the [removing] from \the [src].")) + update_icon() return TRUE if(lit != FIRE_LIT && user.a_intent == I_HURT) to_chat(user, SPAN_DANGER("You start stomping on \the [src], trying to destroy it.")) if(do_after(user, 5 SECONDS, src)) visible_message(SPAN_DANGER("\The [user] stamps and kicks at \the [src] until it is completely destroyed.")) - qdel(src) + physically_destroyed() return TRUE return ..() @@ -179,8 +185,8 @@ /obj/structure/fire_source/attackby(var/obj/item/thing, var/mob/user) - if(ATOM_SHOULD_TEMPERATURE_ENQUEUE(thing) && user.a_intent != I_HURT) - thing.HandleObjectHeating(src, user, DIRECT_HEAT) + if(ATOM_SHOULD_TEMPERATURE_ENQUEUE(thing) && user.a_intent != I_HURT && lit == FIRE_LIT) + thing.handle_external_heating(DIRECT_HEAT, src, user) return TRUE if(ATOM_IS_OPEN_CONTAINER(thing)) diff --git a/code/game/objects/structures/fishtanks.dm b/code/game/objects/structures/fishtanks.dm index e36abb928f4..99236832272 100644 --- a/code/game/objects/structures/fishtanks.dm +++ b/code/game/objects/structures/fishtanks.dm @@ -24,7 +24,7 @@ var/global/list/fishtank_cache = list() density = TRUE atom_flags = ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CLIMBABLE mob_offset = TRUE - maxhealth = 50 + max_health = 50 var/deleting var/fill_type @@ -60,7 +60,7 @@ var/global/list/fishtank_cache = list() . = ..() /obj/structure/glass_tank/populate_reagents() - reagents.add_reagent(fill_type, reagents.maximum_volume) + add_to_reagents(fill_type, reagents.maximum_volume) /obj/structure/glass_tank/attack_hand(var/mob/user) if(user.a_intent == I_HURT) @@ -94,11 +94,9 @@ var/global/list/fishtank_cache = list() /obj/structure/glass_tank/dump_contents() . = ..() - if(reagents && reagents.total_volume) - var/turf/T = get_turf(src) - var/obj/effect/fluid/F = locate() in T - if(!F) F = new(T) - reagents.trans_to_holder(F.reagents, reagents.total_volume) + var/turf/T = get_turf(src) + if(reagents?.total_volume && T) + reagents.trans_to_turf(T, T.reagents, reagents.total_volume) var/global/list/global/aquarium_states_and_layers = list( "b" = FLY_LAYER - 0.02, diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/flaps.dm similarity index 73% rename from code/game/objects/structures/plasticflaps.dm rename to code/game/objects/structures/flaps.dm index 48b13099a1e..6a813be6fee 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/flaps.dm @@ -1,12 +1,14 @@ -/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY - name = "plastic flaps" - desc = "Completely impassable - or are they?" +/obj/structure/flaps + name = "flaps" + desc = "A set of thin, dangling flaps. Completely impassable - or are they?" icon = 'icons/obj/structures/plastic_flaps.dmi' icon_state = "plasticflaps" density = FALSE anchored = TRUE layer = ABOVE_HUMAN_LAYER explosion_resistance = 5 + material = /decl/material/solid/organic/plastic + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC obj_flags = OBJ_FLAG_ANCHORABLE @@ -17,7 +19,7 @@ ) var/airtight = FALSE -/obj/structure/plasticflaps/CanPass(atom/A, turf/T) +/obj/structure/flaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASS_FLAG_GLASS)) return prob(60) @@ -39,7 +41,7 @@ return ..() -/obj/structure/plasticflaps/attackby(obj/item/W, mob/user) +/obj/structure/flaps/attackby(obj/item/W, mob/user) if(IS_CROWBAR(W) && !anchored) user.visible_message("\The [user] begins deconstructing \the [src].", "You start deconstructing \the [src].") if(user.do_skilled(3 SECONDS, SKILL_CONSTRUCTION, src)) @@ -51,28 +53,28 @@ user.visible_message("\The [user] adjusts \the [src], [airtight ? "preventing" : "allowing"] air flow.") else ..() -/obj/structure/plasticflaps/explosion_act(severity) +/obj/structure/flaps/explosion_act(severity) ..() if(!QDELETED(src) && (severity == 1 || (severity == 2 && prob(50)) || (severity == 3 && prob(5)))) physically_destroyed() -/obj/structure/plasticflaps/Initialize() +/obj/structure/flaps/Initialize() . = ..() if(airtight) become_airtight() -/obj/structure/plasticflaps/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor +/obj/structure/flaps/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor if(airtight) clear_airtight() . = ..() -/obj/structure/plasticflaps/proc/become_airtight() +/obj/structure/flaps/proc/become_airtight() atmos_canpass = CANPASS_NEVER update_nearby_tiles() -/obj/structure/plasticflaps/proc/clear_airtight() +/obj/structure/flaps/proc/clear_airtight() atmos_canpass = CANPASS_ALWAYS update_nearby_tiles() -/obj/structure/plasticflaps/airtight // airtight defaults to on +/obj/structure/flaps/airtight // airtight defaults to on airtight = TRUE \ No newline at end of file diff --git a/code/game/objects/structures/flora/_flora.dm b/code/game/objects/structures/flora/_flora.dm index f7081d56bcd..516712c0275 100644 --- a/code/game/objects/structures/flora/_flora.dm +++ b/code/game/objects/structures/flora/_flora.dm @@ -20,9 +20,18 @@ /obj/structure/flora/proc/init_appearance() return +// We rely on overrides to spawn appropriate materials for flora structures. +/obj/structure/flora/create_dismantled_products(turf/T) + matter = null + material = null + reinf_material = null + return ..() + /obj/structure/flora/attackby(obj/item/O, mob/user) - if(can_cut_down(O, user)) - return cut_down(O, user) + if(user.a_intent != I_HURT && can_cut_down(O, user)) + play_cut_sound(user) + cut_down(O, user) + return TRUE . = ..() /**Whether the item used by user can cause cut_down to be called. Used to bypass default attack proc for some specific items/tools. */ @@ -30,9 +39,13 @@ return (I.force >= 5) && I.sharp //Anything sharp and relatively strong can cut us instantly /**What to do when the can_cut_down check returns true. Normally simply calls dismantle. */ -/obj/structure/flora/proc/cut_down(var/obj/item/I, var/mob/user) +/obj/structure/flora/proc/play_cut_sound(mob/user) + set waitfor = FALSE if(snd_cut) playsound(src, snd_cut, 40, TRUE) + +/obj/structure/flora/proc/cut_down(var/obj/item/I, var/mob/user) + dismantle() return TRUE diff --git a/code/game/objects/structures/flora/plant.dm b/code/game/objects/structures/flora/plant.dm index 97b2ed7aaa8..58ccf91a19e 100644 --- a/code/game/objects/structures/flora/plant.dm +++ b/code/game/objects/structures/flora/plant.dm @@ -8,6 +8,10 @@ var/datum/seed/plant var/harvestable +/obj/structure/flora/plant/large + opacity = TRUE + density = TRUE + /* Notes for future work moving logic off hydrotrays onto plants themselves: /obj/structure/flora/plant/Process() // check our immediate environment @@ -52,12 +56,11 @@ . = ..() icon_state = "blank" color = null - set_overlays(plant.get_appearance(dead = dead, growth_stage = growth_stage, can_harvest = length(harvestable))) + set_overlays(plant.get_appearance(dead = dead, growth_stage = growth_stage, can_harvest = !!harvestable)) /obj/structure/flora/plant/attackby(obj/item/O, mob/user) - // TODO: tool categories or something. - if(istype(O, /obj/item/shovel) || istype(O, /obj/item/hatchet) || istype(O, /obj/item/twohanded/fireaxe)) + if(IS_SHOVEL(O) || IS_HATCHET(O)) user.visible_message(SPAN_NOTICE("\The [user] uproots \the [src] with \the [O]!")) physically_destroyed() return TRUE diff --git a/code/game/objects/structures/flora/potted.dm b/code/game/objects/structures/flora/potted.dm index 6b0d460cc25..c5e4d41e47a 100644 --- a/code/game/objects/structures/flora/potted.dm +++ b/code/game/objects/structures/flora/potted.dm @@ -14,8 +14,8 @@ snd_cut = 'sound/effects/break_ceramic.ogg' material = /decl/material/solid/stone/ceramic matter = list( - /decl/material/solid/clay = MATTER_AMOUNT_REINFORCEMENT, - /decl/material/solid/sand = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/clay = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/sand = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/organic/plantmatter = MATTER_AMOUNT_SECONDARY, //#TODO: Maybe eventually drop the plant, or some seeds or something? ) diff --git a/code/game/objects/structures/flora/stump.dm b/code/game/objects/structures/flora/stump.dm index 38e6c557eb1..6b066189743 100644 --- a/code/game/objects/structures/flora/stump.dm +++ b/code/game/objects/structures/flora/stump.dm @@ -2,7 +2,9 @@ // Stumps //////////////////////////////////////// /obj/structure/flora/stump - name = "stump" + name = "stump" + hitsound = 'sound/effects/hit_wood.ogg' + var/log_type = /obj/item/stack/material/log /obj/structure/flora/stump/get_material_health_modifier() return 2.5 //Make stumps worth removing with shovels instead of bashing them @@ -14,6 +16,11 @@ if(I.do_tool_interaction(TOOL_SHOVEL, user, src, 8 SECONDS)) . = ..() +/obj/structure/flora/stump/create_dismantled_products(turf/T) + if(log_type) + new log_type(T, rand(2,3), material?.type, reinf_material?.type) + . = ..() + //Base tree stump /obj/structure/flora/stump/tree name = "tree stump" @@ -40,3 +47,27 @@ //christmas tree /obj/structure/flora/stump/tree/pine/xmas icon_state = "pine_c" + +/obj/structure/flora/stump/tree/towercap + icon_state = "towercap_1" + material = /decl/material/solid/organic/wood/fungal + +/obj/structure/flora/stump/tree/ebony + icon_state = "ebony_1" + material = /decl/material/solid/organic/wood/ebony + +/obj/structure/flora/stump/tree/mahogany + icon_state = "mahogany_1" + material = /decl/material/solid/organic/wood/mahogany + +/obj/structure/flora/stump/tree/maple + icon_state = "maple_1" + material = /decl/material/solid/organic/wood/maple + +/obj/structure/flora/stump/tree/yew + icon_state = "yew_1" + material = /decl/material/solid/organic/wood/yew + +/obj/structure/flora/stump/tree/walnut + icon_state = "walnut_1" + material = /decl/material/solid/organic/wood/walnut diff --git a/code/game/objects/structures/flora/tree.dm b/code/game/objects/structures/flora/tree.dm index 232c5615606..c91b309d3ea 100644 --- a/code/game/objects/structures/flora/tree.dm +++ b/code/game/objects/structures/flora/tree.dm @@ -11,8 +11,20 @@ w_class = ITEM_SIZE_STRUCTURE hitsound = 'sound/effects/hit_wood.ogg' snd_cut = 'sound/effects/plants/tree_fall.ogg' + + /// What kind of log we leave behind. + var/log_type = /obj/item/stack/material/log + /// How many logs we leave behind. + var/log_amount = 10 + /// Whether or not you can shelter under this tree. var/protects_against_weather = TRUE - var/stump_type //What kind of tree stump we're leaving behind + /// What kind of tree stump we leaving behind. + var/stump_type + /// How much to shake the tree when struck. + /// Larger trees should have smaller numbers or it looks weird. + var/shake_animation_degrees = 4 + /// Marker for repeating the cut sound effect and animation. + var/someone_is_cutting = FALSE /obj/structure/flora/tree/get_material_health_modifier() return 2.5 //Prefer removing via tools than bashing @@ -21,15 +33,46 @@ return IS_HATCHET(I) //Axes can bypass having to damage the tree to break it /obj/structure/flora/tree/cut_down(obj/item/I, mob/user) + someone_is_cutting = TRUE if(I.do_tool_interaction(TOOL_HATCHET, user, src, 5 SECONDS)) . = ..() + someone_is_cutting = FALSE + +/obj/structure/flora/tree/take_damage(damage) + . = ..() + if(!QDELETED(src) && damage >= 5) + shake() + +// We chop several times to cut down a tree. +/obj/structure/flora/tree/play_cut_sound(mob/user) + shake() + while(someone_is_cutting) + sleep(1 SECOND) + if(QDELETED(src)) + return + shake() + playsound(src, 'sound/items/axe_wood.ogg', 40, TRUE) + if(QDELETED(src) || QDELETED(user) || !user.Adjacent(src)) + return + return ..() + +// Tree shake animation stolen from Polaris. +/obj/structure/flora/tree/proc/shake() + set waitfor = FALSE + var/init_px = pixel_x + var/shake_dir = pick(-1, 1) + var/matrix/M = matrix() + M.Scale(icon_scale_x, icon_scale_y) + M.Translate(0, 16*(icon_scale_y-1)) + animate(src, transform=turn(M, shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1) + animate(transform=M, pixel_x=init_px, time=6, easing=ELASTIC_EASING) -/obj/structure/flora/tree/dismantle() - var/turf/T = get_turf(src) - if(T) +/obj/structure/flora/tree/create_dismantled_products(turf/T) + if(log_type) + new log_type(T, rand(max(1,round(log_amount*0.5)), log_amount), material?.type, reinf_material?.type) + if(stump_type) var/obj/structure/flora/stump/stump = new stump_type(T, material, reinf_material) - if(istype(stump)) - stump.icon_state = icon_state //A bit dirty maybe, but its probably not worth writing a whole system for this when we have 3 kinds of trees.. + stump.icon_state = icon_state //A bit dirty maybe, but its probably not worth writing a whole system for this when we have 3 kinds of trees... . = ..() /obj/structure/flora/tree/pine @@ -60,5 +103,64 @@ protects_against_weather = FALSE stump_type = /obj/structure/flora/stump/tree/dead -/obj/structure/flora/tree/dead/init_appearance() +/obj/structure/flora/tree/dead/random/init_appearance() icon_state = "tree_[rand(1, 6)]" + +/obj/structure/flora/tree/dead/ebony + icon_state = "dead_ebony_1" + +/obj/structure/flora/tree/dead/mahogany + icon_state = "dead_mahogany_1" + +/obj/structure/flora/tree/dead/walnut + icon_state = "dead_walnut_1" + +/obj/structure/flora/tree/dead/maple + icon_state = "dead_maple_1" + +/obj/structure/flora/tree/dead/yew + icon_state = "dead_yew_1" + +/obj/structure/flora/tree/softwood + icon = 'icons/obj/flora/softwood.dmi' + abstract_type = /obj/structure/flora/tree/softwood + +/obj/structure/flora/tree/softwood/towercap + name = "towercap mushroom" + icon_state = "towercap_1" + material = /decl/material/solid/organic/wood/fungal + stump_type = /obj/structure/flora/stump/tree/towercap + +/obj/structure/flora/tree/hardwood + icon = 'icons/obj/flora/hardwood.dmi' + abstract_type = /obj/structure/flora/tree/hardwood + +/obj/structure/flora/tree/hardwood/ebony + name = "ebony tree" + icon_state = "ebony_1" + material = /decl/material/solid/organic/wood/ebony + stump_type = /obj/structure/flora/stump/tree/ebony + +/obj/structure/flora/tree/hardwood/mahogany + name = "mahogany tree" + icon_state = "mahogany_1" + material = /decl/material/solid/organic/wood/mahogany + stump_type = /obj/structure/flora/stump/tree/mahogany + +/obj/structure/flora/tree/hardwood/maple + name = "maple tree" + icon_state = "maple_1" + material = /decl/material/solid/organic/wood/maple + stump_type = /obj/structure/flora/stump/tree/maple + +/obj/structure/flora/tree/hardwood/yew + name = "yew tree" + icon_state = "yew_1" + material = /decl/material/solid/organic/wood/yew + stump_type = /obj/structure/flora/stump/tree/yew + +/obj/structure/flora/tree/hardwood/walnut + name = "walnut tree" + icon_state = "walnut_1" + material = /decl/material/solid/organic/wood/walnut + stump_type = /obj/structure/flora/stump/tree/walnut diff --git a/code/game/objects/structures/fountain.dm b/code/game/objects/structures/fountain.dm index 7d4197d0b38..20c36e8bd50 100644 --- a/code/game/objects/structures/fountain.dm +++ b/code/game/objects/structures/fountain.dm @@ -74,7 +74,7 @@ else to_chat(user, "You touch the fountain. All the memories of your life seem to fade into the distant past as seconds drag like years. You feel the inexplicable sensation of your skin tightening and thinning across your entire body as your muscles degrade and your joints weaken. Time returns to its 'normal' pace. You can only just barely remember touching the fountain.") user.became_older = TRUE - user.change_hair_color(80, 80, 80) + SET_HAIR_COLOUR(user, COLOR_GRAY80, FALSE) var/max_age = age.standalone_value_descriptors[age.standalone_value_descriptors[length(age.standalone_value_descriptors)]] if(new_age >= max_age) to_chat(user, "The burden of the years is too much, and you are reduced to dust.") @@ -91,6 +91,7 @@ w_class = ITEM_SIZE_STRUCTURE material = /decl/material/solid/stone/marble used = TRUE + material_alteration = MAT_FLAG_ALTERATION_ALL /obj/structure/fountain/mundane/Initialize(ml, _mat, _reinf_mat) . = ..() @@ -102,7 +103,7 @@ . = ..() /obj/structure/fountain/mundane/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) //Don't give free water when building one + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) //Don't give free water when building one /obj/structure/fountain/mundane/attack_hand(mob/user) if(user.a_intent == I_HURT) diff --git a/code/game/objects/structures/fuel_port.dm b/code/game/objects/structures/fuel_port.dm index ef1de75d390..4e5589fd37e 100644 --- a/code/game/objects/structures/fuel_port.dm +++ b/code/game/objects/structures/fuel_port.dm @@ -7,7 +7,7 @@ density = FALSE anchored = TRUE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/open = FALSE var/parent_shuttle diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 618012d3911..adf5cf127c6 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -8,7 +8,7 @@ obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR tool_interaction_flags = (TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT) - maxhealth = 100 + max_health = 100 parts_amount = 2 parts_type = /obj/item/stack/material/strut @@ -108,11 +108,13 @@ visible_message(SPAN_NOTICE("\The [user] slices apart \the [src] with \the [W].")) dismantle() return TRUE - if(istype(W, /obj/item/pickaxe/diamonddrill)) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - visible_message(SPAN_NOTICE("\The [user] begins drilling through \the [src] with \the [W].")) - if(do_after(user,reinf_material ? 60 : 40,src)) - visible_message(SPAN_NOTICE("\The [user] drills through \the [src] with \the [W].")) + + if(IS_PICK(W)) + if(W.material?.hardness < material.hardness) + to_chat(user, SPAN_WARNING("\The [W] is not hard enough to excavate [material.solid_name].")) + else if(W.get_tool_quality(TOOL_PICK) < TOOL_QUALITY_GOOD) + to_chat(user, SPAN_WARNING("\The [W] is not capable of destroying \the [src].")) + else if(W.do_tool_interaction(TOOL_PICK, user, src, (reinf_material ? 6 : 4) SECONDS, set_cooldown = TRUE)) dismantle() return TRUE // Reinforcing a girder, or turning it into a wall. @@ -161,7 +163,7 @@ var/turf/Tsrc = get_turf(src) Tsrc.ChangeTurf(/turf/simulated/wall) var/turf/simulated/wall/T = get_turf(src) - T.set_material(S.material, reinf_material, material) + T.set_turf_materials(S.material, reinf_material, null, material) T.can_open = prepped_for_fakewall T.add_hiddenprint(usr) material = null @@ -196,7 +198,7 @@ /obj/structure/girder/cult icon= 'icons/obj/cult.dmi' icon_state= "cultgirder" - maxhealth = 150 + max_health = 150 cover = 70 /obj/structure/girder/cult/dismantle() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 683a53c58e8..c5231af0360 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -16,7 +16,7 @@ handle_generic_blending = TRUE material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME - maxhealth = 20 + max_health = 20 var/destroyed = 0 var/list/connections @@ -134,11 +134,11 @@ if(BRUTE) //bullets if(Proj.original == src || prob(20)) - Proj.damage *= clamp(0, Proj.damage/60, 0.5) + Proj.damage *= clamp(Proj.damage/60, 0, 0.5) if(prob(max((damage-10)/25, 0))*100) passthrough = 1 else - Proj.damage *= clamp(0, Proj.damage/60, 1) + Proj.damage *= clamp(Proj.damage/60, 0, 1) passthrough = 1 if(BURN) //beams and other projectiles are either blocked completely by grilles or stop half the damage. @@ -148,7 +148,7 @@ if(passthrough) . = PROJECTILE_CONTINUE - damage = clamp(0, (damage - Proj.damage)*(Proj.damage_type == BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage + damage = clamp((damage - Proj.damage)*(Proj.damage_type == BRUTE? 0.4 : 1), 0, 10) //if the bullet passes through then the grille avoids most of the damage take_damage(damage*0.2) @@ -168,19 +168,24 @@ if(IS_WIRECUTTER(W)) if(!material.conductive || !shock(user, 100)) cut_grille() + return TRUE - else if((IS_SCREWDRIVER(W)) && (istype(loc, /turf/simulated) || anchored)) - if(!shock(user, 90)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - anchored = !anchored - user.visible_message(SPAN_NOTICE("[user] [anchored ? "fastens" : "unfastens"] the grille."), \ - SPAN_NOTICE("You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.")) - update_connections(1) - update_icon() - return - -//window placing - else if(istype(W,/obj/item/stack/material)) + if((IS_SCREWDRIVER(W))) + var/turf/turf = loc + if(((istype(turf) && turf.simulated) || anchored)) + if(!shock(user, 90)) + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + anchored = !anchored + user.visible_message( + SPAN_NOTICE("[user] [anchored ? "fastens" : "unfastens"] the grille."), + SPAN_NOTICE("You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.") + ) + update_connections(1) + update_icon() + return TRUE + + //window placing + if(istype(W,/obj/item/stack/material)) var/obj/item/stack/material/ST = W if(ST.material.opacity > 0.7) return 0 @@ -195,9 +200,9 @@ to_chat(user, "You can't reach.") return place_window(user, loc, dir_to_set, ST) - return + return TRUE - else if(!(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) || !shock(user, 70)) + if(!(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) || !shock(user, 70)) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(src) playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) @@ -206,7 +211,9 @@ take_damage(W.force) if(BRUTE) take_damage(W.force * 0.1) - ..() + return TRUE + + return ..() /obj/structure/grille/physically_destroyed(var/skip_qdel) SHOULD_CALL_PARENT(FALSE) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 4f94f685433..9910b5ee5f6 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -23,7 +23,7 @@ transfer_fingerprints_to(R) R.add_fingerprint(user) if(inflatable_health) - R.health = inflatable_health + R.current_health = inflatable_health qdel(src) /obj/item/inflatable/door @@ -41,7 +41,7 @@ opacity = FALSE icon = 'icons/obj/structures/inflatable.dmi' icon_state = "wall" - maxhealth = 20 + max_health = 20 hitsound = 'sound/effects/Glasshit.ogg' atmos_canpass = CANPASS_DENSITY material = /decl/material/solid/organic/plastic @@ -75,19 +75,32 @@ check_environment() /obj/structure/inflatable/proc/check_environment() - var/min_pressure = INFINITY - var/max_pressure = 0 - var/max_local_temp = 0 - for(var/check_dir in global.cardinal) - var/turf/T = get_step(get_turf(src), check_dir) - var/datum/gas_mixture/env = T.return_air() - var/pressure = env.return_pressure() - min_pressure = min(min_pressure, pressure) - max_pressure = max(max_pressure, pressure) - max_local_temp = max(max_local_temp, env.temperature) + var/turf/my_turf = get_turf(src) + if(!my_turf || !prob(50)) + return - if(prob(50) && (max_pressure - min_pressure > max_pressure_diff || max_local_temp > max_temp)) + var/airblock // zeroed by ATMOS_CANPASS_TURF + var/max_local_temp = 0 + var/take_environment_damage = get_surrounding_pressure_differential(my_turf, src) > max_pressure_diff + if(!take_environment_damage) + for(var/check_dir in global.cardinal) + var/turf/neighbour = get_step(my_turf, check_dir) + if(!istype(neighbour)) + continue + for(var/obj/O in my_turf) + if(O == src) + continue + ATMOS_CANPASS_MOVABLE(airblock, O, neighbour) + . |= airblock + if(airblock & AIR_BLOCKED) + continue + ATMOS_CANPASS_TURF(airblock, neighbour, my_turf) + if(airblock & AIR_BLOCKED) + continue + max_local_temp = max(max_local_temp, neighbour.return_air()?.temperature) + + if(take_environment_damage || max_local_temp > max_temp) take_damage(1) /obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -107,7 +120,7 @@ deflate(TRUE) /obj/structure/inflatable/can_repair_with(obj/item/tool) - . = istype(tool, /obj/item/stack/tape_roll/duct_tape) && (health < maxhealth) + . = istype(tool, /obj/item/stack/tape_roll/duct_tape) && (current_health < get_max_health()) /obj/structure/inflatable/handle_repair(mob/user, obj/item/tool) var/obj/item/stack/tape_roll/duct_tape/T = tool @@ -121,7 +134,7 @@ playsound(src, 'sound/effects/tape.ogg', 50, TRUE) last_damage_message = null to_chat(user, SPAN_NOTICE("You tape up some of the damage to \the [src].")) - health = clamp(health + 3, 0, maxhealth) + current_health = clamp(current_health + 3, 0, get_max_health()) taped = TRUE /obj/structure/inflatable/attackby(obj/item/W, mob/user) @@ -157,7 +170,7 @@ spawn(50) var/obj/item/inflatable/R = new undeploy_path(src.loc) src.transfer_fingerprints_to(R) - R.inflatable_health = health + R.inflatable_health = current_health qdel(src) /obj/structure/inflatable/verb/hand_deflate() diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm index 2016ff845b8..473f91bb780 100644 --- a/code/game/objects/structures/ironing_board.dm +++ b/code/game/objects/structures/ironing_board.dm @@ -31,7 +31,7 @@ holding = null update_icon() - events_repository.unregister(/decl/observ/destroyed, I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) + events_repository.unregister(/decl/observ/destroyed, I, src, TYPE_PROC_REF(/obj/structure/bed/roller/ironingboard, remove_item)) // make a screeching noise to drive people mad /obj/structure/bed/roller/ironingboard/Move() @@ -76,7 +76,7 @@ if(user.try_unequip(I, src)) cloth = I - events_repository.register(/decl/observ/destroyed, I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) + events_repository.register(/decl/observ/destroyed, I, src, TYPE_PROC_REF(/obj/structure/bed/roller/ironingboard, remove_item)) update_icon() return else if(istype(I,/obj/item/ironingiron)) @@ -101,7 +101,7 @@ if(!cloth) if(!holding && !R.enabled && user.try_unequip(I, src)) holding = R - events_repository.register(/decl/observ/destroyed, I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) + events_repository.register(/decl/observ/destroyed, I, src, TYPE_PROC_REF(/obj/structure/bed/roller/ironingboard, remove_item)) update_icon() return to_chat(user, "There isn't anything on the ironing board.") diff --git a/code/game/objects/structures/iv_drip.dm b/code/game/objects/structures/iv_drip.dm index e97d7d3fc86..596c9f0b506 100644 --- a/code/game/objects/structures/iv_drip.dm +++ b/code/game/objects/structures/iv_drip.dm @@ -75,7 +75,7 @@ add_overlay(light) -/obj/structure/iv_drip/handle_mouse_drop(atom/over, mob/user) +/obj/structure/iv_drip/handle_mouse_drop(atom/over, mob/user, params) if(attached) drip_detach() return TRUE diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 5cd0f7f484c..fcbef17ee5d 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -5,7 +5,7 @@ icon_state = "cart" anchored = FALSE density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_CLIMBABLE movable_flags = MOVABLE_FLAG_WHEELED var/obj/item/storage/bag/trash/mybag = null var/obj/item/mop/mymop = null @@ -174,9 +174,11 @@ name = "janicart" icon = 'icons/obj/vehicles.dmi' icon_state = "pussywagon" + base_icon = "pussywagon" anchored = FALSE density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + material_alteration = MAT_FLAG_ALTERATION_NONE + atom_flags = ATOM_FLAG_OPEN_CONTAINER buckle_layer_above = TRUE buckle_movable = TRUE movement_handlers = list( diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index 845d32402a6..14bb3ef3f23 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -83,7 +83,7 @@ occupant = null STOP_PROCESSING(SSobj, src) -/obj/structure/mineral_bath/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/structure/mineral_bath/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && ismob(dropping)) enter_bath(dropping, user) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 6a3c583affd..39d74c931f5 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -114,7 +114,7 @@ /obj/structure/morgue_tray/attack_robot(mob/user) return attack_hand_with_interaction_checks(user) -/obj/structure/morgue_tray/receive_mouse_drop(atom/dropping, mob/user) +/obj/structure/morgue_tray/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && (ismob(dropping) || istype(dropping, /obj/structure/closet/body_bag))) var/atom/movable/AM = dropping diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index 4c5a01210d7..c3ba723a92e 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -1,23 +1,24 @@ /obj/structure/pit - name = "pit" - desc = "Watch your step, partner." - icon = 'icons/obj/structures/pit.dmi' - icon_state = "pit1" - blend_mode = BLEND_MULTIPLY - density = FALSE - anchored = TRUE - health = -1 //You can't break a hole in the ground. - var/open = TRUE + name = "pit" + desc = "Watch your step, partner." + icon = 'icons/obj/structures/pit.dmi' + icon_state = "pit1" + blend_mode = BLEND_MULTIPLY + density = FALSE + anchored = TRUE + current_health = -1 //You can't break a hole in the ground. + var/open = TRUE /obj/structure/pit/attackby(obj/item/W, mob/user) if(IS_SHOVEL(W)) - if(W.do_tool_interaction(TOOL_SHOVEL, user, src, 5 SECONDS, "[open ? "filling up" : "digging open"]", "[open ? "fills up" : "digs open"]")) + var/dig_message = open ? "filling in" : "excavating" + if(W.do_tool_interaction(TOOL_SHOVEL, user, src, 5 SECONDS, dig_message, dig_message)) if(open) close(user) else open() else - to_chat(user, SPAN_NOTICE("You stop shoveling.")) + to_chat(user, SPAN_NOTICE("You stop digging.")) return TRUE if (!open && istype(W, /obj/item/stack/material) && W.material?.type == /decl/material/solid/organic/wood) @@ -47,7 +48,7 @@ desc = initial(desc) open = TRUE for(var/atom/movable/A in src) - A.forceMove(src.loc) + A.dropInto(loc) update_icon() /obj/structure/pit/proc/close(var/user) @@ -56,22 +57,17 @@ open = FALSE //If we close the pit without anything inside, just leave the soil undisturbed - var/turf/T = get_turf(src) - if(!length((T.contents - src))) + if(isturf(loc)) + for(var/atom/movable/A in loc) + if(A != src && !A.anchored && A != user && A.simulated) + A.forceMove(src) + if(!length(contents)) qdel(src) - return - - for(var/atom/movable/A in T) - if(!A.anchored && A != user && A.simulated) - A.forceMove(src) - - update_icon() + else + update_icon() /obj/structure/pit/return_air() - if(open && loc) - return loc.return_air() - else - return null + return open && loc?.return_air() /obj/structure/pit/proc/digout(mob/escapee) var/breakout_time = 1 //2 minutes by default @@ -113,9 +109,9 @@ // Closed Pit ///////////////////////////////////////////// /obj/structure/pit/closed - name = "mound" - desc = "Some things are better left buried." - health = -1 //Can't break a hole in the ground... + name = "mound" + desc = "Some things are better left buried." + current_health = ITEM_HEALTH_NO_DAMAGE //Can't break a hole in the ground... /obj/structure/pit/closed/Initialize() . = ..() diff --git a/code/game/objects/structures/racks.dm b/code/game/objects/structures/racks.dm index 1f8828f5b74..7aaa0dd4420 100644 --- a/code/game/objects/structures/racks.dm +++ b/code/game/objects/structures/racks.dm @@ -7,12 +7,13 @@ handle_generic_blending = FALSE tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE throwpass = TRUE parts_amount = 2 parts_type = /obj/item/stack/material/strut density = TRUE anchored = TRUE + structure_flags = STRUCTURE_FLAG_SURFACE /obj/structure/rack/Initialize() ..() diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index f472368a72d..bf557d298e6 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -8,11 +8,11 @@ layer = OBJ_LAYER climb_speed_mult = 0.25 anchored = FALSE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CLIMBABLE obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_MOVES_UNSUPPORTED material = DEFAULT_FURNITURE_MATERIAL material_alteration = MAT_FLAG_ALTERATION_ALL - maxhealth = 100 + max_health = 100 parts_amount = 2 parts_type = /obj/item/stack/material/strut @@ -76,31 +76,12 @@ return !density return TRUE -/obj/structure/railing/examine(mob/user) - . = ..() - if(health < maxhealth) - switch(health / maxhealth) - if(0.0 to 0.5) - to_chat(user, "It looks severely damaged!") - if(0.25 to 0.5) - to_chat(user, "It looks damaged!") - if(0.5 to 1.0) - to_chat(user, "It has a few scrapes and dents.") - -/obj/structure/railing/take_damage(amount) - health -= amount - if(health <= 0) - visible_message("\The [src] [material.destruction_desc]!") - playsound(loc, 'sound/effects/grillehit.ogg', 50, 1) - material.place_shards(get_turf(usr)) - qdel(src) - /obj/structure/railing/proc/NeighborsCheck(var/UpdateNeighbors = 1) neighbor_status = 0 - var/Rturn = turn(src.dir, -90) - var/Lturn = turn(src.dir, 90) + var/Rturn = turn(dir, -90) + var/Lturn = turn(dir, 90) - for(var/obj/structure/railing/R in src.loc) + for(var/obj/structure/railing/R in loc) if ((R.dir == Lturn) && R.anchored) neighbor_status |= 32 if (UpdateNeighbors) @@ -110,21 +91,21 @@ if (UpdateNeighbors) R.update_icon(0) for (var/obj/structure/railing/R in get_step(src, Lturn)) - if ((R.dir == src.dir) && R.anchored) + if ((R.dir == dir) && R.anchored) neighbor_status |= 16 if (UpdateNeighbors) R.update_icon(0) for (var/obj/structure/railing/R in get_step(src, Rturn)) - if ((R.dir == src.dir) && R.anchored) + if ((R.dir == dir) && R.anchored) neighbor_status |= 1 if (UpdateNeighbors) R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, (Lturn + src.dir))) + for (var/obj/structure/railing/R in get_step(src, (Lturn + dir))) if ((R.dir == Rturn) && R.anchored) neighbor_status |= 64 if (UpdateNeighbors) R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, (Rturn + src.dir))) + for (var/obj/structure/railing/R in get_step(src, (Rturn + dir))) if ((R.dir == Lturn) && R.anchored) neighbor_status |= 4 if (UpdateNeighbors) @@ -183,7 +164,7 @@ to_chat(usr, "You can't flip \the [src] - something is in the way.") return 0 - forceMove(get_step(src, src.dir)) + forceMove(get_step(src, dir)) set_dir(turn(dir, 180)) update_icon() @@ -217,7 +198,7 @@ H.apply_damage(8, BRUTE, BP_HEAD) else if (get_turf(H) == get_turf(src)) - H.forceMove(get_step(src, src.dir)) + H.forceMove(get_step(src, dir)) else H.dropInto(loc) SET_STATUS_MAX(H, STAT_WEAK, 5) @@ -229,7 +210,7 @@ // Dismantle if(IS_WRENCH(W)) if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20, src)) if(anchored) return @@ -239,7 +220,7 @@ return // Wrench Open else - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(density) user.visible_message("\The [user] wrenches \the [src] open.", "You wrench \the [src] open.") density = FALSE @@ -252,15 +233,16 @@ if(IS_WELDER(W)) var/obj/item/weldingtool/F = W if(F.isOn()) - if(health >= maxhealth) + var/current_max_health = get_max_health() + if(current_health >= current_max_health) to_chat(user, "\The [src] does not need repairs.") return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 20, src)) - if(health >= maxhealth) + if(current_health >= current_max_health) return user.visible_message("\The [user] repairs some damage to \the [src].", "You repair some damage to \the [src].") - health = min(health+(maxhealth/5), maxhealth) + current_health = min(current_health+(current_max_health/5), current_max_health) return // Install @@ -291,7 +273,7 @@ /obj/structure/railing/can_climb(var/mob/living/user, post_climb_check=0) . = ..() if(. && get_turf(user) == get_turf(src)) - var/turf/T = get_step(src, src.dir) + var/turf/T = get_step(src, dir) if(T.turf_is_crowded(user)) to_chat(user, "You can't climb there, the way is blocked.") return 0 @@ -300,7 +282,7 @@ . = ..() if(.) if(!anchored || material.is_brittle()) - take_damage(maxhealth) // Fatboy + take_damage(get_max_health()) // Fatboy user.jump_layer_shift() - addtimer(CALLBACK(user, /mob/living/proc/jump_layer_shift_end), 2) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, jump_layer_shift_end)), 2) diff --git a/code/game/objects/structures/rubble.dm b/code/game/objects/structures/rubble.dm index 632fedb3ccf..c7f2851803d 100644 --- a/code/game/objects/structures/rubble.dm +++ b/code/game/objects/structures/rubble.dm @@ -6,7 +6,7 @@ opacity = TRUE density = TRUE anchored = TRUE - maxhealth = 50 + max_health = 50 var/list/loot = list( /obj/item/cell, @@ -66,15 +66,11 @@ return TRUE /obj/structure/rubble/attackby(var/obj/item/I, var/mob/user) - if (istype(I, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = I - visible_message("[user] starts clearing away \the [src].") - if(do_after(user,P.digspeed, src)) - visible_message("[user] clears away \the [src].") - if(lootleft && prob(1)) - var/obj/item/booty = pickweight(loot) - booty = new booty(loc) - qdel(src) + if(I.do_tool_interaction(TOOL_PICK, user, I, 3 SECONDS, set_cooldown = TRUE)) + if(lootleft && prob(1)) + var/obj/item/booty = pickweight(loot) + booty = new booty(loc) + qdel(src) return TRUE . = ..() diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 9c9347b085f..565a799ddee 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -45,7 +45,7 @@ //Make sure we have the same matter contents as the sign matter = atom_info_repository.get_matter_for(sign_type) - matter = matter.Copy() + matter = matter?.Copy() //Do this last, so icon update is last set_icon_state(ispath(S)? initial(S.icon_state) : S.icon_state) @@ -62,7 +62,7 @@ sign_type = null return S -///Attempts installing the sign and ask the user for direction and etc.. +///Attempts installing the sign and ask the user for direction and etc. /obj/item/sign/proc/try_install(var/turf/targeted_turf, var/mob/user) var/facing = get_cardinal_dir(user, targeted_turf) || user.dir var/install_dir = global.reverse_dir[facing] @@ -94,7 +94,7 @@ layer = ABOVE_WINDOW_LAYER w_class = ITEM_SIZE_NORMAL obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'WEST':{'x':32}, 'EAST':{'x':-32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "WEST":{"x":32}, "EAST":{"x":-32}}' abstract_type = /obj/structure/sign parts_type = /obj/item/sign parts_amount = 1 diff --git a/code/game/objects/structures/signs/bar_signs.dm b/code/game/objects/structures/signs/bar_signs.dm index 917bf4c3b05..51396fea7bb 100644 --- a/code/game/objects/structures/signs/bar_signs.dm +++ b/code/game/objects/structures/signs/bar_signs.dm @@ -5,7 +5,7 @@ //The sign is 64x32, so it needs two tiles. ;3 icon = 'icons/obj/signs/bar.dmi' //The bar sign always faces south - directional_offset = "{'NORTH':{'y':32}, 'SOUTH':{'y':32}, 'WEST':{'y':32}, 'EAST':{'y':32}}" + directional_offset = @'{"NORTH":{"y":32}, "SOUTH":{"y":32}, "WEST":{"y":32}, "EAST":{"y":32}}' abstract_type = /obj/structure/sign/double/maltesefalcon /obj/structure/sign/double/maltesefalcon/left diff --git a/code/game/objects/structures/signs/direction_signs.dm b/code/game/objects/structures/signs/direction_signs.dm index 6a4ce87f243..f738433c1ac 100644 --- a/code/game/objects/structures/signs/direction_signs.dm +++ b/code/game/objects/structures/signs/direction_signs.dm @@ -9,7 +9,7 @@ icon = 'icons/obj/signs/directions.dmi' icon_state = "direction" //Direction signs are always meant to face south! The arrow on the sign matches the direction it points to. - directional_offset = "{'NORTH':{'y':32}, 'SOUTH':{'y':32}, 'WEST':{'y':32}, 'EAST':{'y':32}}" + directional_offset = @'{"NORTH":{"y":32}, "SOUTH":{"y":32}, "WEST":{"y":32}, "EAST":{"y":32}}' /obj/structure/sign/directions/update_description() desc = "A direction sign, pointing out \the [name] is [global.dir_name(dir)]." diff --git a/code/game/objects/structures/signs/warning_signs.dm b/code/game/objects/structures/signs/warning_signs.dm index e11bafb614d..7165a62c8a0 100644 --- a/code/game/objects/structures/signs/warning_signs.dm +++ b/code/game/objects/structures/signs/warning_signs.dm @@ -8,7 +8,7 @@ desc = "You've been warned!" icon = 'icons/obj/signs/slim_warnings.dmi' icon_state = "securearea" - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'WEST':{'x':34}, 'EAST':{'x':-34}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "WEST":{"x":34}, "EAST":{"x":-34}}' /obj/structure/sign/warning/update_description() desc = "A warning sign which reads '[sanitize(name)]'." diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm index 99e28d423d4..fd144cae909 100644 --- a/code/game/objects/structures/stasis_cage.dm +++ b/code/game/objects/structures/stasis_cage.dm @@ -74,7 +74,7 @@ release() return ..() -/mob/living/simple_animal/handle_mouse_drop(atom/over, mob/user) +/mob/living/simple_animal/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/structure/stasis_cage)) var/obj/structure/stasis_cage/cage = over if(!stat && !istype(buckled, /obj/effect/energy_net)) diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm index b6aef499f55..862826b0228 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm @@ -25,7 +25,7 @@ parts_type = /obj/item/stack/material/strut var/base_icon = "bed" -/obj/structure/bed/user_can_mousedrop_onto(var/mob/user, var/atom/being_dropped, var/incapacitation_flags) +/obj/structure/bed/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params) if(user == being_dropped) return user.Adjacent(src) && !user.incapacitated(INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT) return ..() @@ -50,18 +50,17 @@ // Reuse the cache/code from stools, todo maybe unify. /obj/structure/bed/on_update_icon() ..() + icon_state = base_icon if(istype(reinf_material)) - var/image/I = image(icon, "[icon_state]_padding") if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = reinf_material.color - add_overlay(I) + add_overlay(overlay_image(icon, "[icon_state]_padding", reinf_material.color, RESET_COLOR)) + else + add_overlay(overlay_image(icon, "[icon_state]_padding")) /obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) return 1 - else - return ..() + return ..() /obj/structure/bed/explosion_act(severity) . = ..() @@ -237,7 +236,7 @@ queue_icon_update() STOP_PROCESSING(SSobj,src) -/obj/structure/bed/roller/handle_mouse_drop(atom/over, mob/user) +/obj/structure/bed/roller/handle_mouse_drop(atom/over, mob/user, params) if(ishuman(user) || isrobot(user)) if(over == buckled_mob && beaker) if(iv_attached) diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm index 197a92739aa..65db36916af 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm @@ -1,4 +1,5 @@ -/obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete +//YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete +/obj/structure/bed/chair name = "chair" desc = "You sit in this, either by will or force." icon_state = "chair_preview" @@ -7,7 +8,6 @@ buckle_lying = 0 //force people to sit up in chairs when buckled obj_flags = OBJ_FLAG_ROTATABLE base_icon = "chair" - var/propelled = 0 // Check for fire-extinguisher-driven chairs var/has_special_overlay = FALSE @@ -91,7 +91,10 @@ desc = "It's a chair. It looks comfy." icon_state = "comfychair_preview" base_icon = "comfychair" + reinf_material = /decl/material/solid/organic/cloth +/obj/structure/bed/chair/comfy/unpadded + reinf_material = null /obj/structure/bed/chair/comfy/brown reinf_material = /decl/material/solid/organic/leather /obj/structure/bed/chair/comfy/red @@ -265,9 +268,9 @@ /obj/structure/bed/chair/shuttle/post_buckle_mob() if(buckled_mob) - icon_state = "shuttle_chair-b" + base_icon = "shuttle_chair-b" else - icon_state = "shuttle_chair" + base_icon = "shuttle_chair" ..() /obj/structure/bed/chair/shuttle/blue diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/pew.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/pew.dm new file mode 100644 index 00000000000..b38ffe0919b --- /dev/null +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/pew.dm @@ -0,0 +1,27 @@ +/obj/structure/bed/sofa/pew + name = "pew" + desc = "A long, hard wooden seat, often seen in churches and other places of worship, as well as courtrooms." + icon_state = "pewmiddle" + base_icon = "pewmiddle" + color = WOOD_COLOR_GENERIC + material = /decl/material/solid/organic/wood + +/obj/structure/bed/sofa/pew/mahogany + color = WOOD_COLOR_RICH + material = /decl/material/solid/organic/wood/mahogany + +/obj/structure/bed/sofa/pew/right + icon_state = "pewend_right" + base_icon = "pewend_right" + +/obj/structure/bed/sofa/pew/right/mahogany + color = WOOD_COLOR_RICH + material = /decl/material/solid/organic/wood/mahogany + +/obj/structure/bed/sofa/pew/left + icon_state = "pewend_left" + base_icon = "pewend_left" + +/obj/structure/bed/sofa/pew/left/mahogany + color = WOOD_COLOR_RICH + material = /decl/material/solid/organic/wood/mahogany \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm index a4a9853f8c3..ece874019e6 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm @@ -1,14 +1,14 @@ /obj/structure/bed/sofa name = "sofa" - desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with colored cloth." + desc = "A wide and comfy sofa. No assistants were eaten by it during production!" icon_state = "sofa_preview" base_icon = "sofa" color = "#666666" buckle_dir = FALSE buckle_lying = FALSE //force people to sit up in chairs when buckled - obj_flags = OBJ_FLAG_ROTATABLE + obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_ANCHORABLE material = /decl/material/solid/organic/wood - + material_alteration = MAT_FLAG_ALTERATION_DESC | MAT_FLAG_ALTERATION_COLOR var/has_special_overlay = FALSE /obj/structure/bed/sofa/do_simple_ranged_interaction(var/mob/user) @@ -20,54 +20,35 @@ update_icon() return ..() -/obj/structure/bed/attackby(obj/item/W, mob/user) //made to be able to rotate the sofa - . = ..() - if(.) - return - if(!IS_WRENCH(W)) - return - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - if(anchored) - to_chat(user, "You disanchored \the [src].") - else - to_chat(user, "You anchored \the [src].") - /obj/structure/bed/sofa/on_update_icon() + ..() - icon_state = base_icon - var/image/I = image(icon, "[icon_state]_over") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = material.color - add_overlay(I) - I = image(icon, "[icon_state]_armrest") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = material.color - add_overlay(I) + + var/use_mat_color = (material_alteration & MAT_FLAG_ALTERATION_COLOR) + var/use_base_color = use_mat_color ? material?.color : null + var/use_reinf_color = use_mat_color ? reinf_material?.color : null + + var/list/overlays_to_add = list( + "_over" = use_base_color, + "_armrest" = use_base_color + ) if(reinf_material) - I = image(icon, "[icon_state]_padding_over") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = reinf_material.color - add_overlay(I) - I = image(icon, "[icon_state]_padding_armrest") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = reinf_material.color - add_overlay(I) + overlays_to_add["_padding_over"] = use_reinf_color + overlays_to_add["_padding_armrest"] = use_reinf_color if(has_special_overlay && buckled_mob) - I = image(icon, "[icon_state]_special") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = material.color - add_overlay(I) + overlays_to_add["_special"] = use_base_color + + for(var/overlay in overlays_to_add) + var/overlay_state = "[icon_state][overlay]" + if(check_state_in_icon(overlay_state, icon)) + var/overlay_color = overlays_to_add[overlay] + var/image/I + if(isnull(overlay_color)) + I = overlay_image(icon, overlay_state) + else + I = overlay_image(icon, overlay_state, overlay_color, RESET_COLOR) + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + add_overlay(I) /obj/structure/bed/sofa/rotate(mob/user) if(!CanPhysicallyInteract(user) || anchored) @@ -83,6 +64,9 @@ set_dir(turn(dir, 45)) update_icon() +/obj/structure/bed/sofa/middle/unpadded + reinf_material = null + /obj/structure/bed/sofa/middle/red reinf_material = /decl/material/solid/organic/carpet /obj/structure/bed/sofa/middle/brown @@ -110,6 +94,8 @@ icon_state = "sofa_r_preview" base_icon = "sofa_r" +/obj/structure/bed/sofa/right/unpadded + reinf_material = null /obj/structure/bed/sofa/right/red reinf_material = /decl/material/solid/organic/carpet /obj/structure/bed/sofa/right/brown @@ -137,6 +123,8 @@ icon_state = "sofa_l_preview" base_icon = "sofa_l" +/obj/structure/bed/sofa/left/unpadded + reinf_material = null /obj/structure/bed/sofa/left/red reinf_material = /decl/material/solid/organic/carpet /obj/structure/bed/sofa/left/brown diff --git a/code/game/objects/structures/tables.dm b/code/game/objects/structures/tables.dm index a0d4fa6b182..1d839db87bb 100644 --- a/code/game/objects/structures/tables.dm +++ b/code/game/objects/structures/tables.dm @@ -8,18 +8,19 @@ desc = "It's a table, for putting things on. Or standing on, if you really want to." density = TRUE anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE layer = TABLE_LAYER throwpass = TRUE // Note that mob_offset also determines whether you can walk from one table to another without climbing. // TODO: add 1px step-up? mob_offset = 12 handle_generic_blending = TRUE - maxhealth = 10 + max_health = 10 tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC parts_amount = 2 parts_type = /obj/item/stack/material/strut + structure_flags = STRUCTURE_FLAG_SURFACE var/can_flip = TRUE var/is_flipped = FALSE @@ -464,7 +465,7 @@ return TRUE return TRUE -/obj/structure/table/receive_mouse_drop(atom/dropping, mob/user) +/obj/structure/table/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && !isrobot(user) && isitem(dropping) && user.get_active_hand() == dropping && user.try_unequip(dropping)) var/obj/item/I = dropping diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 1b5fa419f9e..e0997856de7 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -10,6 +10,9 @@ var/list/oxygen_tanks = 6 var/list/hydrogen_tanks = 6 +SAVED_VAR(/obj/structure/tank_rack, oxygen_tanks) +SAVED_VAR(/obj/structure/tank_rack, hydrogen_tanks) + /obj/structure/tank_rack/Initialize() . = ..() diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index b9c5cca488b..07d1f16441a 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -28,8 +28,8 @@ T.pixel_x = 0 T.pixel_y = 0 T.layer = ABOVE_OBJ_LAYER - events_repository.register(/decl/observ/moved, T, src, /atom/movable/proc/move_to_turf) - events_repository.register(/decl/observ/moved, src, T, /atom/movable/proc/move_to_turf) + events_repository.register(/decl/observ/moved, T, src, TYPE_PROC_REF(/atom/movable, move_to_turf)) + events_repository.register(/decl/observ/moved, src, T, TYPE_PROC_REF(/atom/movable, move_to_turf)) T.stake = src pinned_target = T else diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index c49e81e6844..ff844e19d4f 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -27,7 +27,7 @@ var/number_of_underwear = LAZYACCESS(amount_of_underwear_by_id_card, id) - 1 if(number_of_underwear) LAZYSET(amount_of_underwear_by_id_card, id, number_of_underwear) - events_repository.register(/decl/observ/destroyed, id, src, /obj/structure/undies_wardrobe/proc/remove_id_card) + events_repository.register(/decl/observ/destroyed, id, src, TYPE_PROC_REF(/obj/structure/undies_wardrobe, remove_id_card)) else remove_id_card(id) @@ -36,7 +36,7 @@ /obj/structure/undies_wardrobe/proc/remove_id_card(var/id_card) LAZYREMOVE(amount_of_underwear_by_id_card, id_card) - events_repository.unregister(/decl/observ/destroyed, id_card, src, /obj/structure/undies_wardrobe/proc/remove_id_card) + events_repository.unregister(/decl/observ/destroyed, id_card, src, TYPE_PROC_REF(/obj/structure/undies_wardrobe, remove_id_card)) /obj/structure/undies_wardrobe/attack_hand(var/mob/user) if(!human_who_can_use_underwear(user)) diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm index 700f4f48bed..38c23a7a0c1 100644 --- a/code/game/objects/structures/wall_frame.dm +++ b/code/game/objects/structures/wall_frame.dm @@ -6,7 +6,7 @@ desc = "A low wall section which serves as the base of windows, amongst other things." icon = 'icons/obj/structures/wall_frame.dmi' icon_state = "frame" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_ADJACENT_EXCEPTION + atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CAN_BE_PAINTED | ATOM_FLAG_ADJACENT_EXCEPTION obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED anchored = TRUE density = TRUE @@ -16,7 +16,7 @@ material = DEFAULT_WALL_MATERIAL handle_generic_blending = TRUE tool_interaction_flags = (TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT) - maxhealth = 40 + max_health = 40 parts_amount = 2 parts_type = /obj/item/stack/material/strut @@ -48,12 +48,13 @@ if(paint_color) to_chat(user, SPAN_NOTICE("It has a smooth coat of paint applied.")) -/obj/structure/wall_frame/get_examined_damage_string(health_ratio) - if(maxhealth == -1) +/obj/structure/wall_frame/get_examined_damage_string() + if(!can_take_damage()) return - if(health_ratio > 0.7) + var/health_percent = get_percent_health() + if(health_percent > 70) return SPAN_NOTICE("It's got a few dents and scratches.") - else if(health_ratio > 0.3) + else if(health_percent > 30) return SPAN_WARNING("A few pieces of panelling have fallen off.") else return SPAN_DANGER("It's nearly falling to pieces.") @@ -141,17 +142,18 @@ return /obj/structure/wall_frame/hitby(AM, var/datum/thrownthing/TT) - ..() - var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else - var/obj/O = AM - tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - if (tforce < 15) - return - take_damage(tforce) + . = ..() + if(.) + var/tforce = 0 + if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm + var/mob/I = AM + tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) + else + var/obj/O = AM + tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + if (tforce < 15) + return + take_damage(tforce) /obj/structure/wall_frame/get_color() return paint_color diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 20c6a5f7489..1ac7c032794 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -75,11 +75,9 @@ var/global/list/hygiene_props = list() visible_message("\The [src] gurgles and overflows!") next_gurgle = world.time + 80 playsound(T, pick(SSfluids.gurgles), 50, 1) - var/obj/effect/fluid/F = locate() in T - var/adding = min(flood_amt-F?.reagents.total_volume, rand(30,50)*clogged) + var/adding = min(flood_amt-T?.reagents?.total_volume, rand(30,50)*clogged) if(adding > 0) - if(!F) F = new(T) - F.reagents.add_reagent(/decl/material/liquid/water, adding) + T.add_to_reagents(/decl/material/liquid/water, adding) /obj/structure/hygiene/proc/drain() if(!can_drain) return @@ -208,7 +206,7 @@ var/global/list/hygiene_props = list() icon_state = "urinal" density = FALSE anchored = TRUE - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED /obj/structure/hygiene/urinal/attackby(var/obj/item/I, var/mob/user) @@ -286,7 +284,7 @@ var/global/list/hygiene_props = list() /obj/effect/mist/Initialize(mapload) . = ..() if(. != INITIALIZE_HINT_QDEL) - addtimer(CALLBACK(src, /datum/proc/qdel_self), 25 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, qdel_self)), 25 SECONDS) /obj/structure/hygiene/shower/attackby(obj/item/I, var/mob/user) if(istype(I, /obj/item/scanner/gas)) @@ -334,7 +332,7 @@ var/global/list/hygiene_props = list() for(var/thing in loc.get_contained_external_atoms()) wash_mob(thing) process_heat(thing) - reagents.add_reagent(/decl/material/liquid/water, REAGENTS_FREE_SPACE(reagents)) + add_to_reagents(/decl/material/liquid/water, REAGENTS_FREE_SPACE(reagents)) if(world.time >= next_wash) next_wash = world.time + (10 SECONDS) reagents.splash(get_turf(src), reagents.total_volume, max_spill = 0) @@ -343,13 +341,13 @@ var/global/list/hygiene_props = list() if(!on || !istype(M)) return var/water_temperature = temperature_settings[watertemp] - var/temp_adj = clamp(BODYTEMP_COOLING_MAX, water_temperature - M.bodytemperature, BODYTEMP_HEATING_MAX) + var/temp_adj = clamp(water_temperature - M.bodytemperature, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) M.bodytemperature += temp_adj if(ishuman(M)) var/mob/living/carbon/human/H = M - if(water_temperature >= H.get_temperature_threshold(HEAT_LEVEL_1)) + if(water_temperature >= H.get_mob_temperature_threshold(HEAT_LEVEL_1)) to_chat(H, SPAN_DANGER("The water is searing hot!")) - else if(water_temperature <= H.get_temperature_threshold(COLD_LEVEL_1)) + else if(water_temperature <= H.get_mob_temperature_threshold(COLD_LEVEL_1)) to_chat(H, SPAN_DANGER("The water is freezing cold!")) /obj/structure/hygiene/shower/emergency @@ -378,7 +376,7 @@ var/global/list/hygiene_props = list() anchored = TRUE var/busy = 0 //Something's being washed at the moment -/obj/structure/hygiene/sink/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/structure/hygiene/sink/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && isitem(dropping) && ATOM_IS_OPEN_CONTAINER(dropping)) var/obj/item/thing = dropping @@ -408,7 +406,7 @@ var/global/list/hygiene_props = list() return TRUE busy = FALSE - user.clean_blood() + user.clean() user.visible_message( SPAN_NOTICE("\The [user] washes their hands using \the [src]."), SPAN_NOTICE("You wash your hands using \the [src].")) @@ -428,13 +426,14 @@ var/global/list/hygiene_props = list() SPAN_NOTICE("\The [user] fills \the [RG] using \the [src]."), SPAN_NOTICE("You fill \the [RG] using \the [src].")) playsound(loc, 'sound/effects/sink.ogg', 75, 1) - RG.reagents.add_reagent(/decl/material/liquid/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + RG.add_to_reagents(/decl/material/liquid/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) return 1 else if (istype(O, /obj/item/baton)) var/obj/item/baton/B = O - if(B.bcell) - if(B.bcell.charge > 0 && B.status == 1) + var/obj/item/cell/cell = B.get_cell() + if(cell) + if(cell.charge > 0 && B.status == 1) flick("baton_active", src) if(isliving(user)) var/mob/living/M = user @@ -451,7 +450,7 @@ var/global/list/hygiene_props = list() return 1 else if(istype(O, /obj/item/mop)) if(REAGENTS_FREE_SPACE(O.reagents) >= 5) - O.reagents.add_reagent(/decl/material/liquid/water, 5) + O.add_to_reagents(/decl/material/liquid/water, 5) to_chat(user, SPAN_NOTICE("You wet \the [O] in \the [src].")) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) else @@ -475,7 +474,7 @@ var/global/list/hygiene_props = list() if(istype(O, /obj/item/chems/spray/extinguisher)) return TRUE // We're washing, not filling. - O.clean_blood() + O.clean() user.visible_message( \ SPAN_NOTICE("\The [user] washes \a [I] using \the [src]."), SPAN_NOTICE("You wash \a [I] using \the [src].")) @@ -604,7 +603,7 @@ var/global/list/hygiene_props = list() next_gurgle = world.time + 80 playsound(T, pick(SSfluids.gurgles), 50, 1) - T.add_fluid(/decl/material/liquid/water, min(75, fill_level - T.get_fluid_depth())) + T.add_to_reagents(/decl/material/liquid/water, min(75, fill_level - T.get_fluid_depth())) /obj/structure/hygiene/faucet/Process() ..() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 32c5c114abe..98ef552bfb1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -7,7 +7,7 @@ layer = SIDE_WINDOW_LAYER anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CAN_BE_PAINTED + atom_flags = ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CAN_BE_PAINTED obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_MOVES_UNSUPPORTED alpha = 180 material = /decl/material/solid/glass @@ -15,7 +15,7 @@ atmos_canpass = CANPASS_PROC handle_generic_blending = TRUE hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 100 + max_health = 100 var/damage_per_fire_tick = 2 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. var/construction_state = 2 @@ -128,20 +128,22 @@ return 1 /obj/structure/window/hitby(atom/movable/AM, var/datum/thrownthing/TT) - ..() - visible_message(SPAN_DANGER("[src] was hit by [AM].")) - var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - if(reinf_material) tforce *= 0.25 - if(health - tforce <= 7 && !reinf_material) - set_anchored(FALSE) - step(src, get_dir(AM, src)) - take_damage(tforce) + . = ..() + if(.) + visible_message(SPAN_DANGER("[src] was hit by [AM].")) + var/tforce = 0 + if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm + var/mob/I = AM + tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) + else if(isobj(AM)) + var/obj/item/I = AM + tforce = I.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + if(reinf_material) + tforce *= 0.25 + if(current_health - tforce <= 7 && !reinf_material) + set_anchored(FALSE) + step(src, get_dir(AM, src)) + take_damage(tforce) /obj/structure/window/attack_hand(mob/user) SHOULD_CALL_PARENT(FALSE) @@ -252,7 +254,7 @@ if(W.damtype == BRUTE || W.damtype == BURN) user.do_attack_animation(src) hit(W.force) - if(health <= 7) + if(current_health <= 7) set_anchored(FALSE) step(src, get_dir(user, src)) else @@ -263,7 +265,7 @@ // TODO: generalize to matter list and parts_type. /obj/structure/window/create_dismantled_products(turf/T) SHOULD_CALL_PARENT(FALSE) - var/list/products = material.create_object(loc, is_fulltile() ? 4 : 2) + var/list/products = material.create_object(loc, 1) if(reinf_material) for(var/obj/item/stack/material/S in products) S.reinf_material = reinf_material @@ -589,7 +591,7 @@ /obj/structure/window/reinforced/crescent/hitby() SHOULD_CALL_PARENT(FALSE) - return + return FALSE /obj/structure/window/reinforced/crescent/take_damage() return diff --git a/code/game/turfs/exterior/_exterior.dm b/code/game/turfs/exterior/_exterior.dm index beedcb3ba06..81efa56e732 100644 --- a/code/game/turfs/exterior/_exterior.dm +++ b/code/game/turfs/exterior/_exterior.dm @@ -4,11 +4,15 @@ footstep_type = /decl/footsteps/asteroid icon_state = "0" layer = PLATING_LAYER - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_PATH zone_membership_candidate = TRUE + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2STANDARD, + /decl/material/gas/nitrogen = MOLES_N2STANDARD + ) + var/base_color - var/diggable = 1 var/dirt_color = "#7c5e42" var/possible_states = 0 var/icon_edge_layer = -1 @@ -19,6 +23,14 @@ ///Overrides the level's strata for this turf. var/strata_override var/decl/material/material + /// Whether or not sand/clay has been dug up here. + var/dug = FALSE + var/is_fundament_turf = FALSE + var/reagent_type + +SAVED_VAR(/turf/exterior, owner) +SAVED_VAR(/turf/exterior, dug) +SAVED_VAR(/turf/exterior, is_fundament_turf) // Bit faster than return_air() for exoplanet exterior turfs /turf/exterior/get_air_graphic() @@ -56,9 +68,7 @@ return // If this is a mapload, then our neighbors will be updating their own icons too -- doing it for them is rude. - if(mapload) - update_icon() - else + if(!mapload) for(var/direction in global.alldirs) var/turf/target_turf = get_step_resolving_mimic(src, direction) if(istype(target_turf)) @@ -66,6 +76,18 @@ target_turf.queue_icon_update() else target_turf.update_icon() + update_icon() + + if(persistent_id) + reagent_type = null //Don't spawn new liquid on save load + + if(reagent_type && height < 0) + add_to_reagents(reagent_type, abs(height)) + +/turf/exterior/on_reagent_change() + . = ..() + if(reagent_type && height < 0 && reagents && reagents.total_volume < abs(height)) + add_to_reagents(abs(height) - reagents.total_volume) /turf/exterior/is_floor() return !density && !is_open() @@ -80,89 +102,12 @@ owner = null . = ..() -/turf/exterior/levelupdate() - for(var/obj/O in src) - O.hide(0) - -/turf/exterior/attackby(obj/item/C, mob/user) - //#TODO: Add some way to dig to lower levels? - if(diggable && IS_SHOVEL(C)) - if(C.do_tool_interaction(TOOL_SHOVEL, user, src, 5 SECONDS)) - new /obj/structure/pit(src) - diggable = FALSE - else - to_chat(user, SPAN_NOTICE("You stop shoveling.")) - return TRUE - - if(istype(C, /obj/item/stack/tile)) - var/obj/item/stack/tile/T = C - T.try_build_turf(user, src) - return TRUE - - . = ..() - /turf/exterior/explosion_act(severity) - SHOULD_CALL_PARENT(FALSE) + SHOULD_CALL_PARENT(TRUE) + ..() if(!istype(src, get_base_turf_by_area(src)) && (severity == 1 || (severity == 2 && prob(40)))) ChangeTurf(get_base_turf_by_area(src)) -/turf/exterior/on_update_icon() - . = ..() // Recalc AO and flooding overlay. - cut_overlays() - if(LAZYLEN(decals)) - add_overlay(decals) - - if(icon_edge_layer < 0) - return - - var/neighbors = 0 - for(var/direction in global.cardinal) - var/turf/exterior/turf_to_check = get_step_resolving_mimic(src, direction) - if(!istype(turf_to_check) || turf_to_check.density) - continue - if(istype(turf_to_check, type)) - neighbors |= direction - continue - if(!istype(turf_to_check) || icon_edge_layer > turf_to_check.icon_edge_layer) - var/image/I = image(icon, "edge[direction][icon_edge_states > 0 ? rand(0, icon_edge_states) : ""]") - I.layer = layer + icon_edge_layer - switch(direction) - if(NORTH) - I.pixel_y += world.icon_size - if(SOUTH) - I.pixel_y -= world.icon_size - if(EAST) - I.pixel_x += world.icon_size - if(WEST) - I.pixel_x -= world.icon_size - add_overlay(I) - - if(icon_has_corners) - for(var/direction in global.cornerdirs) - var/turf/exterior/turf_to_check = get_step_resolving_mimic(src, direction) - if(!istype(turf_to_check) || turf_to_check.density || istype(turf_to_check, type)) - continue - - if(icon_edge_layer > turf_to_check.icon_edge_layer) - var/draw_state - var/res = (neighbors & direction) - if(res == 0) - draw_state = "edge[direction]" - else if(res == direction) - draw_state = "corner[direction]" - if(draw_state && check_state_in_icon(draw_state, icon)) - var/image/I = image(icon, draw_state) - I.layer = layer + icon_edge_layer - if(direction & NORTH) - I.pixel_y += world.icon_size - else if(direction & SOUTH) - I.pixel_y -= world.icon_size - if(direction & EAST) - I.pixel_x += world.icon_size - else if(direction & WEST) - I.pixel_x -= world.icon_size - add_overlay(I) - /turf/exterior/on_defilement() ..() if(density) diff --git a/code/game/turfs/exterior/_exterior_digging.dm b/code/game/turfs/exterior/_exterior_digging.dm new file mode 100644 index 00000000000..87ce30f32b8 --- /dev/null +++ b/code/game/turfs/exterior/_exterior_digging.dm @@ -0,0 +1,12 @@ +/turf/exterior/dig_pit() + drop_diggable_resources() + if(is_fundament_turf) + return ..() + ChangeTurf(/turf/exterior/dirt, keep_air = TRUE, keep_air_below = TRUE, keep_height = TRUE) + +/turf/exterior/can_be_dug() + return !density && !is_open() + +/turf/exterior/clear_diggable_resources() + dug = TRUE + ..() diff --git a/code/game/turfs/exterior/_exterior_height.dm b/code/game/turfs/exterior/_exterior_height.dm new file mode 100644 index 00000000000..4cc7615676f --- /dev/null +++ b/code/game/turfs/exterior/_exterior_height.dm @@ -0,0 +1,14 @@ +/turf/exterior + var/height = 0 + +/turf/exterior/get_physical_height() + return density ? 0 : height + +/turf/exterior/set_height(new_height) + if(height != new_height) + height = new_height + for(var/turf/neighbor as anything in RANGE_TURFS(src, 1)) + neighbor.update_icon() + fluid_update() + return TRUE + return FALSE diff --git a/code/game/turfs/exterior/_exterior_icon.dm b/code/game/turfs/exterior/_exterior_icon.dm new file mode 100644 index 00000000000..d8198ddeccf --- /dev/null +++ b/code/game/turfs/exterior/_exterior_icon.dm @@ -0,0 +1,57 @@ +/turf/exterior/on_update_icon() + . = ..() // Recalc AO and flooding overlay. + cut_overlays() + if(LAZYLEN(decals)) + add_overlay(decals) + + if(icon_edge_layer < 0) + return + + var/neighbors = 0 + for(var/direction in global.cardinal) + var/turf/exterior/turf_to_check = get_step_resolving_mimic(src, direction) + if(!istype(turf_to_check) || turf_to_check.density) + continue + if(istype(turf_to_check, type)) + neighbors |= direction + continue + if(!istype(turf_to_check) || icon_edge_layer > turf_to_check.icon_edge_layer) + var/image/I = image(icon, "edge[direction][icon_edge_states > 0 ? rand(0, icon_edge_states) : ""]") + I.layer = layer + icon_edge_layer + switch(direction) + if(NORTH) + I.pixel_y += world.icon_size + if(SOUTH) + I.pixel_y -= world.icon_size + if(EAST) + I.pixel_x += world.icon_size + if(WEST) + I.pixel_x -= world.icon_size + add_overlay(I) + + if(icon_has_corners) + for(var/direction in global.cornerdirs) + var/turf/exterior/turf_to_check = get_step_resolving_mimic(src, direction) + if(!istype(turf_to_check) || turf_to_check.density || istype(turf_to_check, type)) + continue + + if(icon_edge_layer > turf_to_check.icon_edge_layer) + var/draw_state + var/res = (neighbors & direction) + if(res == 0) + draw_state = "edge[direction]" + else if(res == direction) + draw_state = "corner[direction]" + if(draw_state && check_state_in_icon(draw_state, icon)) + var/image/I = image(icon, draw_state) + I.layer = layer + icon_edge_layer + if(direction & NORTH) + I.pixel_y += world.icon_size + else if(direction & SOUTH) + I.pixel_y -= world.icon_size + if(direction & EAST) + I.pixel_x += world.icon_size + else if(direction & WEST) + I.pixel_x -= world.icon_size + add_overlay(I) + compile_overlays() diff --git a/code/game/turfs/exterior/_exterior_wall.dm b/code/game/turfs/exterior/_exterior_wall.dm new file mode 100644 index 00000000000..c0d6c5584ab --- /dev/null +++ b/code/game/turfs/exterior/_exterior_wall.dm @@ -0,0 +1,408 @@ +#define MAT_DROP_CHANCE 30 + +///List of all the /turf/exterior/wall that exists in the world on all z-levels +var/global/list/natural_walls = list() + +/obj/abstract/ramp_sculptor + name = "ramp sculptor" + icon_state = "x" + var/place_dir + +/obj/abstract/ramp_sculptor/south + icon_state = "arrow" + dir = SOUTH + place_dir = SOUTH + +/obj/abstract/ramp_sculptor/north + icon_state = "arrow" + dir = NORTH + place_dir = NORTH + +/obj/abstract/ramp_sculptor/east + icon_state = "arrow" + dir = EAST + place_dir = EAST + +/obj/abstract/ramp_sculptor/west + icon_state = "arrow" + dir = WEST + place_dir = WEST + +/obj/abstract/ramp_sculptor/Initialize() + ..() + var/turf/exterior/wall/ramp = get_turf(src) + if(istype(ramp) && !ramp.ramp_slope_direction) + if(!place_dir || !(place_dir in global.cardinal)) + for(var/checkdir in global.cardinal) + var/turf/neighbor = get_step(ramp, checkdir) + if(neighbor && neighbor.density) + place_dir = global.reverse_dir[checkdir] + break + if(place_dir) + dir = place_dir + ramp.make_ramp(null, place_dir) + return INITIALIZE_HINT_QDEL + +/turf/exterior/wall + name = "wall" + icon = 'icons/turf/walls/_previews.dmi' + icon_state = "natural" + density = TRUE + opacity = TRUE + density = TRUE + blocks_air = TRUE + turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_OBSTACLE + + var/ramp_slope_direction + var/paint_color + var/image/ore_overlay + var/decl/material/reinf_material + var/floor_type = /turf/exterior/barren + var/static/list/exterior_wall_shine_cache = list() + +/turf/exterior/wall/examine(mob/user, distance, infix, suffix) + . = ..() + if(paint_color) + to_chat(user, SPAN_NOTICE("It has been noticeably discoloured by the elements.")) + +/turf/exterior/wall/AltClick(mob/user) + + var/obj/item/P = user.get_active_hand() + if(user.Adjacent(src) && IS_PICK(P) && HasAbove(z)) + + var/user_dir = get_dir(src, user) + if(!(user_dir in global.cardinal)) + to_chat(user, SPAN_WARNING("You must be standing at a cardinal angle to create a ramp.")) + return TRUE + + var/turf/exterior/wall/support = get_step(src, global.reverse_dir[user_dir]) + if(!istype(support) || support.ramp_slope_direction) + to_chat(user, SPAN_WARNING("You cannot cut a ramp into a wall with no additional walls behind it.")) + return TRUE + + if(P.material?.hardness < material.hardness) + to_chat(user, SPAN_WARNING("\The [P] is not hard enough to cut through [material.solid_name].")) + return TRUE + + if(P.do_tool_interaction(TOOL_PICK, user, src, 3 SECONDS, suffix_message = ", forming it into a ramp") && !ramp_slope_direction) + make_ramp(user, user_dir) + return TRUE + + . = ..() + +/turf/proc/handle_ramp_dug_below(turf/exterior/wall/ramp) + if(simulated && !is_open()) + ChangeTurf(get_base_turf(z)) + +/turf/exterior/wall/proc/make_ramp(var/mob/user, var/new_slope, var/skip_icon_update = FALSE) + + ramp_slope_direction = new_slope + + var/old_ao = permit_ao + if(ramp_slope_direction) + drop_ore() + permit_ao = FALSE + blocks_air = FALSE + density = FALSE + opacity = FALSE + + // Pretend to be a normal floor turf under the ramp. + var/turf/exterior/under = floor_type + icon = initial(under.icon) + icon_state = initial(under.icon_state) + icon_edge_layer = initial(under.icon_edge_layer) + icon_edge_states = initial(under.icon_edge_states) + icon_has_corners = initial(under.icon_has_corners) + color = initial(under.color) + + decals = null + var/turf/ramp_above = GetAbove(src) + if(ramp_above) + ramp_above.handle_ramp_dug_below(src) + update_neighboring_ramps() + + else + permit_ao = initial(permit_ao) + blocks_air = initial(blocks_air) + density = initial(density) + color = initial(color) + set_opacity(!material || material.opacity >= 0.5) + + icon = 'icons/turf/walls/natural.dmi' + icon_state = "blank" + icon_edge_layer = initial(icon_edge_layer) + icon_edge_states = initial(icon_edge_states) + icon_has_corners = initial(icon_has_corners) + + if(!skip_icon_update) + for(var/turf/exterior/wall/neighbor in RANGE_TURFS(src, 1)) + neighbor.update_icon() + if(old_ao != permit_ao) + regenerate_ao() + +/turf/exterior/wall/proc/update_neighboring_ramps(destroying_self) + // Clear any ramps we were supporting. + for(var/turf/exterior/wall/neighbor in RANGE_TURFS(src, 1)) + if(!neighbor.ramp_slope_direction || neighbor == src) + continue + var/turf/exterior/wall/support = get_step(neighbor, global.reverse_dir[neighbor.ramp_slope_direction]) + if(!istype(support) || (destroying_self && support == src) || support.ramp_slope_direction) + neighbor.dismantle_wall(ramp_update = FALSE) // This will only occur on ramps, so no need to propagate to other ramps. + +/turf/exterior/wall/Initialize(var/ml, var/materialtype, var/rmaterialtype) + ..(ml, TRUE) // We update our own icon, no point doing it twice. + + // Clear mapped appearance. + color = null + icon = 'icons/turf/walls/natural.dmi' + icon_state = "blank" + + // Init ramp state if needed. + if(ramp_slope_direction) + make_ramp(null, ramp_slope_direction, TRUE) + + // Init materials. + + global.natural_walls += src + set_extension(src, /datum/extension/geological_data) + set_turf_materials((materialtype || material || get_default_material()), (rmaterialtype || reinf_material), force = TRUE) + . = INITIALIZE_HINT_LATELOAD + +/turf/exterior/wall/LateInitialize(var/ml) + ..() + update_material(!ml) + spread_deposit() + if(!ramp_slope_direction && floor_type && HasAbove(z)) + var/turf/T = GetAbove(src) + if(!istype(T, floor_type) && T.is_open()) + T.ChangeTurf(floor_type, keep_air = TRUE) + //Set the rock color + if(!paint_color) + var/rcolor = SSmaterials.get_rock_color(src) + if(rcolor) + paint_color = rcolor + queue_icon_update() + +/turf/exterior/wall/explosion_act(severity) + SHOULD_CALL_PARENT(FALSE) + if(severity == 1 || (severity == 2 && prob(40))) + dismantle_wall() + +/turf/exterior/wall/Destroy() + global.natural_walls -= src + if(!ramp_slope_direction) + update_neighboring_ramps(destroying_self = TRUE) + . = ..() + +/turf/exterior/wall/proc/spread_deposit() + if(!istype(reinf_material) || reinf_material.ore_spread_chance <= 0) + return + for(var/trydir in global.cardinal) + if(!prob(reinf_material.ore_spread_chance)) + continue + var/turf/exterior/wall/target_turf = get_step_resolving_mimic(src, trydir) + if(!istype(target_turf) || !isnull(target_turf.reinf_material)) + continue + target_turf.set_turf_materials(target_turf.material, reinf_material) + target_turf.spread_deposit() + +/turf/exterior/wall/attackby(obj/item/W, mob/user, click_params) + + if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS)) + return ..() + + if(!ramp_slope_direction) + + if(istype(W, /obj/item/depth_scanner)) + var/obj/item/depth_scanner/C = W + C.scan_atom(user, src) + return TRUE + + if (istype(W, /obj/item/measuring_tape)) + var/obj/item/measuring_tape/P = W + user.visible_message(SPAN_NOTICE("\The [user] extends [P] towards [src]."),SPAN_NOTICE("You extend [P] towards [src].")) + if(do_after(user,10, src)) + to_chat(user, SPAN_NOTICE("\The [src] has been excavated to a depth of [excavation_level]cm.")) + return TRUE + + if(istype(W, /obj/item/tool/xeno)) + return handle_xenoarch_tool_interaction(W, user) + + // Drill out natural walls. + if(W.material?.hardness >= material.hardness && W.do_tool_interaction(TOOL_PICK, user, src, 2 SECONDS, suffix_message = destroy_artifacts(W, INFINITY))) + dismantle_wall() + return TRUE + + . = ..() + +/turf/exterior/wall/proc/update_strings() + if(reinf_material) + SetName("[reinf_material.solid_name] deposit") + desc = "A natural cliff face composed of bare [material.solid_name] and a deposit of [reinf_material.solid_name]." + else + SetName("natural [material.solid_name] wall") + desc = "A natural cliff face composed of bare [material.solid_name]." + +/turf/exterior/wall/proc/update_material(var/update_neighbors) + if(material) + explosion_resistance = material.explosion_resistance + if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) + explosion_resistance = reinf_material.explosion_resistance + update_strings() + set_opacity(material.opacity >= 0.5) + if(reinf_material?.ore_icon_overlay) + ore_overlay = image('icons/turf/mining_decals.dmi', "[reinf_material.ore_icon_overlay]") + ore_overlay.appearance_flags = RESET_COLOR + var/matrix/M + if(prob(50)) + M = M || matrix() + M.Scale(-1,1) + if(prob(75)) + M = M || matrix() + M.Turn(pick(90, 180, 270)) + ore_overlay.color = reinf_material.color + ore_overlay.layer = DECAL_LAYER + if(M) + ore_overlay.transform = M + if(update_neighbors) + for(var/direction in global.alldirs) + var/turf/exterior/target_turf = get_step_resolving_mimic(src, direction) + if(istype(target_turf)) + target_turf.update_icon() + update_icon() + +/turf/exterior/wall/on_update_icon() + + if(!istype(material)) + return + + var/list/wall_connections = list() + for(var/stepdir in global.alldirs) + + // Get the wall. + var/turf/exterior/wall/T = get_step_resolving_mimic(src, stepdir) + if(!istype(T)) + continue + + if(ramp_slope_direction) // We are a ramp. + // Adjacent ramps flowing in the same direction as us. + if(ramp_slope_direction == T.ramp_slope_direction) + wall_connections += stepdir + continue + // It's an adjacent non-ramp wall. + if(!T.ramp_slope_direction) + // It is behind us. + if(stepdir & global.reverse_dir[ramp_slope_direction]) + wall_connections += stepdir + continue + else // We are a wall. + // It is a wall. + if(!T.ramp_slope_direction) + wall_connections += stepdir + continue + // It's a ramp running away from us. + if(stepdir & T.ramp_slope_direction) + wall_connections += stepdir + continue + + var/list/corner_states = dirs_to_corner_states(wall_connections) + + var/material_icon_base = material.icon_base_natural || 'icons/turf/walls/natural.dmi' + var/base_color = paint_color ? paint_color : material.color + + var/shine = 0 + if(material?.reflectiveness > 0) + var/shine_cache_key = "[material.reflectiveness]-[material.color]" + shine = exterior_wall_shine_cache[shine_cache_key] + if(isnull(shine)) + // patented formula based on color's value (in HSV) + shine = clamp((material.reflectiveness * 0.01) * 255, 10, (0.6 * ReadHSV(RGBtoHSV(material.color))[3])) + exterior_wall_shine_cache[shine_cache_key] = shine + + var/new_icon + if(ramp_slope_direction) + + ..() // Draw the floor under us. + + var/turf/exterior/wall/neighbor = get_step(src, turn(ramp_slope_direction, -90)) + var/has_left_neighbor = istype(neighbor) && neighbor.ramp_slope_direction == ramp_slope_direction + neighbor = get_step(src, turn(ramp_slope_direction, 90)) + var/has_right_neighbor = istype(neighbor) && neighbor.ramp_slope_direction == ramp_slope_direction + + var/state = "ramp-single" + if(has_left_neighbor && has_right_neighbor) + state = "ramp-blend-full" + else if(has_left_neighbor) + state = "ramp-blend-left" + else if(has_right_neighbor) + state = "ramp-blend-right" + + var/image/I = image(material_icon_base, state, dir = ramp_slope_direction) + I.color = base_color + I.appearance_flags |= RESET_COLOR + add_overlay(I) + if(shine) + I = image(material_icon_base, "[state]-shine", dir = ramp_slope_direction) + I.appearance_flags |= RESET_ALPHA + I.alpha = shine + add_overlay(I) + + else + + new_icon = get_combined_wall_icon(corner_states, null, material_icon_base, base_color, shine_value = shine) + if(icon != new_icon) + icon = new_icon + if(icon_state != "") + icon_state = "" + if(color) + color = null + + if(ore_overlay) + add_overlay(ore_overlay) + if(excav_overlay) + add_overlay(excav_overlay) + if(archaeo_overlay) + add_overlay(archaeo_overlay) + +/turf/exterior/wall/proc/drop_ore() + if(reinf_material?.ore_result_amount) + pass_geodata_to(new /obj/item/stack/material/ore(src, reinf_material.ore_result_amount, reinf_material.type)) + reinf_material = null + ore_overlay = null + update_material(FALSE) + if(prob(MAT_DROP_CHANCE) && !ramp_slope_direction && material) + pass_geodata_to(new /obj/item/stack/material/ore(src, material.ore_result_amount, material.type)) + +/turf/exterior/wall/proc/dismantle_wall(no_product = FALSE, ramp_update = TRUE) + + if(!no_product) + drop_ore() + destroy_artifacts(null, INFINITY) + + if(ramp_update && !ramp_slope_direction) + ramp_slope_direction = NORTH // Temporary so we don't let any neighboring ramps use us as supports. + update_neighboring_ramps() + ramp_slope_direction = null + + playsound(src, 'sound/items/Welder.ogg', 100, 1) + return ChangeTurf(floor_type || get_base_turf_by_area(src), keep_air = TRUE) + +/turf/exterior/wall/proc/pass_geodata_to(obj/O) + var/datum/extension/geological_data/ours = get_extension(src, /datum/extension/geological_data) + if(ours.geodata) + ours.geodata.UpdateNearbyArtifactInfo(src) + set_extension(O, /datum/extension/geological_data) + var/datum/extension/geological_data/newdata = get_extension(O, /datum/extension/geological_data) + if(newdata) + newdata.set_data(ours.geodata.get_copy()) + +/turf/exterior/wall/Bumped(var/atom/movable/AM) + . = ..() + if(!. && !ramp_slope_direction && ismob(AM)) + var/mob/M = AM + var/obj/item/held = M.get_active_hand() + if(IS_PICK(held)) + attackby(held, M) + return TRUE + +#undef MAT_DROP_CHANCE \ No newline at end of file diff --git a/code/game/turfs/exterior/exterior_wall_subtypes.dm b/code/game/turfs/exterior/_exterior_wall_subtypes.dm similarity index 100% rename from code/game/turfs/exterior/exterior_wall_subtypes.dm rename to code/game/turfs/exterior/_exterior_wall_subtypes.dm diff --git a/code/game/turfs/exterior/exterior_wall_xenoarch.dm b/code/game/turfs/exterior/_exterior_wall_xenoarch.dm similarity index 85% rename from code/game/turfs/exterior/exterior_wall_xenoarch.dm rename to code/game/turfs/exterior/_exterior_wall_xenoarch.dm index 43fbba022a9..68fe54291ad 100644 --- a/code/game/turfs/exterior/exterior_wall_xenoarch.dm +++ b/code/game/turfs/exterior/_exterior_wall_xenoarch.dm @@ -41,18 +41,19 @@ pass_geodata_to(new /obj/item/strangerock(src, F.find_type)) finds.Remove(F) -/turf/exterior/wall/proc/handle_xenoarch_tool_interaction(var/obj/item/pickaxe/xeno/P, var/mob/user) +/turf/exterior/wall/proc/handle_xenoarch_tool_interaction(var/obj/item/tool/xeno/P, var/mob/user) . = TRUE - if(last_excavation + P.digspeed > world.time)//prevents message spam + if(P.material?.hardness < material.hardness) + to_chat(user, SPAN_WARNING("\The [P] is not hard enough to excavate [material.solid_name].")) + return + if(last_excavation + 2 SECONDS > world.time)//prevents message spam return last_excavation = world.time - playsound(user, P.drill_sound, 20, 1) - var/newDepth = excavation_level + P.excavation_amount // Used commonly below + var/newDepth = excavation_level + P.get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) // Used commonly below //handle any archaeological finds we might uncover - to_chat(user, SPAN_NOTICE("You start [P.drill_verb][destroy_artifacts(P, newDepth)].")) - if(!do_after(user,P.digspeed, src)) + if(!P.do_tool_interaction(TOOL_PICK, user, src, 2 SECONDS, suffix_message = destroy_artifacts(P, newDepth))) return - + if(length(finds)) var/datum/find/F = finds[1] if(newDepth == F.excavation_required) // When the pick hits that edge just right, you extract your find perfectly, it's never confined in a rock @@ -60,8 +61,6 @@ else if(newDepth > F.excavation_required - F.clearance_range) // Not quite right but you still extract your find, the closer to the bottom the better, but not above 80% excavate_find(prob(80 * (F.excavation_required - newDepth) / F.clearance_range), F) - to_chat(user, SPAN_NOTICE("You finish [P.drill_verb] \the [src].")) - if(newDepth >= 200) // This means the rock is mined out fully if(artifact_find) if( excavation_level > 0 || prob(15) ) @@ -76,7 +75,8 @@ dismantle_wall() return - excavation_level += P.excavation_amount + var/excav_level = P.get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) + excavation_level += excav_level //archaeo overlays if(!archaeo_overlay && finds && finds.len) var/datum/find/F = finds[1] @@ -90,13 +90,13 @@ //there's got to be a better way to do this var/update_excav_overlay = 0 if(excavation_level >= 150) - if(excavation_level - P.excavation_amount < 150) + if(excavation_level - excav_level < 150) update_excav_overlay = 1 else if(excavation_level >= 100) - if(excavation_level - P.excavation_amount < 100) + if(excavation_level - excav_level < 100) update_excav_overlay = 1 else if(excavation_level >= 50) - if(excavation_level - P.excavation_amount < 50) + if(excavation_level - excav_level < 50) update_excav_overlay = 1 //update overlays displaying excavation level @@ -106,7 +106,7 @@ queue_icon_update() //drop some rocks - next_rock += P.excavation_amount + next_rock += excav_level var/amount_rocks = round(next_rock / 50) next_rock = next_rock % 50 if(amount_rocks > 0) diff --git a/code/game/turfs/exterior/exterior_barren.dm b/code/game/turfs/exterior/exterior_barren.dm index 795fa140df5..2c5bf65a930 100644 --- a/code/game/turfs/exterior/exterior_barren.dm +++ b/code/game/turfs/exterior/exterior_barren.dm @@ -2,6 +2,10 @@ name = "ground" icon = 'icons/turf/exterior/barren.dmi' icon_edge_layer = EXT_EDGE_BARREN + is_fundament_turf = TRUE + +/turf/exterior/barren/airless + initial_gas = null /turf/exterior/barren/Initialize() if(prob(20)) diff --git a/code/game/turfs/exterior/exterior_chlorine.dm b/code/game/turfs/exterior/exterior_chlorine.dm index d7926aebdc7..8fd7e05e08a 100644 --- a/code/game/turfs/exterior/exterior_chlorine.dm +++ b/code/game/turfs/exterior/exterior_chlorine.dm @@ -1,12 +1,3 @@ -/turf/exterior/water/chlorine - name = "chlorine marsh" - desc = "A pool of noxious liquid chlorine. It's full of silt and plant matter." - icon = 'icons/turf/exterior/water_still.dmi' - color = "#d2e0b7" - dirt_color = "#d2e0b7" - base_color = "#d2e0b7" - reagent_type = /decl/material/gas/chlorine - /turf/exterior/chlorine_sand name = "chlorinated sand" desc = "Sand that has been heavily contaminated by chlorine." @@ -15,3 +6,9 @@ icon_edge_layer = EXT_EDGE_CHLORINE_SAND dirt_color = "#d2e0b7" footstep_type = /decl/footsteps/sand + +/turf/exterior/chlorine_sand/marsh + name = "chlorine marsh" + desc = "A pool of noxious liquid chlorine. It's full of silt and plant matter." + reagent_type = /decl/material/gas/chlorine + height = -(FLUID_SHALLOW) diff --git a/code/game/turfs/exterior/exterior_concrete.dm b/code/game/turfs/exterior/exterior_concrete.dm index 4a1fb989f44..2bb93d89f33 100644 --- a/code/game/turfs/exterior/exterior_concrete.dm +++ b/code/game/turfs/exterior/exterior_concrete.dm @@ -14,12 +14,14 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' name = "concrete" desc = "A flat expanse of artificial stone-like artificial material." icon = 'icons/turf/exterior/concrete.dmi' - diggable = FALSE var/broken var/burned +/turf/exterior/concrete/can_be_dug() + return FALSE + /turf/exterior/concrete/flooded - flooded = TRUE + flooded = /decl/material/liquid/water color = COLOR_LIQUID_WATER /turf/exterior/concrete/Initialize(var/ml) @@ -39,8 +41,10 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' /turf/exterior/concrete/reinforced name = "reinforced concrete" desc = "Stone-like artificial material. It has been reinforced with an unknown compound." + icon_state = "preview_reinforced" /turf/exterior/concrete/reinforced/Initialize(ml) + icon_state = "0" //Clear mapper icon LAZYDISTINCTADD(decals, "hexacrete") . = ..() @@ -51,3 +55,11 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' name = "asphalt" color = COLOR_GRAY40 base_color = COLOR_GRAY40 + +/turf/exterior/concrete/slab + name = "concrete slab" + desc = "A slab of stone-like artificial material." + icon_state = "preview_inset" +/turf/exterior/concrete/reinforced/Initialize(ml) + icon_state = "0" //Clear mapper icon + . = ..() \ No newline at end of file diff --git a/code/game/turfs/exterior/exterior_dirt.dm b/code/game/turfs/exterior/exterior_dirt.dm index 8fc9fa1da4d..7c0ae50be4a 100644 --- a/code/game/turfs/exterior/exterior_dirt.dm +++ b/code/game/turfs/exterior/exterior_dirt.dm @@ -3,4 +3,18 @@ desc = "A flat expanse of dry, cracked earth." icon = 'icons/turf/exterior/dirt.dmi' icon_edge_layer = EXT_EDGE_DIRT + color = "#41311b" + base_color = "#41311b" footstep_type = /decl/footsteps/asteroid + is_fundament_turf = TRUE + +/turf/exterior/dirt/fluid_act(var/datum/reagents/fluids) + SHOULD_CALL_PARENT(FALSE) + var/turf/new_turf = ChangeTurf(/turf/exterior/mud, keep_air = TRUE, keep_air_below = TRUE) + return new_turf.fluid_act(fluids) + + +/turf/exterior/wall/dirt + material = /decl/material/solid/soil + color = "#41311b" + diff --git a/code/game/turfs/exterior/exterior_grass.dm b/code/game/turfs/exterior/exterior_grass.dm index 2f700ee0695..f2f6039fa77 100644 --- a/code/game/turfs/exterior/exterior_grass.dm +++ b/code/game/turfs/exterior/exterior_grass.dm @@ -4,15 +4,21 @@ icon = 'icons/turf/exterior/grass.dmi' footstep_type = /decl/footsteps/grass icon_edge_layer = EXT_EDGE_GRASS + color = "#5e7a3b" + base_color = "#5e7a3b" + icon_has_corners = TRUE /turf/exterior/wildgrass name = "wild grass" icon = 'icons/turf/exterior/wildgrass.dmi' icon_edge_layer = EXT_EDGE_GRASS_WILD - icon_has_corners = TRUE - color = "#799c4b" - base_color = "#799c4b" footstep_type = /decl/footsteps/grass + color = "#5e7a3b" + base_color = "#5e7a3b" + icon_has_corners = TRUE + +/turf/exterior/wildgrass/get_movable_alpha_mask_state(atom/movable/mover) + . = ..() || "mask_grass" /turf/exterior/wildgrass/Initialize(mapload, no_update_icon) . = ..() @@ -35,9 +41,11 @@ /turf/exterior/wildgrass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if((temperature > T0C + 200 && prob(5)) || temperature > T0C + 1000) - melt() + handle_melting() + return ..() -/turf/exterior/wildgrass/melt() +/turf/exterior/wildgrass/handle_melting(list/meltable_materials) + . = ..() if(icon_state != "scorched") SetName("scorched ground") icon_state = "scorched" diff --git a/code/game/turfs/exterior/exterior_ice.dm b/code/game/turfs/exterior/exterior_ice.dm index f2016b237f5..acb8d184f22 100644 --- a/code/game/turfs/exterior/exterior_ice.dm +++ b/code/game/turfs/exterior/exterior_ice.dm @@ -2,6 +2,18 @@ name = "ice" icon = 'icons/turf/exterior/ice.dmi' footstep_type = /decl/footsteps/plating + base_color = COLOR_LIQUID_WATER + color = COLOR_LIQUID_WATER + +/turf/exterior/ice/Initialize() + . = ..() + update_icon() + +/turf/exterior/ice/on_update_icon() + . = ..() + var/image/I = image(icon, "shine") + I.appearance_flags |= RESET_COLOR + add_overlay(I) /turf/exterior/snow name = "snow" @@ -18,11 +30,9 @@ . += snow.get_movement_delay(travel_dir, mover) /turf/exterior/snow/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - melt() + handle_melting() + return ..() -/turf/exterior/snow/melt() - if(icon_state != "permafrost") - SetName("permafrost") - icon_state = "permafrost" - icon_edge_layer = -1 - footstep_type = /decl/footsteps/asteroid +/turf/exterior/snow/handle_melting(list/meltable_materials) + . = ..() + ChangeTurf(/turf/exterior/ice) diff --git a/code/game/turfs/exterior/exterior_material.dm b/code/game/turfs/exterior/exterior_material.dm new file mode 100644 index 00000000000..5a98a67b0cc --- /dev/null +++ b/code/game/turfs/exterior/exterior_material.dm @@ -0,0 +1,38 @@ +/turf/exterior/set_turf_materials(decl/material/new_material, decl/material/new_reinf_material, force) + + if(ispath(new_material)) + new_material = GET_DECL(new_material) + + if(material != new_material || force) + material = new_material + if(!istype(material)) + PRINT_STACK_TRACE("Exterior turf has been supplied non-material '[material]'.") + material = get_default_material() + . = TRUE + + if(.) + if(material) + name = "[material.adjective_name] [initial(name)]" + base_color = material.color + else + name = initial(name) + base_color = initial(base_color) + dirt_color = base_color + color = base_color + update_icon() + +/turf/exterior/get_material() + return material + +/turf/exterior/wall/get_default_material() + . = GET_DECL(SSmaterials.get_strata_material_type(src) || /decl/material/solid/stone/sandstone) + +/turf/exterior/wall/set_turf_materials(decl/material/new_material, decl/material/new_reinf_material, force) + . = ..() + if(ispath(new_reinf_material)) + new_reinf_material = GET_DECL(new_reinf_material) + if(reinf_material != new_reinf_material || !force) + reinf_material = new_reinf_material + . = TRUE + if(.) + update_material() diff --git a/code/game/turfs/exterior/exterior_mud.dm b/code/game/turfs/exterior/exterior_mud.dm index 6f73f298485..4e2ca34ac1c 100644 --- a/code/game/turfs/exterior/exterior_mud.dm +++ b/code/game/turfs/exterior/exterior_mud.dm @@ -1,16 +1,57 @@ +/turf/exterior/clay + name = "clay" + desc = "Thick, claggy clay." + icon = 'icons/turf/exterior/mud_light.dmi' + icon_edge_layer = EXT_EDGE_CLAY + footstep_type = /decl/footsteps/mud + is_fundament_turf = TRUE + +/turf/exterior/clay/get_diggable_resources() + return dug ? null : list(/obj/item/stack/material/ore/clay = list(3, 2)) + +/turf/exterior/clay/drop_diggable_resources() + if(!dug && prob(15)) + new /obj/item/rock(src, /decl/material/solid/stone/flint) + return ..() + +/turf/exterior/clay/flooded + flooded = /decl/material/liquid/water + /turf/exterior/mud name = "mud" - desc = "Thick, claggy and waterlogged." - icon = 'icons/turf/exterior/mud_light.dmi' + desc = "Thick, waterlogged mud." + icon = 'icons/turf/exterior/mud_dark.dmi' icon_edge_layer = EXT_EDGE_MUD footstep_type = /decl/footsteps/mud + is_fundament_turf = TRUE -/turf/exterior/mud/dark - icon = 'icons/turf/exterior/mud_dark.dmi' - icon_edge_layer = EXT_EDGE_MUD_DARK +/turf/exterior/mud/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(!reagents?.total_volume) + ChangeTurf(/turf/exterior/dry, keep_air = TRUE, keep_air_below = TRUE) + return + return ..() + +/turf/exterior/mud/water + color = COLOR_SKY_BLUE + reagent_type = /decl/material/liquid/water + height = -(FLUID_SHALLOW) + +/turf/exterior/mud/water/deep + color = COLOR_BLUE + height = -(FLUID_DEEP) + +/turf/exterior/mud/flooded + flooded = /decl/material/liquid/water /turf/exterior/dry name = "dry mud" desc = "Should have stayed hydrated." dirt_color = "#ae9e66" - icon = 'icons/turf/exterior/seafloor.dmi' \ No newline at end of file + icon = 'icons/turf/exterior/seafloor.dmi' + is_fundament_turf = TRUE + +/turf/exterior/dry/fluid_act(datum/reagents/fluids) + SHOULD_CALL_PARENT(FALSE) + var/turf/new_turf = ChangeTurf(/turf/exterior/mud, keep_air = TRUE, keep_air_below = TRUE) + return new_turf.fluid_act(fluids) + diff --git a/code/game/turfs/exterior/exterior_ocean.dm b/code/game/turfs/exterior/exterior_ocean.dm index a78e1e0bbf6..aeae32c2b25 100644 --- a/code/game/turfs/exterior/exterior_ocean.dm +++ b/code/game/turfs/exterior/exterior_ocean.dm @@ -2,5 +2,5 @@ name = "open ocean" icon = 'icons/turf/exterior/ocean_deep.dmi' icon_state = "0" - flooded = TRUE + flooded = /decl/material/liquid/water icon_edge_layer = EXT_EDGE_OCEAN \ No newline at end of file diff --git a/code/game/turfs/exterior/exterior_path.dm b/code/game/turfs/exterior/exterior_path.dm new file mode 100644 index 00000000000..78f91240bee --- /dev/null +++ b/code/game/turfs/exterior/exterior_path.dm @@ -0,0 +1,15 @@ +/turf/exterior/path + name = "path" + color = COLOR_GRAY + base_color = COLOR_GRAY + icon = 'icons/turf/exterior/cobblestone.dmi' + icon_state = "0" + icon_edge_layer = EXT_EDGE_PATH + +/turf/exterior/path/running_bond + icon = 'icons/turf/exterior/running_bond.dmi' + icon_edge_layer = null + +/turf/exterior/path/herringbone + icon = 'icons/turf/exterior/herringbone.dmi' + icon_edge_layer = null diff --git a/code/game/turfs/exterior/exterior_rock.dm b/code/game/turfs/exterior/exterior_rock.dm index 1bfe367da82..ae0d797f62b 100644 --- a/code/game/turfs/exterior/exterior_rock.dm +++ b/code/game/turfs/exterior/exterior_rock.dm @@ -3,14 +3,12 @@ icon = 'icons/turf/exterior/rock.dmi' icon_edge_layer = EXT_EDGE_VOLCANIC +/turf/exterior/rock/can_be_dug() + return FALSE + /turf/exterior/rock/Initialize(mapload, no_update_icon) . = ..() - material = SSmaterials.get_strata_material_type(src) - if(material) - var/decl/material/M = GET_DECL(material) - name = "[M.adjective_name] floor" - dirt_color = M.color - color = M.color + set_turf_materials(SSmaterials.get_strata_material_type(src)) /turf/exterior/rock/volcanic name = "volcanic floor" diff --git a/code/game/turfs/exterior/exterior_sand.dm b/code/game/turfs/exterior/exterior_sand.dm index 491a9c6fcfb..cb4f7f480b5 100644 --- a/code/game/turfs/exterior/exterior_sand.dm +++ b/code/game/turfs/exterior/exterior_sand.dm @@ -4,18 +4,40 @@ dirt_color = "#ae9e66" footstep_type = /decl/footsteps/sand icon = 'icons/turf/exterior/sand.dmi' - icon_edge_layer = EXT_EDGE_SAND + icon_edge_layer = EXT_EDGE_SAND icon_has_corners = TRUE possible_states = 4 +/turf/exterior/sand/get_diggable_resources() + return dug ? null : list(/obj/item/stack/material/ore/sand = list(3, 2)) + +/turf/exterior/sand/drop_diggable_resources() + if(!dug && prob(15)) + new /obj/item/rock(src, /decl/material/solid/stone/flint) + return ..() + /turf/exterior/sand/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if((temperature > T0C + 1700 && prob(5)) || temperature > T0C + 3000) - melt() + handle_melting() + return ..() + +/turf/exterior/sand/water + color = COLOR_SKY_BLUE + reagent_type = /decl/material/liquid/water + height = -(FLUID_SHALLOW) -/turf/exterior/sand/melt() +/turf/exterior/sand/water/deep + color = COLOR_BLUE + height = -(FLUID_DEEP) + +/turf/exterior/sand/handle_melting(list/meltable_materials) + . = ..() if(icon_state != "glass") SetName("molten silica") desc = "A glassed patch of sand." icon_state = "glass" icon_edge_layer = -1 - diggable = FALSE + clear_diggable_resources() + +/turf/exterior/sand/can_be_dug() + return icon_state != "glass" && ..() diff --git a/code/game/turfs/exterior/exterior_seafloor.dm b/code/game/turfs/exterior/exterior_seafloor.dm index 4ab69066acd..3c58eb85336 100644 --- a/code/game/turfs/exterior/exterior_seafloor.dm +++ b/code/game/turfs/exterior/exterior_seafloor.dm @@ -5,8 +5,11 @@ icon_edge_layer = EXT_EDGE_SEAFLOOR var/detail_decal +/turf/exterior/seafloor/get_diggable_resources() + return dug ? null : list(/obj/item/stack/material/ore/sand = list(3, 2)) + /turf/exterior/seafloor/flooded - flooded = TRUE + flooded = /decl/material/liquid/water color = COLOR_LIQUID_WATER /turf/exterior/seafloor/Initialize() diff --git a/code/game/turfs/exterior/exterior_shrouded.dm b/code/game/turfs/exterior/exterior_shrouded.dm index 45fc2541b04..7d916ddbd02 100644 --- a/code/game/turfs/exterior/exterior_shrouded.dm +++ b/code/game/turfs/exterior/exterior_shrouded.dm @@ -4,3 +4,10 @@ desc = "Sand that has been packed in to solid earth." dirt_color = "#3e3960" possible_states = 8 + +/turf/exterior/shrouded/tar + name = "tar" + desc = "A pool of viscous and sticky tar." + movement_delay = 12 + reagent_type = /decl/material/liquid/tar + height = -(FLUID_SHALLOW) diff --git a/code/game/turfs/exterior/exterior_sky.dm b/code/game/turfs/exterior/exterior_sky.dm index 9f61b8056c8..766a73a599c 100644 --- a/code/game/turfs/exterior/exterior_sky.dm +++ b/code/game/turfs/exterior/exterior_sky.dm @@ -1,33 +1,33 @@ -/turf/exterior/open/sky +/turf/open/sky name = "sky" desc = "Hope you don't have a fear of heights..." icon = 'icons/turf/exterior/sky_static.dmi' icon_state = "0" z_flags = 0 -/turf/exterior/open/sky/north +/turf/open/sky/north dir = NORTH -/turf/exterior/open/sky/south +/turf/open/sky/south dir = SOUTH -/turf/exterior/open/sky/west +/turf/open/sky/west dir = WEST -/turf/exterior/open/sky/east +/turf/open/sky/east dir = EAST -/turf/exterior/open/sky/moving +/turf/open/sky/moving icon = 'icons/turf/exterior/sky_slow.dmi' -/turf/exterior/open/sky/moving/north +/turf/open/sky/moving/north dir = NORTH -/turf/exterior/open/sky/moving/south +/turf/open/sky/moving/south dir = SOUTH -/turf/exterior/open/sky/moving/west +/turf/open/sky/moving/west dir = WEST -/turf/exterior/open/sky/moving/east +/turf/open/sky/moving/east dir = EAST diff --git a/code/game/turfs/exterior/exterior_tar.dm b/code/game/turfs/exterior/exterior_tar.dm deleted file mode 100644 index 16461e8a378..00000000000 --- a/code/game/turfs/exterior/exterior_tar.dm +++ /dev/null @@ -1,9 +0,0 @@ -/turf/exterior/water/tar - name = "tar" - desc = "A pool of viscous and sticky tar." - icon = 'icons/turf/exterior/water_still.dmi' - movement_delay = 12 - reagent_type = /decl/material/liquid/tar - color = "#3e3960" - base_color = "#3e3960" - dirt_color = "#3e3960" diff --git a/code/game/turfs/exterior/exterior_wall.dm b/code/game/turfs/exterior/exterior_wall.dm deleted file mode 100644 index f46bceeb40d..00000000000 --- a/code/game/turfs/exterior/exterior_wall.dm +++ /dev/null @@ -1,238 +0,0 @@ -#define MAT_DROP_CHANCE 30 - -///List of all the /turf/exterior/wall that exists in the world on all z-levels -var/global/list/natural_walls = list() - -/turf/exterior/wall - name = "wall" - icon = 'icons/turf/walls/_previews.dmi' - icon_state = "natural" - density = TRUE - opacity = TRUE - density = TRUE - blocks_air = TRUE - turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_OBSTACLE - - var/paint_color - var/image/ore_overlay - var/decl/material/reinf_material - var/floor_type = /turf/exterior/barren - var/static/list/exterior_wall_shine_cache = list() - -/turf/exterior/wall/examine(mob/user, distance, infix, suffix) - . = ..() - if(paint_color) - to_chat(user, SPAN_NOTICE("It has been noticeably discoloured by the elements.")) - -/turf/exterior/wall/Initialize(var/ml, var/materialtype, var/rmaterialtype) - ..(ml, TRUE) // We update our own icon, no point doing it twice. - - // Clear mapping icons. - icon = 'icons/turf/walls/solid.dmi' - icon_state = "blank" - color = null - - // Init materials. - material = SSmaterials.get_strata_material_type(src) - - global.natural_walls += src - - set_extension(src, /datum/extension/geological_data) - if(!ispath(material, /decl/material)) - material = materialtype || get_default_material() - if(ispath(material, /decl/material)) - material = GET_DECL(material) - if(!ispath(reinf_material, /decl/material)) - reinf_material = rmaterialtype - if(ispath(reinf_material, /decl/material)) - reinf_material = GET_DECL(reinf_material) - . = INITIALIZE_HINT_LATELOAD - -/turf/exterior/wall/LateInitialize(var/ml) - ..() - update_material(!ml) - spread_deposit() - if(floor_type && HasAbove(z)) - var/turf/T = GetAbove(src) - if(!istype(T, floor_type) && T.is_open()) - T.ChangeTurf(floor_type, keep_air = TRUE) - //Set the rock color - if(!paint_color) - var/rcolor = SSmaterials.get_rock_color(src) - if(rcolor) - paint_color = rcolor - queue_icon_update() - -/turf/exterior/wall/explosion_act(severity) - if(severity == 1 || (severity == 2 && prob(40))) - dismantle_wall() - -/turf/exterior/wall/Destroy() - global.natural_walls -= src - . = ..() - -/turf/exterior/wall/proc/set_material(var/decl/material/newmaterial, var/decl/material/newrmaterial) - material = newmaterial - if(ispath(material, /decl/material)) - material = GET_DECL(material) - else if(!istype(material)) - PRINT_STACK_TRACE("Wall has been supplied non-material '[newmaterial]'.") - material = GET_DECL(get_default_material()) - reinf_material = newrmaterial - if(ispath(reinf_material, /decl/material)) - reinf_material = GET_DECL(reinf_material) - else if(!istype(reinf_material)) - reinf_material = null - update_material() - -/turf/exterior/wall/proc/spread_deposit() - if(!istype(reinf_material) || reinf_material.ore_spread_chance <= 0) - return - for(var/trydir in global.cardinal) - if(!prob(reinf_material.ore_spread_chance)) - continue - var/turf/exterior/wall/target_turf = get_step_resolving_mimic(src, trydir) - if(!istype(target_turf) || !isnull(target_turf.reinf_material)) - continue - target_turf.set_material(target_turf.material, reinf_material) - target_turf.spread_deposit() - -/turf/exterior/wall/attackby(obj/item/W, mob/user, click_params) - - if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS)) - return - - if(istype(W, /obj/item/depth_scanner)) - var/obj/item/depth_scanner/C = W - C.scan_atom(user, src) - return TRUE - - if (istype(W, /obj/item/measuring_tape)) - var/obj/item/measuring_tape/P = W - user.visible_message(SPAN_NOTICE("\The [user] extends [P] towards [src]."),SPAN_NOTICE("You extend [P] towards [src].")) - if(do_after(user,10, src)) - to_chat(user, SPAN_NOTICE("\The [src] has been excavated to a depth of [excavation_level]cm.")) - return TRUE - - if(istype(W, /obj/item/pickaxe/xeno)) - return handle_xenoarch_tool_interaction(W, user) - - // Drill out natural walls. - if(istype(W, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = W - playsound(user, P.drill_sound, 20, 1) - to_chat(user, SPAN_NOTICE("You start [P.drill_verb][destroy_artifacts(P, INFINITY)].")) - if(do_after(user, P.digspeed, src)) - to_chat(user, SPAN_NOTICE("You finish [P.drill_verb] \the [src].")) - dismantle_wall() - return TRUE - - . = ..() - -/turf/exterior/wall/proc/update_strings() - if(reinf_material) - SetName("[reinf_material.solid_name] deposit") - desc = "A natural cliff face composed of bare [material.solid_name] and a deposit of [reinf_material.solid_name]." - else - SetName("natural [material.solid_name] wall") - desc = "A natural cliff face composed of bare [material.solid_name]." - -/turf/exterior/wall/proc/update_material(var/update_neighbors) - if(!material) - material = GET_DECL(get_default_material()) - if(material) - explosion_resistance = material.explosion_resistance - if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) - explosion_resistance = reinf_material.explosion_resistance - update_strings() - set_opacity(material.opacity >= 0.5) - if(reinf_material?.ore_icon_overlay) - ore_overlay = image('icons/turf/mining_decals.dmi', "[reinf_material.ore_icon_overlay]") - ore_overlay.appearance_flags = RESET_COLOR - var/matrix/M - if(prob(50)) - M = M || matrix() - M.Scale(-1,1) - if(prob(75)) - M = M || matrix() - M.Turn(pick(90, 180, 270)) - ore_overlay.color = reinf_material.color - ore_overlay.layer = DECAL_LAYER - if(M) - ore_overlay.transform = M - if(update_neighbors) - for(var/direction in global.alldirs) - var/turf/exterior/target_turf = get_step_resolving_mimic(src, direction) - if(istype(target_turf)) - target_turf.update_icon() - else - update_icon() - -/turf/exterior/wall/on_update_icon() - - cut_overlays() - - if(!istype(material)) - return - - var/list/wall_connections = list() - for(var/direction in global.alldirs) - if(istype(get_step_resolving_mimic(src, direction), /turf/exterior/wall)) - wall_connections += direction - wall_connections = dirs_to_corner_states(wall_connections) - - var/material_icon_base = material.icon_base_natural || 'icons/turf/walls/natural.dmi' - var/base_color = paint_color ? paint_color : material.color - - var/shine = 0 - if(material?.reflectiveness > 0) - var/shine_cache_key = "[material.reflectiveness]-[material.color]" - shine = exterior_wall_shine_cache[shine_cache_key] - if(isnull(shine)) - // patented formula based on color's value (in HSV) - shine = clamp((material.reflectiveness * 0.01) * 255, 10, (0.6 * ReadHSV(RGBtoHSV(material.color))[3])) - exterior_wall_shine_cache[shine_cache_key] = shine - - icon = get_combined_wall_icon(wall_connections, null, material_icon_base, base_color, shine_value = shine) - icon_state = "" - color = null - - if(ore_overlay) - add_overlay(ore_overlay) - if(excav_overlay) - add_overlay(excav_overlay) - if(archaeo_overlay) - add_overlay(archaeo_overlay) - -/turf/exterior/wall/proc/dismantle_wall(no_product = FALSE) - if(reinf_material?.ore_result_amount && !no_product) - pass_geodata_to(new /obj/item/stack/material/ore(src, reinf_material.ore_result_amount, reinf_material.type)) - if(prob(MAT_DROP_CHANCE) && !no_product) - pass_geodata_to(new /obj/item/stack/material/ore(src, 1, material.type)) - destroy_artifacts(null, INFINITY) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - . = ChangeTurf(floor_type || get_base_turf_by_area(src)) - if(istype(., /turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/debris = . - debris.overlay_detail = "asteroid[rand(0,9)]" - debris.updateMineralOverlays(1) - -/turf/exterior/wall/proc/get_default_material() - . = /decl/material/solid/stone/sandstone - -/turf/exterior/wall/Bumped(AM) - . = ..() - if(ismob(AM)) - var/mob/M = AM - var/obj/item/pickaxe/held = M.get_active_hand() - if(istype(held)) - attackby(held, M) - -/turf/exterior/wall/proc/pass_geodata_to(obj/O) - var/datum/extension/geological_data/ours = get_extension(src, /datum/extension/geological_data) - ours.geodata.UpdateNearbyArtifactInfo(src) - set_extension(O, /datum/extension/geological_data) - var/datum/extension/geological_data/newdata = get_extension(O, /datum/extension/geological_data) - newdata.set_data(ours.geodata.get_copy()) - -#undef MAT_DROP_CHANCE \ No newline at end of file diff --git a/code/game/turfs/exterior/exterior_water.dm b/code/game/turfs/exterior/exterior_water.dm deleted file mode 100644 index 9f1f1174ebb..00000000000 --- a/code/game/turfs/exterior/exterior_water.dm +++ /dev/null @@ -1,22 +0,0 @@ -/turf/exterior/water - name = "water" - icon = 'icons/turf/exterior/water.dmi' - icon_has_corners = TRUE - icon_edge_layer = EXT_EDGE_WATER - movement_delay = 2 - footstep_type = /decl/footsteps/water - var/reagent_type = /decl/material/liquid/water - -/turf/exterior/water/is_flooded(lying_mob, absolute) - . = absolute ? ..() : lying_mob - -/turf/exterior/water/attackby(obj/item/O, var/mob/user) - if (reagent_type && ATOM_IS_OPEN_CONTAINER(O) && O.reagents) - var/fill_amount = O.reagents.maximum_volume - O.reagents.total_volume - if(fill_amount <= 0) - to_chat(user, SPAN_WARNING("\The [O] is full.")) - return TRUE - user.visible_message(SPAN_NOTICE("\The [user] fills \the [O] from \the [src]."), SPAN_NOTICE("You fill \the [O] from \the [src].")) - O.reagents.add_reagent(reagent_type, fill_amount) - return TRUE - . = ..() diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 9342298d7ad..42a07f4f6e0 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -37,8 +37,10 @@ //How we smooth with other flooring var/decal_layer = DECAL_LAYER var/floor_smooth = SMOOTH_ALL - var/list/flooring_whitelist = list() //Smooth with nothing except the contents of this list - var/list/flooring_blacklist = list() //Smooth with everything except the contents of this list + /// Smooth with nothing except the types in this list. Turned into a typecache for performance reasons. + var/list/flooring_whitelist = list() + /// Smooth with everything except the types in this list. Turned into a typecache for performance reasons. + var/list/flooring_blacklist = list() //How we smooth with walls var/wall_smooth = SMOOTH_ALL @@ -51,6 +53,11 @@ var/height = 0 +/decl/flooring/Initialize() + . = ..() + flooring_whitelist = typecacheof(flooring_whitelist) + flooring_blacklist = typecacheof(flooring_blacklist) + /decl/flooring/proc/on_remove() return @@ -156,6 +163,10 @@ flags = TURF_REMOVE_SCREWDRIVER footstep_type = /decl/footsteps/tiles +/decl/flooring/linoleum/light + name = "light linoleum" + icon_base = "base" + /decl/flooring/tiling name = "floor" desc = "A solid, heavy set of flooring plates." @@ -189,6 +200,11 @@ color = COLOR_OFF_WHITE build_type = /obj/item/stack/tile/floor_white +/decl/flooring/tiling/checkered + icon_base = "tiled_checkered" + desc = "How basic." + build_type = /obj/item/stack/tile/floor_checkered + /decl/flooring/tiling/dark desc = "How ominous." color = COLOR_DARK_GRAY @@ -432,7 +448,34 @@ floor_smooth = SMOOTH_NONE wall_smooth = SMOOTH_NONE space_smooth = SMOOTH_NONE - height = -FLUID_OVER_MOB_HEAD - 50 + height = -(FLUID_OVER_MOB_HEAD) - 50 /decl/flooring/pool/deep - height = -FLUID_DEEP - 50 \ No newline at end of file + height = -FLUID_DEEP - 50 + +/decl/flooring/concrete + name = "concrete floor" + desc = "Heavily reinforced concrete with a latticework on top of regular plating." + icon = 'icons/turf/flooring/concrete.dmi' + icon_base = "concrete" + build_type = /obj/item/stack/material/panel + build_material = /decl/material/solid/stone/concrete + +/decl/flooring/concrete/slab + name = "concrete slab floor" + desc = "A slab of concrete on top of regular plating." + icon_base = "slab" + build_type = /obj/item/stack/material/slab + build_material = /decl/material/solid/stone/concrete + +/decl/flooring/reinforced/concrete + name = "reinforced concrete floor" + desc = "Heavily reinforced concrete with a latticework on top of regular plating." + icon = 'icons/turf/flooring/concrete.dmi' + icon_base = "reinforced" + flags = TURF_REMOVE_SHOVEL | TURF_CAN_BREAK | TURF_ACID_IMMUNE + build_type = /obj/item/stack/material + build_material = /decl/material/solid/stone/concrete/reinforced + build_cost = 1 + build_time = 20 + footstep_type = /decl/footsteps/tiles diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 521d5319c90..c8c9bab01dc 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -1429,6 +1429,20 @@ var/global/list/floor_decals = list() /obj/effect/floor_decal/rust/part_rusted1 icon_state = "part_rusted1" +/obj/effect/floor_decal/rust/part_rusted2 + icon_state = "part_rusted2" + +/obj/effect/floor_decal/rust/part_rusted3 + icon_state = "part_rusted3" + +/obj/effect/floor_decal/rust/mono_rusted1 + icon_state = "mono_rusted1" + +/obj/effect/floor_decal/rust/mono_rusted2 + icon_state = "mono_rusted2" + +/obj/effect/floor_decal/rust/mono_rusted3 + icon_state = "mono_rusted3" /obj/effect/floor_decal/rust/steel_decals_rusted1 icon_state = "steel_decals_rusted1" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index a8340d96a53..931e459ef70 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -155,6 +155,9 @@ /turf/simulated/floor/reinforced/n20 initial_gas = list(/decl/material/gas/nitrous_oxide = ATMOSTANK_NITROUSOXIDE) +/turf/simulated/floor/reinforced/chlorine + initial_gas = list(/decl/material/gas/chlorine = ATMOSTANK_CO2) + /turf/simulated/floor/reinforced/elevator_shaft name = "elevator shaft floor" icon = 'icons/turf/floors.dmi' @@ -199,6 +202,11 @@ icon_state = "white" initial_flooring = /decl/flooring/tiling/white +/turf/simulated/floor/tiled/checkered + name = "checkered floor" + icon_state = "white-checkered" + initial_flooring = /decl/flooring/tiling/checkered + /turf/simulated/floor/tiled/white/monotile name = "floor" icon_state = "monotile" @@ -277,11 +285,17 @@ initial_flooring = /decl/flooring/tiling/tech/grid /turf/simulated/floor/lino - name = "lino" + name = "linoleum" icon = 'icons/turf/flooring/linoleum.dmi' icon_state = "lino" initial_flooring = /decl/flooring/linoleum +/turf/simulated/floor/lino/light + name = "light linoleum" + icon = 'icons/turf/flooring/linoleum.dmi' + icon_state = "base" + initial_flooring = /decl/flooring/linoleum/light + //ATMOS PREMADES /turf/simulated/floor/reinforced/airless name = "vacuum floor" @@ -311,69 +325,10 @@ /turf/simulated/floor/greengrid/nitrogen initial_gas = list(/decl/material/gas/nitrogen = MOLES_N2STANDARD) -// Placeholders -/turf/simulated/floor/airless/lava - name = "lava" - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "lava" - -/turf/simulated/floor/ice - name = "ice" - icon = 'icons/turf/exterior/ice.dmi' - icon_state = "0" - -/turf/simulated/floor/snow - name = "snow" - icon = 'icons/turf/snow.dmi' - icon_state = "snow" - initial_flooring = /decl/flooring/snow - -/turf/simulated/floor/light -/turf/simulated/floor/airless/ceiling - -/turf/simulated/floor/beach - name = "beach" - icon = 'icons/misc/beach.dmi' - -/turf/simulated/floor/beach/sand - name = "sand" - icon_state = "sand" - -/turf/simulated/floor/beach/sand/desert - icon_state = "desert" - -/turf/simulated/floor/beach/sand/desert/Initialize() - . = ..() - icon_state = "desert[rand(0,5)]" - -/turf/simulated/floor/beach/coastline - name = "coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - turf_flags = TURF_IS_WET | TURF_IS_HOLOMAP_PATH - -/turf/simulated/floor/beach/water - name = "water" - icon_state = "water" - turf_flags = TURF_IS_WET | TURF_IS_HOLOMAP_PATH - -/turf/simulated/floor/beach/water/is_flooded(lying_mob, absolute) - . = absolute ? ..() : lying_mob - -/turf/simulated/floor/beach/water/update_dirt() - return // Water doesn't become dirty - -/turf/simulated/floor/beach/water/ocean - icon_state = "seadeep" - -/turf/simulated/floor/beach/water/Initialize() - . = ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) - /turf/simulated/floor/crystal name = "crystal floor" icon = 'icons/turf/flooring/crystal.dmi' - icon_state = "" + icon_state = "crystal" initial_flooring = /decl/flooring/crystal /turf/simulated/floor/glass @@ -397,3 +352,22 @@ icon = 'icons/turf/flooring/pool.dmi' icon_state = "pool" initial_flooring = /decl/flooring/pool/deep + + +/turf/simulated/floor/concrete + name = "concrete floor" + icon = 'icons/turf/flooring/concrete.dmi' + icon_state = "concrete" + initial_flooring = /decl/flooring/concrete + +/turf/simulated/floor/concrete/slab + name = "concrete slab floor" + icon = 'icons/turf/flooring/concrete.dmi' + icon_state = "slab" + initial_flooring = /decl/flooring/concrete/slab + +/turf/simulated/floor/reinforced/concrete + name = "reinforced concrete floor" + icon = 'icons/turf/flooring/concrete.dmi' + icon_state = "reinforced" + initial_flooring = /decl/flooring/reinforced/concrete diff --git a/code/game/turfs/flooring/flooring_shuttle.dm b/code/game/turfs/flooring/flooring_shuttle.dm index f61c6d879e6..662d4a4356c 100644 --- a/code/game/turfs/flooring/flooring_shuttle.dm +++ b/code/game/turfs/flooring/flooring_shuttle.dm @@ -1,6 +1,11 @@ /turf/simulated/floor/shuttle name = "floor" icon = 'icons/turf/shuttle.dmi' + abstract_type = /turf/simulated/floor/shuttle + +/turf/simulated/floor/shuttle/plating + icon_state = "plating" + initial_flooring = null /turf/simulated/floor/shuttle/blue icon_state = "floor" diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm index 4e26d71ed73..5cef122ea66 100644 --- a/code/game/turfs/initialization/maintenance.dm +++ b/code/game/turfs/initialization/maintenance.dm @@ -14,8 +14,8 @@ vermin_probability = 0 web_probability = 0 -/decl/turf_initializer/maintenance/InitializeTurf(var/turf/simulated/T) - if(!istype(T) || T.density) +/decl/turf_initializer/maintenance/InitializeTurf(var/turf/T) + if(!istype(T) || T.density || !T.simulated) return // Quick and dirty check to avoid placing things inside windows if(locate(/obj/structure/grille, T)) @@ -23,12 +23,12 @@ var/cardinal_turfs = T.CardinalTurfs() - T.dirt = get_dirt_amount() + var/add_dirt = get_dirt_amount() // If a neighbor is dirty, then we get dirtier. var/how_dirty = dirty_neighbors(cardinal_turfs) for(var/i = 0; i < how_dirty; i++) - T.dirt += rand(0,5) - T.update_dirt() + add_dirt += rand(0,5) + T.add_dirt(add_dirt) if(prob(oil_probability)) new /obj/effect/decal/cleanable/blood/oil(T) @@ -47,13 +47,17 @@ /decl/turf_initializer/maintenance/proc/dirty_neighbors(var/list/cardinal_turfs) var/how_dirty = 0 - for(var/turf/simulated/T in cardinal_turfs) + for(var/turf/T in cardinal_turfs) // Considered dirty if more than halfway to visible dirt - if(T.dirt > 25) + if(T.get_dirt() > 25) how_dirty++ return how_dirty -/decl/turf_initializer/maintenance/proc/attempt_web(var/turf/simulated/T) +/decl/turf_initializer/maintenance/proc/attempt_web(var/turf/T) + + if(!istype(T) || !T.simulated) + return + var/turf/north_turf = get_step(T, NORTH) if(!north_turf || !north_turf.density) return diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm deleted file mode 100644 index e6dbb700925..00000000000 --- a/code/game/turfs/simulated.dm +++ /dev/null @@ -1,179 +0,0 @@ -/turf/simulated - name = "station" - initial_gas = list( - /decl/material/gas/oxygen = MOLES_O2STANDARD, - /decl/material/gas/nitrogen = MOLES_N2STANDARD - ) - open_turf_type = /turf/simulated/open - zone_membership_candidate = TRUE - - var/wet = 0 - var/image/wet_overlay = null - var/dirt = 0 - var/timer_id - -// This is not great. -/turf/simulated/proc/wet_floor(var/wet_val = 1, var/overwrite = FALSE) - - if(is_flooded(absolute = TRUE)) - return - - if(get_fluid_depth() > FLUID_QDEL_POINT) - return - - if(wet_val < wet && !overwrite) - return - - if(!wet) - wet = wet_val - wet_overlay = image('icons/effects/water.dmi',src,"wet_floor") - overlays += wet_overlay - - timer_id = addtimer(CALLBACK(src,/turf/simulated/proc/unwet_floor), 8 SECONDS, (TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)) - -/turf/simulated/proc/unwet_floor(var/check_very_wet = TRUE) - if(check_very_wet && wet >= 2) - wet-- - timer_id = addtimer(CALLBACK(src,/turf/simulated/proc/unwet_floor), 8 SECONDS, (TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)) - return - wet = 0 - if(wet_overlay) - overlays -= wet_overlay - wet_overlay = null - -/turf/simulated/clean_blood() - for(var/obj/effect/decal/cleanable/blood/B in contents) - B.clean_blood() - . = ..() - -/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor=COLOR_BLOOD_HUMAN) - var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src - if(!tracks) - tracks = new typepath(src) - tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) - -/turf/simulated/proc/update_dirt() - dirt = min(dirt+0.5, 101) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt > 50) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) - dirtoverlay.alpha = min((dirt - 50) * 5, 255) - -/turf/simulated/remove_cleanables() - dirt = 0 - . = ..() - -/turf/simulated/Entered(atom/A, atom/OL) - . = ..() - if (istype(A)) - A.OnSimulatedTurfEntered(src, OL) - -/atom/proc/OnSimulatedTurfEntered(turf/simulated/T, old_loc) - set waitfor = FALSE - return - -/mob/living/OnSimulatedTurfEntered(turf/simulated/T, old_loc) - T.update_dirt() - - HandleBloodTrail(T, old_loc) - - if(lying || !T.wet) - return - - if(buckled || (MOVING_DELIBERATELY(src) && prob(min(100, 100/(T.wet/10))))) - return - - // skillcheck for slipping - if(!prob(min(100, skill_fail_chance(SKILL_HAULING, 100, SKILL_MAX+1)/(3/T.wet)))) - return - - var/slip_dist = 1 - var/slip_stun = 6 - var/floor_type = "wet" - - if(2 <= T.wet) // Lube - floor_type = "slippery" - slip_dist = 4 - slip_stun = 10 - - // Dir check to avoid slipping up and down via ladders. - if(slip("the [floor_type] floor", slip_stun) && (dir in global.cardinal)) - for(var/i = 1 to slip_dist) - step(src, dir) - sleep(1) - -/mob/living/proc/HandleBloodTrail(turf/simulated/T, old_loc) - return - -/mob/living/carbon/human/HandleBloodTrail(turf/simulated/T, old_loc) - // Tracking blood - var/obj/item/source - var/obj/item/clothing/shoes/shoes = get_equipped_item(slot_shoes_str) - if(istype(shoes)) - shoes.handle_movement(src, MOVING_QUICKLY(src)) - if(shoes.coating && shoes.coating.total_volume > 1) - source = shoes - else - for(var/foot_tag in list(BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/stomper = GET_EXTERNAL_ORGAN(src, foot_tag) - if(stomper && stomper.coating && stomper.coating.total_volume > 1) - source = stomper - if(!source) - species.handle_trail(src, T, old_loc) - return - - var/list/bloodDNA - var/bloodcolor - var/list/blood_data = REAGENT_DATA(source.coating, /decl/material/liquid/blood) - if(blood_data) - bloodDNA = list(blood_data["blood_DNA"] = blood_data["blood_type"]) - else - bloodDNA = list() - bloodcolor = source.coating.get_color() - source.remove_coating(1) - update_equipment_overlay(slot_shoes_str) - - if(species.get_move_trail(src)) - T.AddTracks(species.get_move_trail(src),bloodDNA, dir, 0, bloodcolor) // Coming - if(istype(old_loc, /turf/simulated)) - var/turf/simulated/old_turf = old_loc - old_turf.AddTracks(species.get_move_trail(src), bloodDNA, 0, dir, bloodcolor) // Going - -//returns 1 if made bloody, returns 0 otherwise -/turf/simulated/add_blood(mob/living/carbon/human/M) - if (!..()) - return 0 - - if(istype(M)) - for(var/obj/effect/decal/cleanable/blood/B in contents) - var/unique_enzymes = M.get_unique_enzymes() - var/blood_type = M.get_blood_type() - if(unique_enzymes && blood_type && !LAZYACCESS(B.blood_DNA, unique_enzymes)) - LAZYSET(B.blood_DNA, unique_enzymes, blood_type) - LAZYSET(B.blood_data, unique_enzymes, REAGENT_DATA(M.vessel, M.species.blood_reagent)) - var/datum/extension/forensic_evidence/forensics = get_or_create_extension(B, /datum/extension/forensic_evidence) - forensics.add_data(/datum/forensics/blood_dna, unique_enzymes) - return 1 //we bloodied the floor - blood_splatter(src, M, 1) - return 1 //we bloodied the floor - return 0 - -// Only adds blood on the floor -- Skie -/turf/simulated/proc/add_blood_floor(mob/living/carbon/M) - if(isalien(M)) - var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - else if(isrobot(M)) - new /obj/effect/decal/cleanable/blood/oil(src) - -/turf/simulated/attackby(var/obj/item/thing, var/mob/user) - if(IS_COIL(thing) && try_build_cable(thing, user)) - return TRUE - return ..() - -/turf/simulated/Initialize(var/ml) - var/area/A = loc - holy = istype(A) && (A.area_flags & AREA_FLAG_HOLY) - levelupdate() - . = ..() diff --git a/code/game/turfs/simulated/__simulated.dm b/code/game/turfs/simulated/__simulated.dm new file mode 100644 index 00000000000..575c1d1526a --- /dev/null +++ b/code/game/turfs/simulated/__simulated.dm @@ -0,0 +1,3 @@ +/turf/simulated + name = "station" + abstract_type = /turf/simulated diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/_floor.dm similarity index 87% rename from code/game/turfs/simulated/floor.dm rename to code/game/turfs/simulated/_floor.dm index f6be67f476e..d382c5f32bd 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/_floor.dm @@ -7,6 +7,11 @@ heat_capacity = 10000 explosion_resistance = 1 turf_flags = TURF_IS_HOLOMAP_PATH + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2STANDARD, + /decl/material/gas/nitrogen = MOLES_N2STANDARD + ) + zone_membership_candidate = TRUE // Damage to flooring. // These are icon state suffixes, NOT booleans! @@ -62,8 +67,10 @@ else disable_zmimic() - update_icon(1) + queue_icon_update(SSatoms.initialized) // only update neighbors if we're setting flooring after SSatoms has finished levelupdate() + if(flooring) + layer = TURF_LAYER //This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf //This proc auto corrects the grass tiles' siding. @@ -104,15 +111,6 @@ if(!defer_icon_update) update_icon(1) -/turf/simulated/floor/levelupdate() - for(var/obj/O in src) - O.hide(O.hides_under_flooring() && src.flooring) - - if(flooring) - layer = TURF_LAYER - else - layer = PLATING_LAYER - /turf/simulated/floor/can_engrave() return (!flooring || flooring.can_engrave) @@ -135,3 +133,14 @@ /turf/simulated/floor/is_defiled() return flooring?.type == /decl/flooring/reinforced/cult || ..() + +/turf/simulated/floor/get_physical_height() + return flooring?.height || 0 + +/turf/simulated/floor/handle_universal_decay() + if(!burnt) + burn_tile() + else if(flooring) + break_tile_to_plating() + else + ReplaceWithLattice() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/_wall.dm similarity index 85% rename from code/game/turfs/simulated/walls.dm rename to code/game/turfs/simulated/_wall.dm index d1be611a9d2..7d9c2de4ad0 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/_wall.dm @@ -1,5 +1,6 @@ var/global/list/wall_blend_objects = list( /obj/machinery/door, + /obj/structure/door, /obj/structure/wall_frame, /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -28,6 +29,11 @@ var/global/list/wall_fullblend_objects = list( explosion_resistance = 10 color = COLOR_STEEL turf_flags = TURF_IS_HOLOMAP_OBSTACLE + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2STANDARD, + /decl/material/gas/nitrogen = MOLES_N2STANDARD + ) + zone_membership_candidate = TRUE var/damage = 0 var/can_open = 0 @@ -42,31 +48,22 @@ var/global/list/wall_fullblend_objects = list( var/paint_color var/stripe_color var/handle_structure_blending = TRUE + var/min_dismantle_amount = 2 + var/max_dismantle_amount = 2 /turf/simulated/wall/Initialize(var/ml, var/materialtype, var/rmaterialtype) ..(ml) // Clear mapping icons. - icon = 'icons/turf/walls/solid.dmi' + icon = get_wall_icon() icon_state = "blank" color = null - if(!ispath(material, /decl/material)) - material = materialtype || get_default_material() - if(ispath(material, /decl/material)) - material = GET_DECL(material) - - if(!ispath(reinf_material, /decl/material)) - reinf_material = rmaterialtype - if(ispath(reinf_material, /decl/material)) - reinf_material = GET_DECL(reinf_material) - - if(ispath(girder_material, /decl/material)) - girder_material = GET_DECL(girder_material) + set_turf_materials((materialtype || material || get_default_material()), (rmaterialtype || reinf_material), TRUE, girder_material) . = INITIALIZE_HINT_LATELOAD - set_extension(src, /datum/extension/penetration/proc_call, .proc/CheckPenetration) + set_extension(src, /datum/extension/penetration/proc_call, PROC_REF(CheckPenetration)) START_PROCESSING(SSturf, src) //Used for radiation. /turf/simulated/wall/LateInitialize(var/ml) @@ -104,7 +101,7 @@ var/global/list/wall_fullblend_objects = list( if(!radiate()) return PROCESS_KILL -/turf/simulated/wall/proc/get_material() +/turf/simulated/wall/get_material() return material /turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) @@ -130,8 +127,8 @@ var/global/list/wall_fullblend_objects = list( take_damage(damage) /turf/simulated/wall/hitby(AM, var/datum/thrownthing/TT) - ..() - if(density && !ismob(AM)) + . = ..() + if(. && density && !ismob(AM)) var/obj/O = AM var/tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) playsound(src, hitsound, tforce >= 15 ? 60 : 25, TRUE) @@ -174,13 +171,16 @@ var/global/list/wall_fullblend_objects = list( . = SPAN_NOTICE("It has had a coat of paint applied.") //Damage -/turf/simulated/wall/melt() - if(can_melt()) - var/turf/simulated/floor/F = ChangeTurf(/turf/simulated/floor/plating) - if(istype(F)) - F.burn_tile() - F.icon_state = "wall_thermite" - visible_message(SPAN_DANGER("\The [src] spontaneously combusts!")) +/turf/simulated/wall/handle_melting(list/meltable_materials) + . = ..() + if(!can_melt()) + return + var/turf/simulated/floor/F = ChangeTurf(/turf/simulated/floor/plating) + if(!istype(F)) + return + F.burn_tile() + F.icon_state = "wall_thermite" + visible_message(SPAN_DANGER("\The [src] spontaneously combusts!")) /turf/simulated/wall/proc/take_damage(dam) if(dam) @@ -204,6 +204,7 @@ var/global/list/wall_fullblend_objects = list( /turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( burn(exposed_temperature) + return ..() /turf/simulated/wall/adjacent_fire_act(turf/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) burn(adj_temp) @@ -211,20 +212,25 @@ var/global/list/wall_fullblend_objects = list( take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - material.melting_point))) return ..() +/turf/simulated/wall/proc/get_dismantle_stack_type() + return + +/turf/simulated/wall/proc/get_dismantle_sound() + return 'sound/items/Welder.ogg' + /turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product) - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, get_dismantle_sound(), 100, 1) if(!no_product) var/list/obj/structure/girder/placed_girders if(girder_material) placed_girders = girder_material.place_dismantled_girder(src, reinf_material) - material.place_dismantled_product(src,devastated) - else - placed_girders = material.place_dismantled_girder(src, reinf_material) for(var/obj/structure/girder/placed_girder in placed_girders) placed_girder.anchored = TRUE placed_girder.prepped_for_fakewall = can_open placed_girder.update_icon() + if(material) + material.place_dismantled_product(src, devastated, amount = rand(min_dismantle_amount, max_dismantle_amount), drop_type = get_dismantle_stack_type()) for(var/obj/O in src.contents) //Eject contents! if(istype(O,/obj/structure/sign/poster)) @@ -272,7 +278,7 @@ var/global/list/wall_fullblend_objects = list( if(!QDELETED(src) && istype(material) && material.combustion_effect(src, temperature, 0.7)) for(var/turf/simulated/wall/W in range(3,src)) if(W != src) - addtimer(CALLBACK(W, /turf/simulated/wall/proc/burn, temperature/4), 2) + addtimer(CALLBACK(W, TYPE_PROC_REF(/turf/simulated/wall, burn), temperature/4), 2) dismantle_wall(TRUE) /turf/simulated/wall/get_color() @@ -300,7 +306,10 @@ var/global/list/wall_fullblend_objects = list( new_rmaterial = /decl/material/solid/stone/cult/reinforced if(new_material || new_rmaterial) ..() - set_material(new_material, new_rmaterial) + set_turf_materials(new_material, new_rmaterial) /turf/simulated/wall/is_defiled() return material?.type == /decl/material/solid/stone/cult || reinf_material?.type == /decl/material/solid/stone/cult/reinforced || ..() + +/turf/simulated/wall/handle_universal_decay() + handle_melting() diff --git a/code/game/turfs/simulated/floor_acts.dm b/code/game/turfs/simulated/floor_acts.dm index 421d85e8d31..357277289c3 100644 --- a/code/game/turfs/simulated/floor_acts.dm +++ b/code/game/turfs/simulated/floor_acts.dm @@ -1,5 +1,6 @@ /turf/simulated/floor/explosion_act(severity) - SHOULD_CALL_PARENT(FALSE) + SHOULD_CALL_PARENT(TRUE) + ..() if(severity == 1) ChangeTurf(get_base_turf_by_area(src)) else if(severity == 2) @@ -25,14 +26,13 @@ hotspot_expose(1000,CELL_VOLUME) /turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - var/temp_destroy = get_damage_temperature() if(!burnt && prob(5)) burn_tile(exposed_temperature) else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating()) make_plating() //destroy the tile, exposing plating burn_tile(exposed_temperature) - return + return ..() //should be a little bit lower than the temperature required to destroy the material /turf/simulated/floor/proc/get_damage_temperature() diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index b962c1e9245..74a2f36c6df 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -12,11 +12,6 @@ if(!C || !user) return 0 - if(istype(C, /obj/item/stack/tile/roof)) - var/obj/item/stack/tile/roof/T = C - T.try_build_turf(user, src) - return TRUE - if(IS_COIL(C) || (flooring && istype(C, /obj/item/stack/material/rods))) return ..(C, user) diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 76960d1a0f8..d468d73a55b 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -75,7 +75,7 @@ var/global/list/flooring_cache = list() if(update_neighbors) for(var/turf/simulated/floor/F in orange(src, 1)) F.queue_ao(FALSE) - F.update_icon() + F.queue_icon_update() /turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/external = FALSE) if(!flooring_cache[cache_key]) @@ -107,45 +107,41 @@ var/global/list/flooring_cache = list() flooring_cache[cache_key] = I return flooring_cache[cache_key] -/decl/flooring/proc/test_link(var/turf/origin, var/turf/T) +/decl/flooring/proc/test_link(var/turf/origin, var/turf/opponent) var/is_linked = FALSE - if(istype(origin) && istype(T)) + if(istype(origin) && istype(opponent)) //is_wall is true for wall turfs and for floors containing a low wall - if(T.is_wall()) + if(opponent.is_wall()) if(wall_smooth == SMOOTH_ALL) is_linked = TRUE //If is_hole is true, then it's space or openspace - else if(T.is_open()) + else if(opponent.is_open()) if(space_smooth == SMOOTH_ALL) is_linked = TRUE //If we get here then its a normal floor - else if (istype(T, /turf/simulated/floor)) - var/turf/simulated/floor/t = T - //Check for window frames. - if(wall_smooth == SMOOTH_ALL) - for(var/obj/structure/wall_frame/WF in T.contents) - is_linked = TRUE + else if (istype(opponent, /turf/simulated/floor)) + var/turf/simulated/floor/floor_opponent = opponent //If the floor is the same as us,then we're linked, - if (istype(src, t.flooring)) + if (istype(src, floor_opponent.flooring)) is_linked = TRUE else if (floor_smooth == SMOOTH_ALL) is_linked = TRUE else if (floor_smooth != SMOOTH_NONE) //If we get here it must be using a whitelist or blacklist if (floor_smooth == SMOOTH_WHITELIST) - for (var/v in flooring_whitelist) - if (istype(t.flooring, v)) - //Found a match on the list - is_linked = TRUE - break + if (flooring_whitelist[floor_opponent.flooring.type]) + //Found a match on the typecache + is_linked = TRUE else if(floor_smooth == SMOOTH_BLACKLIST) is_linked = TRUE //Default to true for the blacklist, then make it false if a match comes up - for (var/v in flooring_blacklist) - if (istype(t.flooring, v)) - //Found a match on the list - is_linked = FALSE - break + if (flooring_blacklist[floor_opponent.flooring.type]) + //Found a match on the typecache + is_linked = FALSE + //Check for window frames. + if (!is_linked && wall_smooth == SMOOTH_ALL) + if(locate(/obj/structure/wall_frame) in opponent) + is_linked = TRUE return is_linked /decl/flooring/proc/symmetric_test_link(var/turf/A, var/turf/B) diff --git a/code/game/turfs/simulated/footsteps.dm b/code/game/turfs/simulated/footsteps.dm index d7fd37f7472..51e26f17b85 100644 --- a/code/game/turfs/simulated/footsteps.dm +++ b/code/game/turfs/simulated/footsteps.dm @@ -35,7 +35,10 @@ return TRUE -/mob/living/carbon/human/proc/handle_footsteps() +/mob/living/proc/handle_footsteps() + return + +/mob/living/carbon/human/handle_footsteps() step_count++ if(!has_footsteps()) return diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 44e9afff163..3a174eb89c1 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -17,8 +17,9 @@ set_light(0) src.blocks_air = 0 set_opacity(0) - for(var/turf/simulated/turf in loc) - SSair.mark_for_update(turf) + for(var/turf/turf in loc) + if(turf.simulated) + SSair.mark_for_update(turf) else can_open = WALL_OPENING set_density(1) @@ -30,8 +31,9 @@ set_light(1) src.blocks_air = 1 set_opacity(1) - for(var/turf/simulated/turf in loc) - SSair.mark_for_update(turf) + for(var/turf/turf in loc) + if(turf.simulated) + SSair.mark_for_update(turf) can_open = WALL_CAN_OPEN update_icon() @@ -40,13 +42,14 @@ if(!SSair) return - for(var/turf/simulated/turf in loc) - update_thermal(turf) - SSair.mark_for_update(turf) + for(var/turf/turf in loc) + if(turf.simulated) + update_thermal(turf) + SSair.mark_for_update(turf) -/turf/simulated/wall/proc/update_thermal(var/turf/simulated/source) - if(istype(source)) +/turf/simulated/wall/proc/update_thermal(var/turf/source) + if(istype(source) && source.simulated) if(density && opacity) source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT else @@ -145,7 +148,7 @@ // Basic dismantling. if(isnull(construction_stage) || !reinf_material) - var/cut_delay = 60 - material.cut_delay + var/cut_delay = (6 SECONDS) - material.cut_delay var/dismantle_verb var/dismantle_sound @@ -158,7 +161,7 @@ var/obj/item/weldingtool/WT = W if(!WT.weld(0,user)) return - dismantle_verb = "cutting" + dismantle_verb = "cutting through" dismantle_sound = 'sound/items/Welder.ogg' cut_delay *= 0.7 @@ -178,17 +181,22 @@ if(!cutter.slice(user)) return TRUE dismantle_sound = "sparks" - dismantle_verb = "slicing" + dismantle_verb = "slicing through" cut_delay *= 0.5 - else if(istype(W,/obj/item/pickaxe)) - var/obj/item/pickaxe/P = W - dismantle_verb = P.drill_verb - dismantle_sound = P.drill_sound - cut_delay -= P.digspeed + + else if(IS_PICK(W)) + + if(W.material?.hardness < material.hardness) + to_chat(user, SPAN_WARNING("\The [W] is not hard enough to cut through [material.solid_name].")) + return TRUE + + dismantle_verb = W.get_tool_message(TOOL_PICK) + dismantle_sound = W.get_tool_sound(TOOL_PICK) + cut_delay = W.get_expected_tool_use_delay(TOOL_PICK, cut_delay) if(dismantle_verb) . = TRUE - to_chat(user, "You begin [dismantle_verb] through the outer plating.") + to_chat(user, "You begin [dismantle_verb] \the [src].") if(dismantle_sound) playsound(src, dismantle_sound, 100, 1) @@ -199,8 +207,8 @@ return to_chat(user, "You remove the outer plating.") + user.visible_message("\The [user] finishes [dismantle_verb] \the [src]!") dismantle_wall() - user.visible_message("\The [src] was torn open by [user]!") return //Reinforced dismantling. diff --git a/code/game/turfs/simulated/wall_brick.dm b/code/game/turfs/simulated/wall_brick.dm new file mode 100644 index 00000000000..f203603e7c2 --- /dev/null +++ b/code/game/turfs/simulated/wall_brick.dm @@ -0,0 +1,21 @@ +/turf/simulated/wall/brick + icon_state = "brick" + material = /decl/material/solid/stone/sandstone + girder_material = null + +/turf/simulated/wall/brick/get_dismantle_stack_type() + return /obj/item/stack/material/brick + +/turf/simulated/wall/brick/get_wall_icon() + return 'icons/turf/walls/brick.dmi' + +/turf/simulated/wall/brick/get_dismantle_sound() + return 'sound/foley/wooden_drop.ogg' // todo + +// Subtypes. +/turf/simulated/wall/brick/sandstone + color = COLOR_GOLD + +/turf/simulated/wall/brick/basalt + material = /decl/material/solid/stone/basalt + color = COLOR_DARK_GRAY diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 748eac0f5b4..703d5f5f386 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -5,7 +5,7 @@ else construction_stage = null if(!material) - material = GET_DECL(get_default_material()) + material = get_default_material() if(material) explosion_resistance = material.explosion_resistance hitsound = material.hitsound @@ -43,32 +43,6 @@ SetName("[material.solid_name] [material.wall_name]") desc = "It seems to be a section of hull plated with [material.solid_name]." -/turf/simulated/wall/proc/get_default_material() - . = DEFAULT_WALL_MATERIAL - -/turf/simulated/wall/proc/set_material(var/decl/material/newmaterial, var/decl/material/newrmaterial, var/decl/material/newgmaterial) - - material = newmaterial - if(ispath(material, /decl/material)) - material = GET_DECL(material) - else if(!istype(material)) - PRINT_STACK_TRACE("Wall has been supplied non-material '[newmaterial]'.") - material = GET_DECL(get_default_material()) - - reinf_material = newrmaterial - if(ispath(reinf_material, /decl/material)) - reinf_material = GET_DECL(reinf_material) - else if(!istype(reinf_material)) - reinf_material = null - - girder_material = newgmaterial - if(ispath(girder_material, /decl/material)) - girder_material = GET_DECL(girder_material) - else if(!istype(girder_material)) - girder_material = null - - update_material() - /turf/simulated/wall/proc/get_wall_icon() . = (istype(material) && material.icon_base) || 'icons/turf/walls/solid.dmi' @@ -98,6 +72,7 @@ if(2) wall_dirs += get_dir(src, T) other_dirs += get_dir(src, T) + if(handle_structure_blending) var/success = 0 for(var/O in T) @@ -120,19 +95,32 @@ if(!blendable) other_dirs += get_dir(src, T) break + wall_connections = dirs_to_corner_states(wall_dirs) other_connections = dirs_to_corner_states(other_dirs) var/material_icon_base = get_wall_icon() var/base_color = material.color + + var/new_icon + var/new_icon_state + var/new_color + if(!density) - icon = material_icon_base - icon_state = "fwall_open" - color = base_color + new_icon = material_icon_base + new_icon_state = "fwall_open" + new_color = base_color else - icon = get_combined_wall_icon(wall_connections, other_connections, material_icon_base, base_color, paint_color, stripe_color, (material.wall_flags & WALL_HAS_EDGES) && (stripe_color || base_color)) - icon_state = "" - color = null + new_icon = get_combined_wall_icon(wall_connections, other_connections, material_icon_base, base_color, paint_color, stripe_color, (material.wall_flags & WALL_HAS_EDGES) && (stripe_color || base_color)) + new_icon_state = "" + new_color = null + + if(icon != new_icon) + icon = new_icon + if(icon_state != new_icon_state) + icon_state = new_icon_state + if(color != new_color) + color = new_color if(apply_reinf_overlay()) var/image/I diff --git a/code/game/turfs/simulated/wall_log.dm b/code/game/turfs/simulated/wall_log.dm new file mode 100644 index 00000000000..bcc9bc4aeac --- /dev/null +++ b/code/game/turfs/simulated/wall_log.dm @@ -0,0 +1,18 @@ +/turf/simulated/wall/log + icon_state = "log" + material = /decl/material/solid/organic/wood + girder_material = null + +/turf/simulated/wall/log/get_dismantle_stack_type() + return /obj/item/stack/material/log + +/turf/simulated/wall/log/get_wall_icon() + return 'icons/turf/walls/log.dmi' + +/turf/simulated/wall/log/get_dismantle_sound() + return 'sound/foley/wooden_drop.ogg' + +// Subtypes. +/turf/simulated/wall/log/ebony + material = /decl/material/solid/organic/wood/ebony + color = WOOD_COLOR_BLACK diff --git a/code/game/turfs/simulated/wall_material.dm b/code/game/turfs/simulated/wall_material.dm new file mode 100644 index 00000000000..11aac1ddba5 --- /dev/null +++ b/code/game/turfs/simulated/wall_material.dm @@ -0,0 +1,29 @@ +/turf/simulated/wall/get_default_material() + . = GET_DECL(DEFAULT_WALL_MATERIAL) + +/turf/simulated/wall/set_turf_materials(decl/material/new_material, decl/material/new_reinf_material, force, decl/material/new_girder_material) + + if(ispath(new_material)) + new_material = GET_DECL(new_material) + + if(material != new_material || !force) + material = new_material + if(!istype(material)) + PRINT_STACK_TRACE("Wall has been supplied non-material '[material]'.") + material = get_default_material() + . = TRUE + + if(ispath(new_reinf_material)) + new_reinf_material = GET_DECL(new_reinf_material) + if(reinf_material != new_reinf_material || !force) + reinf_material = new_reinf_material + . = TRUE + + if(ispath(new_girder_material)) + new_girder_material = GET_DECL(new_girder_material) + if(girder_material != new_girder_material || force) + girder_material = new_girder_material + . = TRUE + + if(.) + update_material() diff --git a/code/game/turfs/simulated/wall_shuttle.dm b/code/game/turfs/simulated/wall_shuttle.dm index 6bbe097ec6d..e5b23c2627e 100644 --- a/code/game/turfs/simulated/wall_shuttle.dm +++ b/code/game/turfs/simulated/wall_shuttle.dm @@ -3,6 +3,7 @@ icon = 'icons/turf/shuttle.dmi' thermal_conductivity = 0.05 heat_capacity = 0 + abstract_type = /turf/simulated/shuttle /turf/simulated/shuttle/wall name = "wall" diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 7c76f439110..77bb1eb58e3 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -66,11 +66,6 @@ /turf/simulated/wall/plastic/facade girder_material = /decl/material/solid/organic/plastic -/turf/simulated/wall/sandstone - color = COLOR_GOLD - icon_state = "stone" - material = /decl/material/solid/stone/sandstone - /turf/simulated/wall/wood color = COLOR_BROWN icon_state = "wood" diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 176e90b46ca..6aa5c0ff0e8 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -91,11 +91,6 @@ ChangeArea(src, new_area) ChangeTurf(SSmapping.base_floor_type, keep_air_below = TRUE) -// override for space turfs, since they should never hide anything -/turf/space/levelupdate() - for(var/obj/O in src) - O.hide(0) - /turf/space/attackby(obj/item/C, mob/user) if (istype(C, /obj/item/stack/material/rods)) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b00391cefbc..60d64cbf1bf 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -4,6 +4,7 @@ abstract_type = /turf is_spawnable_type = TRUE layer = TURF_LAYER + temperature_sensitive = TRUE /// Will participate in ZAS, join zones, etc. var/zone_membership_candidate = FALSE @@ -12,8 +13,6 @@ var/turf_flags - var/holy = 0 - // Initial air contents (in moles) var/list/initial_gas @@ -73,6 +72,11 @@ /// Used by exterior turfs to determine the warming effect of campfires and such. var/list/affecting_heat_sources + // Fluid flow tracking vars + var/last_slipperiness = 0 + var/last_flow_strength = 0 + var/last_flow_dir = 0 + var/atom/movable/fluid_overlay/fluid_overlay /turf/Initialize(mapload, ...) . = null && ..() // This weird construct is to shut up the 'parent proc not called' warning without disabling the lint for child types. We explicitly return an init hint so this won't change behavior. @@ -106,10 +110,15 @@ if (z_flags & ZM_MIMIC_BELOW) setup_zmimic(mapload) - if(flooded && !density) - make_flooded(TRUE) + if(flooded) + set_flooded(flooded, TRUE, skip_vis_contents_update = TRUE, mapload = mapload) + update_vis_contents() - refresh_vis_contents() + if(simulated) + var/area/A = loc + if(istype(A) && (A.area_flags & AREA_FLAG_HOLY)) + turf_flags |= TURF_FLAG_HOLY + levelupdate() return INITIALIZE_HINT_NORMAL @@ -136,6 +145,8 @@ if (!changing_turf) PRINT_STACK_TRACE("Improper turf qdel. Do not qdel turfs directly.") + SSambience.queued -= src + changing_turf = FALSE if (contents.len > !!lighting_overlay) @@ -157,16 +168,19 @@ connections.erase_all() if(weather) - remove_vis_contents(src, weather.vis_contents_additions) + remove_vis_contents(weather.vis_contents_additions) weather = null + QDEL_NULL(fluid_overlay) + ..() return QDEL_HINT_IWILLGC /turf/explosion_act(severity) SHOULD_CALL_PARENT(FALSE) - return + if(severity == 1 || (severity == 2 && prob(70))) + drop_diggable_resources() /turf/proc/is_solid_structure() return !(turf_flags & TURF_FLAG_BACKGROUND) || locate(/obj/structure/lattice, src) @@ -178,6 +192,9 @@ . = get_base_movement_delay(travel_dir, mover) if(weather) . += weather.get_movement_delay(return_air(), travel_dir) + // TODO: check user species webbed feet, wearing swimming gear + if(reagents?.total_volume > FLUID_PUDDLE) + . += (reagents.total_volume > FLUID_SHALLOW) ? 6 : 3 /turf/attack_hand(mob/user) SHOULD_CALL_PARENT(FALSE) @@ -197,15 +214,36 @@ /turf/attackby(obj/item/W, mob/user) - if(ATOM_IS_OPEN_CONTAINER(W) && W.reagents) - var/obj/effect/fluid/F = locate() in src - if(F && F.reagents?.total_volume >= FLUID_PUDDLE) - var/taking = min(F.reagents?.total_volume, REAGENTS_FREE_SPACE(W.reagents)) - if(taking > 0) - to_chat(user, SPAN_NOTICE("You fill \the [W] with [F.reagents.get_primary_reagent_name()] from \the [src].")) - F.reagents.trans_to(W, taking) + if(is_floor()) + + if(istype(W, /obj/item/stack/tile)) + var/obj/item/stack/tile/T = W + T.try_build_turf(user, src) + return TRUE + + if(IS_SHOVEL(W) && can_be_dug()) + if(get_diggable_resources()) + if(W.do_tool_interaction(TOOL_SHOVEL, user, src, 4 SECONDS, set_cooldown = TRUE)) + drop_diggable_resources() + else if(can_dig_pit()) + try_dig_pit(user, W) + else + to_chat(user, SPAN_WARNING("There is nothing to be dug out of \the [src].")) + return TRUE + + if(istype(W, /obj/item/storage)) + var/obj/item/storage/storage = W + if(storage.collection_mode) + storage.gather_all(src, user) return TRUE + if(ATOM_IS_OPEN_CONTAINER(W) && W.reagents && reagents?.total_volume >= FLUID_PUDDLE) + var/taking = min(reagents.total_volume, REAGENTS_FREE_SPACE(W.reagents)) + if(taking > 0) + to_chat(user, SPAN_NOTICE("You fill \the [W] with [reagents.get_primary_reagent_name()] from \the [src].")) + reagents.trans_to(W, taking) + return TRUE + if(istype(W, /obj/item/storage)) var/obj/item/storage/S = W if(S.use_to_pickup && S.collection_mode) @@ -220,6 +258,9 @@ step(G.affecting, get_dir(G.affecting.loc, src)) return TRUE + if(IS_COIL(W) && try_build_cable(W, user)) + return TRUE + return ..() /turf/Enter(atom/movable/mover, atom/forget) @@ -273,8 +314,15 @@ return FALSE /turf/proc/levelupdate() - for(var/obj/O in src) - O.hide(O.hides_under_flooring() && !is_plating()) + if(is_open() || is_plating()) + for(var/obj/O in src) + O.hide(FALSE) + else if(is_wall()) + for(var/obj/O in src) + O.hide(TRUE) + else + for(var/obj/O in src) + O.hide(O.hides_under_flooring()) /turf/proc/AdjacentTurfs(var/check_blockage = TRUE) . = list() @@ -331,19 +379,24 @@ // Called when turf is hit by a thrown object /turf/hitby(atom/movable/AM, var/datum/thrownthing/TT) SHOULD_CALL_PARENT(FALSE) // /atom/hitby() applies damage to AM if it's a living mob. + . = TRUE if(density) if(isliving(AM)) var/mob/living/M = AM M.turf_collision(src, TT.speed) - if(LAZYLEN(M.pinned)) - return - addtimer(CALLBACK(src, /turf/proc/bounce_off, AM, TT.init_dir), 2) + addtimer(CALLBACK(src, TYPE_PROC_REF(/turf, bounce_off), AM, TT.init_dir), 2) else if(isobj(AM)) var/obj/structure/ladder/L = locate() in contents if(L) L.hitby(AM) /turf/proc/bounce_off(var/atom/movable/AM, var/direction) + if(AM.anchored) + return + if(ismob(AM)) + var/mob/living/M = AM + if(LAZYLEN(M.pinned)) + return step(AM, turn(direction, 180)) /turf/proc/can_engrave() @@ -406,14 +459,14 @@ if(istype(new_weather) && is_outside()) if(weather != new_weather) if(weather) - remove_vis_contents(src, weather.vis_contents_additions) + remove_vis_contents(weather.vis_contents_additions) weather = new_weather - add_vis_contents(src, weather.vis_contents_additions) + add_vis_contents(weather.vis_contents_additions) . = TRUE // We are indoors or there is no local weather system, clear our vis contents. else if(weather) - remove_vis_contents(src, weather.vis_contents_additions) + remove_vis_contents(weather.vis_contents_additions) weather = null . = TRUE @@ -484,12 +537,11 @@ return FALSE is_outside = new_outside - if(!skip_weather_update) - update_weather() - SSambience.queued += src - last_outside_check = OUTSIDE_UNCERTAIN + SSambience.queued |= src update_external_atmos_participation() + if(!skip_weather_update) + update_weather() if(!HasBelow(z)) return TRUE @@ -514,14 +566,16 @@ var/datum/gas_mixture/environment = return_air() return environment?.graphic -/turf/proc/get_vis_contents_to_add() +/turf/get_vis_contents_to_add() var/air_graphic = get_air_graphic() if(length(air_graphic)) LAZYADD(., air_graphic) if(weather) LAZYADD(., weather) if(flooded) - LAZYADD(., global.flood_object) + var/flood_object = get_flood_overlay(flooded) + if(flood_object) + LAZYADD(., flood_object) /**Whether we can place a cable here * If you cannot build a cable will return an error code explaining why you cannot. @@ -559,3 +613,113 @@ /turf/proc/resolve_to_actual_turf() return src + +// Largely copied from stairs. +/turf/proc/can_move_up_ramp(atom/movable/AM, turf/above_wall, turf/under_atom, turf/above_atom) + if(!istype(AM) || !istype(above_wall) || !istype(under_atom) || !istype(above_atom)) + return FALSE + return under_atom.CanZPass(AM, UP) && above_atom.CanZPass(AM, DOWN) && above_wall.Enter(AM) + +/turf/Bumped(var/atom/movable/AM) + if(!istype(AM) || !HasAbove(z)) + return ..() + var/turf/exterior/wall/slope = AM.loc + if(!istype(slope) || !slope.ramp_slope_direction || get_dir(src, slope) != slope.ramp_slope_direction) + return ..() + var/turf/above_wall = GetAbove(src) + if(can_move_up_ramp(AM, above_wall, get_turf(AM), GetAbove(AM))) + AM.forceMove(above_wall) + if(isliving(AM)) + var/mob/living/L = AM + for(var/obj/item/grab/G in L.get_active_grabs()) + G.affecting.forceMove(above_wall) + else + to_chat(AM, SPAN_WARNING("Something blocks the path.")) + return TRUE + +/turf/clean(clean_forensics = TRUE) + for(var/obj/effect/decal/cleanable/blood/B in contents) + B.clean(clean_forensics) + . = ..() + +//returns 1 if made bloody, returns 0 otherwise +/turf/add_blood(mob/living/M) + if(!simulated || !..() || !ishuman(M)) + return FALSE + var/mob/living/carbon/human/H = M + var/unique_enzymes = H.get_unique_enzymes() + var/blood_type = H.get_blood_type() + if(unique_enzymes && blood_type) + for(var/obj/effect/decal/cleanable/blood/B in contents) + if(!LAZYACCESS(B.blood_DNA, unique_enzymes)) + LAZYSET(B.blood_DNA, unique_enzymes, blood_type) + LAZYSET(B.blood_data, unique_enzymes, REAGENT_DATA(H.vessel, H.species.blood_reagent)) + var/datum/extension/forensic_evidence/forensics = get_or_create_extension(B, /datum/extension/forensic_evidence) + forensics.add_data(/datum/forensics/blood_dna, unique_enzymes) + else + blood_splatter(src, M, 1) + return TRUE + +/turf/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor=COLOR_BLOOD_HUMAN) + if(!simulated) + return + var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src + if(!tracks) + tracks = new typepath(src) + tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) + +// Proc called in /turf/Entered() to supply an appropriate fluid overlay. +/turf/proc/get_movable_alpha_mask_state(atom/movable/mover) + if(flooded) + return null + if(ismob(mover)) + var/mob/moving_mob = mover + if(moving_mob.can_overcome_gravity()) + return null + var/fluid_depth = get_fluid_depth() + if(fluid_depth > FLUID_PUDDLE) + if(fluid_depth <= FLUID_SHALLOW) + return "mask_shallow" + if(fluid_depth <= FLUID_DEEP) + return "mask_deep" + +/turf/proc/spark_act(obj/effect/sparks/sparks) + if(simulated) + hotspot_expose(1000,100) + if(prob(25)) + for(var/obj/structure/fire_source/fire in contents) + fire.light() + return TRUE + return FALSE + +/turf/get_alt_interactions(mob/user) + . = ..() + LAZYADD(., /decl/interaction_handler/show_turf_contents) + if(user && IS_SHOVEL(user.get_active_hand())) + if(can_dig_pit()) + LAZYADD(., /decl/interaction_handler/dig/pit) + +/decl/interaction_handler/show_turf_contents + name = "Show Turf Contents" + expected_user_type = /mob + interaction_flags = 0 + +/decl/interaction_handler/show_turf_contents/invoked(atom/target, mob/user, obj/item/prop) + target.show_atom_list_for_turf(user, get_turf(target)) + +/decl/interaction_handler/dig + abstract_type = /decl/interaction_handler/dig + expected_user_type = /mob + expected_target_type = /turf + interaction_flags = INTERACTION_NEEDS_PHYSICAL_INTERACTION | INTERACTION_NEEDS_TURF + +/decl/interaction_handler/dig/pit + name = "Dig Pit" + +/decl/interaction_handler/dig/pit/invoked(atom/target, mob/user, obj/item/prop) + var/turf/T = get_turf(target) + if(T.can_dig_pit()) + T.try_dig_pit(user, prop) + +/turf/proc/handle_universal_decay() + return diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 6cab56ac288..e46113928e2 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -12,6 +12,7 @@ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) if(L) qdel(L) + // Called after turf replaces old one /turf/proc/post_change() levelupdate() @@ -37,7 +38,7 @@ else above.ChangeTurf(open_turf_type, update_open_turfs_above = FALSE) -/turf/proc/ChangeTurf(var/turf/N, var/tell_universe = TRUE, var/force_lighting_update = FALSE, var/keep_air = FALSE, var/keep_air_below = FALSE, var/update_open_turfs_above = TRUE) +/turf/proc/ChangeTurf(var/turf/N, var/tell_universe = TRUE, var/force_lighting_update = FALSE, var/keep_air = FALSE, var/keep_air_below = FALSE, var/update_open_turfs_above = TRUE, var/keep_height = FALSE) if (!N) return @@ -46,7 +47,7 @@ var/turf/below = GetBelow(src) if(istype(below) && !isspaceturf(below)) var/area/A = get_area(src) - N = A?.open_turf || open_turf_type || /turf/simulated/open + N = A?.open_turf || open_turf_type || /turf/open if (!(atom_flags & ATOM_FLAG_INITIALIZED)) return new N(src) @@ -68,6 +69,7 @@ var/old_is_open = is_open() var/old_open_turf_type = open_turf_type var/old_affecting_heat_sources = affecting_heat_sources + var/old_height = get_physical_height() var/old_ambience = ambient_light var/old_ambience_mult = ambient_light_multiplier @@ -77,7 +79,6 @@ changing_turf = TRUE - qdel(src) . = new N(src) @@ -94,16 +95,13 @@ if(keep_air) W.air = old_air if(old_fire) - if(istype(W, /turf/simulated)) + if(W.simulated) W.fire = old_fire else if(old_fire) qdel(old_fire) - if(isnull(W.flooded) && old_flooded != W.flooded) - if(old_flooded && !W.density) - W.make_flooded() - else - W.make_unflooded() + if(old_flooded != W.flooded) + set_flooded(old_flooded) // Raise appropriate events. W.post_change() @@ -157,6 +155,9 @@ W.update_weather(force_update_below = W.is_open() != old_is_open) + if(keep_height) + W.set_height(old_height) + if(update_open_turfs_above) update_open_above(old_open_turf_type) @@ -213,6 +214,6 @@ return TRUE //No idea why resetting the base appearance from New() isn't enough, but without this it doesn't work -/turf/simulated/shuttle/wall/corner/transport_properties_from(turf/simulated/other) +/turf/simulated/shuttle/wall/corner/transport_properties_from(turf/other) . = ..() reset_base_appearance() diff --git a/code/game/turfs/turf_digging.dm b/code/game/turfs/turf_digging.dm new file mode 100644 index 00000000000..34058bd685e --- /dev/null +++ b/code/game/turfs/turf_digging.dm @@ -0,0 +1,32 @@ +/// Return an assoc list of resource item type to a base and a random component +/// ex. return list(/obj/item/stack/material/ore/sand = list(3, 2)) +/turf/proc/get_diggable_resources() + return null + +/turf/proc/clear_diggable_resources() + SHOULD_CALL_PARENT(TRUE) + update_icon() + +/turf/proc/can_be_dug() + return FALSE + +/turf/proc/drop_diggable_resources() + SHOULD_CALL_PARENT(TRUE) + var/list/diggable_resources = get_diggable_resources() + if(!length(diggable_resources)) + return + for(var/resource_type in diggable_resources) + var/list/resource_amounts = diggable_resources[resource_type] + LAZYADD(., new resource_type(src, resource_amounts[1] + rand(resource_amounts[2]))) + clear_diggable_resources() + +/turf/proc/can_dig_pit() + return can_be_dug() && !(locate(/obj/structure/pit) in src) + +/turf/proc/try_dig_pit(var/mob/user, var/obj/item/tool) + if((!user && !tool) || tool.do_tool_interaction(TOOL_SHOVEL, user, src, 4 SECONDS, set_cooldown = TRUE)) + return dig_pit() + return null + +/turf/proc/dig_pit() + return can_dig_pit() && new /obj/structure/pit(src) diff --git a/code/game/turfs/turf_effects.dm b/code/game/turfs/turf_effects.dm new file mode 100644 index 00000000000..84aaba661be --- /dev/null +++ b/code/game/turfs/turf_effects.dm @@ -0,0 +1,60 @@ +/turf/proc/get_wetness() + if(!simulated) + return 0 + var/atom/movable/wet_floor/wet_decal = locate() in src + return wet_decal?.wetness || 0 + +/turf/proc/wet_floor(var/wet_val = 1, var/overwrite = FALSE) + if(!simulated || is_flooded(absolute = TRUE) || get_fluid_depth() > FLUID_QDEL_POINT) + return FALSE + var/atom/movable/wet_floor/wet_decal = locate() in src + if(wet_val < wet_decal?.wetness && !overwrite) + return FALSE + if(!wet_decal) + wet_decal = new(src) + wet_decal.wetness = wet_val + wet_decal.wet_timer_id = addtimer(CALLBACK(wet_decal, TYPE_PROC_REF(/atom/movable/wet_floor, unwet_floor)), 8 SECONDS, (TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)) + return TRUE + +/turf/proc/unwet_floor(var/check_very_wet = TRUE) + if(!simulated) + return FALSE + var/atom/movable/wet_floor/wet_decal = locate() in src + if(!wet_decal) + return FALSE + if(check_very_wet && wet_decal.wetness >= 2) + wet_decal.wetness-- + wet_decal.wet_timer_id = addtimer(CALLBACK(wet_decal, TYPE_PROC_REF(/atom/movable/wet_floor, unwet_floor)), 8 SECONDS, (TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE)) + else + qdel(wet_decal) + return TRUE + +#define MAX_DIRT 101 +/turf/proc/add_dirt(amount) + if(!simulated) + return FALSE + var/obj/effect/decal/cleanable/dirt/dirt = locate() in src + if(!dirt) + dirt = new(src) + dirt.dirt_amount = min(dirt.dirt_amount + amount, MAX_DIRT) + return TRUE +#undef MAX_DIRT + +/turf/proc/remove_dirt(amount) + if(!simulated) + return FALSE + var/obj/effect/decal/cleanable/dirt/dirt = locate() in src + if(!dirt) + return FALSE + dirt.dirt_amount = min(dirt.dirt_amount - amount, 0) + if(dirt.dirt_amount) + dirt.update_icon() + else + qdel(dirt) + return TRUE + +/turf/proc/get_dirt(amount) + if(!simulated) + return 0 + var/obj/effect/decal/cleanable/dirt/dirt = locate() in src + return dirt?.dirt_amount || 0 diff --git a/code/game/turfs/turf_enter.dm b/code/game/turfs/turf_enter.dm index ddb26633928..fc6a410f5b7 100644 --- a/code/game/turfs/turf_enter.dm +++ b/code/game/turfs/turf_enter.dm @@ -5,7 +5,7 @@ if(!istype(mover) || !(mover.movable_flags & MOVABLE_FLAG_PROXMOVE)) return for(var/atom/movable/neighbor in range(1)) - if(objects > ENTER_PROXIMITY_LOOP_SANITY) + if(objects > ENTER_PROXIMITY_LOOP_SANITY) break // Don't let ore piles kill the server as well as the client. if(neighbor.movable_flags & MOVABLE_FLAG_PROXMOVE) objects++ @@ -15,17 +15,14 @@ #undef ENTER_PROXIMITY_LOOP_SANITY /turf/Entered(var/atom/movable/A, var/atom/old_loc) - ..() - - if(!istype(A)) + if(!istype(A) || !A.simulated) return - - if(ishuman(A)) - var/mob/living/carbon/human/H = A - H.handle_footsteps() - + if(isliving(A)) + var/mob/living/walker = A + walker.handle_footsteps() queue_temperature_atoms(A) + A.update_turf_alpha_mask() // If an opaque movable atom moves around we need to potentially update visibility. if(A?.opacity && !has_opaque_atom) @@ -49,6 +46,8 @@ I.contaminate() break - // Handle zmimic - if(!A.bound_overlay && !(A.z_flags & ZMM_IGNORE) && TURF_IS_MIMICKING(above)) - above.update_mimic() + // Handle non-listener proximity triggers. + handle_proximity_update(A) + + if(simulated) + A.OnSimulatedTurfEntered(src, old_loc) diff --git a/code/game/turfs/turf_fluids.dm b/code/game/turfs/turf_fluids.dm index 5a238ee305c..cd546c9bea5 100644 --- a/code/game/turfs/turf_fluids.dm +++ b/code/game/turfs/turf_fluids.dm @@ -10,28 +10,57 @@ return fluid_can_pass /turf/proc/remove_fluid(var/amount = 0) - var/obj/effect/fluid/F = locate() in src - if(F) - F.reagents.remove_any(amount) + if(reagents) + remove_any_reagents(amount) + +/turf/proc/displace_all_reagents() + UPDATE_FLUID_BLOCKED_DIRS(src) + var/list/spread_into_neighbors + var/turf/neighbor + var/coming_from + for(var/spread_dir in global.cardinal) + if(fluid_blocked_dirs & spread_dir) + continue + neighbor = get_step(src, spread_dir) + if(!neighbor) + continue + UPDATE_FLUID_BLOCKED_DIRS(neighbor) + coming_from = global.reverse_dir[spread_dir] + if((neighbor.fluid_blocked_dirs & coming_from) || !neighbor.CanFluidPass(coming_from) || neighbor.is_flooded(absolute = TRUE) || !neighbor.CanFluidPass(global.reverse_dir[spread_dir])) + continue + LAZYDISTINCTADD(spread_into_neighbors, neighbor) + if(length(spread_into_neighbors)) + var/spreading = round(reagents.total_volume / length(spread_into_neighbors)) + if(spreading > 0) + for(var/turf/spread_into_turf as anything in spread_into_neighbors) + reagents.trans_to_turf(spread_into_turf, spreading) + reagents?.clear_reagents() + +/turf/proc/set_flooded(new_flooded, force = FALSE, skip_vis_contents_update = FALSE, mapload = FALSE) + + // Don't do unnecessary work. + if(!force && new_flooded == flooded) + return -/turf/return_fluid() - return (locate(/obj/effect/fluid) in contents) + // Remove our old overlay if necessary. + if(flooded && new_flooded != flooded && !skip_vis_contents_update) + var/flood_object = get_flood_overlay(flooded) + if(flood_object) + remove_vis_contents(src, flood_object) -/turf/proc/make_unflooded(var/force) - if(force || flooded) - flooded = FALSE + // Set our flood state. + flooded = new_flooded + if(flooded) + QDEL_NULL(reagents) + ADD_ACTIVE_FLUID_SOURCE(src) + if(!skip_vis_contents_update) + var/flood_object = get_flood_overlay(flooded) + if(flood_object) + add_vis_contents(flood_object) + else if(!mapload) REMOVE_ACTIVE_FLUID_SOURCE(src) - remove_vis_contents(src, global.flood_object) fluid_update() // We are now floodable, so wake up our neighbors. -/turf/proc/make_flooded(var/force) - if(force || !flooded) - flooded = TRUE - for(var/obj/effect/fluid/fluid in src) - qdel(fluid) - ADD_ACTIVE_FLUID_SOURCE(src) - add_vis_contents(src, global.flood_object) - /turf/is_flooded(var/lying_mob, var/absolute) return (flooded || (!absolute && check_fluid_depth(lying_mob ? FLUID_OVER_MOB_HEAD : FLUID_DEEP))) @@ -39,53 +68,45 @@ . = (get_fluid_depth() >= min) /turf/proc/get_fluid_name() - var/obj/effect/fluid/F = return_fluid() - if(istype(F) && F.reagents?.primary_reagent) - return F.reagents.get_primary_reagent_name() - return "liquid" + var/decl/material/mat = reagents?.get_primary_reagent_decl() + return mat?.liquid_name || "liquid" /turf/get_fluid_depth() if(is_flooded(absolute=1)) return FLUID_MAX_DEPTH - var/obj/effect/fluid/F = return_fluid() - if(istype(F)) - return F.reagents.total_volume var/obj/structure/glass_tank/aquarium = locate() in contents - if(aquarium && aquarium.reagents && aquarium.reagents.total_volume) - return aquarium.reagents.total_volume * TANK_WATER_MULTIPLIER - return 0 + if(aquarium) + return aquarium.reagents?.total_volume * TANK_WATER_MULTIPLIER + return reagents?.total_volume || 0 /turf/proc/show_bubbles() set waitfor = FALSE - if(flooded) - return - var/obj/effect/fluid/F = locate() in src - if(istype(F)) - flick("bubbles",F) + // TODO: make flooding show bubbles. + if(!flooded && fluid_overlay) + flick("bubbles", fluid_overlay) /turf/fluid_update(var/ignore_neighbors) fluid_blocked_dirs = null fluid_can_pass = null if(!ignore_neighbors) for(var/checkdir in global.cardinal) - var/turf/T = get_step(src, checkdir) + var/turf/T = get_step_resolving_mimic(src, checkdir) if(T) T.fluid_update(TRUE) if(flooded) ADD_ACTIVE_FLUID_SOURCE(src) + else if(reagents?.total_volume > FLUID_QDEL_POINT) + ADD_ACTIVE_FLUID(src) -/turf/proc/add_fluid(var/fluid_type, var/fluid_amount, var/defer_update) - var/obj/effect/fluid/F = locate() in src - if(!F) - F = new(src) - if(!QDELETED(F)) - F.reagents.add_reagent(fluid_type, min(fluid_amount, FLUID_MAX_DEPTH - F.reagents.total_volume), defer_update = defer_update) - -/turf/proc/get_physical_height() - return 0 +/turf/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE) + if(!reagents) + create_reagents(FLUID_MAX_DEPTH) + return ..() -/turf/simulated/floor/get_physical_height() - return flooring?.height || 0 +/turf/get_reagent_space() + if(!reagents) + create_reagents(FLUID_MAX_DEPTH) + return ..() /turf/fluid_act(var/datum/reagents/fluids) ..() @@ -95,24 +116,67 @@ AM.fluid_act(fluids) /turf/proc/remove_fluids(var/amount, var/defer_update) - var/obj/effect/fluid/F = locate() in src - if(QDELETED(F) || !F.reagents?.total_volume) + if(!reagents?.total_volume) return - F.reagents.remove_any(amount, defer_update = defer_update) - if(defer_update && !QDELETED(F.reagents)) - SSfluids.holders_to_update[F.reagents] = TRUE + remove_any_reagents(amount, defer_update = defer_update) + if(defer_update && !QDELETED(reagents)) + SSfluids.holders_to_update[reagents] = TRUE /turf/proc/transfer_fluids_to(var/turf/target, var/amount, var/defer_update) - var/obj/effect/fluid/F = locate() in src - if(!F || !F.reagents?.total_volume) + if(!reagents?.total_volume) + return + if(!target.reagents) + target.create_reagents(FLUID_MAX_DEPTH) + reagents.trans_to_holder(target.reagents, min(reagents.total_volume, min(FLUID_MAX_DEPTH - target.reagents.total_volume, amount)), defer_update = defer_update) + if(defer_update) + if(!QDELETED(reagents)) + SSfluids.holders_to_update[reagents] = TRUE + if(!QDELETED(target.reagents)) + SSfluids.holders_to_update[target.reagents] = TRUE + +/turf/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + . = ..() + if(exposed_temperature >= FLAMMABLE_GAS_MINIMUM_BURN_TEMPERATURE) + vaporize_fuel(air) + +/turf/proc/vaporize_fuel(datum/gas_mixture/air) + if(!length(reagents?.reagent_volumes) || !istype(air)) return - var/obj/effect/fluid/other = locate() in target - if(!other) - other = new(target) - if(!QDELETED(other) && other.reagents) - F.reagents.trans_to_holder(other.reagents, min(F.reagents.total_volume, min(FLUID_MAX_DEPTH - other.reagents.total_volume, amount)), defer_update = defer_update) - if(defer_update) - if(!QDELETED(F.reagents)) - SSfluids.holders_to_update[F.reagents] = TRUE - if(!QDELETED(other.reagents)) - SSfluids.holders_to_update[other.reagents] = TRUE + var/update_air = FALSE + for(var/rtype in reagents.reagent_volumes) + var/decl/material/mat = GET_DECL(rtype) + if(mat.gas_flags & XGM_GAS_FUEL) + var/moles = round(reagents.reagent_volumes[rtype] / REAGENT_UNITS_PER_GAS_MOLE) + if(moles > 0) + air.adjust_gas(rtype, moles, FALSE) + remove_from_reagents(round(moles * REAGENT_UNITS_PER_GAS_MOLE)) + update_air = TRUE + if(update_air) + air.update_values() + return TRUE + return FALSE + +/turf/on_reagent_change() + + ..() + + if(reagents?.total_volume > FLUID_QDEL_POINT) + ADD_ACTIVE_FLUID(src) + var/decl/material/primary_reagent = reagents.get_primary_reagent_decl() + if(primary_reagent) + last_slipperiness = primary_reagent.slipperiness + if(!fluid_overlay) + fluid_overlay = new(src, TRUE) + fluid_overlay.update_icon() + unwet_floor(FALSE) + else + QDEL_NULL(fluid_overlay) + REMOVE_ACTIVE_FLUID(src) + SSfluids.pending_flows -= src + if(last_slipperiness > 0) + wet_floor(last_slipperiness) + + for(var/checkdir in global.cardinal) + var/turf/neighbor = get_step_resolving_mimic(src, checkdir) + if(neighbor?.reagents?.total_volume > FLUID_QDEL_POINT) + ADD_ACTIVE_FLUID(neighbor) diff --git a/code/game/turfs/turf_height.dm b/code/game/turfs/turf_height.dm new file mode 100644 index 00000000000..08a6a1aac5e --- /dev/null +++ b/code/game/turfs/turf_height.dm @@ -0,0 +1,5 @@ +/turf/proc/set_height(var/new_height) + return + +/turf/proc/get_physical_height() + return 0 diff --git a/code/game/turfs/turf_material.dm b/code/game/turfs/turf_material.dm new file mode 100644 index 00000000000..c8ba6cdb784 --- /dev/null +++ b/code/game/turfs/turf_material.dm @@ -0,0 +1,12 @@ +/turf/proc/get_material() + RETURN_TYPE(/decl/material) + +/turf/proc/get_material_type() + return get_material()?.type + +/turf/proc/get_default_material() + return null + +/turf/proc/set_turf_materials(decl/material/new_material, decl/material/new_reinf_material, force) + return + diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm index 875efa715c1..e19bc3f493a 100644 --- a/code/game/turfs/unsimulated.dm +++ b/code/game/turfs/unsimulated.dm @@ -1,6 +1,10 @@ /turf/unsimulated name = "command" - initial_gas = list(/decl/material/gas/oxygen = MOLES_O2STANDARD, /decl/material/gas/nitrogen = MOLES_N2STANDARD) + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2STANDARD, + /decl/material/gas/nitrogen = MOLES_N2STANDARD + ) + abstract_type = /turf/unsimulated simulated = FALSE /turf/unsimulated/get_lumcount(var/minlum = 0, var/maxlum = 1) diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index ff0d491cad6..a9036165b90 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -2,6 +2,7 @@ name = "Beach" icon = 'icons/misc/beach.dmi' turf_flags = TURF_FLAG_BACKGROUND + abstract_type = /turf/unsimulated/beach /turf/unsimulated/beach/sand name = "Sand" diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 1c59dbcf8ae..03c19902bde 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -1,7 +1,7 @@ /turf/unsimulated/floor name = "floor" icon = 'icons/turf/floors.dmi' - icon_state = "Floor3" + icon_state = "shuttle" turf_flags = TURF_IS_HOLOMAP_PATH /turf/unsimulated/floor/can_climb_from_below(var/mob/climber) @@ -30,6 +30,7 @@ // /turf/unsimulated/floor/tiled icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "steel" /turf/unsimulated/floor/tiled/dark name = "dark floor" @@ -60,14 +61,17 @@ icon_state = "freezer" /turf/unsimulated/floor/tiled/monofloor - icon_state = "monofloor" + icon_state = "steel_monofloor" /turf/unsimulated/floor/tiled/monotile icon_state = "steel_monotile" /turf/unsimulated/floor/tiled/techmaint icon_state = "techmaint" /turf/unsimulated/floor/tiled/techfloor + icon = 'icons/turf/flooring/techfloor.dmi' icon_state = "techfloor_gray" +/turf/unsimulated/floor/tiled/techfloor/grid + icon_state = "techfloor_grid" /turf/unsimulated/floor/tiled/steel_grid icon_state = "steel_grid" @@ -86,10 +90,7 @@ /turf/unsimulated/floor/tiled/stone name = "stone slab floor" - icon_state = "stone_full" - -/turf/unsimulated/floor/tiled/techfloor/grid - icon_state = "techfloor_grid" + icon_state = "stone" /turf/unsimulated/floor/lino name = "lino" @@ -99,4 +100,4 @@ /turf/unsimulated/floor/crystal name = "crystal floor" icon = 'icons/turf/flooring/crystal.dmi' - icon_state = "" \ No newline at end of file + icon_state = "crystal" \ No newline at end of file diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index baa0e3da4b9..18f3eede702 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -104,7 +104,7 @@ else msg += line - if(config.admin_irc) + if(get_config_value(/decl/config/text/admin_irc)) to_chat(src, "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.") to_chat(src, "Current Staff ([active_staff]/[total_staff]):") to_chat(src, jointext(msg,"\n")) diff --git a/code/game/world.dm b/code/game/world.dm index 53f928c044b..ad271f0f087 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -72,17 +72,14 @@ GLOBAL_PROTECTED_UNTYPED(game_id, null) /world/New() //set window title - name = "[config.server_name] - [global.using_map.full_name]" + + name = "[get_config_value(/decl/config/text/server_name) || "Nebula Station 13"] - [global.using_map.full_name]" //logs SetupLogs() changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently - if(config && config.server_name != null && config.server_suffix && world.port > 0) - // dumb and hardcoded but I don't care~ - config.server_name += " #[(world.port % 1000) / 100]" - if(byond_version < REQUIRED_DM_VERSION) to_world_log("Your server's BYOND version does not meet the minimum DM version for this server. Please update BYOND.") @@ -95,7 +92,6 @@ GLOBAL_PROTECTED_UNTYPED(game_id, null) #ifdef UNIT_TEST log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") - load_unit_test_changes() #endif Master.Initialize(10, FALSE) @@ -106,7 +102,7 @@ var/global/world_topic_last = world.timeofday var/list/throttle = global.world_topic_throttle[addr] if (!global.world_topic_throttle[addr]) global.world_topic_throttle[addr] = throttle = list(0, null) - else if ((!config.no_throttle_localhost || !global.localhost_addresses[addr]) && throttle[1] && throttle[1] > world.timeofday + 15 SECONDS) + else if ((!get_config_value(/decl/config/toggle/no_throttle_localhost) || !global.localhost_addresses[addr]) && throttle[1] && throttle[1] > world.timeofday + 15 SECONDS) return throttle[2] ? "Throttled ([throttle[2]])" : "Throttled" throttle[1] = max(throttle[1], world.timeofday) + time @@ -132,19 +128,22 @@ var/global/world_topic_last = world.timeofday return TC.try_use(T, addr, master, key) /world/Reboot(var/reason) + + if(get_config_value(/decl/config/toggle/wait_for_sigusr1_reboot) && reason != 3) + text2file("foo", "reboot_called") + to_world("World reboot waiting for external scripts. Please be patient.") + global.Master.restart_timeout = 5 MINUTES + return + if(global.using_map.reboot_sound) sound_to(world, sound(pick(global.using_map.reboot_sound)))// random end sounds!! - LastyBatsy - Master.Shutdown() + // Master.Shutdown() // In almost all normal cases, world/Reboot() calls world/Del() which calls Shutdown() on the master controller. Having it here means it runs multiple times. - if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite + var/serverurl = get_config_value(/decl/config/text/server) + if(serverurl) //if you set a server location in configuration, it sends you there instead of trying to reconnect to the same world address. -- NeoFite for(var/client/C in global.clients) - to_chat(C, link("byond://[config.server]")) - - if(config.wait_for_sigusr1_reboot && reason != 3) - text2file("foo", "reboot_called") - to_world("World reboot waiting for external scripts. Please be patient.") - return + to_chat(C, link("byond://[serverurl]")) game_log("World rebooted at [time_stamp()]") @@ -183,19 +182,12 @@ var/global/world_topic_last = world.timeofday /world/proc/load_motd() join_motd = safe_file2text("config/motd.txt", FALSE) -/proc/load_configuration() - config = new /datum/configuration() - config.load("config/config.txt") - config.load("config/game_options.txt","game_options") - config.loadsql("config/dbconfig.txt") - config.load_event("config/custom_event.txt") - /hook/startup/proc/loadMods() world.load_mods() return 1 /world/proc/load_mods() - if(config.admin_legacy_system) + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) var/text = safe_file2text("config/moderators.txt", FALSE) if (!text) error("Failed to load config/mods.txt") @@ -218,11 +210,13 @@ var/global/world_topic_last = world.timeofday /world/proc/update_status() var/s = "[station_name()]" - if(config && config.discordurl) - s += " (Discord)" + var/discordurl = get_config_value(/decl/config/text/discordurl) + if(discordurl) + s += " (Discord)" - if(config && config.server_name) - s = "[config.server_name] — [s]" + var/config_server_name = get_config_value(/decl/config/text/server_name) + if(config_server_name) + s = "[config_server_name] — [s]" var/list/features = list() @@ -231,15 +225,15 @@ var/global/world_topic_last = world.timeofday else features += "STARTING" - if (!config.enter_allowed) + if (!get_config_value(/decl/config/toggle/on/enter_allowed)) features += "closed" - features += config.abandon_allowed ? "respawn" : "no respawn" + features += get_config_value(/decl/config/toggle/on/abandon_allowed) ? "respawn" : "no respawn" - if (config && config.allow_vote_mode) + if (get_config_value(/decl/config/toggle/vote_mode)) features += "vote" - if (config && config.allow_ai) + if (get_config_value(/decl/config/toggle/on/allow_ai)) features += "AI allowed" var/n = 0 @@ -253,8 +247,9 @@ var/global/world_topic_last = world.timeofday features += "~[n] player" - if (config && config.hostedby) - features += "hosted by [config.hostedby]" + var/hosted_by = get_config_value(/decl/config/text/hosted_by) + if (hosted_by) + features += "hosted by [hosted_by]" if (features) s += ": [jointext(features, ", ")]" @@ -277,7 +272,7 @@ var/global/world_topic_last = world.timeofday diary = file("[global.log_directory]/main.log") // This is the primary log, containing attack, admin, and game logs. to_file(diary, "[log_end]\n[log_end]\nStarting up. (ID: [game_id]) [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]") - if(config && config.log_runtime) + if(get_config_value(/decl/config/toggle/log_runtime)) var/runtime_log = file("[global.log_directory]/runtime.log") to_file(runtime_log, "Game [game_id] starting up at [time2text(world.timeofday, "hh:mm.ss")]") log = runtime_log // runtimes and some other output is logged directly to world.log, which is redirected here. diff --git a/code/game/world_topic_commands.dm b/code/game/world_topic_commands.dm index a5d4adc28dc..b0cb23613b4 100644 --- a/code/game/world_topic_commands.dm +++ b/code/game/world_topic_commands.dm @@ -44,10 +44,11 @@ var/global/list/decl/topic_command/topic_commands = list() if (!can_use(T, addr, master, key)) return FALSE var/list/params = params2list(T) - if (!config.comms_password) + var/comms_password = get_config_value(/decl/config/text/comms_password) + if (!comms_password) set_throttle(addr, 10 SECONDS, "Comms Not Enabled") return "Not Enabled" - if (params["key"] != config.comms_password) + if (params["key"] != comms_password) set_throttle(addr, 30 SECONDS, "Bad Comms Key") return "Bad Key" return use(params) @@ -79,12 +80,12 @@ var/global/list/decl/topic_command/topic_commands = list() /decl/topic_command/status/use(var/list/params) var/list/s = list() s["version"] = game_version - s["mode"] = PUBLIC_GAME_MODE - s["respawn"] = config.abandon_allowed - s["enter"] = config.enter_allowed - s["vote"] = config.allow_vote_mode - s["ai"] = !!length(empty_playable_ai_cores) - s["host"] = host || null + s["mode"] = PUBLIC_GAME_MODE + s["respawn"] = get_config_value(/decl/config/toggle/on/abandon_allowed) + s["enter"] = get_config_value(/decl/config/toggle/on/enter_allowed) + s["vote"] = get_config_value(/decl/config/toggle/vote_mode) + s["ai"] = !!length(empty_playable_ai_cores) + s["host"] = host || null // This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here. s["players"] = 0 @@ -167,10 +168,11 @@ var/global/list/decl/topic_command/topic_commands = list() if (!can_use(T, addr, master, key)) return FALSE var/list/params = params2list(T) - if(!config.ban_comms_password) + var/ban_comms_password = get_config_value(/decl/config/text/ban_comms_password) + if(!ban_comms_password) set_throttle(addr, 10 SECONDS, "Bans Not Enabled") return "Not Enabled" - if(params["bankey"] != config.ban_comms_password) + if(params["bankey"] != ban_comms_password) set_throttle(addr, 30 SECONDS, "Bad Bans Key") return "Bad Key" return use(params) diff --git a/code/hub.dm b/code/hub.dm index d7b884d57e8..7749a33fd9d 100644 --- a/code/hub.dm +++ b/code/hub.dm @@ -1,5 +1,3 @@ -var/global/visibility_pref = FALSE - /world /* This page contains info for the hub. To allow your server to be visible on the hub, update the entry in the config. * You can also toggle visibility from in-game with toggle-hub-visibility; be aware that it takes a few minutes for the hub go @@ -8,5 +6,7 @@ var/global/visibility_pref = FALSE name = "Space Station 13 - Nebula13" /world/proc/update_hub_visibility() - global.visibility_pref = !global.visibility_pref - hub_password = global.visibility_pref ? "kMZy3U5jJHSiBQjr" : "SORRYNOPASSWORD" + if(get_config_value(/decl/config/toggle/hub_visibility)) + hub_password = "kMZy3U5jJHSiBQjr" + else + hub_password = "SORRYNOPASSWORD" diff --git a/code/modules/ZAS/Atom.dm b/code/modules/ZAS/Atom.dm index edbeef8d979..5a0718df918 100644 --- a/code/modules/ZAS/Atom.dm +++ b/code/modules/ZAS/Atom.dm @@ -29,30 +29,11 @@ //Convenience function for atoms to update turfs they occupy /atom/movable/proc/update_nearby_tiles(need_rebuild) - for(var/turf/simulated/turf in locs) - SSair.mark_for_update(turf) + for(var/turf/turf in locs) + if(turf.simulated) + SSair.mark_for_update(turf) fluid_update() return TRUE -//Basically another way of calling CanPass(null, other, 0, 0) and CanPass(null, other, 1.5, 1). -//Returns: -// 0 - Not blocked -// AIR_BLOCKED - Blocked -// ZONE_BLOCKED - Not blocked, but zone boundaries will not cross. -// BLOCKED - Blocked, zone boundaries will not cross even if opened. -/atom/proc/c_airblock(turf/other) - #ifdef ZASDBG - ASSERT(isturf(other)) - #endif - return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1)) - -/turf/c_airblock(turf/other) - #ifdef ZASDBG - ASSERT(isturf(other)) - #endif - - . = 0 - ATMOS_CANPASS_TURF(., src, other) - /atom/movable var/atmos_canpass = CANPASS_ALWAYS diff --git a/code/modules/ZAS/Contaminants.dm b/code/modules/ZAS/Contaminants.dm index 0ab5091a175..362f59c1fef 100644 --- a/code/modules/ZAS/Contaminants.dm +++ b/code/modules/ZAS/Contaminants.dm @@ -78,9 +78,9 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' //Burn skin if exposed. if(vsc.contaminant_control.SKIN_BURNS) if(!contaminant_head_protected() || !contaminant_suit_protected()) + if(prob(20)) + to_chat(src, "Your skin burns!") take_overall_damage(0, 0.75) - if(prob(20)) to_chat(src, "Your skin burns!") - updatehealth() //Burn eyes if exposed. if(vsc.contaminant_control.EYE_BURNS) diff --git a/code/modules/ZAS/Debug.dm b/code/modules/ZAS/Debug.dm index c333c1b15e9..e6304fa9092 100644 --- a/code/modules/ZAS/Debug.dm +++ b/code/modules/ZAS/Debug.dm @@ -72,8 +72,8 @@ var/global/list/zasdbgovl_dirzoneblock = list( /turf/var/tmp/obj/effect/zasdbg/dbg_img /turf/proc/dbg(obj/effect/zasdbg/img) - remove_vis_contents(src, dbg_img) - add_vis_contents(src, img) + remove_vis_contents(dbg_img) + add_vis_contents(img) dbg_img = img /proc/soft_assert(thing,fail) diff --git a/code/modules/ZAS/Diagnostic.dm b/code/modules/ZAS/Diagnostic.dm index 369eec4f9ec..71641a66eef 100644 --- a/code/modules/ZAS/Diagnostic.dm +++ b/code/modules/ZAS/Diagnostic.dm @@ -32,9 +32,11 @@ if(!direction) return + var/airblock if(direction == "N/A") to_chat(mob, "Testing self-blocking...") - if(!(T.c_airblock(T) & AIR_BLOCKED)) + ATMOS_CANPASS_TURF(airblock, T, T) + if(!(airblock & AIR_BLOCKED)) to_chat(mob, "The turf can pass air! :D") else to_chat(mob, "No air passage :x") @@ -44,8 +46,10 @@ if(!istype(other_turf)) return - var/t_block = T.c_airblock(other_turf) - var/o_block = other_turf.c_airblock(T) + var/t_block + ATMOS_CANPASS_TURF(t_block, T, other_turf) + var/o_block + ATMOS_CANPASS_TURF(o_block, other_turf, T) to_chat(mob, "Testing connection between ([T.x], [T.y], [T.z]) and ([other_turf.x], [other_turf.y], [other_turf.z])...") if(o_block & AIR_BLOCKED) diff --git a/code/modules/ZAS/Fire.dm b/code/modules/ZAS/Fire.dm index ab9bba78485..186aae2dca9 100644 --- a/code/modules/ZAS/Fire.dm +++ b/code/modules/ZAS/Fire.dm @@ -30,9 +30,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin if(!air_contents || exposed_temperature < FLAMMABLE_GAS_MINIMUM_BURN_TEMPERATURE) return 0 - var/obj/effect/fluid/F = locate() in src - if(F) - F.vaporize_fuel(air_contents) + vaporize_fuel(air_contents) var/igniting = 0 if(air_contents.check_combustibility()) @@ -127,7 +125,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin // prioritize nearby fuel overlays first for(var/direction in global.cardinal) var/turf/enemy_tile = get_step(my_tile, direction) - if(istype(enemy_tile) && (locate(/obj/effect/fluid) in enemy_tile)) + if(istype(enemy_tile) && enemy_tile.reagents) enemy_tile.hotspot_expose(air_contents.temperature, air_contents.volume) //spread @@ -141,7 +139,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin //if(!enemy_tile.zone.fire_tiles.len) TODO - optimize var/datum/gas_mixture/acs = enemy_tile.return_air() - if(!acs || !acs.check_combustibility(enemy_tile.return_fluid())) + if(!acs || !acs.check_combustibility()) continue //If extinguisher mist passed over the turf it's trying to spread to, don't spread and diff --git a/code/modules/ZAS/Turf.dm b/code/modules/ZAS/Turf.dm index 74cd9617e59..7a56649b5cd 100644 --- a/code/modules/ZAS/Turf.dm +++ b/code/modules/ZAS/Turf.dm @@ -10,7 +10,8 @@ c_copy_air() //not very efficient :( zone = null //Easier than iterating through the list at the zone. - var/s_block = c_airblock(src) + var/s_block + ATMOS_CANPASS_TURF(s_block, src, src) if(s_block & AIR_BLOCKED) #ifdef ZASDBG if(verbose) @@ -43,7 +44,8 @@ if(!unsim) //edge of map continue - var/block = unsim.c_airblock(src) + var/block + ATMOS_CANPASS_TURF(block, unsim, src) if(block & AIR_BLOCKED) #ifdef ZASDBG @@ -54,7 +56,8 @@ continue - var/r_block = c_airblock(unsim) + var/r_block + ATMOS_CANPASS_TURF(r_block, src, unsim) if(r_block & AIR_BLOCKED) #ifdef ZASDBG @@ -148,12 +151,21 @@ for(var/turf/T in postponed) SSair.connect(src, T) - - - - - - +// Helper for can_safely_remove_from_zone(). +#define GET_ZONE_NEIGHBOURS(T, ret) \ + ret = 0; \ + if (T.zone) { \ + for (var/_gzn_dir in gzn_check) { \ + var/turf/other = get_step(T, _gzn_dir); \ + if (istype(other) && other.simulated && other.zone == T.zone) { \ + var/block; \ + ATMOS_CANPASS_TURF(block, other, T); \ + if (!(block & AIR_BLOCKED)) { \ + ret |= _gzn_dir; \ + } \ + } \ + } \ + } /* Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing). @@ -162,46 +174,32 @@ */ /turf/proc/can_safely_remove_from_zone() - if(!zone) return 1 - var/check_dirs = get_zone_neighbours(src) - var/unconnected_dirs = check_dirs + if(!zone) + return 1 + + var/check_dirs + GET_ZONE_NEIGHBOURS(src, check_dirs) + . = check_dirs //src is only connected to the zone by a single direction, this is a safe removal. if (!(check_dirs & (check_dirs - 1))) //Equivalent to: if(IsInteger(log(2, .))) return TRUE - #ifdef MULTIZAS - var/to_check = global.cornerdirsz - #else - var/to_check = global.cornerdirs - #endif - - for(var/dir in to_check) - + for(var/dir in global.csrfz_check) //for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH) if((dir & check_dirs) == dir) //check that they are connected by the corner turf - var/connected_dirs = get_zone_neighbours(get_step(src, dir)) + var/turf/T = get_step(src, dir) + if (!istype(T) || !T.simulated) + . &= ~dir + continue + var/connected_dirs + GET_ZONE_NEIGHBOURS(T, connected_dirs) if(connected_dirs && (dir & global.reverse_dir[connected_dirs]) == dir) - unconnected_dirs &= ~dir //they are, so unflag the cardinals in question - + . &= ~dir //they are, so unflag the cardinals in question //it is safe to remove src from the zone if all cardinals are connected by corner turfs - return !unconnected_dirs - -//helper for can_safely_remove_from_zone() -/turf/proc/get_zone_neighbours(turf/T) - . = 0 - if(istype(T) && T.zone) - #ifdef MULTIZAS - var/to_check = global.cardinalz - #else - var/to_check = global.cardinal - #endif - for(var/dir in to_check) - var/turf/other = get_step(T, dir) - if(isturf(other) && other.zone_membership_candidate && other.zone == T.zone && !(other.c_airblock(T) & AIR_BLOCKED) && get_dist(src, other) <= 1) - . |= dir + . = !. /turf/proc/post_update_air_properties() if(connections) connections.update_all() @@ -226,11 +224,10 @@ return get_external_air() // Base behavior - . = air - if(!.) - . = make_air() - if(zone) - c_copy_air() + . = air || make_air() + if(zone) + c_copy_air() + zone = null /turf/remove_air(amount as num) var/datum/gas_mixture/GM = return_air() diff --git a/code/modules/ZAS/Zone.dm b/code/modules/ZAS/Zone.dm index 0005ea32c02..8b3f477a586 100644 --- a/code/modules/ZAS/Zone.dm +++ b/code/modules/ZAS/Zone.dm @@ -74,7 +74,7 @@ Class Procs: if(T.fire) fire_tiles.Add(T) SSair.active_fire_zones |= src - T.refresh_vis_contents() + T.update_vis_contents() /zone/proc/remove(turf/T) #ifdef ZASDBG @@ -84,10 +84,11 @@ Class Procs: ASSERT(T.zone == src) soft_assert(T in contents, "Lists are weird broseph") #endif + T.c_copy_air() // to avoid losing contents contents.Remove(T) fire_tiles.Remove(T) T.zone = null - T.refresh_vis_contents() + T.update_vis_contents() if(contents.len) air.group_multiplier = contents.len else @@ -105,7 +106,7 @@ Class Procs: if(!T.zone_membership_candidate) continue into.add(T) - T.refresh_vis_contents() + T.update_vis_contents() #ifdef ZASDBG T.dbg(zasdbgovl_merged) #endif @@ -129,7 +130,7 @@ Class Procs: if(invalid) return //Short circuit for explosions where rebuild is called many times over. c_invalidate() for(var/turf/T as anything in contents) - T.refresh_vis_contents() + T.update_vis_contents() T.needs_air_update = 0 //Reset the marker so that it will be added to the list. SSair.mark_for_update(T) CHECK_TICK @@ -153,7 +154,7 @@ Class Procs: // Update gas overlays. if(air.check_tile_graphic(graphic_add, graphic_remove)) for(var/turf/T as anything in contents) - T.refresh_vis_contents() + T.update_vis_contents() CHECK_TICK graphic_add.len = 0 graphic_remove.len = 0 @@ -172,10 +173,8 @@ Class Procs: if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD) last_air_temperature = air.temperature for(var/turf/T as anything in contents) - for(var/check_atom in T.contents) - var/atom/checking = check_atom - if(checking.simulated) - queue_temperature_atoms(checking) + for(var/atom/check_atom as anything in T.contents) + QUEUE_TEMPERATURE_ATOM(check_atom) CHECK_TICK /zone/proc/handle_condensation() @@ -192,9 +191,7 @@ Class Procs: if(condense_amt < 1) break air.adjust_gas(g, -condense_amt) - var/obj/effect/fluid/F = locate() in flooding - if(!F) F = new(flooding) - F.reagents.add_reagent(g, condense_amt * REAGENT_UNITS_PER_GAS_MOLE) + flooding.add_to_reagents(g, condense_amt * REAGENT_UNITS_PER_GAS_MOLE) CHECK_TICK condensing = FALSE diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm index 09716bfcb86..672e773675a 100644 --- a/code/modules/acting/acting_items.dm +++ b/code/modules/acting/acting_items.dm @@ -12,7 +12,7 @@ user.show_message("You push a button and watch patiently as the machine begins to hum.") if(active) active = FALSE - addtimer(CALLBACK(src, .proc/dispense), 3 SECONDS) + addtimer(CALLBACK(src, PROC_REF(dispense)), 3 SECONDS) return TRUE /obj/machinery/acting/wardrobe/proc/dispense() diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 686443a1b04..a780eadc0f5 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -15,7 +15,7 @@ return ..() //Guest Checking - if(!config.guests_allowed && IsGuestKey(key)) + if(!get_config_value(/decl/config/toggle/guests_allowed) && IsGuestKey(key)) log_access("Failed Login: [key] - Guests not allowed") message_admins("Failed Login: [key] - Guests not allowed") key_cache[key] = 0 @@ -27,7 +27,7 @@ key_cache[key] = 0 return - if(config.ban_legacy_system) + if(get_config_value(/decl/config/toggle/on/ban_legacy_system)) //Ban Checking . = CheckBan(ckeytext, computer_id, address) diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index c3d514be9a3..7f4ea462f4a 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -10,8 +10,9 @@ var/global/savefile/Banlist . = list() var/appeal - if(config && config.banappeals) - appeal = "\nFor more information on your ban, or to appeal, head to [config.banappeals]" + var/appealurl = get_config_value(/decl/config/text/banappeals) + if(appealurl) + appeal = "\nFor more information on your ban, or to appeal, head to [appealurl]" Banlist.cd = "/base" if( "[ckey][id]" in Banlist.dir ) Banlist.cd = "[ckey][id]" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 94094e16aaf..e95ddcd56d5 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -721,12 +721,9 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Globally Toggles OOC" set name="Toggle OOC" - if(!check_rights(R_ADMIN)) return - - config.ooc_allowed = !(config.ooc_allowed) - if (config.ooc_allowed) + if (toggle_config_value(/decl/config/toggle/on/ooc_allowed)) to_world("The OOC channel has been globally enabled!") else to_world("The OOC channel has been globally disabled!") @@ -737,12 +734,9 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Globally Toggles AOOC" set name="Toggle AOOC" - if(!check_rights(R_ADMIN)) return - - config.aooc_allowed = !(config.aooc_allowed) - if (config.aooc_allowed) + if (toggle_config_value(/decl/config/toggle/on/aooc_allowed)) communicate_broadcast(/decl/communication_channel/aooc, "The AOOC channel has been globally enabled!", TRUE) else communicate_broadcast(/decl/communication_channel/aooc, "The AOOC channel has been globally disabled!", TRUE) @@ -756,9 +750,7 @@ var/global/floorIsLava = 0 if(!check_rights(R_ADMIN)) return - - config.looc_allowed = !(config.looc_allowed) - if (config.looc_allowed) + if (toggle_config_value(/decl/config/toggle/on/looc_allowed)) to_world("The LOOC channel has been globally enabled!") else to_world("The LOOC channel has been globally disabled!") @@ -773,9 +765,7 @@ var/global/floorIsLava = 0 if(!check_rights(R_ADMIN)) return - - config.dsay_allowed = !(config.dsay_allowed) - if (config.dsay_allowed) + if (toggle_config_value(/decl/config/toggle/on/dsay_allowed)) to_world("Deadchat has been globally enabled!") else to_world("Deadchat has been globally disabled!") @@ -786,11 +776,9 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Toggle Dead OOC." set name="Toggle Dead OOC" - if(!check_rights(R_ADMIN)) return - - config.dooc_allowed = !( config.dooc_allowed ) + toggle_config_value(/decl/config/toggle/on/dooc_allowed) log_admin("[key_name(usr)] toggled Dead OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1) SSstatistics.add_field_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -804,9 +792,10 @@ var/global/floorIsLava = 0 return //BYOND hates actually changing world.visibility at runtime, so let's just change if we give it the hub password. - world.update_hub_visibility() //proc defined in hub.dm - var/long_message = "toggled hub visibility. The server is now [global.visibility_pref ? "visible" : "invisible"] ([global.visibility_pref])." - if (global.visibility_pref && !world.reachable) + toggle_config_value(/decl/config/toggle/hub_visibility) + var/new_vis = get_config_value(/decl/config/toggle/hub_visibility) + var/long_message = "toggled hub visibility. The server is now [new_vis ? "visible" : "invisible"]." + if (new_vis && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a firewall is blocking incoming connections.") send2adminirc("[key_name(src)]" + long_message) @@ -817,9 +806,12 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Toggle traitor scaling" set name="Toggle Traitor Scaling" - config.traitor_scaling = !config.traitor_scaling - log_admin("[key_name(usr)] toggled Traitor Scaling to [config.traitor_scaling].") - message_admins("[key_name_admin(usr)] toggled Traitor Scaling [config.traitor_scaling ? "on" : "off"].", 1) + if(toggle_config_value(/decl/config/toggle/traitor_scaling)) + log_admin("[key_name(usr)] toggled Traitor Scaling to on.") + message_admins("[key_name_admin(usr)] toggled Traitor Scaling on.", 1) + else + log_admin("[key_name(usr)] toggled Traitor Scaling to off.") + message_admins("[key_name_admin(usr)] toggled Traitor Scaling off.", 1) SSstatistics.add_field_details("admin_verb","TTS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/startnow() @@ -858,7 +850,7 @@ var/global/floorIsLava = 0 if(confirm == "Yes") Master.SetRunLevel(RUNLEVEL_POSTGAME) SSticker.end_game_state = END_GAME_READY_TO_END - INVOKE_ASYNC(SSticker, /datum/controller/subsystem/ticker/proc/declare_completion) + INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, declare_completion)) log_and_message_admins("initiated a game ending.") to_world("Game ending! Initiated by [usr.key]!") SSstatistics.add_field("admin_verb","ER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -867,11 +859,10 @@ var/global/floorIsLava = 0 set category = "Server" set desc="People can't enter" set name="Toggle Entering" - config.enter_allowed = !(config.enter_allowed) - if (!(config.enter_allowed)) - to_world("New players may no longer enter the game.") - else + if (toggle_config_value(/decl/config/toggle/on/enter_allowed)) to_world("New players may now enter the game.") + else + to_world("New players may no longer enter the game.") log_and_message_admins("toggled new player game entering.") world.update_status() SSstatistics.add_field_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -880,11 +871,11 @@ var/global/floorIsLava = 0 set category = "Server" set desc="People can't be AI" set name="Toggle AI" - config.allow_ai = !( config.allow_ai ) - if (!( config.allow_ai )) - to_world("The AI job is no longer chooseable.") - else + + if (toggle_config_value(/decl/config/toggle/on/allow_ai)) to_world("The AI job is chooseable now.") + else + to_world("The AI job is no longer chooseable.") log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() SSstatistics.add_field_details("admin_verb","TAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -893,12 +884,12 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Respawn basically" set name="Toggle Respawn" - config.abandon_allowed = !(config.abandon_allowed) - if(config.abandon_allowed) + if (toggle_config_value(/decl/config/toggle/on/abandon_allowed)) to_world("You may now respawn.") + log_and_message_admins("toggled respawn to On.") else to_world("You may no longer respawn :(") - log_and_message_admins("toggled respawn to [config.abandon_allowed ? "On" : "Off"].") + log_and_message_admins("toggled respawn to Off.") world.update_status() SSstatistics.add_field_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -908,10 +899,12 @@ var/global/floorIsLava = 0 set name="Toggle Aliens" if(!check_rights(R_ADMIN)) return - - config.aliens_allowed = !config.aliens_allowed - log_admin("[key_name(usr)] toggled Aliens to [config.aliens_allowed].") - message_admins("[key_name_admin(usr)] toggled Aliens [config.aliens_allowed ? "on" : "off"].", 1) + if(toggle_config_value(/decl/config/toggle/aliens_allowed)) + log_admin("[key_name(usr)] toggled Aliens to On.") + message_admins("[key_name_admin(usr)] toggled Aliens on.", 1) + else + log_admin("[key_name(usr)] toggled Aliens to Off.") + message_admins("[key_name_admin(usr)] toggled Aliens off.", 1) SSstatistics.add_field_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggle_space_ninja() @@ -920,9 +913,8 @@ var/global/floorIsLava = 0 set name="Toggle Space Ninjas" if(!check_rights(R_ADMIN)) return - - config.ninjas_allowed = !config.ninjas_allowed - log_and_message_admins("toggled Space Ninjas [config.ninjas_allowed ? "on" : "off"].") + toggle_config_value(/decl/config/toggle/ninjas_allowed) + log_and_message_admins("toggled Space Ninjas [get_config_value(/decl/config/toggle/ninjas_allowed) ? "on" : "off"].") SSstatistics.add_field_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/delay() @@ -948,24 +940,24 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Toggle admin jumping" set name="Toggle Jump" - config.allow_admin_jump = !(config.allow_admin_jump) - log_and_message_admins("toggled admin jumping to [config.allow_admin_jump].") + toggle_config_value(/decl/config/toggle/on/admin_jump) + log_and_message_admins("toggled admin jumping to [get_config_value(/decl/config/toggle/on/admin_jump)].") SSstatistics.add_field_details("admin_verb","TJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/adspawn() set category = "Server" set desc="Toggle admin spawning" set name="Toggle Spawn" - config.allow_admin_spawning = !(config.allow_admin_spawning) - log_and_message_admins("toggled admin item spawning to [config.allow_admin_spawning].") + toggle_config_value(/decl/config/toggle/on/admin_spawning) + log_and_message_admins("toggled admin item spawning to [get_config_value(/decl/config/toggle/on/admin_spawning)].") SSstatistics.add_field_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/adrev() set category = "Server" set desc="Toggle admin revives" set name="Toggle Revive" - config.allow_admin_rev = !(config.allow_admin_rev) - log_and_message_admins("toggled reviving to [config.allow_admin_rev].") + toggle_config_value(/decl/config/toggle/on/admin_revive) + log_and_message_admins("toggled reviving to [get_config_value(/decl/config/toggle/on/admin_revive)].") SSstatistics.add_field_details("admin_verb","TAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/immreboot() @@ -987,7 +979,7 @@ var/global/floorIsLava = 0 set category = "Admin" set name = "Unprison" if (isAdminLevel(M.z)) - if (config.allow_admin_jump) + if (get_config_value(/decl/config/toggle/on/admin_jump)) M.forceMove(get_random_spawn_turf(SPAWN_FLAG_PRISONERS_CAN_SPAWN)) message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]", 1) log_admin("[key_name(usr)] has unprisoned [key_name(M)]") @@ -1144,7 +1136,9 @@ var/global/floorIsLava = 0 for(var/path in subtypesof(/atom)) var/atom/path_cast = path if(TYPE_IS_SPAWNABLE(path_cast) && findtext(lowertext("[path]"), object)) - matches += "[path]" // We need to use a string because input() checks invisibility on types for Reasons:tm:. + // We need to keep the type as a string because for some ungodly reason input() compares + // initial invisibility value to mob see_invisible. + matches += "[path]" if(matches.len==0) return @@ -1153,11 +1147,11 @@ var/global/floorIsLava = 0 if(matches.len==1) chosen = matches[1] else - chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches + chosen = input(usr, "Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches if(!chosen) return - chosen = text2path(chosen) + chosen = text2path(chosen) // See comment above. if(ispath(chosen,/turf)) var/turf/T = get_turf(usr.loc) T.ChangeTurf(chosen) @@ -1263,8 +1257,7 @@ var/global/floorIsLava = 0 set category = "Debug" set desc="Reduces view range when wearing welding helmets" set name="Toggle tinted welding helmets." - config.welder_vision = !( config.welder_vision ) - if (config.welder_vision) + if (toggle_config_value(/decl/config/toggle/on/welder_vision)) to_world("Reduced welder vision has been enabled!") else to_world("Reduced welder vision has been disabled!") @@ -1275,13 +1268,14 @@ var/global/floorIsLava = 0 set category = "Server" set desc="Guests can't enter" set name="Toggle guests" - config.guests_allowed = !(config.guests_allowed) - if (!(config.guests_allowed)) - to_world("Guests may no longer enter the game.") - else + if (toggle_config_value(/decl/config/toggle/guests_allowed)) to_world("Guests may now enter the game.") - log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") - log_and_message_admins("toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") + log_admin("[key_name(usr)] toggled guests game entering allowed.") + log_and_message_admins("toggled guests game entering allowed.") + else + to_world("Guests may no longer enter the game.") + log_admin("[key_name(usr)] toggled guests game entering disallowed.") + log_and_message_admins("toggled guests game entering disallowed.") SSstatistics.add_field_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/output_ai_laws() @@ -1399,7 +1393,7 @@ var/global/floorIsLava = 0 if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response return 1 if(tomob.client) //No need to ghostize if there is no client - tomob.ghostize(0) + tomob.ghostize() message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") SSstatistics.add_field_details("admin_verb","CGD") diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index be20c0f0abc..66fe7e8daff 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -39,7 +39,7 @@ show_browser(src, F, "window=investigate[subject];size=800x300") if("hrefs") //persistant logs and stuff - if(config && config.log_hrefs) + if(get_config_value(/decl/config/toggle/log_hrefs)) if(global.world_href_log) show_browser(src, global.world_href_log, "window=investigate[subject];size=800x300") else diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 0a1c04d54f5..5a6a4d7b17a 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -68,7 +68,7 @@ var/global/list/admin_ranks = list() //list of all ranks with associated for (var/admin in world.GetConfig("admin")) world.SetConfig("APP/admin", admin, null) - if(config.admin_legacy_system) + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) load_admin_ranks() //load text from file @@ -108,7 +108,7 @@ var/global/list/admin_ranks = list() //list of all ranks with associated if(!dbcon.IsConnected()) error("Failed to connect to database in load_admins(). Reverting to legacy system.") log_misc("Failed to connect to database in load_admins(). Reverting to legacy system.") - config.admin_legacy_system = 1 + set_config_value(/decl/config/toggle/on/admin_legacy_system, TRUE) load_admins() return @@ -128,7 +128,7 @@ var/global/list/admin_ranks = list() //list of all ranks with associated if(!admin_datums) error("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") log_misc("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") - config.admin_legacy_system = 1 + set_config_value(/decl/config/toggle/on/admin_legacy_system, TRUE) load_admins() return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 1210dcbe012..77b6897bdac 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -330,7 +330,9 @@ var/global/list/admin_verbs_mod = list( /client/proc/aooc, /datum/admins/proc/sendFax, /datum/admins/proc/paralyze_mob, - /datum/admins/proc/view_persistent_data + /datum/admins/proc/view_persistent_data, + /datum/admins/proc/dump_configuration, + /datum/admins/proc/dump_character_info_manifest ) /client/proc/add_admin_verbs() @@ -343,7 +345,7 @@ var/global/list/admin_verbs_mod = list( if(holder.rights & R_SERVER) verbs += admin_verbs_server if(holder.rights & R_DEBUG) verbs += admin_verbs_debug - if(config.debugparanoid && !(holder.rights & R_ADMIN)) + if(get_config_value(/decl/config/toggle/paranoid) && !(holder.rights & R_ADMIN)) verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. if(holder.rights & R_POSSESS) verbs += admin_verbs_possess if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions @@ -421,7 +423,7 @@ var/global/list/admin_verbs_mod = list( else //ghostize var/mob/body = mob - var/mob/observer/ghost/ghost = body.ghostize(1) + var/mob/observer/ghost/ghost = body.ghostize() ghost.admin_ghosted = 1 if(body) body.teleop = ghost @@ -465,7 +467,7 @@ var/global/list/admin_verbs_mod = list( set name = "Display Job bans" set category = "Admin" if(holder) - if(config.ban_legacy_system) + if(get_config_value(/decl/config/toggle/on/ban_legacy_system)) holder.Jobbans() else holder.DB_ban_panel() @@ -476,7 +478,7 @@ var/global/list/admin_verbs_mod = list( set name = "Unban Panel" set category = "Admin" if(holder) - if(config.ban_legacy_system) + if(get_config_value(/decl/config/toggle/on/ban_legacy_system)) holder.unbanpanel() else holder.DB_ban_panel() @@ -577,7 +579,7 @@ var/global/list/admin_verbs_mod = list( explosion(epicenter, 3, 5, 7, 5) if("Custom Bomb") - if(config.use_iterative_explosions) + if(get_config_value(/decl/config/toggle/use_iterative_explosions)) var/power = input(src, "Input power num.", "Power?") as num explosion_iter(get_turf(mob), power, (UP|DOWN)) else @@ -642,13 +644,10 @@ var/global/list/admin_verbs_mod = list( set name = "Toggle href logging" set category = "Server" if(!holder) return - if(config) - if(config.log_hrefs) - config.log_hrefs = 0 - to_chat(src, "Stopped logging hrefs") - else - config.log_hrefs = 1 - to_chat(src, "Started logging hrefs") + if(toggle_config_value(/decl/config/toggle/log_hrefs)) + to_chat(src, "Started logging hrefs") + else + to_chat(src, "Stopped logging hrefs") /client/proc/check_ai_laws() set name = "Check AI Laws" @@ -760,22 +759,25 @@ var/global/list/admin_verbs_mod = list( switch(alert("Are you sure you wish to edit this mob's appearance? This can result in unintended consequences.",,"Yes","No")) if("No") return + + var/update_hair = FALSE var/new_facial = input("Please select facial hair color.", "Character Generation") as color if(new_facial) - M.facial_hair_colour = new_facial + SET_FACIAL_HAIR_COLOUR(M, new_facial, TRUE) + update_hair = TRUE var/new_hair = input("Please select hair color.", "Character Generation") as color if(new_hair) - M.hair_colour = new_hair + SET_HAIR_COLOUR(M, new_hair, TRUE) + update_hair = TRUE var/new_eyes = input("Please select eye color.", "Character Generation") as color if(new_eyes) - M.eye_colour = new_eyes - M.update_eyes() + M.set_eye_colour(new_eyes) var/new_skin = input("Please select body color.", "Character Generation") as color if(new_skin) - M.skin_colour = new_skin + M.set_skin_colour(new_skin, skip_update = TRUE) var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text @@ -784,14 +786,16 @@ var/global/list/admin_verbs_mod = list( M.skin_tone = -M.skin_tone + 35 // hair - var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/hair) - if(new_hstyle) - M.h_style = new_hstyle + var/new_hairstyle = input(usr, "Select a hair style", "Grooming") as null|anything in decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/hair) + if(new_hairstyle) + SET_HAIR_STYLE(M, new_hairstyle, TRUE) + update_hair = TRUE // facial hair var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in decls_repository.get_decl_paths_of_subtype(/decl/sprite_accessory/facial_hair) if(new_fstyle) - M.f_style = new_fstyle + SET_FACIAL_HAIR_STYLE(M, new_fstyle, TRUE) + update_hair = TRUE var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neuter") if (new_gender) @@ -802,7 +806,8 @@ var/global/list/admin_verbs_mod = list( else M.set_gender(NEUTER) - M.update_hair() + if(update_hair) + M.update_hair() M.update_body() M.check_dna(M) @@ -858,30 +863,25 @@ var/global/list/admin_verbs_mod = list( /client/proc/toggleghostwriters() set name = "Toggle ghost writers" set category = "Server" - if(!holder) return - if(config) - if(config.cult_ghostwriter) - config.cult_ghostwriter = 0 - to_chat(src, "Disallowed ghost writers.") - message_admins("Admin [key_name_admin(usr)] has disabled ghost writers.", 1) - else - config.cult_ghostwriter = 1 - to_chat(src, "Enabled ghost writers.") - message_admins("Admin [key_name_admin(usr)] has enabled ghost writers.", 1) + if(!holder) + return + if(toggle_config_value(/decl/config/toggle/on/cult_ghostwriter)) + to_chat(src, "Enabled ghost writers.") + message_admins("Admin [key_name_admin(usr)] has enabled ghost writers.", 1) + else + to_chat(src, "Disallowed ghost writers.") + message_admins("Admin [key_name_admin(usr)] has disabled ghost writers.", 1) /client/proc/toggledrones() set name = "Toggle maintenance drones" set category = "Server" if(!holder) return - if(config) - if(config.allow_drone_spawn) - config.allow_drone_spawn = 0 - to_chat(src, "Disallowed maint drones.") - message_admins("Admin [key_name_admin(usr)] has disabled maint drones.", 1) - else - config.allow_drone_spawn = 1 - to_chat(src, "Enabled maint drones.") - message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1) + if(toggle_config_value(/decl/config/toggle/on/allow_drone_spawn)) + to_chat(src, "Enabled maint drones.") + message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1) + else + to_chat(src, "Disallowed maint drones.") + message_admins("Admin [key_name_admin(usr)] has disabled maint drones.", 1) /client/proc/man_up(mob/T as mob in SSmobs.mob_list) set category = "Fun" diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 0b697a418dc..6d8057e82c4 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -24,9 +24,9 @@ var/global/jobban_keylist[0] //to store the keys & ranks var/decl/special_role/antag = GET_DECL(rank) rank = antag.name if (SSjobs.guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) + if(get_config_value(/decl/config/toggle/on/guest_jobban) && IsGuestKey(M.key)) return "Guest Job-ban" - if(config.usewhitelist && !check_whitelist(M)) + if(get_config_value(/decl/config/toggle/usewhitelist) && !check_whitelist(M)) return "Whitelisted Job" return ckey_is_jobbanned(M.ckey, rank) return 0 @@ -47,7 +47,7 @@ var/global/jobban_keylist[0] //to store the keys & ranks return 1 /proc/jobban_loadbanfile() - if(config.ban_legacy_system) + if(get_config_value(/decl/config/toggle/on/ban_legacy_system)) var/savefile/S=new("data/job_full.ban") from_savefile(S, "keys[0]", jobban_keylist) log_admin("Loading jobban_rank") @@ -60,7 +60,7 @@ var/global/jobban_keylist[0] //to store the keys & ranks if(!establish_db_connection()) error("Database connection failed. Reverting to the legacy ban system.") log_misc("Database connection failed. Reverting to the legacy ban system.") - config.ban_legacy_system = 1 + set_config_value(/decl/config/toggle/on/ban_legacy_system, TRUE) jobban_loadbanfile() return diff --git a/code/modules/admin/buildmode/areas.dm b/code/modules/admin/buildmode/areas.dm index 88ba2c22f5c..6b76fdba3b2 100644 --- a/code/modules/admin/buildmode/areas.dm +++ b/code/modules/admin/buildmode/areas.dm @@ -97,12 +97,12 @@ Right Click - List/Create Area return UnselectArea() selected_area = A - events_repository.register(/decl/observ/destroyed, selected_area, src, .proc/UnselectArea) + events_repository.register(/decl/observ/destroyed, selected_area, src, PROC_REF(UnselectArea)) /datum/build_mode/areas/proc/UnselectArea() if(!selected_area) return - events_repository.unregister(/decl/observ/destroyed, selected_area, src, .proc/UnselectArea) + events_repository.unregister(/decl/observ/destroyed, selected_area, src, PROC_REF(UnselectArea)) var/has_turf = FALSE for(var/turf/T in selected_area) diff --git a/code/modules/admin/buildmode/click_handler.dm b/code/modules/admin/buildmode/click_handler.dm index 15e20226ed0..fcb7bb91f8b 100644 --- a/code/modules/admin/buildmode/click_handler.dm +++ b/code/modules/admin/buildmode/click_handler.dm @@ -36,7 +36,7 @@ . = ..() /datum/click_handler/build_mode/proc/StartTimer() - timer_handle = addtimer(CALLBACK(src, .proc/TimerEvent), 1 SECOND, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_LOOP) + timer_handle = addtimer(CALLBACK(src, PROC_REF(TimerEvent)), 1 SECOND, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_LOOP) /datum/click_handler/build_mode/proc/StopTimer() deltimer(timer_handle) diff --git a/code/modules/admin/buildmode/edit.dm b/code/modules/admin/buildmode/edit.dm index a0505f46678..23bcdc47596 100644 --- a/code/modules/admin/buildmode/edit.dm +++ b/code/modules/admin/buildmode/edit.dm @@ -63,13 +63,13 @@ ClearValue() value_to_set = new_value if(istype(value_to_set, /datum)) - events_repository.register(/decl/observ/destroyed, value_to_set, src, /datum/build_mode/edit/proc/ClearValue) + events_repository.register(/decl/observ/destroyed, value_to_set, src, TYPE_PROC_REF(/datum/build_mode/edit, ClearValue)) /datum/build_mode/edit/proc/ClearValue(var/feedback) if(!istype(value_to_set, /datum)) return - events_repository.unregister(/decl/observ/destroyed, value_to_set, src, /datum/build_mode/edit/proc/ClearValue) + events_repository.unregister(/decl/observ/destroyed, value_to_set, src, TYPE_PROC_REF(/datum/build_mode/edit, ClearValue)) value_to_set = initial(value_to_set) if(feedback) Warn("The selected reference value was deleted. Default value restored.") diff --git a/code/modules/admin/buildmode/move_into.dm b/code/modules/admin/buildmode/move_into.dm index 75dba96f501..ce045fb7f39 100644 --- a/code/modules/admin/buildmode/move_into.dm +++ b/code/modules/admin/buildmode/move_into.dm @@ -33,14 +33,14 @@ ClearDestination() destination = A - events_repository.register(/decl/observ/destroyed, destination, src, /datum/build_mode/move_into/proc/ClearDestination) + events_repository.register(/decl/observ/destroyed, destination, src, TYPE_PROC_REF(/datum/build_mode/move_into, ClearDestination)) to_chat(user, "Will now move targets into \the [destination].") /datum/build_mode/move_into/proc/ClearDestination(var/feedback) if(!destination) return - events_repository.unregister(/decl/observ/destroyed, destination, src, /datum/build_mode/move_into/proc/ClearDestination) + events_repository.unregister(/decl/observ/destroyed, destination, src, TYPE_PROC_REF(/datum/build_mode/move_into, ClearDestination)) destination = null if(feedback) Warn("The selected destination was deleted.") diff --git a/code/modules/admin/buildmode/relocate_to.dm b/code/modules/admin/buildmode/relocate_to.dm index 1a2e77340c7..e0c3680993d 100644 --- a/code/modules/admin/buildmode/relocate_to.dm +++ b/code/modules/admin/buildmode/relocate_to.dm @@ -34,14 +34,14 @@ ClearRelocator() to_relocate = new_relocator - events_repository.register(/decl/observ/destroyed, to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) + events_repository.register(/decl/observ/destroyed, to_relocate, src, TYPE_PROC_REF(/datum/build_mode/relocate_to, ClearRelocator)) to_chat(user, "Will now be relocating \the [to_relocate].") /datum/build_mode/relocate_to/proc/ClearRelocator(var/feedback) if(!to_relocate) return - events_repository.unregister(/decl/observ/destroyed, to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) + events_repository.unregister(/decl/observ/destroyed, to_relocate, src, TYPE_PROC_REF(/datum/build_mode/relocate_to, ClearRelocator)) to_relocate = null if(feedback) Warn("The selected relocation object was deleted.") diff --git a/code/modules/admin/buildmode/throw_at.dm b/code/modules/admin/buildmode/throw_at.dm index 068a89a1d1c..581e2077757 100644 --- a/code/modules/admin/buildmode/throw_at.dm +++ b/code/modules/admin/buildmode/throw_at.dm @@ -33,14 +33,14 @@ ClearThrowable() to_throw = new_throwable - events_repository.register(/decl/observ/destroyed, to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) + events_repository.register(/decl/observ/destroyed, to_throw, src, TYPE_PROC_REF(/datum/build_mode/throw_at, ClearThrowable)) to_chat(user, "Will now be throwing \the [to_throw].") /datum/build_mode/throw_at/proc/ClearThrowable(var/feedback) if(!to_throw) return - events_repository.unregister(/decl/observ/destroyed, to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) + events_repository.unregister(/decl/observ/destroyed, to_throw, src, TYPE_PROC_REF(/datum/build_mode/throw_at, ClearThrowable)) to_throw = null if(feedback) Warn("The selected throwing object was deleted.") diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index bc841bf43fd..4cdf5e8c089 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -6,7 +6,7 @@ set name = "Advanced ProcCall" if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return + if(get_config_value(/decl/config/toggle/paranoid) && !check_rights(R_ADMIN)) return var/target = null var/targetselected = 0 @@ -41,7 +41,7 @@ set name = "Advanced ProcCall Target" if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return + if(get_config_value(/decl/config/toggle/paranoid) && !check_rights(R_ADMIN)) return callproc_targetpicked(1, A) @@ -51,7 +51,7 @@ /client/proc/callproc_targetpicked(hastarget, datum/target) // this needs checking again here because VV's 'Call Proc' option directly calls this proc with the target datum if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return + if(get_config_value(/decl/config/toggle/paranoid) && !check_rights(R_ADMIN)) return if(!holder.callproc) holder.callproc = new(src) diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 23da2d37f26..1c1df1d4655 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -7,7 +7,7 @@ var/global/create_object_html = null create_object_html = file2text('html/create_object.html') create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") - show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x475") + show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=800x600") /datum/admins/proc/quick_create_object(var/mob/user) @@ -23,4 +23,4 @@ var/global/create_object_html = null quick_create_object_html = file2text('html/create_object.html') quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") - show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "window=quick_create_object;size=425x475") + show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "window=quick_create_object;size=800x600") diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index af9881d7406..4b05b4d2538 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -121,7 +121,8 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check if(!holder) return FALSE - var/auto_stealth = (inactivity >= world.time) || (config.autostealth && (inactivity >= MinutesToTicks(config.autostealth))) + var/config_autostealth = get_config_value(/decl/config/num/autostealth) + var/auto_stealth = (inactivity >= world.time) || (config_autostealth && (inactivity >= config_autostealth MINUTES)) // If someone has been AFK since round-start or longer, stealth them // BYOND keeps track of inactivity between rounds as long as it's not a full stop/start. if(holder.stealthy_ == STEALTH_OFF && auto_stealth) diff --git a/code/modules/admin/panicbunker.dm b/code/modules/admin/panicbunker.dm index 8ca0b8fae53..bd215380d72 100644 --- a/code/modules/admin/panicbunker.dm +++ b/code/modules/admin/panicbunker.dm @@ -6,11 +6,9 @@ var/global/list/panic_bunker_bypass = list() if(!check_rights(R_SERVER)) return - - config.panic_bunker = !config.panic_bunker - - log_and_message_admins("[key_name(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker ? "on" : "off")]") - if (config.panic_bunker && (!dbcon || !dbcon.IsConnected())) + toggle_config_value(/decl/config/toggle/panic_bunker) + log_and_message_admins("[key_name(usr)] has toggled the Panic Bunker, it is now [(get_config_value(/decl/config/toggle/panic_bunker) ? "on" : "off")]") + if (get_config_value(/decl/config/toggle/panic_bunker) && (!dbcon || !dbcon.IsConnected())) message_admins("The SQL database is not connected, player age cannot be checked and the panic bunker will not function until the database connection is restored.") /datum/admins/proc/addbunkerbypass(ckeytobypass as text) diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index eb81b27a463..add6b917af5 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -45,7 +45,8 @@ show_browser(usr, output, "window=editrights;size=600x500") /datum/admins/proc/log_admin_rank_modification(var/adm_ckey, var/new_rank) - if(config.admin_legacy_system) return + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) + return if(!usr.client) return @@ -95,7 +96,8 @@ to_chat(usr, "Admin rank changed.") /datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission) - if(config.admin_legacy_system) return + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) + return if(!usr.client) return diff --git a/code/modules/admin/quantum_mechanic.dm b/code/modules/admin/quantum_mechanic.dm index 6be7741873a..7a66955cba7 100644 --- a/code/modules/admin/quantum_mechanic.dm +++ b/code/modules/admin/quantum_mechanic.dm @@ -95,7 +95,7 @@ spark_at(src) if(key) - var/mob/observer/ghost/ghost = ghostize(1) + var/mob/observer/ghost/ghost = ghostize() ghost.set_dir(dir) ghost.can_reenter_corpse = TRUE ghost.reload_fullscreen() @@ -191,8 +191,6 @@ icon = 'icons/clothing/under/uniform_quantum.dmi' cold_protection = SLOT_FULL_BODY heat_protection = SLOT_FULL_BODY - sensor_mode = SUIT_SENSOR_OFF - has_sensor = FALSE siemens_coefficient = 0 /obj/item/clothing/under/color/quantum/attack_hand(mob/user) diff --git a/code/modules/admin/secrets/fun_secrets/waddle.dm b/code/modules/admin/secrets/fun_secrets/waddle.dm index f1cfc8b6e7b..f4d7e86e251 100644 --- a/code/modules/admin/secrets/fun_secrets/waddle.dm +++ b/code/modules/admin/secrets/fun_secrets/waddle.dm @@ -7,8 +7,8 @@ if(waddling) for(var/mob/living/living_mob in global.living_mob_list_) set_extension(living_mob, /datum/extension/waddle) - events_repository.register_global(/decl/observ/life, src, .proc/enroll_in_waddling) - events_repository.register_global(/decl/observ/death, src, .proc/cure_waddling) + events_repository.register_global(/decl/observ/life, src, PROC_REF(enroll_in_waddling)) + events_repository.register_global(/decl/observ/death, src, PROC_REF(cure_waddling)) else for(var/mob/living/living_mob in global.living_mob_list_) cure_waddling(living_mob) @@ -32,8 +32,8 @@ /datum/extension/waddle/New(datum/holder) . = ..() - events_repository.register(/decl/observ/moved, holder, src, .proc/waddle) - events_repository.register(/decl/observ/destroyed, holder, src, .proc/qdel_self) + events_repository.register(/decl/observ/moved, holder, src, PROC_REF(waddle)) + events_repository.register(/decl/observ/destroyed, holder, src, PROC_REF(qdel_self)) /datum/extension/event_registration/Destroy() events_repository.unregister(/decl/observ/destroyed, holder, src) diff --git a/code/modules/admin/spam_prevention.dm b/code/modules/admin/spam_prevention.dm index 98875e57cee..10d9adab7fe 100644 --- a/code/modules/admin/spam_prevention.dm +++ b/code/modules/admin/spam_prevention.dm @@ -7,14 +7,14 @@ var/global/list/ckey_punished_for_spam = list() // this round; to avoid redundan var/ckey = C && C.ckey if(!ckey) return FALSE - if (config.do_not_prevent_spam) + if(get_config_value(/decl/config/toggle/do_not_prevent_spam)) return TRUE var/time = world.time - if(global.ckey_to_act_time[ckey] + config.act_interval < time) + if(global.ckey_to_act_time[ckey] + (get_config_value(/decl/config/num/act_interval) SECONDS) < time) global.ckey_to_act_time[ckey] = time global.ckey_to_actions[ckey] = 1 return TRUE - if(global.ckey_to_actions[ckey] <= config.max_acts_per_interval) + if(global.ckey_to_actions[ckey] <= get_config_value(/decl/config/num/max_acts_per_interval)) global.ckey_to_actions[ckey]++ return TRUE @@ -41,5 +41,5 @@ var/global/list/ckey_punished_for_spam = list() // this round; to avoid redundan return return ..() -/client/MouseDrop() +/client/MouseDrop(src_object, over_object, src_location, over_location, src_control, over_control, params) . = user_acted(src) && ..() diff --git a/code/modules/admin/ticket.dm b/code/modules/admin/ticket.dm index 694d8524929..d394a86cd0c 100644 --- a/code/modules/admin/ticket.dm +++ b/code/modules/admin/ticket.dm @@ -20,7 +20,7 @@ var/global/list/ticket_panels = list() var/sql_ckey = sanitize_sql(owner.ckey) var/DBQuery/ticket_query = dbcon.NewQuery("INSERT INTO `erro_admin_tickets`(`ckey`, `round`, `inround_id`, `status`, `open_date`) VALUES ('[sql_ckey]', '[game_id]', [src.id], 'OPEN', NOW());") ticket_query.Execute() - addtimer(CALLBACK(src, .proc/timeoutcheck), 5 MINUTES) + addtimer(CALLBACK(src, PROC_REF(timeoutcheck)), 5 MINUTES) /datum/ticket/proc/timeoutcheck() if(status == TICKET_OPEN) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 85aa0b7a70d..b37a0a83e88 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -140,19 +140,19 @@ if(null,"") return if("*New Rank*") new_rank = input("Please input a new rank", "New custom rank", null, null) as null|text - if(config.admin_legacy_system) + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) new_rank = ckeyEx(new_rank) if(!new_rank) to_chat(usr, SPAN_WARNING("Error: Topic 'editrights': Invalid rank")) return - if(config.admin_legacy_system) + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) if(admin_ranks.len) if(new_rank in admin_ranks) rights = admin_ranks[new_rank] //we typed a rank which already exists, use its rights else admin_ranks[new_rank] = 0 //add the new rank to admin_ranks else - if(config.admin_legacy_system) + if(get_config_value(/decl/config/toggle/on/admin_legacy_system)) new_rank = ckeyEx(new_rank) rights = admin_ranks[new_rank] //we input an existing rank, use its rights @@ -418,7 +418,7 @@ to_chat(usr, "You do not have the appropriate permissions to add job bans!") return - if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !config.mods_can_job_tempban) // If mod and tempban disabled + if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !get_config_value(/decl/config/toggle/mods_can_job_tempban)) // If mod and tempban disabled to_chat(usr, "Mod jobbanning is disabled!") return @@ -464,14 +464,15 @@ if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0)) to_chat(usr, " You cannot issue temporary job-bans!") return - if(config.ban_legacy_system) + if(get_config_value(/decl/config/toggle/on/ban_legacy_system)) to_chat(usr, "Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.") return var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(!mins) return - if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_job_tempban_max) - to_chat(usr, " Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!") + var/mod_job_tempban_max = get_config_value(/decl/config/num/mod_job_tempban_max) + if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > mod_job_tempban_max) + to_chat(usr, " Moderators can only job tempban up to [mod_job_tempban_max] minutes!") return var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null) if(!reason) @@ -524,7 +525,7 @@ //Unbanning job list //all jobs in job list are banned already OR we didn't give a reason (implying they shouldn't be banned) if(LAZYLEN(SSjobs.titles_to_datums)) //at least 1 banned job exists in job list so we have stuff to unban. - if(!config.ban_legacy_system) + if(!get_config_value(/decl/config/toggle/on/ban_legacy_system)) to_chat(usr, "Unfortunately, database based unbanning cannot be done through this panel") DB_ban_panel(M.ckey) return @@ -584,7 +585,7 @@ to_chat(usr, "You do not have the appropriate permissions to add bans!") return - if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !config.mods_can_job_tempban) // If mod and tempban disabled + if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !get_config_value(/decl/config/toggle/mods_can_job_tempban)) // If mod and tempban disabled to_chat(usr, "Mod jobbanning is disabled!") return @@ -603,8 +604,9 @@ var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(!mins) return - if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_tempban_max) - to_chat(usr, "Moderators can only job tempban up to [config.mod_tempban_max] minutes!") + var/mod_tempban_max = get_config_value(/decl/config/num/mod_tempban_max) + if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > mod_tempban_max) + to_chat(usr, "Moderators can only job tempban up to [mod_tempban_max] minutes!") return if(mins >= 525600) mins = 525599 var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null) @@ -624,8 +626,9 @@ SSstatistics.add_field("ban_tmp",1) DB_ban_record(BANTYPE_TEMP, M, mins, reason) SSstatistics.add_field("ban_tmp_mins",mins) - if(config.banappeals) - to_chat(M, "To try to resolve this matter head to [config.banappeals]") + var/banappeals = get_config_value(/decl/config/text/banappeals) + if(banappeals) + to_chat(M, "To try to resolve this matter head to [banappeals]") else to_chat(M, "No ban appeals URL has been set.") log_and_message_admins("has banned [mob_key].\nReason: [reason]\nThis will be removed in [mins_readable].") @@ -650,8 +653,9 @@ AddBan(mob_key, M.computer_id, reason, usr.ckey, 0, 0) to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") to_chat(M, "This is a ban until appeal.") - if(config.banappeals) - to_chat(M, "To try to resolve this matter head to [config.banappeals]") + var/banappeals = get_config_value(/decl/config/text/banappeals) + if(banappeals) + to_chat(M, "To try to resolve this matter head to [banappeals]") else to_chat(M, "No ban appeals URL has been set.") ban_unban_log_save("[usr.client.ckey] has permabanned [mob_key]. - Reason: [reason] - This is a ban until appeal.") @@ -684,8 +688,9 @@ if(SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) var/dat = {"What mode do you wish to play?
    "} - for(var/mode in config.modes) - dat += {"[config.mode_names[mode]]
    "} + var/list/mode_names = get_config_value(/decl/config/lists/mode_names) + for(var/mode in get_config_value(/decl/config/lists/mode_allowed)) + dat += {"[mode_names[mode]]
    "} dat += {"Secret
    "} dat += {"Random
    "} dat += {"Now: [SSticker.master_mode]"} @@ -699,8 +704,9 @@ if(SSticker.master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) var/dat = {"What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.
    "} - for(var/mode in config.modes) - dat += {"[config.mode_names[mode]]
    "} + var/list/mode_names = get_config_value(/decl/config/lists/mode_names) + for(var/mode in get_config_value(/decl/config/lists/mode_allowed)) + dat += {"[mode_names[mode]]
    "} dat += {"Random (default)
    "} dat += {"Now: [secret_force_mode]"} show_browser(usr, dat, "window=f_secret") @@ -773,7 +779,7 @@ to_chat(usr, "This can only be used on instances of type /mob/living") return - if(config.allow_admin_rev) + if(get_config_value(/decl/config/toggle/on/admin_revive)) L.revive() log_and_message_admins("healed/revived [key_name(L)]") else @@ -992,10 +998,10 @@ if(prob(80)) T.break_tile_to_plating() else T.break_tile() - if(M.health == 1) + if(M.current_health == 1) M.gib() else - M.adjustBruteLoss( min( 99 , (M.health - 1) ) ) + M.adjustBruteLoss(min(99, M.current_health - 1)) SET_STATUS_MAX(M, STAT_STUN, 20) SET_STATUS_MAX(M, STAT_WEAK, 20) M.set_status(STAT_STUTTER, 20) @@ -1045,7 +1051,7 @@ var/obj/item/fax = locate(href_list["AdminFaxView"]) if (istype(fax, /obj/item/paper)) var/obj/item/paper/P = fax - P.interact(usr, TRUE) + P.interact(usr, TRUE, admin_interact = TRUE) else if (istype(fax, /obj/item/photo)) var/obj/item/photo/H = fax H.interact(usr) @@ -1157,7 +1163,7 @@ else if(href_list["object_list"]) //this is the laggiest thing ever if(!check_rights(R_SPAWN)) return - if(!config.allow_admin_spawning) + if(!get_config_value(/decl/config/toggle/on/admin_spawning)) to_chat(usr, "Spawning of items is not allowed.") return diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2.dm index 852f132be80..34aa6f688d8 100644 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL_2/SDQL_2.dm @@ -9,7 +9,7 @@ -- Will change all the tube lights to green, and flicker them. The semicolon is important to separate the consecutive querys, but is not required for standard one-query use. UPDATE /obj/machinery/light SET color = "#0F0" WHERE icon_state == "tube1"; CALL flicker(1) ON /obj/machinery/light -- Will delete all pickaxes. "IN world" is not required. - DELETE /obj/item/pickaxe + DELETE /obj/item/tool/pickaxe --You can use operators other than ==, such as >, <=, != and etc.. diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index a44fae79380..f1f4d7130d9 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -11,7 +11,7 @@ set category = "Admin" if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(!config.allow_admin_jump) + if(!get_config_value(/decl/config/toggle/on/admin_jump)) return alert("Admin jumping disabled") var/list/areas = area_repository.get_areas_by_z_level() @@ -25,7 +25,7 @@ set category = "Admin" if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(!config.allow_admin_jump) + if(!get_config_value(/decl/config/toggle/on/admin_jump)) return alert("Admin jumping disabled") log_and_message_admins("jumped to [T.x],[T.y],[T.z] in [T.loc]") @@ -39,7 +39,7 @@ if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(config.allow_admin_jump) + if(get_config_value(/decl/config/toggle/on/admin_jump)) log_and_message_admins("jumped to [key_name(M)]") if(mob) var/turf/T = get_turf(M) @@ -58,7 +58,7 @@ if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(!config.allow_admin_jump) + if(!get_config_value(/decl/config/toggle/on/admin_jump)) alert("Admin jumping disabled") return if(!mob) @@ -82,7 +82,7 @@ if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(config.allow_admin_jump) + if(get_config_value(/decl/config/toggle/on/admin_jump)) if(!istype(C)) to_chat(usr, "[C] is not a client, somehow.") return @@ -100,7 +100,7 @@ set desc = "Mob to teleport" if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(config.allow_admin_jump) + if(get_config_value(/decl/config/toggle/on/admin_jump)) log_and_message_admins("teleported [key_name(M)] to self.") M.jumpTo(get_turf(mob)) SSstatistics.add_field_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -115,7 +115,7 @@ if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(config.allow_admin_jump) + if(get_config_value(/decl/config/toggle/on/admin_jump)) var/list/keys = list() for(var/mob/M in global.player_list) keys += M.client @@ -138,7 +138,7 @@ set name = "Send Mob" if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return - if(!config.allow_admin_jump) + if(!get_config_value(/decl/config/toggle/on/admin_jump)) alert("Admin jumping disabled") return diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index da9195800ca..9d9b1e0b6b1 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -109,8 +109,8 @@ to_chat(C, recieve_message) C.adminhelped = 0 - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(config.popup_admin_pm) + //AdminPM popup for ApocStation and anybody else who wants to use it. + if(get_config_value(/decl/config/toggle/popup_admin_pm)) spawn(0) //so we don't hold the caller proc up var/sender = src var/sendername = key diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index dc7b8e732a0..4574117732c 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -7,11 +7,11 @@ to_chat(src, "Only administrators may use this command.") return - var/input = sanitize(input(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", custom_event_msg) as message|null, MAX_BOOK_MESSAGE_LEN, extra = 0) + var/input = sanitize(input(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", global.custom_event_msg) as message|null, MAX_BOOK_MESSAGE_LEN, extra = 0) if(isnull(input)) return if(input == "") - custom_event_msg = null + global.custom_event_msg = null log_admin("[usr.key] has cleared the custom event text.") message_admins("[key_name_admin(usr)] has cleared the custom event text.") return @@ -19,26 +19,26 @@ log_admin("[usr.key] has changed the custom event text.") message_admins("[key_name_admin(usr)] has changed the custom event text.") - custom_event_msg = input + global.custom_event_msg = input to_world("

    Custom Event

    ") to_world("

    A custom event is starting. OOC Info:

    ") - to_world("[custom_event_msg]") + to_world("[global.custom_event_msg]") to_world("
    ") - SSwebhooks.send(WEBHOOK_CUSTOM_EVENT, list("text" = custom_event_msg)) + SSwebhooks.send(WEBHOOK_CUSTOM_EVENT, list("text" = global.custom_event_msg)) // normal verb for players to view info /client/verb/cmd_view_custom_event() set category = "OOC" set name = "Custom Event Info" - if(!custom_event_msg || custom_event_msg == "") + if(!global.custom_event_msg) to_chat(src, "There currently is no known custom event taking place.") to_chat(src, "Keep in mind: it is possible that an admin has not properly set this.") return to_chat(src, "

    Custom Event

    ") to_chat(src, "

    A custom event is taking place. OOC Info:

    ") - to_chat(src, "[custom_event_msg]") + to_chat(src, "[global.custom_event_msg]") to_chat(src, "
    ") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 6eb26896ee9..749ae26f7dd 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -128,10 +128,13 @@ /client/proc/cmd_debug_tog_aliens() set category = "Server" set name = "Toggle Aliens" + if(toggle_config_value(/decl/config/toggle/aliens_allowed)) + log_admin("[key_name(src)] has turned aliens on.") + message_admins("[key_name_admin(src)] has turned aliens on.", 0) + else + log_admin("[key_name(src)] has turned aliens off.") + message_admins("[key_name_admin(src)] has turned aliens off.", 0) - config.aliens_allowed = !config.aliens_allowed - log_admin("[key_name(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].") - message_admins("[key_name_admin(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].", 0) SSstatistics.add_field_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_grantfullaccess(var/mob/M in SSmobs.mob_list) @@ -287,7 +290,7 @@ if(!outfit) return - var/reset_equipment = (outfit.flags&OUTFIT_RESET_EQUIPMENT) + var/reset_equipment = (outfit.outfit_flags & OUTFIT_RESET_EQUIPMENT) if(!reset_equipment) reset_equipment = alert("Do you wish to delete all current equipment first?", "Delete Equipment?","Yes", "No") == "Yes" @@ -506,7 +509,7 @@ planet_template.load_new_z(gen_data = PD) if(!daycycle) PD.day_duration = null - SSdaycyle.remove_linked_levels(PD.topmost_level_id) + SSdaycycle.remove_linked_levels(PD.topmost_level_id) /client/proc/display_del_log() set category = "Debug" diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 1d827848db0..bd80f7d9898 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -16,7 +16,7 @@ var/active_on_main_station = 0 var/inactive_on_main_station = 0 for(var/zone/zone in SSair.zones) - var/turf/simulated/turf = locate() in zone.contents + var/turf/turf = locate() in zone.contents if(turf && isStationLevel(turf.z)) if(zone.needs_update) active_on_main_station++ diff --git a/code/modules/admin/verbs/fluids.dm b/code/modules/admin/verbs/fluids.dm index ca22c5fd109..d3e5e0d0204 100644 --- a/code/modules/admin/verbs/fluids.dm +++ b/code/modules/admin/verbs/fluids.dm @@ -3,7 +3,7 @@ set desc = "Flood the turf you are standing on." set category = "Debug" - if(!check_rights(R_SPAWN)) + if(!check_rights(R_SPAWN)) return var/mob/user = usr @@ -18,7 +18,7 @@ return var/turf/flooding = get_turf(user) for(var/turf/T as anything in RANGE_TURFS(flooding, spawn_range)) - T.add_fluid(reagent_type, reagent_amount) + T.add_to_reagents(reagent_type, reagent_amount) /datum/admins/proc/jump_to_fluid_source() diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index cccbc4dfd41..603633ae184 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -3,7 +3,7 @@ set category = "Object" if(istype(O,/obj/effect/singularity)) - if(config.forbid_singulo_possession) + if(get_config_value(/decl/config/toggle/forbid_singulo_possession)) to_chat(usr, "It is forbidden to possess singularities.") return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 02b93e28284..02844dcf867 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -83,7 +83,7 @@ return if (style == "unsafe") - if (!config.allow_unsafe_narrates) + if (!get_config_value(/decl/config/toggle/allow_unsafe_narrates)) to_chat(user, SPAN_WARNING("Unsafe narrates are not permitted by the server configuration.")) return @@ -291,8 +291,7 @@ Allow admins to set players to be able to respawn/bypass 30 min wait, without the admin having to edit variables directly Ccomp's first proc. */ - -/client/proc/get_ghosts(var/notify = 0,var/what = 2) +/proc/get_ghosts(var/notify, var/what = 2) // what = 1, return ghosts ass list. // what = 2, return mob list @@ -305,16 +304,14 @@ Ccomp's first proc. any = 1 //if no ghosts show up, any will just be 0 if(!any) if(notify) - to_chat(src, "There doesn't appear to be any ghosts for you to select.") + to_chat(notify, "There doesn't appear to be any ghosts for you to select.") return - for(var/mob/M in mobs) var/name = M.name ghosts[name] = M //get the name of the mob for the popup list - if(what==1) + if(what == 1) return ghosts - else - return mobs + return mobs /client/proc/get_ghosts_by_key() . = list() @@ -336,22 +333,24 @@ Ccomp's first proc. to_chat(src, "[selection] no longer has an associated ghost.") return - if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + if(G.has_enabled_antagHUD == 1 && get_config_value(/decl/config/toggle/antag_hud_restricted)) var/response = alert(src, "[selection] has enabled antagHUD. Are you sure you wish to allow them to respawn?","Ghost has used AntagHUD","No","Yes") if(response == "No") return else var/response = alert(src, "Are you sure you wish to allow [selection] to respawn?","Allow respawn","No","Yes") if(response == "No") return - G.timeofdeath=-19999 /* time of death is checked in /mob/verb/abandon_mob() which is the Respawn verb. - timeofdeath is used for bodies on autopsy but since we're messing with a ghost I'm pretty sure - there won't be an autopsy. - */ + /* + time of death is checked in /mob/verb/abandon_mob() which is the Respawn verb. + timeofdeath is used for bodies on autopsy but since we're messing with a ghost I'm pretty sure + there won't be an autopsy. + */ + G.timeofdeath = -(INFINITY) G.has_enabled_antagHUD = 2 - G.can_reenter_corpse = CORPSE_CAN_REENTER_AND_RESPAWN + G.can_reenter_corpse |= CORPSE_CAN_RESPAWN G.show_message("You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.", 1) - log_and_message_admins("has allowed [key_name(G)] to bypass the [config.respawn_delay] minute respawn limit.") + log_and_message_admins("has allowed [key_name(G)] to bypass the [get_config_value(/decl/config/num/respawn_delay)] minute respawn limit.") /client/proc/toggle_antagHUD_use() set category = "Server" @@ -360,34 +359,13 @@ Ccomp's first proc. if(!holder) to_chat(src, "Only administrators may use this command.") - var/action="" - if(config.antag_hud_allowed) - for(var/mob/observer/ghost/g in get_ghosts()) - if(!g.client.holder) //Remove the verb from non-admin ghosts - g.verbs -= /mob/observer/ghost/verb/toggle_antagHUD - if(g.antagHUD) - g.antagHUD = 0 // Disable it on those that have it enabled - g.has_enabled_antagHUD = 2 // We'll allow them to respawn - to_chat(g, "The Administrator has disabled AntagHUD") - config.antag_hud_allowed = 0 - to_chat(src, "AntagHUD usage has been disabled") - action = "disabled" - else - for(var/mob/observer/ghost/g in get_ghosts()) - if(!g.client.holder) // Add the verb back for all non-admin ghosts - g.verbs += /mob/observer/ghost/verb/toggle_antagHUD - to_chat(g, "The Administrator has enabled AntagHUD ")// Notify all observers they can now use AntagHUD - - config.antag_hud_allowed = 1 + var/action = "disabled" + if(toggle_config_value(/decl/config/toggle/antag_hud_allowed)) action = "enabled" - to_chat(src, "AntagHUD usage has been enabled") - - + to_chat(src, "AntagHUD usage has been [action]") log_admin("[key_name(usr)] has [action] antagHUD usage for observers") message_admins("Admin [key_name_admin(usr)] has [action] antagHUD usage for observers", 1) - - /client/proc/toggle_antagHUD_restrictions() set category = "Server" set name = "Toggle antagHUD Restrictions" @@ -395,22 +373,19 @@ Ccomp's first proc. if(!holder) to_chat(src, "Only administrators may use this command.") var/action="" - if(config.antag_hud_restricted) - for(var/mob/observer/ghost/g in get_ghosts()) - to_chat(g, "The administrator has lifted restrictions on joining the round if you use AntagHUD") - action = "lifted restrictions" - config.antag_hud_restricted = 0 - to_chat(src, "AntagHUD restrictions have been lifted") - else - for(var/mob/observer/ghost/g in get_ghosts()) + if(toggle_config_value(/decl/config/toggle/antag_hud_restricted)) + for(var/mob/observer/ghost/g in get_ghosts(src)) to_chat(g, "The administrator has placed restrictions on joining the round if you use AntagHUD") to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions") g.antagHUD = 0 g.has_enabled_antagHUD = 0 action = "placed restrictions" - config.antag_hud_restricted = 1 to_chat(src, "AntagHUD restrictions have been enabled") - + else + for(var/mob/observer/ghost/g in get_ghosts(src)) + to_chat(g, "The administrator has lifted restrictions on joining the round if you use AntagHUD") + action = "lifted restrictions" + to_chat(src, "AntagHUD restrictions have been lifted") log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD") message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1) @@ -545,7 +520,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!istype(M)) alert("Cannot revive a ghost") return - if(config.allow_admin_rev) + if(get_config_value(/decl/config/toggle/on/admin_revive)) M.revive() log_and_message_admins("healed / revived [key_name_admin(M)]!") @@ -665,21 +640,13 @@ Traitors and the like can also be revived with the previous role mostly intact. /client/proc/cmd_admin_gib(mob/M as mob in SSmobs.mob_list) set category = "Special Verbs" set name = "Gib" - if(!check_rights(R_ADMIN|R_FUN)) return - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm != "Yes") return //Due to the delay here its easy for something to have happened to the mob if(!M) return - log_admin("[key_name(usr)] has gibbed [key_name(M)]") message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1) - - if(isobserver(M)) - gibs(M.loc) - return - M.gib() SSstatistics.add_field_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -828,12 +795,11 @@ Traitors and the like can also be revived with the previous role mostly intact. set desc = "Toggles random events such as meteors, black holes, blob (but not space dust) on/off" if(!check_rights(R_SERVER)) return - if(!config.allow_random_events) - config.allow_random_events = 1 + toggle_config_value(/decl/config/toggle/on/allow_random_events) + if(get_config_value(/decl/config/toggle/on/allow_random_events)) to_chat(usr, "Random events enabled") message_admins("Admin [key_name_admin(usr)] has enabled random events.", 1) else - config.allow_random_events = 0 to_chat(usr, "Random events disabled") message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1) SSstatistics.add_field_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index b2a1ebfc8ef..8e3350b0407 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -142,9 +142,6 @@ /datum/proc/VV_secluded() return list() -/datum/configuration/VV_secluded() - return vars - // The following vars cannot be edited by anyone /datum/proc/VV_static() return list("parent_type", "gc_destroyed", "is_processing") @@ -191,7 +188,7 @@ if(!(var_to_edit in VV_get_variables())) to_chat(user, "\The [src] does not have a var '[var_to_edit]'") return FALSE - if(var_to_edit in VV_static()) + if((var_to_edit in VV_static()) || (var_to_edit in VV_hidden())) return FALSE if((var_to_edit in VV_secluded()) && !check_rights(R_ADMIN|R_DEBUG, FALSE, C = user)) return FALSE diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 9b7f36146fb..bf73547e0d3 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -354,7 +354,7 @@ return if(H.change_species(new_species)) - to_chat(usr, SPAN_NOTICE("Set species of [H] to [H.species].")) + to_chat(usr, SPAN_NOTICE("Set species of \the [H] to [H.species].")) else to_chat(usr, SPAN_WARNING("Failed! Something went wrong.")) diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 14003e5826a..63badf23e00 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -3,10 +3,14 @@ /datum/alarm_handler var/category = "" - var/list/datum/alarm/alarms = new // All alarms, to handle cases when an origin has been deleted with one or more active alarms - var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. - var/list/datum/alarm/alarms_by_z = new // Associative list of alarms based on origin z level - var/list/listeners = new // A list of all objects interested in alarm changes. + /// All alarms, to handle cases when an origin has been deleted with one or more active alarms + var/list/datum/alarm/alarms = list() + /// Associative list of alarms, to efficiently acquire them based on origin. + var/list/datum/alarm/alarms_assoc = list() + /// Associative list of alarms based on origin z level + var/list/datum/alarm/alarms_by_z = list() + /// A list of all objects interested in alarm changes. + var/list/listeners = list() /datum/alarm_handler/proc/process() for(var/datum/alarm/A in alarms) @@ -54,7 +58,9 @@ if(z_level) . = list() for(var/z in SSmapping.get_connected_levels(z_level)) - . += alarms_by_z[num2text(z)] || list() + var/alarms = alarms_by_z[num2text(z)] + if(length(alarms)) + . |= alarms else return alarms @@ -76,7 +82,9 @@ if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) alarms -= alarm alarms_assoc -= alarm.origin - alarms_by_z["[alarm.alarm_z()]"] -= alarm + var/alarm_key = "[alarm.alarm_z()]" + if(islist(alarms_by_z[alarm_key])) + alarms_by_z[alarm_key] -= alarm on_alarm_change(alarm, ALARM_CLEARED) return 1 return 0 diff --git a/code/modules/aspects/aspects.dm b/code/modules/aspects/_aspects.dm similarity index 95% rename from code/modules/aspects/aspects.dm rename to code/modules/aspects/_aspects.dm index be9036b2e73..5b9479cce06 100644 --- a/code/modules/aspects/aspects.dm +++ b/code/modules/aspects/_aspects.dm @@ -82,7 +82,7 @@ var/global/list/aspect_categories = list() // Containers for ease of printing da /decl/aspect/dd_SortValue() return sort_value -/decl/aspect/proc/apply(var/mob/living/carbon/human/holder) +/decl/aspect/proc/apply(mob/living/holder) return (istype(holder)) // Called by preferences selection for HTML display. @@ -103,7 +103,7 @@ var/global/list/aspect_categories = list() // Containers for ease of printing da incompatible_aspect_taken = TRUE break - if(istype(caller) && (ticked || caller.get_aspect_total() + aspect_cost <= config.max_character_aspects) && !incompatible_aspect_taken) + if(istype(caller) && (ticked || caller.get_aspect_total() + aspect_cost <= get_config_value(/decl/config/num/max_character_aspects)) && !incompatible_aspect_taken) result += "[ticked ? "[name]" : "[name]"] ([aspect_cost])" else result += ticked ? "[name]" : "[name]" @@ -130,7 +130,7 @@ var/global/list/aspect_categories = list() // Containers for ease of printing da for(var/decl/aspect/A as anything in personal_aspects) aspect_cost += A.aspect_cost - var/dat = list("[aspect_cost]/[config.max_character_aspects] points spent.") + var/dat = list("[aspect_cost]/[get_config_value(/decl/config/num/max_character_aspects)] points spent.") for(var/aspect_category in global.aspect_categories) var/datum/aspect_category/AC = global.aspect_categories[aspect_category] if(!istype(AC)) diff --git a/code/modules/aspects/aspects_amputations.dm b/code/modules/aspects/aspects_amputations.dm index 9c6cfc7cee8..9e94c88ec1e 100644 --- a/code/modules/aspects/aspects_amputations.dm +++ b/code/modules/aspects/aspects_amputations.dm @@ -49,7 +49,7 @@ if(!(limb in mob_bodytype.has_limbs)) return FALSE -/decl/aspect/amputation/apply(var/mob/living/carbon/human/holder) +/decl/aspect/amputation/apply(mob/living/holder) . = ..() if(. && apply_to_limbs) for(var/limb in apply_to_limbs) diff --git a/code/modules/aspects/aspects_handicaps.dm b/code/modules/aspects/aspects_handicaps.dm index 6a5caadda3e..e646224c8c7 100644 --- a/code/modules/aspects/aspects_handicaps.dm +++ b/code/modules/aspects/aspects_handicaps.dm @@ -8,7 +8,7 @@ desc = "Your vision is somewhat impaired, and you need prescription glasses to see clearly." incompatible_with = list(/decl/aspect/prosthetic_organ/eyes) -/decl/aspect/handicap/impaired_vision/apply(mob/living/carbon/human/holder) +/decl/aspect/handicap/impaired_vision/apply(mob/living/holder) . = ..() if(.) holder.dna.SetSEState(global.GLASSESBLOCK,1,0) @@ -30,7 +30,7 @@ ) var/client_color = /datum/client_color/deuteranopia -/decl/aspect/handicap/colourblind/apply(mob/living/carbon/human/holder) +/decl/aspect/handicap/colourblind/apply(mob/living/holder) . = ..() if(. && ispath(client_color, /datum/client_color)) holder.add_client_color(client_color) diff --git a/code/modules/aspects/aspects_prosthetic_limbs.dm b/code/modules/aspects/aspects_prosthetic_limbs.dm index 40c97f9b2c4..ee6096fe63c 100644 --- a/code/modules/aspects/aspects_prosthetic_limbs.dm +++ b/code/modules/aspects/aspects_prosthetic_limbs.dm @@ -17,7 +17,7 @@ if(!species_name) return /decl/bodytype/prosthetic/basic_human var/decl/species/species = species_name ? get_species_by_key(species_name) : global.using_map.default_species - return species?.base_prosthetics_model + return species?.base_external_prosthetics_model /decl/aspect/prosthetic_limb/Initialize() . = ..() @@ -80,7 +80,7 @@ else if(!get_base_model(pref.species)) return FALSE -/decl/aspect/prosthetic_limb/apply(var/mob/living/carbon/human/holder) +/decl/aspect/prosthetic_limb/apply(mob/living/holder) . = ..() // Don't apply if there's a specific model selected. diff --git a/code/modules/aspects/aspects_prosthetic_organs.dm b/code/modules/aspects/aspects_prosthetic_organs.dm index 578e080ae8d..c9be210ccb3 100644 --- a/code/modules/aspects/aspects_prosthetic_organs.dm +++ b/code/modules/aspects/aspects_prosthetic_organs.dm @@ -5,30 +5,44 @@ aspect_cost = 1 category = "Prosthetic Organs" sort_value = 2 + var/synthetic_bodytype_restricted = FALSE var/apply_to_organ = BP_HEART /decl/aspect/prosthetic_organ/is_available_to(datum/preferences/pref) . = ..() if(. && pref.species && pref.bodytype) + var/decl/species/mob_species = pref.get_species_decl() var/decl/bodytype/mob_bodytype = pref.get_bodytype_decl() + if(!istype(mob_bodytype)) return FALSE + + // Synthetic organs are generally unnecessary in FBPs as they have robotic innards regardless. + if(synthetic_bodytype_restricted) + if(!mob_bodytype.is_robotic) + return FALSE + else + if(mob_bodytype.is_robotic) + return FALSE + if(!(apply_to_organ in mob_bodytype.has_organ)) return FALSE + if(mob_species.species_flags & SPECIES_NO_ROBOTIC_INTERNAL_ORGANS) return FALSE + return TRUE /decl/aspect/prosthetic_organ/applies_to_organ(var/organ) return apply_to_organ && organ == apply_to_organ -/decl/aspect/prosthetic_organ/apply(var/mob/living/carbon/human/holder) +/decl/aspect/prosthetic_organ/apply(mob/living/holder) . = ..() if(.) var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(holder, apply_to_organ) if(I) - I.set_bodytype(holder.species.base_prosthetics_model) + I.set_bodytype(I.species.base_internal_prosthetics_model) /decl/aspect/prosthetic_organ/eyes name = "Prosthetic Eyes" @@ -61,3 +75,26 @@ name = "Prosthetic Stomach" desc = "You have a literal iron stomach." apply_to_organ = BP_STOMACH + +/decl/aspect/prosthetic_organ/brain + name = "Synthetic Brain" + desc = "You are an artificial lifeform, with a mind made of steel and light." + apply_to_organ = BP_BRAIN + synthetic_bodytype_restricted = TRUE + var/new_brain_type = /obj/item/organ/internal/brain/robotic + +/decl/aspect/prosthetic_organ/brain/apply(mob/living/holder) + . = ..() + if(.) + var/obj/item/organ/external/affected + var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(holder, apply_to_organ) + if(I) + affected = GET_EXTERNAL_ORGAN(holder, I.parent_organ) + I.transfer_brainmob_with_organ = FALSE // we don't want to pull them out of the mob + holder.remove_organ(I, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE) + qdel(I) + var/obj/item/organ/organ = new new_brain_type(holder) + if(!affected) + affected = GET_EXTERNAL_ORGAN(holder, organ.parent_organ) + if(affected) + holder.add_organ(organ, affected, TRUE, FALSE, FALSE, TRUE) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index eea98925985..0a91771b32c 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -9,7 +9,7 @@ throwforce = 2 throw_speed = 3 throw_range = 10 - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' var/secured = 1 var/list/attached_overlays = null diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index ba7055647f9..f692cd70b9d 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -2,7 +2,7 @@ name = "igniter" desc = "A small electronic device able to ignite combustible substances." icon_state = "igniter" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index d54d203d973..c472eacbe06 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -10,7 +10,7 @@ name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" - origin_tech = "{'magnets':2}" + origin_tech = @'{"magnets":2}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -30,7 +30,7 @@ . = ..() beams = list() seen_turfs = list() - proximity_trigger = new(src, /obj/item/assembly/infra/proc/on_beam_entered, /obj/item/assembly/infra/proc/on_visibility_change, world.view, proximity_flags = PROXIMITY_EXCLUDE_HOLDER_TURF) + proximity_trigger = new(src, TYPE_PROC_REF(/obj/item/assembly/infra, on_beam_entered), TYPE_PROC_REF(/obj/item/assembly/infra, on_visibility_change), world.view, proximity_flags = PROXIMITY_EXCLUDE_HOLDER_TURF) /obj/item/assembly/infra/Destroy() qdel(proximity_trigger) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index af049899f8c..9de4e7f4f83 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -2,7 +2,7 @@ name = "rat trap" desc = "A handy little spring-loaded trap for catching pesty rodents." icon_state = "mousetrap" - origin_tech = "{'combat':1}" + origin_tech = @'{"combat":1}' material = /decl/material/solid/organic/wood matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) var/armed = 0 @@ -42,7 +42,7 @@ SET_STATUS_MAX(H, STAT_STUN, 3) if(affecting) affecting.take_external_damage(1, 0) - H.updatehealth() + else if(ismouse(target)) var/mob/living/simple_animal/mouse/M = target visible_message("SPLAT!") @@ -95,8 +95,8 @@ /obj/item/assembly/mousetrap/hitby(atom/A) - ..() - if(armed) + . = ..() + if(. && armed) visible_message(SPAN_WARNING("\The [src] is triggered by \the [A].")) triggered(A) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 8eb8469b3eb..0436515fc73 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,7 +2,7 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -78,7 +78,7 @@ /obj/item/assembly/prox_sensor/dropped() . = ..() - addtimer(CALLBACK(src, .proc/sense), 0) + addtimer(CALLBACK(src, PROC_REF(sense)), 0) /obj/item/assembly/prox_sensor/toggle_scan() if(!secured) return 0 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index ea40cc935ff..6a40a7f3b1c 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -3,7 +3,7 @@ desc = "Used to remotely activate devices." icon_state = "signaller" item_state = "signaler" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index b5fec4b4cc4..9c4fee0d1fc 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,7 +2,7 @@ name = "timer" desc = "Used to time things. Works well with contraptions which have to count down. Tick tock." icon_state = "timer" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 20dc2332956..a291267414c 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -2,7 +2,7 @@ name = "voice analyzer" desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." icon_state = "voice" - origin_tech = "{'magnets':1}" + origin_tech = @'{"magnets":1}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm index 58dfa4c0781..b0a6efc42b8 100644 --- a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm +++ b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm @@ -68,7 +68,7 @@ if (phase == "processing")//processing CO2 in tank if (inner_tank.gas[/decl/material/gas/carbon_dioxide]) - var/co2_intake = clamp(0, inner_tank.gas[/decl/material/gas/carbon_dioxide], power_setting*wait/10) + var/co2_intake = clamp(inner_tank.gas[/decl/material/gas/carbon_dioxide], 0, power_setting*wait/10) last_flow_rate = co2_intake inner_tank.adjust_gas(/decl/material/gas/carbon_dioxide, -co2_intake, 1) var/datum/gas_mixture/new_oxygen = new @@ -144,5 +144,5 @@ update_icon() return 1 if(href_list["setPower"]) //setting power to 0 is redundant anyways - power_setting = clamp(1, text2num(href_list["setPower"]), 5) + power_setting = clamp(text2num(href_list["setPower"]), 1, 5) return 1 diff --git a/code/modules/atmospherics/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/components/binary_devices/passive_gate.dm index ec6e5526b77..dfa4e594c86 100644 --- a/code/modules/atmospherics/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/components/binary_devices/passive_gate.dm @@ -157,7 +157,7 @@ target_pressure = max_pressure_setting if ("set") var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure Control",src.target_pressure) as num - src.target_pressure = clamp(0, new_pressure, max_pressure_setting) + src.target_pressure = clamp(new_pressure, 0, max_pressure_setting) switch(href_list["set_flow_rate"]) if ("min") @@ -166,7 +166,7 @@ set_flow_rate = air1.volume if ("set") var/new_flow_rate = input(usr,"Enter new flow rate limit (0-[air1.volume]kPa)","Flow Rate Control",src.set_flow_rate) as num - src.set_flow_rate = clamp(0, new_flow_rate, air1.volume) + src.set_flow_rate = clamp(new_flow_rate, 0, air1.volume) usr.set_machine(src) //Is this even needed with NanoUI? src.update_icon() @@ -253,7 +253,7 @@ /decl/public_access/public_method/toggle_unlocked name = "toggle valve" desc = "Open or close the valve." - call_proc = /obj/machinery/atmospherics/binary/passive_gate/proc/toggle_unlocked + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/binary/passive_gate, toggle_unlocked) /decl/stock_part_preset/radio/event_transmitter/passive_gate frequency = PUMP_FREQ diff --git a/code/modules/atmospherics/components/binary_devices/pump.dm b/code/modules/atmospherics/components/binary_devices/pump.dm index 6867e4c8a74..a0b05c844cd 100644 --- a/code/modules/atmospherics/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/components/binary_devices/pump.dm @@ -157,7 +157,7 @@ Thus, the two variables affect pump operation are set in New(): . = 1 if ("set") var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = clamp(0, new_pressure, max_pressure_setting) + src.target_pressure = clamp(new_pressure, 0, max_pressure_setting) . = 1 if(.) diff --git a/code/modules/atmospherics/components/tvalve.dm b/code/modules/atmospherics/components/tvalve.dm index 8f9ab481aba..326dfddbe77 100644 --- a/code/modules/atmospherics/components/tvalve.dm +++ b/code/modules/atmospherics/components/tvalve.dm @@ -136,17 +136,17 @@ /decl/public_access/public_method/tvalve_go_straight name = "valve go straight" desc = "Sets the valve to send output straight." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_straight + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, go_straight) /decl/public_access/public_method/tvalve_go_side name = "valve go side" desc = "Redirects output to the side." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_to_side + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, go_to_side) /decl/public_access/public_method/tvalve_toggle name = "valve toggle" desc = "Toggles the output direction." - call_proc = /obj/machinery/atmospherics/tvalve/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, toggle) /decl/stock_part_preset/radio/receiver/tvalve frequency = FUEL_FREQ diff --git a/code/modules/atmospherics/components/unary/cold_sink.dm b/code/modules/atmospherics/components/unary/cold_sink.dm index d13f13b6d56..59cd07c1182 100644 --- a/code/modules/atmospherics/components/unary/cold_sink.dm +++ b/code/modules/atmospherics/components/unary/cold_sink.dm @@ -81,7 +81,7 @@ else set_temperature = max(set_temperature + amount, 0) if(href_list["setPower"]) //setting power to 0 is redundant anyways - var/new_setting = clamp(0, text2num(href_list["setPower"]), 100) + var/new_setting = clamp(text2num(href_list["setPower"]), 0, 100) set_power_level(new_setting) add_fingerprint(usr) diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm index b1b6229f27d..a476f6fc520 100644 --- a/code/modules/atmospherics/components/unary/heat_source.dm +++ b/code/modules/atmospherics/components/unary/heat_source.dm @@ -99,7 +99,7 @@ else set_temperature = max(set_temperature + amount, 0) if(href_list["setPower"]) //setting power to 0 is redundant anyways - var/new_setting = clamp(0, text2num(href_list["setPower"]), 100) + var/new_setting = clamp(text2num(href_list["setPower"]), 0, 100) set_power_level(new_setting) add_fingerprint(usr) diff --git a/code/modules/atmospherics/components/unary/outlet_injector.dm b/code/modules/atmospherics/components/unary/outlet_injector.dm index 9aa2f389619..625b604601e 100644 --- a/code/modules/atmospherics/components/unary/outlet_injector.dm +++ b/code/modules/atmospherics/components/unary/outlet_injector.dm @@ -155,7 +155,7 @@ /decl/public_access/public_method/inject name = "inject" desc = "Injects gas into its environment." - call_proc = /obj/machinery/atmospherics/unary/outlet_injector/proc/inject + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/outlet_injector, inject) /decl/stock_part_preset/radio/event_transmitter/outlet_injector frequency = ATMOS_TANK_FREQ diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm index e48651533c6..b17daeed5c9 100644 --- a/code/modules/atmospherics/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/components/unary/vent_pump.dm @@ -1,12 +1,5 @@ #define DEFAULT_PRESSURE_DELTA 10000 -#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE -#define INTERNAL_PRESSURE_BOUND 0 -#define PRESSURE_CHECKS 1 - -#define PRESSURE_CHECK_EXTERNAL 1 -#define PRESSURE_CHECK_INTERNAL 2 - /obj/machinery/atmospherics/unary/vent_pump icon = 'icons/atmos/vent_pump.dmi' icon_state = "map_vent" @@ -24,18 +17,19 @@ var/hibernate = 0 //Do we even process? var/pump_direction = 1 //0 = siphoning, 1 = releasing - var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND + var/external_pressure_bound = VENT_DEFAULT_EXTERNAL_PRESSURE_PUMP + var/internal_pressure_bound = VENT_DEFAULT_INTERNAL_PRESSURE_PUMP - var/pressure_checks = PRESSURE_CHECKS + var/pressure_checks = VENT_PRESSURE_CHECK_FLAG_DEFAULT //1: Do not pass external_pressure_bound //2: Do not pass internal_pressure_bound //3: Do not pass either // Used when handling incoming radio signals requesting default settings - var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND - var/pressure_checks_default = PRESSURE_CHECKS + //#TODO: Those default pressures might be better handled on a per-map/area/controller/something else basis? + var/external_pressure_bound_default = VENT_DEFAULT_EXTERNAL_PRESSURE_PUMP + var/internal_pressure_bound_default = VENT_DEFAULT_INTERNAL_PRESSURE_PUMP + var/pressure_checks_default = VENT_PRESSURE_CHECK_FLAG_DEFAULT var/welded = 0 // Added for aliens -- TLE @@ -83,7 +77,7 @@ var/area/A = get_area(src) if(A && !A.air_vent_names[id_tag]) update_name() - events_repository.register(/decl/observ/name_set, A, src, .proc/change_area_name) + events_repository.register(/decl/observ/name_set, A, src, PROC_REF(change_area_name)) . = ..() air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP update_sound() @@ -121,31 +115,37 @@ use_power = POWER_USE_IDLE icon_state = "map_vent_out" +/obj/machinery/atmospherics/unary/vent_pump/cabled + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + /obj/item/stock_parts/radio/receiver/buildable, + /obj/item/stock_parts/radio/transmitter/on_event/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/vent_pump = 1, + /decl/stock_part_preset/radio/event_transmitter/vent_pump = 1, + /decl/stock_part_preset/terminal_connect/offset_dir = 1, + ) + /obj/machinery/atmospherics/unary/vent_pump/siphon - pump_direction = 0 + pump_direction = 0 + pressure_checks = VENT_PRESSURE_CHECK_FLAG_INTERNAL + pressure_checks_default = VENT_PRESSURE_CHECK_FLAG_INTERNAL + external_pressure_bound = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + external_pressure_bound_default = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + internal_pressure_bound = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON + internal_pressure_bound_default = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON /obj/machinery/atmospherics/unary/vent_pump/siphon/on use_power = POWER_USE_IDLE icon_state = "map_vent_in" /obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos - use_power = POWER_USE_IDLE - icon_state = "map_vent_in" - external_pressure_bound = 0 - external_pressure_bound_default = 0 - internal_pressure_bound = MAX_PUMP_PRESSURE - internal_pressure_bound_default = MAX_PUMP_PRESSURE - pressure_checks = PRESSURE_CHECK_INTERNAL - pressure_checks_default = PRESSURE_CHECK_INTERNAL + controlled = FALSE /obj/machinery/atmospherics/unary/vent_pump/siphon/atmos - use_power = POWER_USE_OFF - external_pressure_bound = 0 - external_pressure_bound_default = 0 - internal_pressure_bound = MAX_PUMP_PRESSURE - internal_pressure_bound_default = MAX_PUMP_PRESSURE - pressure_checks = PRESSURE_CHECK_INTERNAL - pressure_checks_default = PRESSURE_CHECK_INTERNAL + controlled = FALSE /obj/machinery/atmospherics/unary/vent_pump/Destroy() QDEL_NULL(sound_token) @@ -157,11 +157,11 @@ if(old_area == new_area) return if(old_area) - events_repository.unregister(/decl/observ/name_set, old_area, src, .proc/change_area_name) + events_repository.unregister(/decl/observ/name_set, old_area, src, PROC_REF(change_area_name)) old_area.air_vent_info -= id_tag old_area.air_vent_names -= id_tag if(new_area && new_area == get_area(src)) - events_repository.register(/decl/observ/name_set, new_area, src, .proc/change_area_name) + events_repository.register(/decl/observ/name_set, new_area, src, PROC_REF(change_area_name)) if(!new_area.air_vent_names[id_tag]) var/new_name = "[new_area.proper_name] Vent Pump #[new_area.air_vent_names.len+1]" new_area.air_vent_names[id_tag] = new_name @@ -180,6 +180,20 @@ . = ..() air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/siphon + controlled = FALSE + pump_direction = 0 + pressure_checks = VENT_PRESSURE_CHECK_FLAG_INTERNAL + pressure_checks_default = VENT_PRESSURE_CHECK_FLAG_INTERNAL + external_pressure_bound = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + external_pressure_bound_default = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + internal_pressure_bound = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON + internal_pressure_bound_default = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/siphon/on + use_power = POWER_USE_IDLE + icon_state = "map_vent_in" + /obj/machinery/atmospherics/unary/vent_pump/on_update_icon() var/visible_directions = build_device_underlays() var/vent_prefix = visible_directions ? "" : "h" // h prefix for hidden == no visible directions @@ -231,16 +245,13 @@ power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) else //external -> internal var/datum/pipe_network/network = network_in_dir(dir) - transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, network?.volume) - - //limit flow rate from turfs - transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here + transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, network?.volume) / environment.group_multiplier // limit it to just one turf's worth of gas per tick power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) else //If we're in an area that is fucking ideal, and we don't have to do anything, chances are we won't next tick either so why redo these calculations? //JESUS FUCK. THERE ARE LITERALLY 250 OF YOU MOTHERFUCKERS ON ZLEVEL ONE AND YOU DO THIS SHIT EVERY TICK WHEN VERY OFTEN THERE IS NO REASON TO - if(pump_direction && pressure_checks == PRESSURE_CHECK_EXTERNAL) //99% of all vents + if(pump_direction && pressure_checks == VENT_PRESSURE_CHECK_FLAG_EXTERNAL) //99% of all vents hibernate = world.time + (rand(100,200)) if(transfer_moles > 0) @@ -256,14 +267,14 @@ var/environment_pressure = environment.return_pressure() if(pump_direction) //internal -> external - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + if(pressure_checks & VENT_PRESSURE_CHECK_FLAG_EXTERNAL) pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) + if(pressure_checks & VENT_PRESSURE_CHECK_FLAG_INTERNAL) pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here else //external -> internal - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) + if(pressure_checks & VENT_PRESSURE_CHECK_FLAG_EXTERNAL) pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) + if(pressure_checks & VENT_PRESSURE_CHECK_FLAG_INTERNAL) pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here return pressure_delta @@ -272,7 +283,7 @@ return controlled ? ..() : "NONE" /obj/machinery/atmospherics/unary/vent_pump/proc/purge() - pressure_checks &= ~PRESSURE_CHECK_EXTERNAL + pressure_checks &= ~VENT_PRESSURE_CHECK_FLAG_EXTERNAL pump_direction = 0 queue_icon_update() @@ -451,12 +462,12 @@ /decl/public_access/public_method/purge_pump name = "activate purge mode" desc = "Activates purge mode, overriding pressure checks and removing air." - call_proc = /obj/machinery/atmospherics/unary/vent_pump/proc/purge + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_pump, purge) /decl/public_access/public_method/toggle_pump_dir name = "toggle pump direction" desc = "Toggles the pump's direction, from release to siphon or vice versa." - call_proc = /obj/machinery/atmospherics/unary/vent_pump/proc/toggle_pump_dir + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_pump, toggle_pump_dir) /decl/stock_part_preset/radio/event_transmitter/vent_pump frequency = PUMP_FREQ @@ -596,10 +607,3 @@ QDEL_NULL(sound_token) #undef DEFAULT_PRESSURE_DELTA - -#undef EXTERNAL_PRESSURE_BOUND -#undef INTERNAL_PRESSURE_BOUND -#undef PRESSURE_CHECKS - -#undef PRESSURE_CHECK_EXTERNAL -#undef PRESSURE_CHECK_INTERNAL \ No newline at end of file diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm index d8b3fe5c654..7d253eac226 100644 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm @@ -77,11 +77,11 @@ if(old_area == new_area) return if(old_area) - events_repository.unregister(/decl/observ/name_set, old_area, src, .proc/change_area_name) + events_repository.unregister(/decl/observ/name_set, old_area, src, PROC_REF(change_area_name)) old_area.air_scrub_info -= id_tag old_area.air_scrub_names -= id_tag if(new_area && new_area == get_area(src)) - events_repository.register(/decl/observ/name_set, new_area, src, .proc/change_area_name) + events_repository.register(/decl/observ/name_set, new_area, src, PROC_REF(change_area_name)) if(!new_area.air_scrub_names[id_tag]) var/new_name = "[new_area.proper_name] Vent Scrubber #[new_area.air_scrub_names.len+1]" new_area.air_scrub_names[id_tag] = new_name @@ -93,10 +93,10 @@ icon_state = "weld" else if((stat & NOPOWER) || !use_power) icon_state = "off" - else if(scrubbing == SCRUBBER_EXCHANGE) - icon_state = "on" - else + else if(scrubbing == SCRUBBER_SIPHON) icon_state = "in" + else + icon_state = "on" build_device_underlays() @@ -317,13 +317,13 @@ /decl/public_access/public_method/toggle_panic_siphon name = "toggle panic siphon" desc = "Toggles the panic siphon function." - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/toggle_panic + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_scrubber, toggle_panic) /decl/public_access/public_method/set_scrub_gas name = "set filter gases" desc = "Given a list of gases, sets whether the gas is being scrubbed to the value of the gas in the list." forward_args = TRUE - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/set_scrub_gas + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_scrubber, set_scrub_gas) /decl/stock_part_preset/radio/event_transmitter/vent_scrubber frequency = PUMP_FREQ diff --git a/code/modules/atmospherics/components/valve.dm b/code/modules/atmospherics/components/valve.dm index 72dcf25b096..ccf203513a2 100644 --- a/code/modules/atmospherics/components/valve.dm +++ b/code/modules/atmospherics/components/valve.dm @@ -136,17 +136,17 @@ /decl/public_access/public_method/open_valve name = "open valve" desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/open + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, open) /decl/public_access/public_method/close_valve name = "open valve" desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/close + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, close) /decl/public_access/public_method/toggle_valve name = "toggle valve" desc = "Toggles whether the valve is open or closed." - call_proc = /obj/machinery/atmospherics/valve/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, toggle) /obj/machinery/atmospherics/valve/digital // can be controlled by AI name = "digital valve" diff --git a/code/modules/atmospherics/datum_pipeline.dm b/code/modules/atmospherics/datum_pipeline.dm index b2b1578623f..3223d3251c1 100644 --- a/code/modules/atmospherics/datum_pipeline.dm +++ b/code/modules/atmospherics/datum_pipeline.dm @@ -32,8 +32,9 @@ if(air?.volume || liquid?.total_volume) temporarily_store_fluids() - QDEL_NULL(air) - QDEL_NULL(liquid) + + QDEL_NULL(air) + QDEL_NULL(liquid) for(var/obj/machinery/atmospherics/pipe/P in members) P.parent = null @@ -51,17 +52,20 @@ for(var/obj/machinery/atmospherics/pipe/member in members) if(!member.check_pressure(pressure)) members.Remove(member) + + // Safety check. + if(member.parent == src) + member.parent = null break //Only delete 1 pipe per process /datum/pipeline/proc/temporarily_store_fluids() //Update individual gas_mixtures by volume ratio var/liquid_transfer_per_pipe = min(REAGENT_UNITS_PER_PIPE, (liquid && length(members)) ? (liquid.total_volume / length(members)) : 0) - if(!liquid_transfer_per_pipe && !liquid_transfer_per_pipe) + if(!air?.volume && !liquid_transfer_per_pipe) return for(var/obj/machinery/atmospherics/pipe/member in members) - if(air?.volume) member.air_temporary = new member.air_temporary.copy_from(air) @@ -69,7 +73,7 @@ member.air_temporary.multiply(member.volume / air.volume) if(liquid_transfer_per_pipe) - member.liquid_temporary = new(REAGENT_UNITS_PER_PIPE, src) + member.liquid_temporary = new(REAGENT_UNITS_PER_PIPE, member) liquid.trans_to_holder(member.liquid_temporary, liquid_transfer_per_pipe) /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) @@ -255,7 +259,7 @@ air.temperature -= heat/total_heat_capacity // Only increase the temperature of the target if it's simulated. - if(istype(target, /turf/simulated)) + if(target.simulated) target.temperature += heat/target.heat_capacity if(network) @@ -286,6 +290,6 @@ // Previously, the temperature would enter equilibrium at 26C or 294K. // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. // It currently should stabilise at 129.6K or -143.6C - . -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (surface_temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 + . -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (surface_temperature ** 4 - COSMIC_RADIATION_TEMPERATURE ** 4) #undef REAGENT_UNITS_PER_PIPE \ No newline at end of file diff --git a/code/modules/atmospherics/he_pipes.dm b/code/modules/atmospherics/he_pipes.dm index 8df55801602..14355d9471b 100644 --- a/code/modules/atmospherics/he_pipes.dm +++ b/code/modules/atmospherics/he_pipes.dm @@ -25,7 +25,7 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize() . = ..() color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default. - add_filter("glow",1, list(type="drop_shadow", x = 0, y = 0, offset = 0, size = 4)) + add_filter("glow",1, list(type = "drop_shadow", x = 0, y = 0, offset = 0, size = 4)) /obj/machinery/atmospherics/pipe/simple/heat_exchanging/set_dir(new_dir) . = ..() @@ -55,8 +55,11 @@ if(!parent) ..() else + var/turf/turf = loc var/datum/gas_mixture/pipe_air = return_air() - if(istype(loc, /turf/simulated) || istype(loc, /turf/exterior)) + if(istype(loc, /turf/space)) + parent.radiate_heat_to_space(surface, 1) + else if(istype(turf) && turf.simulated) var/turf/pipe_turf = loc var/environment_temperature = 0 if(pipe_turf.blocks_air) @@ -66,8 +69,6 @@ environment_temperature = environment.temperature if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) parent.temperature_interact(pipe_turf, volume, thermal_conductivity) - else if(istype(loc, /turf/space)) - parent.radiate_heat_to_space(surface, 1) if(buckled_mob) var/hc = pipe_air.heat_capacity() @@ -79,7 +80,7 @@ var/mob/living/carbon/human/H = buckled_mob if(istype(H) && H.species) - heat_limit = H.get_temperature_threshold(HEAT_LEVEL_3) + heat_limit = H.get_mob_temperature_threshold(HEAT_LEVEL_3) if(pipe_air.temperature > heat_limit + 1) buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, BP_CHEST, used_weapon = "Excessive Heat") diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm index 4143075e3aa..c91ff4053c9 100644 --- a/code/modules/atmospherics/pipes.dm +++ b/code/modules/atmospherics/pipes.dm @@ -36,7 +36,8 @@ return -1 /obj/machinery/atmospherics/pipe/Initialize() - if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall)) + var/turf/T = get_turf(src) + if(T?.is_wall()) level = LEVEL_BELOW_PLATING alpha = 255 // for mapping hidden pipes . = ..() @@ -190,19 +191,20 @@ set_leaking(missing) /obj/machinery/atmospherics/pipe/hide(var/i) - if(istype(loc, /turf/simulated)) + var/turf/turf = loc + if(istype(turf) && turf.simulated) set_invisibility(i ? 101 : 0) update_icon() /obj/machinery/atmospherics/pipe/Process() - if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle + if(!parent || !parent.air) //This should cut back on the overhead calling build_network thousands of times per cycle ..() - else if(parent.air?.compare(loc?.return_air())) + else if(parent.air?.compare(loc.return_air())) update_sound(0) . = PROCESS_KILL else if(leaking) parent.mingle_with_turf(loc, volume) - var/air = parent.air && parent.air.return_pressure() + var/air = parent.air?.return_pressure() if(!sound_token && air) update_sound(1) else if(sound_token && !air) @@ -242,6 +244,7 @@ //TODO: leak to turf, doing pfshhhhh if(prob(5)) burst() + else return 1 else return 1 diff --git a/code/modules/augment/active.dm b/code/modules/augment/active.dm index c50b461f282..ff063b65cc4 100644 --- a/code/modules/augment/active.dm +++ b/code/modules/augment/active.dm @@ -1,28 +1,19 @@ //Toggleable embedded module /obj/item/organ/internal/augment/active action_button_name = "Activate" - var/obj/item/organ/external/limb /obj/item/organ/internal/augment/active/proc/activate() - -//Give verbs on install -/obj/item/organ/internal/augment/active/onInstall() - limb = GET_EXTERNAL_ORGAN(owner, parent_organ) - -/obj/item/organ/internal/augment/active/onRemove() - limb = null + return /obj/item/organ/internal/augment/active/proc/can_activate() - if(!owner || owner.incapacitated() || !is_usable()) + if(!owner || owner.incapacitated() || !is_usable() || (status & ORGAN_CUT_AWAY)) to_chat(owner, SPAN_WARNING("You can't do that now!")) return FALSE - return TRUE - /obj/item/organ/internal/augment/active/attack_self() . = ..() - if(.) + if(. && can_activate()) activate() //Need to change icon? @@ -30,9 +21,4 @@ . = ..() if(.) action.button_icon_state = icon_state - if(action.button) action.button.UpdateIcon() - - -/obj/item/organ/internal/augment/active/Destroy() - limb = null - . = ..() + action.button?.update_icon() diff --git a/code/modules/augment/active/armblades.dm b/code/modules/augment/active/armblades.dm index da2c30fc8a4..d0df629cdc1 100644 --- a/code/modules/augment/active/armblades.dm +++ b/code/modules/augment/active/armblades.dm @@ -9,7 +9,7 @@ sharp = 1 edge = 1 attack_verb = list("stabbed", "sliced", "cut") - origin_tech = "{'materials':1,'engineering':1,'combat':2}" + origin_tech = @'{"materials":1,"engineering":1,"combat":2}' material = /decl/material/solid/metal/steel /obj/item/armblade/can_take_wear_damage() @@ -21,19 +21,19 @@ action_button_name = "Deploy blade" icon_state = "armblade" allowed_organs = list(BP_AUGMENT_R_ARM, BP_AUGMENT_L_ARM) - holding_type = /obj/item/armblade + holding = /obj/item/armblade //Limited to robolimbs augment_flags = AUGMENTATION_MECHANIC material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - + /obj/item/armblade/claws icon_state = "wolverine" name = "combat claws" desc = "These do not grow back." base_parry_chance = 40 material_force_multiplier = 0.3 - origin_tech = "{'materials':2,'engineering':2,'combat':3}" + origin_tech = @'{"materials":2,"engineering":2,"combat":3}' //Alternate look /obj/item/organ/internal/augment/active/simple/wolverine @@ -42,7 +42,7 @@ action_button_name = "Deploy claws" icon_state = "wolverine" allowed_organs = list(BP_AUGMENT_R_HAND, BP_AUGMENT_L_HAND) - holding_type = /obj/item/armblade/claws + holding = /obj/item/armblade/claws //Limited to robolimbs augment_flags = AUGMENTATION_MECHANIC material = /decl/material/solid/metal/steel diff --git a/code/modules/augment/active/circuit.dm b/code/modules/augment/active/circuit.dm index b8ea39ab9e0..6fe25252764 100644 --- a/code/modules/augment/active/circuit.dm +++ b/code/modules/augment/active/circuit.dm @@ -3,12 +3,12 @@ action_button_name = "Activate Circuit" icon_state = "circuit" allowed_organs = list(BP_AUGMENT_R_ARM, BP_AUGMENT_L_ARM) - holding_type = null //We must get the holding item externally + holding = null //We must get the holding item externally //Limited to robolimbs augment_flags = AUGMENTATION_MECHANIC desc = "A DIY modular assembly. Circuitry not included" material = /decl/material/solid/metal/steel - origin_tech = "{'materials':1,'magnets':1,'engineering':1,'programming':2}" + origin_tech = @'{"materials":1,"magnets":1,"engineering":1,"programming":2}' /obj/item/organ/internal/augment/active/simple/circuit/attackby(obj/item/W, mob/user) if(IS_CROWBAR(W)) diff --git a/code/modules/augment/active/cyberbrain.dm b/code/modules/augment/active/cyberbrain.dm index 70abdcb0494..f8fc92ecca1 100644 --- a/code/modules/augment/active/cyberbrain.dm +++ b/code/modules/augment/active/cyberbrain.dm @@ -4,7 +4,7 @@ icon_state = "cyberbrain" allowed_organs = list(BP_AUGMENT_HEAD) augment_flags = AUGMENTATION_MECHANIC - origin_tech = "{'materials':2,'magnets':3,'engineering':3,'biotech':2,'programming':4}" + origin_tech = @'{"materials":2,"magnets":3,"engineering":3,"biotech":2,"programming":4}' var/list/default_hardware = list( /obj/item/stock_parts/computer/processor_unit/small, @@ -60,7 +60,7 @@ return return ..() -/obj/item/organ/internal/augment/active/cyberbrain/handle_mouse_drop(atom/over, mob/user) +/obj/item/organ/internal/augment/active/cyberbrain/handle_mouse_drop(atom/over, mob/user, params) if(!istype(over, /obj/screen)) attack_self(user) return TRUE diff --git a/code/modules/augment/active/polytool.dm b/code/modules/augment/active/polytool.dm index d9592be10b2..2d32e3e2797 100644 --- a/code/modules/augment/active/polytool.dm +++ b/code/modules/augment/active/polytool.dm @@ -4,7 +4,7 @@ icon_state = "multitool" allowed_organs = list(BP_AUGMENT_R_HAND, BP_AUGMENT_L_HAND) augment_flags = AUGMENTATION_MECHANIC - origin_tech = "{'materials':2,'magnets':2,'engineering':4}" + origin_tech = @'{"materials":2,"magnets":2,"engineering":4}' var/list/items = list() var/list/paths = list() //We may lose them @@ -14,30 +14,38 @@ var/obj/item/I = new path (src) I.canremove = FALSE items += I + events_repository.register(/decl/observ/moved, I, src, /obj/item/organ/internal/augment/active/polytool/proc/check_holding) + events_repository.register(/decl/observ/destroyed, I, src, /obj/item/organ/internal/augment/active/polytool/proc/check_holding) + events_repository.register(/decl/observ/item_unequipped, I, src, /obj/item/organ/internal/augment/active/polytool/proc/check_holding) + /obj/item/organ/internal/augment/active/polytool/Destroy() QDEL_NULL_LIST(items) . = ..() -/obj/item/organ/internal/augment/active/polytool/proc/holding_dropped(var/obj/item/I) - - //Stop caring - events_repository.unregister(/decl/observ/item_unequipped, I, src) - - if(I.loc != src) //something went wrong and is no longer attached/ it broke - I.canremove = 1 +/obj/item/organ/internal/augment/active/polytool/proc/check_holding() + for(var/obj/item/I in items) + if(QDELETED(I) || (I.loc != src && (!owner || I.loc != owner))) + I.canremove = TRUE + events_repository.unregister(/decl/observ/moved, I, src) + events_repository.unregister(/decl/observ/destroyed, I, src) + events_repository.unregister(/decl/observ/item_unequipped, I, src) + items -= I /obj/item/organ/internal/augment/active/polytool/activate() if(!can_activate()) return - var/slot = null - if(limb.organ_tag in list(BP_L_ARM, BP_L_HAND)) + var/slot = null + if(parent_organ in list(BP_L_ARM, BP_L_HAND)) slot = BP_L_HAND - else if(limb.organ_tag in list(BP_R_ARM, BP_R_HAND)) + else if(parent_organ in list(BP_R_ARM, BP_R_HAND)) slot = BP_R_HAND - var/obj/I = owner.get_equipped_item(slot) + if(!slot) + return + var/obj/item/organ/external/limb = owner?.get_organ(parent_organ) + var/obj/I = owner.get_equipped_item(slot) if(I) if(is_type_in_list(I,paths) && !(I.type in items)) //We don't want several of same but you can replace parts whenever if(!owner.drop_from_inventory(I, src)) @@ -46,8 +54,8 @@ items += I var/decl/pronouns/G = owner.get_pronouns() owner.visible_message( - SPAN_NOTICE("\The [owner] retracts [G.his] [I.name] into [G.his] [limb.name]."), - SPAN_NOTICE("You retract your [I.name] into your [limb.name].") + SPAN_NOTICE("\The [owner] retracts [G.his] [I.name] into [G.his] [limb ? limb.name : "limb"]."), + SPAN_NOTICE("You retract your [I.name] into your [limb ? limb.name : "limb"].") ) else to_chat(owner, SPAN_WARNING("You must drop \the [I] before the polytool can extend.")) @@ -58,9 +66,8 @@ if(owner.equip_to_slot_if_possible(item, slot)) items -= item //Keep track of it, make sure it returns - events_repository.register(/decl/observ/item_unequipped, item, src, /obj/item/organ/internal/augment/active/simple/proc/holding_dropped ) var/decl/pronouns/G = owner.get_pronouns() owner.visible_message( - SPAN_NOTICE("\The [owner] extends [G.his] [item.name] from [G.his] [limb.name]."), - SPAN_NOTICE("You extend your [item.name] from your [limb.name].") + SPAN_NOTICE("\The [owner] extends [G.his] [item.name] from [G.his] [limb ? limb.name : "limb"]."), + SPAN_NOTICE("You extend your [item.name] from your [limb ? limb.name : "limb"].") ) \ No newline at end of file diff --git a/code/modules/augment/active/tool/engineering.dm b/code/modules/augment/active/tool/engineering.dm index f733602225e..14e3c94b56e 100644 --- a/code/modules/augment/active/tool/engineering.dm +++ b/code/modules/augment/active/tool/engineering.dm @@ -1,5 +1,3 @@ - - /obj/item/organ/internal/augment/active/polytool/engineer name = "engineering toolset" action_button_name = "Deploy Engineering Tool" @@ -14,7 +12,7 @@ /obj/item/wirecutters/finger, /obj/item/multitool/finger ) - origin_tech = "{'materials':4,'magnets':3,'engineering':3}" + origin_tech = @'{"materials":4,"magnets":3,"engineering":3}' /obj/item/weldingtool/finger name = "digital welder" diff --git a/code/modules/augment/active/tool/surgical.dm b/code/modules/augment/active/tool/surgical.dm index ba7b03dd20f..808d0c5c24c 100644 --- a/code/modules/augment/active/tool/surgical.dm +++ b/code/modules/augment/active/tool/surgical.dm @@ -16,4 +16,4 @@ /obj/item/scalpel, /obj/item/surgicaldrill ) - origin_tech = "{'materials':4,'magnets':3,'engineering':3}" + origin_tech = @'{"materials":4,"magnets":3,"engineering":3}' diff --git a/code/modules/augment/augment.dm b/code/modules/augment/augment.dm index 5b017593016..8f63e1b6c25 100644 --- a/code/modules/augment/augment.dm +++ b/code/modules/augment/augment.dm @@ -6,7 +6,7 @@ organ_properties = ORGAN_PROP_PROSTHETIC default_action_type = /datum/action/item_action/organ/augment material = /decl/material/solid/metal/steel - origin_tech = "{'materials':1,'magnets':2,'engineering':2,'biotech':1}" + origin_tech = @'{"materials":1,"magnets":2,"engineering":2,"biotech":1}' var/descriptor = "" var/known = TRUE @@ -18,21 +18,6 @@ organ_tag = pick(allowed_organs) update_parent_organ() -//General expectation is onInstall and onRemoved are overwritten to add effects to augmentee -/obj/item/organ/internal/augment/on_add_effects() - if(..() && istype(owner)) - onInstall() - -/obj/item/organ/internal/augment/on_remove_effects(mob/living/last_owner) - onRemove() - . = ..() - -//#FIXME: merge those with removal/install functions -/obj/item/organ/internal/augment/proc/onInstall() - return -/obj/item/organ/internal/augment/proc/onRemove() - return - /obj/item/organ/internal/augment/attackby(obj/item/W, mob/user) if(IS_SCREWDRIVER(W) && allowed_organs.len > 1) //Here we can adjust location for implants that allow multiple slots @@ -42,6 +27,11 @@ return ..() +/obj/item/organ/internal/augment/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) + . = ..() + parent_organ = affected.organ_tag + update_parent_organ() + /obj/item/organ/internal/augment/proc/update_parent_organ() //This tries to match a parent organ to an augment slot //This is intended to match the possible positions to a parent organ @@ -71,7 +61,6 @@ parent_organ = BP_CHEST descriptor = "chest." - /obj/item/organ/internal/augment/examine(mob/user, distance) . = ..() if(distance <= 1) diff --git a/code/modules/augment/helping_hands.dm b/code/modules/augment/helping_hands.dm new file mode 100644 index 00000000000..38b3be5033d --- /dev/null +++ b/code/modules/augment/helping_hands.dm @@ -0,0 +1,49 @@ +/obj/item/helpinghands + name = "back-mounted arms" + desc = "A pair of arms with an included harness worn on the back, controlled by a noninvasive spinal prosthesis." + icon = 'icons/mecha/mech_parts_held.dmi' + icon_state = "light_arms" + material = /decl/material/solid/metal/steel + slot_flags = SLOT_BACK + var/list/slot_types = list( + /datum/inventory_slot/gripper/left_hand/no_organ/helping, + /datum/inventory_slot/gripper/right_hand/no_organ/helping + ) + +/obj/item/helpinghands/proc/add_hands(mob/user) + for (var/gripper_type in slot_types) + user.add_held_item_slot(new gripper_type) + +/obj/item/helpinghands/proc/remove_hands(mob/user) + for (var/datum/inventory_slot/gripper_type as anything in slot_types) + user.remove_held_item_slot(initial(gripper_type.slot_id)) + +/obj/item/helpinghands/equipped(mob/user, slot) + . = ..() + if(!user) + return + switch(slot) + if(slot_back_str) + add_hands(user) + else + remove_hands(user) + +/obj/item/helpinghands/dropped(mob/user) + . = ..() + if(user) + remove_hands(user) + +/datum/inventory_slot/gripper/left_hand/no_organ + requires_organ_tag = null +/datum/inventory_slot/gripper/right_hand/no_organ + requires_organ_tag = null + +/datum/inventory_slot/gripper/left_hand/no_organ/helping + slot_id = "helping_hand_l" + hand_overlay = BP_L_HAND + hand_sort_priority = 4 + +/datum/inventory_slot/gripper/right_hand/no_organ/helping + slot_id = "helping_hand_r" + hand_overlay = BP_R_HAND + hand_sort_priority = 5 \ No newline at end of file diff --git a/code/modules/augment/passive/armor.dm b/code/modules/augment/passive/armor.dm index 1c5d2c4e751..738e6c278c7 100644 --- a/code/modules/augment/passive/armor.dm +++ b/code/modules/augment/passive/armor.dm @@ -5,6 +5,6 @@ desc = "A flexible composite mesh designed to prevent tearing and puncturing of underlying tissue." material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':4,'engineering':2,'biotech':3}" + origin_tech = @'{"materials":4,"engineering":2,"biotech":3}' var/brute_mult = 0.8 var/burn_mult = 1 \ No newline at end of file diff --git a/code/modules/augment/passive/boost.dm b/code/modules/augment/passive/boost.dm index c06f8c7ce6f..dad34c1554e 100644 --- a/code/modules/augment/passive/boost.dm +++ b/code/modules/augment/passive/boost.dm @@ -4,7 +4,7 @@ /obj/item/organ/internal/augment/boost icon_state = "booster" allowed_organs = list(BP_AUGMENT_HEAD) - origin_tech = "{'materials':2,'magnets':2,'engineering':2,'biotech':3}" + origin_tech = @'{"materials":2,"magnets":2,"engineering":2,"biotech":3}' var/list/buffs = list()//Which abilities does this impact? var/list/injury_debuffs = list()//If organ is damaged, should we reduce anything? var/buffpath = /datum/skill_buff/augment //if you use something else it should be a subtype or it will runtime @@ -16,16 +16,17 @@ . = ..() id = "[/obj/item/organ/internal/augment/boost]_[sequential_id(/obj/item/organ/internal/augment/boost)]" - -/obj/item/organ/internal/augment/boost/onInstall() - if(buffs.len) +/obj/item/organ/internal/augment/boost/on_add_effects() + . = ..() + if(istype(owner) && buffs.len) var/datum/skill_buff/augment/A A = owner.buff_skill(buffs, 0, buffpath) if(A && istype(A)) active = 1 A.id = id -/obj/item/organ/internal/augment/boost/onRemove() +/obj/item/organ/internal/augment/boost/on_remove_effects(mob/living/last_owner) + . = ..() debuffing = 0 if(!active) return diff --git a/code/modules/augment/passive/boost/muscle.dm b/code/modules/augment/passive/boost/muscle.dm index faab18be427..b9c9bd7f57e 100644 --- a/code/modules/augment/passive/boost/muscle.dm +++ b/code/modules/augment/passive/boost/muscle.dm @@ -10,12 +10,13 @@ desc = "Nanofiber tendons powered by an array of actuators to help the wearer mantain speed even while encumbered. You may want to install these in pairs to see a result." material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':4,'magnets':3,'biotech':3}" - + origin_tech = @'{"materials":4,"magnets":3,"biotech":3}' var/obj/item/organ/internal/augment/boost/muscle/other //we need two for these -/obj/item/organ/internal/augment/boost/muscle/onInstall() - +/obj/item/organ/internal/augment/boost/muscle/on_add_effects() + . = ..() + if(!owner) + return //1.st Determine where we are and who we should be asking for guidance //we must be second to activate buff if(organ_tag == BP_AUGMENT_L_LEG) @@ -37,7 +38,8 @@ other.active = TRUE active = TRUE -/obj/item/organ/internal/augment/boost/muscle/onRemove() +/obj/item/organ/internal/augment/boost/muscle/on_remove_effects(mob/living/last_owner) + . = ..() if(!active) return var/list/B = owner.fetch_buffs_of_type(buffpath, 0) @@ -45,7 +47,6 @@ if(D.id == id) D.remove() break - if(other) other.active = FALSE other.other = null diff --git a/code/modules/augment/passive/boost/reflex.dm b/code/modules/augment/passive/boost/reflex.dm index 1644f490514..d249075c429 100644 --- a/code/modules/augment/passive/boost/reflex.dm +++ b/code/modules/augment/passive/boost/reflex.dm @@ -8,7 +8,7 @@ /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':2,'magnets':3,'programming':5,'biotech':2}" + origin_tech = @'{"materials":2,"magnets":3,"programming":5,"biotech":2}' /obj/item/organ/internal/augment/boost/reflex/buff() if((. = ..())) diff --git a/code/modules/augment/passive/boost/shooting.dm b/code/modules/augment/passive/boost/shooting.dm index bbc92ec6107..d29a67a21be 100644 --- a/code/modules/augment/passive/boost/shooting.dm +++ b/code/modules/augment/passive/boost/shooting.dm @@ -8,7 +8,7 @@ /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':4,'magnets':3,'biotech':3}" + origin_tech = @'{"materials":4,"magnets":3,"biotech":3}' /obj/item/organ/internal/augment/boost/reflex/buff() if((. = ..())) diff --git a/code/modules/augment/passive/nanoaura.dm b/code/modules/augment/passive/nanoaura.dm index 662be61f8eb..fe04739aaaf 100644 --- a/code/modules/augment/passive/nanoaura.dm +++ b/code/modules/augment/passive/nanoaura.dm @@ -20,18 +20,19 @@ /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':4,'magnets':4,'engineering':5,'biotech':3}" + origin_tech = @'{"materials":4,"magnets":4,"engineering":5,"biotech":3}' var/obj/aura/nanoaura/aura = null var/charges = 4 +/obj/item/organ/internal/augment/active/nanounit/on_add_effects() + . = ..() + if(owner) + aura = new /obj/aura/nanoaura(owner, src) -/obj/item/organ/internal/augment/active/nanounit/onInstall() - aura = new /obj/aura/nanoaura(owner, src) - -/obj/item/organ/internal/augment/active/nanounit/onRemove() +/obj/item/organ/internal/augment/active/nanounit/on_remove_effects(mob/living/last_owner) QDEL_NULL(aura) - ..() + . = ..() /obj/item/organ/internal/augment/active/nanounit/proc/catastrophic_failure() playsound(owner,'sound/mecha/internaldmgalarm.ogg',25,1) diff --git a/code/modules/augment/simple.dm b/code/modules/augment/simple.dm index 20283eedbe7..3f936907c64 100644 --- a/code/modules/augment/simple.dm +++ b/code/modules/augment/simple.dm @@ -1,71 +1,85 @@ //Simple toggleabse module. Just put holding in hands or get it back /obj/item/organ/internal/augment/active/simple origin_tech = null - var/obj/item/holding = null - var/holding_type = null + var/retracting + var/obj/item/holding /obj/item/organ/internal/augment/active/simple/Initialize() . = ..() - if(holding_type) - holding = new holding_type(src) - holding.canremove = 0 - if(!origin_tech) - origin_tech = holding.get_origin_tech() + if(!ispath(holding)) + return + holding = new holding(src) + holding.canremove = FALSE + if(!origin_tech) + origin_tech = holding.get_origin_tech() + events_repository.register(/decl/observ/moved, holding, src, /obj/item/organ/internal/augment/active/simple/proc/check_holding) + events_repository.register(/decl/observ/destroyed, holding, src, /obj/item/organ/internal/augment/active/simple/proc/check_holding) + events_repository.register(/decl/observ/item_unequipped, holding, src, /obj/item/organ/internal/augment/active/simple/proc/check_holding) -/obj/item/organ/internal/augment/active/simple/Destroy() - if(holding) - events_repository.unregister(/decl/observ/item_unequipped, holding, src) - if(holding.loc == src) - QDEL_NULL(holding) - return ..() +/obj/item/organ/internal/augment/active/simple/proc/check_holding() + if(!holding) + return -/obj/item/organ/internal/augment/active/simple/proc/holding_dropped() + if(QDELETED(holding)) + holding.canremove = TRUE + events_repository.unregister(/decl/observ/moved, holding, src) + events_repository.unregister(/decl/observ/destroyed, holding, src) + events_repository.unregister(/decl/observ/item_unequipped, holding, src) + holding = null + return - //Stop caring - events_repository.unregister(/decl/observ/item_unequipped, holding, src) + if(holding.loc != src && (!owner || holding.loc != owner)) + retract() - if(holding.loc != src) //something went wrong and is no longer attached/ it broke - holding.canremove = 1 - holding = null //We no longer hold this, you will have to get a replacement module or fix it somehow +/obj/item/organ/internal/augment/active/simple/Destroy() + QDEL_NULL(holding) + return ..() /obj/item/organ/internal/augment/active/simple/proc/deploy() - var/slot = null - if(limb.organ_tag in list(BP_L_ARM, BP_L_HAND)) + if(parent_organ in list(BP_L_ARM, BP_L_HAND)) slot = BP_L_HAND - else if(limb.organ_tag in list(BP_R_ARM, BP_R_HAND)) + else if(parent_organ in list(BP_R_ARM, BP_R_HAND)) slot = BP_R_HAND - if(owner.equip_to_slot_if_possible(holding, slot)) - events_repository.register(/decl/observ/item_unequipped, holding, src, /obj/item/organ/internal/augment/active/simple/proc/holding_dropped) + if(slot && owner.equip_to_slot_if_possible(holding, slot)) + var/obj/item/organ/external/limb = owner?.get_organ(parent_organ) var/decl/pronouns/G = owner.get_pronouns() owner.visible_message( - SPAN_NOTICE("\The [owner] extends [G.his] [holding.name] from [G.his] [limb.name]."), - SPAN_NOTICE("You extend your [holding.name] from your [limb.name].") + SPAN_NOTICE("\The [owner] extends [G.his] [holding.name] from [G.his] [limb ? limb.name : "limb"]."), + SPAN_NOTICE("You extend your [holding.name] from your [limb ? limb.name : "limb"].") ) /obj/item/organ/internal/augment/active/simple/proc/retract() - if(holding.loc == src) + if(holding.loc == src || retracting) return - - if(ismob(holding.loc) && holding.loc == owner) - var/mob/M = holding.loc - if(!M.drop_from_inventory(holding, src)) + retracting = TRUE + holding.canremove = TRUE + if(owner && holding.loc == owner) + if(!owner.drop_from_inventory(holding, src)) to_chat(owner, SPAN_WARNING("\The [holding.name] fails to retract.")) + holding.canremove = FALSE + retracting = FALSE return - var/decl/pronouns/G = M.get_pronouns() - M.visible_message( - SPAN_NOTICE("\The [M] retracts [G.his] [holding.name] into [G.his] [limb.name]."), - SPAN_NOTICE("You retract your [holding.name] into [G.his] [limb.name].") + var/obj/item/organ/external/limb = owner?.get_organ(parent_organ) + var/decl/pronouns/G = owner.get_pronouns() + owner.visible_message( + SPAN_NOTICE("\The [owner] retracts [G.his] [holding.name] into [G.his] [limb ? limb.name : "limb"]."), + SPAN_NOTICE("You retract your [holding.name] into [G.his] [limb ? limb.name : "limb"].") ) + else if(ismob(holding.loc)) + var/mob/M = holding.loc + M.drop_from_inventory(holding) + holding.forceMove(src) + holding.canremove = FALSE + retracting = FALSE /obj/item/organ/internal/augment/active/simple/activate() if(!can_activate()) return - - if(holding.loc == src) //item not in hands + if(holding.loc == src) deploy() - else //retract item + else retract() /obj/item/organ/internal/augment/active/simple/can_activate() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 95d2001f73d..694da534eb9 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -41,6 +41,7 @@ return INITIALIZE_HINT_QDEL /obj/abstract/landmark/corpse/proc/randomize_appearance(var/mob/living/carbon/human/M, species_choice) + if((spawn_flags & CORPSE_SPAWNER_RANDOM_GENDER)) if(species_choice in genders_per_species) M.set_gender(pick(genders_per_species[species_choice]), TRUE) @@ -55,38 +56,44 @@ if((spawn_flags & CORPSE_SPAWNER_RANDOM_SKIN_COLOR)) if(species_choice in skin_colors_per_species) - M.change_skin_color(pick(skin_colors_per_species[species_choice])) + M.set_skin_colour(pick(skin_colors_per_species[species_choice])) else M.randomize_skin_color() + var/decl/species/species_decl = get_species_by_key(species_choice) + var/decl/bodytype/root_bodytype = M.get_bodytype() + var/update_hair = FALSE if((spawn_flags & CORPSE_SPAWNER_RANDOM_HAIR_COLOR)) if(species_choice in hair_colors_per_species) - M.change_hair_color(pick(hair_colors_per_species[species_choice])) + SET_HAIR_COLOUR(M, pick(hair_colors_per_species[species_choice]), TRUE) else - M.randomize_hair_color() - M.change_facial_hair_color(M.hair_colour) - + SET_HAIR_COLOUR(M, get_random_colour(), TRUE) + SET_FACIAL_HAIR_COLOUR(M, GET_HAIR_COLOUR(M), TRUE) + update_hair = TRUE if((spawn_flags & CORPSE_SPAWNER_RANDOM_HAIR_STYLE)) if(species_choice in hair_styles_per_species) - M.change_hair(pick(hair_styles_per_species[species_choice])) + SET_HAIR_STYLE(M, pick(hair_styles_per_species[species_choice]), TRUE) else - M.randomize_hair_style() - + SET_HAIR_STYLE(M, pick(species_decl.get_available_accessory_types(root_bodytype, SAC_HAIR)), TRUE) + update_hair = TRUE if((spawn_flags & CORPSE_SPAWNER_RANDOM_FACIAL_STYLE)) if(species_choice in facial_styles_per_species) - M.change_facial_hair(pick(facial_styles_per_species[species_choice])) + SET_FACIAL_HAIR_STYLE(M, pick(facial_styles_per_species[species_choice]), TRUE) else - M.randomize_facial_hair_style() + SET_FACIAL_HAIR_STYLE(M, pick(species_decl.get_available_accessory_types(root_bodytype, SAC_FACIAL_HAIR)), TRUE) + update_hair = TRUE + if(update_hair) + M.update_hair() if((spawn_flags & CORPSE_SPAWNER_RANDOM_EYE_COLOR)) if(species_choice in eye_colors_per_species) - M.change_eye_color(pick(eye_colors_per_species[species_choice])) + M.set_eye_colour(pick(eye_colors_per_species[species_choice])) else M.randomize_eye_color() var/decl/cultural_info/culture = M.get_cultural_value(TAG_CULTURE) if(culture && CORPSE_SPAWNER_RANDOM_NAME & spawn_flags) - M.SetName(M, culture.get_random_name(M.gender)) + M.SetName(culture.get_random_name(M.gender)) else M.SetName(name) M.real_name = M.name diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index b416212991d..67ed0c183cd 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -35,7 +35,7 @@ /obj/machinery/gateway/centerstation/Initialize() update_icon() - wait = world.time + config.gateway_delay //+ thirty minutes default + wait = world.time + get_config_value(/decl/config/num/gateway_delay) //+ thirty minutes default awaygate = locate(/obj/machinery/gateway/centeraway) . = ..() diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index d2ebad954c9..4b88e2c9e93 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -1,5 +1,5 @@ /obj/effect/spawner/lootdrop - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x2" var/lootcount = 1 //how many items will be spawned var/lootdoubles = 0 //if the same item can be spawned twice diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index 1922422afa3..040fc97d28b 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -12,8 +12,8 @@ layer = BLOB_SHIELD_LAYER - var/maxHealth = 30 - var/health + max_health = 30 + var/regen_rate = 5 var/brute_resist = 4.3 var/fire_resist = 0.8 @@ -28,7 +28,6 @@ /obj/effect/blob/Initialize() . = ..() - health = maxHealth update_icon() START_PROCESSING(SSblob, src) @@ -46,7 +45,7 @@ take_damage(rand(140 - (severity * 40), 140 - (severity * 20)) / brute_resist) /obj/effect/blob/on_update_icon() - if(health > maxHealth / 2) + if(current_health > get_max_health() / 2) icon_state = "blob" else icon_state = "blob_damaged" @@ -58,15 +57,15 @@ attempt_attack(global.alldirs) /obj/effect/blob/proc/take_damage(var/damage) - health -= damage - if(health < 0) + current_health -= damage + if(current_health < 0) playsound(loc, 'sound/effects/splat.ogg', 50, 1) qdel(src) else update_icon() /obj/effect/blob/proc/regen() - health = min(health + regen_rate, maxHealth) + current_health = min(current_health + regen_rate, get_max_health()) update_icon() /obj/effect/blob/proc/expand(var/turf/T) @@ -120,7 +119,7 @@ if(!(locate(/obj/effect/blob/core) in range(T, 2)) && prob(secondary_core_growth_chance)) new/obj/effect/blob/core/secondary(T) else - new expandType(T, min(health, 30)) + new expandType(T, min(current_health, 30)) /obj/effect/blob/proc/do_pulse(var/forceLeft, var/list/dirs) set waitfor = FALSE @@ -129,7 +128,7 @@ var/turf/T = get_step(src, pushDir) var/obj/effect/blob/B = (locate() in T) if(!B) - if(prob(health)) + if(prob(current_health)) expand(T) return if(forceLeft) @@ -196,7 +195,7 @@ name = "master nucleus" desc = "A massive, fragile nucleus guarded by a shield of thick tendrils." icon_state = "blob_core" - maxHealth = 450 + max_health = 450 damage_min = 30 damage_max = 40 expandType = /obj/effect/blob/shield @@ -210,7 +209,7 @@ var/times_to_pulse = 0 /obj/effect/blob/core/proc/get_health_percent() - return ((health / maxHealth) * 100) + return ((current_health / get_max_health()) * 100) /* the master core becomes more vulnereable to damage as it weakens, @@ -255,7 +254,7 @@ regen() will cover update_icon() for this proc visible_message(SPAN_NOTICE("The [src]'s tendril shield seems to have fully reformed."), 3) reported_low_damage = FALSE -// Rough icon state changes that reflect the core's health +// Rough icon state changes that reflect the core's current_health /obj/effect/blob/core/on_update_icon() switch(get_health_percent()) if(66 to INFINITY) @@ -282,7 +281,7 @@ regen() will cover update_icon() for this proc name = "auxiliary nucleus" desc = "An interwoven mass of tendrils. A glowing nucleus pulses at its center." icon_state = "blob_node" - maxHealth = 125 + max_health = 125 regen_rate = 1 damage_min = 15 damage_max = 20 @@ -294,13 +293,13 @@ regen() will cover update_icon() for this proc return /obj/effect/blob/core/secondary/on_update_icon() - icon_state = (health / maxHealth >= 0.5) ? "blob_node" : "blob_factory" + icon_state = (current_health / get_max_health() >= 0.5) ? "blob_node" : "blob_factory" /obj/effect/blob/shield name = "shielding mass" desc = "A pulsating mass of interwoven tendrils. These seem particularly robust, but not quite as active." icon_state = "blob_idle" - maxHealth = 120 + max_health = 120 damage_min = 13 damage_max = 25 attack_freq = 7 @@ -318,9 +317,10 @@ regen() will cover update_icon() for this proc return ..() /obj/effect/blob/shield/on_update_icon() - if(health > maxHealth * 2 / 3) + var/current_max_health = get_max_health() + if(current_health > current_max_health * 2 / 3) icon_state = "blob_idle" - else if(health > maxHealth / 3) + else if(current_health > current_max_health / 3) icon_state = "blob" else icon_state = "blob_damaged" @@ -331,7 +331,7 @@ regen() will cover update_icon() for this proc /obj/effect/blob/ravaging name = "ravaging mass" desc = "A mass of interwoven tendrils. They thrash around haphazardly at anything in reach." - maxHealth = 20 + max_health = 20 damage_min = 27 damage_max = 36 attack_freq = 3 @@ -364,13 +364,13 @@ regen() will cover update_icon() for this proc desc = "An incredibly dense, yet flexible, tendril, removed from an asteroclast." force = 10 color = COLOR_BRONZE - origin_tech = "{'materials':2}" + origin_tech = @'{"materials":2}' if("fire") desc = "A tendril removed from an asteroclast. It's hot to the touch." damtype = BURN force = 15 color = COLOR_AMBER - origin_tech = "{'powerstorage':2}" + origin_tech = @'{"powerstorage":2}' /obj/item/blob_tendril/afterattack(obj/O, mob/user, proximity) if(!proximity) @@ -389,11 +389,11 @@ regen() will cover update_icon() for this proc icon_state = "core_sample" item_state = "blob_core" w_class = ITEM_SIZE_NORMAL - origin_tech = "{'materials':4,'wormholes':5,'biotech':7}" + origin_tech = @'{"materials":4,"wormholes":5,"biotech":7}' is_tendril = FALSE /obj/item/blob_tendril/core/aux name = "asteroclast auxiliary nucleus sample" desc = "A sample taken from an asteroclast's auxiliary nucleus." icon_state = "core_sample_2" - origin_tech = "{'materials':2,'wormholes':3,'biotech':4}" + origin_tech = @'{"materials":2,"wormholes":3,"biotech":4}' diff --git a/code/modules/blood/blood.dm b/code/modules/blood/blood.dm new file mode 100644 index 00000000000..895b6e04760 --- /dev/null +++ b/code/modules/blood/blood.dm @@ -0,0 +1,76 @@ +/proc/blood_splatter(atom/target, atom/source, var/large = FALSE, var/spray_dir) + + var/obj/effect/decal/cleanable/blood/splatter + var/decal_type = /obj/effect/decal/cleanable/blood/splatter + var/turf/bleed_turf = get_turf(target) + + // Are we dripping or splattering? + var/list/drips + // Only a certain number of drips (or one large splatter) can be on a given turf. + for(var/obj/effect/decal/cleanable/blood/drip/drop in bleed_turf) + LAZYDISTINCTADD(drips, drop.drips) + qdel(drop) + if(!large && LAZYLEN(drips) < 3) + decal_type = /obj/effect/decal/cleanable/blood/drip + + // Find a blood decal or create a new one. + if(bleed_turf) + var/list/existing = filter_list(bleed_turf.contents, decal_type) + if(length(existing) > 3) + splatter = pick(existing) + if(!splatter) + splatter = new decal_type(bleed_turf) + + if(QDELETED(splatter)) + return + + var/obj/effect/decal/cleanable/blood/drip/drop = splatter + if(istype(drop) && LAZYLEN(drips) && !large) + drop.drips |= drips + drop.update_icon() + + // If there's no data to copy, call it quits here. + var/blood_data + var/blood_type + if(isliving(source)) + var/mob/living/donor = source + blood_data = donor.get_blood_data() + blood_type = donor.get_blood_type() + else if(isatom(source)) + var/atom/donor = source + blood_data = REAGENT_DATA(donor.reagents, /decl/material/liquid/blood) + if(!islist(blood_data)) + return splatter + + if(spray_dir) + splatter.icon_state = "squirt" + splatter.set_dir(spray_dir) + + // Update blood information. + if(LAZYACCESS(blood_data, "blood_DNA")) + LAZYSET(splatter.blood_data, blood_data["blood_DNA"], blood_data) + splatter.blood_DNA = list() + if(LAZYACCESS(blood_data, "blood_type")) + splatter.blood_DNA[blood_data["blood_DNA"]] = blood_data["blood_type"] + else + splatter.blood_DNA[blood_data["blood_DNA"]] = "O+" + var/datum/extension/forensic_evidence/forensics = get_or_create_extension(splatter, /datum/extension/forensic_evidence) + forensics.add_data(/datum/forensics/blood_dna, blood_data["blood_DNA"]) + + if(!blood_type && LAZYACCESS(blood_data, "blood_type")) + blood_type = LAZYACCESS(blood_data, "blood_type") + + // Update appearance. + if(blood_type) + var/decl/blood_type/blood_type_decl = get_blood_type_by_name(blood_type) + splatter.name = blood_type_decl.splatter_name + splatter.desc = blood_type_decl.splatter_desc + splatter.basecolor = blood_type_decl.splatter_colour + + if(LAZYACCESS(blood_data, "blood_color")) + splatter.basecolor = blood_data["blood_color"] + + splatter.update_icon() + splatter.fluorescent = FALSE + splatter.set_invisibility(INVISIBILITY_NONE) + return splatter diff --git a/code/modules/organs/blood_types.dm b/code/modules/blood/blood_types.dm similarity index 65% rename from code/modules/organs/blood_types.dm rename to code/modules/blood/blood_types.dm index ea2eaf49625..3bf5fc6f467 100644 --- a/code/modules/organs/blood_types.dm +++ b/code/modules/blood/blood_types.dm @@ -59,62 +59,3 @@ var/global/list/antigen_comparison_cache = list() . = FALSE break global.antigen_comparison_cache[type][other_blood_type.type] = . - -/decl/blood_type/ominus - name = "O-" - random_weighting = 4 - -/decl/blood_type/oplus - name = "O+" - antigens = list("Rh") - random_weighting = 36 - -/decl/blood_type/aminus - name = "A-" - antigens = list("A") - random_weighting = 3 - -/decl/blood_type/aplus - name = "A+" - antigens = list("A", "Rh") - random_weighting = 28 - -/decl/blood_type/bminus - name = "B-" - antigens = list("B") - -/decl/blood_type/bplus - name = "B+" - antigens = list("B", "Rh") - random_weighting = 20 - -/decl/blood_type/abminus - name = "AB-" - antigens = list("A", "B") - -/decl/blood_type/abplus - name = "AB+" - antigens = list("A", "B", "Rh") - random_weighting = 5 - -// Insect blood. -/decl/blood_type/hemolymph - - name = "hemolymph" - antigen_category = "insect" - - splatter_name = "ichor" - splatter_desc = "A smear of insect ichor. It smells acrid." - splatter_colour = "#525252" - -// Robo-blood. -/decl/blood_type/coolant - - name = "coolant" - antigen_category = "machine" - - splatter_name = "coolant" - splatter_desc = "A smear of machine coolant. It looks discoloured." - splatter_colour = SYNTH_BLOOD_COLOR - - transfusion_fail_reagent = /decl/material/liquid/acid diff --git a/code/modules/blood/blood_types_subtypes.dm b/code/modules/blood/blood_types_subtypes.dm new file mode 100644 index 00000000000..4104ce2a360 --- /dev/null +++ b/code/modules/blood/blood_types_subtypes.dm @@ -0,0 +1,58 @@ +/decl/blood_type/ominus + name = "O-" + random_weighting = 4 + +/decl/blood_type/oplus + name = "O+" + antigens = list("Rh") + random_weighting = 36 + +/decl/blood_type/aminus + name = "A-" + antigens = list("A") + random_weighting = 3 + +/decl/blood_type/aplus + name = "A+" + antigens = list("A", "Rh") + random_weighting = 28 + +/decl/blood_type/bminus + name = "B-" + antigens = list("B") + +/decl/blood_type/bplus + name = "B+" + antigens = list("B", "Rh") + random_weighting = 20 + +/decl/blood_type/abminus + name = "AB-" + antigens = list("A", "B") + +/decl/blood_type/abplus + name = "AB+" + antigens = list("A", "B", "Rh") + random_weighting = 5 + +// Insect blood. +/decl/blood_type/hemolymph + + name = "hemolymph" + antigen_category = "insect" + + splatter_name = "ichor" + splatter_desc = "A smear of insect ichor. It smells acrid." + splatter_colour = "#525252" + +// Robo-blood. +/decl/blood_type/coolant + + name = "coolant" + antigen_category = "machine" + + splatter_name = "coolant" + splatter_desc = "A smear of machine coolant. It looks discoloured." + splatter_colour = SYNTH_BLOOD_COLOR + + transfusion_fail_reagent = /decl/material/liquid/acid diff --git a/code/modules/brain_interface/_brain_interface.dm b/code/modules/brain_interface/_brain_interface.dm new file mode 100644 index 00000000000..0b6a4173fd8 --- /dev/null +++ b/code/modules/brain_interface/_brain_interface.dm @@ -0,0 +1,155 @@ +// Many values copied from brains. Not inheriting to avoid redundant brainmob creation. +/obj/item/organ/internal/brain_interface + name = "neural interface" + desc = "A complex life support shell that interfaces between a brain and an electronic device." + organ_tag = BP_BRAIN + parent_organ = BP_HEAD + origin_tech = @'{"biotech":3}' + icon = 'icons/obj/items/brain_interface_organic.dmi' + icon_state = ICON_STATE_WORLD + req_access = list(access_robotics) + material = /decl/material/solid/metal/steel + matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) + w_class = ITEM_SIZE_SMALL + throwforce = 1 + throw_speed = 3 + throw_range = 5 + attack_verb = list("attacked", "slapped", "whacked") + relative_size = 85 + damage_reduction = 0 + scale_max_damage_to_species_health = FALSE + transfer_brainmob_with_organ = TRUE + var/locked = FALSE + var/obj/item/organ/internal/brain/holding_brain = /obj/item/organ/internal/brain + +SAVED_VAR(/obj/item/organ/internal/brain_interface, locked) +SAVED_VAR(/obj/item/organ/internal/brain_interface, holding_brain) + +/obj/item/organ/internal/brain_interface/is_preserved() + return TRUE + +/obj/item/organ/internal/brain_interface/empty + holding_brain = null + +/obj/item/organ/internal/brain_interface/Initialize() + set_bodytype(/decl/bodytype/prosthetic/basic_human) + if(ispath(holding_brain)) + holding_brain = new holding_brain(src) + if(get_radio()) + verbs |= /obj/item/organ/internal/brain_interface/proc/toggle_radio_listening + verbs |= /obj/item/organ/internal/brain_interface/proc/toggle_radio_broadcasting + . = ..() + update_icon() + +/obj/item/organ/internal/brain_interface/get_brainmob(var/create_if_missing = FALSE) + return holding_brain?.get_brainmob(create_if_missing) + +/obj/item/organ/internal/brain_interface/on_update_icon() + icon_state = get_world_inventory_state() + if(holding_brain) + var/mob/living/brainmob = get_brainmob() + if(!brainmob || brainmob.stat == DEAD) + icon_state = "[icon_state]-dead" + else + icon_state = "[icon_state]-full" + +/obj/item/organ/internal/brain_interface/examine(mob/user, distance) + . = ..() + if(distance <= 1) + var/mob/living/brain/brainmob = get_brainmob() + if(istype(brainmob)) + if(brainmob.emp_damage) + to_chat(user, SPAN_WARNING("The neural interface socket is damaged.")) + else + to_chat(user, SPAN_NOTICE("It is undamaged.")) + +/obj/item/organ/internal/brain_interface/attackby(var/obj/item/O, var/mob/user) + + if(istype(O, /obj/item/stack/nanopaste)) + var/mob/living/brain/brainmob = get_brainmob() + if(!istype(brainmob) || !brainmob.emp_damage) + to_chat(user, SPAN_WARNING("\The [src] has no damage to repair.")) + return TRUE + var/obj/item/stack/nanopaste/pasta = O + pasta.use(1) + to_chat(user, SPAN_NOTICE("You repair some of the damage to \the [src]'s electronics with the nanopaste.")) + brainmob.emp_damage = max(brainmob.emp_damage - rand(5,10), 0) + return TRUE + + if(istype(O, /obj/item/organ/internal/brain)) + + if(holding_brain) + to_chat(user, SPAN_WARNING("\The [src] already has a brain in it.")) + return TRUE + + var/obj/item/organ/internal/brain/inserting_brain = O + if(BP_IS_PROSTHETIC(inserting_brain)) + to_chat(user, SPAN_WARNING("You don't need to put a robotic brain into an interface.")) + return TRUE + + if(inserting_brain.damage >= inserting_brain.max_damage) + to_chat(user, SPAN_WARNING("That brain is well and truly dead.")) + return TRUE + + if(!inserting_brain.get_brainmob() || !inserting_brain.can_use_brain_interface) + to_chat(user, SPAN_WARNING("\The [inserting_brain] is completely useless.")) + return TRUE + + if(user.try_unequip(O, src)) + user.visible_message(SPAN_NOTICE("\The [user] sticks \the [inserting_brain] into \the [src].")) + SetName("[initial(name)] (\the [inserting_brain])") + holding_brain = inserting_brain + update_icon() + locked = TRUE + SSstatistics.add_field("cyborg_mmis_filled",1) + return TRUE + + if(istype(O,/obj/item/card/id) || istype(O,/obj/item/modular_computer)) + if(allowed(user)) + locked = !locked + to_chat(user, SPAN_NOTICE("You [locked ? "lock" : "unlock"] \the [src].")) + else + to_chat(user, SPAN_WARNING("Access denied.")) + return TRUE + + if(holding_brain) + return holding_brain.attackby(O, user) + + . = ..() + +/obj/item/organ/internal/brain_interface/relaymove(var/mob/user, var/direction) + if(user.incapacitated()) + return + var/obj/item/rig/rig = src.get_rig() + if(rig) + rig.forced_move(direction, user) + +/obj/item/organ/internal/brain_interface/Destroy() + if(isrobot(loc)) + var/mob/living/silicon/robot/borg = loc + if(borg.central_processor == src) + borg.central_processor = null + if(holding_brain) + if(!QDELETED(holding_brain)) + qdel(holding_brain) + holding_brain = null + for(var/obj/item/thing in contents) + qdel(thing) + . = ..() + +/obj/item/organ/internal/brain_interface/attack_self(mob/user) + + if(locked) + to_chat(user, SPAN_WARNING("You upend \the [src], but the case is locked shut.")) + return TRUE + + if(!holding_brain) + to_chat(user, SPAN_WARNING("You upend \the [src], but there's nothing in it.")) + return TRUE + + to_chat(user, SPAN_NOTICE("You upend \the [src], spilling \the [holding_brain] onto \the [get_turf(src)].")) + + holding_brain.dropInto(user.loc) + holding_brain = null + update_icon() + SetName(initial(name)) diff --git a/code/modules/brain_interface/interface_radio.dm b/code/modules/brain_interface/interface_radio.dm new file mode 100644 index 00000000000..2a59c0323ed --- /dev/null +++ b/code/modules/brain_interface/interface_radio.dm @@ -0,0 +1,61 @@ +/obj/item/organ/internal/brain_interface/radio_enabled + name = "radio-enabled neural interface" + desc = "A complex life support shell that interfaces between a brain and an electronic device. This one comes with a built-in radio." + origin_tech = @'{"biotech":4}' + VAR_PRIVATE/weakref/_radio + +/obj/item/organ/internal/brain_interface/radio_enabled/empty + holding_brain = null + +/obj/item/organ/internal/brain_interface/radio_enabled/get_radio() + var/obj/item/radio/radio_instance = _radio?.resolve() + if(radio_instance && (!istype(radio_instance) || QDELETED(radio_instance) || radio_instance.loc != src)) + radio_instance = null + _radio = null + return radio_instance?.get_radio() + +/obj/item/organ/internal/brain_interface/radio_enabled/Initialize() + _radio = weakref(new /obj/item/radio(src)) + . = ..() + +/obj/item/organ/internal/brain_interface/radio_enabled/Destroy() + var/obj/item/radio/radio_instance = get_radio() + if(radio_instance) + qdel(radio_instance) + _radio = null + return ..() + +/obj/item/organ/internal/brain_interface/proc/toggle_radio_broadcasting() + set name = "Toggle Broadcasting" + set desc = "Toggle broadcasting channel on or off." + set category = "Brain Interface" + set src in view(1) + set popup_menu = 0 + + if(usr.incapacitated()) + to_chat(usr, SPAN_WARNING("You must be alive and conscious to interact with \the [src].")) + return + + var/obj/item/radio/radio_instance = get_radio() + if(istype(radio_instance)) + radio_instance.broadcasting = !radio_instance.broadcasting + to_chat(usr, SPAN_NOTICE("You adjust the radio on \the [src]. It is [radio_instance.broadcasting ? "now broadcasting" : "no longer broadcasting"].")) + else + verbs -= /obj/item/organ/internal/brain_interface/proc/toggle_radio_broadcasting + +/obj/item/organ/internal/brain_interface/proc/toggle_radio_listening() + set name = "Toggle Listening" + set desc = "Toggle listening channel on or off." + set category = "Brain Interface" + set src in view(1) + + set popup_menu = 0 + if(usr.incapacitated()) + to_chat(usr, SPAN_WARNING("You must be alive and conscious to interact with \the [src].")) + return + var/obj/item/radio/radio_instance = get_radio() + if(radio_instance) + radio_instance.listening = !radio_instance.listening + to_chat(usr, SPAN_NOTICE("You adjust the radio on \the [src]. It is [radio_instance.listening ? "now receiving broadcasts" : "no longer receiving broadcasts"].")) + else + verbs -= /obj/item/organ/internal/brain_interface/proc/toggle_radio_listening diff --git a/code/modules/butchery/butchery.dm b/code/modules/butchery/butchery.dm index 50bc8e95120..b06d0ed83c5 100644 --- a/code/modules/butchery/butchery.dm +++ b/code/modules/butchery/butchery.dm @@ -104,7 +104,7 @@ to_chat(user, SPAN_WARNING("\The [occupant] is so badly mangled that removing them from \the [src] would be pointless.")) return TRUE -/obj/structure/kitchenspike/receive_mouse_drop(var/atom/dropping, var/mob/user) +/obj/structure/kitchenspike/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && ismob(dropping)) try_spike(dropping, user) diff --git a/code/modules/character_info/_character_info.dm b/code/modules/character_info/_character_info.dm new file mode 100644 index 00000000000..24101af876e --- /dev/null +++ b/code/modules/character_info/_character_info.dm @@ -0,0 +1,77 @@ +/// Main holder class for character comments - primarily user-set info, tracking vars, and a list of comment datums. +/datum/character_information + /// A user-descriptive (searchable) name for presenting comment holders. + var/name + /// Any user-specified in character info, like Teshari pack stuff or faction notes. + var/ic_info + /// Any user-specified out of character info, like content warnings. + var/ooc_info + /// Owning character name (for searches) + var/char_name + /// Owning ckey (for searches). + var/ckey + /// GUID for this ckey/save slot combo. + var/record_id + /// Linear list of comment datums for comments left on this character. + var/list/comments = list() + /// Whether or not this record is allowing comments currently + var/allow_comments = FALSE + /// Boolean to indicate if the owner of this record has read it since it was last update. + var/has_new_comments = FALSE + /// Boolean to indicate if this character will show IC and OOC info when examined. + var/show_info_on_examine = FALSE + /// The location this file was loaded from in the first place. Defaults to subsystem and ID if unset. + var/file_location + /// Static list of var keys to serialize. TODO: unit test + var/static/list/serialize_fields = list( + "record_id", + "char_name", + "ckey", + "ic_info", + "ooc_info", + "has_new_comments", + "allow_comments", + "show_info_on_examine" + ) + +/datum/character_information/New(var/list/json_input) + + // None of our serialized fields are datum references so this should in theory be safe. + for(var/key in json_input) + try + if(key in vars) + vars[key] = json_input[key] + else + log_error("Character comments attempting to deserialize invalid var '[key]'") + catch(var/exception/E) + log_error("Exception on deserializing character comments: [E]") + + // Comments are serialized to a linear list of json strings + // so we now need to deserialize them to instances. + if(length(comments)) + var/list/loading_comments = comments + comments = list() + for(var/list/comment in loading_comments) + comments += new /datum/character_comment(comment) + + // Update our display name. + update_fields() + +/datum/character_information/proc/update_fields() + name = "[char_name || "Unknown"] - [ckey || "Unknown"]" + +/datum/character_information/proc/serialize_to_json() + + . = list() + for(var/key in serialize_fields) + if(key in vars) + .[key] = vars[key] + else + log_error("Character comments attempting to serialize invalid var '[key]'") + + var/list/serialized_comments = list() + for(var/datum/character_comment/comment in comments) + serialized_comments += list(comment.serialize_to_list()) // Double wrap to avoid list merge. + .["comments"] = serialized_comments + + . = json_encode(.) diff --git a/code/modules/character_info/_comment.dm b/code/modules/character_info/_comment.dm new file mode 100644 index 00000000000..d03bbdaf769 --- /dev/null +++ b/code/modules/character_info/_comment.dm @@ -0,0 +1,100 @@ +/// Individual comment datum. Tracked by the comment holder datum. +/datum/character_comment + /// Actual text body of the comment. + var/body + /// Author character name for comment/display. + var/author_char + /// Author ckey for comment/display. + var/author_ckey + /// Combined ckey/save slot GUID for linking back to the author's comments page. + var/author_id + /// REALTIMEOFDAY value of the last edit, used for hiding old or out of date comments. + var/last_updated + /// Formatting info for displaying comments a la the old shipping manifest. + var/decl/comment_mood/main_mood + var/decl/comment_mood/border_mood + /// Static list of var keys to serialize. TODO: unit test + var/static/list/serialize_fields = list( + "body", + "author_char", + "author_ckey", + "author_id", + "last_updated" + ) + +/datum/character_comment/proc/is_stale() + return !get_config_value(/decl/config/num/hide_comments_older_than) || (REALTIMEOFDAY - last_updated) > (get_config_value(/decl/config/num/hide_comments_older_than)) + +/datum/character_comment/proc/get_comment_html(var/datum/character_information/presenting, var/mob/usr, var/row_bkg_color) + var/mood_title = main_mood.name + if(border_mood) + mood_title = "[mood_title] ([border_mood.name])" + . = list( + "
    [author_char]
    ([author_ckey])
    View
    [body]
    " + ) + if(usr) + . += "
    " + if(author_ckey == usr.ckey || check_rights(R_MOD)) + . += "Edit
    " + . += "Delete
    " + . += "Change primary mood
    " + . += "Change border mood" + else if(usr.ckey == presenting.ckey) + . += "Delete" + else + . += "Not editable." + . += "
    " + . += "
    " + if(my_comment) + dat += my_comment.get_comment_html(src, user, COMMENT_CANDYSTRIPE_ONE) + else if(viewer) + dat += "" + else + dat += "" + dat += "
    You have not left a comment for this character. Leave one now?
    You cannot leave a comment anonymously. Click here to select one of your saved characters.
    " + + dat += "

    Other Comments

    " + dat += "" + //TODO sort other_comments + if(length(other_comments)) + var/ticker = FALSE + for(var/datum/character_comment/comment in other_comments) + dat += comment.get_comment_html(src, user, ticker ? COMMENT_CANDYSTRIPE_ONE : COMMENT_CANDYSTRIPE_TWO) + ticker = !ticker + else + dat += "" + dat += "
    There are no other comments to view.
    " + + var/datum/browser/popup = new(user, "character_information", "Character Information", 750, 800) + popup.set_content(JOINTEXT(dat)) + popup.open() + +/datum/character_information/Topic(href, href_list) + . = ..() + if(. || !usr?.client || !get_config_value(/decl/config/toggle/allow_character_comments)) + return + + if(href_list["create_comment"]) + + // Have to commenting as someone, and you can't have commented already (edit your previous one nerd). + if(!usr.client.viewing_character_info_as) + return TOPIC_NOACTION + var/datum/character_information/commenting_as = usr.client.viewing_character_info_as && SScharacter_info.get_record(usr.client.viewing_character_info_as, TRUE) + if(!istype(commenting_as)) + return TOPIC_NOACTION + for(var/datum/character_comment/comment in comments) + if(comment.author_id == commenting_as.record_id) + return TOPIC_NOACTION + var/datum/character_comment/new_comment = new + new_comment.author_char = commenting_as.char_name + new_comment.author_ckey = commenting_as.ckey + new_comment.author_id = commenting_as.record_id + new_comment.body = "..." + comments += new_comment + . = TOPIC_REFRESH + + if(href_list["show_legend"]) + usr.client.show_comments_legend = text2num(href_list["show_legend"]) + . = TOPIC_REFRESH + + if(href_list["change_viewer"]) + var/list/other_slots = list() + if(usr.client.prefs) + for(var/i = 1 to length(usr.client.prefs.slot_names)) + var/slot_key = usr.client.prefs.get_slot_key(i) + if(!slot_key || !LAZYACCESS(usr.client.prefs.slot_names, slot_key)) + continue + var/datum/character_information/comments = SScharacter_info.get_record("[usr.ckey]-[slot_key]", TRUE) + if(comments) + other_slots += comments + + if(!length(other_slots)) + to_chat(usr, SPAN_WARNING("You have no character slots to select a viewer from.")) + . = TOPIC_NOACTION + else + var/datum/character_information/my_comments = input(usr, "Which character do you wish to view and comment as?", "View Character Comments") as null|anything in other_slots + if(istype(my_comments)) + usr.client.viewing_character_info_as = my_comments.record_id + . = TOPIC_REFRESH + + if(href_list["set_viewed"]) + var/datum/character_information/comments = SScharacter_info.get_record(href_list["set_viewed"]) + if(istype(comments)) + comments.display_to(usr) + . = TOPIC_HANDLED + + if(href_list["change_viewed"]) + + var/search_for = input(usr, "Please specify a name or ckey to search for.", "View Character Comments") as null|text + if(search_for) + usr.client.view_character_information(search_for) + . = TOPIC_HANDLED + + if(href_list["comment_ref"]) + var/datum/character_comment/comment = locate(href_list["comment_ref"]) + if(!istype(comment)) + return TOPIC_NOACTION + + var/has_full_rights = (comment.author_ckey == usr.ckey || check_rights(R_ADMIN)) + var/has_delete_rights = (has_full_rights || ckey == usr.ckey) + + if(has_full_rights) + + if(href_list["edit_comment"]) + var/new_body = sanitize(input(usr, "Enter or edit your comment.", "Editing Comment", comment.body) as message|null) + if(new_body && !QDELETED(comment) && (comment in comments)) + comment.body = new_body + comment.last_updated = REALTIMEOFDAY + . = TOPIC_REFRESH + + if(href_list["change_comment_mood"]) + var/changing_border_mood = href_list["change_comment_mood"] == "border" + var/list/moods = list() + if(changing_border_mood) + moods += "Clear border" + var/list/all_moods = decls_repository.get_decls_of_type(/decl/comment_mood) + for(var/mood in all_moods) + moods += all_moods[mood] + var/new_mood = input(usr, "Select a new mood for the [changing_border_mood ? "comment border" : "comment"].", "Select Mood", (changing_border_mood ? comment.border_mood : comment.main_mood) || GET_DECL(/decl/comment_mood)) as null|anything in moods + if(new_mood) + if(changing_border_mood) + if(changing_border_mood == "Clear border") + comment.border_mood = null + else + comment.border_mood = new_mood + else + comment.main_mood = new_mood + comment.last_updated = REALTIMEOFDAY + . = TOPIC_REFRESH + + if(has_delete_rights && href_list["delete_comment"]) + if(alert(usr, "Are you sure you want to delete this comment?", "Delete Message", "No", "Yes") == "Yes") + if(!QDELETED(comment) && (comment in comments)) + comments -= comment + qdel(comment) + . = TOPIC_REFRESH + + if(. == TOPIC_REFRESH) + has_new_comments = TRUE + SScharacter_info.queue_to_save(record_id) + + if(. == TOPIC_REFRESH) + display_to(usr) + +/datum/admins/proc/dump_character_info_manifest() + set name = "Dump Character Info Manifest" + set category = "Debug" + set src = usr + + var/list/dat = SScharacter_info.get_character_manifest_html() + dat += "Download as HTML" + + var/datum/browser/popup = new(usr, "character_matrix", "Character Matrix", 800, 800) + popup.set_content(JOINTEXT(dat)) + popup.open() + +#undef COMMENT_CANDYSTRIPE_ONE +#undef COMMENT_CANDYSTRIPE_TWO diff --git a/code/modules/character_info/comment_mood.dm b/code/modules/character_info/comment_mood.dm new file mode 100644 index 00000000000..4c89f76da74 --- /dev/null +++ b/code/modules/character_info/comment_mood.dm @@ -0,0 +1,143 @@ +/// Visual formatting for character info/comments. + +var/global/_comment_mood_legend +/proc/get_comment_mood_legend() + if(!global._comment_mood_legend) + var/legend_width = 500 + var/legend_per_row = 5 + var/legend_cell_width = FLOOR(legend_width/legend_per_row) + global._comment_mood_legend = list("") + var/list/all_moods = decls_repository.get_decls_of_type(/decl/comment_mood) + var/counter = 0 + for(var/mood_type in all_moods) + if(counter == 0) + global._comment_mood_legend += "" + var/decl/comment_mood/mood = all_moods[mood_type] + global._comment_mood_legend += "" + counter++ + if(counter == legend_per_row) + counter = 0 + global._comment_mood_legend += "" + if(counter != 0) + global._comment_mood_legend += "" + global._comment_mood_legend += "
    Legend
    [mood.name]
    " + global._comment_mood_legend = jointext(global._comment_mood_legend, null) + return global._comment_mood_legend + +/// Formatting data for comments. +/decl/comment_mood + abstract_type = /decl/comment_mood + decl_flags = DECL_FLAG_MANDATORY_UID + /// Descriptive name used for mood selector. + var/name + /// Colour to format the foreground (text). + var/fg_color = COLOR_BLACK + /// Colour to format the background (fill). + var/bg_color = COLOR_GRAY80 + +/decl/comment_mood/unknown + name = "Unknown or no contact" + uid = "comment_mood_unknown" + +/decl/comment_mood/good_friend + name = "Good friend" + bg_color = COLOR_LIME + uid = "comment_mood_good_friend" + +/decl/comment_mood/friend_with_benefits + name = "Friend with benefits" + bg_color = "#ea9999" + uid = "comment_mood_fwb" + + +/decl/comment_mood/crush_infatuation + name = "Crush or infatuation" + bg_color = COLOR_RED + uid = "comment_mood_crush" + +/decl/comment_mood/relationship + name = "Committed relationship" + bg_color = "#ff00ff" + uid = "comment_mood_love" + +/decl/comment_mood/old_flame + name = "Old flame" + fg_color = COLOR_WHITE + bg_color = "#a61c00" + uid = "comment_mood_old_flame" + +/decl/comment_mood/complicated + name = "It's complicated" + fg_color = COLOR_WHITE + bg_color = "#9900ff" + uid = "comment_mood_complicated" + +/decl/comment_mood/hatred + name = "Hatred" + fg_color = COLOR_WHITE + bg_color = COLOR_BLACK + uid = "comment_mood_hatred" + +/decl/comment_mood/dislike + name = "Disliked acquaintance" + fg_color = COLOR_WHITE + bg_color = "#274e13" + uid = "comment_mood_disliked_acq" + +/decl/comment_mood/concern + name = "Concern or worry" + bg_color = "#fff2cc" + uid = "comment_mood_concern" + +/decl/comment_mood/confusion + name = "Confusion or bewilderment" + bg_color = "#a64d79" + uid = "comment_mood_confusion" + +/decl/comment_mood/best_friend + name = "Best friend" + bg_color = COLOR_YELLOW + uid = "comment_mood_best_friend" + +/decl/comment_mood/vague_acquaintance + name = "Vague acquaintance" + bg_color = "#a4c2f4" + uid = "comment_mood_vague_acq" + +/decl/comment_mood/family + name = "Family" + bg_color = "#ff9900" + uid = "comment_mood_family" + +/decl/comment_mood/noted_dislike + name = "Noted dislike" + fg_color = COLOR_WHITE + bg_color = "#783f04" + uid = "comment_mood_noted_dislike" + +/decl/comment_mood/fear + name = "Fear" + fg_color = COLOR_WHITE + bg_color = "#0404e1" + uid = "comment_mood_fear" + +/decl/comment_mood/respect + name = "Respect or idolization" + bg_color = "#f9cb9c" + uid = "comment_mood_respect" + +/decl/comment_mood/rival + name = "Rival" + bg_color = COLOR_CYAN + uid = "comment_mood_rival" + +/decl/comment_mood/friendly_acquaintance + name = "Friendly acquaintance" + bg_color = "#57bb8a" + uid = "comment_mood_friendly_acq" + +/decl/comment_mood/pity + name = "Pity" + fg_color = COLOR_WHITE + bg_color = "#073763" + uid = "comment_mood_pity" diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index afdee2dc6bf..ca33fc645ec 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -248,6 +248,7 @@ var/global/template_file_name = "all_templates.json" for(var/type in subtypesof(/datum/asset) - /datum/asset/simple) var/datum/asset/A = new type() A.register() + CHECK_TICK for(var/client/C in global.clients) // This is also called in client/New, but as we haven't initialized the cache until now, and it's possible the client is already connected, we risk doing it twice. // Doing this to a client too soon after they've connected can cause issues, also the proc we call sleeps. diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 616ce0399ab..ee414201207 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -84,7 +84,7 @@ var/global/list/localhost_addresses = list( ticket.close(client_repository.get_lite_client(usr.client)) //Logs all hrefs - if(config && config.log_hrefs && global.world_href_log) + if(get_config_value(/decl/config/toggle/log_hrefs) && global.world_href_log) to_file(global.world_href_log, "[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    ") switch(href_list["_src_"]) @@ -130,14 +130,15 @@ var/global/list/localhost_addresses = list( deactivate_darkmode(clear_chat = FALSE) // Overwritten if the pref is set later. #if DM_VERSION >= 512 - var/bad_version = config.minimum_byond_version && byond_version < config.minimum_byond_version - var/bad_build = config.minimum_byond_build && byond_build < config.minimum_byond_build + var/bad_version = byond_version < get_config_value(/decl/config/num/minimum_byond_version) + var/bad_build = byond_build < get_config_value(/decl/config/num/minimum_byond_build) + if (bad_build || bad_version) to_chat(src, "You are attempting to connect with an out-of-date version of BYOND. Please update to the latest version at http://www.byond.com/ before trying again.") qdel(src) return - if("[byond_version].[byond_build]" in config.forbidden_versions) + if("[byond_version].[byond_build]" in get_config_value(/decl/config/lists/forbidden_versions)) _DB_staffwarn_record(ckey, "Tried to connect with broken and possibly exploitable BYOND build.") to_chat(src, "You are attempting to connect with a broken and possibly exploitable BYOND build. Please update to the latest version at http://www.byond.com/ before trying again.") qdel(src) @@ -145,23 +146,24 @@ var/global/list/localhost_addresses = list( #endif - var/local_connection = (config.auto_local_admin && (isnull(address) || global.localhost_addresses[address])) + var/local_connection = (get_config_value(/decl/config/toggle/on/auto_local_admin) && (isnull(address) || global.localhost_addresses[address])) if(!local_connection) - if(!config.guests_allowed && IsGuestKey(key)) + if(!get_config_value(/decl/config/toggle/guests_allowed) && IsGuestKey(key)) alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK") qdel(src) return - if(config.player_limit != 0) - if((global.clients.len >= config.player_limit) && !(ckey in admin_datums)) - alert(src,"This server is currently full and not accepting new connections.","Server Full","OK") - log_admin("[ckey] tried to join and was turned away due to the server being full (player_limit=[config.player_limit])") - qdel(src) - return + var/player_limit = get_config_value(/decl/config/num/player_limit) + if(player_limit != 0 && global.clients.len >= player_limit && !(ckey in admin_datums)) + alert(src,"This server is currently full and not accepting new connections.","Server Full","OK") + log_admin("[ckey] tried to join and was turned away due to the server being full (player_limit=[player_limit])") + qdel(src) + return // Change the way they should download resources. - if(config.resource_urls && config.resource_urls.len) - src.preload_rsc = pick(config.resource_urls) - else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal. + var/list/resource_urls = get_config_value(/decl/config/lists/resource_urls) + if(length(resource_urls)) + src.preload_rsc = pick(resource_urls) + else src.preload_rsc = 1 // If resource_urls is not set, preload like normal. global.clients += src global.ckey_directory[ckey] = src @@ -199,17 +201,19 @@ var/global/list/localhost_addresses = list( prefs.last_id = computer_id apply_fps(prefs.clientfps) - if(!isnull(config.lock_client_view_x) && !isnull(config.lock_client_view_y)) - view = "[config.lock_client_view_x]x[config.lock_client_view_y]" + var/lock_x = get_config_value(/decl/config/num/clients/lock_client_view_x) + var/lock_y = get_config_value(/decl/config/num/clients/lock_client_view_y) + if(lock_x > 0 && lock_y > 0) + view = "[lock_x]x[lock_y]" . = ..() //calls mob.Login() global.using_map.map_info(src) - if(custom_event_msg && custom_event_msg != "") + if(global.custom_event_msg) to_chat(src, "

    Custom Event

    ") to_chat(src, "

    A custom event is taking place. OOC Info:

    ") - to_chat(src, "[custom_event_msg]") + to_chat(src, "[global.custom_event_msg]") to_chat(src, "
    ") if(holder) @@ -344,10 +348,10 @@ var/global/list/localhost_addresses = list( var/sql_admin_rank = sql_sanitize_text(admin_rank) if ((player_age <= 0) && !(ckey in global.panic_bunker_bypass)) //first connection - if (config.panic_bunker && !holder && !deadmin_holder) + if (get_config_value(/decl/config/toggle/panic_bunker) && !holder && !deadmin_holder) log_adminwarn("Failed Login: [key] - New account attempting to connect during panic bunker") message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") - to_chat(src, config.panic_bunker_message) + to_chat(src, get_config_value(/decl/config/text/panic_bunker_message)) qdel(src) return 0 @@ -377,9 +381,9 @@ var/global/list/localhost_addresses = list( message_staff("\[[holder.rank]\] [key_name(src)] logged out.") if(!global.admins.len) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. send2adminirc("[key_name(src)] logged out - no more staff online.") - if(config.delist_when_no_admins && global.visibility_pref) - world.update_hub_visibility() - send2adminirc("Toggled hub visibility. The server is now invisible ([global.visibility_pref]).") + if(get_config_value(/decl/config/toggle/delist_when_no_admins) && get_config_value(/decl/config/toggle/hub_visibility)) + toggle_config_value(/decl/config/toggle/hub_visibility) + send2adminirc("Toggled hub visibility. The server is now invisible.") //checks if a client is afk //3000 frames = 5 minutes @@ -499,9 +503,9 @@ var/global/const/MAX_VIEW = 41 return // Some kind of malformed winget(), do not proceed. // Rescale as needed. - var/res_x = config.lock_client_view_x || CEILING(text2num(view_components[1]) / divisor) - var/res_y = config.lock_client_view_y || CEILING(text2num(view_components[2]) / divisor) - var/max_view = config.max_client_view_x || MAX_VIEW + var/res_x = get_config_value(/decl/config/num/clients/lock_client_view_x) || CEILING(text2num(view_components[1]) / divisor) + var/res_y = get_config_value(/decl/config/num/clients/lock_client_view_y) || CEILING(text2num(view_components[2]) / divisor) + var/max_view = get_config_value(/decl/config/num/clients/max_client_view_x) || MAX_VIEW last_view_x_dim = clamp(res_x, MIN_VIEW, max_view) last_view_y_dim = clamp(res_y, MIN_VIEW, max_view) diff --git a/code/modules/client/preference_setup/background/01_species.dm b/code/modules/client/preference_setup/background/01_species.dm index c75d436d5d8..7383f278680 100644 --- a/code/modules/client/preference_setup/background/01_species.dm +++ b/code/modules/client/preference_setup/background/01_species.dm @@ -35,7 +35,7 @@ var/list/playables = list() for(var/s in prefilter) - if(!check_rights(R_ADMIN, 0) && config.usealienwhitelist) + if(!check_rights(R_ADMIN, 0) && get_config_value(/decl/config/toggle/use_alien_whitelist)) var/decl/species/checking_species = get_species_by_key(s) if(!(checking_species.spawn_flags & SPECIES_CAN_JOIN)) continue @@ -92,12 +92,8 @@ pref.species = choice pref.sanitize_preferences() - //reset hairstyle prefs - ResetAllHair() - // reset colors var/decl/species/mob_species = pref.get_species_decl() mob_species.handle_post_species_pref_set(pref) - // reset markings var/decl/bodytype/mob_bodytype = pref.get_bodytype_decl() mob_bodytype.handle_post_bodytype_pref_set(pref) diff --git a/code/modules/client/preference_setup/background/02_culture.dm b/code/modules/client/preference_setup/background/02_culture.dm index 43b7cb5180c..d6d8f8b850b 100644 --- a/code/modules/client/preference_setup/background/02_culture.dm +++ b/code/modules/client/preference_setup/background/02_culture.dm @@ -64,7 +64,7 @@ if(check) pref.real_name = check.sanitize_cultural_name(pref.real_name, pref.species) if(!pref.real_name) - pref.real_name = check.get_random_name(preference_mob(), pref.gender) + pref.real_name = check.get_random_name(get_mannequin(pref.client?.ckey), pref.gender) /datum/category_item/player_setup_item/background/culture/load_character(datum/pref_record_reader/R) for(var/token in ALL_CULTURAL_TAGS) diff --git a/code/modules/client/preference_setup/controls/01_keybindings.dm b/code/modules/client/preference_setup/controls/01_keybindings.dm index 22a21e13a1a..32df0057281 100644 --- a/code/modules/client/preference_setup/controls/01_keybindings.dm +++ b/code/modules/client/preference_setup/controls/01_keybindings.dm @@ -38,7 +38,7 @@ notadded += kb if(length(notadded)) - addtimer(CALLBACK(src, .proc/announce_conflict, notadded), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(announce_conflict), notadded), 5 SECONDS) /datum/preferences/proc/announce_conflict(list/notadded) to_chat(client, SPAN_DANGER("There are new keybindings that have defaults that are already bound - the new keybindings will be unbound until updated. You can rebind them in Setup Character or Game Preferences.")) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 5bde5e6d9b4..359222663f1 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -78,16 +78,16 @@ var/decl/species/S = get_species_by_key(pref.species) for(var/decl/bodytype/B in S.available_bodytypes) if(B.name == pref.bodytype) - . += "[capitalize(B.name)]" + . += "[capitalize(B.pref_name)]" else - . += "[capitalize(B.name)]" + . += "[capitalize(B.pref_name)]" . += "
    Pronouns: " - for(var/decl/pronouns/G in S.available_pronouns) - if(G.name == pref.gender) - . += "[G.pronoun_string]" + for(var/decl/pronouns/pronouns in S.available_pronouns) + if(pronouns.name == pref.gender) + . += "[pronouns.pronoun_string]" else - . += "[G.pronoun_string]" + . += "[pronouns.pronoun_string]" . += "
    Spawnpoint:" var/decl/spawnpoint/spawnpoint = GET_DECL(pref.spawnpoint) @@ -112,6 +112,12 @@ if(new_name) pref.real_name = new_name + // Update comments record, if it exists. + if(pref.comments_record_id) + var/datum/character_information/comments = SScharacter_info.get_record(pref.comments_record_id, TRUE) + if(comments) + comments.char_name = pref.real_name + comments.update_fields() return TOPIC_REFRESH else to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") @@ -137,13 +143,7 @@ pref.bodytype = new_body.name if(new_body.associated_gender) // Set to default for male/female to avoid confusing people pref.gender = new_body.associated_gender - var/decl/sprite_accessory/hair/hairstyle = GET_DECL(pref.h_style) - if(!hairstyle?.accessory_is_available(null, S, new_body)) - pref.h_style = new_body.default_h_style - var/decl/sprite_accessory/hair/facialhairstyle = GET_DECL(pref.f_style) - if(!facialhairstyle?.accessory_is_available(null, S, new_body)) - pref.f_style = new_body.default_f_style - new_body.handle_post_bodytype_pref_set(pref) + new_body.handle_post_bodytype_pref_set(pref) return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["spawnpoint"]) diff --git a/code/modules/client/preference_setup/general/02_body.dm b/code/modules/client/preference_setup/general/02_body.dm index a45885a7efd..98c74643ef0 100644 --- a/code/modules/client/preference_setup/general/02_body.dm +++ b/code/modules/client/preference_setup/general/02_body.dm @@ -1,16 +1,10 @@ /datum/preferences var/species - var/blood_type //blood type - - var/h_style = /decl/sprite_accessory/hair/bald - var/f_style = /decl/sprite_accessory/facial_hair/shaved - - var/hair_colour = COLOR_BLACK - var/skin_colour = COLOR_BLACK - var/facial_hair_colour = COLOR_BLACK + var/blood_type var/eye_colour = COLOR_BLACK - var/skin_tone = 0 //Skin tone - var/list/body_markings = list() + var/skin_colour = COLOR_BLACK + var/skin_tone = -75 + var/list/sprite_accessories = list() var/list/appearance_descriptors = list() var/equip_preview_mob = EQUIP_PREVIEW_ALL @@ -23,8 +17,6 @@ /datum/category_item/player_setup_item/physical/body/load_character(datum/pref_record_reader/R) - pref.hair_colour = R.read("hair_colour") - pref.facial_hair_colour = R.read("facial_hair_colour") pref.skin_colour = R.read("skin_colour") pref.eye_colour = R.read("eye_colour") pref.skin_tone = R.read("skin_tone") @@ -32,73 +24,113 @@ pref.appearance_descriptors = R.read("appearance_descriptors") pref.bgstate = R.read("bgstate") - // Get h_style type. - var/decl/h_style_decl = decls_repository.get_decl_by_id_or_var(R.read("hair_style_name"), /decl/sprite_accessory/hair) - pref.h_style = istype(h_style_decl) ? h_style_decl.type : /decl/sprite_accessory/hair/bald - // Get f_style type. - var/decl/f_style_decl = decls_repository.get_decl_by_id_or_var(R.read("facial_style_name"), /decl/sprite_accessory/facial_hair) - pref.f_style = istype(f_style_decl) ? f_style_decl.type : /decl/sprite_accessory/facial_hair/shaved - // Get markings type. + // Null skintone loaded from file -> initial skintone value. + if(isnull(pref.skin_tone)) + pref.skin_tone = initial(pref.skin_tone) + + // Load all of our saved accessories. + pref.sprite_accessories = list() + var/list/load_accessories = R.read("sprite_accessories") + for(var/category_uid in load_accessories) + var/decl/sprite_accessory_category/accessory_category = decls_repository.get_decl_by_id_or_var(category_uid, /decl/sprite_accessory_category) + if(!istype(accessory_category)) + continue + pref.sprite_accessories[accessory_category.type] = list() + for(var/accessory_name in load_accessories[category_uid]) + var/decl/sprite_accessory/loaded_accessory = decls_repository.get_decl_by_id_or_var(accessory_name, accessory_category.base_accessory_type) + if(istype(loaded_accessory, accessory_category.base_accessory_type)) + pref.sprite_accessories[accessory_category.type][loaded_accessory.type] = load_accessories[category_uid][accessory_name] + + // Grandfather in pre-existing hair and markings. + var/decl/style_decl + var/decl/sprite_accessory_category/accessory_cat + var/hair_name = R.read("hair_style_name") + if(hair_name) + accessory_cat = GET_DECL(SAC_HAIR) + style_decl = decls_repository.get_decl_by_id_or_var(hair_name, accessory_cat.base_accessory_type) + if(style_decl) + LAZYINITLIST(pref.sprite_accessories[accessory_cat.type]) + pref.sprite_accessories[accessory_cat.type][style_decl.type] = R.read("hair_colour") || COLOR_BLACK + + hair_name = R.read("facial_style_name") + if(hair_name) + accessory_cat = GET_DECL(SAC_FACIAL_HAIR) + style_decl = decls_repository.get_decl_by_id_or_var(hair_name, accessory_cat.base_accessory_type) + if(style_decl) + LAZYINITLIST(pref.sprite_accessories[accessory_cat.type]) + pref.sprite_accessories[accessory_cat.type][style_decl.type] = R.read("facial_hair_colour") || COLOR_BLACK + var/list/load_markings = R.read("body_markings") - pref.body_markings = list() if(length(load_markings)) - for(var/marking in load_markings) - var/decl/sprite_accessory/marking/loaded_marking = decls_repository.get_decl_by_id_or_var(marking, /decl/sprite_accessory/marking) - if(istype(loaded_marking)) - pref.body_markings[loaded_marking.type] = load_markings[marking] + accessory_cat = GET_DECL(SAC_MARKINGS) + for(var/accessory in load_markings) + style_decl = decls_repository.get_decl_by_id_or_var(accessory, accessory_cat.base_accessory_type) + if(style_decl) + LAZYINITLIST(pref.sprite_accessories[accessory_cat.type]) + pref.sprite_accessories[accessory_cat.type][style_decl.type] = load_markings[accessory] || COLOR_BLACK /datum/category_item/player_setup_item/physical/body/save_character(datum/pref_record_writer/W) + + var/list/save_accessories = list() + for(var/acc_cat in pref.sprite_accessories) + var/decl/sprite_accessory_category/accessory_category = GET_DECL(acc_cat) + save_accessories[accessory_category.uid] = list() + for(var/acc in pref.sprite_accessories[acc_cat]) + var/decl/sprite_accessory/accessory = GET_DECL(acc) + save_accessories[accessory_category.uid][accessory.uid] = pref.sprite_accessories[acc_cat][acc] + + W.write("sprite_accessories", save_accessories) W.write("skin_tone", pref.skin_tone) - W.write("hair_colour", pref.hair_colour) - W.write("facial_hair_colour", pref.facial_hair_colour) W.write("skin_colour", pref.skin_colour) W.write("eye_colour", pref.eye_colour) W.write("b_type", pref.blood_type) W.write("appearance_descriptors", pref.appearance_descriptors) W.write("bgstate", pref.bgstate) - // Get names of sprite accessories to serialize. - var/decl/sprite_accessory/sprite = GET_DECL(pref.h_style) - W.write("hair_style_name", sprite.uid) - sprite = GET_DECL(pref.f_style) - W.write("facial_style_name", sprite.uid) - var/list/body_marking_names = list() - for(var/marking in pref.body_markings) - sprite = GET_DECL(marking) - body_marking_names[sprite.uid] = pref.body_markings[marking] - W.write("body_markings", body_marking_names) - /datum/category_item/player_setup_item/physical/body/sanitize_character() - - pref.skin_colour = pref.skin_colour || COLOR_BLACK - pref.hair_colour = pref.hair_colour || COLOR_BLACK - pref.facial_hair_colour = pref.facial_hair_colour || COLOR_BLACK - pref.eye_colour = pref.eye_colour || COLOR_BLACK + var/decl/species/mob_species = get_species_by_key(pref.species) + var/decl/bodytype/mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) || mob_species.default_bodytype + if(mob_bodytype.appearance_flags & HAS_SKIN_COLOR) + pref.skin_colour = pref.skin_colour || mob_bodytype.base_color || COLOR_BLACK + else + pref.skin_colour = mob_bodytype.base_color || COLOR_BLACK + if(mob_bodytype.appearance_flags & HAS_EYE_COLOR) + pref.eye_colour = pref.eye_colour || mob_bodytype.base_eye_color || COLOR_BLACK + else + pref.eye_colour = mob_bodytype.base_eye_color || COLOR_BLACK pref.blood_type = sanitize_text(pref.blood_type, initial(pref.blood_type)) if(!pref.species || !(pref.species in get_playable_species())) pref.species = global.using_map.default_species - var/decl/species/mob_species = get_species_by_key(pref.species) if(!pref.blood_type || !(pref.blood_type in mob_species.blood_types)) pref.blood_type = pickweight(mob_species.blood_types) - var/decl/bodytype/mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) || mob_species.default_bodytype var/low_skin_tone = mob_bodytype ? (35 - mob_bodytype.max_skin_tone()) : -185 sanitize_integer(pref.skin_tone, low_skin_tone, 34, initial(pref.skin_tone)) - if(!ispath(pref.h_style, /decl/sprite_accessory/hair)) - pref.h_style = initial(pref.h_style) - - if(!ispath(pref.f_style, /decl/sprite_accessory/facial_hair)) - pref.f_style = initial(pref.f_style) - - if(!islist(pref.body_markings)) - pref.body_markings = list() - for(var/marking in pref.body_markings) - if(!ispath(marking, /decl/sprite_accessory/marking)) - pref.body_markings -= marking + var/acc_mob = get_mannequin(pref.client?.ckey) + LAZYINITLIST(pref.sprite_accessories) + for(var/acc_cat in pref.sprite_accessories) + if(!(acc_cat in mob_species.available_accessory_categories)) + pref.sprite_accessories -= acc_cat + continue + var/decl/sprite_accessory_category/accessory_category = GET_DECL(acc_cat) + for(var/acc in pref.sprite_accessories[acc_cat]) + var/decl/sprite_accessory/accessory = GET_DECL(acc) + if(!istype(accessory, accessory_category.base_accessory_type) || !accessory.accessory_is_available(acc_mob, mob_species, mob_bodytype)) + pref.sprite_accessories[acc_cat] -= acc + + for(var/accessory_category in mob_species.available_accessory_categories) + LAZYINITLIST(pref.sprite_accessories[accessory_category]) + var/decl/sprite_accessory_category/accessory_cat_decl = GET_DECL(accessory_category) + if(accessory_cat_decl.single_selection) + var/list/current_accessories = pref.sprite_accessories[accessory_category] + if(!length(current_accessories)) + current_accessories[accessory_cat_decl.default_accessory] = accessory_cat_decl.default_accessory_color + else if(length(current_accessories) > 1) + current_accessories.Cut(2) var/list/last_descriptors = list() if(islist(pref.appearance_descriptors)) @@ -124,10 +156,6 @@ . += "Blood Type: [pref.blood_type]
    " . += "Randomize Appearance
    " - if(mob_bodytype.appearance_flags & HAS_A_SKIN_TONE) - . += "Skin Tone: [-pref.skin_tone + 35]/[mob_bodytype.max_skin_tone()]
    " - . += "
    " - if(LAZYLEN(pref.appearance_descriptors)) . += "

    Physical Appearance

    " . += "" @@ -148,50 +176,80 @@ . += "" . += "
    " - . += "

    Colouration

    " - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - . += "" - if(mob_bodytype.appearance_flags & HAS_EYE_COLOR) - . += "" - . += "" - . += "" - . += "" - if(mob_bodytype.appearance_flags & HAS_SKIN_COLOR) - . += "" - . += "" - . += "" - . += "" - . += "
    Hair[GET_DECL(pref.h_style)]" - if(mob_bodytype.appearance_flags & HAS_HAIR_COLOR) - . += "[COLORED_SQUARE(pref.hair_colour)] Change" - . += "
    Facial[GET_DECL(pref.f_style)]" - if(mob_bodytype.appearance_flags & HAS_HAIR_COLOR) - . += "[COLORED_SQUARE(pref.facial_hair_colour)] Change" - . += "
    Eyes[COLORED_SQUARE(pref.eye_colour)] Change
    Body[COLORED_SQUARE(pref.skin_colour)] Change
    " + if((mob_bodytype.appearance_flags & (HAS_EYE_COLOR|HAS_SKIN_COLOR|HAS_A_SKIN_TONE)) || length(mob_species.available_accessory_categories)) + + . += "

    Colouration and accessories

    " + . += "" + + if(mob_bodytype.appearance_flags & HAS_A_SKIN_TONE) + . += "" + . += "" + . += "" + . += "" + + if(mob_bodytype.appearance_flags & HAS_SKIN_COLOR) + . += "" + . += "" + . += "" + . += "" + + if(mob_bodytype.appearance_flags & HAS_EYE_COLOR) + . += "" + . += "" + . += "" + . += "" + + var/const/up_arrow = "⇧" + var/const/down_arrow = "⇩" + var/const/left_arrow = "⇦" + var/const/right_arrow = "⇨" + + for(var/accessory_category in mob_species.available_accessory_categories) + var/decl/sprite_accessory_category/accessory_cat_decl = GET_DECL(accessory_category) + var/list/current_accessories = LAZYACCESS(pref.sprite_accessories, accessory_category) + var/cat_decl_ref = "\ref[accessory_cat_decl]" + if(accessory_cat_decl.single_selection) + var/current_accessory = length(current_accessories) ? current_accessories[1] : accessory_cat_decl.default_accessory + var/accessory_color = length(current_accessories) ? current_accessories[current_accessory] : accessory_cat_decl.default_accessory_color + var/decl/sprite_accessory/accessory_decl = GET_DECL(current_accessory) + var/acc_decl_ref = "\ref[accessory_decl]" + . += "" + . += "" + . += "" + . += "" + . += "" + . += "" + . += "" + continue + + . += "" + . += "" + . += "" + . += "" + var/i = 0 + for(var/accessory in current_accessories) + i++ + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + var/acc_decl_ref = "\ref[accessory_decl]" + . += "" + . += "" + . += "" + . += "" + . += "" + . += "" + . += "" + if(isnull(accessory_cat_decl.max_selections) || i < accessory_cat_decl.max_selections) + . += "" - . += "

    Markings

    " - . += "
    Skin tone[-pref.skin_tone + 35]/[mob_bodytype.max_skin_tone()]" + . += "
    Skin color[COLORED_SQUARE(pref.skin_colour)] Change" + . += "
    Eyes[COLORED_SQUARE(pref.eye_colour)] Change" + . += "
    [accessory_cat_decl.name][COLORED_SQUARE(accessory_color)] Change[left_arrow][accessory_decl.name][right_arrow]
    [accessory_cat_decl.name]
    Remove[COLORED_SQUARE(current_accessories[accessory])] Change[up_arrow][accessory_decl.name][down_arrow]
    Add marking
    " - for(var/M in pref.body_markings) - var/decl/sprite_accessory/mark = GET_DECL(M) - . += "" - . += "" - . += "" - . += "" - . += "" . += "
    [mark.name]Remove[COLORED_SQUARE(pref.body_markings[M])] Change
    Add marking
    " . = jointext(.,null) /datum/category_item/player_setup_item/physical/body/OnTopic(var/href,var/list/href_list, var/mob/user) + var/decl/species/mob_species = get_species_by_key(pref.species) var/decl/bodytype/mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) || mob_species.default_bodytype if(href_list["set_descriptor"]) @@ -210,7 +268,7 @@ return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["random"]) - pref.randomize_appearance_and_body_for() + pref.randomize_appearance_and_body_for(get_mannequin(pref.client?.ckey)) return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["blood_type"]) @@ -221,35 +279,95 @@ pref.blood_type = new_b_type return TOPIC_REFRESH - else if(href_list["hair_color"]) - if(!(mob_bodytype.appearance_flags & HAS_HAIR_COLOR)) + else if (href_list["acc_decl"] || href_list["acc_cat_decl"]) + + var/decl/sprite_accessory/accessory_decl = locate(href_list["acc_decl"]) + var/decl/sprite_accessory_category/accessory_category = locate(href_list["acc_cat_decl"]) + if(!istype(accessory_decl) && !istype(accessory_category)) return TOPIC_NOACTION - var/new_hair = input(user, "Choose your character's hair colour:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.hair_colour) as color|null - mob_species = get_species_by_key(pref.species) - mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) || mob_species.default_bodytype - if(new_hair && (mob_bodytype.appearance_flags & HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.hair_colour = new_hair + if(!istype(accessory_category)) + accessory_category = GET_DECL(accessory_decl.accessory_category) + if(!(accessory_category.type in mob_species.available_accessory_categories)) + return TOPIC_NOACTION + + // Ensure we have a list for the category. + var/list/current_accessories = pref.sprite_accessories[accessory_category.type] + if(!current_accessories) + current_accessories = list() + pref.sprite_accessories[accessory_category.type] = current_accessories + + if(href_list["acc_color"]) + + if(!istype(accessory_decl)) + return TOPIC_NOACTION + var/cur_color = current_accessories[accessory_decl.type] || COLOR_BLACK + var/acc_color = input(user, "Choose a colour for your [accessory_decl.name]: ", CHARACTER_PREFERENCE_INPUT_TITLE, cur_color) as color|null + if(!acc_color || acc_color == cur_color || !(accessory_decl.type in current_accessories)) + return TOPIC_NOACTION + if(accessory_category.single_selection) + current_accessories.Cut() + current_accessories[accessory_decl.type] = acc_color return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["hair_style"]) + else if(href_list["acc_style"]) - var/decl/bodytype/B = mob_species.get_bodytype_by_name(pref.bodytype) - mob_species = get_species_by_key(pref.species) - var/decl/sprite_accessory/new_h_style = input(user, "Choose your character's hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.h_style) as null|anything in mob_species.get_hair_styles(B) - mob_species = get_species_by_key(pref.species) - if(new_h_style && CanUseTopic(user) && (new_h_style in mob_species.get_hair_styles(B))) - pref.h_style = new_h_style.type + var/decl/sprite_accessory/new_accessory = input(user, "Choose an accessory:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in pref.get_usable_sprite_accessories(get_mannequin(pref.client?.ckey), mob_species, mob_bodytype, accessory_category.type, current_accessories - accessory_decl?.type) + if(!(new_accessory in pref.get_usable_sprite_accessories(get_mannequin(pref.client?.ckey), mob_species, mob_bodytype, accessory_category.type, current_accessories))) + return TOPIC_NOACTION + var/style_colour = (accessory_decl && current_accessories[accessory_decl.type]) || accessory_category.default_accessory_color + if(accessory_category.single_selection) + current_accessories.Cut() + current_accessories[new_accessory.type] = style_colour return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["facial_color"]) - if(!(mob_bodytype.appearance_flags & HAS_HAIR_COLOR)) + else if(accessory_category.single_selection && (href_list["acc_next"] || href_list["acc_prev"])) + + if(!length(current_accessories) || !istype(accessory_decl)) + return TOPIC_NOACTION + var/decl/sprite_accessory/next_accessory_decl + var/style_colour = current_accessories[accessory_decl.type] + var/list/available_accessories = pref.get_usable_sprite_accessories(get_mannequin(pref.client?.ckey), mob_species, mob_bodytype, accessory_category.type, current_accessories - accessory_decl?.type) + if(length(available_accessories) <= 1) + return TOPIC_NOACTION + + if(href_list["acc_next"]) + next_accessory_decl = next_in_list(accessory_decl, available_accessories) + else if(href_list["acc_prev"]) + next_accessory_decl = previous_in_list(accessory_decl, available_accessories) + + if(istype(next_accessory_decl) && accessory_decl != next_accessory_decl) + current_accessories.Cut() + current_accessories[next_accessory_decl.type] = style_colour + return TOPIC_REFRESH_UPDATE_PREVIEW return TOPIC_NOACTION - var/new_facial = input(user, "Choose your character's facial-hair colour:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.facial_hair_colour) as color|null - mob_species = get_species_by_key(pref.species) - mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) || mob_species.default_bodytype - if(new_facial && (mob_bodytype.appearance_flags & HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.facial_hair_colour = new_facial - return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(!accessory_category.single_selection) + + if(!istype(accessory_decl)) + return TOPIC_NOACTION + + if(href_list["acc_remove"]) + + current_accessories -= accessory_decl.type + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["acc_move_down"] || href_list["acc_move_up"]) + + if(!length(current_accessories)) + return TOPIC_NOACTION + var/current_index = current_accessories.Find(accessory_decl.type) + if(href_list["acc_move_up"] && current_index <= 1) + return TOPIC_NOACTION + else if(href_list["acc_move_down"] && current_index >= length(current_accessories)) + return TOPIC_NOACTION + var/accessory_color = current_accessories[accessory_decl.type] + current_accessories -= accessory_decl.type + if(href_list["acc_move_up"]) + current_accessories.Insert(current_index-1, accessory_decl.type) + else if(href_list["acc_move_down"]) + current_accessories.Insert(current_index+1, accessory_decl.type) + current_accessories[accessory_decl.type] = accessory_color + return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["eye_color"]) if(!(mob_bodytype.appearance_flags & HAS_EYE_COLOR)) @@ -281,61 +399,19 @@ pref.skin_colour = new_skin return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["facial_style"]) - - var/decl/bodytype/B = mob_species.get_bodytype_by_name(pref.bodytype) - mob_species = get_species_by_key(pref.species) - var/decl/sprite_accessory/new_f_style = input(user, "Choose your character's facial-hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, GET_DECL(pref.f_style)) as null|anything in mob_species.get_facial_hair_styles(B) - mob_species = get_species_by_key(pref.species) - if(new_f_style && CanUseTopic(user) && (new_f_style in mob_species.get_facial_hair_styles(B))) - pref.f_style = new_f_style.type - return TOPIC_REFRESH_UPDATE_PREVIEW - - //TODO SPRITE ACCESSORY UPDATE - else if(href_list["marking_style"]) - - var/list/disallowed_markings = list() - for (var/M in pref.body_markings) - var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) - disallowed_markings |= mark_style.disallows - - var/list/usable_markings = list() - var/list/all_markings = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/marking) - for(var/M in all_markings) - if(M in pref.body_markings) - continue - var/decl/sprite_accessory/accessory = all_markings[M] - mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) - if(!is_type_in_list(accessory, disallowed_markings) && accessory.accessory_is_available(preference_mob(), mob_species, mob_bodytype)) - usable_markings += accessory - - var/decl/sprite_accessory/new_marking = input(user, "Choose a body marking:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in usable_markings - if(new_marking && CanUseTopic(user)) - pref.body_markings[new_marking.type] = COLOR_BLACK - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_remove"]) - var/decl/sprite_accessory/M = locate(href_list["marking_remove"]) - pref.body_markings -= M.type - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_color"]) - var/decl/sprite_accessory/M = locate(href_list["marking_color"]) - var/mark_color = input(user, "Choose the [M] color: ", CHARACTER_PREFERENCE_INPUT_TITLE, pref.body_markings[M.type]) as color|null - if(mark_color && CanUseTopic(user)) - pref.body_markings[M.type] = "[mark_color]" - return TOPIC_REFRESH_UPDATE_PREVIEW - -/datum/category_item/player_setup_item/proc/ResetAllHair() - ResetHair() - ResetFacialHair() - -/datum/category_item/player_setup_item/proc/ResetHair() - var/decl/species/mob_species = get_species_by_key(pref.species) - var/list/valid_hairstyles = mob_species?.get_hair_style_types(pref.get_bodytype_decl()) - pref.h_style = length(valid_hairstyles) ? pick(valid_hairstyles) : initial(pref.h_style) - -/datum/category_item/player_setup_item/proc/ResetFacialHair() - var/decl/species/mob_species = get_species_by_key(pref.species) - var/list/valid_facialhairstyles = mob_species?.get_facial_hair_styles(pref.get_bodytype_decl()) - pref.f_style = length(valid_facialhairstyles) ? pick(valid_facialhairstyles) : initial(pref.f_style) +/datum/preferences/proc/get_usable_sprite_accessories(mob/acc_mob, decl/species/mob_species, decl/bodytype/mob_bodytype, accessory_category, list/existing_accessories) + var/decl/sprite_accessory_category/accessory_category_decl = GET_DECL(accessory_category) + if(!istype(accessory_category_decl)) + return + var/list/disallowed_accessories = list() + for (var/accessory in existing_accessories) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + if(length(accessory_decl.disallows_accessories)) + disallowed_accessories |= accessory_decl.disallows_accessories + var/list/all_accessories = decls_repository.get_decls_of_subtype(accessory_category_decl.base_accessory_type) + for(var/accessory in all_accessories) + if(accessory in existing_accessories) + continue + var/decl/sprite_accessory/accessory_decl = all_accessories[accessory] + if(istype(accessory_decl) && !is_type_in_list(accessory_decl, disallowed_accessories) && accessory_decl.accessory_is_available(acc_mob, mob_species, mob_bodytype)) + LAZYADD(., accessory_decl) diff --git a/code/modules/client/preference_setup/general/03_aspects.dm b/code/modules/client/preference_setup/general/03_aspects.dm index 6d7448a0b3d..ccebf2a6c27 100644 --- a/code/modules/client/preference_setup/general/03_aspects.dm +++ b/code/modules/client/preference_setup/general/03_aspects.dm @@ -61,7 +61,8 @@ pref.prune_invalid_aspects() var/modified_list = FALSE - while(get_aspect_total() > config.max_character_aspects) + var/max_character_aspects = get_config_value(/decl/config/num/max_character_aspects) + while(get_aspect_total() > max_character_aspects) // Find a costly aspect with no children to drop until our cost is below the threshold. var/can_drop_aspect = FALSE @@ -105,11 +106,12 @@ var/aspect_total = get_aspect_total() // Change our formatting data if needed. var/fcolor = COLOR_CYAN_BLUE - if(aspect_total == config.max_character_aspects) + var/max_character_aspects = get_config_value(/decl/config/num/max_character_aspects) + if(aspect_total == max_character_aspects) fcolor = COLOR_FONT_ORANGE // Build the string. - . = list("
    [aspect_total]/[config.max_character_aspects] points spent.

    ") + . = list("
    [aspect_total]/[max_character_aspects] points spent.

    ") if(!selected_category || !(selected_category in available_categories)) selected_category = available_categories[1] @@ -169,7 +171,7 @@ if(A.children) aspects_to_remove |= A.children // Enable aspect. - else if(get_aspect_total() + A.aspect_cost <= config.max_character_aspects) + else if(get_aspect_total() + A.aspect_cost <= get_config_value(/decl/config/num/max_character_aspects)) pref.aspects |= A.type // Tidy up in case we're in an incoherent state for whatever reason. pref.prune_invalid_aspects() diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index d6c0e0cabee..49e55ec3736 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -4,7 +4,7 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) var/clientfps = 0 var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color var/icon_size = 64 - var/UI_style = "Midnight" + var/UI_style var/UI_style_alpha = 255 var/UI_style_color = COLOR_WHITE var/UI_mouseover_alpha = 255 @@ -17,8 +17,15 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) sort_order = 1 /datum/category_item/player_setup_item/player_global/ui/load_preferences(datum/pref_record_reader/R) + + var/style_uid = R.read("UI_style") + if(style_uid) + // Retrieve by var in case of grandfathered saves using decl name. + var/decl/ui_style/ui_style = decls_repository.get_decl_by_id_or_var(style_uid, /decl/ui_style) + if(ui_style) + pref.UI_style = ui_style.type + pref.icon_size = R.read("icon_size") - pref.UI_style = R.read("UI_style") pref.UI_mouseover_color = R.read("UI_mouseover_color") pref.UI_mouseover_alpha = R.read("UI_mouseover_alpha") pref.UI_style_color = R.read("UI_style_color") @@ -27,8 +34,11 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) pref.clientfps = R.read("clientfps") /datum/category_item/player_setup_item/player_global/ui/save_preferences(datum/pref_record_writer/W) + + var/decl/ui_style/ui_style = GET_DECL(pref.UI_style) + W.write("UI_style", ui_style.uid) + W.write("icon_size", pref.icon_size) - W.write("UI_style", pref.UI_style) W.write("UI_mouseover_color", pref.UI_mouseover_color) W.write("UI_mouseover_alpha", pref.UI_mouseover_alpha) W.write("UI_style_color", pref.UI_style_color) @@ -37,13 +47,18 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) W.write("clientfps", pref.clientfps) /datum/category_item/player_setup_item/player_global/ui/sanitize_preferences() - pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style)) - pref.UI_mouseover_color = sanitize_hexcolor(pref.UI_mouseover_color, initial(pref.UI_mouseover_color)) - pref.UI_mouseover_alpha = sanitize_integer(pref.UI_mouseover_alpha, 0, 255, initial(pref.UI_mouseover_alpha)) + + var/list/all_ui_style_types = list() + for(var/decl/ui_style/style in get_ui_styles()) + all_ui_style_types |= style.type + + pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_style_types, all_ui_style_types[1]) + pref.UI_mouseover_color = sanitize_hexcolor(pref.UI_mouseover_color, initial(pref.UI_mouseover_color)) + pref.UI_mouseover_alpha = sanitize_integer(pref.UI_mouseover_alpha, 0, 255, initial(pref.UI_mouseover_alpha)) pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color)) pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha)) - pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor)) - pref.clientfps = sanitize_integer(pref.clientfps, CLIENT_MIN_FPS, CLIENT_MAX_FPS, initial(pref.clientfps)) + pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor)) + pref.clientfps = sanitize_integer(pref.clientfps, CLIENT_MIN_FPS, CLIENT_MAX_FPS, initial(pref.clientfps)) if(!isnum(pref.icon_size)) pref.icon_size = initial(pref.icon_size) @@ -63,7 +78,9 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) /datum/category_item/player_setup_item/player_global/ui/content(var/mob/user) . = "UI Settings
    " - . += "UI Style: [pref.UI_style]
    " + + var/decl/ui_style/current_style = GET_DECL(pref.UI_style) + . += "UI Style: [current_style.name]
    " . += "Custom UI (recommended for White UI):" . += "" @@ -82,9 +99,10 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) /datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["select_style"]) - var/UI_style_new = input(user, "Choose UI style.", CHARACTER_PREFERENCE_INPUT_TITLE, pref.UI_style) as null|anything in all_ui_styles - if(!UI_style_new || !CanUseTopic(user)) return TOPIC_NOACTION - pref.UI_style = UI_style_new + var/decl/ui_style/current_style = GET_DECL(pref.UI_style) + var/decl/ui_style/UI_style_new = input(user, "Choose UI style.", CHARACTER_PREFERENCE_INPUT_TITLE, current_style) as null|anything in get_ui_styles() + if(!istype(UI_style_new) || !CanUseTopic(user)) return TOPIC_NOACTION + pref.UI_style = UI_style_new.type return TOPIC_REFRESH else if(href_list["select_color"]) @@ -114,10 +132,7 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) var/new_fps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Global Preference") as num|null if (isnum(new_fps) && CanUseTopic(user)) pref.clientfps = clamp(new_fps, CLIENT_MIN_FPS, CLIENT_MAX_FPS) - - var/mob/target_mob = preference_mob() - if(target_mob && target_mob.client) - target_mob.client.apply_fps(pref.clientfps) + pref.client?.apply_fps(pref.clientfps) return TOPIC_REFRESH else if(href_list["select_tooltip_style"]) @@ -151,4 +166,4 @@ var/global/list/valid_icon_sizes = list(32, 48, 64, 96, 128) return ..() /proc/can_select_ooc_color(var/mob/user) - return config.allow_admin_ooccolor && check_rights(R_ADMIN, 0, user) + return get_config_value(/decl/config/toggle/admin_ooccolor) && check_rights(R_ADMIN, 0, user) diff --git a/code/modules/client/preference_setup/global/05_settings.dm b/code/modules/client/preference_setup/global/05_settings.dm index d96ac73e0e9..12e2816db9a 100644 --- a/code/modules/client/preference_setup/global/05_settings.dm +++ b/code/modules/client/preference_setup/global/05_settings.dm @@ -42,7 +42,7 @@ pref.preference_values -= key pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) - pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) + pref.default_slot = sanitize_integer(pref.default_slot, 1, get_config_value(/decl/config/num/character_slots), initial(pref.default_slot)) /datum/category_item/player_setup_item/player_global/settings/content(var/mob/user) . = list() diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 9e536f545f3..42554765f49 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -184,7 +184,7 @@ else reagent = valid_reagents[metadata] if(reagent && gear.reagents) - gear.reagents.add_reagent(reagent, REAGENTS_FREE_SPACE(gear.reagents)) + gear.add_to_reagents(reagent, REAGENTS_FREE_SPACE(gear.reagents)) return GEAR_TWEAK_SUCCESS /* @@ -203,10 +203,11 @@ ..() /datum/gear_tweak/custom_setup/tweak_item(mob/user, obj/item/gear, metadata) - var/arglist = list(user) + var/list/arglist = list(user) if(length(additional_arguments)) arglist += additional_arguments call(gear, custom_setup_proc)(arglist(arglist)) + arglist.Cut() return GEAR_TWEAK_SUCCESS /* @@ -444,3 +445,49 @@ var/global/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() gear.set_custom_desc(metadata) return GEAR_TWEAK_SUCCESS return GEAR_TWEAK_SKIPPED + +/* +* Material selection +*/ + +/datum/gear_tweak/material + var/list/valid_materials + +/datum/gear_tweak/material/New(var/list/_valid_materials) + if(!length(_valid_materials)) + CRASH("No material paths given") + var/list/duplicate_keys = duplicates(_valid_materials) + if(duplicate_keys.len) + CRASH("Duplicate material names found: [english_list(duplicate_keys)]") + var/list/duplicate_values = duplicates(list_values(_valid_materials)) + if(duplicate_values.len) + CRASH("Duplicate material types found: [english_list(duplicate_values)]") + // valid_materials, but with names sanitized to remove \improper + var/list/valid_materials_san = list() + for(var/mat_name in _valid_materials) + if(!istext(mat_name)) + CRASH("Expected a text key, was [log_info_line(mat_name)]") + var/selection_type = _valid_materials[mat_name] + if(ispath(selection_type, /decl/material/solid)) + var/decl/material/solid/mat = GET_DECL(selection_type) + if(mat?.phase_at_temperature() != MAT_PHASE_SOLID) + CRASH("Expected a room temperature solid, was [log_info_line(mat?.type) || "NULL"]") + else + CRASH("Expected a /decl/material/solid path, was [log_info_line(selection_type) || "NULL"]") + var/mat_name_san = replacetext(mat_name, "\improper", "") + valid_materials_san[mat_name_san] = selection_type + valid_materials = sortTim(_valid_materials, /proc/cmp_text_asc) + +/datum/gear_tweak/material/get_contents(var/metadata) + return "Material: [metadata]" + +/datum/gear_tweak/material/get_default() + return valid_materials[1] + +/datum/gear_tweak/material/get_metadata(var/user, var/metadata, title) + return input(user, "Choose a material.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata) as null|anything in valid_materials + +/datum/gear_tweak/material/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_materials)) + return + gear_data.material = valid_materials[metadata] diff --git a/code/modules/client/preference_setup/loadout/lists/accessories.dm b/code/modules/client/preference_setup/loadout/lists/accessories.dm index 110807d2c65..43d6f52c331 100644 --- a/code/modules/client/preference_setup/loadout/lists/accessories.dm +++ b/code/modules/client/preference_setup/loadout/lists/accessories.dm @@ -9,6 +9,7 @@ /decl/loadout_option/accessory/tie name = "tie selection" path = /obj/item/clothing/accessory + uid = "gear_accessory_tie" /decl/loadout_option/accessory/tie/get_gear_tweak_options() . = ..() @@ -29,6 +30,7 @@ name = "colored tie" path = /obj/item/clothing/accessory loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_accessory_tie_color" /decl/loadout_option/accessory/tie_color/get_gear_tweak_options() . = ..() @@ -41,23 +43,28 @@ /decl/loadout_option/accessory/locket name = "locket" path = /obj/item/clothing/accessory/locket + uid = "gear_accessory_locket" /decl/loadout_option/accessory/necklace - name = "necklace, colour select" + name = "necklace, color select" path = /obj/item/clothing/accessory/necklace loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_accessory_necklace" /decl/loadout_option/accessory/bowtie name = "bowtie, horrible" path = /obj/item/clothing/accessory/bowtie/ugly + uid = "gear_accessory_bowtie" /decl/loadout_option/accessory/bowtie/color - name = "bowtie, colour select" + name = "bowtie, color select" path = /obj/item/clothing/accessory/bowtie/color loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_accessory_bowtie_color" /decl/loadout_option/accessory/bracelet name = "bracelet, color select" path = /obj/item/clothing/accessory/bracelet cost = 1 loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_accessory_bracelet" diff --git a/code/modules/client/preference_setup/loadout/lists/clothing.dm b/code/modules/client/preference_setup/loadout/lists/clothing.dm index b39318110f3..aa46c11bf79 100644 --- a/code/modules/client/preference_setup/loadout/lists/clothing.dm +++ b/code/modules/client/preference_setup/loadout/lists/clothing.dm @@ -11,15 +11,18 @@ path = /obj/item/clothing/accessory/toggleable/flannel slot = slot_tie_str loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_flannel" /decl/loadout_option/clothing/scarf name = "scarf" path = /obj/item/clothing/accessory/scarf loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_scarf" /decl/loadout_option/clothing/hawaii name = "hawaii shirt" path = /obj/item/clothing/accessory/toggleable/hawaii + uid = "gear_clothing_hawaii" /decl/loadout_option/clothing/hawaii/get_gear_tweak_options() . = ..() @@ -31,54 +34,65 @@ ) /decl/loadout_option/clothing/vest - name = "suit vest, colour select" + name = "suit vest, color select" path = /obj/item/clothing/accessory/toggleable loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_suit_vest" /decl/loadout_option/clothing/suspenders name = "suspenders" path = /obj/item/clothing/accessory/suspenders + uid = "gear_clothing_suspenders" /decl/loadout_option/clothing/suspenders/colorable - name = "suspenders, colour select" + name = "suspenders, color select" path = /obj/item/clothing/accessory/suspenders/colorable loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_suspenders_colour" /decl/loadout_option/clothing/wcoat - name = "waistcoat, colour select" + name = "waistcoat, color select" path = /obj/item/clothing/accessory/wcoat loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_waistcoat" /decl/loadout_option/clothing/zhongshan - name = "zhongshan jacket, colour select" + name = "zhongshan jacket, color select" path = /obj/item/clothing/accessory/toggleable/zhongshan loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_zhongshan" /decl/loadout_option/clothing/dashiki name = "dashiki selection" path = /obj/item/clothing/accessory/dashiki loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_clothing_dashiki" /decl/loadout_option/clothing/thawb name = "thawb" path = /obj/item/clothing/accessory/thawb + uid = "gear_clothing_thawb" /decl/loadout_option/clothing/sherwani - name = "sherwani, colour select" + name = "sherwani, color select" path = /obj/item/clothing/accessory/sherwani loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_sherwani" /decl/loadout_option/clothing/qipao - name = "qipao blouse, colour select" + name = "qipao blouse, color select" path = /obj/item/clothing/accessory/qipao loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_qipao" /decl/loadout_option/clothing/sweater - name = "turtleneck sweater, colour select" + name = "turtleneck sweater, color select" path = /obj/item/clothing/accessory/sweater loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_sweater" /decl/loadout_option/clothing/tangzhuang - name = "tangzhuang jacket, colour select" + name = "tangzhuang jacket, color select" path = /obj/item/clothing/accessory/tangzhuang - loadout_flags = GEAR_HAS_COLOR_SELECTION \ No newline at end of file + loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_clothing_tangzuhang" diff --git a/code/modules/client/preference_setup/loadout/lists/earwear.dm b/code/modules/client/preference_setup/loadout/lists/earwear.dm index d2626825404..9abea9dfedf 100644 --- a/code/modules/client/preference_setup/loadout/lists/earwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/earwear.dm @@ -10,6 +10,7 @@ /decl/loadout_option/ears/earrings name = "earrings" path = /obj/item/clothing/ears + uid = "gear_ears_earrings" /decl/loadout_option/ears/earrings/get_gear_tweak_options() . = ..() diff --git a/code/modules/client/preference_setup/loadout/lists/eyegear.dm b/code/modules/client/preference_setup/loadout/lists/eyegear.dm index 8d06da5b399..420f5e68a88 100644 --- a/code/modules/client/preference_setup/loadout/lists/eyegear.dm +++ b/code/modules/client/preference_setup/loadout/lists/eyegear.dm @@ -9,10 +9,12 @@ /decl/loadout_option/eyes/eyepatch name = "eyepatch" path = /obj/item/clothing/glasses/eyepatch + uid = "gear_eyes_eyepatch" /decl/loadout_option/eyes/glasses name = "glasses selection" path = /obj/item/clothing/glasses + uid = "gear_eyes_glasses" /decl/loadout_option/eyes/glasses/get_gear_tweak_options() . = ..() @@ -28,6 +30,7 @@ name = "sunglasses selection" path = /obj/item/clothing/glasses/sunglasses cost = 3 + uid = "gear_eyes_shades" /decl/loadout_option/eyes/shades/get_gear_tweak_options() . = ..() @@ -41,3 +44,4 @@ name = "blindfold" path = /obj/item/clothing/glasses/blindfold loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_eyes_blindfold" diff --git a/code/modules/client/preference_setup/loadout/lists/footwear.dm b/code/modules/client/preference_setup/loadout/lists/footwear.dm index 695956ce4b0..72760aca59c 100644 --- a/code/modules/client/preference_setup/loadout/lists/footwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/footwear.dm @@ -7,14 +7,16 @@ abstract_type = /decl/loadout_option/shoes /decl/loadout_option/shoes/athletic - name = "athletic shoes, colour select" + name = "athletic shoes, color select" path = /obj/item/clothing/shoes/athletic loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_shoes_athletic" /decl/loadout_option/shoes/boots name = "boot selection" path = /obj/item/clothing/shoes cost = 2 + uid = "gear_shoes_boots" /decl/loadout_option/shoes/boots/get_gear_tweak_options() . = ..() @@ -30,6 +32,7 @@ /decl/loadout_option/shoes/color name = "shoe selection" path = /obj/item/clothing/shoes + uid = "gear_shoes_color" /decl/loadout_option/shoes/color/get_gear_tweak_options() . = ..() @@ -51,20 +54,24 @@ ) /decl/loadout_option/shoes/flats - name = "flats, colour select" + name = "flats, color select" path = /obj/item/clothing/shoes/flats loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_shoes_flats" /decl/loadout_option/shoes/high name = "high tops selection" path = /obj/item/clothing/shoes/color/hightops loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_shoes_high_tops" /decl/loadout_option/shoes/sandal name = "wooden sandals" path = /obj/item/clothing/shoes/sandal + uid = "gear_shoes_sandals" /decl/loadout_option/shoes/heels - name = "high heels, colour select" + name = "high heels, color select" path = /obj/item/clothing/shoes/heels - loadout_flags = GEAR_HAS_COLOR_SELECTION \ No newline at end of file + loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_shoes_heels" diff --git a/code/modules/client/preference_setup/loadout/lists/gloves.dm b/code/modules/client/preference_setup/loadout/lists/gloves.dm index 0d36482365a..dacb1bfde03 100644 --- a/code/modules/client/preference_setup/loadout/lists/gloves.dm +++ b/code/modules/client/preference_setup/loadout/lists/gloves.dm @@ -11,16 +11,19 @@ name = "gloves, colored" loadout_flags = GEAR_HAS_COLOR_SELECTION path = /obj/item/clothing/gloves/color + uid = "gear_gloves_color" /decl/loadout_option/gloves/evening - name = "gloves, evening, colour select" + name = "gloves, evening, color select" path = /obj/item/clothing/gloves/color/evening loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_gloves_evening" /decl/loadout_option/ring name = "ring" path = /obj/item/clothing/ring cost = 2 + uid = "gear_gloves_ring" /decl/loadout_option/ring/get_gear_tweak_options() . = ..() diff --git a/code/modules/client/preference_setup/loadout/lists/headwear.dm b/code/modules/client/preference_setup/loadout/lists/headwear.dm index 5fca5f8753e..715cf51a811 100644 --- a/code/modules/client/preference_setup/loadout/lists/headwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/headwear.dm @@ -7,14 +7,16 @@ abstract_type = /decl/loadout_option/head /decl/loadout_option/head/beret - name = "beret, colour select" + name = "beret, color select" path = /obj/item/clothing/head/beret/plaincolor loadout_flags = GEAR_HAS_COLOR_SELECTION description = "A simple, solid color beret. This one has no emblems or insignia on it." + uid = "gear_head_beret" /decl/loadout_option/head/bandana name = "bandana selection" path = /obj/item/clothing + uid = "gear_head_bandana" /decl/loadout_option/head/bandana/get_gear_tweak_options() . = ..() @@ -25,20 +27,24 @@ name = "beanie, color select" path = /obj/item/clothing/head/beanie loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_beanie" /decl/loadout_option/head/bow - name = "hair bow, colour select" + name = "hair bow, color select" path = /obj/item/clothing/head/hairflower/bow loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_bow" /decl/loadout_option/head/flat_cap - name = "flat cap, colour select" + name = "flat cap, color select" path = /obj/item/clothing/head/flatcap loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_flat_cap" /decl/loadout_option/head/cap name = "cap selection" path = /obj/item/clothing/head + uid = "gear_head_cap" /decl/loadout_option/head/cap/get_gear_tweak_options() . = ..() @@ -59,6 +65,7 @@ /decl/loadout_option/head/hairflower name = "hair flower pin" path = /obj/item/clothing/head/hairflower + uid = "gear_head_hairflower" /decl/loadout_option/head/hairflower/get_gear_tweak_options() . = ..() @@ -74,6 +81,7 @@ name = "hardhat selection" path = /obj/item/clothing/head/hardhat cost = 2 + uid = "gear_head_hardhat" /decl/loadout_option/head/hardhat/get_gear_tweak_options() . = ..() @@ -88,6 +96,7 @@ /decl/loadout_option/head/formalhat name = "formal hat selection" path = /obj/item/clothing/head + uid = "gear_head_formal" /decl/loadout_option/head/formalhat/get_gear_tweak_options() . = ..() @@ -106,6 +115,7 @@ /decl/loadout_option/head/informalhat name = "informal hat selection" path = /obj/item/clothing/head + uid = "gear_head_informal" /decl/loadout_option/head/informalhat/get_gear_tweak_options() . = ..() @@ -116,37 +126,45 @@ ) /decl/loadout_option/head/hijab - name = "hijab, colour select" + name = "hijab, color select" path = /obj/item/clothing/head/hijab loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_hijab" /decl/loadout_option/head/kippa - name = "kippa, colour select" + name = "kippa, color select" path = /obj/item/clothing/head/kippa loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_kippa" /decl/loadout_option/head/turban - name = "turban, colour select" + name = "turban, color select" path = /obj/item/clothing/head/turban loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_turban" /decl/loadout_option/head/taqiyah - name = "taqiyah, colour select" + name = "taqiyah, color select" path = /obj/item/clothing/head/taqiyah loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_head_taqiyah" /decl/loadout_option/head/rastacap name = "rastacap" path = /obj/item/clothing/head/rastacap + uid = "gear_head_rastacap" /decl/loadout_option/head/tankccap name = "padded cap" path = /obj/item/clothing/head/tank + uid = "gear_head_tankcap" /decl/loadout_option/head/headphones name = "headphones" path = /obj/item/clothing/head/headphones + uid = "gear_head_headphones" /decl/loadout_option/head/balaclava name = "balaclava" path = /obj/item/clothing/mask/balaclava + uid = "gear_head_balaclava" diff --git a/code/modules/client/preference_setup/loadout/lists/misc.dm b/code/modules/client/preference_setup/loadout/lists/misc.dm index a6543d4d4a2..4fd6feebc0d 100644 --- a/code/modules/client/preference_setup/loadout/lists/misc.dm +++ b/code/modules/client/preference_setup/loadout/lists/misc.dm @@ -1,38 +1,47 @@ /decl/loadout_option/cane name = "cane" path = /obj/item/cane + uid = "gear_misc_cane" /decl/loadout_option/dice name = "dice pack" path = /obj/item/storage/pill_bottle/dice + uid = "gear_misc_dice" /decl/loadout_option/dice/nerd name = "dice pack (gaming)" path = /obj/item/storage/pill_bottle/dice_nerd + uid = "gear_misc_dice_gamer" /decl/loadout_option/cards name = "deck of cards" path = /obj/item/deck/cards + uid = "gear_misc_cards" /decl/loadout_option/tarot name = "deck of tarot cards" path = /obj/item/deck/tarot + uid = "gear_misc_cards_tarot" /decl/loadout_option/holder name = "card holder" path = /obj/item/deck/holder + uid = "gear_misc_card_holder" /decl/loadout_option/cardemon_pack name = "Cardemon booster pack" path = /obj/item/pack/cardemon + uid = "gear_misc_cardemon" /decl/loadout_option/spaceball_pack name = "Spaceball booster pack" path = /obj/item/pack/spaceball + uid = "gear_misc_spaceball" /decl/loadout_option/flask name = "flask" path = /obj/item/chems/drinks/flask/barflask + uid = "gear_misc_flask" /decl/loadout_option/flask/get_gear_tweak_options() . = ..() @@ -42,6 +51,7 @@ /decl/loadout_option/vacflask name = "vacuum-flask" path = /obj/item/chems/drinks/flask/vacuumflask + uid = "gear_misc_vacflask" /decl/loadout_option/vacflask/get_gear_tweak_options() . = ..() @@ -52,46 +62,72 @@ name = "coffee cup" path = /obj/item/chems/drinks/glass2/coffeecup loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_misc_coffeecup" /decl/loadout_option/towel name = "towel" path = /obj/item/towel loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_misc_towel" /decl/loadout_option/mirror name = "handheld mirror" path = /obj/item/mirror + uid = "gear_misc_mirror" /decl/loadout_option/lipstick name = "lipstick selection" - path = /obj/item/lipstick - loadout_flags = GEAR_HAS_TYPE_SELECTION - -/decl/loadout_option/comb - name = "plastic comb" - path = /obj/item/haircomb + path = /obj/item/cosmetics/lipstick + loadout_flags = GEAR_HAS_SUBTYPE_SELECTION + uid = "gear_misc_lipstick" + +/decl/loadout_option/eyeshadow + name = "eyeshadow selection" + path = /obj/item/cosmetics/eyeshadow + loadout_flags = GEAR_HAS_SUBTYPE_SELECTION + uid = "gear_misc_eyeshadow" + +/decl/loadout_option/grooming + name = "grooming tool selection" + path = /obj/item/grooming loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_misc_grooming" + +/decl/loadout_option/grooming/get_gear_tweak_options() + . = ..() + LAZYINITLIST(.[/datum/gear_tweak/path]) + .[/datum/gear_tweak/path] |= list( + "comb" = /obj/item/grooming/comb/colorable, + "butterfly comb" = /obj/item/grooming/comb/butterfly/colorable, + "brush" = /obj/item/grooming/brush/colorable, + "file" = /obj/item/grooming/file/colorable + ) /decl/loadout_option/mask name = "sterile mask" path = /obj/item/clothing/mask/surgical cost = 2 + uid = "gear_misc_mask" /decl/loadout_option/smokingpipe name = "pipe, smoking" path = /obj/item/clothing/mask/smokable/pipe + uid = "gear_misc_pipe" /decl/loadout_option/cornpipe name = "pipe, corn" path = /obj/item/clothing/mask/smokable/pipe/cobpipe + uid = "gear_misc_cornpipe" /decl/loadout_option/matchbook name = "matchbook" path = /obj/item/storage/box/matches + uid = "gear_misc_matches" /decl/loadout_option/lighter name = "cheap lighter" path = /obj/item/flame/lighter + uid = "gear_misc_lighter" /decl/loadout_option/lighter/get_gear_tweak_options() . = ..() @@ -108,20 +144,24 @@ /decl/loadout_option/ashtray name = "ashtray, plastic" path = /obj/item/ashtray/plastic + uid = "gear_misc_ashtray" /decl/loadout_option/ecig name = "electronic cigarette" path = /obj/item/clothing/mask/smokable/ecig/util + uid = "gear_misc_ecig" /decl/loadout_option/ecig/deluxe name = "electronic cigarette, deluxe" path = /obj/item/clothing/mask/smokable/ecig/deluxe cost = 2 + uid = "gear_misc_ecig_deluxe" /decl/loadout_option/bible name = "holy book" path = /obj/item/storage/bible cost = 2 + uid = "gear_misc_bible" /decl/loadout_option/bible/get_gear_tweak_options() . = ..() @@ -139,6 +179,7 @@ name = "cross" path = /obj/item/cross cost = 2 + uid = "gear_misc_cross" /decl/loadout_option/cross/get_gear_tweak_options() . = ..() @@ -150,14 +191,16 @@ ) /decl/loadout_option/wallet - name = "wallet, colour select" + name = "wallet, color select" path = /obj/item/storage/wallet loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_misc_wallet" /decl/loadout_option/wallet_poly name = "wallet, polychromic" path = /obj/item/storage/wallet/poly cost = 2 + uid = "gear_misc_wallet_poly" /decl/loadout_option/swiss @@ -165,3 +208,4 @@ path = /obj/item/knife/folding/swiss cost = 4 loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_misc_multitool" diff --git a/code/modules/client/preference_setup/loadout/lists/suits.dm b/code/modules/client/preference_setup/loadout/lists/suits.dm index eccfe386093..763fe2441e3 100644 --- a/code/modules/client/preference_setup/loadout/lists/suits.dm +++ b/code/modules/client/preference_setup/loadout/lists/suits.dm @@ -11,10 +11,12 @@ path = /obj/item/clothing/suit/poncho/colored cost = 1 loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_suit_poncho" /decl/loadout_option/suit/suit_jacket name = "standard suit jackets" path = /obj/item/clothing/suit/storage/toggle/suit + uid = "gear_suit_jackets" /decl/loadout_option/suit/suit_jacket/get_gear_tweak_options() . = ..() @@ -26,23 +28,27 @@ ) /decl/loadout_option/suit/custom_suit_jacket - name = "suit jacket, colour select" + name = "suit jacket, color select" path = /obj/item/clothing/suit/storage/toggle/suit loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_suit_jackets_color" /decl/loadout_option/suit/hoodie - name = "hoodie, colour select" + name = "hoodie, color select" path = /obj/item/clothing/suit/storage/toggle/hoodie loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_suit_hoodie" /decl/loadout_option/suit/coat - name = "coat, colour select" + name = "coat, color select" path = /obj/item/clothing/suit/storage/toggle/labcoat/coat loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_suit_coat" /decl/loadout_option/suit/leather name = "jacket selection" path = /obj/item/clothing/suit + uid = "gear_suit_leather_jacket" /decl/loadout_option/suit/leather/get_gear_tweak_options() . = ..() @@ -56,26 +62,31 @@ /decl/loadout_option/suit/wintercoat name = "winter coat" path = /obj/item/clothing/suit/storage/toggle/wintercoat + uid = "gear_suit_winter_coat" /decl/loadout_option/suit/track name = "track jacket selection" path = /obj/item/clothing/suit/storage/toggle/track loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_suit_track_jacket" /decl/loadout_option/suit/blueapron name = "apron, blue" path = /obj/item/clothing/suit/apron cost = 1 + uid = "gear_suit_apron" /decl/loadout_option/suit/overalls name = "apron, overalls" path = /obj/item/clothing/suit/apron/overalls cost = 1 + uid = "gear_suit_overalls" /decl/loadout_option/suit/trenchcoat name = "trenchcoat selection" path = /obj/item/clothing/suit cost = 3 + uid = "gear_suit_trenchcoat" /decl/loadout_option/suit/trenchcoat/get_gear_tweak_options() . = ..() @@ -87,13 +98,15 @@ ) /decl/loadout_option/suit/letterman_custom - name = "letterman jacket, colour select" + name = "letterman jacket, color select" path = /obj/item/clothing/suit/letterman loadout_flags = GEAR_HAS_COLOR_SELECTION cost = 1 + uid = "gear_suit_letterman" /decl/loadout_option/suit/cloak name = "plain cloak" path = /obj/item/clothing/accessory/cloak loadout_flags = GEAR_HAS_COLOR_SELECTION cost = 3 + uid = "gear_suit_cloak" diff --git a/code/modules/client/preference_setup/loadout/lists/uniforms.dm b/code/modules/client/preference_setup/loadout/lists/uniforms.dm index 0db5d7f321b..162f2ce6eb9 100644 --- a/code/modules/client/preference_setup/loadout/lists/uniforms.dm +++ b/code/modules/client/preference_setup/loadout/lists/uniforms.dm @@ -7,22 +7,26 @@ abstract_type = /decl/loadout_option/uniform /decl/loadout_option/uniform/jumpsuit - name = "jumpsuit, colour select" + name = "jumpsuit, color select" path = /obj/item/clothing/under/color loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_jumpsuit" /decl/loadout_option/uniform/shortjumpskirt - name = "short jumpskirt, colour select" + name = "short jumpskirt, color select" path = /obj/item/clothing/under/shortjumpskirt loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_jumpskirt" /decl/loadout_option/uniform/blackjumpshorts name = "black jumpsuit shorts" path = /obj/item/clothing/under/color/blackjumpshorts + uid = "gear_under_jumpshorts" /decl/loadout_option/uniform/suit name = "clothes selection" path = /obj/item/clothing/under + uid = "gear_under_clothes" /decl/loadout_option/uniform/suit/get_gear_tweak_options() . = ..() @@ -59,6 +63,7 @@ /decl/loadout_option/uniform/dress name = "dress selection" path = /obj/item/clothing/under + uid = "gear_under_dress" /decl/loadout_option/uniform/dress/get_gear_tweak_options() . = ..() @@ -74,65 +79,78 @@ ) /decl/loadout_option/uniform/cheongsam - name = "cheongsam, colour select" + name = "cheongsam, color select" path = /obj/item/clothing/under/cheongsam loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_cheongsam" /decl/loadout_option/uniform/abaya - name = "abaya, colour select" + name = "abaya, color select" path = /obj/item/clothing/under/abaya loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_abaya" /decl/loadout_option/uniform/skirt name = "skirt selection" path = /obj/item/clothing/under/skirt loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_skirt" /decl/loadout_option/uniform/skirt_c - name = "short skirt, colour select" + name = "short skirt, color select" path = /obj/item/clothing/under/skirt_c loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_skirt_c" /decl/loadout_option/uniform/skirt_c/dress - name = "simple dress, colour select" + name = "simple dress, color select" path = /obj/item/clothing/under/skirt_c/dress loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_simple_dress" /decl/loadout_option/uniform/casual_pants name = "casual pants selection" path = /obj/item/clothing/pants/casual loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_pants" /decl/loadout_option/uniform/formal_pants name = "formal pants selection" path = /obj/item/clothing/pants/formal loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_pants_formal" /decl/loadout_option/uniform/formal_pants/baggycustom - name = "baggy suit pants, colour select" + name = "baggy suit pants, color select" path = /obj/item/clothing/pants/baggy loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_pants_baggy" /decl/loadout_option/uniform/shorts name = "shorts selection" path = /obj/item/clothing/pants/shorts loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_shorts" /decl/loadout_option/uniform/shorts/custom - name = "athletic shorts, colour select" + name = "athletic shorts, color select" path = /obj/item/clothing/pants/shorts/athletic loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_shorts_athletic" /decl/loadout_option/uniform/turtleneck - name = "sweater, colour select" + name = "sweater, color select" path = /obj/item/clothing/under/psych/turtleneck/sweater loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_sweater" /decl/loadout_option/uniform/kimono - name = "kimono, colour select" + name = "kimono, color select" path = /obj/item/clothing/under/kimono loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_under_kimono" /decl/loadout_option/uniform/frontier name = "frontier clothes" path = /obj/item/clothing/under/frontier + uid = "gear_under_frontier" diff --git a/code/modules/client/preference_setup/loadout/lists/utility.dm b/code/modules/client/preference_setup/loadout/lists/utility.dm index 168a0d635e7..618d43b426d 100644 --- a/code/modules/client/preference_setup/loadout/lists/utility.dm +++ b/code/modules/client/preference_setup/loadout/lists/utility.dm @@ -9,18 +9,22 @@ /decl/loadout_option/utility/briefcase name = "briefcase" path = /obj/item/storage/briefcase + uid = "gear_utility_briefcase" /decl/loadout_option/utility/clipboard name = "clipboard" path = /obj/item/clipboard + uid = "gear_utility_clipboard" /decl/loadout_option/utility/folder name = "folders" path = /obj/item/folder + uid = "gear_utility_folders" /decl/loadout_option/utility/taperecorder name = "tape recorder" path = /obj/item/taperecorder + uid = "gear_utility_taperecorder" /decl/loadout_option/utility/folder/get_gear_tweak_options() . = ..() @@ -36,38 +40,46 @@ /decl/loadout_option/utility/paicard name = "personal AI device" path = /obj/item/paicard + uid = "gear_utility_pai" /decl/loadout_option/utility/camera name = "camera" path = /obj/item/camera + uid = "gear_utility_camera" /decl/loadout_option/utility/photo_album name = "photo album" path = /obj/item/storage/photo_album + uid = "gear_utility_album" /decl/loadout_option/utility/film_roll name = "film roll" path = /obj/item/camera_film + uid = "gear_utility_film" /decl/loadout_option/utility/pen name = "multicolored pen" path = /obj/item/pen/multi cost = 2 + uid = "gear_utility_pen" /decl/loadout_option/utility/fancy name = "fancy pen" path = /obj/item/pen/fancy cost = 2 - -/decl/loadout_option/utility/knives - name = "utility knife selection" - description = "A selection of knives." - path = /obj/item/knife + uid = "gear_utility_pen_fancy" /decl/loadout_option/utility/umbrella name = "umbrella" path = /obj/item/umbrella loadout_flags = GEAR_HAS_COLOR_SELECTION + uid = "gear_utility_umbrella" + +/decl/loadout_option/utility/knives + name = "utility knife selection" + description = "A selection of knives." + path = /obj/item/knife + uid = "gear_utility_knives" /decl/loadout_option/utility/knives/get_gear_tweak_options() . = ..() diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 1ae8a39b553..e1ac9246883 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -1,5 +1,3 @@ -var/global/list/gear_datums = list() - /datum/preferences var/list/gear_list //Custom/fluff item loadouts. var/gear_slot = 1 //The current gear save slot @@ -38,7 +36,7 @@ var/global/list/gear_datums = list() return /decl/loadout_option/proc/can_afford(var/mob/user, var/datum/preferences/pref) - if(cost > 0 && (pref.total_loadout_cost + cost) > config.max_gear_cost) + if(cost > 0 && (pref.total_loadout_cost + cost) > get_config_value(/decl/config/num/max_gear_cost)) return FALSE var/decl/loadout_category/LC = GET_DECL(category) if(!LC || pref.total_loadout_selections[category] >= LC.max_selections) @@ -50,9 +48,6 @@ var/global/list/gear_datums = list() if(!category) return FALSE - if(!name || !(name in global.gear_datums)) - return FALSE - if(whitelisted) if(!user) return FALSE @@ -77,25 +72,35 @@ var/global/list/gear_datums = list() /datum/category_item/player_setup_item/loadout/sanitize_character() - pref.gear_slot = sanitize_integer(pref.gear_slot, 1, config.loadout_slots, initial(pref.gear_slot)) + var/loadout_slots = get_config_value(/decl/config/num/loadout_slots) + pref.gear_slot = sanitize_integer(pref.gear_slot, 1, loadout_slots, initial(pref.gear_slot)) if(!islist(pref.gear_list)) pref.gear_list = list() - if(pref.gear_list.len < config.loadout_slots) - pref.gear_list.len = config.loadout_slots + if(pref.gear_list.len < loadout_slots) + pref.gear_list.len = loadout_slots - for(var/index = 1 to config.loadout_slots) + for(var/index = 1 to loadout_slots) pref.total_loadout_cost = 0 pref.total_loadout_selections = list() var/list/gears = pref.gear_list[index] if(istype(gears)) - for(var/gear_name in gears) + for(var/gear_id in gears) var/mob/user = preference_mob() - var/decl/loadout_option/LO = global.gear_datums[gear_name] - if(!LO || !LO.can_be_taken_by(user, pref) || !LO.can_afford(user, pref)) - gears -= gear_name - else + var/decl/loadout_option/LO = decls_repository.get_decl_by_id_or_var(gear_id, /decl/loadout_option) + + if(!istype(LO)) + gears -= gear_id + continue + + // Swap names for UIDs to grandfather in old saves. + if(LO.uid != gear_id) + gears[LO.uid] = gears[gear_id] + gears -= gear_id + gear_id = LO.uid + + if(LO && (GET_DECL(LO.category) in global.using_map.loadout_categories) && LO.can_be_taken_by(user, pref) && LO.can_afford(user, pref)) pref.total_loadout_cost += LO.cost pref.total_loadout_selections[LO.category] = (pref.total_loadout_selections[LO.category] + 1) else @@ -108,7 +113,7 @@ var/global/list/gear_datums = list() var/list/gears = pref.gear_list[pref.gear_slot] for(var/i = 1; i <= gears.len; i++) - var/decl/loadout_option/G = global.gear_datums[gears[i]] + var/decl/loadout_option/G = decls_repository.get_decl_by_id_or_var(gears[i], /decl/loadout_option) if(G) pref.total_loadout_cost += G.cost pref.total_loadout_selections[G.category] = (pref.total_loadout_selections[G.category] + 1) @@ -118,30 +123,30 @@ var/global/list/gear_datums = list() recalculate_loadout_cost() var/fcolor = COLOR_CYAN_BLUE - if(pref.total_loadout_cost < config.max_gear_cost) + var/max_gear_cost = get_config_value(/decl/config/num/max_gear_cost) + if(pref.total_loadout_cost < max_gear_cost) fcolor = COLOR_FONT_ORANGE . += "
    " . += "" . += "" @@ -171,17 +176,17 @@ var/global/list/gear_datums = list() dd_insertObjectList(jobs, J) var/mob/user = preference_mob() - for(var/gear_name in current_category_decl.gear) + for(var/gear_id in current_category_decl.gear) - var/decl/loadout_option/G = current_category_decl.gear[gear_name] + var/decl/loadout_option/G = current_category_decl.gear[gear_id] if(!G.can_be_taken_by(user, pref)) continue - var/ticked = (G.name in pref.gear_list[pref.gear_slot]) + var/ticked = (G.uid in pref.gear_list[pref.gear_slot]) var/list/entry = list() entry += "" entry += "" - entry += "") + + . += "" + + . += "" + + . += "" + + . += "" + + . += "" + . += "" + + . = JOINTEXT(.) + +/decl/stack_recipe/proc/can_be_made_from(stack_type, tool_type, decl/material/mat, decl/material/reinf_mat) + + // Check if they're using the appropriate materials. + if(ispath(required_material) && !istype(mat, required_material)) + return FALSE + else if(required_material == MATERIAL_FORBIDDEN && mat) + return FALSE + else if(required_material == MATERIAL_REQUIRED && !mat) + return FALSE + + if(ispath(required_reinforce_material) && !istype(reinf_mat, required_reinforce_material)) + return FALSE + else if(required_reinforce_material == MATERIAL_FORBIDDEN && reinf_mat) + return FALSE + else if(required_reinforce_material == MATERIAL_REQUIRED && !reinf_mat) + return FALSE + + // Check if the material has the appropriate properties. + if(mat) + if(!isnull(required_wall_support_value) && mat.wall_support_value < required_wall_support_value) + return FALSE + if(!isnull(required_integrity) && mat.integrity < required_integrity) + return FALSE + if(!isnull(required_hardness) && mat.hardness < required_hardness) + return FALSE + if(!isnull(required_max_opacity) && mat.opacity > required_max_opacity) + return FALSE + + // Check if they're using the right tool. + if(required_tool) + + // No tool provided. + if(!ispath(tool_type, /decl/tool_archetype)) + return FALSE + + // Check if it's in our list. + if(islist(required_tool)) + var/found_tool + for(var/req_type in required_tool) + if(ispath(tool_type, req_type)) + found_tool = TRUE + break + if(!found_tool) + return FALSE + else if(!ispath(tool_type, required_tool)) + return FALSE + + // Check if they're using the required stack type. + if(!isnull(craft_stack_types)) + + // No stack provided. + if(!ispath(stack_type, /obj/item/stack)) + return FALSE + + // Check if it's in the whitelist. + if(islist(craft_stack_types)) + var/found_stack + for(var/req_type in craft_stack_types) + if(ispath(stack_type, req_type)) + found_stack = TRUE + break + if(!found_stack) + return FALSE + else if(!ispath(stack_type, craft_stack_types)) + return FALSE + + // Check if the stack type is forbidden for this recipe. + if(stack_type && !isnull(forbidden_craft_stack_types)) + if(islist(forbidden_craft_stack_types)) + for(var/bad_type in forbidden_craft_stack_types) + if(ispath(stack_type, bad_type)) + return FALSE + else if(ispath(stack_type, forbidden_craft_stack_types)) + return FALSE + + // All good! + return TRUE + +/decl/stack_recipe/proc/update_req_amount() + if(result_type && isnull(req_amount)) + req_amount = 0 + var/list/materials + materials = atom_info_repository.get_matter_for(result_type, (ispath(required_material) ? required_material : null), res_amount) + for(var/mat in materials) + req_amount += round(materials[mat]/res_amount) + req_amount = clamp(CEILING(((req_amount*crafting_extra_cost_factor)/SHEET_MATERIAL_AMOUNT) * res_amount), 1, 50) + +/decl/stack_recipe/proc/get_display_name(amount, decl/material/mat, decl/material/reinf_mat, apply_article = TRUE) + var/material_strings + if(apply_material_name) + if(mat && required_material != MATERIAL_FORBIDDEN) + LAZYDISTINCTADD(material_strings, mat.use_name) + if(reinf_mat && required_reinforce_material != MATERIAL_FORBIDDEN) + LAZYDISTINCTADD(material_strings, reinf_mat.use_name) + if(LAZYLEN(material_strings)) + material_strings = "[english_list(material_strings)]" + if(amount > 1) + . = jointext(list("[amount]x", material_strings, name_plural), " ") + else + . = jointext(list(material_strings, name), " ") + if(apply_article) + if(gender == PLURAL) + . = "some [.]" + else + . = ADD_ARTICLE(.) + +/decl/stack_recipe/proc/req_mat_to_type(decl/material/mat, mat_req) + if(mat_req != MATERIAL_FORBIDDEN) + if(istype(mat)) + return mat.type + if(ispath(mat, /decl/material)) + return mat + return null + +/decl/stack_recipe/proc/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/atom/O + + //TODO: standardize material argument passing in Initialize(). + if(ispath(result_type, /obj/item/stack)) // Amount is set manually in some overrides as well. + O = new result_type(location, amount, MATERIAL_RECIPE_PARAMS) + else + O = new result_type(location, MATERIAL_RECIPE_PARAMS) + + if(user && set_dir_on_spawn) + O.set_dir(user?.dir) + + // Temp block pending material/matter rework + if(mat && mat?.type != DEFAULT_FURNITURE_MATERIAL && istype(O, /obj)) + var/obj/struct = O + if(LAZYACCESS(struct.matter, DEFAULT_FURNITURE_MATERIAL) > 0) + struct.matter[mat.type] = max(struct.matter[mat.type], struct.matter[DEFAULT_FURNITURE_MATERIAL]) + struct.matter -= DEFAULT_FURNITURE_MATERIAL + // End temp block + + if(user && istype(O, /obj/item/stack)) + var/obj/item/stack/S = O + S.add_to_stacks(user, 1) + + if(!QDELETED(O)) + return O + +/decl/stack_recipe/proc/can_make(mob/user) + if (one_per_turf && (locate(result_type) in user.loc)) + to_chat(user, SPAN_WARNING("There is already [get_display_name(1)] here!")) + return FALSE + var/turf/T = get_turf(user.loc) + if (on_floor && (!istype(T) || !T.is_floor())) + to_chat(user, SPAN_WARNING("[capitalize(get_display_name(1))] must be constructed on the floor!")) + return FALSE + return TRUE diff --git a/code/modules/crafting/stack_recipes/_recipe_getter.dm b/code/modules/crafting/stack_recipes/_recipe_getter.dm new file mode 100644 index 00000000000..86254343da2 --- /dev/null +++ b/code/modules/crafting/stack_recipes/_recipe_getter.dm @@ -0,0 +1,48 @@ + +/* + * Recipe list datum + */ +/datum/stack_recipe_list + var/name + var/list/recipes = null + +/datum/stack_recipe_list/New(_name, list/_recipes) + name = _name + recipes = _recipes + +/datum/stack_recipe_list/proc/get_list_display(mob/user, obj/item/stack/stack) + return "" + +/* + * Recipe retrieval proc. + */ +var/global/list/cached_recipes = list() +/proc/get_stack_recipes(decl/material/mat, decl/material/reinf_mat, stack_type, tool_type) + + // No recipes for holograms or fluids. + if(istype(mat) && (mat.holographic || mat.phase_at_temperature() != MAT_PHASE_SOLID)) + return list() + + // Check if we've cached this before. + var/key = jointext(list((mat?.name || "base"), (reinf_mat?.name || "base"), (stack_type || "base"), (tool_type || "base")), "-") + . = global.cached_recipes[key] + if(!.) + + . = list() + + // Collect our recipes, grouping as appropriate. + var/list/grouped_recipes = list() + var/list/all_recipes = decls_repository.get_decls_of_subtype(/decl/stack_recipe) + for(var/recipe_type in all_recipes) + var/decl/stack_recipe/recipe = all_recipes[recipe_type] + if(recipe.can_be_made_from(stack_type, tool_type, mat, reinf_mat)) + if(recipe.category) + LAZYDISTINCTADD(grouped_recipes[recipe.category], recipe) + else + . |= recipe + + // Turn groups into recipe lists. + if(length(grouped_recipes)) + for(var/group_name in grouped_recipes) + . += new /datum/stack_recipe_list(group_name, grouped_recipes[group_name]) + global.cached_recipes[key] = . diff --git a/code/modules/crafting/stack_recipes/recipe_structures.dm b/code/modules/crafting/stack_recipes/recipe_structures.dm new file mode 100644 index 00000000000..63b5c66447f --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipe_structures.dm @@ -0,0 +1,7 @@ +/decl/stack_recipe/anomaly_container + result_type = /obj/structure/anomaly_container + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_VERY_HARD_DIY + apply_material_name = FALSE + required_material = /decl/material/solid/metal/chromium diff --git a/code/modules/crafting/stack_recipes/recipes_bricks.dm b/code/modules/crafting/stack_recipes/recipes_bricks.dm new file mode 100644 index 00000000000..cf935cb4ff4 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_bricks.dm @@ -0,0 +1,51 @@ +/decl/stack_recipe/bricks + abstract_type = /decl/stack_recipe/bricks + craft_stack_types = list( + /obj/item/stack/material/brick, + /obj/item/stack/material/slab + ) + forbidden_craft_stack_types = list( + /obj/item/stack/material/ore, + /obj/item/stack/material/log, + /obj/item/stack/material/lump + ) + +/decl/stack_recipe/bricks/furniture + abstract_type = /decl/stack_recipe/bricks/furniture + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/bricks/furniture/planting_bed + result_type = /obj/machinery/portable_atmospherics/hydroponics/soil + req_amount = 3 // Arbitrary value since machines don't handle matter properly yet. + +/decl/stack_recipe/bricks/furniture/planting_bed/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(location) + +/decl/stack_recipe/bricks/fountain + result_type = /obj/structure/fountain/mundane + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_VERY_HARD_DIY + +/decl/stack_recipe/turfs/wall/brick + name = "brick wall" + result_type = /turf/simulated/wall/brick + craft_stack_types = /obj/item/stack/material/brick + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/turfs/path/brick + name = "cobblestone path" + result_type = /turf/exterior/path + craft_stack_types = /obj/item/stack/material/brick + +/decl/stack_recipe/turfs/path/brick/herringbone + name = "herringbone path" + result_type = /turf/exterior/path/herringbone + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/turfs/path/brick/running_bond + name = "running bond path" + result_type = /turf/exterior/path/running_bond + difficulty = MAT_VALUE_HARD_DIY diff --git a/code/modules/crafting/stack_recipes/recipes_cardstock.dm b/code/modules/crafting/stack_recipes/recipes_cardstock.dm new file mode 100644 index 00000000000..ba61fb30e10 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_cardstock.dm @@ -0,0 +1,51 @@ +/decl/stack_recipe/cardstock + abstract_type = /decl/stack_recipe/cardstock + craft_stack_types = /obj/item/stack/material/cardstock + +/decl/stack_recipe/cardstock/box + result_type = /obj/item/storage/box + +/decl/stack_recipe/cardstock/box/large + result_type = /obj/item/storage/box/large + +/decl/stack_recipe/cardstock/box/donut + result_type = /obj/item/storage/box/fancy/donut/empty + +/decl/stack_recipe/cardstock/box/egg + result_type = /obj/item/storage/box/fancy/egg_box/empty + +/decl/stack_recipe/cardstock/box/light_tubes + result_type = /obj/item/storage/box/lights/tubes/empty + +/decl/stack_recipe/cardstock/box/light_bulbs + result_type = /obj/item/storage/box/lights/bulbs/empty + +/decl/stack_recipe/cardstock/box/mouse_traps + result_type = /obj/item/storage/box/mousetraps/empty + +/decl/stack_recipe/cardstock/box/pizza + result_type = /obj/item/pizzabox + +/decl/stack_recipe/cardstock/cardborg_suit + result_type = /obj/item/clothing/suit/cardborg + difficulty = MAT_VALUE_EASY_DIY + +/decl/stack_recipe/cardstock/cardborg_helmet + result_type = /obj/item/clothing/head/cardborg + difficulty = MAT_VALUE_EASY_DIY + +/decl/stack_recipe/cardstock/folder + result_type = /obj/item/folder + category = "folders" + +/decl/stack_recipe/cardstock/folder/yellow + result_type = /obj/item/folder/yellow + +/decl/stack_recipe/cardstock/folder/cyan + result_type = /obj/item/folder/cyan + +/decl/stack_recipe/cardstock/folder/red + result_type = /obj/item/folder/red + +/decl/stack_recipe/cardstock/folder/blue + result_type = /obj/item/folder/blue diff --git a/code/modules/crafting/stack_recipes/recipes_coins.dm b/code/modules/crafting/stack_recipes/recipes_coins.dm new file mode 100644 index 00000000000..5bea61be0a3 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_coins.dm @@ -0,0 +1,32 @@ +// These are tracked/validated by currency decls. +/decl/stack_recipe/coin + name = "antique coin" + result_type = /obj/item/coin + required_hardness = MAT_VALUE_FLEXIBLE + category = "antique coins" + abstract_type = /decl/stack_recipe/coin + var/currency + var/datum/denomination/denomination + +/decl/stack_recipe/coin/Initialize() + . = ..() + var/decl/currency/currency_decl = GET_DECL(currency) + if(currency_decl && name) + for(var/datum/denomination/currency_denomination in currency_decl.denominations) + if(currency_denomination.name == name) + denomination = currency_denomination + return + +/decl/stack_recipe/coin/validate() + . = ..() + if(!ispath(currency, /decl/currency)) + . += "invalid or null currency: [currency || "NULL"]" + if(!istype(denomination)) + . += "invalid or null denomination: [denomination || "NULL"]" + +/decl/stack_recipe/coin/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/item/coin/coin = ..() + if(istype(coin) && istype(denomination)) + coin.denomination = denomination + coin.SetName(coin.denomination.name) + return coin diff --git a/code/modules/crafting/stack_recipes/recipes_hardness.dm b/code/modules/crafting/stack_recipes/recipes_hardness.dm new file mode 100644 index 00000000000..1aadc30a670 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_hardness.dm @@ -0,0 +1,59 @@ +/decl/stack_recipe/hardness + abstract_type = /decl/stack_recipe/hardness + required_hardness = MAT_VALUE_FLEXIBLE + 10 + +/decl/stack_recipe/improvised_armour + result_type = /obj/item/clothing/suit/armor/crafted + +/decl/stack_recipe/armguards + result_type = /obj/item/clothing/accessory/armguards/craftable + +/decl/stack_recipe/legguards + result_type = /obj/item/clothing/accessory/legguards/craftable + +/decl/stack_recipe/gauntlets + result_type = /obj/item/clothing/gloves/thick/craftable + +/decl/stack_recipe/fork + result_type = /obj/item/utensil/fork + +/decl/stack_recipe/chopsticks + result_type = /obj/item/utensil/chopsticks + +/decl/stack_recipe/knife + result_type = /obj/item/utensil/knife + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/bell + result_type = /obj/item/bell + +/decl/stack_recipe/spoon + result_type = /obj/item/utensil/spoon + +/decl/stack_recipe/blade + result_type = /obj/item/butterflyblade + difficulty = MAT_VALUE_NORMAL_DIY + +/decl/stack_recipe/urn + result_type = /obj/item/urn + +/decl/stack_recipe/drill_head + result_type = /obj/item/drill_head + difficulty = MAT_VALUE_EASY_DIY + +/decl/stack_recipe/baseball_bat + result_type = /obj/item/twohanded/baseballbat + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/ashtray + result_type = /obj/item/ashtray + +/decl/stack_recipe/ring + result_type = /obj/item/clothing/ring/material + +/decl/stack_recipe/clipboard + result_type = /obj/item/clipboard + +/decl/stack_recipe/cross + result_type = /obj/item/cross + on_floor = TRUE diff --git a/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm new file mode 100644 index 00000000000..3f71a8a387d --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm @@ -0,0 +1,79 @@ +/decl/stack_recipe/hardness/integrity + abstract_type = /decl/stack_recipe/hardness/integrity + required_integrity = 50 + +/decl/stack_recipe/hardness/integrity/furniture + abstract_type = /decl/stack_recipe/hardness/integrity/furniture + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/hardness/integrity/furniture/door + result_type = /obj/structure/door + req_amount = 5 // Arbitrary value since doors return weird matter values. + +/decl/stack_recipe/hardness/integrity/furniture/barricade + result_type = /obj/structure/barricade + +/decl/stack_recipe/hardness/integrity/furniture/banner_frame + result_type = /obj/structure/banner_frame + +/decl/stack_recipe/hardness/integrity/furniture/coatrack + result_type = /obj/structure/coatrack + +/decl/stack_recipe/hardness/integrity/furniture/stool + result_type = /obj/item/stool + category = "seating" + +/decl/stack_recipe/hardness/integrity/furniture/bar_stool + result_type = /obj/item/stool/bar + category = "seating" + +/decl/stack_recipe/hardness/integrity/furniture/pew + result_type = /obj/structure/bed/chair/pew + category = "seating" + +/decl/stack_recipe/hardness/integrity/furniture/pew/left + result_type = /obj/structure/bed/chair/pew/left + +/decl/stack_recipe/hardness/integrity/furniture/closet + result_type = /obj/structure/closet + +/decl/stack_recipe/hardness/integrity/furniture/tank_dispenser + result_type = /obj/structure/tank_rack + +/decl/stack_recipe/hardness/integrity/furniture/coffin + result_type = /obj/structure/closet/coffin + +/decl/stack_recipe/hardness/integrity/furniture/chair + result_type = /obj/structure/bed/chair + category = "seating" + +/decl/stack_recipe/hardness/integrity/furniture/chair/padded + result_type = /obj/structure/bed/chair/padded + +/decl/stack_recipe/hardness/integrity/furniture/chair/office + +/decl/stack_recipe/hardness/integrity/furniture/chair/office/comfy + result_type = /obj/structure/bed/chair/office/comfy + +/decl/stack_recipe/hardness/integrity/furniture/chair/comfy + result_type = /obj/structure/bed/chair/comfy/unpadded + +/decl/stack_recipe/hardness/integrity/furniture/chair/arm + result_type = /obj/structure/bed/chair/armchair + +/decl/stack_recipe/hardness/integrity/furniture/chair/roundedchair + result_type = /obj/structure/bed/chair/rounded + +/decl/stack_recipe/hardness/integrity/lock + result_type = /obj/item/lock_construct + +/decl/stack_recipe/hardness/integrity/key + result_type = /obj/item/key + +/decl/stack_recipe/hardness/integrity/rod + result_type = /obj/item/stack/material/rods + res_amount = 2 + max_res_amount = 60 + difficulty = MAT_VALUE_NORMAL_DIY diff --git a/code/modules/crafting/stack_recipes/recipes_items.dm b/code/modules/crafting/stack_recipes/recipes_items.dm new file mode 100644 index 00000000000..93301624e93 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_items.dm @@ -0,0 +1,29 @@ +//Recipes that produce items which aren't stacks or storage. +/decl/stack_recipe/grenade + result_type = /obj/item/grenade/chem_grenade + difficulty = MAT_VALUE_VERY_HARD_DIY + required_material = /decl/material/solid/metal/aluminium + +/decl/stack_recipe/candle + result_type = /obj/item/flame/candle + difficulty = MAT_VALUE_EASY_DIY + required_material = /decl/material/solid/organic/wax + +/decl/stack_recipe/paper_sheets + name = "sheet of paper" + result_type = /obj/item/paper + res_amount = 4 + max_res_amount = 30 + required_material = /decl/material/solid/organic/paper + +/decl/stack_recipe/paper_sheets/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/item/paper/P = ..() + if(amount > 1) + var/obj/item/paper_bundle/B = new(location) + B.merge(P) + for(var/i = 1 to (amount - 1)) + if(B.get_amount_papers() >= B.max_pages) + B = new(location) + B.merge(new /obj/item/paper(location)) + return B + return P \ No newline at end of file diff --git a/code/modules/crafting/stack_recipes/recipes_logs.dm b/code/modules/crafting/stack_recipes/recipes_logs.dm new file mode 100644 index 00000000000..70f5c356dcd --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_logs.dm @@ -0,0 +1,21 @@ +/decl/stack_recipe/logs + abstract_type = /decl/stack_recipe/logs + craft_stack_types = /obj/item/stack/material/log + forbidden_craft_stack_types = /obj/item/stack/material/ore + +/decl/stack_recipe/logs/campfire + on_floor = TRUE + one_per_turf = TRUE + apply_material_name = FALSE + result_type = /obj/structure/fire_source + +// TODO: make this a firepit recipe using bricks or something instead. +/decl/stack_recipe/logs/campfire/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/structure/fire_source/product = ..(user, location, amount) // Discard the material since we're putting it into the fuel var. + if(product) + product.matter = null + product.material = null + product.update_materials(TRUE) + if(mat?.accelerant_value > FUEL_VALUE_NONE) + product.fuel += round(mat.accelerant_value * (req_amount * (amount / res_amount) * SHEET_MATERIAL_AMOUNT)) + return product diff --git a/code/modules/crafting/stack_recipes/recipes_opacity.dm b/code/modules/crafting/stack_recipes/recipes_opacity.dm new file mode 100644 index 00000000000..36263ab9ecf --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_opacity.dm @@ -0,0 +1,58 @@ +/decl/stack_recipe/opacity + abstract_type = /decl/stack_recipe/opacity + required_max_opacity = 0.5 + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + required_reinforce_material = MATERIAL_ALLOWED + craft_stack_types = list( + /obj/item/stack/material/pane, + /obj/item/stack/material/sheet, + /obj/item/stack/material/panel + ) + +/decl/stack_recipe/opacity/fullwindow + name = "full-tile window" + result_type = /obj/structure/window + max_res_amount = 1 + +/decl/stack_recipe/opacity/fullwindow/can_make(mob/user) + . = ..() + if(.) + for(var/obj/structure/window/check_window in user.loc) + if(check_window.is_fulltile()) + to_chat(user, SPAN_WARNING("There is already a full-tile window here!")) + return FALSE + +/decl/stack_recipe/opacity/fullwindow/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(user?.loc, MATERIAL_RECIPE_PARAMS, SOUTHWEST, TRUE) + +/decl/stack_recipe/opacity/borderwindow + name = "border window" + result_type = /obj/structure/window + one_per_turf = 0 + max_res_amount = 1 + +/decl/stack_recipe/opacity/borderwindow/can_make(mob/user) + . = ..() + if(.) + for(var/obj/structure/window/check_window in user.loc) + if(check_window.dir == user.dir) + to_chat(user, "There is already a window facing that direction here!") + return FALSE + +/decl/stack_recipe/opacity/borderwindow/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(user?.loc, MATERIAL_RECIPE_PARAMS, user?.dir, TRUE) + +/decl/stack_recipe/opacity/windoor + result_type = /obj/structure/windoor_assembly + max_res_amount = 1 + +/decl/stack_recipe/opacity/windoor/can_make(mob/user) + . = ..() + if(.) + if(locate(/obj/machinery/door/window) in user.loc) + to_chat(user, "There is already a windoor here!") + return FALSE + +/decl/stack_recipe/opacity/windoor/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(user?.loc, MATERIAL_RECIPE_PARAMS) diff --git a/code/modules/crafting/stack_recipes/recipes_panels.dm b/code/modules/crafting/stack_recipes/recipes_panels.dm new file mode 100644 index 00000000000..b5cfb8a6d8a --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_panels.dm @@ -0,0 +1,44 @@ +/decl/stack_recipe/panels + abstract_type = /decl/stack_recipe/panels + craft_stack_types = /obj/item/stack/material/panel + +/decl/stack_recipe/panels/bag + result_type = /obj/item/storage/bag/flimsy + on_floor = TRUE + +/decl/stack_recipe/panels/ivbag + result_type = /obj/item/chems/ivbag + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/panels/cartridge + difficulty = MAT_VALUE_HARD_DIY + category = "dispenser cartridges" + abstract_type = /decl/stack_recipe/panels/cartridge + +/decl/stack_recipe/panels/cartridge/small + name = "small dispenser cartridge" + result_type = /obj/item/chems/chem_disp_cartridge/small + +/decl/stack_recipe/panels/cartridge/medium + name = "medium dispenser cartridge" + result_type = /obj/item/chems/chem_disp_cartridge/medium + +/decl/stack_recipe/panels/cartridge/large + name = "large dispenser cartridge" + result_type = /obj/item/chems/chem_disp_cartridge + +/decl/stack_recipe/panels/hazard_cone + result_type = /obj/item/caution/cone + on_floor = TRUE + +/decl/stack_recipe/panels/furniture + abstract_type = /decl/stack_recipe/panels/furniture + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/panels/furniture/crate + result_type = /obj/structure/closet/crate/plastic + +/decl/stack_recipe/panels/furniture/flaps + result_type = /obj/structure/flaps diff --git a/code/modules/crafting/stack_recipes/recipes_planks.dm b/code/modules/crafting/stack_recipes/recipes_planks.dm new file mode 100644 index 00000000000..618af124e48 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_planks.dm @@ -0,0 +1,114 @@ +/decl/stack_recipe/planks + abstract_type = /decl/stack_recipe/planks + craft_stack_types = /obj/item/stack/material/plank + +/decl/stack_recipe/planks/sandals + result_type = /obj/item/clothing/shoes/sandal + +/decl/stack_recipe/planks/crossbowframe + result_type = /obj/item/crossbowframe + difficulty = MAT_VALUE_VERY_HARD_DIY + +/decl/stack_recipe/planks/beehive_assembly + result_type = /obj/item/beehive_assembly + +/decl/stack_recipe/planks/beehive_frame + result_type = /obj/item/honey_frame + +/decl/stack_recipe/planks/zipgunframe + result_type = /obj/item/zipgunframe + difficulty = MAT_VALUE_VERY_HARD_DIY + +/decl/stack_recipe/planks/coilgun + result_type = /obj/item/coilgun_assembly + difficulty = MAT_VALUE_VERY_HARD_DIY + +/decl/stack_recipe/planks/stick + result_type = /obj/item/stick + difficulty = MAT_VALUE_EASY_DIY + +/decl/stack_recipe/planks/noticeboard + result_type = /obj/structure/noticeboard + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + set_dir_on_spawn = FALSE + +/decl/stack_recipe/planks/noticeboard/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/structure/noticeboard/board = ..() + if(istype(board) && user) + board.set_dir(global.reverse_dir[user.dir]) + return board + +/decl/stack_recipe/planks/prosthetic + abstract_type = /decl/stack_recipe/planks/prosthetic + difficulty = MAT_VALUE_EASY_DIY + category = "prosthetics" + var/prosthetic_species = SPECIES_HUMAN + var/prosthetic_model = /decl/bodytype/prosthetic/wooden + +/decl/stack_recipe/planks/prosthetic/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/item/organ/external/limb = ..() + if(limb) + limb.set_species(prosthetic_species) + limb.set_bodytype(prosthetic_model, override_material = (required_material != MATERIAL_FORBIDDEN ? mat?.type : null)) + limb.status |= ORGAN_CUT_AWAY + return limb + +/decl/stack_recipe/planks/prosthetic/left_arm + result_type = /obj/item/organ/external/arm + +/decl/stack_recipe/planks/prosthetic/right_arm + result_type = /obj/item/organ/external/arm/right + +/decl/stack_recipe/planks/prosthetic/left_leg + result_type = /obj/item/organ/external/leg + +/decl/stack_recipe/planks/prosthetic/right_leg + result_type = /obj/item/organ/external/leg/right + +/decl/stack_recipe/planks/prosthetic/left_hand + result_type = /obj/item/organ/external/hand + +/decl/stack_recipe/planks/prosthetic/right_hand + result_type = /obj/item/organ/external/hand/right + +/decl/stack_recipe/planks/prosthetic/left_foot + result_type = /obj/item/organ/external/foot + +/decl/stack_recipe/planks/prosthetic/right_foot + result_type = /obj/item/organ/external/foot/right + +/decl/stack_recipe/planks/furniture + abstract_type = /decl/stack_recipe/planks/furniture + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/planks/furniture/coffin + result_type = /obj/structure/closet/coffin/wooden + +/decl/stack_recipe/planks/furniture/sofa + name = "sofa, middle" + result_type = /obj/structure/bed/sofa/middle/unpadded + category = "seating" + +/decl/stack_recipe/planks/furniture/sofa/left + name = "sofa, left" + result_type = /obj/structure/bed/sofa/left/unpadded + +/decl/stack_recipe/planks/furniture/sofa/right + name = "sofa, right" + result_type = /obj/structure/bed/sofa/right/unpadded + +/decl/stack_recipe/planks/furniture/bookcase + result_type = /obj/structure/bookcase + +/decl/stack_recipe/planks/furniture/book_cart + result_type = /obj/structure/bookcase/cart + +/decl/stack_recipe/planks/furniture/chair + result_type = /obj/structure/bed/chair/wood + category = "seating" + +/decl/stack_recipe/planks/furniture/chair/fancy + result_type = /obj/structure/bed/chair/wood/wings diff --git a/code/modules/crafting/stack_recipes/recipes_reinforced.dm b/code/modules/crafting/stack_recipes/recipes_reinforced.dm new file mode 100644 index 00000000000..83633f01146 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_reinforced.dm @@ -0,0 +1,17 @@ +/decl/stack_recipe/reinforced + abstract_type = /decl/stack_recipe/reinforced + craft_stack_types = /obj/item/stack/material/sheet/reinforced + one_per_turf = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/reinforced/ai_core + result_type = /obj/structure/aicore + on_floor = FALSE + +/decl/stack_recipe/reinforced/crate + result_type = /obj/structure/closet/crate + +/decl/stack_recipe/reinforced/grip + result_type = /obj/item/butterflyhandle + difficulty = MAT_VALUE_NORMAL_DIY + one_per_turf = FALSE diff --git a/code/modules/crafting/stack_recipes/recipes_stacks.dm b/code/modules/crafting/stack_recipes/recipes_stacks.dm new file mode 100644 index 00000000000..dd6e4fb293e --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_stacks.dm @@ -0,0 +1,86 @@ +// Tiles +/decl/stack_recipe/tile + abstract_type = /decl/stack_recipe/tile + req_amount = 1 + res_amount = 4 + max_res_amount = 20 + difficulty = MAT_VALUE_NORMAL_DIY + apply_material_name = FALSE + category = "tiling" + +/decl/stack_recipe/tile/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/obj/item/stack/S = ..() + if(istype(S)) + S.amount = amount + if(user) + S.add_to_stacks(user, 1) + return S + +/decl/stack_recipe/tile/wood + result_type = /obj/item/stack/tile/wood + required_material = /decl/material/solid/organic/wood + +/decl/stack_recipe/tile/mahogany + result_type = /obj/item/stack/tile/mahogany + required_material = /decl/material/solid/organic/wood/mahogany + +/decl/stack_recipe/tile/maple + result_type = /obj/item/stack/tile/maple + required_material = /decl/material/solid/organic/wood/maple + +/decl/stack_recipe/tile/ebony + difficulty = MAT_VALUE_VERY_HARD_DIY + result_type = /obj/item/stack/tile/ebony + required_material = /decl/material/solid/organic/wood/ebony + +/decl/stack_recipe/tile/walnut + result_type = /obj/item/stack/tile/walnut + required_material = /decl/material/solid/organic/wood/walnut + + +/decl/stack_recipe/tile/steel + abstract_type = /decl/stack_recipe/tile/steel + required_material = /decl/material/solid/metal/steel + +/decl/stack_recipe/tile/steel/floor + result_type = /obj/item/stack/tile/floor + +/decl/stack_recipe/tile/steel/roof + result_type = /obj/item/stack/tile/roof + +/decl/stack_recipe/tile/steel/mono + result_type = /obj/item/stack/tile/mono + +/decl/stack_recipe/tile/steel/mono_dark + result_type = /obj/item/stack/tile/mono/dark + +/decl/stack_recipe/tile/steel/grid + result_type = /obj/item/stack/tile/grid + +/decl/stack_recipe/tile/steel/ridged + result_type = /obj/item/stack/tile/ridge + +/decl/stack_recipe/tile/steel/tech_grey + result_type = /obj/item/stack/tile/techgrey + +/decl/stack_recipe/tile/steel/tech_grid + result_type = /obj/item/stack/tile/techgrid + +/decl/stack_recipe/tile/steel/tech_maint + result_type = /obj/item/stack/tile/techmaint + +/decl/stack_recipe/tile/steel/dark + result_type = /obj/item/stack/tile/floor_dark + +/decl/stack_recipe/tile/steel/pool + result_type = /obj/item/stack/tile/pool + +/decl/stack_recipe/tile/panels + abstract_type = /decl/stack_recipe/tile/panels + craft_stack_types = /obj/item/stack/material/panel + +/decl/stack_recipe/tile/panels/floor + result_type = /obj/item/stack/tile/floor_white + +/decl/stack_recipe/tile/panels/freezer + result_type = /obj/item/stack/tile/floor_freezer diff --git a/code/modules/crafting/stack_recipes/recipes_steel.dm b/code/modules/crafting/stack_recipes/recipes_steel.dm new file mode 100644 index 00000000000..1bff388529d --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_steel.dm @@ -0,0 +1,111 @@ +/decl/stack_recipe/steel + abstract_type = /decl/stack_recipe/steel + required_material = /decl/material/solid/metal/steel + +/decl/stack_recipe/steel/apc + result_type = /obj/item/frame/apc + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/air_alarm + result_type = /obj/item/frame/air_alarm + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/fire_alarm + result_type = /obj/item/frame/fire_alarm + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/light + result_type = /obj/item/frame/light + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/light_small + result_type = /obj/item/frame/light/small + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/light_switch + result_type = /obj/item/frame/button/light_switch + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/light_switch/windowtint + result_type = /obj/item/frame/button/light_switch/windowtint + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/grenade/steel + required_material = /decl/material/solid/metal/steel + +/decl/stack_recipe/steel/cannon + result_type = /obj/item/cannonframe + difficulty = MAT_VALUE_VERY_HARD_DIY + +/decl/stack_recipe/steel/furniture + abstract_type = /decl/stack_recipe/steel/furniture + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/steel/furniture/computerframe + result_type = /obj/machinery/constructable_frame/computerframe + req_amount = 5 // Arbitrary value since machines don't handle matter properly yet. + +/decl/stack_recipe/steel/furniture/computerframe/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(location) + +/decl/stack_recipe/steel/furniture/door_assembly + name = "standard airlock assembly" + category = "airlock assemblies" + abstract_type = /decl/stack_recipe/steel/furniture/door_assembly + +/decl/stack_recipe/steel/furniture/door_assembly/standard + result_type = /obj/structure/door_assembly + +/decl/stack_recipe/steel/furniture/door_assembly/airtight + name = "airtight hatch assembly" + result_type = /obj/structure/door_assembly/door_assembly_hatch + +/decl/stack_recipe/steel/furniture/door_assembly/highsec + name = "high security airlock assembly" + result_type = /obj/structure/door_assembly/door_assembly_highsecurity + +/decl/stack_recipe/steel/furniture/door_assembly/ext + name = "exterior airlock assembly" + result_type = /obj/structure/door_assembly/door_assembly_ext + +/decl/stack_recipe/steel/furniture/door_assembly/firedoor + name = "emergency shutter assembly" + result_type = /obj/structure/firedoor_assembly + +/decl/stack_recipe/steel/furniture/door_assembly/firedoor/border + name = "unidirectional emergency shutter assembly" + result_type = /obj/structure/firedoor_assembly/border + one_per_turf = FALSE + +/decl/stack_recipe/steel/furniture/door_assembly/double + name = "double airlock assembly" + result_type = /obj/structure/door_assembly/double + +/decl/stack_recipe/steel/furniture/door_assembly/blast + name = "blast door assembly" + result_type = /obj/structure/door_assembly/blast + +/decl/stack_recipe/steel/furniture/door_assembly/shutter + name = "shutter assembly" + result_type = /obj/structure/door_assembly/blast/shutter + +/decl/stack_recipe/steel/furniture/door_assembly/morgue + name = "morgue door assembly" + result_type = /obj/structure/door_assembly/blast/morgue + +/decl/stack_recipe/steel/furniture/canister + result_type = /obj/machinery/portable_atmospherics/canister + req_amount = 20 // Arbitrary value since machines don't handle matter properly yet. + +/decl/stack_recipe/steel/furniture/tank + result_type = /obj/item/pipe/tank + +/decl/stack_recipe/steel/furniture/iv_drip + result_type = /obj/structure/iv_drip + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_NORMAL_DIY + apply_material_name = FALSE + time = 5 SECONDS diff --git a/code/modules/crafting/stack_recipes/recipes_struts.dm b/code/modules/crafting/stack_recipes/recipes_struts.dm new file mode 100644 index 00000000000..a1391378d52 --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_struts.dm @@ -0,0 +1,49 @@ +/decl/stack_recipe/strut + abstract_type = /decl/stack_recipe/strut + craft_stack_types = list( + /obj/item/stack/material/strut, + /obj/item/stack/material/bone + ) + one_per_turf = TRUE + on_floor = TRUE + difficulty = MAT_VALUE_HARD_DIY + +/decl/stack_recipe/strut/railing + result_type = /obj/structure/railing + +/decl/stack_recipe/strut/ladder + result_type = /obj/structure/ladder + on_floor = FALSE + required_wall_support_value = 10 + +/decl/stack_recipe/strut/girder + result_type = /obj/structure/girder + required_wall_support_value = 10 + req_amount = 5 // Arbitrary value since girders return weird matter values. + +/decl/stack_recipe/strut/wall_frame + result_type = /obj/structure/wall_frame + +/decl/stack_recipe/strut/table_frame + result_type = /obj/structure/table/frame + +/decl/stack_recipe/strut/rack + result_type = /obj/structure/rack + +/decl/stack_recipe/strut/butcher_hook + result_type = /obj/structure/kitchenspike + one_per_turf = TRUE + difficulty = MAT_VALUE_NORMAL_DIY + +/decl/stack_recipe/strut/bed + result_type = /obj/structure/bed + required_integrity = 50 + required_hardness = MAT_VALUE_FLEXIBLE + 10 + +/decl/stack_recipe/strut/machine + result_type = /obj/machinery/constructable_frame/machine_frame + req_amount = 5 // Arbitrary value since machines don't handle matter properly yet. + required_material = /decl/material/solid/metal/steel + +/decl/stack_recipe/strut/machine/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + return new result_type(location) diff --git a/code/modules/crafting/stack_recipes/recipes_textiles.dm b/code/modules/crafting/stack_recipes/recipes_textiles.dm new file mode 100644 index 00000000000..b8b2ffb3d6f --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_textiles.dm @@ -0,0 +1,18 @@ +/decl/stack_recipe/textiles + craft_stack_types = list( + /obj/item/stack/material/bolt, + /obj/item/stack/material/skin + ) + abstract_type = /decl/stack_recipe/textiles + +/decl/stack_recipe/textiles/cloak + result_type = /obj/item/clothing/accessory/cloak/hide + +/decl/stack_recipe/textiles/banner + result_type = /obj/item/banner + +/decl/stack_recipe/textiles/shoes + result_type = /obj/item/clothing/shoes/craftable + +/decl/stack_recipe/textiles/boots + result_type = /obj/item/clothing/shoes/craftable/boots diff --git a/code/modules/crafting/stack_recipes/recipes_turfs.dm b/code/modules/crafting/stack_recipes/recipes_turfs.dm new file mode 100644 index 00000000000..b29f37202af --- /dev/null +++ b/code/modules/crafting/stack_recipes/recipes_turfs.dm @@ -0,0 +1,42 @@ +/decl/stack_recipe/turfs + abstract_type = /decl/stack_recipe/turfs + expected_product_type = /turf + time = 5 SECONDS // Arbitrary value since turfs don't behave like objs in terms of w_class/time + req_amount = 5 // Arbitrary value since turfs have no matter return weird matter values. + max_res_amount = 1 + res_amount = 1 + +/decl/stack_recipe/turfs/can_make(mob/user) + . = ..() + if(.) + var/turf/T = get_turf(user.loc) + if(!istype(T) || !T.simulated || T.density) + return FALSE + if(T.is_open()) + to_chat(user, SPAN_WARNING("You cannot build on open space.")) + return FALSE + if(!T.is_plating()) + to_chat(user, SPAN_WARNING("You cannot build this on top of existing flooring.")) + return FALSE + return TRUE + +// See req_amount above. +/decl/stack_recipe/turfs/update_req_amount() + return + +/decl/stack_recipe/turfs/spawn_result(mob/user, location, amount, decl/material/mat, decl/material/reinf_mat) + var/turf/build_turf = get_turf(location) + if(!build_turf) + return + var/turf/result = build_turf.ChangeTurf(result_type) + if(istype(result)) + result.set_turf_materials(MATERIAL_RECIPE_PARAMS) + return result + +/decl/stack_recipe/turfs/wall + abstract_type = /decl/stack_recipe/turfs/wall + expected_product_type = /turf/simulated/wall + +/decl/stack_recipe/turfs/path + abstract_type = /decl/stack_recipe/turfs/path + expected_product_type = /turf/exterior diff --git a/code/modules/detectivework/evidence/_evidence_holder.dm b/code/modules/detectivework/evidence/_evidence_holder.dm index 355a5e26b2c..87eac9c4c5d 100644 --- a/code/modules/detectivework/evidence/_evidence_holder.dm +++ b/code/modules/detectivework/evidence/_evidence_holder.dm @@ -3,6 +3,8 @@ expected_type = /atom var/list/evidence // type=instance list of evidence types +SAVED_VAR(/datum/extension/forensic_evidence, evidence) + /datum/extension/forensic_evidence/Destroy() . = ..() for(var/T in evidence) @@ -21,7 +23,7 @@ var/datum/forensics/F = LAZYACCESS(evidence, evidence_type) evidence -= evidence_type qdel(F) - + /datum/extension/forensic_evidence/proc/has_evidence(evidence_type) return (evidence_type in evidence) diff --git a/code/modules/detectivework/evidence/_evidence_type.dm b/code/modules/detectivework/evidence/_evidence_type.dm index 631f8e4c148..7c6125e77d7 100644 --- a/code/modules/detectivework/evidence/_evidence_type.dm +++ b/code/modules/detectivework/evidence/_evidence_type.dm @@ -4,7 +4,9 @@ var/max_entries = 10 //will hold that many entries, removing oldest when overflown var/list/data var/remove_on_transfer //if it should be removed when picked up by forensic samplers - var/spot_skill = SKILL_EXPERT // at what Forensics skill level someone can see it on examine. Set to null, can never see it + var/spot_skill = SKILL_EXPERT // at what Forensics skill level someone can see it on examine. Set to null, can never see it + +SAVED_VAR(/datum/forensics, data) //subtypes can implement any merging if needed before calling parent /datum/forensics/proc/add_data(newdata) @@ -28,7 +30,7 @@ for(var/D in data) . += "
  • [D]" return jointext(., "
    ") - + /datum/forensics/proc/can_spot(mob/detective, atom/location) . = FALSE if(spot_skill && detective.skill_check(SKILL_FORENSICS,spot_skill)) diff --git a/code/modules/detectivework/evidence/fingerprints.dm b/code/modules/detectivework/evidence/fingerprints.dm index 94b579d41a5..3aa6ace10b5 100644 --- a/code/modules/detectivework/evidence/fingerprints.dm +++ b/code/modules/detectivework/evidence/fingerprints.dm @@ -11,12 +11,13 @@ if(F.completeness > 0) add_data(F) -/datum/forensics/fingerprints/add_data(var/datum/fingerprint/newprint) - if(!newprint || newprint.completeness <= 0) - return - for(var/datum/fingerprint/F in data) - if(F.merge(newprint)) - return +/datum/forensics/fingerprints/add_data(var/list/newdata) + for(var/datum/fingerprint/newprint in newdata) + if(!newprint || newprint.completeness <= 0) + continue + for(var/datum/fingerprint/F in data) + if(F.merge(newprint)) + continue ..() /datum/forensics/fingerprints/PopulateClone(datum/clone) @@ -42,6 +43,9 @@ var/full_print var/completeness = 0 +SAVED_VAR(/datum/fingerprint, full_print) +SAVED_VAR(/datum/fingerprint, completeness) + /datum/fingerprint/proc/copy() var/datum/fingerprint/C = new() C.full_print = full_print diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 410c0bc270b..9b7641179a8 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -1,4 +1,4 @@ - +#define MAX_HIDDEN_PRINTS 25 /atom/var/list/fingerprintshidden /atom/var/fingerprintslast @@ -10,14 +10,20 @@ fingerprintslast = M.key if(!fingerprintshidden) fingerprintshidden = list() - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if (H.get_equipped_item(slot_gloves_str)) - src.fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]" - return 0 - src.fingerprintshidden += "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]" - return 1 + var/print_to_add + var/mob/living/carbon/human/H = M + if(ishuman(M) && H.get_equipped_item(slot_gloves_str)) + print_to_add = "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]" + . = FALSE + else + print_to_add = "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]" + . = TRUE + + //Persistence: Make sure we don't end up with a million entries in here. + if(length(fingerprintshidden) >= MAX_HIDDEN_PRINTS) + fingerprintshidden = fingerprintshidden.Cut(1,2) + fingerprintshidden += print_to_add /atom/proc/add_fingerprint(mob/M, ignoregloves, obj/item/tool) if(isnull(M)) return diff --git a/code/modules/detectivework/microscope/_forensic_machine.dm b/code/modules/detectivework/microscope/_forensic_machine.dm index b82eb930fe2..91dc7edb207 100644 --- a/code/modules/detectivework/microscope/_forensic_machine.dm +++ b/code/modules/detectivework/microscope/_forensic_machine.dm @@ -27,7 +27,7 @@ /obj/machinery/forensic/proc/set_sample(var/obj/O) if(O != sample && O) clear_sample() - events_repository.register(/decl/observ/destroyed, O, src, /obj/machinery/forensic/proc/clear_sample) + events_repository.register(/decl/observ/destroyed, O, src, TYPE_PROC_REF(/obj/machinery/forensic, clear_sample)) sample = O update_icon() @@ -107,7 +107,7 @@ remover.put_in_hands(sample) clear_sample() -/obj/machinery/forensic/handle_mouse_drop(var/atom/over, var/mob/user) +/obj/machinery/forensic/handle_mouse_drop(atom/over, mob/user, params) if(user == over) remove_sample(usr) return TRUE diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index f644e35e2c1..44b31951521 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -11,7 +11,7 @@ obj_flags = OBJ_FLAG_HOLLOW var/obj/item/stored_item = null -/obj/item/evidencebag/handle_mouse_drop(atom/over, mob/user) +/obj/item/evidencebag/handle_mouse_drop(atom/over, mob/user, params) if(user.get_empty_hand_slot() && isitem(over)) var/obj/item/I = over diff --git a/code/modules/detectivework/tools/luminol.dm b/code/modules/detectivework/tools/luminol.dm index a157b789486..d4b7253df55 100644 --- a/code/modules/detectivework/tools/luminol.dm +++ b/code/modules/detectivework/tools/luminol.dm @@ -9,4 +9,4 @@ volume = 250 /obj/item/chems/spray/luminol/populate_reagents() - reagents.add_reagent(/decl/material/liquid/luminol, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/luminol, reagents.maximum_volume) diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index c8a30192ae6..6efc4fd4087 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -38,15 +38,15 @@ if(W.isflamesource()) if(on_fire) to_chat(user, SPAN_WARNING("\The [src] is already blazing merrily!")) - return + return TRUE ignite() if(on_fire) visible_message(SPAN_DANGER("\The [user] lights \the [src] with \the [W].")) else to_chat(user, SPAN_WARNING("You attempt to light \the [src] with \the [W], but it doesn't seem to be flammable.")) update_name() - return - . = ..() + return TRUE + return ..() /obj/item/chems/glass/rag/proc/update_name() if(on_fire) @@ -159,6 +159,8 @@ if(exposed_temperature >= 900 + T0C) new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) + return + return ..() //rag must have a minimum of 2 units welder fuel and at least 80% of the reagents must be welder fuel. //maybe generalize flammable reagents someday @@ -217,6 +219,6 @@ return if(reagents?.total_volume) - reagents.remove_reagent(/decl/material/liquid/fuel, reagents.maximum_volume/25) + remove_from_reagents(/decl/material/liquid/fuel, reagents.maximum_volume/25) update_name() burn_time-- diff --git a/code/modules/detectivework/tools/sample_kits/_sample_kit.dm b/code/modules/detectivework/tools/sample_kits/_sample_kit.dm index 8fa87b124bd..07bc721c4ce 100644 --- a/code/modules/detectivework/tools/sample_kits/_sample_kit.dm +++ b/code/modules/detectivework/tools/sample_kits/_sample_kit.dm @@ -40,7 +40,7 @@ to_chat(user, SPAN_WARNING("You are unable to locate any [evidence_type]s on \the [A].")) . = ..() -/obj/item/forensics/sample_kit/handle_mouse_drop(atom/over, mob/user) +/obj/item/forensics/sample_kit/handle_mouse_drop(atom/over, mob/user, params) if(ismob(loc)) afterattack(over, user, TRUE) return TRUE diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm index b6c2a651303..1b5c3a86b71 100644 --- a/code/modules/detectivework/tools/uvlight.dm +++ b/code/modules/detectivework/tools/uvlight.dm @@ -7,7 +7,7 @@ w_class = ITEM_SIZE_SMALL action_button_name = "Toggle UV light" material = /decl/material/solid/metal/steel - origin_tech = "{'magnets':1,'engineering':1}" + origin_tech = @'{"magnets":1,"engineering":1}' z_flags = ZMM_MANGLE_PLANES var/list/scanned = list() var/list/stored_alpha = list() diff --git a/code/modules/economy/cael/ATM.dm b/code/modules/economy/cael/ATM.dm index 2c06dbe11ff..1be2f7f72f8 100644 --- a/code/modules/economy/cael/ATM.dm +++ b/code/modules/economy/cael/ATM.dm @@ -11,7 +11,7 @@ anchored = TRUE idle_power_usage = 10 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/datum/money_account/authenticated_account var/number_incorrect_tries = 0 @@ -471,3 +471,23 @@ if(ishuman(human_user) && !human_user.get_active_hand()) human_user.put_in_hands(held_card) held_card = null + +//New icon stuff ps13 +/obj/machinery/atm + icon = 'icons/obj/machines/wall/atm.dmi' + icon_state = "frame" + +/obj/machinery/atm/on_update_icon() + cut_overlays() + + if(panel_open) + var/obj/item/stock_parts/circuitboard/C = get_component_of_type(/obj/item/stock_parts/circuitboard) + if(C) + add_overlay("overlay-open-circuit") + else if(!istype(construct_state, /decl/machine_construction/wall_frame/no_wires)) + add_overlay("overlay-open-wires") + else + add_overlay("overlay-open-empty") + return //return since none of the things below matter + else if(operable()) + add_overlay("overlay-on") diff --git a/code/modules/economy/cael/account_mod.dm b/code/modules/economy/cael/account_mod.dm index afe67b89873..604a7f28c62 100644 --- a/code/modules/economy/cael/account_mod.dm +++ b/code/modules/economy/cael/account_mod.dm @@ -57,7 +57,7 @@ log_error("An interest account modification was created for a non-child account!") /datum/account_modification/modify_interest/New(n_affecting) - mod_delay = config.interest_mod_delay + mod_delay = get_config_value(/decl/config/num/interest_mod_delay) . = ..() /datum/account_modification/modify_interest/modify_account() @@ -100,7 +100,7 @@ log_error("A withdrawal limit account modification was created for a non-child account!") /datum/account_modification/modify_withdrawal/New(n_affecting) - mod_delay = config.withdraw_mod_delay + mod_delay = get_config_value(/decl/config/num/withdraw_mod_delay) . = ..() /datum/account_modification/modify_withdrawal/modify_account() @@ -134,7 +134,7 @@ /datum/account_modification/modify_transaction/New(n_affecting) - mod_delay = config.transaction_mod_delay + mod_delay = get_config_value(/decl/config/num/transaction_mod_delay) . = ..() /datum/account_modification/modify_transaction/modify_account() @@ -185,7 +185,7 @@ log_error("A fractional reserve account modification was created for a non-parent account!") /datum/account_modification/modify_fractional_reserve/New(n_affecting, n_frac_reserve) - mod_delay = config.fractional_reserve_mod_delay + mod_delay = get_config_value(/decl/config/num/fractional_reserve_mod_delay) . = ..() /datum/account_modification/modify_fractional_reserve/modify_account() @@ -215,7 +215,7 @@ allow_cancel = FALSE /datum/account_modification/theft_prevention/New() - mod_delay = config.anti_tamper_mod_delay + mod_delay = get_config_value(/decl/config/num/anti_tamper_mod_delay) . = ..() /datum/account_modification/theft_prevention/get_notification() diff --git a/code/modules/economy/worth_currency.dm b/code/modules/economy/worth_currency.dm index bc39ff704ca..7d15b7d7514 100644 --- a/code/modules/economy/worth_currency.dm +++ b/code/modules/economy/worth_currency.dm @@ -14,7 +14,7 @@ name = "[value_name] [currency.name_singular] [name || "piece"]" state = state || "cash" marked_value = value - overlay = image(currency, state) + overlay = image(currency.icon, state) overlay.color = colour overlay.appearance_flags |= RESET_COLOR overlay.plane = FLOAT_PLANE @@ -83,13 +83,29 @@ else if(!denomination.overlay) . += "Null overlay found for '[denomination]'." + // Get all coin denominations. + var/list/validating_denominations = denominations?.Copy() + for(var/datum/denomination/denomination in validating_denominations) + if(!denomination.faces) + validating_denominations -= denomination + + // Remove all coin recipes that create our denomination. + var/list/all_coin_recipes = decls_repository.get_decls_of_type(/decl/stack_recipe/coin) + for(var/recipe_type in all_coin_recipes) + var/decl/stack_recipe/coin/recipe = all_coin_recipes[recipe_type] + validating_denominations -= recipe.denomination + + // If any are left, someone has forgotten a denomination. + if(length(validating_denominations)) + . += "missing coin crafting recipes: [english_list(validating_denominations)]" + /decl/currency/proc/format_value(var/amt) . = "[name_prefix][FLOOR(amt / absolute_value)][name_suffix]" /decl/currency/proc/build_denominations() + denominations = sortTim(denominations, /proc/cmp_currency_denomination_des) for(var/datum/denomination/denomination in denominations) denominations_by_value["[denomination.marked_value]"] = denomination - sortTim(denominations, /proc/cmp_currency_denomination_des) /decl/currency/credits name = "credits" @@ -110,6 +126,13 @@ ) ..() +/decl/stack_recipe/coin/credits + name = "two credit coin" + currency = /decl/currency/credits + +/decl/stack_recipe/coin/credits/one + name = "one credit coin" + /datum/denomination/coin/mid state = "coin_medium" @@ -129,6 +152,16 @@ ) ..() +/decl/stack_recipe/coin/trader + currency = /decl/currency/trader + name = "ten scrip coin" + +/decl/stack_recipe/coin/trader/mid + name = "five scrip coin" + +/decl/stack_recipe/coin/trader/small + name = "one scrip coin" + /decl/currency/scav name = "scavbucks" name_singular = "scavbuck" diff --git a/code/modules/economy/worth_guns.dm b/code/modules/economy/worth_guns.dm index b4b0afb5916..a8372ce8a0d 100644 --- a/code/modules/economy/worth_guns.dm +++ b/code/modules/economy/worth_guns.dm @@ -1,28 +1,45 @@ -// Can't think of a good way to get gun price from projectile (due to +// Can't think of a good way to get gun price from projectile (due to // firemodes, projectile types, etc) so this'll have to do for now. /obj/item/gun/get_base_value() . = 100 + if(silencer) + . += 20 -/obj/item/gun/energy/get_base_value() - . = 150 + var/static/list/vars_to_value = list( + "one_hand_penalty" = -2, + "bulk" = -5, + "accuracy" = 10, + "scoped_accuracy" = 5 + ) -/obj/item/gun/get_base_value() - . = 0 - if(silenced) - . += 20 - . += one_hand_penalty * -2 - . += bulk * -5 - . += accuracy * 10 - . += scoped_accuracy * 5 - if(!autofire_enabled) + var/list/max_vars_to_value = list( + "one_hand_penalty" = one_hand_penalty, + "bulk" = bulk, + "accuracy" = accuracy, + "scoped_accuracy" = scoped_accuracy + ) + + for(var/datum/firemode/F in firemodes) + for(var/varname in vars_to_value) + if(varname in F.settings) + max_vars_to_value[varname] = max(max_vars_to_value[varname], F.settings[varname]) + + for(var/varname in max_vars_to_value) + . += max_vars_to_value[varname] * vars_to_value[varname] + + var/has_autofire = autofire_enabled + if(!has_autofire) for(var/datum/firemode/F in firemodes) if(F.settings["autofire_enabled"]) - . += 100 + has_autofire = TRUE + break + if(has_autofire) + . += 100 + . *= 10 - . += ..() /obj/item/gun/energy/get_base_value() - . = ..() + . = 150 if(self_recharge) . += 100 var/projectile_value = 1 diff --git a/code/modules/economy/worth_misc.dm b/code/modules/economy/worth_misc.dm index fb9014523d3..b003eb009c9 100644 --- a/code/modules/economy/worth_misc.dm +++ b/code/modules/economy/worth_misc.dm @@ -1,6 +1,3 @@ -/obj/item/disk/survey/get_base_value() - . = holographic ? 0 : (sqrt(data) * 5) - // Arbitrary values (TODO remove as many of these as possible) #define ARBITRARY_WORTH(PATH, AMT) \ PATH/get_value_multiplier() { . = 1 } \ @@ -8,4 +5,4 @@ PATH/get_base_value() { . = AMT } ARBITRARY_WORTH(/obj/machinery/emitter, 700) ARBITRARY_WORTH(/obj/machinery/rad_collector, 500) -ARBITRARY_WORTH(/obj/structure/particle_accelerator, 500) +ARBITRARY_WORTH(/obj/structure/particle_accelerator, 500) diff --git a/code/modules/economy/worth_vendomat.dm b/code/modules/economy/worth_vendomat.dm index 27ec89870bb..224532de14c 100644 --- a/code/modules/economy/worth_vendomat.dm +++ b/code/modules/economy/worth_vendomat.dm @@ -2,14 +2,18 @@ . = ..() var/stored_goods_worth = 0 for(var/datum/stored_items/vending_products/product in product_records) - stored_goods_worth += product.price * product.amount - if(markup) - stored_goods_worth /= markup + // instances will be counted by parent call as they are in the vendor contents + var/product_count = product.amount - length(product.instances) + if(product_count > 0) + stored_goods_worth += atom_info_repository.get_combined_worth_for(product.item_path) * product_count . += round(stored_goods_worth) /obj/structure/vending_refill/get_combined_monetary_worth() . = ..() var/stored_goods_worth = 0 for(var/datum/stored_items/vending_products/product in product_records) - stored_goods_worth += product.price * product.amount + // instances will be counted by parent call as they are in the vendor contents + var/product_count = product.amount - length(product.instances) + if(product_count > 0) + stored_goods_worth += atom_info_repository.get_combined_worth_for(product.item_path) * product_count . += round(stored_goods_worth) diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index 90598baaa78..a0959c87edc 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,171 +1,8 @@ -/mob - var/list/default_emotes = list() - var/list/usable_emotes = list() +/mob/proc/get_default_emotes() + return -/mob/proc/update_emotes(var/skip_sort) - usable_emotes.Cut() - for(var/emote in default_emotes) - var/decl/emote/emote_datum = GET_DECL(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - if(!skip_sort) - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc) - -/mob/Initialize() +/mob/living/get_default_emotes() . = ..() - update_emotes() - -// Specific defines follow. -/mob/living/carbon/alien - default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/deathgasp_alien, - /decl/emote/audible/whimper, - /decl/emote/audible/gasp, - /decl/emote/audible/scretch, - /decl/emote/audible/choke, - /decl/emote/audible/moan, - /decl/emote/audible/gnarl - ) - -/mob/living/carbon/brain - default_emotes = list( - /decl/emote/audible/alarm, - /decl/emote/audible/alert, - /decl/emote/audible/notice, - /decl/emote/audible/whistle, - /decl/emote/audible/synth, - /decl/emote/audible/boop, - /decl/emote/visible/blink, - /decl/emote/visible/flash - ) - -/mob/living/carbon/human - default_emotes = list( - /decl/emote/visible/blink, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/gasp, - /decl/emote/audible/sneeze, - /decl/emote/audible/sniff, - /decl/emote/audible/snore, - /decl/emote/audible/whimper, - /decl/emote/audible/yawn, - /decl/emote/audible/clap, - /decl/emote/audible/chuckle, - /decl/emote/audible/cough, - /decl/emote/audible/cry, - /decl/emote/audible/sigh, - /decl/emote/audible/laugh, - /decl/emote/audible/mumble, - /decl/emote/audible/grumble, - /decl/emote/audible/groan, - /decl/emote/audible/moan, - /decl/emote/audible/grunt, - /decl/emote/audible/slap, - /decl/emote/human/deathgasp, - /decl/emote/audible/giggle, - /decl/emote/audible/scream, - /decl/emote/visible/airguitar, - /decl/emote/visible/blink_r, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/drool, - /decl/emote/visible/eyebrow, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/twitch_v, - /decl/emote/visible/faint, - /decl/emote/visible/frown, - /decl/emote/visible/blush, - /decl/emote/visible/wave, - /decl/emote/visible/glare, - /decl/emote/visible/stare, - /decl/emote/visible/look, - /decl/emote/visible/point, - /decl/emote/visible/raise, - /decl/emote/visible/grin, - /decl/emote/visible/shrug, - /decl/emote/visible/smile, - /decl/emote/visible/pale, - /decl/emote/visible/tremble, - /decl/emote/visible/wink, - /decl/emote/visible/hug, - /decl/emote/visible/dap, - /decl/emote/visible/signal, - /decl/emote/visible/handshake, - /decl/emote/visible/afold, - /decl/emote/visible/alook, - /decl/emote/visible/eroll, - /decl/emote/visible/hbow, - /decl/emote/visible/hip, - /decl/emote/visible/holdup, - /decl/emote/visible/hshrug, - /decl/emote/visible/crub, - /decl/emote/visible/erub, - /decl/emote/visible/fslap, - /decl/emote/visible/ftap, - /decl/emote/visible/hrub, - /decl/emote/visible/hspread, - /decl/emote/visible/pocket, - /decl/emote/visible/rsalute, - /decl/emote/visible/rshoulder, - /decl/emote/visible/squint, - /decl/emote/visible/tfist, - /decl/emote/visible/tilt, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/visible/vomit - ) - -/mob/living/silicon/robot - default_emotes = list( - /decl/emote/audible/clap, - /decl/emote/visible/bow, - /decl/emote/visible/salute, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/dance, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/glare, - /decl/emote/visible/look, - /decl/emote/visible/stare, - /decl/emote/visible/deathgasp_robot, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/audible/synth/security, - /decl/emote/audible/synth/security/halt - ) + var/decl/species/my_species = get_species() + if(LAZYLEN(my_species?.default_emotes)) + return . | my_species.default_emotes diff --git a/code/modules/emotes/definitions/_species.dm b/code/modules/emotes/definitions/_species.dm deleted file mode 100644 index 1c13347a4ec..00000000000 --- a/code/modules/emotes/definitions/_species.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/species - var/list/default_emotes = list() - -/mob/living/carbon/update_emotes() - . = ..(skip_sort=1) - if(species) - for(var/emote in species.default_emotes) - var/decl/emote/emote_datum = GET_DECL(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - usable_emotes = sortTim(usable_emotes, /proc/cmp_text_asc) diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index d4615f7e819..5116ce15c04 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -1,108 +1,107 @@ /decl/emote/audible key = "burp" - emote_message_3p = "USER burps." + emote_message_3p = "$USER$ burps." message_type = AUDIBLE_MESSAGE /decl/emote/audible/Initialize() . = ..() if(!emote_message_radio) // Snips the 'USER' from 3p emote messages for radio. - emote_message_radio = copytext(emote_message_3p, 6) + emote_message_radio = copytext(emote_message_3p, 8) /decl/emote/audible/deathgasp_alien - key = "deathgasp" - emote_message_3p = "USER lets out a waning guttural screech, green blood bubbling from its maw." + key = "adeathgasp" + emote_message_3p = "$USER$ lets out a waning guttural screech, green blood bubbling from its maw." /decl/emote/audible/whimper key = "whimper" - emote_message_3p = "USER whimpers." + emote_message_3p = "$USER$ whimpers." /decl/emote/audible/gasp key = "gasp" - emote_message_3p = "USER gasps." + emote_message_3p = "$USER$ gasps." conscious = 0 /decl/emote/audible/scretch key = "scretch" - emote_message_3p = "USER scretches." + emote_message_3p = "$USER$ scretches." /decl/emote/audible/choke - key ="choke" - emote_message_3p = "USER chokes." + key = "choke" + emote_message_3p = "$USER$ chokes." conscious = 0 /decl/emote/audible/gnarl key = "gnarl" - emote_message_3p = "USER gnarls and shows its teeth.." + emote_message_3p = "$USER$ gnarls and shows its teeth." /decl/emote/audible/multichirp key = "mchirp" - emote_message_3p = "USER chirps a chorus of notes!" + emote_message_3p = "$USER$ chirps a chorus of notes!" emote_sound = 'sound/misc/multichirp.ogg' /decl/emote/audible/alarm key = "alarm" emote_message_1p = "You sound an alarm." - emote_message_3p = "USER sounds an alarm." + emote_message_3p = "$USER$ sounds an alarm." /decl/emote/audible/alert key = "alert" emote_message_1p = "You let out a distressed noise." - emote_message_3p = "USER lets out a distressed noise." + emote_message_3p = "$USER$ lets out a distressed noise." /decl/emote/audible/notice key = "notice" emote_message_1p = "You play a loud tone." - emote_message_3p = "USER plays a loud tone." + emote_message_3p = "$USER$ plays a loud tone." /decl/emote/audible/whistle key = "whistle" emote_message_1p = "You whistle." - emote_message_3p = "USER whistles." + emote_message_3p = "$USER$ whistles." /decl/emote/audible/boop key = "boop" emote_message_1p = "You boop." - emote_message_3p = "USER boops." + emote_message_3p = "$USER$ boops." /decl/emote/audible/sneeze key = "sneeze" - emote_message_3p = "USER sneezes." + emote_message_3p = "$USER$ sneezes." /decl/emote/audible/sniff key = "sniff" - emote_message_3p = "USER sniffs." + emote_message_3p = "$USER$ sniffs." /decl/emote/audible/snore key = "snore" - emote_message_3p = "USER snores." + emote_message_3p = "$USER$ snores." conscious = 0 /decl/emote/audible/whimper key = "whimper" - emote_message_3p = "USER whimpers." + emote_message_3p = "$USER$ whimpers." /decl/emote/audible/yawn key = "yawn" - emote_message_3p = "USER yawns." + emote_message_3p = "$USER$ yawns." /decl/emote/audible/clap key = "clap" - emote_message_3p = "USER claps." + emote_message_3p = "$USER$ claps." /decl/emote/audible/chuckle key = "chuckle" - emote_message_3p = "USER chuckles." + emote_message_3p = "$USER$ chuckles." /decl/emote/audible/cough key = "cough" -/decl/emote/audible/cough/check_user(var/mob/living/carbon/user) +/decl/emote/audible/cough/mob_can_use(mob/living/user, assume_available = FALSE) . = ..() - if(!.) - return . - var/obj/item/organ/internal/lungs/lung = user.get_organ(BP_LUNGS) - . = lung?.active_breathing && !user.isSynthetic() + if(.) + var/obj/item/organ/internal/lungs/lung = user.get_organ(BP_LUNGS) + . = lung?.active_breathing && !user.isSynthetic() /decl/emote/audible/cough/do_emote(var/mob/living/carbon/user, var/extra_params) if(!istype(user)) @@ -112,90 +111,178 @@ /decl/emote/audible/cry key = "cry" - emote_message_3p = "USER cries." + emote_message_3p = "$USER$ cries." /decl/emote/audible/sigh key = "sigh" - emote_message_3p = "USER sighs." + emote_message_3p = "$USER$ sighs." /decl/emote/audible/laugh key = "laugh" - emote_message_3p_target = "USER laughs at TARGET." - emote_message_3p = "USER laughs." + emote_message_3p_target = "$USER$ laughs at $TARGET$." + emote_message_3p = "$USER$ laughs." /decl/emote/audible/mumble key = "mumble" - emote_message_3p = "USER mumbles!" + emote_message_3p = "$USER$ mumbles!" /decl/emote/audible/grumble key = "grumble" - emote_message_3p = "USER grumbles!" + emote_message_3p = "$USER$ grumbles!" /decl/emote/audible/groan key = "groan" - emote_message_3p = "USER groans!" + emote_message_3p = "$USER$ groans!" conscious = 0 /decl/emote/audible/moan key = "moan" - emote_message_3p = "USER moans!" + emote_message_3p = "$USER$ moans!" conscious = 0 /decl/emote/audible/giggle key = "giggle" - emote_message_3p = "USER giggles." + emote_message_3p = "$USER$ giggles." /decl/emote/audible/scream key = "scream" - emote_message_3p = "USER screams!" + emote_message_3p = "$USER$ screams!" /decl/emote/audible/grunt key = "grunt" - emote_message_3p = "USER grunts." + emote_message_3p = "$USER$ grunts." /decl/emote/audible/slap key = "slap" - emote_message_1p_target = "You slap TARGET across the face!" + emote_message_1p_target = "You slap $TARGET$ across the face!" emote_message_1p = "You slap yourself across the face!" - emote_message_3p_target = "USER slaps TARGET across the face!" - emote_message_3p = "USER slaps USER_SELF across the face!" + emote_message_3p_target = "$USER$ slaps $TARGET$ across the face!" + emote_message_3p = "$USER$ slaps $USER_SELF$ across the face!" emote_sound = 'sound/effects/snap.ogg' check_restraints = TRUE check_range = 1 /decl/emote/audible/bug_hiss - key ="hiss" - emote_message_3p_target = "USER hisses at TARGET." - emote_message_3p = "USER hisses." + key = "bughiss" + emote_message_3p_target = "$USER$ hisses at $TARGET$." + emote_message_3p = "$USER$ hisses." emote_sound = 'sound/voice/BugHiss.ogg' /decl/emote/audible/bug_buzz - key ="buzz" - emote_message_3p = "USER buzzes its wings." + key = "bugbuzz" + emote_message_3p = "$USER$ buzzes its wings." emote_sound = 'sound/voice/BugBuzz.ogg' /decl/emote/audible/bug_chitter - key ="chitter" - emote_message_3p = "USER chitters." + key = "bugchitter" + emote_message_3p = "$USER$ chitters." emote_sound = 'sound/voice/Bug.ogg' /decl/emote/audible/roar key = "roar" - emote_message_3p = "USER roars!" + emote_message_3p = "$USER$ roars!" /decl/emote/audible/bellow key = "bellow" - emote_message_3p = "USER bellows!" + emote_message_3p = "$USER$ bellows!" /decl/emote/audible/howl key = "howl" - emote_message_3p = "USER howls!" + emote_message_3p = "$USER$ howls!" /decl/emote/audible/wheeze key = "wheeze" - emote_message_3p = "USER wheezes." + emote_message_3p = "$USER$ wheezes." /decl/emote/audible/hiss - key ="hiss_" - emote_message_3p_target = "USER hisses softly at TARGET." - emote_message_3p = "USER hisses softly." \ No newline at end of file + key = "hiss_" + emote_message_3p_target = "$USER$ hisses softly at $TARGET$." + emote_message_3p = "$USER$ hisses softly." + +/decl/emote/audible/deathgasp + key = "deathgasp" + +/decl/emote/audible/deathgasp/get_emote_message_3p(mob/living/user) + var/decl/species/my_species = user.get_species() + if(my_species) + return "$USER$ [my_species.get_species_death_message()]" + +/decl/emote/audible/snap + key = "snap" + emote_message_3p_target = "$USER$ snaps their fingers at $TARGET$." + emote_message_3p = "$USER$ snaps their fingers." + emote_sound = 'sound/effects/fingersnap.ogg' + +//#TODO: Make this get the needed sound effect from the mob. +/decl/emote/audible/burp + key = "belch" + emote_message_3p = "$USER$ burps." + emote_message_3p_target = "$USER$ belches loudly towards $TARGET$." + emote_sound = list( + 'sound/voice/emotes/human/burp1.ogg', + 'sound/voice/emotes/human/burp2.ogg', + 'sound/voice/emotes/human/burp3.ogg', + 'sound/voice/emotes/human/burp4.ogg', + 'sound/voice/emotes/human/burp5.ogg', + 'sound/voice/emotes/human/burp6.ogg', + ) + +/decl/emote/audible/whistle + emote_sound = list( + 'sound/voice/emotes/human/whistle1.ogg', + 'sound/voice/emotes/human/whistle2.ogg', + ) + +/decl/emote/audible/scream/get_emote_sound(atom/user) + var/mob/living/M = user + if(!istype(M)) + return + //#TODO: Make this get the needed sound effect from the mob. + var/gender = M.get_gender() + switch(gender) + if(MALE) + return list("sound" = list('sound/voice/emotes/human/scream_m1.ogg', 'sound/voice/emotes/human/scream_m2.ogg'), "vol" = emote_volume) + if(FEMALE) + return list("sound" = list('sound/voice/emotes/human/scream_f1.ogg', 'sound/voice/emotes/human/scream_f2.ogg', 'sound/voice/emotes/human/scream_f3.ogg'), "vol" = emote_volume) + +/decl/emote/audible/clap + emote_sound = list( + 'sound/voice/emotes/clap1.ogg', + 'sound/voice/emotes/clap2.ogg', + ) + +/decl/emote/audible/chuckle/get_emote_sound(atom/user) + var/mob/living/M = user + if(!istype(M)) + return + //#TODO: Make this get the needed sound effect from the mob. + var/gender = M.get_gender() + switch(gender) + if(MALE) + return list("sound" = 'sound/voice/emotes/human/chuckle_m1.ogg', "vol" = emote_volume) + if(FEMALE) + return list("sound" = 'sound/voice/emotes/human/chuckle_f1.ogg', "vol" = emote_volume) + +/decl/emote/audible/cough/get_emote_sound(atom/user) + var/mob/living/M = user + if(!istype(M)) + return + //#TODO: Make this get the needed sound effect from the mob. + var/gender = M.get_gender() + switch(gender) + if(MALE) + return list("sound" = 'sound/voice/emotes/human/cough_m1.ogg', "vol" = emote_volume) + if(FEMALE) + return list("sound" = 'sound/voice/emotes/human/cough_f1.ogg', "vol" = emote_volume) + +/decl/emote/audible/laugh/get_emote_sound(atom/user) + var/mob/living/M = user + if(!istype(M)) + return + //#TODO: Make this get the needed sound effect from the mob. + var/gender = M.get_gender() + switch(gender) + if(MALE) + return list("sound" = 'sound/voice/emotes/human/laugh_m1.ogg', "vol" = emote_volume) + if(FEMALE) + return list("sound" = 'sound/voice/emotes/human/laugh_f1.ogg', "vol" = emote_volume) diff --git a/code/modules/emotes/definitions/exertion.dm b/code/modules/emotes/definitions/exertion.dm index a750125a6cc..a0aeb5a52e9 100644 --- a/code/modules/emotes/definitions/exertion.dm +++ b/code/modules/emotes/definitions/exertion.dm @@ -1,10 +1,13 @@ +/decl/emote/exertion + abstract_type = /decl/emote/exertion + /decl/emote/exertion/biological key = "esweat" emote_range = 4 emote_message_1p = "You are sweating heavily." - emote_message_3p = "USER is sweating heavily." + emote_message_3p = "$USER$ sweats heavily." -/decl/emote/exertion/biological/check_user(mob/living/user) +/decl/emote/exertion/biological/mob_can_use(mob/living/user, assume_available = FALSE) if(istype(user) && !user.isSynthetic()) return ..() return FALSE @@ -12,24 +15,24 @@ /decl/emote/exertion/biological/breath key = "ebreath" emote_message_1p = "You feel out of breath." - emote_message_3p = "USER looks out of breath." + emote_message_3p = "$USER$ looks out of breath." /decl/emote/exertion/biological/pant key = "epant" emote_range = 3 message_type = AUDIBLE_MESSAGE emote_message_1p = "You pant to catch your breath." - emote_message_3p = "USER pants for air." - emote_message_impaired = "You can see USER breathing heavily." + emote_message_3p = "$USER$ pants for air." + emote_message_impaired = "You can see $USER$ breathing heavily." /decl/emote/exertion/synthetic key = "ewhine" emote_range = 3 message_type = AUDIBLE_MESSAGE emote_message_1p = "You overstress your actuators." - emote_message_3p = "USER's actuators whine with strain." + emote_message_3p = "$USER$'s actuators whine with strain." -/decl/emote/exertion/synthetic/check_user(mob/living/user) +/decl/emote/exertion/synthetic/mob_can_use(mob/living/user, assume_available = FALSE) if(istype(user) && user.isSynthetic()) return ..() return FALSE @@ -37,4 +40,4 @@ /decl/emote/exertion/synthetic/creak key = "ecreak" emote_message_1p = "Your chassis stress indicators spike." - emote_message_3p = "USER's joints creak with stress." + emote_message_3p = "$USER$'s joints creak with stress." diff --git a/code/modules/emotes/definitions/human.dm b/code/modules/emotes/definitions/human.dm deleted file mode 100644 index 1c6e499b52d..00000000000 --- a/code/modules/emotes/definitions/human.dm +++ /dev/null @@ -1,50 +0,0 @@ -/decl/emote/human/check_user(var/mob/living/carbon/human/user) - return istype(user) - -/decl/emote/human/deathgasp - key = "deathgasp" - -/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user) - return "USER [user.species.get_death_message()]" - -/decl/emote/human/swish - key = "swish" - -/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_once() - -/decl/emote/human/wag - key = "wag" - -/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/sway - key = "sway" - -/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/qwag - key = "qwag" - -/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/fastsway - key = "fastsway" - -/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/swag - key = "swag" - -/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() - -/decl/emote/human/stopsway - key = "stopsway" - -/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm index 0126be0c110..019a70d2905 100644 --- a/code/modules/emotes/definitions/synthetics.dm +++ b/code/modules/emotes/definitions/synthetics.dm @@ -1,43 +1,44 @@ /decl/emote/audible/synth key = "beep" - emote_message_3p = "USER beeps." + emote_message_3p = "$USER$ beeps." emote_sound = 'sound/machines/twobeep.ogg' -/decl/emote/audible/synth/check_user(var/mob/living/user) - if(istype(user) && user.isSynthetic()) - return ..() - return FALSE +/decl/emote/audible/synth/mob_can_use(mob/living/user, assume_available = FALSE) + return ..() && user.isSynthetic() /decl/emote/audible/synth/ping key = "ping" - emote_message_3p = "USER pings." + emote_message_3p = "$USER$ pings." emote_sound = 'sound/machines/ping.ogg' /decl/emote/audible/synth/buzz key = "buzz" - emote_message_3p = "USER buzzes." + emote_message_3p = "$USER$ buzzes." emote_sound = 'sound/machines/buzz-sigh.ogg' /decl/emote/audible/synth/confirm key = "confirm" - emote_message_3p = "USER emits an affirmative blip." + emote_message_3p = "$USER$ emits an affirmative blip." emote_sound = 'sound/machines/synth_yes.ogg' /decl/emote/audible/synth/deny key = "deny" - emote_message_3p = "USER emits a negative blip." + emote_message_3p = "$USER$ emits a negative blip." emote_sound = 'sound/machines/synth_no.ogg' /decl/emote/audible/synth/security key = "law" - emote_message_3p = "USER shows USER_HIS legal authorization barcode." - emote_message_3p_target = "USER shows TARGET USER_THEIR legal authorization barcode." + emote_message_3p = "$USER$ shows $USER_THEIR$ legal authorization barcode." + emote_message_3p_target = "$USER$ shows $TARGET$ $USER_THEIR$ legal authorization barcode." emote_sound = 'sound/voice/biamthelaw.ogg' -/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user) - return (istype(user) && istype(user.module,/obj/item/robot_module/security)) +/decl/emote/audible/synth/security/mob_can_use(mob/living/user, assume_available = FALSE) + var/mob/living/silicon/robot/robot_user = user + if(!istype(robot_user)) + return FALSE + return istype(robot_user.module, /obj/item/robot_module/security) && ..() /decl/emote/audible/synth/security/halt key = "halt" - emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"." + emote_message_3p = "$USER$'s speakers skreech, \"Halt! Security!\"." emote_sound = 'sound/voice/halt.ogg' diff --git a/code/modules/emotes/definitions/tail.dm b/code/modules/emotes/definitions/tail.dm new file mode 100644 index 00000000000..de38cf69141 --- /dev/null +++ b/code/modules/emotes/definitions/tail.dm @@ -0,0 +1,62 @@ + +/decl/emote/visible/tail + abstract_type = /decl/emote/visible/tail + +/decl/emote/visible/tail/mob_can_use(mob/living/user, assume_available = FALSE) + return ishuman(user) && ..() + +/decl/emote/visible/tail/swish + key = "swish" + +/decl/emote/visible/tail/swish/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_once() + +/decl/emote/visible/tail/wag + key = "wag" + +/decl/emote/visible/tail/wag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_start() + +/decl/emote/visible/tail/sway + key = "sway" + +/decl/emote/visible/tail/sway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_start() + +/decl/emote/visible/tail/qwag + key = "qwag" + +/decl/emote/visible/tail/qwag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_fast() + +/decl/emote/visible/tail/fastsway + key = "fastsway" + +/decl/emote/visible/tail/fastsway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_fast() + +/decl/emote/visible/tail/swag + key = "swag" + +/decl/emote/visible/tail/swag/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_stop() + +/decl/emote/visible/tail/stopsway + key = "stopsway" + +/decl/emote/visible/tail/stopsway/do_emote(mob/living/user) + var/mob/living/carbon/human/human_user = user + if(istype(human_user)) + human_user.animate_tail_stop() diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm index 4f7327a7382..81c7433ae1f 100644 --- a/code/modules/emotes/definitions/visible.dm +++ b/code/modules/emotes/definitions/visible.dm @@ -1,57 +1,57 @@ /decl/emote/visible - key ="tail" - emote_message_3p = "USER waves USER_THEIR tail." + key = "tail" + emote_message_3p = "$USER$ waves $USER_THEIR$ tail." message_type = VISIBLE_MESSAGE /decl/emote/visible/scratch key = "scratch" check_restraints = TRUE - emote_message_3p = "USER scratches." + emote_message_3p = "$USER$ scratches." /decl/emote/visible/drool - key ="drool" - emote_message_3p = "USER drools." + key = "drool" + emote_message_3p = "$USER$ drools." conscious = 0 /decl/emote/visible/nod - key ="nod" - emote_message_3p_target = "USER nods USER_THEIR head at TARGET." - emote_message_3p = "USER nods USER_THEIR head." + key = "nod" + emote_message_3p_target = "$USER$ nods $USER_THEIR$ head at $TARGET$." + emote_message_3p = "$USER$ nods $USER_THEIR$ head." /decl/emote/visible/sway - key ="sway" - emote_message_3p = "USER sways around dizzily." + key = "sways" + emote_message_3p = "$USER$ sways around dizzily." /decl/emote/visible/sulk - key ="sulk" - emote_message_3p = "USER sulks down sadly." + key = "sulk" + emote_message_3p = "$USER$ sulks down sadly." /decl/emote/visible/dance - key ="dance" + key = "dance" check_restraints = TRUE - emote_message_3p = "USER dances around happily." + emote_message_3p = "$USER$ dances around happily." /decl/emote/visible/roll - key ="roll" + key = "roll" check_restraints = TRUE - emote_message_3p = "USER rolls." + emote_message_3p = "$USER$ rolls." /decl/emote/visible/shake - key ="shake" - emote_message_3p = "USER shakes USER_THEIR head." + key = "shake" + emote_message_3p = "$USER$ shakes $USER_THEIR$ head." /decl/emote/visible/jump - key ="jump" - emote_message_3p = "USER jumps!" + key = "jump" + emote_message_3p = "$USER$ jumps!" /decl/emote/visible/shiver - key ="shiver" - emote_message_3p = "USER shivers." + key = "shiver" + emote_message_3p = "$USER$ shivers." conscious = 0 /decl/emote/visible/collapse - key ="collapse" - emote_message_3p = "USER collapses!" + key = "collapse" + emote_message_3p = "$USER$ collapses!" /decl/emote/visible/collapse/do_extra(var/mob/user) if(istype(user)) @@ -59,59 +59,59 @@ /decl/emote/visible/flash key = "flash" - emote_message_3p = "The lights on USER flash quickly." + emote_message_3p = "The lights on $USER$ flash quickly." /decl/emote/visible/blink key = "blink" - emote_message_3p = "USER blinks." + emote_message_3p = "$USER$ blinks." /decl/emote/visible/airguitar key = "airguitar" check_restraints = TRUE - emote_message_3p = "USER is strumming the air and headbanging like a safari chimp." + emote_message_3p = "$USER$ is strumming the air and headbanging like a safari chimp." /decl/emote/visible/blink_r key = "blink_r" - emote_message_3p = "USER blinks rapidly." + emote_message_3p = "$USER$ blinks rapidly." /decl/emote/visible/bow key = "bow" - emote_message_3p_target = "USER bows to TARGET." - emote_message_3p = "USER bows." + emote_message_3p_target = "$USER$ bows to $TARGET$." + emote_message_3p = "$USER$ bows." /decl/emote/visible/salute key = "salute" - emote_message_3p_target = "USER salutes TARGET." - emote_message_3p = "USER salutes." + emote_message_3p_target = "$USER$ salutes $TARGET$." + emote_message_3p = "$USER$ salutes." check_restraints = TRUE /decl/emote/visible/flap key = "flap" check_restraints = TRUE - emote_message_3p = "USER flaps USER_THEIR wings." + emote_message_3p = "$USER$ flaps $USER_THEIR$ wings." /decl/emote/visible/aflap key = "aflap" check_restraints = TRUE - emote_message_3p = "USER flaps USER_THEIR wings ANGRILY!" + emote_message_3p = "$USER$ flaps $USER_THEIR$ wings ANGRILY!" /decl/emote/visible/eyebrow key = "eyebrow" - emote_message_3p = "USER raises an eyebrow." + emote_message_3p = "$USER$ raises an eyebrow." /decl/emote/visible/twitch key = "twitch" - emote_message_3p = "USER twitches." + emote_message_3p = "$USER$ twitches." conscious = 0 /decl/emote/visible/twitch_v key = "twitch_v" - emote_message_3p = "USER twitches violently." + emote_message_3p = "$USER$ twitches violently." conscious = 0 /decl/emote/visible/faint key = "faint" - emote_message_3p = "USER faints." + emote_message_3p = "$USER$ faints." /decl/emote/visible/faint/do_extra(var/mob/user) if(istype(user) && !HAS_STATUS(user, STAT_ASLEEP)) @@ -119,233 +119,232 @@ /decl/emote/visible/frown key = "frown" - emote_message_3p = "USER frowns." + emote_message_3p = "$USER$ frowns." /decl/emote/visible/blush key = "blush" - emote_message_3p = "USER blushes." + emote_message_3p = "$USER$ blushes." /decl/emote/visible/wave key = "wave" - emote_message_3p_target = "USER waves at TARGET." - emote_message_3p = "USER waves." + emote_message_3p_target = "$USER$ waves at $TARGET$." + emote_message_3p = "$USER$ waves." check_restraints = TRUE /decl/emote/visible/glare key = "glare" - emote_message_3p_target = "USER glares at TARGET." - emote_message_3p = "USER glares." + emote_message_3p_target = "$USER$ glares at $TARGET$." + emote_message_3p = "$USER$ glares." /decl/emote/visible/stare key = "stare" - emote_message_3p_target = "USER stares at TARGET." - emote_message_3p = "USER stares." + emote_message_3p_target = "$USER$ stares at $TARGET$." + emote_message_3p = "$USER$ stares." /decl/emote/visible/look key = "look" - emote_message_3p_target = "USER looks at TARGET." - emote_message_3p = "USER looks." + emote_message_3p_target = "$USER$ looks at $TARGET$." + emote_message_3p = "$USER$ looks." /decl/emote/visible/point key = "point" check_restraints = TRUE - emote_message_3p_target = "USER points to TARGET." - emote_message_3p = "USER points." + emote_message_3p_target = "$USER$ points to $TARGET$." + emote_message_3p = "$USER$ points." /decl/emote/visible/raise key = "raise" check_restraints = TRUE - emote_message_3p = "USER raises a hand." + emote_message_3p = "$USER$ raises a hand." /decl/emote/visible/grin key = "grin" - emote_message_3p_target = "USER grins at TARGET." - emote_message_3p = "USER grins." + emote_message_3p_target = "$USER$ grins at $TARGET$." + emote_message_3p = "$USER$ grins." /decl/emote/visible/shrug key = "shrug" - emote_message_3p = "USER shrugs." + emote_message_3p = "$USER$ shrugs." /decl/emote/visible/smile key = "smile" - emote_message_3p_target = "USER smiles at TARGET." - emote_message_3p = "USER smiles." + emote_message_3p_target = "$USER$ smiles at $TARGET$." + emote_message_3p = "$USER$ smiles." /decl/emote/visible/pale key = "pale" - emote_message_3p = "USER goes pale for a second." + emote_message_3p = "$USER$ goes pale for a second." /decl/emote/visible/tremble key = "tremble" - emote_message_3p = "USER trembles in fear!" + emote_message_3p = "$USER$ trembles in fear!" /decl/emote/visible/wink key = "wink" - emote_message_3p_target = "USER winks at TARGET." - emote_message_3p = "USER winks." + emote_message_3p_target = "$USER$ winks at $TARGET$." + emote_message_3p = "$USER$ winks." /decl/emote/visible/hug key = "hug" check_restraints = TRUE - emote_message_3p_target = "USER hugs TARGET." - emote_message_3p = "USER hugs USER_SELF." + emote_message_3p_target = "$USER$ hugs $TARGET$." + emote_message_3p = "$USER$ hugs $USER_SELF$." check_range = 1 /decl/emote/visible/dap key = "dap" check_restraints = TRUE - emote_message_3p_target = "USER gives daps to TARGET." - emote_message_3p = "USER sadly can't find anybody to give daps to, and daps USER_SELF." + emote_message_3p_target = "$USER$ gives daps to $TARGET$." + emote_message_3p = "$USER$ sadly can't find anybody to give daps to, and daps $USER_SELF$." /decl/emote/visible/bounce key = "bounce" - emote_message_3p = "USER bounces in place." + emote_message_3p = "$USER$ bounces in place." /decl/emote/visible/jiggle key = "jiggle" - emote_message_3p = "USER jiggles!" + emote_message_3p = "$USER$ jiggles!" /decl/emote/visible/lightup key = "light" - emote_message_3p = "USER lights up for a bit, then stops." + emote_message_3p = "$USER$ lights up for a bit, then stops." /decl/emote/visible/vibrate key = "vibrate" - emote_message_3p = "USER vibrates!" + emote_message_3p = "$USER$ vibrates!" /decl/emote/visible/deathgasp_robot - key = "deathgasp" - emote_message_3p = "USER shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening." + key = "rdeathgasp" + emote_message_3p = "$USER$ shudders violently for a moment, then becomes motionless, $USER_THEIR$ eyes slowly darkening." /decl/emote/visible/handshake key = "handshake" check_restraints = TRUE - emote_message_3p_target = "USER shakes hands with TARGET." - emote_message_3p = "USER shakes hands with USER_SELF." + emote_message_3p_target = "$USER$ shakes hands with $TARGET$." + emote_message_3p = "$USER$ shakes hands with $USER_SELF$." check_range = 1 /decl/emote/visible/handshake/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) if(target && !user.Adjacent(target)) - return "USER holds out USER_THEIR hand out to TARGET." + return "$USER$ holds out $USER_THEIR$ hand out to $TARGET$." return ..() /decl/emote/visible/signal key = "signal" - emote_message_3p_target = "USER signals at TARGET." - emote_message_3p = "USER signals." + emote_message_3p_target = "$USER$ signals at $TARGET$." + emote_message_3p = "$USER$ signals." check_restraints = TRUE -/decl/emote/visible/signal/check_user(atom/user) - return ismob(user) - /decl/emote/visible/signal/get_emote_message_3p(var/mob/living/user, var/atom/target, var/extra_params) if(istype(user) && user.get_empty_hand_slot()) var/t1 = round(text2num(extra_params)) if(isnum(t1) && t1 <= 5) - return "USER raises [t1] finger\s." + return "$USER$ raises [t1] finger\s." return .. () /decl/emote/visible/afold key = "afold" check_restraints = TRUE - emote_message_3p = "USER folds USER_THEIR arms." + emote_message_3p = "$USER$ folds $USER_THEIR$ arms." /decl/emote/visible/alook key = "alook" - emote_message_3p = "USER looks away." + emote_message_3p = "$USER$ looks away." /decl/emote/visible/hbow key = "hbow" - emote_message_3p = "USER bows USER_THEIR head." + emote_message_3p = "$USER$ bows $USER_THEIR$ head." /decl/emote/visible/hip key = "hip" check_restraints = TRUE - emote_message_3p = "USER puts USER_THEIR hands on USER_THEIR hips." + emote_message_3p = "$USER$ puts $USER_THEIR$ hands on $USER_THEIR$ hips." /decl/emote/visible/holdup key = "holdup" check_restraints = TRUE - emote_message_3p = "USER holds up USER_THEIR palms." + emote_message_3p = "$USER$ holds up $USER_THEIR$ palms." /decl/emote/visible/hshrug key = "hshrug" - emote_message_3p = "USER gives a half shrug." + emote_message_3p = "$USER$ gives a half shrug." /decl/emote/visible/crub key = "crub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR chin." + emote_message_3p = "$USER$ rubs $USER_THEIR$ chin." /decl/emote/visible/eroll key = "eroll" - emote_message_3p = "USER rolls USER_THEIR eyes." - emote_message_3p_target = "USER rolls USER_THEIR eyes at TARGET." + emote_message_3p = "$USER$ rolls $USER_THEIR$ eyes." + emote_message_3p_target = "$USER$ rolls $USER_THEIR$ eyes at $TARGET$." /decl/emote/visible/erub key = "erub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR eyes." + emote_message_3p = "$USER$ rubs $USER_THEIR$ eyes." /decl/emote/visible/fslap key = "fslap" check_restraints = TRUE - emote_message_3p = "USER slaps USER_THEIR forehead." + emote_message_3p = "$USER$ slaps $USER_THEIR$ forehead." /decl/emote/visible/ftap key = "ftap" - emote_message_3p = "USER taps USER_THEIR foot." + emote_message_3p = "$USER$ taps $USER_THEIR$ foot." /decl/emote/visible/hrub key = "hrub" check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR hands together." + emote_message_3p = "$USER$ rubs $USER_THEIR$ hands together." /decl/emote/visible/hspread key = "hspread" check_restraints = TRUE - emote_message_3p = "USER spreads USER_THEIR hands." + emote_message_3p = "$USER$ spreads $USER_THEIR$ hands." /decl/emote/visible/pocket key = "pocket" check_restraints = TRUE - emote_message_3p = "USER shoves USER_THEIR hands in USER_THEIR pockets." + emote_message_3p = "$USER$ shoves $USER_THEIR$ hands in $USER_THEIR$ pockets." /decl/emote/visible/rsalute key = "rsalute" check_restraints = TRUE - emote_message_3p = "USER returns the salute." + emote_message_3p = "$USER$ returns the salute." /decl/emote/visible/rshoulder key = "rshoulder" - emote_message_3p = "USER rolls USER_THEIR shoulders." + emote_message_3p = "$USER$ rolls $USER_THEIR$ shoulders." /decl/emote/visible/squint key = "squint" - emote_message_3p = "USER squints." - emote_message_3p_target = "USER squints at TARGET." + emote_message_3p = "$USER$ squints." + emote_message_3p_target = "$USER$ squints at $TARGET$." /decl/emote/visible/tfist key = "tfist" - emote_message_3p = "USER tightens USER_THEIR hands into fists." + emote_message_3p = "$USER$ tightens $USER_THEIR$ hands into fists." /decl/emote/visible/tilt key = "tilt" - emote_message_3p = "USER tilts USER_THEIR head." + emote_message_3p = "$USER$ tilts $USER_THEIR$ head." /decl/emote/visible/spin key = "spin" check_restraints = TRUE - emote_message_3p = "USER spins!" + emote_message_3p = "$USER$ spins!" + emote_delay = 2 SECONDS /decl/emote/visible/spin/do_extra(mob/user) if(istype(user)) - user.spin(20, 1) + user.spin(emote_delay, 1) /decl/emote/visible/sidestep key = "sidestep" check_restraints = TRUE - emote_message_3p = "USER steps rhythmically and moves side to side." + emote_message_3p = "$USER$ steps rhythmically and moves side to side." + emote_delay = 1.2 SECONDS /decl/emote/visible/sidestep/do_extra(mob/user) if(istype(user)) @@ -357,7 +356,7 @@ /decl/emote/visible/vomit key = "vomit" -/decl/emote/visible/vomit/check_user(var/mob/living/carbon/human/user) +/decl/emote/visible/vomit/mob_can_use(mob/living/user, assume_available = FALSE) . = ..() && user.check_has_mouth() && !user.isSynthetic() /decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params) diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index b806be2ce10..9bf4e8fad03 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -1,102 +1,196 @@ // Note about emote messages: -// - USER / TARGET will be replaced with the relevant name, in bold. -// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR will be replaced with a +// - $USER$ / $TARGET$ will be replaced with the relevant name, in bold. +// - $USER_THEM$ / $TARGET_THEM$ / $USER_THEIR$ / $TARGET_THEIR$ will be replaced with a // gender-appropriate version of the same. // - Impaired messages do not do any substitutions. +var/global/list/_emotes_by_key + +/proc/get_emote_by_key(var/key) + if(!global._emotes_by_key) + decls_repository.get_decls_of_type(/decl/emote) // _emotes_by_key will be updated in emote Initialize() + return global._emotes_by_key[key] + /decl/emote - var/key // Command to use emote ie. '*[key]' - var/emote_message_1p // First person message ('You do a flip!') - var/emote_message_3p // Third person message ('Urist McShitter does a flip!') - var/emote_message_impaired // Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth') + /// Command to use emote ie. '*[key]' + var/key + /// First person message ('You do a flip!') + var/emote_message_1p + /// Third person message ('Urist McShitter does a flip!') + var/emote_message_3p + /// First person message for robits. + var/emote_message_synthetic_1p + /// Third person message for robits. + var/emote_message_synthetic_3p + + /// 'You do a flip at Urist McTarget!' + var/emote_message_1p_target + /// 'Urist McShitter does a flip at Urist McTarget!' + var/emote_message_3p_target + /// First person targeted message for robits. + var/emote_message_synthetic_1p_target + /// Third person targeted message for robits. + var/emote_message_synthetic_3p_target - var/emote_message_1p_target // 'You do a flip at Urist McTarget!' - var/emote_message_3p_target // 'Urist McShitter does a flip at Urist McTarget!' + /// A message to send over the radio if one picks up this emote. + var/emote_message_radio + /// As above, but for synthetics. + var/emote_message_radio_synthetic - var/emote_message_radio // A message to send over the radio if one picks up this emote. + /// A message to show if the emote is audible and the user is muzzled. + var/emote_message_muffled + /// Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth') + var/emote_message_impaired - // Two-dimensional array - // First is list of genders, associated to a list of the sound effects to use + /// Two-dimensional array: first is list of genders, associated to a list of the sound effects to use. var/list/emote_sound = null + /// As above, but used when check_synthetic() is true. + var/list/emote_sound_synthetic + /// Volume of sound to play. + var/emote_volume = 50 + /// As above, but used when check_synthetic() is true. + var/emote_volume_synthetic = 50 + + /// Audible/visual flag + var/message_type = VISIBLE_MESSAGE + /// Whether or not this emote -must- have a target. + var/mandatory_targetted_emote + /// Can this emote be used while restrained? + var/check_restraints + /// falsy, or a range outside which the emote will not work + var/check_range + /// Do we need to be awake to emote this? + var/conscious = TRUE + /// If >0, restricts emote visibility to viewers within range. + var/emote_range = 0 + // Time in ds that this emote will block further emote use (spam prevention). + var/emote_delay = 1 SECOND + +/decl/emote/Initialize() + . = ..() + if(key) + LAZYSET(global._emotes_by_key, key, src) + +/decl/emote/validate() + . = ..() + var/list/all_emotes = decls_repository.get_decls_of_type(/decl/emote) + for(var/emote_type in all_emotes) + var/decl/emote/emote = all_emotes[emote_type] + if(emote == src) + continue + if(key == emote.key) + . += "non-unique key, overlaps with [emote.type]" - var/message_type = VISIBLE_MESSAGE // Audible/visual flag - var/targetted_emote // Whether or not this emote needs a target. - var/check_restraints // Can this emote be used while restrained? - var/check_range // falsy, or a range outside which the emote will not work - var/conscious = TRUE // Do we need to be awake to emote this? - var/emote_range = 0 // If >0, restricts emote visibility to viewers within range. +// validate() is never called outside of unit testing, but +// this feels foul to have in non-unit test main code. +#ifdef UNIT_TEST + var/static/obj/dummy_emote_target = new + dummy_emote_target.name = "\proper Barry's hat" + var/static/mob/dummy_emote_user = new + dummy_emote_user.name = "\proper Barry" + dummy_emote_user.set_gender(MALE) + // This should catch misspelled tokens, TARGET_HIM etc as well as leftover TARGET and USER. + var/static/list/tokens = list("$", "TARGET", "USER") + var/all_strings = list( + "emote_message_1p" = emote_message_1p, + "emote_message_3p" = emote_message_3p, + "emote_message_synthetic_1p" = emote_message_synthetic_1p, + "emote_message_synthetic_3p" = emote_message_synthetic_3p, + "emote_message_1p_target" = emote_message_1p_target, + "emote_message_3p_target" = emote_message_3p_target, + "emote_message_synthetic_1p_target" = emote_message_synthetic_1p_target, + "emote_message_synthetic_3p_target" = emote_message_synthetic_3p_target + ) + for(var/string_key in all_strings) + var/emote_string = all_strings[string_key] + if(!length(emote_string)) + continue + emote_string = replace_target_tokens(emote_string, dummy_emote_target) + emote_string = replace_user_tokens(emote_string, dummy_emote_user) + emote_string = uppertext(emote_string) + for(var/token in tokens) + if(findtext(emote_string, token)) + . += "malformed emote token [token] in [string_key]" +#endif /decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params) if(target) + if(emote_message_synthetic_1p_target && check_synthetic(user)) + return emote_message_synthetic_1p_target return emote_message_1p_target + if(emote_message_synthetic_1p && check_synthetic(user)) + return emote_message_synthetic_1p return emote_message_1p /decl/emote/proc/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) if(target) + if(emote_message_synthetic_3p_target && check_synthetic(user)) + return emote_message_synthetic_3p_target return emote_message_3p_target + if(emote_message_synthetic_3p && check_synthetic(user)) + return emote_message_synthetic_3p return emote_message_3p +/decl/emote/proc/get_emote_sound(var/atom/user) + if(check_synthetic(user) && emote_sound_synthetic) + return list( + "sound" = emote_sound_synthetic, + "vol" = emote_volume_synthetic + ) + if(emote_sound) + return list( + "sound" = emote_sound, + "vol" = emote_volume + ) + /decl/emote/proc/do_emote(var/atom/user, var/extra_params) if(ismob(user) && check_restraints) var/mob/M = user if(M.restrained()) - to_chat(user, "You are restrained and cannot do that.") + to_chat(user, SPAN_WARNING("You are restrained and cannot do that.")) return var/atom/target if(can_target() && extra_params) - extra_params = lowertext(extra_params) - for(var/atom/thing in view(user)) - if(extra_params == lowertext(thing.name)) + var/target_dist + extra_params = trim(lowertext(extra_params)) + for(var/atom/thing in view((isnull(check_range) ? world.view : check_range), user)) + + if(!isturf(thing.loc)) + continue + + var/new_target_dist = get_dist(thing, user) + if(!isnull(target_dist) && target_dist > new_target_dist) + continue + + if(findtext(lowertext(thing.name), extra_params)) + target_dist = new_target_dist target = thing - break - if(targetted_emote && !target) + if(!target) + to_chat(user, SPAN_WARNING("You cannot see a '[extra_params]' within range.")) + + if(mandatory_targetted_emote && !target) to_chat(user, SPAN_WARNING("You can't do that to thin air.")) return - if(target && target != user && check_range) - if (get_dist(user, target) > check_range) - to_chat(user, SPAN_WARNING("\The [target] is too far away.")) - return + var/use_1p = get_emote_message_1p(user, target, extra_params) + if(use_1p) + if(target) + use_1p = replace_target_tokens(use_1p, target) + use_1p = "[capitalize(replace_user_tokens(use_1p, user))]" - var/decl/pronouns/user_gender = user.get_pronouns() - var/decl/pronouns/target_gender = target?.get_pronouns() - - var/use_3p - var/use_1p - var/use_radio_message - if(emote_message_1p) - if(target && emote_message_1p_target) - use_1p = get_emote_message_1p(user, target, extra_params) - use_1p = replacetext(use_1p, "TARGET_THEM", target_gender.him) - use_1p = replacetext(use_1p, "TARGET_THEIR", target_gender.his) - use_1p = replacetext(use_1p, "TARGET_SELF", target_gender.self) - use_1p = replacetext(use_1p, "TARGET", "\the [target]") - else - use_1p = get_emote_message_1p(user, null, extra_params) - use_1p = capitalize(use_1p) - - if(emote_message_3p) - if(target && emote_message_3p_target) - use_3p = get_emote_message_3p(user, target, extra_params) - use_3p = replacetext(use_3p, "TARGET_THEM", target_gender.him) - use_3p = replacetext(use_3p, "TARGET_THEIR", target_gender.his) - use_3p = replacetext(use_3p, "TARGET_SELF", target_gender.self) - use_3p = replacetext(use_3p, "TARGET", "\the [target]") - else - use_3p = get_emote_message_3p(user, null, extra_params) - use_3p = replacetext(use_3p, "USER_THEM", user_gender.him) - use_3p = replacetext(use_3p, "USER_THEIR", user_gender.his) - use_3p = replacetext(use_3p, "USER_SELF", user_gender.self) - use_3p = replacetext(use_3p, "USER", "\the [user]") - use_3p = capitalize(use_3p) - - if(emote_message_radio) - use_radio_message = replacetext(emote_message_radio, "USER_THEM", user_gender.him) - use_radio_message = replacetext(use_radio_message, "USER_THEIR", user_gender.his) - use_radio_message = replacetext(use_radio_message, "USER_SELF", user_gender.self) - use_radio_message = replacetext(use_radio_message, "USER", "\the [user]") + var/use_3p = get_emote_message_3p(user, target, extra_params) + if(use_3p) + if(target) + use_3p = replace_target_tokens(use_3p, target) + use_3p = "[replace_user_tokens(use_3p, user)]" + + var/use_radio = get_radio_message(user) + if(use_radio) + if(target) + use_radio = replace_target_tokens(use_radio, target) + use_radio = replace_user_tokens(use_radio, user) var/use_range = emote_range if (!use_range) @@ -111,29 +205,61 @@ M.visible_message(message = "[user] opens their mouth silently!", self_message = "You cannot say anything!", blind_message = emote_message_impaired, checkghosts = /datum/client_preference/ghost_sight) return else - M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, checkghosts = /datum/client_preference/ghost_sight, radio_message = use_radio_message) + M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, checkghosts = /datum/client_preference/ghost_sight, radio_message = use_radio) else M.visible_message(message = use_3p, self_message = use_1p, blind_message = emote_message_impaired, range = use_range, checkghosts = /datum/client_preference/ghost_sight) do_extra(user, target) do_sound(user) +/decl/emote/proc/replace_target_tokens(var/msg, var/atom/target) + . = msg + if(istype(target)) + var/decl/pronouns/target_gender = target.get_pronouns() + . = replacetext(., "$TARGET_THEM$", target_gender.him) + . = replacetext(., "$TARGET_THEIR$", target_gender.his) + . = replacetext(., "$TARGET_SELF$", target_gender.self) + . = replacetext(., "$TARGET$", "\the [target]") + +/decl/emote/proc/replace_user_tokens(var/msg, var/atom/user) + . = msg + if(istype(user)) + var/decl/pronouns/user_gender = user.get_pronouns() + . = replacetext(., "$USER_THEM$", user_gender.him) + . = replacetext(., "$USER_THEIR$", user_gender.his) + . = replacetext(., "$USER_SELF$", user_gender.self) + . = replacetext(., "$USER$", "\the [user]") + +/decl/emote/proc/get_radio_message(var/atom/user) + if(emote_message_radio_synthetic && check_synthetic(user)) + return emote_message_radio_synthetic + return emote_message_radio + /decl/emote/proc/do_extra(var/atom/user, var/atom/target) return /decl/emote/proc/do_sound(var/atom/user) - if(emote_sound) - var/sound_to_play = emote_sound - if(islist(emote_sound)) - sound_to_play = emote_sound[user.gender] || emote_sound - sound_to_play = pick(sound_to_play) - return playsound(user.loc, sound_to_play, 50, 0) + var/use_emote_sound = get_emote_sound(user) + if(!use_emote_sound) + return + var/sound_to_play = use_emote_sound + if(islist(use_emote_sound)) + sound_to_play = use_emote_sound[user.gender] || use_emote_sound + sound_to_play = pick(sound_to_play) + return playsound(user.loc, sound_to_play, 50, 0) -/decl/emote/proc/check_user(var/atom/user) - return TRUE +/decl/emote/proc/mob_can_use(mob/living/user, assume_available = FALSE) + return istype(user) && user.stat != DEAD && (assume_available || (type in user.get_default_emotes())) /decl/emote/proc/can_target() return (emote_message_1p_target || emote_message_3p_target) /decl/emote/dd_SortValue() return key + +/decl/emote/proc/check_synthetic(var/mob/living/user) + . = istype(user) && user.isSynthetic() + if(!. && message_type == AUDIBLE_MESSAGE && user.should_have_organ(BP_LUNGS)) + var/obj/item/organ/internal/lungs/L = GET_INTERNAL_ORGAN(user, BP_LUNGS) + if(BP_IS_PROSTHETIC(L)) + . = TRUE diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 24f6c9dfdb9..5778a4ce922 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -1,7 +1,12 @@ -/mob/proc/can_emote(var/emote_type) +/mob + var/next_emote + var/next_emote_refresh + var/last_emote_summary + +/mob/proc/can_emote(emote_type, show_message) . = check_mob_can_emote(emote_type) - if(!.) - to_chat(src, SPAN_WARNING("You cannot currently [emote_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!")) + if(!. && show_message) + to_chat(show_message, SPAN_WARNING("You cannot currently [emote_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!")) /mob/proc/check_mob_can_emote(var/emote_type) SHOULD_CALL_PARENT(TRUE) @@ -10,25 +15,41 @@ /mob/living/check_mob_can_emote(var/emote_type) return ..() && !(HAS_STATUS(src, STAT_SILENCE) && emote_type == AUDIBLE_MESSAGE) -/mob/living/carbon/brain/check_mob_can_emote(var/emote_type) - return ..() && (istype(container, /obj/item/mmi) || istype(loc, /obj/item/organ/internal/posibrain)) +/mob/living/brain/check_mob_can_emote(var/emote_type) + return ..() && istype(get_container(), /obj/item/organ/internal/brain_interface) +#define EMOTE_REFRESH_SPAM_COOLDOWN (5 SECONDS) /mob/proc/emote(var/act, var/m_type, var/message) set waitfor = FALSE - // s-s-snowflake - if(src.stat == DEAD && act != "deathgasp") + + if(stat == DEAD && act != "deathgasp") return + var/decl/emote/use_emote + if(ispath(act, /decl/emote)) + use_emote = GET_DECL(act) + m_type = use_emote.message_type + + var/show_message_to if(usr == src) //client-called emote - if (client && (client.prefs.muted & MUTE_IC)) - to_chat(src, "You cannot send IC messages (muted).") + if (client?.prefs?.muted & MUTE_IC) + to_chat(src, SPAN_WARNING("You cannot send IC messages (muted).")) return - if(act == "help") - to_chat(src,"Usable emotes: [english_list(usable_emotes)]") + if(world.time < next_emote) + to_chat(src, SPAN_WARNING("You cannot use another emote yet.")) return - if(!can_emote(m_type)) + if(act == "help") + if(world.time >= next_emote_refresh) + var/list/usable_emotes = list() + next_emote_refresh = world.time + EMOTE_REFRESH_SPAM_COOLDOWN + for(var/emote in get_default_emotes()) + var/decl/emote/emote_datum = GET_DECL(emote) + if(emote_datum.mob_can_use(src, assume_available = TRUE)) + usable_emotes[emote_datum.key] = emote_datum + last_emote_summary = english_list(sortTim(usable_emotes, /proc/cmp_text_asc, associative = TRUE)) + to_chat(src, "Usable emotes: [last_emote_summary].") return if(act == "me") @@ -46,30 +67,44 @@ m_type = AUDIBLE_MESSAGE return custom_emote(m_type, message) + show_message_to = usr + + if(!can_emote(m_type, show_message_to)) + return + var/splitpoint = findtext(act, " ") if(splitpoint > 0) var/tempstr = act act = copytext(tempstr,1,splitpoint) message = copytext(tempstr,splitpoint+1,0) - var/decl/emote/use_emote = usable_emotes[act] if(!use_emote) - to_chat(src, "Unknown emote '[act]'. Type say *help for a list of usable emotes.") + use_emote = get_emote_by_key(act) + + if(!istype(use_emote)) + to_chat(show_message_to, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) + return + + if(!use_emote.mob_can_use(src)) + to_chat(show_message_to, SPAN_WARNING("You cannot use the emote '[act]'. Type say *help for a list of usable emotes.")) return if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) return if(use_emote.message_type == AUDIBLE_MESSAGE && get_item_blocking_speech()) - audible_message("\The [src] makes a muffled sound.") + audible_message("\The [src] [use_emote.emote_message_muffled || "makes a muffled sound."]") return - else - use_emote.do_emote(src, message) + + next_emote = world.time + use_emote.emote_delay + use_emote.do_emote(src, message) for (var/obj/item/implant/I in src) if (I.implanted) I.trigger(act, src) +#undef EMOTE_REFRESH_SPAM_COOLDOWN + /mob/proc/format_emote(var/emoter = null, var/message = null) var/pretext var/subtext @@ -127,7 +162,7 @@ /mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null) - if(!can_emote(m_type)) + if(!can_emote(m_type, src)) return var/input @@ -156,8 +191,8 @@ var/obj/machinery/hologram/holopad/T = src.holo if(T && T.masters[src]) //Is the AI using a holopad? src.holopad_emote(message) - else //Emote normally, then. - ..() + return + return ..() /mob/living/captive_brain/emote(var/message) return diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 2e61914c580..39f8dc118d9 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -44,17 +44,9 @@ var/global/regex/actual_error_file_line //Handle cooldowns and silencing spammy errors var/silencing = FALSE - // We can runtime before config is initialized because BYOND initialize objs/map before a bunch of other stuff happens. - // This is a bunch of workaround code for that. Hooray! - - var/configured_error_cooldown = initial(config.error_cooldown) - var/configured_error_limit = initial(config.error_limit) - var/configured_error_silence_time = initial(config.error_silence_time) - if(config) - configured_error_cooldown = config.error_cooldown - configured_error_limit = config.error_limit - configured_error_silence_time = config.error_silence_time - + var/configured_error_cooldown = get_config_value(/decl/config/num/debug_error_cooldown) + var/configured_error_limit = get_config_value(/decl/config/num/debug_error_limit) + var/configured_error_silence_time = get_config_value(/decl/config/num/debug_error_silence_time) //Each occurence of an unique error adds to its cooldown time... cooldown = max(0, cooldown - (world.time - last_seen)) + configured_error_cooldown diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index d08af79ce53..4cf335faab0 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -126,14 +126,9 @@ var/global/datum/error_viewer/error_cache/error_cache // Show the error to admins with debug messages turned on, but only if one // from the same source hasn't been shown too recently if (error_source.next_message_at <= world.time) - var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly + //var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly //log_debug("Runtime in [e.file], line [e.line]: [html_encode(e.name)] [error_entry.make_link(viewtext)]") - var/err_msg_delay - if(config) - err_msg_delay = config.error_msg_delay - else - err_msg_delay = initial(config.error_msg_delay) - error_source.next_message_at = world.time + err_msg_delay + error_source.next_message_at = world.time + get_config_value(/decl/config/num/debug_error_msg_delay) /datum/error_viewer/error_source var/list/errors = list() diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index fde3b27d545..a2cf955a797 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -64,17 +64,17 @@ var/global/list/carp_count = list() // a list of Z levels (string), associated w else M = new /mob/living/simple_animal/hostile/carp/pike(T) I += 3 - events_repository.register(/decl/observ/death, M,src,/datum/event/carp_migration/proc/reduce_carp_count) - events_repository.register(/decl/observ/destroyed, M,src,/datum/event/carp_migration/proc/reduce_carp_count) + events_repository.register(/decl/observ/death, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count)) + events_repository.register(/decl/observ/destroyed, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count)) LAZYADD(global.carp_count[num2text(Z)], M) spawned_carp ++ - M.throw_at(get_random_edge_turf(global.reverse_dir[direction],TRANSITIONEDGE + 2, Z), 250, speed, callback = CALLBACK(src,/datum/event/carp_migration/proc/check_gib,M)) + M.throw_at(get_random_edge_turf(global.reverse_dir[direction],TRANSITIONEDGE + 2, Z), 250, speed, callback = CALLBACK(src, TYPE_PROC_REF(/datum/event/carp_migration, check_gib), M)) I++ if(no_show) break /datum/event/carp_migration/proc/check_gib(var/mob/living/simple_animal/hostile/carp/M) //awesome road kills - if(M.health <= 0 && prob(60)) + if(M.current_health <= 0 && prob(60)) M.gib() /proc/get_random_edge_turf(var/direction, var/clearance = TRANSITIONEDGE + 1, var/Z) @@ -97,8 +97,8 @@ var/global/list/carp_count = list() // a list of Z levels (string), associated w if(M in L) LAZYREMOVE(L,M) break - events_repository.unregister(/decl/observ/death, M,src,/datum/event/carp_migration/proc/reduce_carp_count) - events_repository.unregister(/decl/observ/destroyed, M,src,/datum/event/carp_migration/proc/reduce_carp_count) + events_repository.unregister(/decl/observ/death, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count)) + events_repository.unregister(/decl/observ/destroyed, M,src, TYPE_PROC_REF(/datum/event/carp_migration, reduce_carp_count)) /datum/event/carp_migration/end() log_debug("Carp migration event spawned [spawned_carp] carp.") diff --git a/code/modules/events/computer_damage.dm b/code/modules/events/computer_damage.dm index 9cf56ce1e7c..94d3f278745 100644 --- a/code/modules/events/computer_damage.dm +++ b/code/modules/events/computer_damage.dm @@ -17,4 +17,4 @@ if(prob(50)) victim.visible_message("[victim] emits some ominous clicks.") var/obj/item/stock_parts/computer/hard_drive/HDD = victim.get_component_of_type(/obj/item/stock_parts/computer/hard_drive) - HDD.take_damage(0.5 * HDD.health) + HDD.take_damage(0.5 * HDD.current_health) diff --git a/code/modules/events/disposals_explosion.dm b/code/modules/events/disposals_explosion.dm index cf1cb63a93b..a11a26fa5bf 100644 --- a/code/modules/events/disposals_explosion.dm +++ b/code/modules/events/disposals_explosion.dm @@ -24,7 +24,7 @@ // Event listener for the marked pipe's destruction /datum/event/disposals_explosion/proc/pipe_destroyed() - events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, .proc/pipe_destroyed) + events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, PROC_REF(pipe_destroyed)) bursting_pipe = null kill() @@ -43,7 +43,7 @@ if(istype(A, /obj/structure/disposalpipe/segment)) bursting_pipe = A // Subscribe to pipe destruction facts - events_repository.register(/decl/observ/destroyed, A, src, .proc/pipe_destroyed) + events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(pipe_destroyed)) break if(isnull(bursting_pipe)) @@ -52,7 +52,7 @@ return // Damage the pipe - bursting_pipe.health = rand(2,4) + bursting_pipe.current_health = rand(2,4) /datum/event/disposals_explosion/announce() command_announcement.Announce("Pressure readings indicate an imminent explosion in \the [get_area_name(bursting_pipe)] disposal systems. Piping sections may be damaged.", "[location_name()] Atmospheric Monitoring System", zlevels = affecting_z) @@ -63,16 +63,16 @@ return // Make some noise as a clue - if(prob(40) && bursting_pipe.health < 5) + if(prob(40) && bursting_pipe.current_health < 5) playsound(bursting_pipe, 'sound/machines/hiss.ogg', 40, 0, 0) /datum/event/disposals_explosion/end() if(isnull(bursting_pipe)) return - events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, .proc/pipe_destroyed) + events_repository.unregister(/decl/observ/destroyed, bursting_pipe, src, PROC_REF(pipe_destroyed)) - if(bursting_pipe.health < 5) + if(bursting_pipe.current_health < 5) // Make a disposals holder for the trash var/obj/structure/disposalholder/trash_holder = new() diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index e67279c59e5..97dc8f97f3f 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -15,7 +15,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT if(!next_event_time) set_event_delay() - if(delayed || !config.allow_random_events) + if(delayed || !get_config_value(/decl/config/toggle/on/allow_random_events)) next_event_time += (world.time - last_world_time) else if(world.time > next_event_time) start_event() @@ -71,17 +71,18 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT var/last_time = last_event_time[EM] if(last_time) var/time_passed = world.time - last_time - var/weight_modifier = max(0, round((config.expected_round_length - time_passed) / 300)) + var/weight_modifier = max(0, round(((get_config_value(/decl/config/num/expected_round_length) HOURS) - time_passed) / 300)) weight = weight - weight_modifier return weight /datum/event_container/proc/set_event_delay() // If the next event time has not yet been set and we have a custom first time start - if(next_event_time == 0 && config.event_first_run[severity]) - var/lower = config.event_first_run[severity]["lower"] - var/upper = config.event_first_run[severity]["upper"] - var/event_delay = rand(lower, upper) + var/list/event_first_run = get_config_value(/decl/config/lists/event_first_run) + if(next_event_time == 0 && event_first_run[severity]) + var/lower = event_first_run[severity]["lower"] + var/upper = event_first_run[severity]["upper"] + var/event_delay = rand(lower, upper) MINUTES next_event_time = world.time + event_delay // Otherwise, follow the standard setup process else @@ -99,7 +100,9 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT playercount_modifier = 0.8 playercount_modifier = playercount_modifier * delay_modifier - var/event_delay = rand(config.event_delay_lower[severity], config.event_delay_upper[severity]) * playercount_modifier + var/list/event_delay_lower = get_config_value(/decl/config/lists/event_delay_lower) + var/list/event_delay_upper = get_config_value(/decl/config/lists/event_delay_upper) + var/event_delay = (rand(event_delay_lower[severity], event_delay_upper[severity]) * playercount_modifier) MINUTES next_event_time = world.time + event_delay log_debug("Next event of severity [severity_to_string[severity]] in [(next_event_time - world.time)/600] minutes.") diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm index 94d4290d4ff..9b9a8de1a84 100644 --- a/code/modules/events/event_dynamic.dm +++ b/code/modules/events/event_dynamic.dm @@ -2,7 +2,7 @@ var/global/list/event_last_fired = list() //Always triggers an event when called, dynamically chooses events based on job population /proc/spawn_dynamic_event() - if(!config.allow_random_events) + if(!get_config_value(/decl/config/toggle/on/allow_random_events)) return var/minutes_passed = world.time/600 diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index 35a03d3d74c..84536702b0f 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -61,8 +61,7 @@ num += rand(2,max_number) log_and_message_admins("Vermin infestation spawned ([vermstring] x[num]) in \the [location.proper_name]", location = pick_area_turf(location)) while(vermin_turfs.len && num > 0) - var/turf/simulated/floor/T = pick(vermin_turfs) - vermin_turfs.Remove(T) + var/turf/T = pick_n_take(vermin_turfs) num-- var/spawn_type = pick(spawn_types) diff --git a/code/modules/events/mail.dm b/code/modules/events/mail.dm index 3a857b23b0d..a07ad514c3f 100644 --- a/code/modules/events/mail.dm +++ b/code/modules/events/mail.dm @@ -9,7 +9,7 @@ var/list/possible_gifts = list( /obj/item/flashlight/lamp/lava, - /obj/item/storage/fancy/crayons, + /obj/item/storage/box/fancy/crayons, /obj/item/guitar, /obj/item/toy/shipmodel, /obj/item/clothing/accessory/locket, diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm index 37485967fd9..30c2ac25a21 100644 --- a/code/modules/events/meteors.dm +++ b/code/modules/events/meteors.dm @@ -112,9 +112,9 @@ var/global/list/meteors_major = list( /datum/event/meteor_wave/overmap/tick() if(!victim) return - if (victim.is_still() || victim.get_helm_skill() >= SKILL_ADEPT) //Unless you're standing or good at your job.. + if (victim.is_still() || victim.get_helm_skill() >= SKILL_ADEPT) //Unless you're standing still or good at your job... start_side = pick(global.cardinal) - else //..Meteors mostly fly in your face + else //... Meteors mostly fly in your face start_side = prob(90) ? victim.fore_dir : pick(global.cardinal) ..() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 9417b19dfdf..005710a306f 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -17,7 +17,9 @@ var/list/areas = area_repository.get_areas_by_z_level() for(var/i in areas) var/area/A = areas[i] - for(var/turf/simulated/floor/T in A) + for(var/turf/T in A) + if(!T.is_floor() || !T.simulated) + continue if(!(T.z in affecting_z)) continue if(isAdminLevel(T.z)) diff --git a/code/modules/ext_scripts/irc.dm b/code/modules/ext_scripts/irc.dm index dc894d839de..9b1887f118f 100644 --- a/code/modules/ext_scripts/irc.dm +++ b/code/modules/ext_scripts/irc.dm @@ -1,30 +1,36 @@ /proc/send2irc(var/channel, var/msg) - export2irc(list(type="msg", mesg=msg, chan=channel, pwd=config.comms_password)) + export2irc(list(type="msg", mesg=msg, chan=channel, pwd=get_config_value(/decl/config/text/comms_password))) /proc/export2irc(params) - if(config.use_irc_bot && config.irc_bot_host) + if(!get_config_value(/decl/config/toggle/use_irc_bot)) + return + var/irc_bot_host = get_config_value(/decl/config/text/irc_bot_host) + if(irc_bot_host) spawn(-1) // spawn here prevents hanging in the case that the bot isn't reachable - world.Export("http://[config.irc_bot_host]:45678?[list2params(params)]") + world.Export("http://[irc_bot_host]:45678?[list2params(params)]") /proc/runtimes2irc(runtimes, revision) - export2irc(list(pwd=config.comms_password, type="runtime", runtimes=runtimes, revision=revision)) + export2irc(list(pwd=get_config_value(/decl/config/text/comms_password), type="runtime", runtimes=runtimes, revision=revision)) /proc/send2mainirc(var/msg) - if(config.main_irc) - send2irc(config.main_irc, msg) + var/main_irc = get_config_value(/decl/config/text/main_irc) + if(main_irc) + send2irc(main_irc, msg) return /proc/send2adminirc(var/msg) - if(config.admin_irc) - send2irc(config.admin_irc, msg) + var/admin_irc = get_config_value(/decl/config/text/admin_irc) + if(admin_irc) + send2irc(admin_irc, msg) return /proc/adminmsg2adminirc(client/source, client/target, msg) - if(config.admin_irc) + var/admin_irc = get_config_value(/decl/config/text/admin_irc) + if(admin_irc) var/list/params[0] - params["pwd"] = config.comms_password - params["chan"] = config.admin_irc + params["pwd"] = get_config_value(/decl/config/text/comms_password) + params["chan"] = admin_irc params["msg"] = msg params["src_key"] = source.key params["src_char"] = source.mob.real_name || source.mob.name @@ -42,13 +48,7 @@ export2irc(params) /proc/get_world_url() - . = "byond://" - if(config.serverurl) - . += config.serverurl - else if(config.server) - . += config.server - else - . += "[world.address]:[world.port]" + return "byond://[get_config_value(/decl/config/text/server) || get_config_value(/decl/config/text/serverurl) || "[world.address]:[world.port]"]" /hook/startup/proc/ircNotify() send2mainirc("Server starting up on [get_world_url()]") diff --git a/code/modules/fabrication/_fabricator.dm b/code/modules/fabrication/_fabricator.dm index cf8b3a511fd..82899208d29 100644 --- a/code/modules/fabrication/_fabricator.dm +++ b/code/modules/fabrication/_fabricator.dm @@ -53,6 +53,9 @@ var/species_variation = /decl/species/human // If this fabricator is a variant for a specific species, this will be checked to unlock species-specific designs. + // If TRUE, will accept atoms with contents. + var/ignore_input_contents_length = FALSE + // If TRUE, fills fabricator with material on initalize var/prefilled = FALSE @@ -88,7 +91,7 @@ // Get any local network we need to be part of. set_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) - if(SSfabrication.post_recipe_init) + if(SSfabrication.initialized) refresh_design_cache() else SSfabrication.queue_design_cache_refresh(src) diff --git a/code/modules/fabrication/designs/_design.dm b/code/modules/fabrication/designs/_design.dm index 8d381868fe1..2b9256b049c 100644 --- a/code/modules/fabrication/designs/_design.dm +++ b/code/modules/fabrication/designs/_design.dm @@ -11,6 +11,9 @@ var/max_amount = 1 // How many instances can be queued at once var/list/required_technology var/list/species_locked + /// Set to explicit FALSE to cause n stacks to be created instead of 1 stack of n amount. + /// Does not work for non-stacks being created as stacks, do not set to explicit TRUE for non-stacks. + var/pass_multiplier_to_product_new // Populate name and resources from the product type. /datum/fabricator_recipe/proc/get_product_name() @@ -20,6 +23,8 @@ ..() if(!path) return + if(isnull(pass_multiplier_to_product_new)) + pass_multiplier_to_product_new = ispath(path, /obj/item/stack) if(!name) name = get_product_name() if(required_technology == TRUE) @@ -57,7 +62,7 @@ /datum/fabricator_recipe/proc/build(var/turf/location, var/datum/fabricator_build_order/order) . = list() - if(ispath(path, /obj/item/stack)) + if(ispath(path, /obj/item/stack) && pass_multiplier_to_product_new) . += new path(location, order.multiplier) else for(var/i = 1, i <= order.multiplier, i++) diff --git a/code/modules/fabrication/designs/general/designs_general.dm b/code/modules/fabrication/designs/general/designs_general.dm index e4b7a8c647a..6efb0d8561a 100644 --- a/code/modules/fabrication/designs/general/designs_general.dm +++ b/code/modules/fabrication/designs/general/designs_general.dm @@ -97,7 +97,7 @@ path = /obj/item/plunger /datum/fabricator_recipe/fiberglass - path = /obj/item/stack/material/reinforced/mapped/fiberglass + path = /obj/item/stack/material/sheet/reinforced/mapped/fiberglass category = "Textiles" fabricator_types = list( FABRICATOR_CLASS_GENERAL, @@ -165,11 +165,15 @@ /datum/fabricator_recipe/gift_wrapper path = /obj/item/stack/package_wrap/gift - -/datum/fabricator_recipe/network_pos - path = /obj/item/network_pos /datum/fabricator_recipe/clothes_iron path = /obj/item/ironingiron /datum/fabricator_recipe/ironing_board path = /obj/item/roller/ironingboard + +/datum/fabricator_recipe/duct_tape + path = /obj/item/stack/tape_roll/duct_tape + pass_multiplier_to_product_new = FALSE // they are printed as single items with 32 uses + +/datum/fabricator_recipe/network_pos + path = /obj/item/network_pos diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm index e3113f148e1..d102d952dc5 100644 --- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm +++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm @@ -221,9 +221,6 @@ /datum/fabricator_recipe/imprinter/circuit/chemical_dispenser path = /obj/item/stock_parts/circuitboard/chemical_dispenser -/datum/fabricator_recipe/imprinter/circuit/atmos_control - path = /obj/item/stock_parts/circuitboard/atmoscontrol - /datum/fabricator_recipe/imprinter/circuit/pipe_dispenser path = /obj/item/stock_parts/circuitboard/pipedispensor @@ -497,4 +494,25 @@ path = /obj/item/stock_parts/circuitboard/holomap /datum/fabricator_recipe/imprinter/circuit/geothermal_generator - path = /obj/item/stock_parts/circuitboard/geothermal \ No newline at end of file + path = /obj/item/stock_parts/circuitboard/geothermal + +/datum/fabricator_recipe/imprinter/circuit/area_atmos + path = /obj/item/stock_parts/circuitboard/area_atmos + +/datum/fabricator_recipe/imprinter/circuit/area_atmos_control + path = /obj/item/stock_parts/circuitboard/area_atmos/area + +/datum/fabricator_recipe/imprinter/circuit/tag_scrubber_control + path = /obj/item/stock_parts/circuitboard/area_atmos/tag + +/datum/fabricator_recipe/imprinter/circuit/central_atmos + path = /obj/item/stock_parts/circuitboard/central_atmos + +/datum/fabricator_recipe/imprinter/circuit/banking_mainframe + path = /obj/item/stock_parts/circuitboard/banking_mainframe + +/datum/fabricator_recipe/imprinter/circuit/trade_controller + path = /obj/item/stock_parts/circuitboard/trade_controller + +/datum/fabricator_recipe/imprinter/circuit/telepad + path = /obj/item/stock_parts/circuitboard/telepad \ No newline at end of file diff --git a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm index 1c4f1849691..f2cb06e6080 100644 --- a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm +++ b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm @@ -78,9 +78,27 @@ category = "Exosuit Equipment" path = /obj/item/mech_equipment/clamp +/datum/fabricator_recipe/industrial/exosuit_gear/flash + path = /obj/item/mech_equipment/flash + /datum/fabricator_recipe/industrial/exosuit_gear/gravity_catapult path = /obj/item/mech_equipment/catapult +/datum/fabricator_recipe/industrial/exosuit_gear/ionjets + path = /obj/item/mech_equipment/ionjets + +/datum/fabricator_recipe/industrial/exosuit_gear/camera + path = /obj/item/mech_equipment/camera + +/datum/fabricator_recipe/industrial/exosuit_gear/shields + path = /obj/item/mech_equipment/shields + +/datum/fabricator_recipe/industrial/exosuit_gear/ballistic_shield + path = /obj/item/mech_equipment/ballistic_shield + +/datum/fabricator_recipe/industrial/exosuit_gear/atmos_shields + path = /obj/item/mech_equipment/atmos_shields + /datum/fabricator_recipe/industrial/exosuit_gear/drill path = /obj/item/mech_equipment/drill @@ -93,14 +111,16 @@ if(!ispath(path, /obj/item/mech_equipment/mounted_system)) return var/obj/item/mech_equipment/mounted_system/system = path - - var/mounted_type = initial(system.holding_type) + var/mounted_type = initial(system.holding) if(!mounted_type) return var/list/mounted_cost = atom_info_repository.get_matter_for(mounted_type) for(var/mat in mounted_cost) resources[mat] += mounted_cost[mat] * FABRICATOR_EXTRA_COST_FACTOR +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/machete + path = /obj/item/mech_equipment/mounted_system/melee/machete + /datum/fabricator_recipe/industrial/exosuit_gear/mounted/plasma path = /obj/item/mech_equipment/mounted_system/taser/plasma @@ -110,6 +130,9 @@ /datum/fabricator_recipe/industrial/exosuit_gear/mounted/laser path = /obj/item/mech_equipment/mounted_system/taser/laser +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/autoplasma + path = /obj/item/mech_equipment/mounted_system/taser/autoplasma + /datum/fabricator_recipe/industrial/exosuit_gear/mounted/smg path = /obj/item/mech_equipment/mounted_system/projectile @@ -128,9 +151,6 @@ /datum/fabricator_recipe/industrial/exosuit_gear/mounted/extinguisher path = /obj/item/mech_equipment/mounted_system/extinguisher -/datum/fabricator_recipe/industrial/exosuit_gear/mounted/mechshields - path = /obj/item/mech_equipment/shields - /datum/fabricator_recipe/industrial/exosuit_ammo category = "Exosuit Ammunition" path = /obj/item/ammo_magazine/mech/smg_top diff --git a/code/modules/fabrication/designs/meat/_designs_meat.dm b/code/modules/fabrication/designs/meat/_designs_meat.dm index abfccd0d711..0b648ab7fd3 100644 --- a/code/modules/fabrication/designs/meat/_designs_meat.dm +++ b/code/modules/fabrication/designs/meat/_designs_meat.dm @@ -1,3 +1,3 @@ /datum/fabricator_recipe/meat fabricator_types = list(FABRICATOR_CLASS_MEAT) - required_technology = TRUE + abstract_type = /datum/fabricator_recipe/meat diff --git a/code/modules/fabrication/designs/micro/designs_cutlery.dm b/code/modules/fabrication/designs/micro/designs_cutlery.dm index 11a8a8368e3..b9b5cab14b9 100644 --- a/code/modules/fabrication/designs/micro/designs_cutlery.dm +++ b/code/modules/fabrication/designs/micro/designs_cutlery.dm @@ -1,43 +1,51 @@ /datum/fabricator_recipe/cutlery name = "fork, aluminium" - path = /obj/item/kitchen/utensil/fork + path = /obj/item/utensil/fork category = "Cutlery" fabricator_types = list(FABRICATOR_CLASS_MICRO) /datum/fabricator_recipe/cutlery/spoon_aluminium name = "spoon, aluminium" - path = /obj/item/kitchen/utensil/spoon + path = /obj/item/utensil/spoon /datum/fabricator_recipe/cutlery/spork_aluminium name = "spork, aluminium" - path = /obj/item/kitchen/utensil/spork + path = /obj/item/utensil/spork /datum/fabricator_recipe/cutlery/knife_aluminium name = "table knife, aluminium" - path = /obj/item/knife/table + path = /obj/item/utensil/knife + +/datum/fabricator_recipe/cutlery/chopsticks + name = "chopsticks, aluminium" + path = /obj/item/utensil/chopsticks/aluminium /datum/fabricator_recipe/cutlery/foon_aluminium name = "foon, aluminium" - path = /obj/item/kitchen/utensil/foon + path = /obj/item/utensil/foon hidden = TRUE /datum/fabricator_recipe/cutlery/fork_plastic name = "fork, plastic" - path = /obj/item/kitchen/utensil/fork/plastic + path = /obj/item/utensil/fork/plastic /datum/fabricator_recipe/cutlery/spoon_plastic name = "spoon, plastic" - path = /obj/item/kitchen/utensil/spoon/plastic + path = /obj/item/utensil/spoon/plastic /datum/fabricator_recipe/cutlery/spork_plastic name = "spork, plastic" - path = /obj/item/kitchen/utensil/spork/plastic + path = /obj/item/utensil/spork/plastic /datum/fabricator_recipe/cutlery/knife_plastic name = "table knife, plastic" - path = /obj/item/knife/table/plastic + path = /obj/item/utensil/knife/plastic + +/datum/fabricator_recipe/cutlery/chopsticks/plastic + name = "chopsticks, plastic" + path = /obj/item/utensil/chopsticks/plastic /datum/fabricator_recipe/cutlery/foon_plastic name = "foon, plastic" - path = /obj/item/kitchen/utensil/foon/plastic + path = /obj/item/utensil/foon/plastic hidden = TRUE diff --git a/code/modules/fabrication/designs/micro/designs_glasses.dm b/code/modules/fabrication/designs/micro/designs_glasses.dm index fe582a40007..1efd81517c2 100644 --- a/code/modules/fabrication/designs/micro/designs_glasses.dm +++ b/code/modules/fabrication/designs/micro/designs_glasses.dm @@ -35,3 +35,14 @@ /datum/fabricator_recipe/drinkingglass/metalcoffecup path = /obj/item/chems/drinks/glass2/coffeecup/metal + +/datum/fabricator_recipe/dinnerware + category = "Dinnerware" + fabricator_types = list(FABRICATOR_CLASS_MICRO) + path = /obj/item/plate + +/datum/fabricator_recipe/dinnerware/platter + path = /obj/item/plate/platter + +/datum/fabricator_recipe/dinnerware/tray + path = /obj/item/plate/tray diff --git a/code/modules/fabrication/designs/pipe/disposal_pipe_datums.dm b/code/modules/fabrication/designs/pipe/disposal_pipe_datums.dm index 1952ced0dc0..0340a6c60f4 100644 --- a/code/modules/fabrication/designs/pipe/disposal_pipe_datums.dm +++ b/code/modules/fabrication/designs/pipe/disposal_pipe_datums.dm @@ -8,7 +8,7 @@ name = "disposal pipe segment" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' + build_icon = 'icons/obj/pipes/disposal_pipe.dmi' build_icon_state = "pipe-s" path = /obj/structure/disposalconstruct fabricator_types = list( @@ -18,7 +18,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/bent name = "bent disposal pipe segment" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-c" turn = DISPOSAL_FLIP_RIGHT constructed_path = /obj/structure/disposalpipe/segment/bent @@ -26,7 +25,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/junction name = "disposal pipe junction" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j1" turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/junction @@ -34,7 +32,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/junctionm name = "disposal pipe junction (mirrored)" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j2" turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/junction/mirrored @@ -42,7 +39,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/yjunction name = "disposal pipe y-junction" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-y" turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_RIGHT constructed_path = /obj/structure/disposalpipe/junction @@ -50,7 +46,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/trunk name = "disposal pipe trunk" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-t" constructed_path = /obj/structure/disposalpipe/trunk turn = DISPOSAL_FLIP_NONE @@ -58,7 +53,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/up name = "disposal pipe upwards segment" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-u" constructed_path = /obj/structure/disposalpipe/up turn = DISPOSAL_FLIP_NONE @@ -66,7 +60,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/down name = "disposal pipe downwards segment" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-d" constructed_path = /obj/structure/disposalpipe/down turn = DISPOSAL_FLIP_NONE @@ -74,7 +67,7 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device name = "disposal bin" desc = "A bin used to dispose of trash." - build_icon = 'icons/obj/pipes/disposal.dmi' + build_icon = 'icons/obj/pipes/disposal_bin.dmi' build_icon_state = "disposal" path = /obj/structure/disposalconstruct/machine constructed_path = /obj/machinery/disposal @@ -83,7 +76,7 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/outlet name = "disposal outlet" desc = "an outlet that ejects things from a disposal network." - build_icon = 'icons/obj/pipes/disposal.dmi' + build_icon = 'icons/obj/pipes/disposal_outlet.dmi' build_icon_state = "outlet" path = /obj/structure/disposalconstruct/machine/outlet constructed_path = /obj/structure/disposaloutlet @@ -91,15 +84,14 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/chute name = "disposal chute" desc = "A chute to put things into a disposal network." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "intake" + build_icon = 'icons/obj/pipes/disposal_chute.dmi' + build_icon_state = "chute" constructed_path = /obj/machinery/disposal/deliveryChute path = /obj/structure/disposalconstruct/machine/chute /datum/fabricator_recipe/pipe/disposal_dispenser/device/sorting name = "disposal sorter" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j1s" turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction @@ -108,7 +100,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/sorting/wildcard name = "wildcard disposal sorter" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j1s" turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction/wildcard @@ -117,7 +108,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/sorting/untagged name = "untagged disposal sorter" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j1s" turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction/untagged @@ -126,7 +116,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/sortingm name = "disposal sorter (mirrored)" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j2s" turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction/flipped @@ -135,7 +124,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/sorting/wildcardm name = "wildcard disposal sorter (mirrored)" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j2s" turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction/wildcard/flipped @@ -144,7 +132,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/sorting/untaggedm name = "untagged disposal sorter (mirrored)" desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j2s" turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/sortjunction/untagged/flipped @@ -153,7 +140,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/tagger name = "disposal tagger" desc = "It tags things." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-tagger" turn = DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/tagger @@ -162,7 +148,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/tagger/partial name = "disposal partial tagger" desc = "It tags things." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-tagger-partial" turn = DISPOSAL_FLIP_FLIP constructed_path = /obj/structure/disposalpipe/tagger/partial @@ -171,7 +156,6 @@ /datum/fabricator_recipe/pipe/disposal_dispenser/device/diversion name = "disposal diverter" desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "pipe-j1s" turn = DISPOSAL_FLIP_FLIP | DISPOSAL_FLIP_RIGHT constructed_path = /obj/structure/disposalpipe/diversion_junction diff --git a/code/modules/fabrication/designs/pipe/pipe_datum_base.dm b/code/modules/fabrication/designs/pipe/pipe_datum_base.dm index 17fd0f3ac88..8d3c48485e8 100644 --- a/code/modules/fabrication/designs/pipe/pipe_datum_base.dm +++ b/code/modules/fabrication/designs/pipe/pipe_datum_base.dm @@ -47,7 +47,7 @@ . += new_item /datum/fabricator_recipe/pipe/disposal_dispenser/build(var/turf/location, var/datum/fabricator_build_order/order) - . = ..() + . = list() for(var/i = 1, i <= order.multiplier, i++) var/obj/structure/disposalconstruct/new_item = new path(location) new_item.SetName(name) diff --git a/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm b/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm index e2a471367ec..3b52762f8f9 100644 --- a/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm +++ b/code/modules/fabrication/designs/protolathe/designs_machine_intelligence.dm @@ -1,15 +1,15 @@ /datum/fabricator_recipe/protolathe/brains category = "Machine Intelligence" - path = /obj/item/mmi + path = /obj/item/organ/internal/brain_interface/empty /datum/fabricator_recipe/protolathe/brains/get_product_name() . = "intelligence storage ([..()])" +/datum/fabricator_recipe/protolathe/brains/robotic + path = /obj/item/organ/internal/brain/robotic + /datum/fabricator_recipe/protolathe/brains/mmi_radio - path = /obj/item/mmi/radio_enabled - -/datum/fabricator_recipe/protolathe/brains/posibrain - path = /obj/item/organ/internal/posibrain + path = /obj/item/organ/internal/brain_interface/radio_enabled/empty /datum/fabricator_recipe/protolathe/brains/paicard path = /obj/item/paicard diff --git a/code/modules/fabrication/designs/protolathe/designs_tools.dm b/code/modules/fabrication/designs/protolathe/designs_tools.dm index a70e4be60fe..abeee833093 100644 --- a/code/modules/fabrication/designs/protolathe/designs_tools.dm +++ b/code/modules/fabrication/designs/protolathe/designs_tools.dm @@ -81,21 +81,19 @@ path = /obj/item/bodybag/cryobag /datum/fabricator_recipe/protolathe/tool/jackhammer - path = /obj/item/pickaxe/jackhammer + path = /obj/item/tool/hammer/jack /datum/fabricator_recipe/protolathe/tool/drill - path = /obj/item/pickaxe/drill + path = /obj/item/tool/drill -/* /datum/fabricator_recipe/protolathe/tool/plasmacutter path = /obj/item/gun/energy/plasmacutter -*/ -/datum/fabricator_recipe/protolathe/tool/pick_diamond - path = /obj/item/pickaxe/diamond +/datum/fabricator_recipe/protolathe/tool/pick_titanium + path = /obj/item/tool/pickaxe/titanium /datum/fabricator_recipe/protolathe/tool/drill_diamond - path = /obj/item/pickaxe/diamonddrill + path = /obj/item/tool/drill/diamond /datum/fabricator_recipe/protolathe/tool/depth_scanner path = /obj/item/depth_scanner diff --git a/code/modules/fabrication/designs/robotics/designs_organs.dm b/code/modules/fabrication/designs/robotics/designs_organs.dm index 10bd93793a0..96e559fe4cc 100644 --- a/code/modules/fabrication/designs/robotics/designs_organs.dm +++ b/code/modules/fabrication/designs/robotics/designs_organs.dm @@ -23,7 +23,7 @@ var/decl/species/species = get_species_by_key(order.get_data("species", global.using_map.default_species)) for(var/obj/item/organ/internal/I in .) I.set_species(species) - I.set_bodytype(species.base_prosthetics_model) + I.set_bodytype(species.base_internal_prosthetics_model) I.status |= ORGAN_CUT_AWAY /datum/fabricator_recipe/robotics/organ/heart diff --git a/code/modules/fabrication/fabricator_bioprinter.dm b/code/modules/fabrication/fabricator_bioprinter.dm index f92e2d8526f..f14440f8994 100644 --- a/code/modules/fabrication/fabricator_bioprinter.dm +++ b/code/modules/fabrication/fabricator_bioprinter.dm @@ -8,8 +8,12 @@ base_icon_state = "bioprinter" base_type = /obj/machinery/fabricator/bioprinter fabricator_class = FABRICATOR_CLASS_MEAT + ignore_input_contents_length = TRUE // mostly eats organs, let people quickly dump a torso in there without doing surgery. var/datum/dna/loaded_dna //DNA for biological organs +/obj/machinery/fabricator/bioprinter/can_ingest(var/obj/item/thing) + . = istype(thing, /obj/item/organ) || istype(thing, /obj/item/chems/food/meat) || ..() + /obj/machinery/fabricator/bioprinter/get_nano_template() return "fabricator_bioprinter.tmpl" @@ -39,7 +43,7 @@ if(H && istype(H) && H.species && H.dna) loaded_dna = H.dna.Clone() to_chat(user, SPAN_INFO("You inject the blood sample into \the [src].")) - S.reagents.remove_any(BIOPRINTER_BLOOD_SAMPLE_SIZE) + S.remove_any_reagents(BIOPRINTER_BLOOD_SAMPLE_SIZE) //Tell nano to do its job SSnano.update_uis(src) return TRUE @@ -64,7 +68,7 @@ "UE" = loaded_dna.unique_enzymes, "species" = loaded_dna.species, "btype" = loaded_dna.b_type, - ) + ) /obj/machinery/fabricator/bioprinter/ui_draw_config(mob/user, ui_key) return TRUE //Always draw it for us diff --git a/code/modules/fabrication/fabricator_build.dm b/code/modules/fabrication/fabricator_build.dm index 035068cdc72..5ed1bf02adc 100644 --- a/code/modules/fabrication/fabricator_build.dm +++ b/code/modules/fabrication/fabricator_build.dm @@ -22,16 +22,38 @@ step(product, output_dir) /obj/machinery/fabricator/proc/start_building() - if(!(fab_status_flags & FAB_BUSY) && is_functioning()) - fab_status_flags |= FAB_BUSY + if(is_functioning()) update_use_power(POWER_USE_ACTIVE) - sound_token = play_looping_sound(src, sound_id, fabricator_sound, volume = 30) /obj/machinery/fabricator/proc/stop_building() - if(fab_status_flags & FAB_BUSY) + update_use_power(POWER_USE_IDLE) + +/obj/machinery/fabricator/power_change() + . = ..() + if(.) + if(stat & (BROKEN|NOPOWER)) + stop_building() + else if(!currently_building) + get_next_build() + else + start_building() + +/obj/machinery/fabricator/update_use_power() + . = ..() + if(use_power == POWER_USE_ACTIVE) + fab_status_flags |= FAB_BUSY + if(!sound_token) + sound_token = play_looping_sound(src, sound_id, fabricator_sound, volume = 30) + if(!currently_building) + get_next_build() + else fab_status_flags &= ~FAB_BUSY - update_use_power(POWER_USE_IDLE) QDEL_NULL(sound_token) + // This is to allow people to fix the fab when it + // gets stuck building a recipe during power loss. + if(istype(currently_building)) + queued_orders.Insert(1, currently_building) + currently_building = null /obj/machinery/fabricator/proc/get_next_build() currently_building = null diff --git a/code/modules/fabrication/fabricator_food.dm b/code/modules/fabrication/fabricator_food.dm index 65a3f51f109..b275ddc8f4c 100644 --- a/code/modules/fabrication/fabricator_food.dm +++ b/code/modules/fabrication/fabricator_food.dm @@ -13,15 +13,15 @@ return ..() var/true_text = lowertext(html_decode(text)) if(findtext(true_text, "status")) - addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_status), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator/replicator, state_status)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) else if(findtext(true_text, "menu")) - addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_menu), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - else + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator/replicator, state_menu)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + else for(var/datum/fabricator_recipe/recipe in design_cache) if(recipe.hidden && !(fab_status_flags & FAB_HACKED)) continue if(findtext(true_text, lowertext(recipe.name))) - addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/try_queue_build, recipe, 1), 2 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator, try_queue_build), recipe, 1), 2 SECONDS) break ..() diff --git a/code/modules/fabrication/fabricator_intake.dm b/code/modules/fabrication/fabricator_intake.dm index 8baaf1b6ee7..f7d5cd6dfc2 100644 --- a/code/modules/fabrication/fabricator_intake.dm +++ b/code/modules/fabrication/fabricator_intake.dm @@ -15,7 +15,7 @@ var/reagent_matter = round(taking_reagent / REAGENT_UNITS_PER_MATERIAL_UNIT) if(reagent_matter <= 0) continue - thing.reagents.remove_reagent(R, taking_reagent) + thing.remove_from_reagents(R, taking_reagent) stored_material[R] += reagent_matter // If we're destroying this, take everything. if(destructive) @@ -66,7 +66,7 @@ adding_mat_overlay.color = mat_colour material_overlays += adding_mat_overlay update_icon() - addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/remove_mat_overlay, adding_mat_overlay), 1 SECOND) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/fabricator, remove_mat_overlay), adding_mat_overlay), 1 SECOND) if(stack_ref && stacks_used) stack_ref.use(stacks_used) @@ -122,6 +122,13 @@ visible_message(SPAN_NOTICE("\The [user] inserts \the [O] into \the [src], and after a second or so of loud clicking, the fabricator beeps and spits it out again.")) return + // TEMP HACK FIX: + // Autolathes currently do not process atom contents. As a workaround, refuse all atoms with contents. + if(length(O.contents) && !ignore_input_contents_length) + to_chat(user, SPAN_WARNING("\The [src] cannot process an object containing other objects. Empty it out first.")) + return + // REMOVE FIX WHEN LATHES TAKE CONTENTS PLS. + // Take reagents, if any are applicable. var/atom_name = O.name var/reagents_taken = take_reagents(O, user) diff --git a/code/modules/fabrication/fabricator_pipe.dm b/code/modules/fabrication/fabricator_pipe.dm index c3cd5055a16..a552ff4f1ac 100644 --- a/code/modules/fabrication/fabricator_pipe.dm +++ b/code/modules/fabrication/fabricator_pipe.dm @@ -50,7 +50,7 @@ base_type = /obj/machinery/fabricator/pipe/disposal //Allow you to drag-drop disposal pipes into it -/obj/machinery/fabricator/pipe/disposal/receive_mouse_drop(var/atom/dropping, mob/user) +/obj/machinery/fabricator/pipe/disposal/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && istype(dropping, /obj/structure/disposalconstruct)) qdel(dropping) diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm deleted file mode 100644 index 08cbc66cf1d..00000000000 --- a/code/modules/flufftext/Dreaming.dm +++ /dev/null @@ -1,18 +0,0 @@ - -/mob/living/carbon/proc/dream() - set waitfor = FALSE - dreaming = 1 - - for(var/i = rand(1,4),i > 0, i--) - to_chat(src, "... [pick(SSlore.dreams)] ...") - sleep(rand(40,70)) - if(!HAS_STATUS(src, STAT_PARA)) - dreaming = 0 - return - dreaming = 0 - -/mob/living/carbon/proc/handle_dreams() - if(client && !dreaming && prob(5)) - dream() - -/mob/living/carbon/var/dreaming = 0 diff --git a/code/modules/fluids/_fluid.dm b/code/modules/fluids/_fluid.dm new file mode 100644 index 00000000000..0306d808ce1 --- /dev/null +++ b/code/modules/fluids/_fluid.dm @@ -0,0 +1,129 @@ +/atom/movable/fluid_overlay + name = "" + icon = 'icons/effects/liquids.dmi' + icon_state = "" + anchored = TRUE + simulated = FALSE + opacity = FALSE + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + layer = FLY_LAYER + alpha = 0 + color = COLOR_LIQUID_WATER + is_spawnable_type = FALSE + appearance_flags = KEEP_TOGETHER + var/last_update_depth + var/updating_edge_mask + +/atom/movable/fluid_overlay/on_update_icon() + + var/datum/reagents/loc_reagents = loc?.reagents + var/reagent_volume = loc_reagents?.total_volume + + // Update layer. + var/new_layer + if(reagent_volume > FLUID_DEEP) + new_layer = DEEP_FLUID_LAYER + else + new_layer = SHALLOW_FLUID_LAYER + if(layer != new_layer) + layer = new_layer + + // Update colour. + var/new_color = loc_reagents?.get_color() + if(color != new_color) + color = new_color + + // Update alpha. + if(reagent_volume) + + var/decl/material/main_reagent = loc_reagents?.get_primary_reagent_decl() + var/new_alpha + if(main_reagent) // TODO: weighted alpha from all reagents, not just primary + new_alpha = clamp(CEILING(255*(reagent_volume/FLUID_DEEP)) * main_reagent.opacity, main_reagent.min_fluid_opacity, main_reagent.max_fluid_opacity) + else + new_alpha = FLUID_MIN_ALPHA + if(new_alpha != alpha) + alpha = new_alpha + + // Update icon state. We use overlays so flick() can work on the base fluid overlay. + if(reagent_volume <= FLUID_PUDDLE) + set_overlays("puddle") + else if(reagent_volume <= FLUID_SHALLOW) + set_overlays("shallow_still") + else if(reagent_volume < FLUID_DEEP) + set_overlays("mid_still") + else if(reagent_volume < (FLUID_DEEP*2)) + set_overlays("deep_still") + else + set_overlays("ocean") + else + cut_overlays() + compile_overlays() + + // Update alpha masks. + if((last_update_depth > FLUID_PUDDLE) != (reagent_volume > FLUID_PUDDLE)) + // This includes ourselves. + for(var/turf/neighbor as anything in RANGE_TURFS(loc, 1)) + if(neighbor.fluid_overlay && !neighbor.fluid_overlay.updating_edge_mask) + neighbor.fluid_overlay.update_alpha_mask() + // Update everything on our atom too. + if(length(loc?.contents) && (last_update_depth > FLUID_PUDDLE && last_update_depth <= FLUID_SHALLOW) != (reagent_volume <= FLUID_SHALLOW)) + for(var/atom/movable/AM in loc.contents) + if(AM.simulated) + AM.update_turf_alpha_mask() + last_update_depth = reagent_volume + +var/global/list/_fluid_edge_mask_cache = list() +/atom/movable/fluid_overlay/proc/update_alpha_mask() + + set waitfor = FALSE + // Delay to avoid multiple updates. + if(updating_edge_mask) + return + updating_edge_mask = TRUE + sleep(-1) + updating_edge_mask = FALSE + + if(loc?.reagents?.total_volume <= FLUID_PUDDLE) + remove_filter("fluid_edge_mask") + return + + // Collect neighbor info. + var/list/ignored + var/list/connections + for(var/checkdir in global.alldirs) + var/turf/neighbor = get_step(loc, checkdir) + if(!neighbor || neighbor.density || neighbor?.reagents?.total_volume > FLUID_PUDDLE) + LAZYADD(connections, checkdir) + else + LAZYADD(ignored, checkdir) + + if(!LAZYLEN(connections)) + remove_filter("fluid_edge_mask") + return + + // Generate and apply an alpha filter for our edges. + // Need to use icons here due to overlays being hell with directional states. + + var/cache_key = "[length(connections) ? jointext(connections, "-") : 0]|[length(ignored) ? jointext(ignored, "-") : 0]" + var/icon/edge_mask = global._fluid_edge_mask_cache[cache_key] + if(isnull(edge_mask)) + connections = dirs_to_corner_states(connections) + edge_mask = icon(icon, "blank") + for(var/i = 1 to 4) + if(length(connections) >= i) + edge_mask.Blend(icon(icon, "edgemask[connections[i]]", dir = BITFLAG(i-1)), ICON_OVERLAY) + global._fluid_edge_mask_cache[cache_key] = edge_mask || FALSE + + if(edge_mask) + add_filter("fluid_edge_mask", 1, list(type = "alpha", icon = edge_mask, flags = MASK_INVERSE)) + else + remove_filter("fluid_edge_mask") + +/atom/movable/fluid_overlay/Destroy() + var/atom/oldloc = loc + . = ..() + if(istype(oldloc)) + for(var/atom/movable/AM in oldloc.contents) + if(AM.simulated) + AM.update_turf_alpha_mask() diff --git a/code/modules/fluids/fluid_flood.dm b/code/modules/fluids/fluid_flood.dm new file mode 100644 index 00000000000..808d26f1e32 --- /dev/null +++ b/code/modules/fluids/fluid_flood.dm @@ -0,0 +1,26 @@ +// Permaflood overlay. +var/global/list/flood_type_overlay_cache = list() +/proc/get_flood_overlay(fluid_type) + if(!ispath(fluid_type, /decl/material)) + return null + if(!global.flood_type_overlay_cache[fluid_type]) + var/decl/material/fluid_decl = GET_DECL(fluid_type) + var/obj/effect/flood/new_flood = new + new_flood.color = fluid_decl.color + new_flood.alpha = round(fluid_decl.min_fluid_opacity + ((fluid_decl.max_fluid_opacity - fluid_decl.min_fluid_opacity) * 0.5)) + global.flood_type_overlay_cache[fluid_type] = new_flood + return new_flood + return global.flood_type_overlay_cache[fluid_type] + +/obj/effect/flood + name = "" + icon = 'icons/effects/liquids.dmi' + icon_state = "ocean" + layer = DEEP_FLUID_LAYER + color = COLOR_LIQUID_WATER + alpha = 140 + invisibility = 0 + simulated = FALSE + density = FALSE + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_UNCLICKABLE diff --git a/code/modules/fluids/fluid_mapped.dm b/code/modules/fluids/fluid_mapped.dm new file mode 100644 index 00000000000..beab9fe50e0 --- /dev/null +++ b/code/modules/fluids/fluid_mapped.dm @@ -0,0 +1,36 @@ + +// Map helpers. +/obj/abstract/landmark/mapped_flood + name = "mapped fluid area" + alpha = FLUID_MAX_ALPHA + icon_state = "ocean" + color = COLOR_LIQUID_WATER + var/fluid_type = /decl/material/liquid/water + +/obj/abstract/landmark/mapped_flood/Initialize() + ..() + var/turf/my_turf = get_turf(src) + if(my_turf) + my_turf.set_flooded(fluid_type) + return INITIALIZE_HINT_QDEL + +/obj/abstract/landmark/mapped_fluid + name = "mapped fluid area" + alpha = FLUID_MIN_ALPHA + icon_state = "shallow_still" + color = COLOR_LIQUID_WATER + + var/fluid_type = /decl/material/liquid/water + var/fluid_initial = FLUID_MAX_DEPTH + +/obj/abstract/landmark/mapped_fluid/Initialize() + ..() + var/turf/my_turf = get_turf(src) + if(my_turf) + my_turf.add_to_reagents(fluid_type, fluid_initial) + return INITIALIZE_HINT_QDEL + +/obj/abstract/landmark/mapped_fluid/fuel + name = "spilled fuel" + fluid_type = /decl/material/liquid/fuel + fluid_initial = 10 diff --git a/code/modules/food/plates/_plate.dm b/code/modules/food/plates/_plate.dm new file mode 100644 index 00000000000..3d313a07456 --- /dev/null +++ b/code/modules/food/plates/_plate.dm @@ -0,0 +1,71 @@ +/obj/item/plate + name = "plate" + desc = "A small plate, suitable for serving food." + material = /decl/material/solid/stone/ceramic + icon = 'icons/obj/food/plates/small_plate.dmi' + icon_state = ICON_STATE_WORLD + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME + w_class = ITEM_SIZE_SMALL + var/is_dirty + +/obj/item/plate/Destroy() + if(istype(loc, /obj/item/chems/food)) + var/obj/item/chems/food/food = loc + if(food.plate == src) + food.plate = null + return ..() + +/obj/item/plate/proc/make_dirty(obj/item/chems/food/food) + if(!is_dirty) + is_dirty = food?.filling_color || COLOR_WHITE + update_icon() + +/obj/item/plate/clean(clean_forensics = TRUE) + . = ..() + if(is_dirty) + is_dirty = null + update_icon() + +/obj/item/plate/on_update_icon() + . = ..() + if(is_dirty) + var/image/I = image(icon, "[icon_state]-dirty") + I.appearance_flags |= RESET_COLOR + I.color = is_dirty + add_overlay(I) + +/obj/item/plate/proc/try_plate_food(obj/item/chems/food/food, mob/user) + if(food.plate) + to_chat(user, SPAN_WARNING("\The [food] has already been plated.")) + return + if(ismob(loc)) + var/mob/M = loc + if(!M.try_unequip(src)) + return + forceMove(food) + food.plate = src + user?.visible_message(SPAN_NOTICE("\The [user] places \the [food] on \the [src].")) + food.update_icon() + +/obj/item/plate/attackby(obj/item/W, mob/living/user) + // Plating food. + if(istype(W, /obj/item/chems/food)) + if(!user.try_unequip(W)) + return TRUE + try_plate_food(W, user) + return TRUE + return ..() + +/obj/item/plate/platter + name = "platter" + desc = "A large white platter, suitable for serving cakes or other large food." + icon = 'icons/obj/food/plates/platter.dmi' + material = /decl/material/solid/glass + w_class = ITEM_SIZE_NORMAL + +/obj/item/plate/tray + name = "tray" + desc = "A large tray, suitable for serving several servings of food." + icon = 'icons/obj/food/plates/tray.dmi' + material = /decl/material/solid/organic/plastic + w_class = ITEM_SIZE_NORMAL diff --git a/code/modules/food/utensils/_utensil.dm b/code/modules/food/utensils/_utensil.dm new file mode 100644 index 00000000000..05be5aadad9 --- /dev/null +++ b/code/modules/food/utensils/_utensil.dm @@ -0,0 +1,169 @@ +/* + * Some notes on utensils and future plans: + * + * Utensil flags should determine how and if they can interact with + * different food item, ie. forks should not be usable to eat soup, + * spoons should not be usable to eat steak. + * + * The actual mechanics of removing a piece of food should be largely + * identical between utensil types, with the procs existing to be + * overidden to provide specific behavior. + */ + +/obj/item/utensil + + abstract_type = /obj/item/utensil + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_SMALL + origin_tech = @'{"materials":1}' + attack_verb = list("attacked", "stabbed", "poked") + sharp = FALSE + edge = FALSE + thrown_material_force_multiplier = 0.1 + material = /decl/material/solid/metal/aluminium + material_force_multiplier = 0.1 + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME + + var/obj/item/chems/food/loaded_food + var/utensil_flags + +/obj/item/utensil/Destroy() + QDEL_NULL(loaded_food) + return ..() + +/obj/item/utensil/Initialize() + . = ..() + if (prob(60)) + default_pixel_y = rand(0, 4) + reset_offsets(0) + create_reagents(5) + set_extension(src, /datum/extension/tool/variable, list( + TOOL_RETRACTOR = TOOL_QUALITY_BAD, + TOOL_HEMOSTAT = TOOL_QUALITY_MEDIOCRE + )) + +/obj/item/utensil/attack_self(mob/user) + return loaded_food ? loaded_food.attack_self(user) : ..() + +/obj/item/utensil/handle_eaten_by_mob(var/mob/user, var/mob/target) + . = loaded_food ? loaded_food.handle_eaten_by_mob(user, target) : ..() + if(QDELETED(loaded_food)) + loaded_food = null + update_icon() + +/obj/item/utensil/get_edible_material_amount(var/mob/eater) + return loaded_food ? loaded_food.get_edible_material_amount() : ..() + +/obj/item/utensil/on_update_icon() + . = ..() + icon_state = get_world_inventory_state() + if(loaded_food) + var/loaded_state = "[icon_state]_loaded" + if(check_state_in_icon(loaded_state, icon)) + add_overlay(overlay_image(icon, loaded_state, loaded_food.color, RESET_COLOR)) + +/obj/item/chems/food + /// A type used when cloning this food item for utensils. + var/utensil_type + /// A set of utensil flags determining which utensil interactions are valid with this food. + var/utensil_flags = UTENSIL_FLAG_SCOOP | UTENSIL_FLAG_COLLECT + +/obj/item/chems/food/Initialize() + . = ..() + if(isnull(utensil_type)) + utensil_type = type + +// TODO: generalize this for edible non-food items somehow? +/obj/item/chems/food/proc/seperate_chunk(obj/item/utensil/utensil, mob/user) + if(!istype(utensil)) + return + var/remove_amt = min(reagents?.total_volume, get_food_default_transfer_amount(user)) + if(remove_amt) + + // Create a dummy copy of the target food item. + // This ensures we keep all food behavior, strings, sounds, etc. + utensil.loaded_food = new utensil_type(utensil) + QDEL_NULL(utensil.loaded_food.trash) + QDEL_NULL(utensil.loaded_food.plate) + utensil.loaded_food.color = color + utensil.loaded_food.SetName("\proper some [utensil.loaded_food.name]") + + // Pass over a portion of our reagents. + utensil.loaded_food.reagents.clear_reagents() + reagents.trans_to(utensil.loaded_food, remove_amt) + bitecount++ + if(!reagents.total_volume) + handle_consumed() + utensil.update_icon() + + else // This shouldn't happen, but who knows. + to_chat(user, SPAN_WARNING("None of \the [src] is left!")) + handle_consumed() + return TRUE + +/obj/item/chems/food/proc/handle_utensil_collection(obj/item/utensil/utensil, mob/user) + seperate_chunk(utensil, user) + if(utensil.loaded_food) + to_chat(user, SPAN_NOTICE("You collect [utensil.loaded_food] with \the [utensil].")) + return TRUE + return FALSE + +/obj/item/chems/food/proc/handle_utensil_scooping(obj/item/utensil/utensil, mob/user) + seperate_chunk(utensil, user) + if(utensil.loaded_food) + to_chat(user, SPAN_NOTICE("You scoop up [utensil.loaded_food] with \the [utensil].")) + return TRUE + return FALSE + +// TODO: take some condiment, then another attackby to spread it onto bread/toast/etc. +/obj/item/chems/food/proc/handle_utensil_spreading(obj/item/utensil/utensil, mob/user) + return FALSE + +/obj/item/chems/food/proc/handle_utensil_cutting(obj/item/tool, mob/user) + + if(!is_sliceable()) + // TODO: cut a piece off to prepare a food item for another utensil. + return FALSE + + if (!(isturf(loc) && ((locate(/obj/structure/table) in loc) || (locate(/obj/machinery/optable) in loc) || (locate(/obj/item/storage/tray) in loc)))) + to_chat(user, SPAN_WARNING("You cannot slice \the [src] here! You need a table or at least a tray to do it.")) + return TRUE + + if (tool.w_class > ITEM_SIZE_NORMAL) + user.visible_message( + SPAN_NOTICE("\The [user] crudely slices \the [src] with \the [tool]!"), + SPAN_NOTICE("You crudely slice \the [src] with your [tool.name]!") + ) + slices_num -= rand(1,min(1,round(slices_num/2))) + else + user.visible_message( + SPAN_NOTICE("\The [user] slices \the [src]!"), + SPAN_NOTICE("You slice \the [src]!") + ) + var/reagents_per_slice = max(1, round(reagents.total_volume / slices_num)) + for(var/i = 1 to slices_num) + reagents.trans_to_obj(new slice_path(loc), reagents_per_slice) + qdel(src) + return TRUE + + +/obj/item/chems/food/proc/do_utensil_interaction(obj/item/tool, mob/user) + + // Non-utensils. + if(tool && !istype(tool, /obj/item/utensil)) + return has_edge(tool) && (utensil_flags & UTENSIL_FLAG_SLICE) && handle_utensil_cutting(tool, user) + + var/obj/item/utensil/utensil = tool + if(!istype(utensil) || !utensil.utensil_flags) + return FALSE + if(utensil.loaded_food && (utensil.utensil_flags & UTENSIL_FLAG_SPREAD)) + if(!handle_utensil_spreading(utensil, user)) + to_chat(user, SPAN_WARNING("You already have something on \the [utensil].")) + return TRUE + if((utensil.edge || (utensil.utensil_flags & UTENSIL_FLAG_SLICE)) && (utensil_flags & UTENSIL_FLAG_SLICE) && handle_utensil_cutting(utensil, user)) + return TRUE + if((utensil.sharp || (utensil.utensil_flags & UTENSIL_FLAG_COLLECT)) && (utensil_flags & UTENSIL_FLAG_COLLECT) && handle_utensil_collection(utensil, user)) + return TRUE + if((utensil.utensil_flags & UTENSIL_FLAG_SCOOP) && (utensil_flags & UTENSIL_FLAG_SCOOP) && handle_utensil_scooping(utensil, user)) + return TRUE + return FALSE diff --git a/code/modules/food/utensils/utensil_chopsticks.dm b/code/modules/food/utensils/utensil_chopsticks.dm new file mode 100644 index 00000000000..7ab29c96a3e --- /dev/null +++ b/code/modules/food/utensils/utensil_chopsticks.dm @@ -0,0 +1,13 @@ +/obj/item/utensil/chopsticks + name = "chopsticks" + gender = PLURAL + desc = "A pair of sticks used for eating food." + icon = 'icons/obj/food/utensils/chopsticks.dmi' + utensil_flags = UTENSIL_FLAG_COLLECT + material = /decl/material/solid/organic/wood + +/obj/item/utensil/chopsticks/plastic + material = /decl/material/solid/organic/plastic + +/obj/item/utensil/chopsticks/aluminium + material = /decl/material/solid/metal/aluminium diff --git a/code/modules/food/utensils/utensil_fork.dm b/code/modules/food/utensils/utensil_fork.dm new file mode 100644 index 00000000000..9c0b6dc75f5 --- /dev/null +++ b/code/modules/food/utensils/utensil_fork.dm @@ -0,0 +1,8 @@ +/obj/item/utensil/fork + name = "fork" + desc = "It's a fork. Sure is pointy." + icon = 'icons/obj/food/utensils/fork.dmi' + utensil_flags = UTENSIL_FLAG_COLLECT + +/obj/item/utensil/fork/plastic + material = /decl/material/solid/organic/plastic diff --git a/code/modules/food/utensils/utensil_hybrid.dm b/code/modules/food/utensils/utensil_hybrid.dm new file mode 100644 index 00000000000..d7ad70bed87 --- /dev/null +++ b/code/modules/food/utensils/utensil_hybrid.dm @@ -0,0 +1,19 @@ +/obj/item/utensil/spork + name = "spork" + desc = "It's a spork. It's much like a fork, but much blunter." + icon = 'icons/obj/food/utensils/spork.dmi' + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SCOOP + +/obj/item/utensil/spork/plastic + material = /decl/material/solid/organic/plastic + +/obj/item/utensil/foon + name = "foon" + desc = "It's a foon. It's much like a spoon, but much sharper." + icon = 'icons/obj/food/utensils/foon.dmi' + sharp = TRUE + edge = TRUE + utensil_flags = UTENSIL_FLAG_SLICE | UTENSIL_FLAG_SCOOP + +/obj/item/utensil/foon/plastic + material = /decl/material/solid/organic/plastic diff --git a/code/modules/food/utensils/utensil_knife.dm b/code/modules/food/utensils/utensil_knife.dm new file mode 100644 index 00000000000..76a169ee447 --- /dev/null +++ b/code/modules/food/utensils/utensil_knife.dm @@ -0,0 +1,17 @@ +/obj/item/utensil/knife + name = "table knife" + desc = "A simple table knife, used to cut up individual portions of food." + icon = 'icons/obj/food/utensils/steak_knife.dmi' + utensil_flags = UTENSIL_FLAG_SLICE | UTENSIL_FLAG_SPREAD + +/obj/item/utensil/knife/plastic + material = /decl/material/solid/organic/plastic + +/obj/item/utensil/knife/steak + name = "steak knife" + desc = "It's a steak knife with a serrated edge." + icon = 'icons/obj/food/utensils/steak_knife.dmi' + sharp = TRUE + edge = TRUE + utensil_flags = UTENSIL_FLAG_SLICE + material = /decl/material/solid/metal/steel diff --git a/code/modules/food/utensils/utensil_spoon.dm b/code/modules/food/utensils/utensil_spoon.dm new file mode 100644 index 00000000000..2e42c47b63f --- /dev/null +++ b/code/modules/food/utensils/utensil_spoon.dm @@ -0,0 +1,10 @@ +/obj/item/utensil/spoon + name = "spoon" + desc = "It's a spoon. You can see your own upside-down face in it." + icon = 'icons/obj/food/utensils/spoon.dmi' + attack_verb = list("attacked", "poked") + material_force_multiplier = 0.1 //2 when wielded with weight 20 (steel) + utensil_flags = UTENSIL_FLAG_SCOOP + +/obj/item/utensil/spoon/plastic + material = /decl/material/solid/organic/plastic diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm index eb8a9ccbb3b..d8fd1cd546a 100644 --- a/code/modules/games/boardgame.dm +++ b/code/modules/games/boardgame.dm @@ -164,65 +164,99 @@ //Checkers -/obj/item/chems/food/checker +/obj/item/checker name = "checker" desc = "It is plastic and shiny." icon = 'icons/obj/pieces.dmi' icon_state = "checker_black" w_class = ITEM_SIZE_TINY - center_of_mass = @"{'x':16,'y':16}" - nutriment_desc = list("a choking hazard" = 4) - nutriment_amt = 1 + center_of_mass = @'{"x":16,"y":16}' var/piece_color ="black" -/obj/item/chems/food/checker/Initialize() +// Override these to let people eat checkers. +/obj/item/checker/is_edible(mob/eater) + return TRUE + +/obj/item/checker/is_food_empty(mob/eater) + return FALSE + +/obj/item/checker/transfer_eaten_material(mob/eater, amount) + if(isliving(eater)) + var/mob/living/living_eater = eater + living_eater.get_ingested_reagents()?.add_reagent(/decl/material/solid/organic/plastic, 3) + +/obj/item/checker/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT) + return + +/obj/item/checker/show_food_consumed_message(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + return + +/obj/item/checker/show_feed_message_start(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_NOTICE("You begin trying to swallow \the [target].")) + else + user.visible_message(SPAN_NOTICE("\The [user] attempts to force \the [target] to swallow \the [src]!")) + +/obj/item/checker/show_feed_message_end(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_NOTICE("You swallow \the [src].")) + else + user.visible_message(SPAN_NOTICE("\The [user] forces \the [target] to swallow \the [src]!")) + +// End food overrides. + +/obj/item/checker/Initialize() . = ..() icon_state = "[name]_[piece_color]" name = "[piece_color] [name]" -/obj/item/chems/food/checker/red +/obj/item/checker/red piece_color ="red" //Chess -/obj/item/chems/food/checker/pawn +/obj/item/checker/pawn name = "pawn" desc = "How many pawns will die in your war?" -/obj/item/chems/food/checker/pawn/red +/obj/item/checker/pawn/red piece_color ="red" -/obj/item/chems/food/checker/knight +/obj/item/checker/knight name = "knight" desc = "The piece chess deserves, and needs to actually play." -/obj/item/chems/food/checker/knight/red +/obj/item/checker/knight/red piece_color ="red" -/obj/item/chems/food/checker/bishop +/obj/item/checker/bishop name = "bishop" desc = "What corruption occured, urging holy men to fight?" -/obj/item/chems/food/checker/bishop/red +/obj/item/checker/bishop/red piece_color ="red" -/obj/item/chems/food/checker/rook +/obj/item/checker/rook name = "rook" desc = "Representing ancient moving towers. So powerful and fast they were banned from wars, forever." -/obj/item/chems/food/checker/rook/red +/obj/item/checker/rook/red piece_color ="red" -/obj/item/chems/food/checker/queen +/obj/item/checker/queen name = "queen" desc = "A queen of battle and pain. She dances across the battlefield." -/obj/item/chems/food/checker/queen/red +/obj/item/checker/queen/red piece_color ="red" -/obj/item/chems/food/checker/king +/obj/item/checker/king name = "king" desc = "Why does a chess game end when the king dies?" -/obj/item/chems/food/checker/king/red +/obj/item/checker/king/red piece_color ="red" \ No newline at end of file diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 679c23c61d5..b25438de00d 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -264,7 +264,7 @@ var/global/list/card_decks = list() cards = shuffle(cards) user.visible_message("\The [user] shuffles [src].") -/obj/item/deck/handle_mouse_drop(atom/over, mob/user) +/obj/item/deck/handle_mouse_drop(atom/over, mob/user, params) if(over == user && (loc == user || in_range(src, user)) && user.get_empty_hand_slot()) user.put_in_hands(src) return TRUE diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm index 2728becaa1c..73f2aade08a 100644 --- a/code/modules/ghosttrap/trap.dm +++ b/code/modules/ghosttrap/trap.dm @@ -1,5 +1,4 @@ -// This system is used to grab a ghost from observers with the required preferences -// and lack of bans set. See posibrain.dm for an example of how they are called/used. +// This system is used to grab a ghost from observers with the required preferences and lack of bans set. /decl/ghosttrap var/name var/minutes_since_death = 0 // If non-zero the ghost must have been dead for this many minutes to be allowed to spawn @@ -30,7 +29,7 @@ /decl/ghosttrap/proc/request_player(var/mob/target, var/request_string, var/request_timeout) if(request_timeout) LAZYSET(request_timeouts, target, world.time + request_timeout) - events_repository.register(/decl/observ/destroyed, target, src, /decl/ghosttrap/proc/unregister_target) + events_repository.register(/decl/observ/destroyed, target, src, TYPE_PROC_REF(/decl/ghosttrap, unregister_target)) else unregister_target(target) @@ -44,7 +43,7 @@ /decl/ghosttrap/proc/unregister_target(var/target) LAZYREMOVE(request_timeouts, target) - events_repository.unregister(/decl/observ/destroyed, target, src, /decl/ghosttrap/proc/unregister_target) + events_repository.unregister(/decl/observ/destroyed, target, src, TYPE_PROC_REF(/decl/ghosttrap, unregister_target)) // Handles a response to request_player(). /decl/ghosttrap/Topic(href, href_list) @@ -57,7 +56,7 @@ return if(candidate != usr) return - + var/timeout = LAZYACCESS(request_timeouts, target) if(!isnull(timeout) && world.time > timeout) to_chat(candidate, "This occupation request is no longer valid.") @@ -95,33 +94,42 @@ target.SetName(target.real_name) /*********************************** -* Positronic brains. * +* Computer intelligence cores. * ***********************************/ -/decl/ghosttrap/positronic_brain - name = "positronic brain" +/decl/ghosttrap/machine_intelligence + name = "machine intelligence" ban_checks = list("AI",ASSIGNMENT_ROBOT) - pref_check = "ghost_posibrain" - ghost_trap_message = "They are occupying a positronic brain now." + pref_check = "ghost_machine_intelligence" + ghost_trap_message = "They are occupying a computer intelligence core now." + +/decl/ghosttrap/machine_intelligence/transfer_personality(mob/candidate, mob/target) + if(assess_candidate(candidate)) + + var/obj/item/organ/internal/brain/robotic/brain = target.loc?.loc + if(!istype(brain)) + return FALSE + + brain.transfer_key_to_brainmob(candidate, update_brainmob = FALSE) + brain.searching = FALSE + brain.update_icon() + announce_ghost_joinleave(candidate, 0, "[ghost_trap_message]") + + var/mob/living/brainmob = brain.get_brainmob(create_if_missing = TRUE) + if(brainmob) + welcome_candidate(brainmob) + return TRUE -/decl/ghosttrap/positronic_brain/forced(var/mob/user) - var/obj/item/organ/internal/posibrain/brain = new(get_turf(user)) - if(!brain.brainmob) - brain.init() - request_player(brain.brainmob, "Someone is requesting a personality for a positronic brain.", 60 SECONDS) +/decl/ghosttrap/machine_intelligence/forced(var/mob/user) + var/obj/item/organ/internal/brain/robotic/brain = new(get_turf(user)) + request_player(brain.get_brainmob(create_if_missing = TRUE), "Someone is requesting a player for a machine intelligence.", 60 SECONDS) -/decl/ghosttrap/positronic_brain/welcome_candidate(var/mob/target) - to_chat(target, "You are a positronic brain, brought into existence on [station_name()].") +/decl/ghosttrap/machine_intelligence/welcome_candidate(var/mob/target) + to_chat(target, "You are a machine intelligence, brought into existence on [station_name()].") to_chat(target, "As a synthetic intelligence, you answer to all crewmembers, as well as the AI.") to_chat(target, "Remember, the purpose of your existence is to serve the crew and the [station_name()]. Above all else, do no harm.") to_chat(target, "Use say [target.get_language_prefix()]b to speak to other artificial intelligences.") var/turf/T = get_turf(target) - var/obj/item/organ/internal/posibrain/P = target.loc - T.visible_message("\The [P] chimes quietly.") - if(!istype(P)) //wat - return - P.searching = 0 - P.SetName("positronic brain ([P.brainmob.name])") - P.update_icon() + T.visible_message(SPAN_NOTICE("\The [target] beeps loudly.")) /*********************************** * Walking mushrooms and such. * @@ -131,7 +139,7 @@ ban_checks = list("Botany Roles") pref_check = "ghost_plant" ghost_trap_message = "They are occupying a living plant now." - + /decl/ghosttrap/sentient_plant/forced(var/mob/user) request_player(new /mob/living/simple_animal/mushroom(get_turf(user)), "Someone is harvesting a walking mushroom.", 15 SECONDS) diff --git a/code/modules/goals/_goal.dm b/code/modules/goals/_goal.dm index 41a179c1a9b..fbcf0e55f67 100644 --- a/code/modules/goals/_goal.dm +++ b/code/modules/goals/_goal.dm @@ -8,7 +8,7 @@ /datum/goal/New(var/_owner) owner = _owner - events_repository.register(/decl/observ/destroyed, owner, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/destroyed, owner, src, TYPE_PROC_REF(/datum, qdel_self)) if(istype(owner, /datum/mind)) var/datum/mind/mind = owner LAZYADD(mind.goals, src) diff --git a/code/modules/goals/definitions/personal_achievement_movement.dm b/code/modules/goals/definitions/personal_achievement_movement.dm index 7f5fb6f69bc..5e1e650a0c3 100644 --- a/code/modules/goals/definitions/personal_achievement_movement.dm +++ b/code/modules/goals/definitions/personal_achievement_movement.dm @@ -3,7 +3,7 @@ ..() if(owner) var/datum/mind/mind = owner - events_repository.register(/decl/observ/moved, mind.current, src, .proc/owner_moved) + events_repository.register(/decl/observ/moved, mind.current, src, PROC_REF(owner_moved)) /datum/goal/movement/proc/owner_moved() return @@ -40,7 +40,7 @@ /datum/goal/movement/walk/check_success() return (steps >= required_steps) - + /datum/goal/movement/walk/update_strings() description = "Stave off microgravity muscle atrophy by walking at least [required_steps] step\s this shift." diff --git a/code/modules/grooming/_grooming.dm b/code/modules/grooming/_grooming.dm new file mode 100644 index 00000000000..11fbbfe0ddb --- /dev/null +++ b/code/modules/grooming/_grooming.dm @@ -0,0 +1,87 @@ + +/obj/item/grooming + abstract_type = /obj/item/grooming + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_TINY + slot_flags = SLOT_EARS + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + + var/message_target_other_generic = "$USER$ grooms $TARGET$ with $TOOL$." + var/message_target_self_generic = "$USER$ grooms $USER_SELF$ with $TOOL$." + var/message_target_other = "$USER$ grooms $TARGET$'s $DESCRIPTOR$ with $TOOL$." + var/message_target_self = "$USER$ grooms $USER_HIS$ $DESCRIPTOR$ with $TOOL$." + var/message_target_other_partial = "$USER$ just sort of runs $TOOL$ over $TARGET$'s $DESCRIPTOR$." + var/message_target_self_partial = "$USER$ just sort of runs $TOOL$ over $USER_HIS$ $DESCRIPTOR$." + var/message_target_other_missing = "$TARGET$'s $LIMB$ has nothing to groom!" + var/message_target_self_missing = "Your $LIMB$ has nothing to groom!" + var/grooming_flags = GROOMABLE_NONE + +/obj/item/grooming/Initialize() + . = ..() + update_icon() + +/obj/item/grooming/proc/replace_message_tokens(message, mob/living/user, mob/living/target, obj/item/tool, limb, descriptor) + var/decl/pronouns/user_pronouns = user.get_pronouns() + var/decl/pronouns/target_pronouns = target.get_pronouns() + . = message + . = replacetext(., "$USER$", "\the [user]") + . = replacetext(., "$USER_HIS$", user_pronouns.his) + . = replacetext(., "$USER_HIM$", user_pronouns.him) + . = replacetext(., "$USER_SELF$", user_pronouns.self) + . = replacetext(., "$TARGET$", "\the [target]") + . = replacetext(., "$TARGET_HIS$", target_pronouns.his) + . = replacetext(., "$TARGET_HIM$", target_pronouns.him) + . = replacetext(., "$TARGET_SELF$", target_pronouns.self) + . = replacetext(., "$TOOL$", "\the [tool]") + . = replacetext(., "$DESCRIPTOR$", descriptor) + . = replacetext(., "$LIMB$", limb) + . = capitalize(.) + +/obj/item/grooming/proc/try_groom(mob/living/user, mob/living/target) + + if(!istype(user) || !istype(target) || user.incapacitated() || user.a_intent == I_HURT) + return FALSE + + if(!length(target.get_external_organs())) + return target.handle_general_grooming(user, src) + + var/zone = user.get_target_zone() + if(!zone) + return FALSE + + var/target_self = user == target + var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(target, zone) + if(!affecting) + to_chat(user, SPAN_WARNING("[target_self ? "You are" : "\The [target] [target.get_pronouns().is]"] missing [target_self ? "your" : target.get_pronouns().his] [parse_zone(zone)].")) + return TRUE + + var/obj/item/blocking = target.bodypart_is_covered(zone) + if(blocking) + to_chat(user, "\The [blocking] [blocking.get_pronouns().is] in the way!") + return TRUE + + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + + // return type is assoc list ie. list("success" = GROOMING_RESULT_PARTIAL, "descriptor" = "hair") + var/list/grooming_results = affecting.get_grooming_results(src) + var/show_message + switch(LAZYACCESS(grooming_results, "success")) + if(GROOMING_RESULT_PARTIAL) + show_message = target_self ? message_target_self_partial : message_target_other_partial + if(GROOMING_RESULT_SUCCESS) + show_message = target_self ? message_target_self : message_target_other + else + show_message = target_self ? message_target_self_missing : message_target_other_missing + visible_message(SPAN_NOTICE(replace_message_tokens(show_message, user, target, src, parse_zone(zone), LAZYACCESS(grooming_results, "descriptor") || "marking"))) + target.add_stressor(/datum/stressor/well_groomed, 5 MINUTES) + return TRUE + +/obj/item/grooming/attack_self(mob/user) + if(try_groom(user, user)) + return TRUE + return ..() + +/obj/item/grooming/attack(mob/living/M, mob/living/user, var/target_zone, animate = TRUE) + if(try_groom(user, M)) + return TRUE + return ..() diff --git a/code/modules/grooming/grooming_comb.dm b/code/modules/grooming/grooming_comb.dm new file mode 100644 index 00000000000..4807a123e67 --- /dev/null +++ b/code/modules/grooming/grooming_comb.dm @@ -0,0 +1,58 @@ +/obj/item/grooming/comb + name = "comb" + desc = "A pristine comb." + icon = 'icons/obj/items/grooming/comb.dmi' + material = /decl/material/solid/organic/plastic + + message_target_other_generic = "$USER$ tidily combs $TARGET$ with $TOOL$." + message_target_self_generic = "$USER$ tidily combs $USER_SELF$ with $TOOL$." + message_target_other = "$USER$ tidily combs $TARGET$'s $DESCRIPTOR$ with $TOOL$." + message_target_self = "$USER$ tidily combs $USER_HIS$ $DESCRIPTOR$ with $TOOL$." + grooming_flags = GROOMABLE_COMB + +/obj/item/grooming/comb/colorable + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + +/obj/item/grooming/comb/colorable/random/Initialize() + color = get_random_colour(lower = 150) + . = ..() + +// Looks exactly like a butterfly knife inhand. +/obj/item/grooming/comb/butterfly + name = "butterfly comb" + desc = "A very stylish comb that folds into a handle." + icon = 'icons/obj/items/grooming/comb_butterfly.dmi' + material = /decl/material/solid/metal/steel + + message_target_other_generic = "$USER$ uses $TOOL$ to comb $TARGET$ with incredible style and sophistication." + message_target_self_generic = "$USER$ uses $TOOL$ to comb $USER_SELF$ with incredible style and sophistication. What a $USER_GUY$." + message_target_other = "$USER$ uses $TOOL$ to comb $TARGET$'s hair with incredible style and sophistication." + message_target_self = "$USER$ uses $TOOL$ to comb $USER_HIS$ hair with incredible style and sophistication. What a $USER_GUY$." + + var/opened = FALSE + +/obj/item/grooming/comb/butterfly/attack_self(mob/user) + if(user.a_intent == I_HURT) + return ..() + opened = !opened + if(opened) + playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) + user.visible_message(SPAN_NOTICE("\The [user] flicks \the [src] [opened ? "open" : "closed"].")) + update_icon() + return TRUE + +/obj/item/grooming/comb/butterfly/try_groom(mob/living/user, mob/living/target) + return opened && ..() + +/obj/item/grooming/comb/butterfly/on_update_icon() + . = ..() + icon_state = get_world_inventory_state() + if(opened) + icon_state = "[icon_state]_open" + +/obj/item/grooming/comb/butterfly/replace_message_tokens(message, mob/living/user, mob/living/target, obj/item/tool, limb, descriptor) + message = replacetext(message, "$USER_GUY$", user.get_pronouns().informal_term) + return ..() + +/obj/item/grooming/comb/butterfly/colorable + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC diff --git a/code/modules/grooming/grooming_file.dm b/code/modules/grooming/grooming_file.dm new file mode 100644 index 00000000000..f5f9302ef40 --- /dev/null +++ b/code/modules/grooming/grooming_file.dm @@ -0,0 +1,14 @@ +/obj/item/grooming/file + name = "nail file" + desc = "A rugged file suitable for smoothing down unruly nails or horns." + icon = 'icons/obj/items/grooming/file.dmi' + material = /decl/material/solid/metal/steel + + message_target_other_generic = "$USER$ uses $TOOL$ to neaten $TARGET$ up." + message_target_self_generic = "$USER$ uses $TOOL$ to neaten $USER_SELF$ up." + message_target_other = "$USER$ carefully files down $TARGET$'s $DESCRIPTOR$ with $TOOL$." + message_target_self = "$USER$ carefully files down $USER_HIS$ $DESCRIPTOR$ with $TOOL$." + grooming_flags = GROOMABLE_FILE + +/obj/item/grooming/file/colorable + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC diff --git a/code/modules/grooming/grooming_hairbrush.dm b/code/modules/grooming/grooming_hairbrush.dm new file mode 100644 index 00000000000..461eab35f17 --- /dev/null +++ b/code/modules/grooming/grooming_hairbrush.dm @@ -0,0 +1,27 @@ +/obj/item/grooming/brush + name = "hairbrush" + desc = "A surprisingly decent hairbrush with a sturdy handle and semi-soft bristles." + icon = 'icons/obj/items/grooming/hairbrush.dmi' + w_class = ITEM_SIZE_SMALL + slot_flags = null + material = /decl/material/solid/organic/plastic + + message_target_other_generic = "$USER$ meticulously brushes $TARGET$ with $TOOL$." + message_target_self_generic = "$USER$ meticulously brushes $USER_SELF$ with $TOOL$." + message_target_other = "$USER$ meticulously brushes $TARGET$'s $DESCRIPTOR$ with $TOOL$." + message_target_self = "$USER$ meticulously brushes $USER_HIS$ $DESCRIPTOR$ with $TOOL$." + grooming_flags = GROOMABLE_BRUSH + +/obj/item/grooming/brush/on_update_icon() + ..() + var/image/I = image(icon, "[icon_state]-bristles") + I.color = COLOR_GRAY40 + I.appearance_flags |= RESET_COLOR + add_overlay(I) + +/obj/item/grooming/brush/colorable + material_alteration = MAT_FLAG_ALTERATION_NAME + +/obj/item/grooming/brush/colorable/random/Initialize() + color = get_random_colour(lower = 150) + . = ..() diff --git a/code/modules/hallucinations/_hallucination.dm b/code/modules/hallucinations/_hallucination.dm new file mode 100644 index 00000000000..399fd5dfc0e --- /dev/null +++ b/code/modules/hallucinations/_hallucination.dm @@ -0,0 +1,48 @@ +////////////////////////////////////////////////////////////////////////////////////////////////////// +//Hallucination effects datums +////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/hallucination + var/mob/living/holder + var/allow_duplicates = 1 + var/duration = 0 + var/min_power = 0 //at what levels of hallucination power mobs should get it + var/max_power = INFINITY + var/activated = FALSE + +/datum/hallucination/proc/start() + SHOULD_CALL_PARENT(TRUE) + activated = TRUE + +/datum/hallucination/proc/end() + SHOULD_CALL_PARENT(TRUE) + activated = FALSE + +/datum/hallucination/proc/can_affect(var/mob/living/victim) + if(!victim.client) + return FALSE + if(min_power > victim.hallucination_power) + return FALSE + if(max_power < victim.hallucination_power) + return FALSE + if(!allow_duplicates && (locate(type) in victim._hallucinations)) + return FALSE + return TRUE + +/datum/hallucination/Destroy() + if(holder) + LAZYREMOVE(holder._hallucinations, src) + holder = null + if(activated) + end() + return ..() + +/datum/hallucination/proc/activate_hallucination() + set waitfor = FALSE + if(!holder || !holder.client || activated) + return + LAZYADD(holder._hallucinations, src) + start() + sleep(duration) + if(!QDELETED(src)) + qdel(src) diff --git a/code/modules/hallucinations/hallucination_fakeattack.dm b/code/modules/hallucinations/hallucination_fakeattack.dm new file mode 100644 index 00000000000..70ba9d36a04 --- /dev/null +++ b/code/modules/hallucinations/hallucination_fakeattack.dm @@ -0,0 +1,20 @@ +//Fake attack +/datum/hallucination/fakeattack + min_power = 30 + +/datum/hallucination/fakeattack/can_affect(var/mob/living/victim) + . = ..() && (locate(/mob/living) in oview(victim,1)) + +/datum/hallucination/fakeattack/start() + . = ..() + for(var/mob/living/assailant in oview(holder,1)) + to_chat(holder, SPAN_DANGER("\The [assailant] has punched \the [holder]!")) + holder.playsound_local(get_turf(holder),"punch",50) + +//Fake injection +/datum/hallucination/fakeattack/hypo + min_power = 30 + +/datum/hallucination/fakeattack/hypo/start() + . = ..() + to_chat(holder, SPAN_NOTICE("You feel a tiny prick!")) diff --git a/code/modules/hallucinations/hallucination_gunfire.dm b/code/modules/hallucinations/hallucination_gunfire.dm new file mode 100644 index 00000000000..d41d6289e65 --- /dev/null +++ b/code/modules/hallucinations/hallucination_gunfire.dm @@ -0,0 +1,31 @@ +//Hearing someone being shot twice +/datum/hallucination/gunfire + duration = 15 + min_power = 30 + var/gunshot + var/turf/origin + var/static/list/gunshot_sounds = list( + 'sound/weapons/gunshot/gunshot_strong.ogg', + 'sound/weapons/gunshot/gunshot2.ogg', + 'sound/weapons/gunshot/shotgun.ogg', + 'sound/weapons/gunshot/gunshot.ogg', + 'sound/weapons/Taser.ogg' + ) + +/datum/hallucination/gunfire/start() + . = ..() + gunshot = pick(gunshot_sounds) + var/turf/holder_turf = get_turf(holder) + if(isturf(holder_turf)) + origin = locate(holder_turf.x + rand(4,8), holder_turf.y + rand(4,8), holder_turf.z) + if(origin) + holder.playsound_local(origin, gunshot, 50) + +/datum/hallucination/gunfire/end() + . = ..() + if(holder && origin) + holder.playsound_local(origin, gunshot, 50) + +/datum/hallucination/gunfire/Destroy() + origin = null + return ..() \ No newline at end of file diff --git a/code/modules/hallucinations/hallucination_mirage.dm b/code/modules/hallucinations/hallucination_mirage.dm new file mode 100644 index 00000000000..adc6ad4e5b0 --- /dev/null +++ b/code/modules/hallucinations/hallucination_mirage.dm @@ -0,0 +1,77 @@ +//Seeing stuff +/datum/hallucination/mirage + duration = 30 SECONDS + max_power = 30 + var/number = 1 + var/list/things = list() //list of images to display + var/static/list/trash_states = icon_states('icons/obj/trash.dmi') + +/datum/hallucination/mirage/proc/generate_mirage() + return image('icons/obj/trash.dmi', pick(trash_states), layer = BELOW_TABLE_LAYER) + +/datum/hallucination/mirage/start() + . = ..() + var/list/possible_points = list() + for(var/turf/F in view(holder, world.view+1)) + if(F.simulated && F.is_floor()) + possible_points += F + if(possible_points.len) + for(var/i = 1 to number) + var/image/thing = generate_mirage() + things += thing + thing.loc = pick(possible_points) + if(holder?.client && length(things)) + holder.client.images += things + +/datum/hallucination/mirage/end() + if(holder?.client) + holder.client.images -= things + return ..() + +//Blood and aftermath of firefight +/datum/hallucination/mirage/carnage + min_power = 50 + number = 10 + var/static/list/carnage_states = list( + "mfloor1", + "mfloor2", + "mfloor3", + "mfloor4", + "mfloor5", + "mfloor6", + "mfloor7" + ) + +/datum/hallucination/mirage/carnage/generate_mirage() + var/image/I + if(prob(50)) + I = image('icons/effects/blood.dmi', pick(carnage_states), layer = BELOW_TABLE_LAYER) + I.color = COLOR_BLOOD_HUMAN + else + I = image('icons/obj/ammo.dmi', "s-casing-spent", layer = BELOW_TABLE_LAYER) + I.layer = BELOW_TABLE_LAYER + I.dir = pick(global.alldirs) + I.pixel_x = rand(-10,10) + I.pixel_y = rand(-10,10) + return I + +//LOADSEMONEY +/datum/hallucination/mirage/money + min_power = 20 + max_power = 45 + number = 2 + var/static/obj/item/cash/cash + +/datum/hallucination/mirage/money/New() + if(!cash) + cash = new /obj/item/cash/c500 + cash.update_icon() + cash.compile_overlays() + ..() + +/datum/hallucination/mirage/money/generate_mirage() + var/image/I = new + I.appearance = cash + I.layer = BELOW_TABLE_LAYER + qdel(cash) + return I diff --git a/code/modules/hallucinations/hallucination_skitters.dm b/code/modules/hallucinations/hallucination_skitters.dm new file mode 100644 index 00000000000..2ab7f1fdf35 --- /dev/null +++ b/code/modules/hallucinations/hallucination_skitters.dm @@ -0,0 +1,4 @@ +//Spiderling skitters +/datum/hallucination/skitter/start() + . = ..() + to_chat(holder, SPAN_NOTICE("The spiderling skitters[pick(" away"," around","")].")) diff --git a/code/modules/hallucinations/hallucination_sound.dm b/code/modules/hallucinations/hallucination_sound.dm new file mode 100644 index 00000000000..82e2389713b --- /dev/null +++ b/code/modules/hallucinations/hallucination_sound.dm @@ -0,0 +1,71 @@ +//Playing a random sound +/datum/hallucination/imagined_sound/proc/get_imagined_sounds() + var/static/list/sounds = list( + 'sound/machines/airlock.ogg', + 'sound/effects/explosionfar.ogg', + 'sound/machines/windowdoor.ogg', + 'sound/machines/twobeep.ogg' + ) + return sounds + +/datum/hallucination/imagined_sound/start() + . = ..() + var/turf/holder_turf = get_turf(holder) + if(holder_turf) + holder_turf = locate(holder_turf.x + rand(6,11), holder_turf.y + rand(6,11), holder_turf.z) + if(holder_turf) + holder.playsound_local(holder_turf, pick(get_imagined_sounds()) ,70) + +/datum/hallucination/imagined_sound/tools/get_imagined_sounds() + var/static/list/imagined_sounds = list( + 'sound/items/Ratchet.ogg', + 'sound/items/Welder.ogg', + 'sound/items/Crowbar.ogg', + 'sound/items/Screwdriver.ogg' + ) + return imagined_sounds + +/datum/hallucination/imagined_sound/danger + min_power = 30 + +/datum/hallucination/imagined_sound/danger/get_imagined_sounds() + var/static/list/imagined_sounds = list( + 'sound/effects/Explosion1.ogg', + 'sound/effects/Explosion2.ogg', + 'sound/effects/Glassbr1.ogg', + 'sound/effects/Glassbr2.ogg', + 'sound/effects/Glassbr3.ogg', + 'sound/weapons/smash.ogg' + ) + return imagined_sounds + +/datum/hallucination/imagined_sound/spooky + min_power = 50 + +/datum/hallucination/imagined_sound/spooky/get_imagined_sounds() + var/static/list/imagined_sounds = list( + 'sound/effects/ghost.ogg', + 'sound/effects/ghost2.ogg', + 'sound/effects/Heart Beat.ogg', + 'sound/effects/screech.ogg', + 'sound/hallucinations/behind_you1.ogg', + 'sound/hallucinations/behind_you2.ogg', + 'sound/hallucinations/far_noise.ogg', + 'sound/hallucinations/growl1.ogg', + 'sound/hallucinations/growl2.ogg', + 'sound/hallucinations/growl3.ogg', + 'sound/hallucinations/im_here1.ogg', + 'sound/hallucinations/im_here2.ogg', + 'sound/hallucinations/i_see_you1.ogg', + 'sound/hallucinations/i_see_you2.ogg', + 'sound/hallucinations/look_up1.ogg', + 'sound/hallucinations/look_up2.ogg', + 'sound/hallucinations/over_here1.ogg', + 'sound/hallucinations/over_here2.ogg', + 'sound/hallucinations/over_here3.ogg', + 'sound/hallucinations/turn_around1.ogg', + 'sound/hallucinations/turn_around2.ogg', + 'sound/hallucinations/veryfar_noise.ogg', + 'sound/hallucinations/wail.ogg' + ) + return imagined_sounds diff --git a/code/modules/hallucinations/hallucination_spiderbabies.dm b/code/modules/hallucinations/hallucination_spiderbabies.dm new file mode 100644 index 00000000000..f7b4b3bb94a --- /dev/null +++ b/code/modules/hallucinations/hallucination_spiderbabies.dm @@ -0,0 +1,11 @@ +//Spiders in your body +/datum/hallucination/spiderbabies + min_power = 40 + +/datum/hallucination/spiderbabies/start() + . = ..() + var/list/limbs = holder.get_external_organs() + if(!LAZYLEN(limbs)) + return + var/obj/O = pick(limbs) + to_chat(holder, SPAN_WARNING("You feel something [pick("moving","squirming","skittering")] inside of your [O.name]!")) diff --git a/code/modules/hallucinations/hallucination_talking.dm b/code/modules/hallucinations/hallucination_talking.dm new file mode 100644 index 00000000000..a472010a2f3 --- /dev/null +++ b/code/modules/hallucinations/hallucination_talking.dm @@ -0,0 +1,41 @@ +//Hearing someone talking to/about you. +/datum/hallucination/talking/can_affect(var/mob/living/victim) + return ..() && (locate(/mob/living) in oview(victim)) + +/datum/hallucination/talking/start() + . = ..() + var/sanity = 5 //even insanity needs some sanity + for(var/mob/living/talker in oview(holder)) + if(talker.stat) + continue + var/message + if(prob(80)) + var/list/names = list() + var/lastname = copytext(holder.real_name, findtext(holder.real_name, " ")+1) + var/firstname = copytext(holder.real_name, 1, findtext(holder.real_name, " ")) + if(lastname) names += lastname + if(firstname) names += firstname + if(!names.len) + names += holder.real_name + var/add = prob(20) ? ", [pick(names)]" : "" + var/list/phrases = list("[prob(50) ? "Hey, " : ""][pick(names)]!","[prob(50) ? "Hey, " : ""][pick(names)]?","Get out[add]!","Go away[add].","What are you doing[add]?","Where's your ID[add]?") + if(holder.hallucination_power > 50) + phrases += list("What did you come here for[add]?","Don't touch me[add].","You're not getting out of here[add].", "You are a failure, [pick(names)].","Just kill yourself already, [pick(names)].","Put on some clothes[add].","Take off your clothes[add].") + message = pick(phrases) + to_chat(holder,"[talker.name] [holder.say_quote(message)], \"[message]\"") + else + to_chat(holder,"[talker.name] points at [holder.name]") + to_chat(holder,"[talker.name] says something softly.") + + var/speech_state = holder.check_speech_punctuation_state(message) + if(speech_state) + var/image/speech_bubble = image('icons/mob/talk.dmi', talker, speech_state) + addtimer(CALLBACK(src, PROC_REF(qdel_image), speech_bubble), 3 SECONDS) + show_image(holder, speech_bubble) + + sanity-- //don't spam them in very populated rooms. + if(!sanity) + break + +/datum/hallucination/talking/proc/qdel_image(var/image/speech_bubble) + qdel(speech_bubble) diff --git a/code/modules/hallucinations/hallucination_telepathy.dm b/code/modules/hallucinations/hallucination_telepathy.dm new file mode 100644 index 00000000000..36a982c5a36 --- /dev/null +++ b/code/modules/hallucinations/hallucination_telepathy.dm @@ -0,0 +1,42 @@ +//Fake telepathy +/datum/hallucination/telepathy + allow_duplicates = 0 + duration = 20 MINUTES + +/datum/hallucination/telepathy/start() + . = ..() + to_chat(holder, SPAN_NOTICE("You expand your mind outwards.")) + holder.verbs += /mob/living/carbon/human/proc/fakeremotesay + +/datum/hallucination/telepathy/end() + . = ..() + if(holder) + holder.verbs -= /mob/living/carbon/human/proc/fakeremotesay + +/mob/living/carbon/human/proc/fakeremotesay() + set name = "Telepathic Message" + set category = "Superpower" + + if(!hallucination_power) + src.verbs -= /mob/living/carbon/human/proc/fakeremotesay + return + + if(stat) + to_chat(usr, SPAN_WARNING("You're not in any state to use your powers right now!")) + return + + if(has_chemical_effect(CE_MIND, 1)) + to_chat(usr, SPAN_WARNING("Chemicals in your blood prevent you from using your power!")) + + var/list/creatures = list() + for(var/mob/living/carbon/C in SSmobs.mob_list) + creatures += C + creatures -= usr + var/mob/target = input("Who do you want to project your mind to?") as null|anything in creatures + if (isnull(target)) + return + + var/msg = sanitize(input(usr, "What do you wish to transmit")) + show_message(SPAN_NOTICE("You project your mind into [target.name]: \"[msg]\"")) + if(!stat && prob(20)) + say(msg) diff --git a/code/modules/holidays/_holiday.dm b/code/modules/holidays/_holiday.dm index 8e64c191437..ed04429c955 100644 --- a/code/modules/holidays/_holiday.dm +++ b/code/modules/holidays/_holiday.dm @@ -25,10 +25,8 @@ var/global/datum/holiday/current_holiday /proc/set_holiday_data(var/datum/holiday/holiday_data, var/refresh_station_name = FALSE) if(istext(holiday_data)) holiday_data = new(list("name" = holiday_data)) - if(!holiday_data || !istype(holiday_data)) - return - global.current_holiday = holiday_data + if(istype(holiday_data)) + global.current_holiday = holiday_data if(refresh_station_name) - global.using_map.station_name = null - station_name() + global.using_map.station_name = initial(global.using_map.station_name) world.update_status() diff --git a/code/modules/holidays/holiday_hook.dm b/code/modules/holidays/holiday_hook.dm index 766ef3fb3b7..6b6870c5bb0 100644 --- a/code/modules/holidays/holiday_hook.dm +++ b/code/modules/holidays/holiday_hook.dm @@ -1,27 +1,37 @@ -//Uncommenting ALLOW_HOLIDAYS in config.txt will enable this hook. +//Uncommenting ALLOW_HOLIDAYS in configuration will enable this hook. /hook/startup/proc/updateHoliday() - if(config?.allow_holidays) - var/list/holidays = cached_json_decode(safe_file2text("config/holidays.json"), FALSE) - if(length(holidays)) - - var/c_year = text2num(time2text(world.timeofday, "YY")) - var/c_month = text2num(time2text(world.timeofday, "MM")) - var/c_day = text2num(time2text(world.timeofday, "DD")) - var/c_weekday = lowertext(time2text(world.timeofday, "DDD")) - - for(var/list/holiday_data in holidays) - - var/h_year = holiday_data["year"] - var/h_month = holiday_data["month"] - var/h_day = holiday_data["day"] - var/h_weekday = holiday_data["weekday"] - - if((isnull(h_year) || h_year == c_year) && \ - (isnull(h_month) || h_month == c_month) && \ - (isnull(h_day) || h_day == c_day) && \ - (isnull(h_weekday) || h_weekday == c_weekday)) - var/holiday_path = text2path(holiday_data["path"]) || /datum/holiday - set_holiday_data(new holiday_path(holiday_data)) - break - - return 1 \ No newline at end of file + update_holiday() + return TRUE + +/proc/update_holiday() + + if(!get_config_value(/decl/config/toggle/allow_holidays)) + set_holiday_data(null, TRUE) + return FALSE + + var/list/holidays = cached_json_decode(safe_file2text("config/holidays.json"), FALSE) + if(!length(holidays)) + set_holiday_data(null, TRUE) + return FALSE + + var/c_year = text2num(time2text(world.timeofday, "YY")) + var/c_month = text2num(time2text(world.timeofday, "MM")) + var/c_day = text2num(time2text(world.timeofday, "DD")) + var/c_weekday = lowertext(time2text(world.timeofday, "DDD")) + + for(var/list/holiday_data in holidays) + + var/h_year = holiday_data["year"] + var/h_month = holiday_data["month"] + var/h_day = holiday_data["day"] + var/h_weekday = holiday_data["weekday"] + + if((isnull(h_year) || h_year == c_year) && \ + (isnull(h_month) || h_month == c_month) && \ + (isnull(h_day) || h_day == c_day) && \ + (isnull(h_weekday) || h_weekday == c_weekday)) + var/holiday_path = text2path(holiday_data["path"]) || /datum/holiday + set_holiday_data(new holiday_path(holiday_data)) + return TRUE + + return FALSE diff --git a/code/modules/holidays/holiday_name.dm b/code/modules/holidays/holiday_name.dm index b682a49162a..e07e9776a40 100644 --- a/code/modules/holidays/holiday_name.dm +++ b/code/modules/holidays/holiday_name.dm @@ -5,11 +5,13 @@ set category = "Fun" set desc = "Override the default holiday." - if(!check_rights(R_SERVER)) + if(!check_rights(R_SERVER)) return T = sanitize(T, MAX_NAME_LEN) if(T) + if(get_config_value(/decl/config/toggle/allow_holidays)) + set_config_value(/decl/config/toggle/allow_holidays, TRUE) set_holiday_data(T, refresh_station_name = TRUE) to_world("

    [global.current_holiday.announcement]

    ") message_admins(SPAN_NOTICE("ADMIN: Event: [key_name(src)] force-set the holiday to \"[global.current_holiday.name]\"")) diff --git a/code/modules/holidays/holiday_special.dm b/code/modules/holidays/holiday_special.dm index 37890e6251a..36f2c7f2695 100644 --- a/code/modules/holidays/holiday_special.dm +++ b/code/modules/holidays/holiday_special.dm @@ -6,6 +6,7 @@ for(var/obj/structure/flora/tree/pine/xmas in world) if(isNotStationLevel(xmas.z)) continue - for(var/turf/simulated/floor/T in orange(1,xmas)) - for(var/i=1,i<=rand(1,5),i++) - new /obj/item/a_gift(T) + for(var/turf/T in orange(1,xmas)) + if(T.is_floor() && T.simulated) + for(var/i = 1 to rand(1,5)) + new /obj/item/a_gift(T) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 1cdbbed9a10..51a5e16fb77 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -67,7 +67,7 @@ dat += "([prog])
    " dat += "
    " - dat += "(Turn Off)
    " + dat += "(Turn Off)
    " dat += "
    " dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
    " @@ -198,7 +198,7 @@ if(!checkInteg(linkedholodeck)) damaged = 1 - loadProgram(global.using_map.holodeck_programs["turnoff"], 0) + loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0) active = 0 update_use_power(POWER_USE_IDLE) visible_message("The holodeck overloads!", null, "You hear electricity arcing!", range = 10) @@ -230,9 +230,9 @@ //Why is it called toggle if it doesn't toggle? /obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) if(toggleOn) - loadProgram(global.using_map.holodeck_programs["emptycourt"], 0) + loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "emptycourt"], 0) else - loadProgram(global.using_map.holodeck_programs["turnoff"], 0) + loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0) if(!linkedholodeck.has_gravity) linkedholodeck.gravitychange(1) @@ -324,7 +324,7 @@ /obj/machinery/computer/HolodeckControl/proc/emergencyShutdown() //Turn it back to the regular non-holographic room - loadProgram(global.using_map.holodeck_programs["turnoff"], 0) + loadProgram(global.using_map.holodeck_programs[global.using_map.holodeck_default_program[programs_list_id] || "turnoff"], 0) if(!linkedholodeck.has_gravity) linkedholodeck.gravitychange(1,linkedholodeck) diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 94d821dd51a..61f8d5b28d0 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -98,6 +98,7 @@ icon = 'icons/misc/beach.dmi' base_icon = 'icons/misc/beach.dmi' initial_flooring = null + abstract_type = /turf/simulated/floor/holofloor/beach /turf/simulated/floor/holofloor/beach/sand name = "sand" @@ -155,7 +156,7 @@ else if(W.damtype == BRUTE || W.damtype == BURN) hit(W.force) - if(health <= 7) + if(current_health <= 7) anchored = FALSE update_nearby_icons() step(src, get_dir(user, src)) @@ -231,7 +232,7 @@ throw_range = 5 throwforce = 0 w_class = ITEM_SIZE_SMALL - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD + atom_flags = ATOM_FLAG_NO_BLOOD base_parry_chance = 50 var/active = 0 var/item_color @@ -419,9 +420,22 @@ faction = "carp" natural_weapon.force = initial(natural_weapon.force) -/mob/living/simple_animal/hostile/carp/holodeck/gib(anim="gibbed-m",do_gibs) - death() +/mob/living/simple_animal/hostile/carp/holodeck/gib(do_gibs = TRUE) + SHOULD_CALL_PARENT(FALSE) + if(stat != DEAD) + death(gibbed = TRUE) + if(stat == DEAD) + qdel(src) + return TRUE + return FALSE -/mob/living/simple_animal/hostile/carp/holodeck/death() - ..(null, "fades away!", "You have been destroyed.") - qdel(src) \ No newline at end of file +/mob/living/simple_animal/hostile/carp/holodeck/get_death_message(gibbed) + return "fades away..." + +/mob/living/simple_animal/hostile/carp/holodeck/get_self_death_message(gibbed) + return "You have been destroyed." + +/mob/living/simple_animal/hostile/carp/holodeck/death(gibbed) + . = ..() + if(. && !gibbed) + gib() diff --git a/code/modules/holomap/holomap.dm b/code/modules/holomap/holomap.dm index 5d6fe03e1bf..932c0b20048 100644 --- a/code/modules/holomap/holomap.dm +++ b/code/modules/holomap/holomap.dm @@ -13,7 +13,7 @@ construct_state = /decl/machine_construction/default/panel_closed base_type = /obj/machinery/holomap layer = ABOVE_WINDOW_LAYER // Above windows. - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/light_power_on = 1 var/light_range_on = 2 @@ -99,8 +99,8 @@ user.client.images |= holomap_datum.station_map watching_mob = user - events_repository.register(/decl/observ/moved, watching_mob, src, /obj/machinery/holomap/proc/checkPosition) - events_repository.register(/decl/observ/destroyed, watching_mob, src, /obj/machinery/holomap/proc/stopWatching) + events_repository.register(/decl/observ/moved, watching_mob, src, TYPE_PROC_REF(/obj/machinery/holomap, checkPosition)) + events_repository.register(/decl/observ/destroyed, watching_mob, src, TYPE_PROC_REF(/obj/machinery/holomap, stopWatching)) update_use_power(POWER_USE_ACTIVE) if(bogus) @@ -124,7 +124,7 @@ if(watching_mob.client) animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING) var/mob/M = watching_mob - addtimer(CALLBACK(src, .proc/clear_image, M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out + addtimer(CALLBACK(src, PROC_REF(clear_image), M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out events_repository.unregister(/decl/observ/moved, watching_mob, src) events_repository.unregister(/decl/observ/destroyed, watching_mob, src) watching_mob = null @@ -174,99 +174,13 @@ if(prob(25)) set_broken() -/obj/screen/levelselect - icon = 'icons/misc/mark.dmi' - layer = HUD_ITEM_LAYER - var/active = TRUE - var/datum/station_holomap/owner = null - -/obj/screen/levelselect/Initialize(mapload, datum/station_holomap/_owner) - . = ..() - owner = _owner - -/obj/screen/levelselect/Click() - return (!usr.incapacitated() && !isghost(usr)) -/obj/screen/levelselect/up - icon_state = "fup" - -/obj/screen/levelselect/up/Click() - if(..()) - if(owner) - owner.set_level(owner.displayed_level - 1) - -/obj/screen/levelselect/down - icon_state = "fdn" - -/obj/screen/levelselect/down/Click() - if(..()) - if(owner) - owner.set_level(owner.displayed_level + 1) - -/obj/screen/legend - icon = null - maptext_height = 128 - maptext_width = 128 - layer = HUD_ITEM_LAYER - pixel_x = HOLOMAP_LEGEND_X - appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - var/saved_color - var/datum/station_holomap/owner = null - var/has_areas = FALSE - -/obj/screen/legend/cursor - icon = 'icons/misc/holomap_markers.dmi' - icon_state = "you" - maptext_x = 11 - pixel_x = HOLOMAP_LEGEND_X - 3 - has_areas = TRUE - -/obj/screen/legend/Initialize(mapload, map_color, text) - . = ..() - saved_color = map_color - maptext = "[text]" - alpha = 255 - -/obj/screen/legend/Click(location, control, params) - if(!usr.incapacitated() && !isghost(usr)) - if(istype(owner)) - owner.legend_select(src) - -/obj/screen/legend/proc/Setup(z_level) - has_areas = FALSE - //Get the areas for this z level and mark if we're empty - overlays.Cut() - for(var/area/A in SSminimap.holomaps[z_level].holomap_areas) - if(A.holomap_color == saved_color) - var/image/area = image(SSminimap.holomaps[z_level].holomap_areas[A]) - area.pixel_x = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_X) - pixel_x - area.pixel_y = ((HOLOMAP_ICON_SIZE / 2) - WORLD_CENTER_Y) - pixel_y - overlays += area - has_areas = TRUE - -//What happens when we are clicked on / when another is clicked on -/obj/screen/legend/proc/Select() - //Start blinking - animate(src, alpha = 0, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) - animate(alpha = 254, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) - -/obj/screen/legend/proc/Deselect() - //Stop blinking - animate(src, flags = ANIMATION_END_NOW) - -//Cursor doesnt do anything specific. -/obj/screen/legend/cursor/Setup() - -/obj/screen/legend/cursor/Select() - -/obj/screen/legend/cursor/Deselect() - // Simple datum to keep track of a running holomap. Each machine capable of displaying the holomap will have one. /datum/station_holomap var/image/station_map var/image/cursor - var/list/obj/screen/legend/legend - var/list/obj/screen/maptexts - var/list/obj/screen/levelselect/lbuttons + var/list/obj/screen/holomap_legend/legend + var/list/obj/screen/holomap_text/maptexts + var/list/obj/screen/holomap_level_select/lbuttons var/list/image/levels var/list/z_levels var/z = -1 @@ -293,17 +207,17 @@ if(!LAZYLEN(legend) || reinit) QDEL_LIST_ASSOC_VAL(legend) legend = list( - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_COMMAND, "â–  Command"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SECURITY, "â–  Security"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_MEDICAL, "â–  Medical"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SCIENCE, "â–  Research"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_EXPLORATION, "â–  Exploration"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ENGINEERING, "â–  Engineering"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CARGO, "â–  Supply"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_AIRLOCK, "â–  Airlock"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ESCAPE, "â–  Escape"), - new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CREW, "â–  Crew"), - new /obj/screen/legend/cursor(null, HOLOMAP_AREACOLOR_BASE, "You are here") + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_COMMAND, "â–  Command"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_SECURITY, "â–  Security"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_MEDICAL, "â–  Medical"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_SCIENCE, "â–  Research"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_EXPLORATION, "â–  Exploration"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_ENGINEERING, "â–  Engineering"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_CARGO, "â–  Supply"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_AIRLOCK, "â–  Airlock"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_ESCAPE, "â–  Escape"), + new /obj/screen/holomap_legend(null, null, null, null, null, HOLOMAP_AREACOLOR_CREW, "â–  Crew"), + new /obj/screen/holomap_legend/cursor(null, null, null, null, null, HOLOMAP_AREACOLOR_BASE, "You are here") ) if(reinit) QDEL_NULL_LIST(lbuttons) @@ -333,8 +247,8 @@ if(z_count > 1) if(!LAZYLEN(lbuttons)) //Add the buttons for switching levels - LAZYADD(lbuttons, new /obj/screen/levelselect/up(null, src)) - LAZYADD(lbuttons, new /obj/screen/levelselect/down(null, src)) + LAZYADD(lbuttons, new /obj/screen/holomap_level_select/up(null, null, null, null, null, src)) + LAZYADD(lbuttons, new /obj/screen/holomap_level_select/down(null, null, null, null, null, src)) lbuttons[1].pixel_y = HOLOMAP_MARGIN - 22 lbuttons[2].pixel_y = HOLOMAP_MARGIN + 5 lbuttons[1].pixel_x = 254 @@ -358,12 +272,8 @@ //LAZYADD(levels, map_image) LAZYSET(levels, "[O.map_z[level]]", map_image) - var/obj/screen/maptext_overlay = new(null) - maptext_overlay.icon = null - maptext_overlay.layer = HUD_ITEM_LAYER - maptext_overlay.appearance_flags |= RESET_COLOR + var/obj/screen/holomap_text/maptext_overlay = new(null) maptext_overlay.maptext = STYLE_SMALLFONTS_OUTLINE("
    LEVEL [level-1]
    ", 7, COLOR_WHITE, COLOR_BLACK) - maptext_overlay.maptext_width = 96 maptext_overlay.pixel_x = (HOLOMAP_ICON_SIZE / 2) - (maptext_overlay.maptext_width / 2) maptext_overlay.pixel_y = HOLOMAP_MARGIN @@ -389,8 +299,8 @@ //Fix legend position var/pixel_y = HOLOMAP_LEGEND_Y - for(var/obj/screen/legend/element in legend) - element.owner = src + for(var/obj/screen/holomap_legend/element in legend) + element.holomap = src element.pixel_y = pixel_y //Set adjusted pixel y as it will be needed for area placement element.Setup(z_levels[displayed_level]) if(element.has_areas) @@ -403,12 +313,12 @@ if(displayed_level < z_levels.len) station_map.vis_contents += lbuttons[2] -/datum/station_holomap/proc/legend_select(obj/screen/legend/L) +/datum/station_holomap/proc/legend_select(obj/screen/holomap_legend/L) legend_deselect() L.Select() /datum/station_holomap/proc/legend_deselect() - for(var/obj/screen/legend/entry in legend) + for(var/obj/screen/holomap_legend/entry in legend) entry.Deselect() /datum/station_holomap/proc/initialize_holomap_bogus() diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index 62f2c846acb..59f47400117 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -202,7 +202,7 @@ qdel(H) spawn(50) new /obj/item/honey_frame(loc) - new /obj/item/stack/wax(loc) + new /obj/item/stack/material/bar(loc, 1, /decl/material/solid/organic/wax) honey += processing processing = 0 icon_state = "centrifuge" @@ -212,7 +212,7 @@ return var/obj/item/chems/glass/G = I var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey) - G.reagents.add_reagent(/decl/material/liquid/nutriment/honey, transferred) + G.add_to_reagents(/decl/material/liquid/nutriment/honey, transferred) honey -= transferred user.visible_message("\The [user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into \the [G].") return 1 @@ -258,17 +258,6 @@ new /obj/machinery/beehive(get_turf(user)) qdel(src) -/obj/item/stack/wax - name = "wax" - singular_name = "wax piece" - desc = "Soft substance produced by bees. Used to make candles." - icon = 'icons/obj/beekeeping.dmi' - icon_state = "wax" - -var/global/list/wax_recipes = list(new /datum/stack_recipe/candle) -/obj/item/stack/wax/get_recipes() - return global.wax_recipes - /obj/item/bee_pack name = "bee pack" desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!" diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2c8f2594f41..7d0a4c51410 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -55,7 +55,7 @@ rtotal += round(potency/reagent_amounts[2]) if(rid == /decl/material/liquid/nutriment) LAZYSET(data, seed.seed_name, max(1,rtotal)) - reagents.add_reagent(rid,max(1,rtotal),data) + add_to_reagents(rid,max(1,rtotal),data) /obj/item/chems/food/grown/proc/update_desc() set waitfor = FALSE @@ -252,7 +252,7 @@ var/global/list/_wood_materials = list( if(seed && seed.get_trait(TRAIT_STINGS)) if(!reagents || reagents.total_volume <= 0) return - reagents.remove_any(rand(1,3)) + remove_any_reagents(rand(1,3)) seed.thrown_at(src, target) sleep(-1) if(!src) @@ -310,7 +310,7 @@ var/global/list/_wood_materials = list( return if(!reagents || reagents.total_volume <= 0) return - reagents.remove_any(rand(1,3)) //Todo, make it actually remove the reagents the seed uses. + remove_any_reagents(rand(1,3)) //Todo, make it actually remove the reagents the seed uses. var/affected = pick(BP_R_HAND,BP_L_HAND) seed.do_thorns(H,src,affected) seed.do_sting(H,src,affected) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index e2798fffd15..b555a1f42f0 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -33,7 +33,7 @@ var/rtotal = reagent_data[1] if(reagent_data.len > 1 && potency > 0) rtotal += round(potency/reagent_data[2]) - reagents.add_reagent(rid,max(1,rtotal)) + add_to_reagents(rid,max(1,rtotal)) /obj/item/corncob name = "corn cob" diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index dc1cafd5c0e..5b6e303c4e8 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -5,6 +5,9 @@ var/genetype // Label used when applying trait. var/list/values // Values to copy into the target seed datum. +SAVED_VAR(/datum/plantgene, genetype) +SAVED_VAR(/datum/plantgene, values) + /datum/seed //Tracking. var/uid // Unique identifier. @@ -37,6 +40,24 @@ var/image/harvest_overlay var/list/growing_overlays +//Seeds are procedurally generated and need to save everything +SAVED_VAR(/datum/seed, name) +SAVED_VAR(/datum/seed, seed_name) +SAVED_VAR(/datum/seed, seed_noun) +SAVED_VAR(/datum/seed, display_name) +SAVED_VAR(/datum/seed, scanned) +SAVED_VAR(/datum/seed, can_self_harvest) +SAVED_VAR(/datum/seed, growth_stages) +SAVED_VAR(/datum/seed, traits) +SAVED_VAR(/datum/seed, mutants) +SAVED_VAR(/datum/seed, chems) +SAVED_VAR(/datum/seed, consume_gasses) +SAVED_VAR(/datum/seed, exude_gasses) +SAVED_VAR(/datum/seed, kitchen_tag) +SAVED_VAR(/datum/seed, trash_type) +SAVED_VAR(/datum/seed, splat_type) +SAVED_VAR(/datum/seed, force_layer) + /datum/seed/New() set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable. @@ -182,6 +203,7 @@ var/obj/item/clothing/C = target.get_equipped_item(slot) if(istype(C) && (C.body_parts_covered & affecting.body_part) && (C.item_flags & ITEM_FLAG_THICKMATERIAL)) affecting = null + break if(!(target.species && target.species.species_flags & (SPECIES_FLAG_NO_EMBED|SPECIES_FLAG_NO_MINOR_CUT))) affecting = null @@ -189,7 +211,7 @@ to_chat(target, "You are stung by \the [fruit] in your [affecting.name]!") for(var/rid in chems) var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/5)) - target.reagents.add_reagent(rid,injecting) + target.add_to_reagents(rid,injecting) else to_chat(target, "Sharp spines scrape against your armour!") @@ -270,7 +292,7 @@ origin_turf.visible_message(SPAN_DANGER("\The [thrown] splatters against [target]!")) splatter(origin_turf,thrown) -/datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only) +/datum/seed/proc/handle_plant_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only) var/health_change = 0 // Handle gas consumption. @@ -726,33 +748,41 @@ total_yield = max(1,total_yield) . = list() - for(var/i = 0;i 0) + var/using_yield = min(remaining_yield, per_stack) + remaining_yield -= using_yield + . += new product_type(get_turf(user), using_yield) + else + for(var/i = 1 to total_yield) + var/obj/item/product = new product_type(get_turf(user),name) + . += product - if(get_trait(TRAIT_PRODUCT_COLOUR)) - if(istype(product, /obj/item/chems/food)) + if(get_trait(TRAIT_PRODUCT_COLOUR) && istype(product, /obj/item/chems/food)) var/obj/item/chems/food/snack = product snack.color = get_trait(TRAIT_PRODUCT_COLOUR) snack.filling_color = get_trait(TRAIT_PRODUCT_COLOUR) - if(mysterious) - product.name += "?" - product.desc += " On second thought, something about this one looks strange." - - if(get_trait(TRAIT_BIOLUM)) - var/clr - if(get_trait(TRAIT_BIOLUM_COLOUR)) - clr = get_trait(TRAIT_BIOLUM_COLOUR) - product.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) - - //Handle spawning in living, mobile products. - if(isliving(product)) - product.visible_message("The pod disgorges [product]!") - handle_living_product(product) - if(istype(product,/mob/living/simple_animal/mushroom)) // Gross. - var/mob/living/simple_animal/mushroom/mush = product - mush.seed = src + if(mysterious) + product.name += "?" + product.desc += " On second thought, something about this one looks strange." + + if(get_trait(TRAIT_BIOLUM)) + var/clr + if(get_trait(TRAIT_BIOLUM_COLOUR)) + clr = get_trait(TRAIT_BIOLUM_COLOUR) + product.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) + + //Handle spawning in living, mobile products. + if(isliving(product)) + product.visible_message("The pod disgorges [product]!") + handle_living_product(product) + if(istype(product,/mob/living/simple_animal/mushroom)) // Gross. + var/mob/living/simple_animal/mushroom/mush = product + mush.seed = src // When the seed in this machine mutates/is modified, the tray seed value // is set to a new datum copied from the original. This datum won't actually diff --git a/code/modules/hydroponics/seed_appearance.dm b/code/modules/hydroponics/seed_appearance.dm index 4db240a4796..97350040b7b 100644 --- a/code/modules/hydroponics/seed_appearance.dm +++ b/code/modules/hydroponics/seed_appearance.dm @@ -16,18 +16,19 @@ if(SSplants.plant_icon_cache[ikey]) dead_overlay = SSplants.plant_icon_cache[ikey] else - dead_overlay = image('icons/obj/hydroponics/hydroponics_growing.dmi', "[ikey]") + dead_overlay = image('icons/obj/hydroponics/hydroponics_growing.dmi', ikey) dead_overlay.color = DEAD_PLANT_COLOUR SSplants.plant_icon_cache[ikey] = dead_overlay return dead_overlay /datum/seed/proc/get_harvest_appearance() if(!harvest_overlay) - var/ikey = "product-[get_trait(TRAIT_PRODUCT_ICON)]-[get_trait(TRAIT_PLANT_COLOUR)]" + var/icon_state = get_trait(TRAIT_PRODUCT_ICON) + var/ikey = "product-[icon_state]-[get_trait(TRAIT_PLANT_COLOUR)]" if(SSplants.plant_icon_cache[ikey]) harvest_overlay = SSplants.plant_icon_cache[ikey] else - harvest_overlay = image('icons/obj/hydroponics/hydroponics_products.dmi', "[ikey]") + harvest_overlay = image('icons/obj/hydroponics/hydroponics_products.dmi', icon_state) harvest_overlay.color = get_trait(TRAIT_PRODUCT_COLOUR) SSplants.plant_icon_cache[ikey] = harvest_overlay return harvest_overlay diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index bdcb31e17a9..f22559a3256 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -536,6 +536,10 @@ display_name = "towercap thicket" chems = list(/decl/material/solid/organic/wood = list(10,1)) mutants = null + product_type = /obj/item/stack/material/log/towercap + +/obj/item/stack/material/log/towercap + material = /decl/material/solid/organic/wood/fungal /datum/seed/mushroom/towercap/New() ..() diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 42e04593def..56e99773da6 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -7,6 +7,9 @@ var/list/genes = list() var/genesource = "unknown" +SAVED_VAR(/obj/item/disk/botany, genes) +SAVED_VAR(/obj/item/disk/botany, genesource) + /obj/item/disk/botany/attack_self(var/mob/user) if(genes.len) var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobotany Data", "No", "Yes") diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 0dceb1fb90c..1c3a6bf4e7b 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -5,6 +5,12 @@ var/list/obj/item/seeds/seeds = list() // Tracks actual objects contained in the pile var/ID +SAVED_VAR(/datum/seed_pile, name) +SAVED_VAR(/datum/seed_pile, amount) +SAVED_VAR(/datum/seed_pile, seed_type) +SAVED_VAR(/datum/seed_pile, seeds) +SAVED_VAR(/datum/seed_pile, ID) + /datum/seed_pile/New(var/obj/item/seeds/O, var/ID) name = O.name amount = 1 diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 304dc2eca7c..b8ee24009ff 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -45,8 +45,8 @@ pass_flags = PASS_FLAG_TABLE mouse_opacity = MOUSE_OPACITY_NORMAL - var/health = 10 - var/max_health = 100 + current_health = 10 + max_health = 100 var/growth_threshold = 0 var/growth_type = 0 var/max_growth = 0 @@ -59,6 +59,12 @@ var/mature_time //minimum maturation time var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant +SAVED_VAR(/obj/effect/vine, current_health) +SAVED_VAR(/obj/effect/vine, max_growth) +SAVED_VAR(/obj/effect/vine, parent) +SAVED_VAR(/obj/effect/vine, seed) +SAVED_VAR(/obj/effect/vine, plant) + /obj/effect/vine/single spread_chance = 0 @@ -72,9 +78,6 @@ parent.possible_children = max(0, parent.possible_children - 1) seed = newseed - if(start_matured) - mature_time = 0 - health = max_health if(!istype(seed)) seed = SSplants.seeds[DEFAULT_SEED] if(!seed) @@ -82,6 +85,10 @@ name = seed.display_name max_health = round(seed.get_trait(TRAIT_ENDURANCE)/2) + if(start_matured) + mature_time = 0 + current_health = max_health + if(seed.get_trait(TRAIT_SPREAD) == 2) mouse_opacity = MOUSE_OPACITY_PRIORITY max_growth = VINE_GROWTH_STAGES @@ -110,7 +117,7 @@ /obj/effect/vine/on_update_icon() overlays.Cut() - var/growth = growth_threshold ? min(max_growth, round(health/growth_threshold)) : 1 + var/growth = growth_threshold ? min(max_growth, round(current_health/growth_threshold)) : 1 var/at_fringe = get_dist(src,parent) if(spread_distance > 5) if(at_fringe >= spread_distance-3) @@ -210,7 +217,7 @@ to_chat(user, SPAN_WARNING("You failed to get a usable sample.")) else seed.harvest(user,0,1) - health -= (rand(3,5)*5) + current_health -= (rand(3,5)*5) else ..() var/damage = W.force @@ -255,12 +262,12 @@ physically_destroyed() /obj/effect/vine/proc/adjust_health(value) - health = clamp(health + value, 0, max_health) - if(health <= 0) + current_health = clamp(current_health + value, 0, get_max_health()) + if(current_health <= 0) die_off() /obj/effect/vine/proc/is_mature() - return (health >= (max_health/3) && world.time > mature_time) + return (current_health >= (get_max_health()/3) && world.time > mature_time) /obj/effect/vine/is_burnable() return seed.get_trait(TRAIT_HEAT_TOLERANCE) < 1000 @@ -281,7 +288,7 @@ return user.visible_message(SPAN_NOTICE("\The [user] starts chopping down \the [V].")) playsound(get_turf(V), W.hitsound, 100, 1) - var/chop_time = (V.health/W.force) * 0.5 SECONDS + var/chop_time = (V.current_health/W.force) * 0.5 SECONDS if(user.skill_check(SKILL_BOTANY, SKILL_ADEPT)) chop_time *= 0.5 if(do_after(user, chop_time, V, TRUE)) diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 770a7b64168..f5873acd34f 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -3,8 +3,8 @@ /obj/effect/vine/proc/get_cardinal_neighbors() . = list() for(var/check_dir in global.cardinal) - var/turf/simulated/T = get_step(get_turf(src), check_dir) - if(istype(T)) + var/turf/T = get_step(get_turf(src), check_dir) + if(istype(T) && T.simulated) . |= T /obj/effect/vine/proc/get_zlevel_neighbors() @@ -38,24 +38,24 @@ . |= get_zlevel_neighbors() /obj/effect/vine/Process() - var/turf/simulated/T = get_turf(src) - if(!istype(T)) + var/turf/T = get_turf(src) + if(!istype(T) || !T.simulated) return //Take damage from bad environment if any - adjust_health(-seed.handle_environment(T,T.return_air(),null,1)) - if(health <= 0) + adjust_health(-seed.handle_plant_environment(T,T.return_air(),null,1)) + if(current_health <= 0) return - + //Vine fight! for(var/obj/effect/vine/other in T) if(other.seed != seed) other.vine_overrun(seed, src) //Growing up - if(health < max_health) + if(current_health < get_max_health()) adjust_health(1) - if(growth_threshold && !(health % growth_threshold)) + if(growth_threshold && !(current_health % growth_threshold)) update_icon() if(is_mature()) @@ -76,7 +76,7 @@ var/list/neighbors = get_neighbors() if(neighbors.len) spread_to(pick(neighbors)) - + //Try to settle down if(can_spawn_plant()) plant = new(T,seed) @@ -93,15 +93,15 @@ STOP_PROCESSING(SSvines, src) /obj/effect/vine/proc/can_spawn_plant() - var/turf/simulated/T = get_turf(src) - return parent == src && health == max_health && !plant && istype(T) && !T.CanZPass(src, DOWN) + var/turf/T = get_turf(src) + return parent == src && current_health == get_max_health() && !plant && istype(T) && T.simulated && !T.CanZPass(src, DOWN) /obj/effect/vine/proc/should_sleep() if(buckled_mob) //got a victim to fondle return FALSE if(length(get_neighbors())) //got places to spread to return FALSE - if(health < max_health) //got some growth to do + if(current_health < get_max_health()) //got some growth to do return FALSE if(targets_in_range()) //got someone to grab return FALSE @@ -126,8 +126,8 @@ /obj/effect/vine/proc/wake_neighbors() // This turf is clear now, let our buddies know. - for(var/turf/simulated/check_turf in (get_cardinal_neighbors() | get_zlevel_neighbors())) - if(!istype(check_turf)) + for(var/turf/check_turf in (get_cardinal_neighbors() | get_zlevel_neighbors())) + if(!istype(check_turf) || !check_turf.simulated) continue for(var/obj/effect/vine/neighbor in check_turf.contents) if(QDELETED(neighbor)) @@ -136,8 +136,8 @@ /obj/effect/vine/proc/targets_in_range() var/list/mob/targets = list() - for(var/turf/simulated/check_turf in (get_cardinal_neighbors() | get_zlevel_neighbors() | list(loc))) - if(!istype(check_turf)) + for(var/turf/check_turf in (get_cardinal_neighbors() | get_zlevel_neighbors() | list(loc))) + if(!istype(check_turf) || !check_turf.simulated) continue for(var/mob/living/M in check_turf.contents) if(QDELETED(M)) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index e47d1ae7ef8..ecd297264b7 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -9,7 +9,7 @@ construct_state = /decl/machine_construction/default/panel_closed uncreated_component_parts = null stat_immune = 0 - atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_NO_CHEM_CHANGE var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. var/base_name = "tray" diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index b308e466061..5065d15e7eb 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -84,9 +84,9 @@ // Seed datum handles gasses, light and pressure. if(mechanical && closed_system) - plant_health -= seed.handle_environment(T,environment,tray_light) + plant_health -= seed.handle_plant_environment(T,environment,tray_light) else - plant_health -= seed.handle_environment(T,environment) + plant_health -= seed.handle_plant_environment(T,environment) // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses if (closed_system && get_port()) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 2a344335261..95378fa3db7 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -65,7 +65,7 @@ /obj/item/electronic_assembly/check_health(lastdamage, lastdamtype, lastdamflags, consumed) if(!can_take_damage()) return - if(health < 1) + if(current_health < 1) visible_message(SPAN_DANGER("\The [src] falls to pieces!")) physically_destroyed() else if((get_percent_health() < 15) && prob(5)) @@ -109,7 +109,7 @@ P.make_energy() var/power_failure = FALSE - if(max_health/health < 0.5 && prob(5)) + if(get_max_health()/current_health < 0.5 && prob(5)) visible_message(SPAN_WARNING("\The [src] shudders and sparks.")) power_failure = TRUE // Now spend it. @@ -119,7 +119,7 @@ if(power_failure || !draw_power(IC.power_draw_idle)) IC.power_fail() -/obj/item/electronic_assembly/receive_mouse_drop(atom/dropping, mob/user) +/obj/item/electronic_assembly/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && user == dropping) interact(user) @@ -471,7 +471,7 @@ var/obj/item/stack/cable_coil/C = I if(is_damaged() && do_after(user, 10, src) && C.use(1)) user.visible_message("\The [user] patches up \the [src].") - health = min(max_health, health + 5) + current_health = min(get_max_health(), current_health + 5) return TRUE else if(user.a_intent != I_HURT) diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index 14d5b38e1bf..a30bdaae03b 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -27,6 +27,14 @@ D [1]/ || var/pin_type // IC_INPUT, IC_OUTPUT, IC_ACTIVATOR - used in saving assembly wiring var/ord +SAVED_VAR(/datum/integrated_io, name) +SAVED_VAR(/datum/integrated_io, holder) +SAVED_VAR(/datum/integrated_io, data) +SAVED_VAR(/datum/integrated_io, linked) +SAVED_VAR(/datum/integrated_io, io_type) +SAVED_VAR(/datum/integrated_io, pin_type) +SAVED_VAR(/datum/integrated_io, ord) + /datum/integrated_io/New(loc, _name, _data, _pin_type,_ord) name = _name if(_data) diff --git a/code/modules/integrated_electronics/core/prefab/prefabs.dm b/code/modules/integrated_electronics/core/prefab/prefabs.dm index 6a8663042e0..0efa5181a66 100644 --- a/code/modules/integrated_electronics/core/prefab/prefabs.dm +++ b/code/modules/integrated_electronics/core/prefab/prefabs.dm @@ -1,6 +1,6 @@ /decl/prefab/ic_assembly/hand_teleporter assembly_name = "hand-teleporter" - data = {"{'assembly':{'type':'type-a electronic mechanism','name':'Hand Teleporter', 'detail_color':'#5d99be'},'components':\[{'type':'teleporter locator'},{'type':'wormhole generator'},{'type':'button','name':'Open Wormhole'}\],'wires':\[\[\[1,'O',1\],\[2,'I',1\]\],\[\[2,'A',1\],\[3,'A',1\]\]\]}"} + data = @'{"assembly":{"type":"type-a electronic mechanism","name":"Hand Teleporter", "detail_color":"#5d99be"},"components":[{"type":"teleporter locator"},{"type":"wormhole generator"},{"type":"button","name":"Open Wormhole"}],"wires":[[[1,"O",1],[2,"I",1]],[[2,"A",1],[3,"A",1]]]}' power_cell_type = /obj/item/cell/hyper /obj/prefab/hand_teleporter diff --git a/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm b/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm index b58cf8d309e..c045f16f4a6 100644 --- a/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm +++ b/code/modules/integrated_electronics/core/prefab/test/testprefabs.dm @@ -1,6 +1,6 @@ /decl/prefab/ic_assembly/test_heatercooler assembly_name = "heating-cooling-test" - data = {"{'assembly':{'type':'type-c electronic machine'},'components':\[{'type':'starter'},{'type':'reagent funnel'},{'type':'big reagent storage'},{'type':'reagent pump','name':'Hot Pump','inputs':\[\[3,0,5]]},{'type':'reagent pump','name':'Cool Pump','inputs':\[\[3,0,5]]},{'type':'reagent heater','name':'Heater','inputs':\[\[1,0,80]]},{'type':'reagent cooler','name':'Cooler','inputs':\[\[1,0,-50]]},{'type':'button','name':'Heat And Cool'},{'type':'and gate','name':'Heater Active Check','inputs':\[\[1,0,0],\[2,0,1]]},{'type':'and gate','name':'Cooler Active Check','inputs':\[\[1,0,0],\[2,0,1]]},{'type':'custom delay circuit','name':'Heater Delay','inputs':\[\[1,0,100]]},{'type':'custom delay circuit','name':'Cooler Delay','inputs':\[\[1,0,100]]}],'wires':\[\[\[1,'A',1],\[3,'A',1]],\[\[1,'A',1],\[6,'A',3]],\[\[1,'A',1],\[7,'A',3]],\[\[2,'I',1],\[3,'O',2]],\[\[3,'O',2],\[4,'I',1]],\[\[3,'O',2],\[5,'I',1]],\[\[4,'I',2],\[6,'O',4]],\[\[4,'A',1],\[8,'A',1]],\[\[4,'A',2],\[6,'A',1]],\[\[5,'I',2],\[7,'O',4]],\[\[5,'A',1],\[8,'A',1]],\[\[5,'A',2],\[7,'A',1]],\[\[6,'O',3],\[9,'I',1]],\[\[6,'A',1],\[11,'A',2]],\[\[6,'A',2],\[9,'A',1]],\[\[7,'O',3],\[10,'I',1]],\[\[7,'A',1],\[12,'A',2]],\[\[7,'A',2],\[10,'A',1]],\[\[9,'A',2],\[11,'A',1]],\[\[10,'A',2],\[12,'A',1]]]}"} + data = @'{"assembly":{"type":"type-c electronic machine"},"components":[{"type":"starter"},{"type":"reagent funnel"},{"type":"big reagent storage"},{"type":"reagent pump","name":"Hot Pump","inputs":[[3,0,5]]},{"type":"reagent pump","name":"Cool Pump","inputs":[[3,0,5]]},{"type":"reagent heater","name":"Heater","inputs":[[1,0,80]]},{"type":"reagent cooler","name":"Cooler","inputs":[[1,0,-50]]},{"type":"button","name":"Heat And Cool"},{"type":"and gate","name":"Heater Active Check","inputs":[[1,0,0],[2,0,1]]},{"type":"and gate","name":"Cooler Active Check","inputs":[[1,0,0],[2,0,1]]},{"type":"custom delay circuit","name":"Heater Delay","inputs":[[1,0,100]]},{"type":"custom delay circuit","name":"Cooler Delay","inputs":[[1,0,100]]}],"wires":[[[1,"A",1],[3,"A",1]],[[1,"A",1],[6,"A",3]],[[1,"A",1],[7,"A",3]],[[2,"I",1],[3,"O",2]],[[3,"O",2],[4,"I",1]],[[3,"O",2],[5,"I",1]],[[4,"I",2],[6,"O",4]],[[4,"A",1],[8,"A",1]],[[4,"A",2],[6,"A",1]],[[5,"I",2],[7,"O",4]],[[5,"A",1],[8,"A",1]],[[5,"A",2],[7,"A",1]],[[6,"O",3],[9,"I",1]],[[6,"A",1],[11,"A",2]],[[6,"A",2],[9,"A",1]],[[7,"O",3],[10,"I",1]],[[7,"A",1],[12,"A",2]],[[7,"A",2],[10,"A",1]],[[9,"A",2],[11,"A",1]],[[10,"A",2],[12,"A",1]]]}' power_cell_type = /obj/item/cell/hyper /obj/prefab/test_heatcool diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 5ac88803f88..8a33268251d 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -156,7 +156,7 @@ HTML += jointext(dat, "; ") HTML += ".

    " - if(config.allow_ic_printing || debug) + if(get_config_value(/decl/config/toggle/on/allow_ic_printing) || debug) HTML += "Assembly cloning: [can_clone ? (fast_clone ? "Instant" : "Available") : "Unavailable"].
    " HTML += "Circuits available: [upgraded || debug ? "Advanced":"Regular"]." @@ -164,7 +164,7 @@ HTML += "
    Crossed out circuits mean that the printer is not sufficiently upgraded to create that circuit." HTML += "
    " - if((can_clone && config.allow_ic_printing) || debug) + if((can_clone && get_config_value(/decl/config/toggle/on/allow_ic_printing)) || debug) HTML += "Here you can load script for your assembly.
    " if(!cloning) HTML += " {Load Program} " @@ -218,14 +218,8 @@ if(!build_type || !ispath(build_type)) return TRUE - var/list/cost - if(ispath(build_type, /obj/item/electronic_assembly)) - var/obj/item/electronic_assembly/E = SScircuit.cached_assemblies[build_type] - cost = E.matter - else if(ispath(build_type, /obj/item/integrated_circuit)) - var/obj/item/integrated_circuit/IC = SScircuit.cached_components[build_type] - cost = IC.matter - else if(!(build_type in SScircuit.circuit_fabricator_recipe_list["Tools"])) + var/list/cost = atom_info_repository.get_matter_for(build_type) + if(!ispath(build_type, /obj/item/electronic_assembly) && !ispath(build_type, /obj/item/integrated_circuit) && !(build_type in SScircuit.circuit_fabricator_recipe_list["Tools"])) return if(!debug && !subtract_material_costs(cost, usr)) @@ -243,7 +237,7 @@ playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE) if(href_list["print"]) - if(!config.allow_ic_printing && !debug) + if(!get_config_value(/decl/config/toggle/on/allow_ic_printing) && !debug) to_chat(usr, "Your facility has disabled printing of custom circuitry due to recent allegations of copyright infringement.") return if(!can_clone) // Copying and printing ICs is cloning @@ -308,7 +302,7 @@ to_chat(usr, "You begin printing a custom assembly. This will take approximately [round(cloning_time/10)] seconds. You can still print \ off normal parts during this time.") playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) - addtimer(CALLBACK(src, .proc/print_program, usr), cloning_time) + addtimer(CALLBACK(src, PROC_REF(print_program), usr), cloning_time) if("cancel") if(!cloning || !program) @@ -338,16 +332,16 @@ desc = "Install this into your integrated circuit printer to enhance it." color = COLOR_GRAY20 label = "label_up" - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/disk/integrated_circuit/upgrade/advanced name = "integrated circuit printer upgrade disk - advanced designs" desc = "Install this into your integrated circuit printer to enhance it. This one adds new, advanced designs to the printer." material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':3,'engineering':3}" + origin_tech = @'{"materials":3,"engineering":3}' /obj/item/disk/integrated_circuit/upgrade/clone name = "integrated circuit printer upgrade disk - instant cloner" desc = "Install this into your integrated circuit printer to enhance it. This one allows the printer to duplicate assemblies instantaneously." - origin_tech = "{'materials':3,'programming':5}" + origin_tech = @'{"materials":3,"programming":5}' diff --git a/code/modules/integrated_electronics/core/special_pins/color_pin.dm b/code/modules/integrated_electronics/core/special_pins/color_pin.dm index 30b0a1895d2..f7543de2f40 100644 --- a/code/modules/integrated_electronics/core/special_pins/color_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/color_pin.dm @@ -31,13 +31,7 @@ /datum/integrated_io/color/scramble() if(!is_valid()) return - var/new_data - for(var/i=1;i<=3;i++) - var/temp_col = "[num2hex(rand(0,255))]" - if(length(temp_col )<2) - temp_col = "0[temp_col]" - new_data += temp_col - data = new_data + data = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) push_data() /datum/integrated_io/color/display_pin_type() diff --git a/code/modules/integrated_electronics/core/wirer.dm b/code/modules/integrated_electronics/core/wirer.dm index 3f861b883a7..4b0b6749ca3 100644 --- a/code/modules/integrated_electronics/core/wirer.dm +++ b/code/modules/integrated_electronics/core/wirer.dm @@ -84,7 +84,7 @@ if(selected_io) unselect_io(selected_io) selected_io = io - events_repository.register(/decl/observ/destroyed, selected_io, src, .proc/unselect_io) + events_repository.register(/decl/observ/destroyed, selected_io, src, PROC_REF(unselect_io)) switch(mode) if(UNWIRE) mode = UNWIRING diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index ed18a97e96c..2e26743389d 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -121,18 +121,18 @@ /obj/item/integrated_circuit/passive/power/chemical_cell/on_reagent_change(changetype) ..() - set_pin_data(IC_OUTPUT, 1, reagents.total_volume) + set_pin_data(IC_OUTPUT, 1, reagents?.total_volume || 0) push_data() /obj/item/integrated_circuit/passive/power/chemical_cell/make_energy() if(assembly) if(assembly.battery) var/battery_charge = 5000 - if((assembly.battery.maxcharge-assembly.battery.charge) / CELLRATE > battery_charge && reagents.remove_reagent(/decl/material/liquid/blood, 1)) //only blood is powerful enough to power the station(c) + if((assembly.battery.maxcharge-assembly.battery.charge) / CELLRATE > battery_charge && remove_from_reagents(/decl/material/liquid/blood, 1)) //only blood is powerful enough to power the station(c) assembly.give_power(battery_charge) for(var/I in fuel) if((assembly.battery.maxcharge-assembly.battery.charge) / CELLRATE > fuel[I]) - if(reagents.remove_reagent(I, 1)) + if(remove_from_reagents(I, 1)) assembly.give_power(fuel[I]*multi) /obj/item/integrated_circuit/passive/power/chemical_cell/do_work() diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index eca6e1289c2..a3ae0f726f6 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -195,17 +195,17 @@ var/mob/living/carbon/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living) if(!istype(H)) //Invalid input return - if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. - + if(H in view(get_turf(src))) // Like the medbot's analyzer it can be used at range. + var/current_max_health = H.get_max_health() var/obj/item/organ/internal/brain = GET_INTERNAL_ORGAN(H, BP_BRAIN) set_pin_data(IC_OUTPUT, 1, (brain && H.stat != DEAD)) set_pin_data(IC_OUTPUT, 2, (H.stat == CONSCIOUS)) - set_pin_data(IC_OUTPUT, 3, damage_to_severity(100 * H.getBruteLoss() / H.maxHealth)) - set_pin_data(IC_OUTPUT, 4, damage_to_severity(100 * H.getFireLoss() / H.maxHealth)) - set_pin_data(IC_OUTPUT, 5, damage_to_severity(100 * H.getToxLoss() / H.maxHealth)) - set_pin_data(IC_OUTPUT, 6, damage_to_severity(100 * H.getOxyLoss() / H.maxHealth)) - set_pin_data(IC_OUTPUT, 7, damage_to_severity(100 * H.getCloneLoss() / H.maxHealth)) + set_pin_data(IC_OUTPUT, 3, damage_to_severity(100 * H.getBruteLoss() / current_max_health)) + set_pin_data(IC_OUTPUT, 4, damage_to_severity(100 * H.getFireLoss() / current_max_health)) + set_pin_data(IC_OUTPUT, 5, damage_to_severity(100 * H.getToxLoss() / current_max_health)) + set_pin_data(IC_OUTPUT, 6, damage_to_severity(100 * H.getOxyLoss() / current_max_health)) + set_pin_data(IC_OUTPUT, 7, damage_to_severity(100 * H.getCloneLoss() / current_max_health)) set_pin_data(IC_OUTPUT, 8, H.get_pulse_as_number()) set_pin_data(IC_OUTPUT, 9, H.get_blood_oxygenation()) set_pin_data(IC_OUTPUT, 10, damage_to_severity(H.get_shock())) @@ -254,7 +254,7 @@ return for(var/i=1, i<=outputs.len, i++) set_pin_data(IC_OUTPUT, i, null) - if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(src))) // Like the medbot's analyzer it can be used at range. if(H.seed) set_pin_data(IC_OUTPUT, 1, H.seed.seed_name) set_pin_data(IC_OUTPUT, 2, H.age) @@ -297,7 +297,7 @@ return for(var/i=1, i<=outputs.len, i++) set_pin_data(IC_OUTPUT, i, null) - if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(src))) // Like the medbot's analyzer it can be used at range. if(H.seed) for(var/chem_path in H.seed.chems) var/decl/material/R = chem_path @@ -648,7 +648,7 @@ . = ..() set_pin_data(IC_INPUT, 1, frequency) set_pin_data(IC_INPUT, 2, code) - addtimer(CALLBACK(src, .proc/set_frequency,frequency), 40) + addtimer(CALLBACK(src, PROC_REF(set_frequency),frequency), 40) /obj/item/integrated_circuit/input/signaler/Destroy() radio_controller.remove_object(src,frequency) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index a75e68f68b8..a1213df5387 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -111,7 +111,7 @@ //Shooting Code: A.shot_from = assembly.name A.firer = assembly - A.launch(target, BP_CHEST) + A.launch(target) return A /obj/item/integrated_circuit/manipulation/locomotion @@ -207,7 +207,7 @@ dt = clamp(detonation_time.data, 1, 12)*10 else dt = 15 - addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/activate), dt) + addtimer(CALLBACK(attached_grenade, TYPE_PROC_REF(/obj/item/grenade, activate)), dt) var/atom/holder = loc log_and_message_admins("activated a grenade assembly. Last touches: Assembly: [holder.fingerprintslast] Circuit: [fingerprintslast] Grenade: [attached_grenade.fingerprintslast]") @@ -420,9 +420,9 @@ set_pin_data(IC_OUTPUT, 1, TRUE) pulling = to_pull acting_object.visible_message("\The [acting_object] starts pulling \the [to_pull] around.") - events_repository.register(/decl/observ/moved, to_pull, src, .proc/check_pull) //Whenever the target moves, make sure we can still pull it! - events_repository.register(/decl/observ/destroyed, to_pull, src, .proc/stop_pulling) //Stop pulling if it gets destroyed - events_repository.register(/decl/observ/moved, acting_object, src, .proc/pull) //Make sure we actually pull it. + events_repository.register(/decl/observ/moved, to_pull, src, PROC_REF(check_pull)) //Whenever the target moves, make sure we can still pull it! + events_repository.register(/decl/observ/destroyed, to_pull, src, PROC_REF(stop_pulling)) //Stop pulling if it gets destroyed + events_repository.register(/decl/observ/moved, acting_object, src, PROC_REF(pull)) //Make sure we actually pull it. push_data() if(3) if(pulling) @@ -555,7 +555,7 @@ spawn_flags = IC_SPAWN_RESEARCH action_flags = IC_ACTION_LONG_RANGE - origin_tech = "{'magnets':1,'wormholes':3}" + origin_tech = @'{"magnets":1,"wormholes":3}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, @@ -606,7 +606,7 @@ power_draw_per_use = 20 var/obj/item/aicard activators = list("Upwards" = IC_PINTYPE_PULSE_OUT, "Downwards" = IC_PINTYPE_PULSE_OUT, "Left" = IC_PINTYPE_PULSE_OUT, "Right" = IC_PINTYPE_PULSE_OUT) - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' spawn_flags = IC_SPAWN_RESEARCH /obj/item/integrated_circuit/manipulation/ai/verb/open_menu() @@ -654,7 +654,7 @@ /obj/item/integrated_circuit/manipulation/ai/attackby(var/obj/item/I, var/mob/user) - if(is_type_in_list(I, list(/obj/item/aicard, /obj/item/paicard, /obj/item/mmi))) + if(is_type_in_list(I, list(/obj/item/aicard, /obj/item/paicard, /obj/item/organ/internal/brain_interface))) load_ai(user, I) else return ..() @@ -681,7 +681,7 @@ cooldown_per_use = 2 SECOND power_draw_per_use = 50 spawn_flags = IC_SPAWN_DEFAULT - origin_tech = "{'engineering':2}" + origin_tech = @'{"engineering":2}' /obj/item/integrated_circuit/manipulation/anchoring/do_work(ord) if(!isturf(assembly.loc)) @@ -724,7 +724,7 @@ cooldown_per_use = 2 SECOND power_draw_per_use = 50 spawn_flags = IC_SPAWN_DEFAULT - origin_tech = "{'engineering':2}" + origin_tech = @'{"engineering":2}' var/lock_enabled = FALSE diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 12ccffa92c7..b5bf28abed7 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -19,7 +19,7 @@ push_vol() /obj/item/integrated_circuit/reagent/proc/push_vol() - set_pin_data(IC_OUTPUT, 1, reagents.total_volume) + set_pin_data(IC_OUTPUT, 1, reagents?.total_volume || 0) push_data() /obj/item/integrated_circuit/reagent/smoke @@ -49,7 +49,7 @@ var/smoke_radius = 5 var/notified = FALSE -/obj/item/integrated_circuit/reagent/smoke/on_reagent_change() +/obj/item/integrated_circuit/reagent/on_reagent_change() ..() push_vol() @@ -109,10 +109,6 @@ var/transfer_amount = 10 var/busy = FALSE -/obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype) - ..() - push_vol() - /obj/item/integrated_circuit/reagent/injector/on_data_written() var/new_amount = get_pin_data(IC_INPUT, 2) if(new_amount < 0) @@ -188,7 +184,6 @@ if(isliving(AM)) var/mob/living/L = AM var/injection_status = L.can_inject(null, BP_CHEST) - log_world("Injection status? [injection_status]") var/injection_delay = 3 SECONDS if(injection_status == INJECTION_PORT) injection_delay += INJECTION_PORT_DELAY @@ -200,7 +195,7 @@ L.visible_message("\The [acting_object] is trying to inject [L]!", \ "\The [acting_object] is trying to inject you!") busy = TRUE - addtimer(CALLBACK(src, .proc/inject_after, weakref(L)), injection_delay) + addtimer(CALLBACK(src, PROC_REF(inject_after), weakref(L)), injection_delay) return else if(!ATOM_IS_OPEN_CONTAINER(AM)) @@ -230,7 +225,7 @@ C.visible_message("\The [acting_object] is trying to take a blood sample from [C]!", \ "\The [acting_object] is trying to take a blood sample from you!") busy = TRUE - addtimer(CALLBACK(src, .proc/draw_after, weakref(C), tramount), injection_delay) + addtimer(CALLBACK(src, PROC_REF(draw_after), weakref(C), tramount), injection_delay) return else @@ -325,10 +320,6 @@ set_pin_data(IC_OUTPUT, 2, weakref(src)) push_data() -/obj/item/integrated_circuit/reagent/storage/on_reagent_change(changetype) - ..() - push_vol() - /obj/item/integrated_circuit/reagent/storage/big name = "big reagent storage" icon_state = "reagent_storage_big" @@ -345,7 +336,7 @@ icon_state = "reagent_storage_cryo" extended_desc = "This is effectively an internal cryo beaker." - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE complexity = 8 spawn_flags = IC_SPAWN_RESEARCH @@ -493,13 +484,13 @@ return for(var/rtype in source.reagents.reagent_volumes) - var/decl/material/G = GET_DECL(rtype) + var/decl/material/mat = GET_DECL(rtype) if(!direction_mode) - if(G.name in demand) - source.reagents.trans_type_to(target, G.type, transfer_amount) + if(mat.name in demand) + source.reagents.trans_type_to(target, rtype, transfer_amount) else - if(!(G.name in demand)) - source.reagents.trans_type_to(target, G.type, transfer_amount) + if(!(mat.name in demand)) + source.reagents.trans_type_to(target, rtype, transfer_amount) activate_pin(2) push_data() @@ -601,10 +592,6 @@ set_pin_data(IC_OUTPUT, 4, weakref(src)) push_data() -/obj/item/integrated_circuit/reagent/temp/on_reagent_change() - ..() - push_vol() - /obj/item/integrated_circuit/reagent/temp/power_fail() active = 0 diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index 9012de5054c..25f9dca52a4 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -119,7 +119,7 @@ if(Pl&&islist(Pl)) idc.access = Pl var/turf/a_loc = get_turf(assembly) - var/list/P = AStar(a_loc, locate(get_pin_data(IC_INPUT, 1), get_pin_data(IC_INPUT, 2), a_loc.z), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT, 3, /atom))) + var/list/P = AStar(a_loc, locate(get_pin_data(IC_INPUT, 1), get_pin_data(IC_INPUT, 2), a_loc.z), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT, 3, /atom))) if(!P) activate_pin(3) diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm index 1ec0d80676f..c9739ceed0a 100644 --- a/code/modules/integrated_electronics/subtypes/time.dm +++ b/code/modules/integrated_electronics/subtypes/time.dm @@ -17,7 +17,7 @@ power_draw_per_use = 2 /obj/item/integrated_circuit/time/delay/do_work() - addtimer(CALLBACK(src, .proc/activate_pin, 2), delay) + addtimer(CALLBACK(src, PROC_REF(activate_pin), 2), delay) /obj/item/integrated_circuit/time/delay/five_sec name = "five-sec delay circuit" @@ -98,7 +98,7 @@ /obj/item/integrated_circuit/time/ticker/proc/tick() if(is_running) - addtimer(CALLBACK(src, .proc/tick), delay) + addtimer(CALLBACK(src, PROC_REF(tick)), delay) if(world.time > next_fire) next_fire = world.time + delay activate_pin(1) diff --git a/code/modules/interactions/_interactions.dm b/code/modules/interactions/_interactions.dm index a15a2bdd31f..fd9c2ec3696 100644 --- a/code/modules/interactions/_interactions.dm +++ b/code/modules/interactions/_interactions.dm @@ -21,7 +21,7 @@ if(expected_target_type && !istype(target, expected_target_type)) return FALSE - if(isturf(target.loc)) + if(isturf(target) || isturf(target.loc)) if(interaction_flags & INTERACTION_NEEDS_INVENTORY) return FALSE else @@ -35,7 +35,7 @@ else if((interaction_flags & INTERACTION_NEEDS_ADJACENCY) && !user.Adjacent(target)) return FALSE - // CanPhysicallyInteract() also checks default incapacitation, so don't set + // CanPhysicallyInteract() also checks default incapacitation, so don't set // incapacitation_flags unless needed. if(incapacitation_flags && user.incapacitated(incapacitation_flags)) return FALSE diff --git a/code/modules/interactions/interactions_atom.dm b/code/modules/interactions/interactions_atom.dm index 7510dc73913..9709a3414ae 100644 --- a/code/modules/interactions/interactions_atom.dm +++ b/code/modules/interactions/interactions_atom.dm @@ -2,7 +2,7 @@ if(!length(interactions)) return FALSE - + var/list/possibilities for(var/interaction_type in interactions) var/decl/interaction_handler/interaction = GET_DECL(interaction_type) @@ -19,7 +19,7 @@ choice = possibilities[1] else choice = show_radial_menu(user, src, possibilities, use_labels = TRUE) - if(!istype(choice) || !(choice.type in get_alt_interactions()) || !choice.is_possible(src, user, prop)) + if(!istype(choice) || QDELETED(user) || !(choice.type in get_alt_interactions(user)) || !choice.is_possible(src, user, prop)) return TRUE user.face_atom(src) diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index 527e5a11598..6fe32e00f0e 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -15,7 +15,7 @@ if((movement_dir & EAST) && (movement_dir & WEST)) movement_dir &= ~(EAST|WEST) - if(!config.allow_diagonal_movement) + if(!get_config_value(/decl/config/toggle/allow_diagonal_movement)) if(movement_dir & user.last_move_dir_pressed) movement_dir = user.last_move_dir_pressed else diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index f65e26da951..fb56abe3346 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -37,7 +37,7 @@ if(!(next_move_dir_sub & movement)) next_move_dir_add |= movement - if(movement && !config.allow_diagonal_movement) + if(movement && !get_config_value(/decl/config/toggle/allow_diagonal_movement)) last_move_dir_pressed = movement // Client-level keybindings are ones anyone should be able to do at any time diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 7a22648f25c..36f75134fda 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -136,9 +136,10 @@ // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() if (light_color) - lum_r = HEX_RED(light_color) / 255 - lum_g = HEX_GREEN(light_color) / 255 - lum_b = HEX_BLUE(light_color) / 255 + var/list/color_list = rgb2num(light_color) + lum_r = color_list[1] / 255 + lum_g = color_list[2] / 255 + lum_b = color_list[3] / 255 else lum_r = 1 lum_g = 1 diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 912a673d3ad..761ea49d37f 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -155,7 +155,7 @@ lum_g = CLAMP01(lum_g / 4) * 255 lum_b = CLAMP01(lum_b / 4) * 255 - return "#[num2hex(lum_r, 2)][num2hex(lum_g, 2)][num2hex(lum_g, 2)]" + return rgb(lum_r, lum_b, lum_g) #define SCALE(targ,min,max) (targ - min) / (max - min) diff --git a/code/modules/locks/key.dm b/code/modules/locks/key.dm index b4ded50c995..ee2a60abab9 100644 --- a/code/modules/locks/key.dm +++ b/code/modules/locks/key.dm @@ -8,23 +8,31 @@ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC var/key_data = "" -/obj/item/key/Initialize(var/mapload, var/material_key, var/new_key_data) - . = ..(mapload, material_key) - if(new_key_data) - key_data = new_key_data - /obj/item/key/proc/get_data(var/mob/user) return key_data -/obj/item/key/soap +/obj/item/key/Initialize(mapload, material_key, _data) + . = ..(mapload, material_key) + if(_data) + key_data = _data + +/obj/item/key/temporary + name = "key" + desc = "A fragile key with limited uses." material = /decl/material/liquid/cleaner/soap var/uses = 0 -/obj/item/key/soap/get_data(var/mob/user) +SAVED_VAR(/obj/item/key/temporary, uses) + +/obj/item/key/temporary/Initialize(mapload, material_key, _data, _uses) + . = ..(mapload, material_key, _data) + uses = _uses + +/obj/item/key/temporary/get_data(var/mob/user) uses-- if(uses == 1) - to_chat(user, "\The [src] is going to break soon!") + to_chat(user, SPAN_DANGER("\The [src] is going to break soon!")) else if(uses <= 0) - to_chat(user, "\The [src] crumbles in your hands.") + to_chat(user, SPAN_DANGER("\The [src] crumbles in your hands.")) qdel(src) return ..() diff --git a/code/modules/locks/lock.dm b/code/modules/locks/lock.dm index efe2d0920d3..8420ab5a111 100644 --- a/code/modules/locks/lock.dm +++ b/code/modules/locks/lock.dm @@ -7,6 +7,10 @@ var/lock_data = "" //basically a randomized string. The longer the string the more complex the lock. var/atom/holder +SAVED_VAR(/datum/lock, status) +SAVED_VAR(/datum/lock, lock_data) +SAVED_VAR(/datum/lock, holder) + /datum/lock/New(var/atom/h, var/complexity = 1) holder = h if(istext(complexity)) @@ -39,10 +43,7 @@ return 0 /datum/lock/proc/toggle(var/key = "", var/mob/user) - if(status & LOCK_LOCKED) - return unlock(key, user) - else - return lock(key, user) + return (status & LOCK_LOCKED) ? unlock(key, user) : lock(key, user) /datum/lock/proc/getComplexity() return length(lock_data) diff --git a/code/modules/maps/_map_template.dm b/code/modules/maps/_map_template.dm index 34bf1fb735f..8847b9a31af 100644 --- a/code/modules/maps/_map_template.dm +++ b/code/modules/maps/_map_template.dm @@ -27,6 +27,8 @@ var/template_parent_type = /datum/map_template ///The initial type of level_data to instantiate new z-level with initially. (Is replaced by whatever is in the map file.) If null, will use default. var/level_data_type + /// Various tags used for selecting templates for placement on a map. + var/template_tags = 0 /datum/map_template/New(var/created_ad_hoc) if(created_ad_hoc != SSmapping.type) @@ -43,8 +45,8 @@ /datum/map_template/proc/get_template_cost() return 0 -/datum/map_template/proc/get_ruin_tags() - return 0 +/datum/map_template/proc/get_template_tags() + return template_tags /datum/map_template/proc/preload_size() var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) @@ -99,12 +101,11 @@ for (var/turf/T as anything in turfs) if(template_flags & TEMPLATE_FLAG_NO_RUINS) - T.turf_flags |= TURF_FLAG_NORUINS + T.turf_flags |= TURF_FLAG_NO_POINTS_OF_INTEREST if(template_flags & TEMPLATE_FLAG_NO_RADS) qdel(SSradiation.sources_assoc[T]) - if(istype(T,/turf/simulated)) - var/turf/simulated/sim = T - sim.update_air_properties() + if(istype(T) && T.simulated) + T.update_air_properties() /datum/map_template/proc/pre_init_shuttles() . = SSshuttle.block_queue @@ -117,12 +118,12 @@ SSshuttle.map_hash_to_areas[map_hash] = initialized_areas_by_type for(var/area/A in initialized_areas_by_type) A.saved_map_hash = map_hash - events_repository.register(/decl/observ/destroyed, A, src, .proc/cleanup_lateloaded_area) + events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(cleanup_lateloaded_area)) SSshuttle.block_queue = pre_init_state SSshuttle.clear_init_queue() // We will flush the queue unless there were other blockers, in which case they will do it. /datum/map_template/proc/cleanup_lateloaded_area(area/destroyed_area) - events_repository.unregister(/decl/observ/destroyed, destroyed_area, src, .proc/cleanup_lateloaded_area) + events_repository.unregister(/decl/observ/destroyed, destroyed_area, src, PROC_REF(cleanup_lateloaded_area)) if(destroyed_area.saved_map_hash) SSshuttle.map_hash_to_areas[destroyed_area.saved_map_hash] -= destroyed_area diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index 12680e46a76..e8c4a5b7547 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -4,8 +4,9 @@ var/centered = TRUE var/list/map_template_names //list of template names to pick from -/obj/abstract/landmark/map_load_mark/New(loc) - ..() +INITIALIZE_IMMEDIATE(/obj/abstract/landmark/map_load_mark) +/obj/abstract/landmark/map_load_mark/Initialize() + . = ..() if(Master.map_loading) // If we're created while a map is being loaded return // Let after_load() handle us if(!SSmapping.initialized) // If we're being created prior to SSmapping @@ -14,11 +15,15 @@ // How did we get here? // These should only be loaded from compiled maps or map templates. PRINT_STACK_TRACE("map_load_mark created outside of maploading") - load_subtemplate() + init_load_subtemplate() /obj/abstract/landmark/map_load_mark/proc/get_subtemplate() . = LAZYLEN(map_template_names) && pick(map_template_names) +/obj/abstract/landmark/map_load_mark/proc/init_load_subtemplate() + set waitfor = FALSE + load_subtemplate() + /obj/abstract/landmark/map_load_mark/proc/load_subtemplate() // Commenting this out temporarily as DMMS breaks when asychronously // loading overlapping map templates. TODO: more robust queuing behavior @@ -98,11 +103,11 @@ /obj/abstract/landmark/delete_on_shuttle/Initialize() . = ..() - events_repository.register_global(/decl/observ/shuttle_added, src, .proc/check_shuttle) + events_repository.register_global(/decl/observ/shuttle_added, src, PROC_REF(check_shuttle)) /obj/abstract/landmark/delete_on_shuttle/proc/check_shuttle(var/shuttle) if(SSshuttle.shuttles[shuttle_name] == shuttle) - events_repository.register(/decl/observ/shuttle_moved, shuttle, src, .proc/delete_everything) + events_repository.register(/decl/observ/shuttle_moved, shuttle, src, PROC_REF(delete_everything)) shuttle_datum = shuttle /obj/abstract/landmark/delete_on_shuttle/proc/delete_everything() @@ -112,9 +117,9 @@ qdel(src) /obj/abstract/landmark/delete_on_shuttle/Destroy() - events_repository.unregister_global(/decl/observ/shuttle_added, src, .proc/check_shuttle) + events_repository.unregister_global(/decl/observ/shuttle_added, src, PROC_REF(check_shuttle)) if(shuttle_datum) - events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/delete_everything) + events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, PROC_REF(delete_everything)) . = ..() // Has a percent chance on spawn to set the specified variable on the specified type to the specified value. diff --git a/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm b/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm index 271aa3e0a89..f6aace3f4de 100644 --- a/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm +++ b/code/modules/maps/template_types/random_exoplanet/fauna_generator.dm @@ -100,8 +100,8 @@ /datum/fauna_generator/proc/register_fauna(var/mob/living/A) if(A in live_fauna) return - events_repository.register(/decl/observ/destroyed, A, src, /datum/fauna_generator/proc/on_fauna_death) - events_repository.register(/decl/observ/death, A, src, /datum/fauna_generator/proc/on_fauna_death) + events_repository.register(/decl/observ/destroyed, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death)) + events_repository.register(/decl/observ/death, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death)) LAZYADD(live_fauna, A) /datum/fauna_generator/proc/on_fauna_death(var/mob/living/A) @@ -111,8 +111,8 @@ /datum/fauna_generator/proc/unregister_fauna(var/mob/living/A) if(!(A in live_fauna)) return - events_repository.unregister(/decl/observ/destroyed, A, src, /datum/fauna_generator/proc/on_fauna_death) - events_repository.unregister(/decl/observ/death, A, src, /datum/fauna_generator/proc/on_fauna_death) + events_repository.unregister(/decl/observ/destroyed, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death)) + events_repository.unregister(/decl/observ/death, A, src, TYPE_PROC_REF(/datum/fauna_generator, on_fauna_death)) LAZYREMOVE(live_fauna, A) /datum/fauna_generator/proc/generate_fauna(var/datum/gas_mixture/atmosphere, var/list/breath_gases = list(), var/list/toxic_gases = list()) @@ -210,13 +210,13 @@ for(var/i = 1 to round(repopulate_megafauna_threshold - length(live_megafauna))) if(prob(90)) continue - var/turf/simulated/T = pick_area_turf(spawn_area, list(/proc/not_turf_contains_dense_objects)) + var/turf/T = pick_area_turf(spawn_area, list(/proc/not_turf_contains_dense_objects, /proc/turf_is_simulated)) try_spawn_megafauna(T) for(var/i = 1 to round(repopulate_fauna_threshold - length(live_fauna))) if(prob(90)) continue - var/turf/simulated/T = pick_area_turf(spawn_area, list(/proc/not_turf_contains_dense_objects)) + var/turf/T = pick_area_turf(spawn_area, list(/proc/not_turf_contains_dense_objects, /proc/turf_is_simulated)) try_spawn_fauna(T) time_last_repop = REALTIMEOFDAY diff --git a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm index 54765963c41..86fd9fb00fc 100644 --- a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm +++ b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm @@ -94,7 +94,7 @@ ///Spawns a randomly chosen big flora from our big flora seed list. /datum/planet_flora/proc/spawn_random_big_flora(var/turf/T) if(LAZYLEN(big_flora_types)) - . = new /obj/structure/flora/plant(T, null, null, pick(big_flora_types)) + . = new /obj/structure/flora/plant/large(T, null, null, pick(big_flora_types)) //////////////////////////////////////////////////////////////////////// diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/_planet_theme.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/_planet_theme.dm index 152ec2acc61..a15b1f47088 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/_planet_theme.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/_planet_theme.dm @@ -17,9 +17,9 @@ /datum/exoplanet_theme/proc/adapt_animal(var/datum/planetoid_data/E, var/mob/A) -/datum/exoplanet_theme/proc/modify_ruin_whitelist(var/whitelist_flags) +/datum/exoplanet_theme/proc/modify_template_whitelist(var/whitelist_flags) -/datum/exoplanet_theme/proc/modify_ruin_blacklist(var/blacklist_flags) +/datum/exoplanet_theme/proc/modify_template_blacklist(var/blacklist_flags) /datum/exoplanet_theme/proc/get_extra_fauna() diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/mountains.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/mountains.dm index fd71ef43c04..19a7aff61f0 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/mountains.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/mountains.dm @@ -16,6 +16,7 @@ cell_threshold = 6 target_turf_type = null floor_type = null + change_area = TRUE /datum/random_map/automata/cave_system/mountains/New(var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/used_area) var/datum/level_data/LD = SSmapping.levels_by_z[tz] diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/radiation_bombing.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/radiation_bombing.dm index 5351e6f23b2..aeadb09f32e 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/radiation_bombing.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/radiation_bombing.dm @@ -36,5 +36,5 @@ for(var/turf/exterior/crater in circlerangeturfs(crater_center, 3)) if(prob(10)) new/obj/item/remains/xeno/charred(crater) - crater.melt() + crater.handle_melting() crater.update_icon() diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/robotic_guardians.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/robotic_guardians.dm index 9afd458e5bd..3e8c60a5d1a 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/robotic_guardians.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/robotic_guardians.dm @@ -9,8 +9,8 @@ /mob/living/simple_animal/hostile/hivebot/mega ) -/datum/exoplanet_theme/robotic_guardians/modify_ruin_whitelist(whitelist_flags) - return whitelist_flags | RUIN_ALIEN +/datum/exoplanet_theme/robotic_guardians/modify_template_whitelist(whitelist_flags) + return whitelist_flags | TEMPLATE_TAG_ALIEN /datum/exoplanet_theme/robotic_guardians/get_extra_fauna() return guardian_types diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm index 2ec87d62a47..5f713862cd8 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm @@ -15,8 +15,8 @@ 'sound/ambience/ominous3.ogg' ) -/datum/exoplanet_theme/robotic_guardians/modify_ruin_whitelist(whitelist_flags) - return whitelist_flags | RUIN_ALIEN +/datum/exoplanet_theme/robotic_guardians/modify_template_whitelist(whitelist_flags) + return whitelist_flags | TEMPLATE_TAG_ALIEN /datum/exoplanet_theme/ruined_city/get_map_generators(/datum/planetoid_data/E) return list(/datum/random_map/city) @@ -25,7 +25,7 @@ var/datum/level_data/LD = SSmapping.levels_by_id[E.surface_level_id] var/area/A = LD.get_base_area_instance() if(istype(A, world.area)) - PRINT_STACK_TRACE("Got '[world.area]' area as area for the surface level '[LD]' of planetoid '[E]'.") //Don't modify the ambience of the space area.. + PRINT_STACK_TRACE("Got '[world.area]' area as area for the surface level '[LD]' of planetoid '[E]'.") //Don't modify the ambience of the space area. LAZYDISTINCTADD(A.ambience, spooky_ambience) /datum/exoplanet_theme/ruined_city/get_sensor_data() @@ -171,26 +171,27 @@ ..() for(var/x in 1 to limit_x - 1) for(var/y in 1 to limit_y - 1) - var/value = map[get_map_cell(x,y)] + var/value = map[TRANSLATE_COORD(x,y)] if(value != FLOOR_VALUE) continue var/list/neighbors = list() for(var/offset in list(list(0,1), list(0,-1), list(1,0), list(-1,0))) - var/char = map[get_map_cell(x + offset[1], y + offset[2])] + var/tmp_cell = TRANSLATE_COORD(x + offset[1], y+offset[2]) + var/char = LAZYACCESS(map, tmp_cell) if(char == FLOOR_VALUE || char == DOOR_VALUE) - neighbors.Add(get_map_cell(x + offset[1], y + offset[2])) + neighbors.Add(tmp_cell) if(length(neighbors) > 1) continue map[neighbors[1]] = DOOR_VALUE if(artifacts_to_spawn) - map[get_map_cell(x,y)] = ARTIFACT_VALUE + map[TRANSLATE_COORD(x,y)] = ARTIFACT_VALUE artifacts_to_spawn-- var/entrance_x = pick(rand(2,limit_x-1), 1, limit_x) var/entrance_y = pick(1, limit_y) if(entrance_x == 1 || entrance_x == limit_x) entrance_y = rand(2,limit_y-1) - map[get_map_cell(entrance_x,entrance_y)] = DOOR_VALUE + map[TRANSLATE_COORD(entrance_x,entrance_y)] = DOOR_VALUE /datum/random_map/maze/lab/get_appropriate_path(var/value) if(value == ARTIFACT_VALUE) diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm index 5ab3ecef148..6489b6b3598 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm @@ -38,7 +38,7 @@ // Planetoid Data //////////////////////////////////////////////////////////////////////////// -//#FIXME: Barren is kind of a wide encompassing planet type. There's a lot of extremes to take into accounts for a single type.. +//#FIXME: Barren is kind of a wide encompassing planet type. There's a lot of extremes to take into accounts for a single type... /datum/planetoid_data/random/barren habitability_class = null @@ -74,7 +74,7 @@ name = "barren exoplanet" planetoid_data_type = /datum/planetoid_data/random/barren overmap_marker_type = /obj/effect/overmap/visitable/sector/planetoid/exoplanet/barren - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER + template_tags_blacklist = TEMPLATE_TAG_HABITAT|TEMPLATE_TAG_WATER subtemplate_budget = 6 template_parent_type = /datum/map_template/planetoid/random/exoplanet level_data_type = /datum/level_data/planetoid/exoplanet/barren diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/chlorine.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/chlorine.dm index 6d4412dc972..a2532f10ccf 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/chlorine.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/chlorine.dm @@ -86,7 +86,7 @@ name = "chlorine exoplanet" planetoid_data_type = /datum/planetoid_data/random/chlorine overmap_marker_type = /obj/effect/overmap/visitable/sector/planetoid/exoplanet/chlorine - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER + template_tags_blacklist = TEMPLATE_TAG_HABITAT|TEMPLATE_TAG_WATER template_parent_type = /datum/map_template/planetoid/random/exoplanet level_data_type = /datum/level_data/planetoid/exoplanet/chlorine prefered_level_data_per_z = list( @@ -101,7 +101,7 @@ /datum/random_map/noise/exoplanet/chlorine descriptor = "chlorine exoplanet" land_type = /turf/exterior/chlorine_sand - water_type = /turf/exterior/water/chlorine + water_type = /turf/exterior/chlorine_sand/marsh water_level_min = 2 water_level_max = 3 fauna_prob = 2 diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm index 47201560a5e..5b736a13e3b 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/grass.dm @@ -134,8 +134,8 @@ /datum/random_map/noise/exoplanet/grass descriptor = "grass exoplanet" land_type = /turf/exterior/wildgrass - water_type = /turf/exterior/water - coast_type = /turf/exterior/mud/dark + water_type = /turf/exterior/mud/water + coast_type = /turf/exterior/mud water_level_min = 3 flora_prob = 10 grass_prob = 50 diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm index 9cebc03c518..871048d6c35 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/meat.dm @@ -90,7 +90,7 @@ name = "organic exoplanet" planetoid_data_type = /datum/planetoid_data/random/meat overmap_marker_type = /obj/effect/overmap/visitable/sector/planetoid/exoplanet/meat - ruin_tags_blacklist = RUIN_HABITAT|RUIN_HUMAN|RUIN_WATER + template_tags_blacklist = TEMPLATE_TAG_HABITAT|TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WATER template_parent_type = /datum/map_template/planetoid/random/exoplanet level_data_type = /datum/level_data/planetoid/exoplanet/meat prefered_level_data_per_z = null @@ -111,7 +111,7 @@ water_level_max = 3 water_level_min = 2 land_type = /turf/exterior/meat - water_type = /turf/exterior/water/stomach + water_type = /turf/exterior/meat/acid //////////////////////////////////////////////////////////////////////////// // Areas @@ -135,12 +135,12 @@ dirt_color = "#c40031" footstep_type = /decl/footsteps/mud -/turf/exterior/water/stomach +/turf/exterior/meat/get_diggable_resources() + return dug ? null : list(/obj/item/stack/material/ore/meat = list(3, 2)) + +/turf/exterior/meat/acid name = "juices" desc = "Half-digested chunks of vines are floating in the puddle of some liquid." gender = PLURAL - icon = 'icons/turf/exterior/water_still.dmi' reagent_type = /decl/material/liquid/acid/stomach - color = "#c7c27c" - base_color = "#c7c27c" - dirt_color = "#c40031" + height = -(FLUID_SHALLOW) diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/shrouded.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/shrouded.dm index 1a7fca53079..2d65af1baff 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/shrouded.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/shrouded.dm @@ -85,7 +85,7 @@ name = "shrouded exoplanet" planetoid_data_type = /datum/planetoid_data/random/shrouded overmap_marker_type = /obj/effect/overmap/visitable/sector/planetoid/exoplanet/shrouded - ruin_tags_blacklist = RUIN_HABITAT + template_tags_blacklist = TEMPLATE_TAG_HABITAT template_parent_type = /datum/map_template/planetoid/random/exoplanet level_data_type = /datum/level_data/planetoid/exoplanet/shrouded prefered_level_data_per_z = list( @@ -109,7 +109,7 @@ water_level_max = 3 water_level_min = 2 land_type = /turf/exterior/shrouded - water_type = /turf/exterior/water/tar + water_type = /turf/exterior/shrouded/tar /datum/random_map/noise/exoplanet/shrouded/get_additional_spawns(var/value, var/turf/T) ..() diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm index 352ea65fd3f..7b7245cb0dd 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm @@ -91,7 +91,7 @@ planetoid_data_type = /datum/planetoid_data/random/volcanic overmap_marker_type = /obj/effect/overmap/visitable/sector/planetoid/exoplanet/volcanic max_themes = 1 - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER + template_tags_blacklist = TEMPLATE_TAG_HABITAT|TEMPLATE_TAG_WATER template_parent_type = /datum/map_template/planetoid/random/exoplanet level_data_type = /datum/level_data/planetoid/exoplanet/volcanic prefered_level_data_per_z = list( @@ -119,23 +119,7 @@ flora_prob = 3 grass_prob = 0 large_flora_prob = 0 - -//Squashing most of 1 tile lava puddles -/datum/random_map/noise/exoplanet/volcanic/cleanup() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(noise2value(map[current_cell]) < water_level) - continue - var/frendos - for(var/dx in list(-1,0,1)) - for(var/dy in list(-1,0,1)) - var/tmp_cell = get_map_cell(x+dx,y+dy) - if(tmp_cell && tmp_cell != current_cell && noise2value(map[tmp_cell]) >= water_level) - frendos = 1 - break - if(!frendos) - map[current_cell] = 1 + smooth_single_tiles = TRUE //////////////////////////////////////////////////////////////////////////// // Areas diff --git a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm index d257df6e411..3652a5c8d4d 100644 --- a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm +++ b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm @@ -244,11 +244,11 @@ ///Registers to neccessary processors and begin running all processing needed by the planet /datum/planetoid_data/proc/begin_processing() if(day_duration) - SSdaycyle.add_linked_levels(get_linked_level_ids(), starts_at_night, day_duration) + SSdaycycle.add_linked_levels(get_linked_level_ids(), starts_at_night, day_duration) ///Stop running any processing needed by the planet, and unregister from processors. /datum/planetoid_data/proc/end_processing() - SSdaycyle.remove_linked_levels(topmost_level_id) + SSdaycycle.remove_linked_levels(topmost_level_id) //#TODO: Move this into some SS for planet processing stuff or something? /datum/planetoid_data/Process(wait, tick) @@ -379,7 +379,7 @@ /datum/planetoid_data/random/proc/generate_daycycle_data() starts_at_night = (surface_light_level > 0.1) - day_duration = rand(global.config.exoplanet_min_day_duration, global.config.exoplanet_max_day_duration) + day_duration = rand(get_config_value(/decl/config/num/exoplanet_min_day_duration), get_config_value(/decl/config/num/exoplanet_max_day_duration)) MINUTES ///If the planet doesn't have a name defined, a name will be randomly generated for it. (Named this way because a global proc generate_planet_name already exists) /datum/planetoid_data/random/proc/make_planet_name() @@ -484,11 +484,11 @@ //Adjust for species habitability if(habitability_class == HABITABILITY_OKAY || habitability_class == HABITABILITY_IDEAL) - var/decl/species/S = global.get_species_by_key(global.using_map.default_species) + var/decl/species/S = global.get_species_by_key(global.using_map.default_species) if(habitability_class == HABITABILITY_IDEAL) - . = clamp(., S.cold_discomfort_level + rand(1,5), S.heat_discomfort_level - rand(1,5)) //Clamp between comfortable levels since we're ideal + . = clamp(., S.default_bodytype.cold_discomfort_level + rand(1,5), S.default_bodytype.heat_discomfort_level - rand(1,5)) //Clamp between comfortable levels since we're ideal else - . = clamp(., S.cold_level_1 + 1, S.heat_level_1 - 1) //clamp between values species starts taking damages at + . = clamp(., S.default_bodytype.cold_level_1 + 1, S.default_bodytype.heat_level_1 - 1) //clamp between values species starts taking damages at ///Generates a valid surface pressure for the planet's atmosphere matching it's habitability class /datum/planetoid_data/random/proc/generate_surface_pressure() @@ -546,8 +546,8 @@ //Make sure temperature can't damage people on casual planets (Only when not forcing an atmosphere) var/decl/species/S = global.get_species_by_key(global.using_map.default_species) - var/lower_temp = max(S.cold_level_1, atmosphere_gen_temperature_min) - var/higher_temp = min(S.heat_level_1, atmosphere_gen_temperature_max) + var/lower_temp = max(S.default_bodytype.cold_level_1, atmosphere_gen_temperature_min) + var/higher_temp = min(S.default_bodytype.heat_level_1, atmosphere_gen_temperature_max) var/breathed_gas = S.breath_type var/breathed_min_pressure = S.breath_pressure @@ -582,7 +582,7 @@ if(((current_merged_flags & XGM_GAS_OXIDIZER) && (mat.gas_flags & XGM_GAS_FUEL)) || \ ((current_merged_flags & XGM_GAS_FUEL) && (mat.gas_flags & XGM_GAS_OXIDIZER))) continue - + // If we have an ignition point we're basically XGM_GAS_FUEL, kind of. TODO: Combine those somehow? // These don't actually burn but it's still weird to see vaporized skin gas in an oxygen-rich atmosphere, // so skip them. diff --git a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm index 49aa85ee8f0..aa5e3bd1242 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm @@ -4,7 +4,7 @@ abstract_type = /datum/map_template/planetoid/random/exoplanet template_parent_type = /datum/map_template/planetoid/random/exoplanet template_categories = list(MAP_TEMPLATE_CATEGORY_EXOPLANET) - ruin_category = MAP_TEMPLATE_CATEGORY_EXOPLANET_SITE + template_category = MAP_TEMPLATE_CATEGORY_EXOPLANET_SITE tallness = 1 level_data_type = /datum/level_data/planetoid/exoplanet prefered_level_data_per_z = list( diff --git a/code/modules/maps/template_types/random_exoplanet/random_map.dm b/code/modules/maps/template_types/random_exoplanet/random_map.dm index 2123227b8df..c3b8a9e729d 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_map.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_map.dm @@ -1,4 +1,5 @@ #define COAST_VALUE (cell_range + 1) +#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) ///Place down flora/fauna spawners, grass, water, and apply selected land type. /datum/random_map/noise/exoplanet @@ -137,7 +138,7 @@ return for(var/x in 1 to limit_x - 1) for(var/y in 1 to limit_y - 1) - var/mapcell = get_map_cell(x,y) + var/mapcell = TRANSLATE_COORD(x,y) if(noise2value(map[mapcell]) < water_level) var/neighbors = get_neighbors(x, y, TRUE) for(var/cell in neighbors) @@ -168,3 +169,5 @@ target_turf_type = /turf/exterior/rock/volcanic //Only let it apply to non-lava turfs floor_type = null wall_type = /turf/exterior/wall + +#undef TRANSLATE_COORD \ No newline at end of file diff --git a/code/modules/maps/template_types/random_exoplanet/random_planet.dm b/code/modules/maps/template_types/random_exoplanet/random_planet.dm index bd737e582dc..9fc56448312 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_planet.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_planet.dm @@ -43,13 +43,13 @@ ///List of theme types that can be picked by this planet when generating. var/list/possible_themes ///Bit flag of the only ruin tags that may be picked by this planet. - var/ruin_tags_whitelist + var/template_tags_whitelist ///Bit flag of the ruin tags that may never be picked for this planet. - var/ruin_tags_blacklist + var/template_tags_blacklist ///Maximume amount of subtemplates/ruins/sites that may be picked and spawned on the planet. var/subtemplate_budget = 4 ///Ruin sites map template category to use for creating ruins on this planet. - var/ruin_category = MAP_TEMPLATE_CATEGORY_PLANET_SITE + var/template_category = MAP_TEMPLATE_CATEGORY_PLANET_SITE /datum/map_template/planetoid/random/is_runtime_generated() return TRUE @@ -154,16 +154,20 @@ if(!gen_data) gen_data = create_planetoid_instance() + // Update our blacklist for habitability + if(gen_data.habitability_class >= HABITABILITY_BAD) + template_tags_blacklist |= TEMPLATE_TAG_HABITABLE + //Generate some of the background stuff for our new planet before_planet_gen(gen_data) //Prepare themes, and apply ruin overrides - var/new_ruin_whitelist = ruin_tags_whitelist - var/new_ruin_blacklist = ruin_tags_blacklist + var/new_template_whitelist = template_tags_whitelist + var/new_template_blacklist = template_tags_blacklist var/list/theme_map_generators for(var/datum/exoplanet_theme/T in gen_data.themes) - new_ruin_whitelist = T.modify_ruin_whitelist(new_ruin_whitelist) - new_ruin_blacklist = T.modify_ruin_blacklist(new_ruin_blacklist) + new_template_whitelist = T.modify_template_whitelist(new_template_whitelist) + new_template_blacklist = T.modify_template_blacklist(new_template_blacklist) T.before_map_generation(gen_data) var/list/gennies = T.get_map_generators() @@ -188,7 +192,7 @@ ///Create all needed z-levels, tell each of them to generate themselves new_level_data = generate_levels(gen_data, theme_map_generators) //Spawn the ruins and sites on the planet - generate_features(gen_data, new_level_data, new_ruin_whitelist, new_ruin_blacklist) + generate_features(gen_data, new_level_data, new_template_whitelist, new_template_blacklist) //Notify themes we finished gen. Since some themes may not change level gen, we run it for either random or mapped planets for(var/datum/exoplanet_theme/T in gen_data.themes) @@ -259,7 +263,7 @@ var/valid = 1 var/list/block_to_check = block(locate(T.x - landing_radius, T.y - landing_radius, T.z), locate(T.x + landing_radius, T.y + landing_radius, T.z)) for(var/turf/check in block_to_check) - if(!istype(get_area(check), gen_data.surface_area) || check.turf_flags & TURF_FLAG_NORUINS) + if(!istype(get_area(check), gen_data.surface_area) || check.turf_flags & TURF_FLAG_NO_POINTS_OF_INTEREST) valid = 0 break if(attempts >= 10) diff --git a/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm b/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm index 655368256ed..610bf887925 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_planet_level_data.dm @@ -6,6 +6,7 @@ loop_turf_type = /turf/exterior/mimic_edge/transition/loop transition_turf_type = /turf/exterior/mimic_edge/transition use_global_exterior_ambience = FALSE + forbid_strata = null ///The planetoid_data datum owning this level. At definition can be set to the planetoid_id of the planetoid to link up with on creation. ///Ideally this will eventually be the main reference for the z-level to the planet level contents are located on. So we don't need to link every single turfs to it. @@ -102,74 +103,3 @@ if(!istype(A, world.area)) global.using_map.area_purity_test_exempt_areas |= A.type //Make sure we add any of those, so unit tests calm down when we rename A.SetName("[location_name]") - -///Try to spawn the given amount of ruins onto our level. Returns the template types that were spawned -/datum/level_data/planetoid/proc/seed_ruins(var/budget = 0, var/list/potentialRuins) - if(!length(potentialRuins)) - log_world("Ruin loader was given no ruins to pick from.") - return list() - //#TODO: Fill in allowed area from a proc or something - var/list/areas_whitelist = list(base_area) - var/list/candidates_ruins = potentialRuins.Copy() - var/list/spawned_ruins = list() - - //Each iteration needs to either place a ruin or strictly decrease either the budget or ruins.len (or break). - while(length(candidates_ruins) && (budget > 0)) - var/datum/map_template/R = pick(candidates_ruins) - if((R.get_template_cost() <= budget) && !LAZYISIN(SSmapping.banned_ruin_names, R.name) && try_place_ruin(R, areas_whitelist)) - spawned_ruins += R - budget -= R.get_template_cost() - //Mark spawned no-duplicate ruins globally - if(!(R.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - LAZYDISTINCTADD(SSmapping.banned_ruin_names, R.name) - candidates_ruins -= R - - if(budget > 0) - log_world("Ruin loader had no ruins to pick from with [budget] left to spend.") - return spawned_ruins - -///Attempts several times to find turfs where a ruin can be placed. -/datum/level_data/planetoid/proc/try_place_ruin(var/datum/map_template/ruin, var/list/area_whitelist) - //#FIXME: Isn't trying to fit in a ruin by rolling randomly a bit inneficient? - // Try to place it - var/sanity = 20 - var/ruin_half_width = RUIN_MAP_EDGE_PAD + round(ruin.width/2) //Half the ruin size plus the map edge spacing, for testing from the centerpoint - var/ruin_half_height = RUIN_MAP_EDGE_PAD + round(ruin.height/2) - var/ruin_full_width = (2 * RUIN_MAP_EDGE_PAD) + ruin.width - var/ruin_full_height = (2 * RUIN_MAP_EDGE_PAD) + ruin.height - if((ruin_full_width > level_inner_width) || (ruin_full_height > level_inner_height)) // Too big and will never fit. - return //Return if it won't even fit on the entire level - - //Try to fit it in somehwere a few times, then give up if we can't - while(sanity > 0) - sanity-- - //Pick coordinates inside the level's border within which the ruin will fit. Including the extra ruin spacing from the level's borders. - var/cturf_x = rand(level_inner_min_x + ruin_half_width, level_inner_max_x - ruin_half_width) - var/cturf_y = rand(level_inner_min_y + ruin_half_height, level_inner_max_y - ruin_half_height) - var/turf/T = locate(cturf_x, cturf_y, level_z) - var/valid = TRUE - - //#TODO: There's definitely a way to cache what turfs use an area, to avoid doing this for every single ruins! - // Could also probably cache TURF_FLAG_NORUINS turfs globally. - var/list/affected_turfs = ruin.get_affected_turfs(T, TRUE) - for(var/turf/test_turf in affected_turfs) - var/area/A = get_area(test_turf) - if(!is_type_in_list(A, area_whitelist) || (test_turf.turf_flags & TURF_FLAG_NORUINS)) - valid = FALSE - break //Break out of the turf check loop, and grab a new set of coordinates - if(!valid) - continue - - log_world("Spawned ruin \"[ruin.name]\", center: ([T.x], [T.y], [T.z]), min: ([T.x - ruin_half_width], [T.y - ruin_half_height]), max: ([T.x + ruin_half_width], [T.y + ruin_half_height])") - load_ruin(T, ruin) - return ruin - -///Actually handles loading a ruin template at the given turf. -/datum/level_data/planetoid/proc/load_ruin(turf/central_turf, datum/map_template/template) - if(!template) - return FALSE - for(var/turf/T in template.get_affected_turfs(central_turf, TRUE)) - for(var/mob/living/simple_animal/monster in T) - qdel(monster) - template.load(central_turf, centered = TRUE) - return TRUE diff --git a/code/modules/maps/template_types/random_exoplanet/random_planet_subtemplates.dm b/code/modules/maps/template_types/random_exoplanet/random_planet_subtemplates.dm index 5102b8adb42..ec100a3847a 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_planet_subtemplates.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_planet_subtemplates.dm @@ -1,24 +1,6 @@ ///Picks all ruins and tries to spawn them on the levels that make up the planet. -/datum/map_template/planetoid/random/proc/generate_features(var/datum/planetoid_data/gen_data, var/list/created_level_data, var/whitelist = ruin_tags_whitelist, var/blacklist = ruin_tags_blacklist) - var/my_budget = gen_data._budget_override || subtemplate_budget - if(my_budget <= 0) - return - - var/list/possible_subtemplates = list() - var/list/ruins = SSmapping.get_templates_by_category(ruin_category) - for(var/ruin_name in ruins) - var/datum/map_template/ruin = ruins[ruin_name] - var/ruin_tags = ruin.get_ruin_tags() - if(whitelist && !(whitelist & ruin_tags)) - continue - if(blacklist & ruin_tags) - continue - possible_subtemplates += ruin - - if(!length(possible_subtemplates)) - return //If we don't have any ruins, don't bother - +/datum/map_template/planetoid/random/proc/generate_features(var/datum/planetoid_data/gen_data, var/list/created_level_data, var/whitelist = template_tags_whitelist, var/blacklist = template_tags_blacklist) //#TODO: Properly handle generating ruins and sites on the various levels of the planet. var/datum/level_data/planetoid/surface_level = SSmapping.levels_by_id[gen_data.surface_level_id] //#TODO: dimensions and area have to be handled on a per level_data basis!! - LAZYADD(gen_data.subtemplates, surface_level.seed_ruins(my_budget, possible_subtemplates)) + LAZYADD(gen_data.subtemplates, surface_level.spawn_subtemplates((gen_data._budget_override || subtemplate_budget), template_category, blacklist, whitelist)) diff --git a/code/modules/maps/template_types/ruins_exoplanet.dm b/code/modules/maps/template_types/ruins_exoplanet.dm index f5e79068984..a0a34f76975 100644 --- a/code/modules/maps/template_types/ruins_exoplanet.dm +++ b/code/modules/maps/template_types/ruins_exoplanet.dm @@ -2,7 +2,3 @@ prefix = "maps/random_ruins/exoplanet_ruins/" template_categories = list(MAP_TEMPLATE_CATEGORY_EXOPLANET_SITE) template_parent_type = /datum/map_template/ruin/exoplanet - var/list/ruin_tags - -/datum/map_template/ruin/exoplanet/get_ruin_tags() - return ruin_tags diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index da7ec8fbe50..767d51211e2 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -95,7 +95,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/shard_icon // Related to above. var/shard_can_repair = 1 // Can shards be turned into sheets with a welder? var/list/recipes // Holder for all recipes usable with a sheet of this material. - var/list/strut_recipes // Holder for all the recipes you can build with the struct stack type. var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding. // Icons @@ -110,7 +109,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/table_icon_base = "metal" var/table_icon_reinforced = "reinf_metal" - var/list/stack_origin_tech = "{'materials':1}" // Research level for stacks. + var/list/stack_origin_tech = @'{"materials":1}' // Research level for stacks. // Attributes /// How rare is this material in exoplanet xenoflora? @@ -166,6 +165,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/hardness = MAT_VALUE_HARD // Used for edge damage in weapons. var/reflectiveness = MAT_VALUE_DULL + var/ferrous = FALSE // Can be used as a striker for firemaking. var/weight = MAT_VALUE_NORMAL // Determines blunt damage/throwforce for weapons. // Noise when someone is faceplanted onto a table made of this material. @@ -248,7 +248,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/chilling_message = "crackles and freezes!" var/chilling_sound = 'sound/effects/bubbles.ogg' var/list/chilling_products - var/bypass_cooling_products_for_root_type + var/bypass_chilling_products_for_root_type var/heating_point var/heating_message = "begins to boil!" @@ -280,6 +280,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/sound_manipulate //Default sound something like a material stack made of this material does when picked up var/sound_dropped //Default sound something like a material stack made of this material does when hitting the ground or placed down + var/holographic // Set to true if this material is fake/visual only. + + /// Does high temperature baking change this material into something else? + var/bakes_into_material + var/bakes_into_at_temperature + // Placeholders for light tiles and rglass. /decl/material/proc/reinforce(var/mob/user, var/obj/item/stack/material/used_stack, var/obj/item/stack/material/target_stack, var/use_sheets = 1) if(!used_stack.can_use(use_sheets)) @@ -321,6 +327,32 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) solid_name ||= use_name gas_name ||= use_name adjective_name ||= use_name + + // Null/clear a bunch of physical vars as this material is fake. + if(holographic) + shard_type = SHARD_NONE + conductive = 0 + hidden_from_codex = TRUE + value = 0 + exoplanet_rarity_plant = MAT_RARITY_NOWHERE + exoplanet_rarity_gas = MAT_RARITY_NOWHERE + dissolves_into = null + dissolves_in = MAT_SOLVENT_IMMUNE + solvent_power = MAT_SOLVENT_NONE + heating_products = null + chilling_products = null + heating_point = null + chilling_point = null + solvent_melt_dose = 0 + solvent_max_damage = 0 + slipperiness = 0 + ignition_point = null + melting_point = null + boiling_point = null + accelerant_value = FUEL_VALUE_NONE + burn_product = null + vapor_products = null + if(!shard_icon) shard_icon = shard_type if(!burn_armor) @@ -332,16 +364,24 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) global.materials_by_gas_symbol[gas_symbol] = type generate_armor_values() - var/list/cocktails = decls_repository.get_decls_of_subtype(/decl/cocktail) - for(var/ctype in cocktails) - var/decl/cocktail/cocktail = cocktails[ctype] - if(type in cocktail.ratios) - cocktail_ingredient = TRUE - break + if(!holographic) + var/list/cocktails = decls_repository.get_decls_of_subtype(/decl/cocktail) + for(var/ctype in cocktails) + var/decl/cocktail/cocktail = cocktails[ctype] + if(type in cocktail.ratios) + cocktail_ingredient = TRUE + break #define FALSEWALL_STATE "fwall_open" /decl/material/validate() . = ..() + + if(!isnull(bakes_into_at_temperature)) + if(!isnull(melting_point) && melting_point <= bakes_into_at_temperature) + . += "baking point is set but melting point is lower or equal to it" + if(!isnull(boiling_point) && boiling_point <= bakes_into_at_temperature) + . += "baking point is set but boiling point is lower or equal to it" + if(accelerant_value > FUEL_VALUE_NONE && isnull(ignition_point)) . += "accelerant value larger than zero but null ignition point" if(!isnull(ignition_point) && accelerant_value <= FUEL_VALUE_NONE) @@ -368,6 +408,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(icon_base && !check_state_in_icon(FALSEWALL_STATE, icon_base)) . += "[type] - '[icon_base]' - missing false wall opening animation '[FALSEWALL_STATE]'" + if(dissolves_in == MAT_SOLVENT_IMMUNE && LAZYLEN(dissolves_into)) + . += "material is immune to solvents, but has dissolves_into products." + for(var/i = 0 to 7) if(icon_base) if(!check_state_in_icon("[i]", icon_base)) @@ -463,6 +506,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) else log_warning("Invalid phase '[phase]' passed to get_mols_from_units!") return units + // Used by walls when qdel()ing to avoid neighbor merging. /decl/material/placeholder name = "placeholder" @@ -470,6 +514,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) hidden_from_codex = TRUE exoplanet_rarity_plant = MAT_RARITY_NOWHERE exoplanet_rarity_gas = MAT_RARITY_NOWHERE + holographic = TRUE /// Generic material product (sheets, bricks, etc). Used ALL THE TIME. /// May return an instance list, a single instance, or nothing if there is no instance produced. @@ -568,7 +613,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(solvent_power >= MAT_SOLVENT_STRONG && O.solvent_can_melt(solvent_power) && (istype(O, /obj/item) || istype(O, /obj/effect/vine)) && (REAGENT_VOLUME(holder, type) > solvent_melt_dose)) O.visible_message(SPAN_DANGER("\The [O] dissolves!")) - O.melt() + O.handle_melting() holder?.remove_reagent(type, solvent_melt_dose) else if(defoliant && istype(O, /obj/effect/vine)) qdel(O) @@ -582,7 +627,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) O.germ_level -= min(REAGENT_VOLUME(holder, type)*20, O.germ_level) O.was_bloodied = null if(dirtiness <= DIRTINESS_CLEAN) - O.clean_blood() + O.clean() #define FLAMMABLE_LIQUID_DIVISOR 7 // This doesn't apply to skin contact - this is for, e.g. extinguishers and sprays. The difference is that reagent is not directly on the mob's skin - it might just be on their clothing. @@ -596,7 +641,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(REAGENT_VOLUME(holder, type) < turf_touch_threshold) return - if(istype(T, /turf/simulated)) + if(istype(T) && T.simulated) var/turf/simulated/wall/W = T if(defoliant) for(var/obj/effect/overlay/wallrot/E in W) @@ -645,11 +690,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) //adjust effective amounts - removed, dose, and max_dose - for mob size var/effective = removed - if(!(flags & IGNORE_MOB_SIZE) && metabolism_class != CHEM_TOUCH) + if(!(flags & IGNORE_MOB_SIZE)) effective *= (MOB_SIZE_MEDIUM/M.mob_size) + if(metabolism_class != CHEM_TOUCH) + var/dose = LAZYACCESS(M.chem_doses, type) + effective + LAZYSET(M.chem_doses, type, dose) - var/dose = LAZYACCESS(M.chem_doses, type) + effective - LAZYSET(M.chem_doses, type, dose) if(effective >= (metabolism * 0.1) || effective >= 0.1) // If there's too little chemical, don't affect the mob, just remove it switch(metabolism_class) if(CHEM_INJECT) @@ -696,7 +742,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(prob(10)) M.SelfMove(pick(global.cardinal)) if(prob(narcosis)) - M.emote(pick("twitch", "drool", "moan")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/visible/drool, /decl/emote/audible/moan)) if(euphoriant) SET_STATUS_MAX(M, STAT_DRUGGY, euphoriant) @@ -726,30 +772,30 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(dirtiness <= DIRTINESS_CLEAN) for(var/obj/item/thing in M.get_held_items()) - thing.clean_blood() + thing.clean() var/obj/item/mask = M.get_equipped_item(slot_wear_mask_str) if(mask) - mask.clean_blood() + mask.clean() if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/head = H.get_equipped_item(slot_head_str) if(head) - head.clean_blood() + head.clean() var/obj/item/suit = H.get_equipped_item(slot_wear_suit_str) if(suit) - suit.clean_blood() + suit.clean() else var/obj/item/uniform = H.get_equipped_item(slot_w_uniform_str) if(uniform) - uniform.clean_blood() + uniform.clean() var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) if(shoes) - shoes.clean_blood() + shoes.clean() else - H.clean_blood(1) + H.clean() return - M.clean_blood() + M.clean() if(solvent_power > MAT_SOLVENT_NONE && removed >= solvent_melt_dose && M.solvent_act(min(removed * solvent_power * ((removed < solvent_melt_dose) ? 0.1 : 0.2), solvent_max_damage), solvent_melt_dose, solvent_power)) holder.remove_reagent(type, REAGENT_VOLUME(holder, type)) diff --git a/code/modules/materials/_stack_recipe.dm b/code/modules/materials/_stack_recipe.dm deleted file mode 100644 index a40c1ff30fd..00000000000 --- a/code/modules/materials/_stack_recipe.dm +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Recipe datum - */ -/datum/stack_recipe - var/title = "ERROR" - var/result_type - var/req_amount // amount of material needed for this recipe - var/res_amount = 1 // amount of stuff that is produced in one batch (e.g. 4 for floor tiles) - var/max_res_amount = 1 - var/time = 0 - var/one_per_turf = 0 - var/on_floor = 0 - var/use_material - var/use_reinf_material - var/difficulty = 1 // higher difficulty requires higher skill level to make. - var/apply_material_name = 1 //Whether the recipe will prepend a material name to the title - 'steel clipboard' vs 'clipboard' - var/set_dir_on_spawn = TRUE - -/datum/stack_recipe/New(decl/material/material, var/reinforce_material) - if(material) - use_material = material.type - difficulty += material.construction_difficulty - if(reinforce_material) - use_reinf_material = reinforce_material - SSfabrication.init_crafting_recipe(src) - -#define CRAFTING_EXTRA_COST_FACTOR 1.2 -/datum/stack_recipe/proc/InitializeMaterials() - if(result_type && isnull(req_amount)) - req_amount = 0 - var/list/materials = atom_info_repository.get_matter_for(result_type, use_material, res_amount) - for(var/mat in materials) - req_amount += round(materials[mat]/res_amount) - req_amount = clamp(CEILING(((req_amount*CRAFTING_EXTRA_COST_FACTOR)/SHEET_MATERIAL_AMOUNT) * res_amount), 1, 50) - -#undef CRAFTING_EXTRA_COST_FACTOR - -/datum/stack_recipe/proc/display_name() - if(!use_material || !apply_material_name) - return title - var/decl/material/material = GET_DECL(use_material) - . = "[material.solid_name] [title]" - if(use_reinf_material) - material = GET_DECL(use_reinf_material) - . = "[material.solid_name]-reinforced [.]" - -/datum/stack_recipe/proc/spawn_result(mob/user, location, amount) - var/atom/O - if(use_material) - //TODO: standardize material argument passing in Initialize(). - if(ispath(result_type, /obj/item/stack)) // Amount is set manually in some overrides as well. - O = new result_type(location, amount, use_material, use_reinf_material) - else - O = new result_type(location, use_material, use_reinf_material) - else - O = new result_type(location) - if(user && set_dir_on_spawn) - O.set_dir(user?.dir) - - // Temp block pending material/matter rework - if(use_material && use_material != DEFAULT_FURNITURE_MATERIAL && istype(O, /obj)) - var/obj/struct = O - if(LAZYACCESS(struct.matter, DEFAULT_FURNITURE_MATERIAL) > 0) - struct.matter[use_material] = max(struct.matter[use_material], struct.matter[DEFAULT_FURNITURE_MATERIAL]) - struct.matter -= DEFAULT_FURNITURE_MATERIAL - // End temp block - - return O - -/datum/stack_recipe/proc/can_make(mob/user) - if (one_per_turf && (locate(result_type) in user.loc)) - to_chat(user, "There is another [display_name()] here!") - return FALSE - - var/turf/T = get_turf(user.loc) - if (on_floor && !T.is_floor()) - to_chat(user, "\The [display_name()] must be constructed on the floor!") - return FALSE - - return TRUE - -/* - * Recipe list datum - */ -/datum/stack_recipe_list - var/title = "ERROR" - var/list/recipes = null - -/datum/stack_recipe_list/New(title, recipes) - src.title = title - src.recipes = recipes \ No newline at end of file diff --git a/code/modules/materials/definitions/gasses/material_gas_mundane.dm b/code/modules/materials/definitions/gasses/material_gas_mundane.dm index a4bc989ec7c..a904f4fbf1f 100644 --- a/code/modules/materials/definitions/gasses/material_gas_mundane.dm +++ b/code/modules/materials/definitions/gasses/material_gas_mundane.dm @@ -143,7 +143,7 @@ SET_STATUS_MAX(M, STAT_DROWSY, 3) SET_STATUS_MAX(M, STAT_SLUR, 3) if(prob(20)) - M.emote(pick("giggle", "laugh")) + M.emote(pick(/decl/emote/audible/giggle, /decl/emote/audible/laugh)) M.add_chemical_effect(CE_PULSE, -1) /decl/material/gas/nitrogen @@ -325,7 +325,7 @@ lore_text = "A radioactive isotope of hydrogen. Useful as a fusion reactor fuel material." mechanics_text = "Tritium is useable as a fuel in some forms of portable generator. It can also be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It fuses hotter than deuterium but is correspondingly more unstable." color = "#777777" - stack_origin_tech = "{'materials':5}" + stack_origin_tech = @'{"materials":5}' value = 0.45 gas_symbol_html = "T" gas_symbol = "T" @@ -340,7 +340,7 @@ mechanics_text = "Deuterium can be converted into a fuel rod suitable for a R-UST fusion plant injector by using a fuel compressor. It is the most 'basic' fusion fuel." flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE color = "#999999" - stack_origin_tech = "{'materials':3}" + stack_origin_tech = @'{"materials":3}' gas_symbol_html = "D" gas_symbol = "D" value = 0.5 diff --git a/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm b/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm index 0f33519b30f..bbfa9096bfe 100644 --- a/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm +++ b/code/modules/materials/definitions/liquids/materials_liquid_solvents.dm @@ -7,10 +7,10 @@ metabolism = REM * 2 touch_met = 50 // It's acid! value = 1.2 - solvent_power = MAT_SOLVENT_STRONG + 2 + solvent_power = MAT_SOLVENT_VERY_STRONG solvent_melt_dose = 10 - boiling_point = 290 CELSIUS - melting_point = 10 CELSIUS + melting_point = 284 + boiling_point = 611 latent_heat = 612 molar_mass = 0.098 @@ -24,8 +24,8 @@ solvent_melt_dose = 8 solvent_max_damage = 30 value = 1.5 - boiling_point = 48 CELSIUS - melting_point = -30 CELSIUS + boiling_point = 382 + melting_point = 160 molar_mass = 0.036 /decl/material/liquid/acid/polyacid @@ -34,7 +34,7 @@ lore_text = "Polytrinic acid is a an extremely corrosive chemical substance." taste_description = "acid" color = "#8e18a9" - solvent_power = MAT_SOLVENT_STRONG + 7 + solvent_power = MAT_SOLVENT_STRONGEST solvent_melt_dose = 4 solvent_max_damage = 60 value = 1.8 @@ -62,7 +62,7 @@ value = 0.1 solvent_power = MAT_SOLVENT_MODERATE toxicity = 3 - boiling_point = 56 CELSIUS - melting_point = -95 CELSIUS + boiling_point = 330 + melting_point = 179 latent_heat = 525 molar_mass = 0.058 diff --git a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm index 6d17f049749..a6c7bd46e7c 100644 --- a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm +++ b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm @@ -88,6 +88,8 @@ lore_text = "A highly toxic chemical." taste_mult = 0.6 color = "#cf3600" + melting_point = 261 + boiling_point = 299 toxicity = 20 metabolism = REM * 2 toxicity_targets_organ = BP_HEART @@ -255,6 +257,15 @@ else if (prob(10)) to_chat(H, "You feel terribly ill!") +/decl/material/liquid/acrylamide + name = "acrylamide" + uid = "liquid_acrylamide" + lore_text = "A colourless substance formed when food is burned. Rumoured to cause cancer, but mostly just nasty to eat." + taste_description = "bitter char" + color = "#a39894" + toxicity = 2 + taste_mult = 2 + /decl/material/liquid/bromide name = "bromide" codex_name = "elemental bromide" @@ -271,6 +282,8 @@ uid = "liquid_mercury" lore_text = "A chemical element." taste_mult = 0 //mercury apparently is tasteless. IDK + melting_point = 234 + boiling_point = 629 color = "#484848" value = 0.5 narcosis = 5 diff --git a/code/modules/materials/definitions/liquids/materials_liquid_water.dm b/code/modules/materials/definitions/liquids/materials_liquid_water.dm index 74337d9613c..2369ed30c00 100644 --- a/code/modules/materials/definitions/liquids/materials_liquid_water.dm +++ b/code/modules/materials/definitions/liquids/materials_liquid_water.dm @@ -45,7 +45,7 @@ var/decl/special_role/godcult = GET_DECL(/decl/special_role/godcultist) if(M.mind && godcult.is_antagonist(M.mind)) if(REAGENT_VOLUME(holder, type) > 5) - M.adjustHalLoss(5) + M.adjustHalLoss(5, do_update_health = FALSE) M.adjustBruteLoss(1) if(prob(10)) //Only annoy them a /bit/ to_chat(M,"You feel your insides curdle and burn! \[Give Into Purity\]") @@ -76,14 +76,14 @@ var/volume = REAGENT_VOLUME(holder, type) if (environment && environment.temperature > min_temperature) // Abstracted as steam or something - var/removed_heat = clamp(0, volume * WATER_LATENT_HEAT, -environment.get_thermal_energy_change(min_temperature)) + var/removed_heat = clamp(volume * WATER_LATENT_HEAT, 0, -environment.get_thermal_energy_change(min_temperature)) environment.add_thermal_energy(-removed_heat) if (prob(5) && environment && environment.temperature > T100C) T.visible_message("The water sizzles as it lands on \the [T]!") var/list/data = REAGENT_DATA(holder, type) if(data && data["holy"]) - T.holy = TRUE + T.turf_flags |= TURF_FLAG_HOLY /decl/material/liquid/water/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder) ..() diff --git a/code/modules/materials/definitions/solids/_mat_solid.dm b/code/modules/materials/definitions/solids/_mat_solid.dm index a46066d6a54..bfba19b99a5 100644 --- a/code/modules/materials/definitions/solids/_mat_solid.dm +++ b/code/modules/materials/definitions/solids/_mat_solid.dm @@ -10,6 +10,7 @@ icon_reinf = 'icons/turf/walls/reinforced_stone.dmi' default_solid_form = /obj/item/stack/material/brick abstract_type = /decl/material/solid + bakes_into_material = null /decl/material/solid/Initialize() if(!liquid_name) diff --git a/code/modules/materials/definitions/solids/materials_solid_elements.dm b/code/modules/materials/definitions/solids/materials_solid_elements.dm index 1c199fb3f45..15f4da448d6 100644 --- a/code/modules/materials/definitions/solids/materials_solid_elements.dm +++ b/code/modules/materials/definitions/solids/materials_solid_elements.dm @@ -2,6 +2,8 @@ name = "boron" uid = "solid_boron" lore_text = "Boron is a chemical element with the symbol B and atomic number 5." + melting_point = 2349 + boiling_point = 4200 flags = MAT_FLAG_FUSION_FUEL | MAT_FLAG_FISSIBLE neutron_cross_section = 10 @@ -18,6 +20,8 @@ name = "lithium" uid = "solid_lithium" lore_text = "A chemical element, used as antidepressant." + melting_point = 453 + boiling_point = 1615 flags = MAT_FLAG_FUSION_FUEL taste_description = "metal" color = "#808080" @@ -28,6 +32,8 @@ name = "carbon" uid = "solid_carbon" lore_text = "A chemical element, the building block of life." + melting_point = 3800 + boiling_point = 4300 taste_description = "sour chalk" taste_mult = 1.5 color = "#1c1300" @@ -46,6 +52,8 @@ name = "phosphorus" uid = "solid_phosphorus" lore_text = "A chemical element, the backbone of biological energy carriers." + melting_point = 317 + boiling_point = 550 taste_description = "vinegar" color = "#832828" value = 0.5 @@ -61,6 +69,8 @@ name = "sodium" uid = "solid_sodium" lore_text = "A chemical element, readily reacts with water." + melting_point = 1687 + boiling_point = 3173 taste_description = "salty metal" color = "#808080" value = 0.5 @@ -69,6 +79,8 @@ name = "sulfur" uid = "solid_sulfur" lore_text = "A chemical element with a pungent smell." + melting_point = 388 + boiling_point = 717 taste_description = "old eggs" color = "#bf8c00" value = 0.5 @@ -77,6 +89,8 @@ name = "potassium" uid = "solid_potassium" lore_text = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." + melting_point = 336 + boiling_point = 1032 taste_description = "sweetness" //potassium is bitter in higher doses but sweet in lower ones. color = "#a0a0a0" value = 0.5 diff --git a/code/modules/materials/definitions/solids/materials_solid_exotic.dm b/code/modules/materials/definitions/solids/materials_solid_exotic.dm index 41d99bd9248..3415cc24846 100644 --- a/code/modules/materials/definitions/solids/materials_solid_exotic.dm +++ b/code/modules/materials/definitions/solids/materials_solid_exotic.dm @@ -4,7 +4,7 @@ lore_text = "When hydrogen is exposed to extremely high pressures and temperatures, such as at the core of gas giants like Jupiter, it can take on metallic properties and - more importantly - acts as a room temperature superconductor. Achieving solid metallic hydrogen at room temperature, though, has proven to be rather tricky." name = "metallic hydrogen" color = "#e6c5de" - stack_origin_tech = "{'materials':6,'powerstorage':6,'magnets':5}" + stack_origin_tech = @'{"materials":6,"powerstorage":6,"magnets":5}' heating_products = list( /decl/material/gas/hydrogen/tritium = 0.7, /decl/material/gas/hydrogen/deuterium = 0.3 @@ -38,7 +38,7 @@ lore_text = "Hypercrystalline supermatter is a subset of non-baryonic 'exotic' matter. It is found mostly in the heart of large stars, and features heavily in all kinds of fringe physics-defying technology." color = "#ffff00" radioactivity = 20 - stack_origin_tech = "{'wormholes':2,'materials':6,'exoticmatter':4}" + stack_origin_tech = @'{"wormholes":2,"materials":6,"exoticmatter":4}' luminescence = 3 value = 3 icon_base = 'icons/turf/walls/stone.dmi' diff --git a/code/modules/materials/definitions/solids/materials_solid_fission.dm b/code/modules/materials/definitions/solids/materials_solid_fission.dm index a4733fae3f7..f68c8c85673 100644 --- a/code/modules/materials/definitions/solids/materials_solid_fission.dm +++ b/code/modules/materials/definitions/solids/materials_solid_fission.dm @@ -41,6 +41,8 @@ table_icon_base = "stone" icon_reinf = 'icons/turf/walls/reinforced_stone.dmi' wall_flags = 0 //Since we're using an unpaintable icon_base and icon_reinf + melting_point = 910 + boiling_point = 4300 color = "#404c53" value = 0.5 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON @@ -65,6 +67,8 @@ table_icon_base = "stone" icon_reinf = 'icons/turf/walls/reinforced_stone.dmi' wall_flags = 0 //Since we're using an unpaintable icon_base and icon_reinf + melting_point = 912 + boiling_point = 3503 color = "#b5c5a2" value = 3 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON @@ -101,4 +105,4 @@ dissolves_into = list( /decl/material/solid/metal/radium = 0.5, /decl/material/solid/lithium = 0.5 - ) \ No newline at end of file + ) diff --git a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm index ca0fe922c53..b9c46732ad1 100644 --- a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm +++ b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm @@ -18,9 +18,12 @@ name = "diamond" uid = "solid_diamond" lore_text = "An extremely hard allotrope of carbon. Valued for its use in industrial tools." + melting_point = 4300 + boiling_point = null + ignition_point = null brute_armor = 10 burn_armor = 50 // Diamond walls are immune to fire, therefore it makes sense for them to be almost undamageable by burn damage type. - stack_origin_tech = "{'materials':6}" + stack_origin_tech = @'{"materials":6}' hardness = MAT_VALUE_VERY_HARD + 20 construction_difficulty = MAT_VALUE_VERY_HARD_DIY ore_name = "rough diamonds" @@ -35,6 +38,8 @@ ore_data_value = 2 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON exoplanet_rarity_gas = MAT_RARITY_NOWHERE + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null /decl/material/solid/gemstone/crystal name = "crystal" @@ -45,3 +50,5 @@ value = 2 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON exoplanet_rarity_gas = MAT_RARITY_NOWHERE + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null diff --git a/code/modules/materials/definitions/solids/materials_solid_glass.dm b/code/modules/materials/definitions/solids/materials_solid_glass.dm index cb926b6a58b..93eaea81256 100644 --- a/code/modules/materials/definitions/solids/materials_solid_glass.dm +++ b/code/modules/materials/definitions/solids/materials_solid_glass.dm @@ -12,7 +12,7 @@ hardness = MAT_VALUE_RIGID + 10 door_icon_base = "metal" reflectiveness = MAT_VALUE_SHINY - melting_point = 1873 + melting_point = 1674 boiling_point = null ignition_point = null weight = MAT_VALUE_VERY_LIGHT @@ -24,6 +24,8 @@ conductive = 0 wall_support_value = MAT_VALUE_LIGHT default_solid_form = /obj/item/stack/material/pane + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null /decl/material/solid/glass/proc/is_reinforced() return (integrity > 75) //todo @@ -32,7 +34,7 @@ return ..() && !is_reinforced() /decl/material/solid/glass/borosilicate - name = "borosilicate glass" + name = "heat-resistant glass" codex_name = null uid = "solid_borosilicate_glass" lore_text = "An extremely heat-resistant form of glass." @@ -42,9 +44,9 @@ integrity = 70 brute_armor = 2 burn_armor = 5 - melting_point = T0C + 4000 + melting_point = 4274 color = GLASS_COLOR_SILICATE - stack_origin_tech = "{'materials':4}" + stack_origin_tech = @'{"materials":4}' construction_difficulty = MAT_VALUE_HARD_DIY value = 1.8 @@ -58,7 +60,7 @@ ) color = COLOR_OFF_WHITE opacity = 0.6 - melting_point = 1400 + melting_point = 1674 hardness = MAT_VALUE_HARD weight = MAT_VALUE_LIGHT integrity = 120 @@ -69,11 +71,11 @@ door_icon_base = "plastic" hardness = MAT_VALUE_FLEXIBLE weight = MAT_VALUE_LIGHT - stack_origin_tech = "{'materials':3}" + stack_origin_tech = @'{"materials":3}' conductive = 0 construction_difficulty = MAT_VALUE_NORMAL_DIY reflectiveness = MAT_VALUE_MATTE wall_support_value = MAT_VALUE_LIGHT burn_product = /decl/material/gas/carbon_monoxide dooropen_noise = 'sound/effects/doorcreaky.ogg' - default_solid_form = /obj/item/stack/material/reinforced + default_solid_form = /obj/item/stack/material/sheet/reinforced diff --git a/code/modules/materials/definitions/solids/materials_solid_metal.dm b/code/modules/materials/definitions/solids/materials_solid_metal.dm index 6c07854946c..3af734f3f40 100644 --- a/code/modules/materials/definitions/solids/materials_solid_metal.dm +++ b/code/modules/materials/definitions/solids/materials_solid_metal.dm @@ -27,6 +27,8 @@ lore_text = "A silvery-white metallic chemical element in the actinide series, weakly radioactive. Commonly used as fuel in fission reactors." mechanics_text = "Uranium can be used as fuel in fission reactors." taste_description = "the inside of a reactor" + melting_point = 1407 + boiling_point = 4074 flags = MAT_FLAG_FISSIBLE radioactivity = 12 icon_base = 'icons/turf/walls/stone.dmi' @@ -35,7 +37,7 @@ icon_reinf = 'icons/turf/walls/reinforced_stone.dmi' color = "#007a00" weight = MAT_VALUE_VERY_HEAVY - stack_origin_tech = "{'materials':5}" + stack_origin_tech = @'{"materials":5}' reflectiveness = MAT_VALUE_MATTE value = 1.5 default_solid_form = /obj/item/stack/material/puck @@ -67,6 +69,8 @@ lore_text = "Radium is an alkaline earth metal. It is extremely radioactive." mechanics_text = "Radium can be used as a neutron source in fission reactors." taste_description = "the color blue, and regret" + melting_point = 1234 + boiling_point = 1414 color = "#c7c7c7" value = 0.5 radioactivity = 18 @@ -76,10 +80,12 @@ codex_name = "elemental gold" uid = "solid_gold" lore_text = "A heavy, soft, ductile metal. Once considered valuable enough to back entire currencies, now predominantly used in corrosion-resistant electronics." + melting_point = 1337 + boiling_point = 2974 color = COLOR_GOLD hardness = MAT_VALUE_FLEXIBLE + 5 integrity = 100 - stack_origin_tech = "{'materials':4}" + stack_origin_tech = @'{"materials":4}' ore_result_amount = 5 ore_name = "native gold" ore_spread_chance = 10 @@ -96,6 +102,8 @@ codex_name = "bronze alloy" uid = "solid_bronze" lore_text = "An alloy of copper and tin. Once used in weapons and laboring tools." + melting_point = 1184 + boiling_point = 2574 color = "#ccbc63" brute_armor = 3 hardness = MAT_VALUE_RIGID + 10 @@ -136,6 +144,8 @@ name = "brass" uid = "solid_brass" lore_text = "An alloy of copper and zinc. Renowned for its golden color." + melting_point = 1174 + boiling_point = 1374 color = "#dab900" reflectiveness = MAT_VALUE_VERY_SHINY value = 1.2 @@ -147,18 +157,22 @@ name = "copper" uid = "solid_copper" lore_text = "A metal used in some components and many alloys. Known for its color-shifting properties when oxidized." + melting_point = 1357 + boiling_point = 2774 color = COLOR_COPPER weight = MAT_VALUE_NORMAL hardness = MAT_VALUE_FLEXIBLE + 10 - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' /decl/material/solid/metal/silver name = "silver" uid = "solid_silver" lore_text = "A soft, white, lustrous transition metal. Has many and varied industrial uses in electronics, solar panels and mirrors." + melting_point = 1234 + boiling_point = 2444 color = "#d1e6e3" hardness = MAT_VALUE_FLEXIBLE + 10 - stack_origin_tech = "{'materials':3}" + stack_origin_tech = @'{"materials":3}' ore_result_amount = 5 ore_spread_chance = 10 ore_name = "native silver" @@ -175,6 +189,8 @@ codex_name = "carbon steel" uid = "solid_steel" lore_text = "A strong, flexible alloy of iron and carbon. Probably the single most fundamentally useful and ubiquitous substance in human space." + melting_point = 1734 + boiling_point = 2774 weight = MAT_VALUE_NORMAL wall_support_value = MAT_VALUE_VERY_HEAVY // Ideal construction material. hardness = MAT_VALUE_HARD @@ -188,51 +204,25 @@ hitsound = 'sound/weapons/smash.ogg' construction_difficulty = MAT_VALUE_NORMAL_DIY value = 1.1 + dissolves_in = MAT_SOLVENT_STRONGEST dissolves_into = list( /decl/material/solid/metal/iron = 0.98, /decl/material/solid/carbon = 0.02 ) default_solid_form = /obj/item/stack/material/sheet - -/decl/material/solid/metal/steel/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/furniture/closet(src) - . += new/datum/stack_recipe/furniture/tank_dispenser(src) - . += new/datum/stack_recipe/furniture/canister(src) - . += new/datum/stack_recipe/furniture/tank(src) - . += new/datum/stack_recipe/cannon(src) - . += new/datum/stack_recipe_list("tiling", create_recipe_list(/datum/stack_recipe/tile/metal)) - . += new/datum/stack_recipe/furniture/computerframe(src) - . += new/datum/stack_recipe/furniture/machine(src) - . += new/datum/stack_recipe_list("airlock assemblies", create_recipe_list(/datum/stack_recipe/furniture/door_assembly)) - . += new/datum/stack_recipe/grenade(src) - . += new/datum/stack_recipe/light(src) - . += new/datum/stack_recipe/light_small(src) - . += new/datum/stack_recipe/light_switch(src) - . += new/datum/stack_recipe/light_switch/windowtint(src) - . += new/datum/stack_recipe/apc(src) - . += new/datum/stack_recipe/air_alarm(src) - . += new/datum/stack_recipe/fire_alarm(src) + ferrous = TRUE /decl/material/solid/metal/steel/holographic name = "holographic steel" uid = "solid_holographic_steel" - shard_type = SHARD_NONE - conductive = 0 - hidden_from_codex = TRUE - value = 0 - exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE - -/decl/material/solid/metal/steel/holographic/get_recipes(reinf_mat) - return list() + holographic = TRUE /decl/material/solid/metal/stainlesssteel name = "stainless steel" uid = "solid_stainless_steel" lore_text = "A reflective alloy of steel and chromium. Used for its reflective and sturdy properties." + melting_point = 1784 + boiling_point = null wall_support_value = MAT_VALUE_HEAVY integrity = 175 burn_armor = 10 @@ -247,11 +237,16 @@ value = 1.3 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON exoplanet_rarity_gas = MAT_RARITY_NOWHERE + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null + ferrous = TRUE /decl/material/solid/metal/aluminium name = "aluminium" uid = "solid_aluminium" lore_text = "A low-density ductile metal with a silvery-white sheen." + melting_point = 932 + boiling_point = 2474 integrity = 125 weight = MAT_VALUE_LIGHT icon_base = 'icons/turf/walls/solid.dmi' @@ -261,25 +256,12 @@ color = "#cccdcc" hitsound = 'sound/weapons/smash.ogg' taste_description = "metal" - default_solid_form = /obj/item/stack/material/shiny - -/decl/material/solid/metal/aluminium/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/grenade(src) + default_solid_form = /obj/item/stack/material/sheet/shiny /decl/material/solid/metal/aluminium/holographic name = "holoaluminium" uid = "solid_holographic_aluminium" - shard_type = SHARD_NONE - conductive = 0 - hidden_from_codex = TRUE - exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE - -/decl/material/solid/metal/aluminium/holographic/get_recipes(reinf_mat) - return list() + holographic = TRUE /decl/material/solid/metal/plasteel name = "plasteel" @@ -297,21 +279,16 @@ brute_armor = 8 burn_armor = 10 hardness = MAT_VALUE_VERY_HARD - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' hitsound = 'sound/weapons/smash.ogg' value = 1.4 reflectiveness = MAT_VALUE_MATTE - default_solid_form = /obj/item/stack/material/reinforced + default_solid_form = /obj/item/stack/material/sheet/reinforced exoplanet_rarity_plant = MAT_RARITY_UNCOMMON exoplanet_rarity_gas = MAT_RARITY_NOWHERE - -/decl/material/solid/metal/plasteel/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/ai_core(src) - . += new/datum/stack_recipe/furniture/crate(src) - . += new/datum/stack_recipe/grip(src) + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null + ferrous = TRUE /decl/material/solid/metal/titanium name = "titanium" @@ -320,7 +297,8 @@ brute_armor = 10 burn_armor = 8 integrity = 200 - melting_point = 3000 + melting_point = 1944 + boiling_point = 3474 weight = MAT_VALUE_LIGHT icon_base = 'icons/turf/walls/metal.dmi' wall_flags = PAINT_PAINTABLE @@ -331,18 +309,12 @@ value = 1.5 explosion_resistance = 25 hardness = MAT_VALUE_VERY_HARD - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' hitsound = 'sound/weapons/smash.ogg' reflectiveness = MAT_VALUE_MATTE - default_solid_form = /obj/item/stack/material/reinforced - -/decl/material/solid/metal/titanium/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/ai_core(src) - . += new/datum/stack_recipe/furniture/crate(src) - . += new/datum/stack_recipe/grip(src) + default_solid_form = /obj/item/stack/material/sheet/reinforced + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null /decl/material/solid/metal/plasteel/ocp name = "osmium-carbide plasteel" @@ -357,7 +329,7 @@ color = "#9bc6f2" brute_armor = 4 burn_armor = 20 - stack_origin_tech = "{'materials':3}" + stack_origin_tech = @'{"materials":3}' construction_difficulty = MAT_VALUE_VERY_HARD_DIY value = 1.8 exoplanet_rarity_plant = MAT_RARITY_UNCOMMON @@ -367,8 +339,10 @@ name = "osmium" uid = "solid_osmium" lore_text = "A very rare, extremely durable and hard metal which is also the densest naturally occuring element." + melting_point = 3307 + boiling_point = 5285 color = "#9999ff" - stack_origin_tech = "{'materials':5}" + stack_origin_tech = @'{"materials":5}' construction_difficulty = MAT_VALUE_VERY_HARD_DIY exoplanet_rarity_plant = MAT_RARITY_UNCOMMON value = 1.3 @@ -377,10 +351,12 @@ name = "platinum" uid = "solid_platinum" lore_text = "A very dense, unreactive, precious metal. Has many industrial uses, particularly as a catalyst." + melting_point = 2041 + boiling_point = 4098 color = "#deddff" weight = MAT_VALUE_VERY_HEAVY wall_support_value = MAT_VALUE_VERY_HEAVY - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' ore_compresses_to = /decl/material/solid/metal/osmium ore_result_amount = 5 ore_spread_chance = 10 @@ -397,11 +373,14 @@ name = "iron" uid = "solid_iron" lore_text = "A ubiquitous, very common metal. The epitaph of stars and the primary ingredient in Earth's core." + melting_point = 1811 + boiling_point = 3134 color = "#5c5454" hitsound = 'sound/weapons/smash.ogg' construction_difficulty = MAT_VALUE_NORMAL_DIY reflectiveness = MAT_VALUE_MATTE taste_description = "metal" + ferrous = TRUE /decl/material/solid/metal/iron/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder) if(M.HasTrait(/decl/trait/metabolically_inert)) @@ -413,6 +392,8 @@ name = "tin" uid = "solid_tin" lore_text = "A soft metal that can be cut without much force. Used in many alloys." + melting_point = 505 + boiling_point = 2875 color = "#c5c5a8" hardness = MAT_VALUE_SOFT + 10 construction_difficulty = MAT_VALUE_EASY_DIY @@ -422,6 +403,8 @@ name = "lead" uid = "solid_lead" lore_text = "A very soft, heavy and poisonous metal. You probably shouldn't lick it." + melting_point = 600 + boiling_point = 2022 color = "#3f3f4d" hardness = MAT_VALUE_SOFT construction_difficulty = MAT_VALUE_NORMAL_DIY @@ -433,6 +416,8 @@ name = "zinc" uid = "solid_zinc" lore_text = "A dull-looking metal with some use in alloying." + melting_point = 692 + boiling_point = 1180 color = "#92aae4" construction_difficulty = MAT_VALUE_NORMAL_DIY reflectiveness = MAT_VALUE_MATTE @@ -444,7 +429,8 @@ color = "#dadada" integrity = 200 burn_armor = 15 // Strong against laser weaponry, but not as good as OCP. - melting_point = 6000 + melting_point = 2180 + boiling_point = 2944 icon_base = 'icons/turf/walls/solid.dmi' icon_reinf = 'icons/turf/walls/reinforced.dmi' wall_flags = PAINT_PAINTABLE|PAINT_STRIPABLE|WALL_HAS_EDGES diff --git a/code/modules/materials/definitions/solids/materials_solid_mineral.dm b/code/modules/materials/definitions/solids/materials_solid_mineral.dm index f3bb2e13a19..908f4de8fef 100644 --- a/code/modules/materials/definitions/solids/materials_solid_mineral.dm +++ b/code/modules/materials/definitions/solids/materials_solid_mineral.dm @@ -2,26 +2,20 @@ name = "pitchblende" uid = "solid_pitchblende" color = "#917d1a" - heating_products = list( - /decl/material/solid/metal/uranium = 0.8, - /decl/material/solid/slag = 0.2 - ) - heating_point = GENERIC_SMELTING_HEAT_POINT - heating_sound = null - heating_message = null ore_result_amount = 5 ore_spread_chance = 10 ore_name = "pitchblende" ore_scan_icon = "mineral_uncommon" - stack_origin_tech = "{'materials':5}" + stack_origin_tech = @'{"materials":5}' xarch_source_mineral = /decl/material/solid/phosphorus ore_icon_overlay = "nugget" value = 0.8 sparse_material_weight = 8 rich_material_weight = 10 dissolves_into = list( - /decl/material/solid/metal/uranium = 0.5, - /decl/material/solid/metal/radium = 0.5 + /decl/material/solid/metal/uranium = 0.6, + /decl/material/solid/metal/radium = 0.3, + /decl/material/solid/slag = 0.1 ) ore_type_value = ORE_NUCLEAR ore_data_value = 3 @@ -38,7 +32,9 @@ ore_icon_overlay = "lump" ore_type_value = ORE_SURFACE ore_data_value = 1 - ignition_point = T0C+500 + melting_point = 4074 + boiling_point = 4474 + ignition_point = 774 accelerant_value = 0.8 burn_product = /decl/material/gas/carbon_monoxide value = 0.8 @@ -67,6 +63,8 @@ ore_spread_chance = 10 ore_scan_icon = "mineral_common" ore_icon_overlay = "lump" + melting_point = 1744 + boiling_point = 2504 color = "#effffe" reflectiveness = MAT_VALUE_SHINY sparse_material_weight = 3 @@ -215,7 +213,7 @@ uid = "solid_sand" color = "#e2dbb5" heating_products = list(/decl/material/solid/glass = 1) - heating_point = GENERIC_SMELTING_HEAT_POINT + heating_point = 2000 CELSIUS heating_sound = null heating_message = null ore_compresses_to = /decl/material/solid/stone/sandstone @@ -232,18 +230,28 @@ /decl/material/solid/clay name = "clay" + codex_name = "raw clay" uid = "solid_clay" - color = COLOR_OFF_WHITE + color = "#807f7a" ore_name = "clay" - ore_icon_overlay = "lump" - heating_products = list(/decl/material/solid/stone/ceramic = 1) - heating_point = GENERIC_SMELTING_HEAT_POINT - heating_sound = null - heating_message = null ore_compresses_to = null - ore_icon_overlay = "dust" + ore_icon_overlay = "lump" value = 0.8 default_solid_form = /obj/item/stack/material/lump + bakes_into_material = /decl/material/solid/stone/pottery + melting_point = null // Clay is already almost a liquid... + bakes_into_at_temperature = 1100 CELSIUS // roughly the temperature expected from a kiln + +/decl/material/solid/soil + name = "soil" + codex_name = "soil" + uid = "solid_soil" + color = COLOR_BEASTY_BROWN + value = 0 + default_solid_form = /obj/item/stack/material/lump + melting_point = null + hardness = 0 + integrity = 0 /decl/material/solid/hematite name = "hematite" @@ -266,6 +274,7 @@ rich_material_weight = 20 ore_type_value = ORE_SURFACE ore_data_value = 1 + ferrous = TRUE /decl/material/solid/rutile name = "rutile" @@ -386,7 +395,7 @@ value = 1.2 sparse_material_weight = 10 rich_material_weight = 5 - ignition_point = T0C+500 + ignition_point = 774 accelerant_value = 0.9 dirtiness = 15 dissolves_into = list( @@ -418,8 +427,6 @@ value = 0.9 sparse_material_weight = 20 rich_material_weight = 10 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/tin = 0.8, /decl/material/solid/metal/tungsten = 0.2 @@ -448,8 +455,6 @@ value = 0.9 sparse_material_weight = 15 rich_material_weight = 10 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/tin = 0.1, /decl/material/solid/metal/tungsten = 0.6, @@ -479,8 +484,6 @@ value = 1.1 sparse_material_weight = 10 rich_material_weight = 5 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/platinum = 0.7, /decl/material/solid/metal/iron = 0.1, @@ -510,8 +513,6 @@ value = 0.8 sparse_material_weight = 25 rich_material_weight = 15 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/zinc = 0.7, /decl/material/solid/metal/iron = 0.2, @@ -540,8 +541,6 @@ value = 0.8 sparse_material_weight = 20 rich_material_weight = 10 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/lead = 0.7, /decl/material/solid/metal/iron = 0.2, @@ -570,8 +569,6 @@ value = 0.8 sparse_material_weight = 5 rich_material_weight = 5 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/gold = 0.7, /decl/material/solid/metal/silver = 0.3 @@ -599,8 +596,6 @@ value = 0.9 sparse_material_weight = 5 rich_material_weight = 10 - ignition_point = T0C+1000 - accelerant_value = 0.8 dissolves_into = list( /decl/material/solid/metal/chromium = 0.6, /decl/material/solid/metal/lead = 0.4 diff --git a/code/modules/materials/definitions/solids/materials_solid_mundane.dm b/code/modules/materials/definitions/solids/materials_solid_mundane.dm index 419072501a4..ba5f63c75d3 100644 --- a/code/modules/materials/definitions/solids/materials_solid_mundane.dm +++ b/code/modules/materials/definitions/solids/materials_solid_mundane.dm @@ -9,12 +9,13 @@ reflectiveness = MAT_VALUE_DULL wall_support_value = MAT_VALUE_LIGHT dissolves_into = list( - /decl/material/solid/sand = 0.5, - /decl/material/solid/metal/iron = 0.2, + /decl/material/solid/sand = 0.3, + /decl/material/solid/clay = 0.2, + /decl/material/solid/metal/iron = 0.2, /decl/material/solid/metal/aluminium = 0.05, - /decl/material/solid/phosphorus = 0.05, - /decl/material/gas/sulfur_dioxide = 0.05, - /decl/material/gas/carbon_dioxide = 0.05 + /decl/material/solid/phosphorus = 0.05, + /decl/material/gas/sulfur_dioxide = 0.05, + /decl/material/gas/carbon_dioxide = 0.05 ) value = 0.1 default_solid_form = /obj/item/stack/material/lump @@ -24,10 +25,11 @@ // Slag can be reclaimed into more useful forms by grinding it up and mixing it with strong acid. dissolves_in = MAT_SOLVENT_STRONG dissolves_into = list( - /decl/material/solid/sand = 0.7, - /decl/material/solid/metal/iron = 0.1, + /decl/material/solid/sand = 0.5, + /decl/material/solid/clay = 0.2, + /decl/material/solid/metal/iron = 0.1, /decl/material/solid/metal/aluminium = 0.05, - /decl/material/solid/phosphorus = 0.05, - /decl/material/gas/sulfur_dioxide = 0.05, - /decl/material/gas/carbon_dioxide = 0.05 + /decl/material/solid/phosphorus = 0.05, + /decl/material/gas/sulfur_dioxide = 0.05, + /decl/material/gas/carbon_dioxide = 0.05 ) diff --git a/code/modules/materials/definitions/solids/materials_solid_organic.dm b/code/modules/materials/definitions/solids/materials_solid_organic.dm index 63b4e173963..99672c51538 100644 --- a/code/modules/materials/definitions/solids/materials_solid_organic.dm +++ b/code/modules/materials/definitions/solids/materials_solid_organic.dm @@ -3,6 +3,10 @@ ignition_point = T0C+500 // Based on loose ignition temperature of plastic accelerant_value = 0.1 burn_product = /decl/material/gas/carbon_monoxide +/* TODO: burn products for solids + bakes_into_at_temperature = T0C+500 + bakes_into_material = /decl/material/solid/carbon +*/ /decl/material/solid/organic/plastic name = "plastic" @@ -18,7 +22,7 @@ hardness = MAT_VALUE_FLEXIBLE + 10 weight = MAT_VALUE_LIGHT melting_point = T0C+371 //assuming heat resistant plastic - stack_origin_tech = "{'materials':3}" + stack_origin_tech = @'{"materials":3}' conductive = 0 construction_difficulty = MAT_VALUE_NORMAL_DIY reflectiveness = MAT_VALUE_SHINY @@ -30,28 +34,30 @@ sound_manipulate = 'sound/foley/paperpickup2.ogg' sound_dropped = 'sound/foley/paperpickup1.ogg' -/decl/material/solid/organic/plastic/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/furniture/crate/plastic(src) - . += new/datum/stack_recipe/bag(src) - . += new/datum/stack_recipe/ivbag(src) - . += create_recipe_list(/datum/stack_recipe/cartridge) - . += create_recipe_list(/datum/stack_recipe/tile/light) - . += new/datum/stack_recipe/hazard_cone(src) - . += new/datum/stack_recipe/furniture/flaps(src) +/decl/material/solid/organic/wax + name = "wax" + uid = "solid_wax" + taste_description = "waxy blandness" + lore_text = "A soft, easily melted substance produced by bees. Used to make candles." + accelerant_value = 0.6 + construction_difficulty = MAT_VALUE_NORMAL_DIY + reflectiveness = MAT_VALUE_SHINY + wall_support_value = MAT_VALUE_EXTREMELY_LIGHT + default_solid_form = /obj/item/stack/material/bar + sound_manipulate = 'sound/foley/paperpickup2.ogg' + sound_dropped = 'sound/foley/paperpickup1.ogg' + color = "#fffccc" + door_icon_base = "plastic" + hardness = MAT_VALUE_FLEXIBLE - 10 + weight = MAT_VALUE_LIGHT + melting_point = 363 + ignition_point = 473 + boiling_point = 643 /decl/material/solid/organic/plastic/holographic name = "holographic plastic" uid = "solid_holographic_plastic" - shard_type = SHARD_NONE - hidden_from_codex = TRUE - exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE - -/decl/material/solid/organic/plastic/holographic/get_recipes(reinf_mat) - return list() + holographic = TRUE /decl/material/solid/organic/cardboard name = "cardboard" @@ -69,7 +75,7 @@ weight = MAT_VALUE_EXTREMELY_LIGHT - 5 ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough melting_point = T0C+232 //temperature at which cardboard walls would be destroyed - stack_origin_tech = "{'materials':1}" + stack_origin_tech = @'{"materials":1}' door_icon_base = "wood" destruction_desc = "crumples" conductive = 0 @@ -82,21 +88,12 @@ sound_manipulate = 'sound/foley/paperpickup2.ogg' sound_dropped = 'sound/foley/paperpickup1.ogg' -/decl/material/solid/organic/cardboard/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += create_recipe_list(/datum/stack_recipe/box) - . += new/datum/stack_recipe/cardborg_suit(src) - . += new/datum/stack_recipe/cardborg_helmet(src) - . += new/datum/stack_recipe_list("folders", create_recipe_list(/datum/stack_recipe/folder)) - /decl/material/solid/organic/paper name = "paper" uid = "solid_paper" lore_text = "Low tech writing medium made from cellulose fibers. Also used in wrappings and packaging." color = "#cfcece" - stack_origin_tech = "{'materials':1}" + stack_origin_tech = @'{"materials":1}' door_icon_base = "wood" destruction_desc = "tears" icon_base = 'icons/turf/walls/solid.dmi' @@ -122,18 +119,12 @@ sound_manipulate = 'sound/foley/paperpickup2.ogg' sound_dropped = 'sound/foley/paperpickup1.ogg' -/decl/material/solid/organic/paper/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/paper_sheets(src) - /decl/material/solid/organic/cloth //todo name = "cotton" uid = "solid_cotton" use_name = "cotton" color = "#ffffff" - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' door_icon_base = "wood" ignition_point = T0C+232 melting_point = T0C+300 @@ -152,13 +143,6 @@ sound_manipulate = 'sound/foley/paperpickup2.ogg' sound_dropped = 'sound/foley/paperpickup1.ogg' -/decl/material/solid/organic/cloth/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/cloak(src) - . += new/datum/stack_recipe/banner(src) - /decl/material/solid/organic/cloth/yellow name = "yellow" uid = "solid_cotton_yellow" @@ -311,14 +295,6 @@ exoplanet_rarity_gas = MAT_RARITY_NOWHERE var/tans_to = /decl/material/solid/organic/leather -/decl/material/solid/organic/skin/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/cloak(src) - . += new/datum/stack_recipe/banner(src) - . += new/datum/stack_recipe/shoes(src) - /decl/material/solid/organic/skin/lizard name = "lizardskin" uid = "solid_lizardskin" @@ -441,12 +417,6 @@ sound_manipulate = 'sound/foley/stickspickup1.ogg' sound_dropped = 'sound/foley/sticksdrop1.ogg' -/decl/material/solid/organic/bone/generate_recipes(var/reinforce_material) - . = ..() - if(!reinforce_material && wall_support_value >= 10) - . += new/datum/stack_recipe/furniture/girder(src) - . += new/datum/stack_recipe/furniture/ladder(src) - // Stub for earrings. TODO: put it in clams /decl/material/solid/organic/bone/pearl name = "pearl" @@ -478,7 +448,7 @@ name = "leather" uid = "solid_leather" color = "#5c4831" - stack_origin_tech = "{'materials':2}" + stack_origin_tech = @'{"materials":2}' flags = MAT_FLAG_PADDING ignition_point = T0C+300 melting_point = T0C+300 @@ -496,15 +466,6 @@ sound_manipulate = 'sound/foley/paperpickup2.ogg' sound_dropped = 'sound/foley/paperpickup1.ogg' -/decl/material/solid/organic/leather/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/cloak(src) - . += new/datum/stack_recipe/banner(src) - . += new/datum/stack_recipe/shoes(src) - . += new/datum/stack_recipe/boots(src) - /decl/material/solid/organic/leather/synth name = "synthleather" uid = "solid_synthleather" diff --git a/code/modules/materials/definitions/solids/materials_solid_stone.dm b/code/modules/materials/definitions/solids/materials_solid_stone.dm index a7b7640e60c..39534c63a55 100644 --- a/code/modules/materials/definitions/solids/materials_solid_stone.dm +++ b/code/modules/materials/definitions/solids/materials_solid_stone.dm @@ -18,15 +18,7 @@ /decl/material/solid/silicon = 1 ) -/decl/material/solid/stone/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - if(wall_support_value >= 10) - . += new/datum/stack_recipe/furniture/girder(src) - . += new/datum/stack_recipe/furniture/planting_bed(src) - . += new/datum/stack_recipe/fountain(src) - +// Placeholder for firemaking. /decl/material/solid/stone/sandstone name = "sandstone" uid = "solid_sandstone" @@ -34,6 +26,13 @@ value = 1.5 melting_point = T0C + 600 +/decl/material/solid/stone/flint + name = "flint" + uid = "solid_flint" + lore_text = "A hard, smooth stone traditionally used for making fire." + value = 3 + color = "#615f5f" + /decl/material/solid/stone/granite name = "granite" uid = "solid_granite" @@ -51,16 +50,30 @@ /decl/material/solid/bauxite = 0.15, /decl/material/solid/slag = 0.10, ) + weight = MAT_VALUE_VERY_HEAVY + wall_support_value = MAT_VALUE_VERY_HEAVY + reflectiveness = MAT_VALUE_SHINY + construction_difficulty = MAT_VALUE_HARD_DIY + +/decl/material/solid/stone/pottery + name = "fired clay" + uid = "solid_pottery" + lore_text = "A hard but brittle substance produced by firing clay in a kiln." + color = "#cd8f75" + melting_point = 1750 // Arbitrary, hotter than the kiln currently reaches. /decl/material/solid/stone/ceramic - name = "ceramic" - uid = "solid_ceramic" - lore_text = "A hard substance produced by firing clay in a kiln." - color = COLOR_OFF_WHITE - hardness = MAT_VALUE_NORMAL - flags = MAT_FLAG_BRITTLE + name = "ceramic" + uid = "solid_ceramic" + lore_text = "A hard, heat-resistant substance produced by firing clay in a kiln." + color = COLOR_OFF_WHITE + melting_point = 6000 // Arbitrary, very heat-resistant. + hardness = MAT_VALUE_NORMAL + flags = MAT_FLAG_BRITTLE + dissolves_in = MAT_SOLVENT_IMMUNE + dissolves_into = null exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE + exoplanet_rarity_gas = MAT_RARITY_NOWHERE /decl/material/solid/stone/marble name = "marble" @@ -88,13 +101,22 @@ construction_difficulty = MAT_VALUE_HARD_DIY /decl/material/solid/stone/concrete - name = "concrete" - uid = "solid_concrete" - lore_text = "The most ubiquitous building material of old Earth, now in space. Consists of mineral aggregate bound with some sort of cementing solution." - color = COLOR_GRAY - value = 0.9 - exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE + name = "concrete" + uid = "solid_concrete" + codex_name = "poured concrete" + lore_text = "The most ubiquitous building material of old Earth, now in space. Consists of mineral aggregate bound with some sort of cementing solution." + color = COLOR_GRAY + value = 0.9 + hardness = MAT_VALUE_HARD + brute_armor = 10 + explosion_resistance = 15 + integrity = 220 + exoplanet_rarity_plant = MAT_RARITY_NOWHERE + exoplanet_rarity_gas = MAT_RARITY_NOWHERE + weight = MAT_VALUE_HEAVY + wall_support_value = MAT_VALUE_HEAVY + construction_difficulty = MAT_VALUE_VERY_HARD_DIY + melting_point = T0C + 1527 var/image/texture /decl/material/solid/stone/concrete/Initialize() @@ -105,6 +127,24 @@ /decl/material/solid/stone/concrete/get_wall_texture() return texture +///Concrete with steel rebars essentially. Has to be a material, since composite materials are kind of a hack. +/decl/material/solid/stone/concrete/reinforced + name = "reinforced concrete" + uid = "solid_reinforced_concrete" + lore_text = "A mix of concrete with a reinforcing material to increase it's strenght." + codex_name = null + color = COLOR_GRAY + value = 0.95 + hardness = MAT_VALUE_HARD + 8 + brute_armor = 20 + explosion_resistance = 35 //Reinforced concrete is resistant to explosion + integrity = 500 //Reinforced concrete is very strong + weight = MAT_VALUE_VERY_HEAVY + wall_support_value = MAT_VALUE_VERY_HEAVY + construction_difficulty = MAT_VALUE_VERY_HARD_DIY + melting_point = T0C + 1527 + default_solid_form = /obj/item/stack/material/slab + /decl/material/solid/stone/cult name = "disturbing stone" uid = "solid_stone_cult" @@ -126,19 +166,6 @@ name = "runic inscriptions" uid = "solid_runes_cult" -/decl/material/solid/stone/granite - name = "granite" - uid = "solid_granite" - lore_text = "A common and very hard igneous rock." - color = "#615f5f" - weight = MAT_VALUE_VERY_HEAVY - wall_support_value = MAT_VALUE_VERY_HEAVY - hardness = MAT_VALUE_VERY_HARD - reflectiveness = MAT_VALUE_SHINY - construction_difficulty = MAT_VALUE_HARD_DIY - brute_armor = 6 - integrity = 275 - /decl/material/solid/stone/slate name = "slate" uid = "solid_slate" diff --git a/code/modules/materials/definitions/solids/materials_solid_wood.dm b/code/modules/materials/definitions/solids/materials_solid_wood.dm index 66641ebddde..d488d7e8189 100644 --- a/code/modules/materials/definitions/solids/materials_solid_wood.dm +++ b/code/modules/materials/definitions/solids/materials_solid_wood.dm @@ -22,7 +22,7 @@ weight = MAT_VALUE_NORMAL melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood ignition_point = T0C+288 - stack_origin_tech = "{'materials':1,'biotech':1}" + stack_origin_tech = @'{"materials":1,"biotech":1}' dooropen_noise = 'sound/effects/doorcreaky.ogg' door_icon_base = "wood" destruction_desc = "splinters" @@ -41,76 +41,17 @@ sound_manipulate = 'sound/foley/woodpickup1.ogg' sound_dropped = 'sound/foley/wooddrop1.ogg' -/decl/material/solid/organic/wood/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - - if(wall_support_value >= 10) - . += new/datum/stack_recipe/furniture/girder(src) - . += new/datum/stack_recipe/furniture/ladder(src) - - . += new/datum/stack_recipe/sandals(src) - . += new/datum/stack_recipe/tile/wood(src) - . += create_recipe_list(/datum/stack_recipe/furniture/chair/wood) - . += new/datum/stack_recipe/furniture/sofa/m(src) - . += new/datum/stack_recipe/furniture/sofa/l(src) - . += new/datum/stack_recipe/furniture/sofa/r(src) - . += new/datum/stack_recipe/crossbowframe(src) - . += new/datum/stack_recipe/furniture/coffin/wooden(src) - . += new/datum/stack_recipe/beehive_assembly(src) - . += new/datum/stack_recipe/beehive_frame(src) - . += new/datum/stack_recipe/furniture/bookcase(src) - . += new/datum/stack_recipe/furniture/book_cart(src) - . += new/datum/stack_recipe/zipgunframe(src) - . += new/datum/stack_recipe/coilgun(src) - . += new/datum/stack_recipe/stick(src) - . += new/datum/stack_recipe/noticeboard(src) - . += new/datum/stack_recipe/prosthetic/left_arm(src) - . += new/datum/stack_recipe/prosthetic/right_arm(src) - . += new/datum/stack_recipe/prosthetic/left_leg(src) - . += new/datum/stack_recipe/prosthetic/right_leg(src) - . += new/datum/stack_recipe/prosthetic/left_hand(src) - . += new/datum/stack_recipe/prosthetic/right_hand(src) - . += new/datum/stack_recipe/prosthetic/left_foot(src) - . += new/datum/stack_recipe/prosthetic/right_foot(src) - . += new/datum/stack_recipe/campfire(src) - -/decl/material/solid/organic/wood/mahogany/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/mahogany(src) - -/decl/material/solid/organic/wood/maple/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/maple(src) - -/decl/material/solid/organic/wood/ebony/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/ebony(src) - -/decl/material/solid/organic/wood/walnut/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/walnut(src) +/decl/material/solid/organic/wood/fungal + name = "towercap" + uid = "solid_wood_fungal" + color = "#e6d8dd" + hardness = MAT_VALUE_FLEXIBLE + 1 /decl/material/solid/organic/wood/holographic + name = "holographic wood" uid = "solid_holographic_wood" color = WOOD_COLOR_CHOCOLATE //the very concept of wood should be brown - shard_type = SHARD_NONE - value = 0 - hidden_from_codex = TRUE - exoplanet_rarity_plant = MAT_RARITY_NOWHERE - exoplanet_rarity_gas = MAT_RARITY_NOWHERE - -/decl/material/solid/organic/wood/holographic/get_recipes(reinf_mat) - return list() + holographic = TRUE /decl/material/solid/organic/wood/mahogany name = "mahogany" diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm deleted file mode 100644 index 3313c1b266f..00000000000 --- a/code/modules/materials/material_recipes.dm +++ /dev/null @@ -1,99 +0,0 @@ -/decl/material/proc/get_recipes(var/reinf_mat) - var/key = reinf_mat || "base" - if(!LAZYACCESS(recipes,key)) - LAZYSET(recipes,key,generate_recipes(reinf_mat)) - return recipes[key] - -/decl/material/proc/get_strut_recipes(var/reinf_mat) - var/key = reinf_mat || "base" - . = LAZYACCESS(strut_recipes, key) - if(!islist(.)) - LAZYSET(strut_recipes, key, generate_strut_recipes(reinf_mat)) - . = LAZYACCESS(strut_recipes, key) - -/decl/material/proc/create_recipe_list(base_type) - . = list() - for(var/recipe_type in subtypesof(base_type)) - . += new recipe_type(src) - -/decl/material/proc/generate_recipes(var/reinforce_material) - - if(phase_at_temperature() != MAT_PHASE_SOLID) - return list() - - . = list() - if(opacity < 0.6) - . += new/datum/stack_recipe/furniture/borderwindow(src, reinforce_material) - . += new/datum/stack_recipe/furniture/fullwindow(src, reinforce_material) - if(integrity > 75 || reinforce_material) - . += new/datum/stack_recipe/furniture/windoor(src, reinforce_material) - - if(reinforce_material) //recipes below don't support composite materials - return - - if(hardness >= MAT_VALUE_FLEXIBLE + 10) - // If is_brittle() returns true, these are only good for a single strike. - . += new/datum/stack_recipe/improvised_armour(src) - . += new/datum/stack_recipe/armguards(src) - . += new/datum/stack_recipe/legguards(src) - . += new/datum/stack_recipe/gauntlets(src) - - if(integrity >= 50) - . += new/datum/stack_recipe/furniture/door(src) - . += new/datum/stack_recipe/furniture/barricade(src) - . += new/datum/stack_recipe/furniture/banner_frame(src) - . += new/datum/stack_recipe/furniture/stool(src) - . += new/datum/stack_recipe/furniture/bar_stool(src) - . += new/datum/stack_recipe/furniture/coatrack(src) - . += new/datum/stack_recipe/furniture/bed(src) - . += new/datum/stack_recipe/furniture/pew(src) - . += new/datum/stack_recipe/furniture/pew_left(src) - . += new/datum/stack_recipe/furniture/closet(src) - . += new/datum/stack_recipe/furniture/tank_dispenser(src) - . += new/datum/stack_recipe/furniture/coffin(src) - . += new/datum/stack_recipe/furniture/chair(src) //NOTE: the wood material has it's own special chair recipe - . += new/datum/stack_recipe/furniture/chair/padded(src) - . += new/datum/stack_recipe/furniture/chair/office/comfy(src) - . += new/datum/stack_recipe/furniture/chair/comfy(src) - . += new/datum/stack_recipe/furniture/chair/arm(src) - . += new/datum/stack_recipe/furniture/chair/roundedchair(src) - . += new/datum/stack_recipe/lock(src) - . += new/datum/stack_recipe/key(src) - . += new/datum/stack_recipe/rod(src) - - . += new/datum/stack_recipe/fork(src) - . += new/datum/stack_recipe/knife(src) - . += new/datum/stack_recipe/bell(src) - . += new/datum/stack_recipe/blade(src) - . += new/datum/stack_recipe/drill_head(src) - . += new/datum/stack_recipe/ashtray(src) - . += new/datum/stack_recipe/ring(src) - . += new/datum/stack_recipe/clipboard(src) - . += new/datum/stack_recipe/cross(src) - . += new/datum/stack_recipe/baseball_bat(src) - . += new/datum/stack_recipe/urn(src) - . += new/datum/stack_recipe/spoon(src) - - var/list/coin_recipes = list() - var/list/all_currencies = decls_repository.get_decls_of_subtype(/decl/currency) - for(var/cur in all_currencies) - var/decl/currency/currency = all_currencies[cur] - for(var/datum/denomination/denomination in currency.denominations) - if(length(denomination.faces)) - coin_recipes += new /datum/stack_recipe/coin(src, null, denomination) - if(length(coin_recipes)) - . += new/datum/stack_recipe_list("antique coins", coin_recipes) - -/decl/material/proc/generate_strut_recipes(var/reinforce_material) - . = list() - - if(wall_support_value >= 10) - . += new/datum/stack_recipe/furniture/girder(src) - . += new/datum/stack_recipe/furniture/ladder(src) - . += new/datum/stack_recipe/railing(src) - . += new/datum/stack_recipe/furniture/wall_frame(src) - . += new/datum/stack_recipe/furniture/table_frame(src) - . += new/datum/stack_recipe/furniture/rack(src) - . += new/datum/stack_recipe/butcher_hook(src) - . += new/datum/stack_recipe/furniture/bed(src) - . += new/datum/stack_recipe/furniture/machine(src) diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index f09230614d5..d42793a0e13 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -1,7 +1,7 @@ // Stacked resources. They use a material datum for a lot of inherited values. /obj/item/stack/material name = "material sheet" - force = 5.0 + force = 5 throwforce = 5 w_class = ITEM_SIZE_LARGE throw_speed = 3 @@ -45,15 +45,13 @@ if(material.sound_dropped) drop_sound = material.sound_dropped update_strings() - -/obj/item/stack/material/get_recipes() - return material.get_recipes(reinf_material && reinf_material.type) + update_icon() /obj/item/stack/material/get_codex_value() return (material && !material.hidden_from_codex) ? "[lowertext(material.codex_name)] (substance)" : ..() -/obj/item/stack/material/get_material() - return material +/obj/item/stack/material/get_reinforced_material() + return reinf_material /obj/item/stack/material/create_matter() // Set our reinf material in the matter list so that the base @@ -139,6 +137,11 @@ alpha = 100 + max(1, amount/25)*(material.opacity * 255) update_state_from_amount() +/obj/item/stack/material/ProcessAtomTemperature() + . = ..() + if(!QDELETED(src)) + update_strings() + /obj/item/stack/material/proc/update_state_from_amount() if(max_icon_state && amount == max_amount) icon_state = max_icon_state @@ -147,6 +150,13 @@ else icon_state = base_state +/obj/item/stack/material/get_string_for_amount(amount) + . = "[reinf_material ? "reinforced " : null][material.use_name]" + if(amount == 1) + . += " [singular_name]" + return indefinite_article ? "[indefinite_article] [.]" : ADD_ARTICLE(.) + return "[amount] [.] [plural_name]" + /obj/item/stack/material/ingot name = "ingots" singular_name = "ingot" @@ -155,6 +165,7 @@ plural_icon_state = "ingot-mult" max_icon_state = "ingot-max" stack_merge_type = /obj/item/stack/material/ingot + crafting_stack_type = /obj/item/stack/material/ingot /obj/item/stack/material/sheet name = "sheets" @@ -162,6 +173,7 @@ plural_icon_state = "sheet-mult" max_icon_state = "sheet-max" stack_merge_type = /obj/item/stack/material/sheet + crafting_stack_type = /obj/item/stack/material/sheet /obj/item/stack/material/panel name = "panels" @@ -171,6 +183,7 @@ singular_name = "panel" plural_name = "panels" stack_merge_type = /obj/item/stack/material/panel + crafting_stack_type = /obj/item/stack/material/panel /obj/item/stack/material/skin name = "skin" @@ -180,6 +193,7 @@ singular_name = "length" plural_name = "lengths" stack_merge_type = /obj/item/stack/material/skin + crafting_stack_type = /obj/item/stack/material/skin /obj/item/stack/material/skin/pelt name = "pelts" @@ -201,6 +215,7 @@ singular_name = "length" plural_name = "lengths" stack_merge_type = /obj/item/stack/material/bone + crafting_stack_type = /obj/item/stack/material/bone /obj/item/stack/material/brick name = "bricks" @@ -210,6 +225,7 @@ plural_icon_state = "brick-mult" max_icon_state = "brick-max" stack_merge_type = /obj/item/stack/material/brick + crafting_stack_type = /obj/item/stack/material/brick /obj/item/stack/material/bolt name = "bolts" @@ -217,6 +233,7 @@ singular_name = "bolt" plural_name = "bolts" stack_merge_type = /obj/item/stack/material/bolt + crafting_stack_type = /obj/item/stack/material/bolt /obj/item/stack/material/pane name = "panes" @@ -226,6 +243,7 @@ plural_icon_state = "sheet-clear-mult" max_icon_state = "sheet-clear-max" stack_merge_type = /obj/item/stack/material/pane + crafting_stack_type = /obj/item/stack/material/pane /obj/item/stack/material/pane/update_state_from_amount() if(reinf_material) @@ -245,6 +263,7 @@ plural_icon_state = "sheet-card-mult" max_icon_state = "sheet-card-max" stack_merge_type = /obj/item/stack/material/cardstock + crafting_stack_type = /obj/item/stack/material/cardstock /obj/item/stack/material/gemstone name = "gems" @@ -254,6 +273,7 @@ plural_icon_state = "diamond-mult" max_icon_state = "diamond-max" stack_merge_type = /obj/item/stack/material/gemstone + crafting_stack_type = /obj/item/stack/material/gemstone /obj/item/stack/material/puck name = "pucks" @@ -263,6 +283,7 @@ plural_icon_state = "puck-mult" max_icon_state = "puck-max" stack_merge_type = /obj/item/stack/material/puck + crafting_stack_type = /obj/item/stack/material/puck /obj/item/stack/material/aerogel name = "aerogel" @@ -271,8 +292,12 @@ icon_state = "puck" plural_icon_state = "puck-mult" max_icon_state = "puck-max" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE stack_merge_type = /obj/item/stack/material/aerogel + crafting_stack_type = /obj/item/stack/material/aerogel + +// Aerogel melting point is below 0 as it is a physical container for gas; hack around that here. +/obj/item/stack/material/aerogel/ProcessAtomTemperature() + return PROCESS_KILL /obj/item/stack/material/plank name = "planks" @@ -281,7 +306,33 @@ icon_state = "sheet-wood" plural_icon_state = "sheet-wood-mult" max_icon_state = "sheet-wood-max" + pickup_sound = 'sound/foley/wooden_drop.ogg' + drop_sound = 'sound/foley/wooden_drop.ogg' stack_merge_type = /obj/item/stack/material/plank + crafting_stack_type = /obj/item/stack/material/plank + +/obj/item/stack/material/log + name = "logs" + singular_name = "log" + plural_name = "logs" + icon_state = "log" + plural_icon_state = "log-mult" + max_icon_state = "log-max" + stack_merge_type = /obj/item/stack/material/log + crafting_stack_type = /obj/item/stack/material/log + var/plank_type = /obj/item/stack/material/plank + +/obj/item/stack/material/log/attackby(obj/item/W, mob/user) + if(plank_type && (IS_HATCHET(W) || IS_SAW(W))) + var/tool_type = W.get_tool_quality(TOOL_HATCHET) >= W.get_tool_quality(TOOL_SAW) ? TOOL_HATCHET : TOOL_SAW + if(W.do_tool_interaction(tool_type, user, src, 1 SECOND, set_cooldown = TRUE) && !QDELETED(src)) + var/obj/item/stack/planks = new plank_type(get_turf(src), rand(2,4), material?.type, reinf_material?.type) // todo: change plank amount based on carpentry skillcheck + playsound(loc, 'sound/foley/wooden_drop.ogg', 40, TRUE) + use(1) + if(planks.add_to_stacks(user, TRUE)) + user.put_in_hands(planks) + return TRUE + return ..() /obj/item/stack/material/segment name = "segments" @@ -289,19 +340,21 @@ plural_name = "segments" icon_state = "sheet-mythril" stack_merge_type = /obj/item/stack/material/segment + crafting_stack_type = /obj/item/stack/material/segment -/obj/item/stack/material/reinforced +/obj/item/stack/material/sheet/reinforced icon_state = "sheet-reinf" item_state = "sheet-metal" plural_icon_state = "sheet-reinf-mult" max_icon_state = "sheet-reinf-max" - stack_merge_type = /obj/item/stack/material/reinforced -/obj/item/stack/material/shiny + stack_merge_type = /obj/item/stack/material/sheet/reinforced + +/obj/item/stack/material/sheet/shiny icon_state = "sheet-sheen" item_state = "sheet-shiny" plural_icon_state = "sheet-sheen-mult" max_icon_state = "sheet-sheen-max" - stack_merge_type = /obj/item/stack/material/shiny + stack_merge_type = /obj/item/stack/material/sheet/shiny /obj/item/stack/material/cubes name = "cube" @@ -314,6 +367,7 @@ max_amount = 100 attack_verb = list("cubed") stack_merge_type = /obj/item/stack/material/cubes + crafting_stack_type = /obj/item/stack/material // cubes can be used for any crafting /obj/item/stack/material/lump name = "lumps" @@ -323,6 +377,7 @@ plural_icon_state = "lump-mult" max_icon_state = "lump-max" stack_merge_type = /obj/item/stack/material/lump + crafting_stack_type = /obj/item/stack/material/lump /obj/item/stack/material/slab name = "slabs" @@ -332,6 +387,7 @@ plural_icon_state = "puck-mult" max_icon_state = "puck-max" stack_merge_type = /obj/item/stack/material/slab + crafting_stack_type = /obj/item/stack/material/slab /obj/item/stack/material/strut name = "struts" @@ -341,6 +397,7 @@ plural_icon_state = "sheet-strut-mult" max_icon_state = "sheet-strut-max" stack_merge_type = /obj/item/stack/material/strut + crafting_stack_type = /obj/item/stack/material/strut /obj/item/stack/material/strut/cyborg name = "metal strut synthesizer" @@ -353,5 +410,12 @@ max_health = ITEM_HEALTH_NO_DAMAGE is_spawnable_type = FALSE -/obj/item/stack/material/strut/get_recipes() - return material.get_strut_recipes(reinf_material && reinf_material.type) +/obj/item/stack/material/bar + name = "bar" + singular_name = "bar" + plural_name = "bars" + icon_state = "bar" + plural_icon_state = "bar-mult" + max_icon_state = "bar-max" + stack_merge_type = /obj/item/stack/material/bar + crafting_stack_type = /obj/item/stack/material/bar diff --git a/code/modules/materials/material_sheets_mapping.dm b/code/modules/materials/material_sheets_mapping.dm index 6ecd474a92d..eed50f58be8 100644 --- a/code/modules/materials/material_sheets_mapping.dm +++ b/code/modules/materials/material_sheets_mapping.dm @@ -39,67 +39,74 @@ amount = 50; \ } -STACK_SUBTYPES(tritium, "tritium", gas/hydrogen/tritium, aerogel, null) -STACK_SUBTYPES(deuterium, "deuterium", gas/hydrogen/deuterium, aerogel, null) -STACK_SUBTYPES(iron, "iron", solid/metal/iron, ingot, null) -STACK_SUBTYPES(copper, "copper", solid/metal/copper, ingot, null) -STACK_SUBTYPES(sandstone, "sandstone", solid/stone/sandstone, brick, null) -STACK_SUBTYPES(marble, "marble", solid/stone/marble, brick, null) -STACK_SUBTYPES(graphite, "graphite", solid/graphite, brick, null) -STACK_SUBTYPES(diamond, "diamond", solid/gemstone/diamond, gemstone, null) -STACK_SUBTYPES(uranium, "uranium", solid/metal/uranium, puck, null) -STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, panel, null) -STACK_SUBTYPES(fiberglass, "fiberglass", solid/fiberglass, reinforced, null) -STACK_SUBTYPES(gold, "gold", solid/metal/gold, ingot, null) -STACK_SUBTYPES(silver, "silver", solid/metal/silver, ingot, null) -STACK_SUBTYPES(platinum, "platinum", solid/metal/platinum, ingot, null) -STACK_SUBTYPES(mhydrogen, "metallic hydrogen", solid/metallic_hydrogen, segment, null) -STACK_SUBTYPES(osmium, "osmium", solid/metal/osmium, ingot, null) -STACK_SUBTYPES(ocp, "osmium-carbide plasteel", solid/metal/plasteel/ocp, reinforced, null) -STACK_SUBTYPES(steel, "steel", solid/metal/steel, sheet, null) -STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, shiny, null) -STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, reinforced, null) -STACK_SUBTYPES(plasteel, "plasteel", solid/metal/plasteel, reinforced, null) -STACK_SUBTYPES(wood, "wood", solid/organic/wood, plank, null) -STACK_SUBTYPES(mahogany, "mahogany", solid/organic/wood/mahogany, plank, null) -STACK_SUBTYPES(maple, "maple", solid/organic/wood/maple, plank, null) -STACK_SUBTYPES(ebony, "ebony", solid/organic/wood/ebony, plank, null) -STACK_SUBTYPES(walnut, "walnut", solid/organic/wood/walnut, plank, null) -STACK_SUBTYPES(bamboo, "bamboo", solid/organic/wood/bamboo, plank, null) -STACK_SUBTYPES(yew, "yew", solid/organic/wood/yew, plank, null) -STACK_SUBTYPES(cardboard, "cardboard", solid/organic/cardboard, cardstock, null) -STACK_SUBTYPES(leather, "leather", solid/organic/leather, skin, null) -STACK_SUBTYPES(synthleather, "synthleather", solid/organic/leather/synth, skin, null) -STACK_SUBTYPES(glass, "glass", solid/glass, pane, null) -STACK_SUBTYPES(borosilicate, "borosilicate glass", solid/glass/borosilicate, pane, null) -STACK_SUBTYPES(aliumium, "aliumium", solid/metal/aliumium, cubes, null) -STACK_SUBTYPES(rglass, "reinforced glass", solid/glass, pane, /decl/material/solid/metal/steel) -STACK_SUBTYPES(rborosilicate, "reinforced borosilicate glass", solid/glass/borosilicate, pane, /decl/material/solid/metal/steel) -STACK_SUBTYPES(zinc, "zinc", solid/metal/zinc, ingot, null) -STACK_SUBTYPES(tin, "tin", solid/metal/tin, ingot, null) -STACK_SUBTYPES(lead, "lead", solid/metal/lead, ingot, null) -STACK_SUBTYPES(brass, "brass", solid/metal/brass, ingot, null) -STACK_SUBTYPES(bronze, "bronze", solid/metal/bronze, ingot, null) -STACK_SUBTYPES(chromium, "chromium", solid/metal/chromium, ingot, null) -STACK_SUBTYPES(blackbronze, "black bronze", solid/metal/blackbronze, ingot, null) -STACK_SUBTYPES(redgold, "red gold", solid/metal/redgold, ingot, null) -STACK_SUBTYPES(stainlesssteel, "stainless steel", solid/metal/stainlesssteel, ingot, null) -STACK_SUBTYPES(ice, "ice", liquid/water, cubes, null) +STACK_SUBTYPES(tritium, "tritium", gas/hydrogen/tritium, aerogel, null) +STACK_SUBTYPES(deuterium, "deuterium", gas/hydrogen/deuterium, aerogel, null) +STACK_SUBTYPES(iron, "iron", solid/metal/iron, ingot, null) +STACK_SUBTYPES(copper, "copper", solid/metal/copper, ingot, null) +STACK_SUBTYPES(sandstone, "sandstone", solid/stone/sandstone, brick, null) +STACK_SUBTYPES(marble, "marble", solid/stone/marble, brick, null) +STACK_SUBTYPES(graphite, "graphite", solid/graphite, brick, null) +STACK_SUBTYPES(diamond, "diamond", solid/gemstone/diamond, gemstone, null) +STACK_SUBTYPES(uranium, "uranium", solid/metal/uranium, puck, null) +STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, panel, null) +STACK_SUBTYPES(fiberglass, "fiberglass", solid/fiberglass, sheet/reinforced, null) +STACK_SUBTYPES(gold, "gold", solid/metal/gold, ingot, null) +STACK_SUBTYPES(silver, "silver", solid/metal/silver, ingot, null) +STACK_SUBTYPES(platinum, "platinum", solid/metal/platinum, ingot, null) +STACK_SUBTYPES(mhydrogen, "metallic hydrogen", solid/metallic_hydrogen, segment, null) +STACK_SUBTYPES(osmium, "osmium", solid/metal/osmium, ingot, null) +STACK_SUBTYPES(ocp, "osmium-carbide plasteel", solid/metal/plasteel/ocp, sheet/reinforced, null) +STACK_SUBTYPES(steel, "steel", solid/metal/steel, sheet, null) +STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, sheet/shiny, null) +STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, sheet/reinforced, null) +STACK_SUBTYPES(plasteel, "plasteel", solid/metal/plasteel, sheet/reinforced, null) +STACK_SUBTYPES(wood, "wood", solid/organic/wood, plank, null) +STACK_SUBTYPES(mahogany, "mahogany", solid/organic/wood/mahogany, plank, null) +STACK_SUBTYPES(maple, "maple", solid/organic/wood/maple, plank, null) +STACK_SUBTYPES(ebony, "ebony", solid/organic/wood/ebony, plank, null) +STACK_SUBTYPES(walnut, "walnut", solid/organic/wood/walnut, plank, null) +STACK_SUBTYPES(bamboo, "bamboo", solid/organic/wood/bamboo, plank, null) +STACK_SUBTYPES(yew, "yew", solid/organic/wood/yew, plank, null) +STACK_SUBTYPES(wood, "wood", solid/organic/wood, log, null) +STACK_SUBTYPES(mahogany, "mahogany", solid/organic/wood/mahogany, log, null) +STACK_SUBTYPES(maple, "maple", solid/organic/wood/maple, log, null) +STACK_SUBTYPES(ebony, "ebony", solid/organic/wood/ebony, log, null) +STACK_SUBTYPES(walnut, "walnut", solid/organic/wood/walnut, log, null) +STACK_SUBTYPES(bamboo, "bamboo", solid/organic/wood/bamboo, log, null) +STACK_SUBTYPES(yew, "yew", solid/organic/wood/yew, log, null) +STACK_SUBTYPES(cardboard, "cardboard", solid/organic/cardboard, cardstock, null) +STACK_SUBTYPES(leather, "leather", solid/organic/leather, skin, null) +STACK_SUBTYPES(synthleather, "synthleather", solid/organic/leather/synth, skin, null) +STACK_SUBTYPES(glass, "glass", solid/glass, pane, null) +STACK_SUBTYPES(borosilicate, "borosilicate glass", solid/glass/borosilicate, pane, null) +STACK_SUBTYPES(aliumium, "aliumium", solid/metal/aliumium, cubes, null) +STACK_SUBTYPES(rglass, "reinforced glass", solid/glass, pane, /decl/material/solid/metal/steel) +STACK_SUBTYPES(rborosilicate, "reinforced borosilicate glass", solid/glass/borosilicate, pane, /decl/material/solid/metal/steel) +STACK_SUBTYPES(zinc, "zinc", solid/metal/zinc, ingot, null) +STACK_SUBTYPES(tin, "tin", solid/metal/tin, ingot, null) +STACK_SUBTYPES(lead, "lead", solid/metal/lead, ingot, null) +STACK_SUBTYPES(brass, "brass", solid/metal/brass, ingot, null) +STACK_SUBTYPES(bronze, "bronze", solid/metal/bronze, ingot, null) +STACK_SUBTYPES(chromium, "chromium", solid/metal/chromium, ingot, null) +STACK_SUBTYPES(blackbronze, "black bronze", solid/metal/blackbronze, ingot, null) +STACK_SUBTYPES(redgold, "red gold", solid/metal/redgold, ingot, null) +STACK_SUBTYPES(stainlesssteel, "stainless steel", solid/metal/stainlesssteel, ingot, null) +STACK_SUBTYPES(ice, "ice", liquid/water, cubes, null) -STACK_SUBTYPES(cloth, "cloth", solid/organic/cloth, bolt, null) -STACK_SUBTYPES(yellow, "yellow cloth", solid/organic/cloth/yellow, bolt, null) -STACK_SUBTYPES(teal, "teal cloth", solid/organic/cloth/teal, bolt, null) -STACK_SUBTYPES(black, "black cloth", solid/organic/cloth/black, bolt, null) -STACK_SUBTYPES(green, "green cloth", solid/organic/cloth/green, bolt, null) -STACK_SUBTYPES(purple, "purple cloth", solid/organic/cloth/purple, bolt, null) -STACK_SUBTYPES(blue, "blue cloth", solid/organic/cloth/blue, bolt, null) -STACK_SUBTYPES(beige, "beige cloth", solid/organic/cloth/beige, bolt, null) -STACK_SUBTYPES(lime, "lime cloth", solid/organic/cloth/lime, bolt, null) -STACK_SUBTYPES(red, "red cloth", solid/organic/cloth/red, bolt, null) +STACK_SUBTYPES(cloth, "cloth", solid/organic/cloth, bolt, null) +STACK_SUBTYPES(yellow, "yellow cloth", solid/organic/cloth/yellow, bolt, null) +STACK_SUBTYPES(teal, "teal cloth", solid/organic/cloth/teal, bolt, null) +STACK_SUBTYPES(black, "black cloth", solid/organic/cloth/black, bolt, null) +STACK_SUBTYPES(green, "green cloth", solid/organic/cloth/green, bolt, null) +STACK_SUBTYPES(purple, "purple cloth", solid/organic/cloth/purple, bolt, null) +STACK_SUBTYPES(blue, "blue cloth", solid/organic/cloth/blue, bolt, null) +STACK_SUBTYPES(beige, "beige cloth", solid/organic/cloth/beige, bolt, null) +STACK_SUBTYPES(lime, "lime cloth", solid/organic/cloth/lime, bolt, null) +STACK_SUBTYPES(red, "red cloth", solid/organic/cloth/red, bolt, null) -STACK_SUBTYPES(steel, "steel", solid/metal/steel, strut, null) -STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, strut, null) -STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, strut, null) -STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, strut, null) +STACK_SUBTYPES(steel, "steel", solid/metal/steel, strut, null) +STACK_SUBTYPES(plastic, "plastic", solid/organic/plastic, strut, null) +STACK_SUBTYPES(aluminium, "aluminium", solid/metal/aluminium, strut, null) +STACK_SUBTYPES(titanium, "titanium", solid/metal/titanium, strut, null) #undef STACK_SUBTYPES \ No newline at end of file diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm index 8ee38f987b0..be5371d6ef7 100644 --- a/code/modules/materials/materials_ore.dm +++ b/code/modules/materials/materials_ore.dm @@ -18,11 +18,12 @@ material_alteration = MAT_FLAG_ALTERATION_COLOR //Name is handled in override randpixel = 6 is_spawnable_type = TRUE + crafting_stack_type = /obj/item/stack/material/ore ///Associative list of cache key to the generate icons for the ore piles. We pre-generate a pile of all possible ore icon states, and make them available var/static/list/cached_ore_icon_states ///A list of all the existing ore icon states in the ore file - var/static/list/ore_icon_states = icon_states('icons/obj/materials/ore.dmi') //list("shiny", "gems", "dust", "nugget", "lump") + var/static/list/ore_icon_states = icon_states('icons/obj/materials/ore.dmi') ///Returns a cached ore pile icon state /obj/item/stack/material/ore/proc/get_cached_ore_pile_overlay(var/state_name, var/stack_icon_index) @@ -90,9 +91,6 @@ SetName("[(material.ore_name ? material.ore_name : "[material.name] chunk")][(amount > 1? " pile" : "")]") desc = material.ore_desc ? material.ore_desc : "A lump of ore." -/obj/item/stack/material/ore/get_recipes() - return //Can't use recipes with ore - /obj/item/stack/material/ore/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/stack/material) && !is_same(W)) return FALSE //Don't reinforce @@ -119,8 +117,10 @@ material = /decl/material/solid/hematite /obj/item/stack/material/ore/coal material = /decl/material/solid/graphite -/obj/item/stack/material/ore/glass +/obj/item/stack/material/ore/sand material = /decl/material/solid/sand +/obj/item/stack/material/ore/clay + material = /decl/material/solid/clay /obj/item/stack/material/ore/silver material = /decl/material/solid/metal/silver /obj/item/stack/material/ore/gold @@ -157,6 +157,8 @@ material = /decl/material/solid/ice/hydrate/krypton /obj/item/stack/material/ore/xenon material = /decl/material/solid/ice/hydrate/xenon +/obj/item/stack/material/ore/meat + material = /decl/material/solid/organic/meat /client/proc/spawn_ore_pile() set name = "Spawn Ore Pile" diff --git a/code/modules/materials/recipes_furniture.dm b/code/modules/materials/recipes_furniture.dm deleted file mode 100644 index e5c406d7273..00000000000 --- a/code/modules/materials/recipes_furniture.dm +++ /dev/null @@ -1,297 +0,0 @@ - -/datum/stack_recipe/furniture - one_per_turf = 1 - on_floor = 1 - difficulty = 2 - time = 5 - -/datum/stack_recipe/furniture/chair - title = "chair" - result_type = /obj/structure/bed/chair - time = 10 - var/list/modifiers - -/datum/stack_recipe/furniture/chair/display_name() - return modifiers ? jointext(modifiers + ..(), " ") : ..() - -/datum/stack_recipe/furniture/chair/padded - result_type = /obj/structure/bed/chair/padded - -/datum/stack_recipe/furniture/chair/office - title = "office chair" - -/datum/stack_recipe/furniture/chair/office/display_name() - return modifiers ? jointext(modifiers + title, " ") : title // Bypass material -/datum/stack_recipe/furniture/chair/office/comfy - result_type = /obj/structure/bed/chair/office/comfy - title = "office comfy chair" -/datum/stack_recipe/furniture/chair/comfy - result_type = /obj/structure/bed/chair/comfy - title = "comfy chair" -/datum/stack_recipe/furniture/chair/arm - result_type = /obj/structure/bed/chair/armchair - title = "armchair" -/datum/stack_recipe/furniture/chair/roundedchair - result_type = /obj/structure/bed/chair/rounded - title = "rounded chair" - -/datum/stack_recipe/furniture/chair/wood -/datum/stack_recipe/furniture/chair/wood/normal - result_type = /obj/structure/bed/chair/wood -/datum/stack_recipe/furniture/chair/wood/fancy - result_type = /obj/structure/bed/chair/wood/wings - modifiers = list("fancy") - -/datum/stack_recipe/furniture/sofa/m - result_type = /obj/structure/bed/sofa/middle - title = "sofa, middle" - -/datum/stack_recipe/furniture/sofa/l - result_type = /obj/structure/bed/sofa/left - title = "sofa, left" - -/datum/stack_recipe/furniture/sofa/r - result_type = /obj/structure/bed/sofa/right - title = "sofa, right" - -/datum/stack_recipe/furniture/door - title = "door" - result_type = /obj/structure/door - time = 50 - -/datum/stack_recipe/furniture/coatrack - title = "coat rack" - result_type = /obj/structure/coatrack - -/datum/stack_recipe/furniture/barricade - title = "barricade" - result_type = /obj/structure/barricade - time = 50 - -/datum/stack_recipe/furniture/banner_frame - title = "banner frame" - result_type = /obj/structure/banner_frame - time = 25 - -/datum/stack_recipe/furniture/stool - title = "stool" - result_type = /obj/item/stool - -/datum/stack_recipe/furniture/bar_stool - title = "bar stool" - result_type = /obj/item/stool/bar - -/datum/stack_recipe/furniture/bed - title = "bed" - result_type = /obj/structure/bed - -/datum/stack_recipe/furniture/pew - title = "pew, right" - result_type = /obj/structure/bed/chair/pew - -/datum/stack_recipe/furniture/pew_left - title = "pew, left" - result_type = /obj/structure/bed/chair/pew/left - -/datum/stack_recipe/furniture/table_frame - title = "table frame" - result_type = /obj/structure/table/frame - time = 10 - -/datum/stack_recipe/furniture/rack - title = "rack" - result_type = /obj/structure/rack - -/datum/stack_recipe/furniture/closet - title = "closet" - result_type = /obj/structure/closet - time = 15 - -/datum/stack_recipe/furniture/tank_dispenser - title = "tank dispenser" - result_type = /obj/structure/tank_rack - time = 15 - -/datum/stack_recipe/furniture/canister - title = "canister" - result_type = /obj/machinery/portable_atmospherics/canister - req_amount = 20 - time = 10 - -/datum/stack_recipe/furniture/tank - title = "pressure tank" - result_type = /obj/item/pipe/tank - time = 20 - -/datum/stack_recipe/furniture/computerframe - title = "computer frame" - result_type = /obj/machinery/constructable_frame/computerframe - req_amount = 5 - time = 25 - -/datum/stack_recipe/furniture/computerframe/spawn_result(mob/user, location, amount) - return new result_type(location) - -/datum/stack_recipe/furniture/ladder - title = "ladder" - result_type = /obj/structure/ladder - time = 50 - one_per_turf = TRUE - on_floor = FALSE - -/datum/stack_recipe/furniture/girder - title = "wall support" - result_type = /obj/structure/girder - time = 50 - -/datum/stack_recipe/furniture/wall_frame - title = "low wall frame" - result_type = /obj/structure/wall_frame - time = 50 - -/datum/stack_recipe/furniture/machine - title = "machine frame" - result_type = /obj/machinery/constructable_frame/machine_frame - req_amount = 5 - time = 25 - -/datum/stack_recipe/furniture/machine/spawn_result(mob/user, location, amount) - return new result_type(location) - - -/datum/stack_recipe/furniture/door_assembly - time = 50 - -/datum/stack_recipe/furniture/door_assembly/standard - title = "standard airlock assembly" - result_type = /obj/structure/door_assembly - -/datum/stack_recipe/furniture/door_assembly/airtight - title = "airtight hatch assembly" - result_type = /obj/structure/door_assembly/door_assembly_hatch - -/datum/stack_recipe/furniture/door_assembly/highsec - title = "high security airlock assembly" - result_type = /obj/structure/door_assembly/door_assembly_highsecurity - -/datum/stack_recipe/furniture/door_assembly/ext - title = "exterior airlock assembly" - result_type = /obj/structure/door_assembly/door_assembly_ext - -/datum/stack_recipe/furniture/door_assembly/firedoor - title = "emergency shutter assembly" - result_type = /obj/structure/firedoor_assembly - -/datum/stack_recipe/furniture/door_assembly/firedoor/border - title = "unidirectional emergency shutter assembly" - result_type = /obj/structure/firedoor_assembly/border - one_per_turf = FALSE - time = 10 - -/datum/stack_recipe/furniture/door_assembly/double - title = "double airlock assembly" - result_type = /obj/structure/door_assembly/double - -/datum/stack_recipe/furniture/door_assembly/blast - title = "blast door assembly" - result_type = /obj/structure/door_assembly/blast - -/datum/stack_recipe/furniture/door_assembly/shutter - title = "shutter assembly" - result_type = /obj/structure/door_assembly/blast/shutter - -/datum/stack_recipe/furniture/door_assembly/morgue - title = "morgue door assembly" - result_type = /obj/structure/door_assembly/blast/morgue - -/datum/stack_recipe/furniture/crate - title = "crate" - result_type = /obj/structure/closet/crate - time = 50 - -/datum/stack_recipe/furniture/crate/plastic - result_type = /obj/structure/closet/crate/plastic - -/datum/stack_recipe/furniture/flaps - title = "flaps" - result_type = /obj/structure/plasticflaps - time = 50 - -/datum/stack_recipe/furniture/coffin - title = "coffin" - result_type = /obj/structure/closet/coffin - time = 15 - -/datum/stack_recipe/furniture/coffin/wooden - title = "coffin" - result_type = /obj/structure/closet/coffin/wooden - time = 15 - -/datum/stack_recipe/furniture/bookcase - title = "book shelf" - result_type = /obj/structure/bookcase - time = 15 - -/datum/stack_recipe/furniture/book_cart - title = "book cart" - result_type = /obj/structure/bookcase/cart - time = 15 - -/datum/stack_recipe/furniture/planting_bed - title = "planting bed" - result_type = /obj/machinery/portable_atmospherics/hydroponics/soil - req_amount = 3 - time = 10 - -/datum/stack_recipe/furniture/planting_bed/spawn_result(mob/user, location, amount) - return new result_type(location) - -/datum/stack_recipe/furniture/fullwindow - title = "full-tile window" - result_type = /obj/structure/window - time = 15 - one_per_turf = 0 - -/datum/stack_recipe/furniture/fullwindow/can_make(mob/user) - . = ..() - if(.) - for(var/obj/structure/window/check_window in user.loc) - if(check_window.is_fulltile()) - to_chat(user, SPAN_WARNING("There is already a full-tile window here!")) - return FALSE - -/datum/stack_recipe/furniture/fullwindow/spawn_result(mob/user, location, amount) - return new result_type(user?.loc, use_material, use_reinf_material, SOUTHWEST, TRUE) - -/datum/stack_recipe/furniture/borderwindow - title = "border window" - result_type = /obj/structure/window - time = 5 - one_per_turf = 0 - -/datum/stack_recipe/furniture/borderwindow/can_make(mob/user) - . = ..() - if(.) - for(var/obj/structure/window/check_window in user.loc) - if(check_window.dir == user.dir) - to_chat(user, "There is already a window facing that direction here!") - return FALSE - -/datum/stack_recipe/furniture/borderwindow/spawn_result(mob/user, location, amount) - return new result_type(user?.loc, use_material, use_reinf_material, user?.dir, TRUE) - -/datum/stack_recipe/furniture/windoor - title = "windoor assembly" - result_type = /obj/structure/windoor_assembly - time = 20 - one_per_turf = 1 - -/datum/stack_recipe/furniture/windoor/can_make(mob/user) - . = ..() - if(.) - if(locate(/obj/machinery/door/window) in user.loc) - to_chat(user, "There is already a windoor here!") - return FALSE - -/datum/stack_recipe/furniture/windoor/spawn_result(mob/user, location, amount) - return new result_type(user?.loc, use_material, use_reinf_material) diff --git a/code/modules/materials/recipes_items.dm b/code/modules/materials/recipes_items.dm deleted file mode 100644 index e41c9fcc995..00000000000 --- a/code/modules/materials/recipes_items.dm +++ /dev/null @@ -1,311 +0,0 @@ -//Recipes that produce items which aren't stacks or storage. -/datum/stack_recipe/baseball_bat - title = "baseball bat" - result_type = /obj/item/twohanded/baseballbat - time = 20 - difficulty = 2 - -/datum/stack_recipe/bell - title = "bell" - result_type = /obj/item/bell - time = 20 - -/datum/stack_recipe/ashtray - title = "ashtray" - result_type = /obj/item/ashtray - one_per_turf = 1 - -/datum/stack_recipe/improvised_armour - title = "improvised armour" - result_type = /obj/item/clothing/suit/armor/crafted - one_per_turf = 1 - -/datum/stack_recipe/coin - title = "coin" - result_type = /obj/item/coin - var/datum/denomination/denomination - -/datum/stack_recipe/coin/New(decl/material/material, reinforce_material, datum/denomination/_denomination) - denomination = _denomination - . = ..() - title = denomination.name - -/datum/stack_recipe/coin/spawn_result(mob/user, location, amount) - var/obj/item/coin/coin = ..() - if(denomination) - coin.denomination = denomination - coin.SetName(coin.denomination.name) - return coin - -/datum/stack_recipe/ring - title = "ring" - result_type = /obj/item/clothing/ring/material - -/datum/stack_recipe/lock - title = "lock" - result_type = /obj/item/lock_construct - time = 20 - -/datum/stack_recipe/fork - title = "fork" - result_type = /obj/item/kitchen/utensil/fork/plastic - -/datum/stack_recipe/knife - title = "table knife" - result_type = /obj/item/knife/table - difficulty = 2 - -/datum/stack_recipe/spoon - title = "spoon" - result_type = /obj/item/kitchen/utensil/spoon/plastic - -/datum/stack_recipe/blade - title = "knife" - result_type = /obj/item/butterflyblade - time = 20 - difficulty = 1 - -/datum/stack_recipe/grip - title = "knife grip" - result_type = /obj/item/butterflyhandle - time = 20 - on_floor = 1 - difficulty = 1 - -/datum/stack_recipe/key - title = "key" - result_type = /obj/item/key - time = 10 - -/datum/stack_recipe/cannon - title = "cannon frame" - result_type = /obj/item/cannonframe - time = 15 - difficulty = 3 - -/datum/stack_recipe/grenade - title = "grenade casing" - result_type = /obj/item/grenade/chem_grenade - difficulty = 3 - -/datum/stack_recipe/light - title = "light fixture frame" - result_type = /obj/item/frame/light - difficulty = 2 - -/datum/stack_recipe/light_small - title = "small light fixture frame" - result_type = /obj/item/frame/light/small - difficulty = 2 - -/datum/stack_recipe/light_switch - title = "light switch frame" - result_type = /obj/item/frame/button/light_switch - difficulty = 2 - -/datum/stack_recipe/light_switch/windowtint - title = "window tint switch frame" - result_type = /obj/item/frame/button/light_switch/windowtint - difficulty = 2 - -/datum/stack_recipe/apc - title = "APC frame" - result_type = /obj/item/frame/apc - difficulty = 2 - -/datum/stack_recipe/air_alarm - title = "air alarm frame" - result_type = /obj/item/frame/air_alarm - difficulty = 2 - -/datum/stack_recipe/fire_alarm - title = "fire alarm frame" - result_type = /obj/item/frame/fire_alarm - difficulty = 2 - -/datum/stack_recipe/hazard_cone - title = "hazard cone" - result_type = /obj/item/caution/cone - on_floor = 1 - -/datum/stack_recipe/ivbag - title = "IV bag" - result_type = /obj/item/chems/ivbag - difficulty = 2 - -/datum/stack_recipe/cartridge - title = "reagent dispenser cartridge" - var/modifier = "" - difficulty = 2 - -/datum/stack_recipe/cartridge/display_name() - return "[title] ([modifier])" - -/datum/stack_recipe/cartridge/small - result_type = /obj/item/chems/chem_disp_cartridge/small - modifier = "small" - -/datum/stack_recipe/cartridge/medium - result_type = /obj/item/chems/chem_disp_cartridge/medium - modifier = "medium" - -/datum/stack_recipe/cartridge/large - result_type = /obj/item/chems/chem_disp_cartridge - modifier = "large" - -/datum/stack_recipe/sandals - title = "sandals" - result_type = /obj/item/clothing/shoes/sandal - -/datum/stack_recipe/zipgunframe - title = "zip gun frame" - result_type = /obj/item/zipgunframe - difficulty = 3 - -/datum/stack_recipe/coilgun - title = "coilgun stock" - result_type = /obj/item/coilgun_assembly - difficulty = 3 - -/datum/stack_recipe/stick - title = "stick" - result_type = /obj/item/stick - difficulty = 0 - -/datum/stack_recipe/crossbowframe - title = "crossbow frame" - result_type = /obj/item/crossbowframe - time = 25 - difficulty = 3 - -/datum/stack_recipe/beehive_assembly - title = "beehive assembly" - result_type = /obj/item/beehive_assembly - -/datum/stack_recipe/beehive_frame - title = "beehive frame" - result_type = /obj/item/honey_frame - -/datum/stack_recipe/cardborg_suit - title = "cardborg suit" - result_type = /obj/item/clothing/suit/cardborg - difficulty = 0 - -/datum/stack_recipe/cardborg_helmet - title = "cardborg helmet" - result_type = /obj/item/clothing/head/cardborg - difficulty = 0 - -/datum/stack_recipe/candle - title = "candle" - result_type = /obj/item/flame/candle - difficulty = 0 - -/datum/stack_recipe/clipboard - title = "clipboard" - result_type = /obj/item/clipboard - -/datum/stack_recipe/urn - title = "urn" - result_type = /obj/item/urn - -/datum/stack_recipe/drill_head - title = "drill head" - result_type = /obj/item/drill_head - difficulty = 0 - -/datum/stack_recipe/cross - title = "cross" - result_type = /obj/item/cross - on_floor = 1 - -/datum/stack_recipe/prosthetic - difficulty = 0 - var/prosthetic_species = SPECIES_HUMAN - var/prosthetic_model = /decl/bodytype/prosthetic/wooden - -/datum/stack_recipe/prosthetic/spawn_result(mob/user, location, amount) - var/obj/item/organ/external/limb = ..() - if(limb) - limb.set_species(prosthetic_species) - limb.set_bodytype(prosthetic_model, override_material = use_material) - limb.status |= ORGAN_CUT_AWAY - return limb - -/datum/stack_recipe/prosthetic/left_arm - title = "left arm" - result_type = /obj/item/organ/external/arm - -/datum/stack_recipe/prosthetic/right_arm - title = "right arm" - result_type = /obj/item/organ/external/arm/right - -/datum/stack_recipe/prosthetic/left_leg - title = "left leg" - result_type = /obj/item/organ/external/leg - -/datum/stack_recipe/prosthetic/right_leg - title = "right leg" - result_type = /obj/item/organ/external/leg/right - -/datum/stack_recipe/prosthetic/left_hand - title = "left hand" - result_type = /obj/item/organ/external/hand - -/datum/stack_recipe/prosthetic/right_hand - title = "right hand" - result_type = /obj/item/organ/external/hand/right - -/datum/stack_recipe/prosthetic/left_foot - title = "left foot" - result_type = /obj/item/organ/external/foot - -/datum/stack_recipe/prosthetic/right_foot - title = "right foot" - result_type = /obj/item/organ/external/foot/right - -/datum/stack_recipe/cloak - title = "cloak" - result_type = /obj/item/clothing/accessory/cloak/hide - -/datum/stack_recipe/banner - title = "banner" - result_type = /obj/item/banner - -/datum/stack_recipe/shoes - title = "shoes" - result_type = /obj/item/clothing/shoes/craftable - -/datum/stack_recipe/boots - title = "boots" - result_type = /obj/item/clothing/shoes/craftable/boots - -/datum/stack_recipe/armguards - title = "arm guards" - result_type = /obj/item/clothing/accessory/armguards/craftable - -/datum/stack_recipe/legguards - title = "leg guards" - result_type = /obj/item/clothing/accessory/legguards/craftable - -/datum/stack_recipe/gauntlets - title = "gauntlets" - result_type = /obj/item/clothing/gloves/thick/craftable - -/datum/stack_recipe/paper_sheets - title = "sheet of paper" - result_type = /obj/item/paper - res_amount = 4 - max_res_amount = 30 - -/datum/stack_recipe/paper_sheets/spawn_result(user, location, amount) - var/obj/item/paper/P = ..() - if(amount > 1) - var/obj/item/paper_bundle/B = new(location) - B.merge(P) - for(var/i = 1 to (amount - 1)) - if(B.get_amount_papers() >= B.max_pages) - B = new(location) - B.merge(new /obj/item/paper(location)) - return B - return P \ No newline at end of file diff --git a/code/modules/materials/recipes_stacks.dm b/code/modules/materials/recipes_stacks.dm deleted file mode 100644 index e1212187802..00000000000 --- a/code/modules/materials/recipes_stacks.dm +++ /dev/null @@ -1,103 +0,0 @@ -/datum/stack_recipe/rod - title = "rod" - result_type = /obj/item/stack/material/rods - res_amount = 2 - max_res_amount = 60 - time = 5 - difficulty = 1 - -/datum/stack_recipe/rod/spawn_result(user, location, amount) - var/obj/item/stack/S = new result_type(location, amount, use_material) - if(user) - S.add_to_stacks(user, 1) - return S - -// Tiles -/datum/stack_recipe/tile - res_amount = 4 - max_res_amount = 20 - time = 5 - difficulty = 1 - apply_material_name = FALSE - -/datum/stack_recipe/tile/spawn_result(user, location, amount) - var/obj/item/stack/S = ..() - if(istype(S)) - S.amount = amount - if(user) - S.add_to_stacks(user, 1) - return S - -/datum/stack_recipe/tile/metal/floor - title = "regular floor tile" - result_type = /obj/item/stack/tile/floor - -/datum/stack_recipe/tile/metal/roof - title = "roofing tile" - result_type = /obj/item/stack/tile/roof - -/datum/stack_recipe/tile/metal/mono - title = "mono floor tile" - result_type = /obj/item/stack/tile/mono - -/datum/stack_recipe/tile/metal/mono_dark - title = "dark mono floor tile" - result_type = /obj/item/stack/tile/mono/dark - -/datum/stack_recipe/tile/metal/grid - title = "grid floor tile" - result_type = /obj/item/stack/tile/grid - -/datum/stack_recipe/tile/metal/ridged - title = "ridged floor tile" - result_type = /obj/item/stack/tile/ridge - -/datum/stack_recipe/tile/metal/tech_grey - title = "grey techfloor tile" - result_type = /obj/item/stack/tile/techgrey - -/datum/stack_recipe/tile/metal/tech_grid - title = "grid techfloor tile" - result_type = /obj/item/stack/tile/techgrid - -/datum/stack_recipe/tile/metal/tech_maint - title = "dark techfloor tile" - result_type = /obj/item/stack/tile/techmaint - -/datum/stack_recipe/tile/metal/dark - title = "dark floor tile" - result_type = /obj/item/stack/tile/floor_dark - -/datum/stack_recipe/tile/light/floor - title = "white floor tile" - result_type = /obj/item/stack/tile/floor_white - -/datum/stack_recipe/tile/light/freezer - title = "freezer floor tile" - result_type = /obj/item/stack/tile/floor_freezer - -/datum/stack_recipe/tile/wood - title = "wood floor tile" - result_type = /obj/item/stack/tile/wood - -/datum/stack_recipe/tile/mahogany - title = "mahogany floor tile" - result_type = /obj/item/stack/tile/mahogany - -/datum/stack_recipe/tile/maple - title = "maple floor tile" - result_type = /obj/item/stack/tile/maple - -/datum/stack_recipe/tile/ebony - title = "ebony floor tile" - difficulty = 3 - result_type = /obj/item/stack/tile/ebony - -/datum/stack_recipe/tile/walnut - title = "walnut floor tile" - result_type = /obj/item/stack/tile/walnut - - -/datum/stack_recipe/tile/metal/pool - title = "pool floor tile" - result_type = /obj/item/stack/tile/pool diff --git a/code/modules/materials/recipes_storage.dm b/code/modules/materials/recipes_storage.dm deleted file mode 100644 index 69d2961d12d..00000000000 --- a/code/modules/materials/recipes_storage.dm +++ /dev/null @@ -1,57 +0,0 @@ - -/datum/stack_recipe/box/box - title = "box" - result_type = /obj/item/storage/box - -/datum/stack_recipe/box/large - title = "large box" - result_type = /obj/item/storage/box/large - -/datum/stack_recipe/box/donut - title = "donut box" - result_type = /obj/item/storage/box/donut/empty - -/datum/stack_recipe/box/egg - title = "egg box" - result_type = /obj/item/storage/fancy/egg_box/empty - -/datum/stack_recipe/box/light_tubes - title = "light tubes box" - result_type = /obj/item/storage/box/lights/tubes/empty - -/datum/stack_recipe/box/light_bulbs - title = "light bulbs box" - result_type = /obj/item/storage/box/lights/bulbs/empty - -/datum/stack_recipe/box/mouse_traps - title = "mouse traps box" - result_type = /obj/item/storage/box/mousetraps/empty - -/datum/stack_recipe/box/pizza - title = "pizza box" - result_type = /obj/item/pizzabox - -/datum/stack_recipe/bag - title = "bag" - result_type = /obj/item/storage/bag/plasticbag - on_floor = 1 - -/datum/stack_recipe/folder - title = "folder" - result_type = /obj/item/folder - var/modifier = "grey" - -/datum/stack_recipe/folder/display_name() - return "[modifier] [title]" - -/datum/stack_recipe/folder/normal - -#define COLORED_FOLDER(color) /datum/stack_recipe/folder/##color{\ - result_type = /obj/item/folder/##color;\ - modifier = #color;\ - } -COLORED_FOLDER(blue) -COLORED_FOLDER(red) -COLORED_FOLDER(cyan) -COLORED_FOLDER(yellow) -#undef COLORED_FOLDER \ No newline at end of file diff --git a/code/modules/materials/recipes_structures.dm b/code/modules/materials/recipes_structures.dm deleted file mode 100644 index 64e546e8b6c..00000000000 --- a/code/modules/materials/recipes_structures.dm +++ /dev/null @@ -1,60 +0,0 @@ -//Furniture is in a separate file. -/datum/stack_recipe/butcher_hook - title = "meat hook" - result_type = /obj/structure/kitchenspike - time = 40 - one_per_turf = 1 - difficulty = 1 - -/datum/stack_recipe/ai_core - title = "AI core" - result_type = /obj/structure/aicore - time = 50 - one_per_turf = 1 - difficulty = 2 - -/datum/stack_recipe/railing - title = "railing" - result_type = /obj/structure/railing - time = 40 - on_floor = 1 - difficulty = 2 - -/datum/stack_recipe/noticeboard - title = "noticeboard" - result_type = /obj/structure/noticeboard - time = 50 - on_floor = 1 - difficulty = 2 - set_dir_on_spawn = FALSE - -/datum/stack_recipe/noticeboard/spawn_result(mob/user, location, amount) - var/obj/structure/noticeboard/board = ..() - if(istype(board) && user) - board.set_dir(global.reverse_dir[user.dir]) - return board - -/datum/stack_recipe/campfire - title = "campfire" - time = 4 SECONDS - on_floor = TRUE - one_per_turf = TRUE - apply_material_name = FALSE - result_type = /obj/structure/fire_source - -/datum/stack_recipe/campfire/spawn_result(mob/user, location, amount) - var/obj/structure/fire_source/product = ..() - for(var/mat in product.matter) - var/decl/material/material = GET_DECL(mat) - if(material.accelerant_value > FUEL_VALUE_NONE) - product.fuel += material.accelerant_value * round(product.matter[mat] / SHEET_MATERIAL_AMOUNT) - return product - -/datum/stack_recipe/fountain - title = "fountain" - result_type = /obj/structure/fountain/mundane - time = 10 SECONDS - one_per_turf = TRUE - on_floor = TRUE - difficulty = MAT_VALUE_VERY_HARD_DIY - apply_material_name = TRUE diff --git a/code/modules/mechs/_mech_setup.dm b/code/modules/mechs/_mech_setup.dm index b9a65259b69..4b3f2949bcc 100644 --- a/code/modules/mechs/_mech_setup.dm +++ b/code/modules/mechs/_mech_setup.dm @@ -7,40 +7,3 @@ var/global/list/mech_damage_overlay_cache = list() var/global/list/mech_image_cache = list() var/global/list/mech_icon_cache = list() var/global/list/mech_weapon_overlays = icon_states('icons/mecha/mech_weapon_overlays.dmi') - -#define HARDPOINT_BACK "back" -#define HARDPOINT_LEFT_HAND "left hand" -#define HARDPOINT_RIGHT_HAND "right hand" -#define HARDPOINT_LEFT_SHOULDER "left shoulder" -#define HARDPOINT_RIGHT_SHOULDER "right shoulder" -#define HARDPOINT_HEAD "head" - -// No software required: taser. light, radio. -#define MECH_SOFTWARE_UTILITY "utility equipment" // Plasma torch, clamp, drill. -#define MECH_SOFTWARE_MEDICAL "medical support systems" // Sleeper. -#define MECH_SOFTWARE_WEAPONS "standard weapon systems" // Ballistics and energy weapons. -#define MECH_SOFTWARE_ENGINEERING "advanced engineering systems" // RCD. - -// EMP damage points before various effects occur. -#define EMP_GUI_DISRUPT 5 // 1 ion rifle shot == 8. -#define EMP_MOVE_DISRUPT 10 // 2 shots. -#define EMP_ATTACK_DISRUPT 20 // 3 shots. - -//About components -#define MECH_COMPONENT_DAMAGE_UNDAMAGED 1 -#define MECH_COMPONENT_DAMAGE_DAMAGED 2 -#define MECH_COMPONENT_DAMAGE_DAMAGED_BAD 3 -#define MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL 4 - -//Construction -#define FRAME_REINFORCED 1 -#define FRAME_REINFORCED_SECURE 2 -#define FRAME_REINFORCED_WELDED 3 - -#define FRAME_WIRED 1 -#define FRAME_WIRED_ADJUSTED 2 - -//POWER! -#define MECH_POWER_OFF 0 -#define MECH_POWER_TRANSITION 1 -#define MECH_POWER_ON 2 diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm index 76866925803..8e15b986e06 100644 --- a/code/modules/mechs/components/_components.dm +++ b/code/modules/mechs/components/_components.dm @@ -21,6 +21,7 @@ var/damage_state = 1 var/list/has_hardpoints = list() var/decal + var/decal_blend = BLEND_MULTIPLY var/power_use = 0 /obj/item/mech_component/set_color(new_color) @@ -55,7 +56,7 @@ user.visible_message(SPAN_NOTICE("\The [user] installs \the [thing] in \the [src].")) return 1 -/obj/item/mech_component/proc/update_health() +/obj/item/mech_component/proc/update_component_health() total_damage = brute_damage + burn_damage if(total_damage > max_damage) total_damage = max_damage var/prev_state = damage_state @@ -77,13 +78,13 @@ /obj/item/mech_component/proc/take_brute_damage(var/amt) brute_damage = max(0, brute_damage + amt) - update_health() + update_component_health() if(total_damage == max_damage) take_component_damage(amt,0) /obj/item/mech_component/proc/take_burn_damage(var/amt) burn_damage = max(0, burn_damage + amt) - update_health() + update_component_health() if(total_damage == max_damage) take_component_damage(0,amt) @@ -98,6 +99,7 @@ update_components() /obj/item/mech_component/attackby(var/obj/item/thing, var/mob/user) + if(IS_SCREWDRIVER(thing)) if(contents.len) //Filter non movables @@ -106,27 +108,30 @@ if(!A.anchored) valid_contents += A if(!valid_contents.len) - return + return TRUE var/obj/item/removed = pick(valid_contents) if(!(removed in contents)) - return + return TRUE user.visible_message(SPAN_NOTICE("\The [user] removes \the [removed] from \the [src].")) removed.forceMove(user.loc) playsound(user.loc, 'sound/effects/pop.ogg', 50, 0) update_components() else to_chat(user, SPAN_WARNING("There is nothing to remove.")) - return + return TRUE + if(IS_WELDER(thing)) repair_brute_generic(thing, user) - return + return TRUE + if(IS_COIL(thing)) repair_burn_generic(thing, user) - return + return TRUE + if(istype(thing, /obj/item/robotanalyzer)) to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) return_diagnostics(user) - return + return TRUE return ..() diff --git a/code/modules/mechs/components/armour.dm b/code/modules/mechs/components/armour.dm index 79f3d8213db..b86d67295dc 100644 --- a/code/modules/mechs/components/armour.dm +++ b/code/modules/mechs/components/armour.dm @@ -12,7 +12,7 @@ ARMOR_BIO = ARMOR_BIO_SHIELDED, ARMOR_RAD = ARMOR_RAD_MINOR ) - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel /obj/item/robot_parts/robot_component/armour/exosuit/radproof @@ -27,7 +27,7 @@ ARMOR_BIO = ARMOR_BIO_SHIELDED, ARMOR_RAD = ARMOR_RAD_SHIELDED ) - origin_tech = "{'materials':3}" + origin_tech = @'{"materials":3}' material = /decl/material/solid/metal/steel /obj/item/robot_parts/robot_component/armour/exosuit/em @@ -42,7 +42,7 @@ ARMOR_BIO = ARMOR_BIO_SHIELDED, ARMOR_RAD = ARMOR_RAD_SMALL ) - origin_tech = "{'materials':3}" + origin_tech = @'{"materials":3}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT) @@ -57,7 +57,7 @@ ARMOR_BOMB = ARMOR_BOMB_RESISTANT, ARMOR_BIO = ARMOR_BIO_SHIELDED ) - origin_tech = "{'materials':5}" + origin_tech = @'{"materials":5}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT) diff --git a/code/modules/mechs/components/body.dm b/code/modules/mechs/components/body.dm index ad13fe6fc90..5f072a7392e 100644 --- a/code/modules/mechs/components/body.dm +++ b/code/modules/mechs/components/body.dm @@ -162,7 +162,7 @@ else return ..() -/obj/item/mech_component/chassis/receive_mouse_drop(atom/dropping, mob/user) +/obj/item/mech_component/chassis/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && istype(dropping, /obj/machinery/portable_atmospherics/canister)) var/obj/machinery/portable_atmospherics/canister/C = dropping @@ -180,9 +180,9 @@ update_components() return TRUE -/obj/item/mech_component/chassis/handle_mouse_drop(atom/over, mob/user) +/obj/item/mech_component/chassis/handle_mouse_drop(atom/over, mob/user, params) if(storage_compartment) - return storage_compartment.handle_mouse_drop(over, user) + return storage_compartment.handle_mouse_drop(over, user, params) . = ..() /obj/item/mech_component/chassis/return_diagnostics(mob/user) diff --git a/code/modules/mechs/components/frame.dm b/code/modules/mechs/components/frame.dm index 237161939bd..1681a3e4459 100644 --- a/code/modules/mechs/components/frame.dm +++ b/code/modules/mechs/components/frame.dm @@ -56,20 +56,20 @@ /obj/structure/heavy_vehicle_frame/on_update_icon() ..() - for(var/overlay in get_mech_images(list(legs, head, body, arms), layer)) - add_overlay(overlay) + for(var/obj/item/mech_component/comp in list(legs, head, body, arms)) + add_overlay(get_mech_image(comp.decal, comp.decal_blend, comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer = FLOAT_LAYER)) if(body) - density = TRUE - overlays += get_mech_image(null, "[body.icon_state]_cockpit", body.icon, body.color) + set_density(TRUE) + add_overlay(get_mech_image(body.decal, body.decal_blend, "[body.icon_state]_cockpit", body.icon, body.color)) if(body.pilot_coverage < 100 || body.transparent_cabin) - add_overlay(get_mech_image(null, "[body.icon_state]_open_overlay", body.icon, body.color)) + add_overlay(get_mech_image(body.decal, body.decal_blend, "[body.icon_state]_open_overlay", body.icon, body.color)) else - density = FALSE + set_density(FALSE) if(density != opacity) set_opacity(density) /obj/structure/heavy_vehicle_frame/set_dir() - ..(SOUTH) + return ..(SOUTH) /obj/structure/heavy_vehicle_frame/attackby(var/obj/item/thing, var/mob/user) diff --git a/code/modules/mechs/components/software.dm b/code/modules/mechs/components/software.dm index 1a7a5f1c916..49cc737083d 100644 --- a/code/modules/mechs/components/software.dm +++ b/code/modules/mechs/components/software.dm @@ -6,22 +6,22 @@ /obj/item/stock_parts/circuitboard/exosystem/engineering name = "exosuit circuit (engineering systems)" contains_software = list(MECH_SOFTWARE_ENGINEERING) - origin_tech = "{'programming':1}" + origin_tech = @'{"programming":1}' /obj/item/stock_parts/circuitboard/exosystem/utility name = "exosuit circuit (utility systems)" contains_software = list(MECH_SOFTWARE_UTILITY) icon = 'icons/obj/modules/module_controller.dmi' - origin_tech = "{'programming':1}" + origin_tech = @'{"programming":1}' /obj/item/stock_parts/circuitboard/exosystem/medical name = "exosuit circuit (medical systems)" contains_software = list(MECH_SOFTWARE_MEDICAL) icon = 'icons/obj/modules/module_controller.dmi' - origin_tech = "{'programming':3,'biotech':2}" + origin_tech = @'{"programming":3,"biotech":2}' /obj/item/stock_parts/circuitboard/exosystem/weapons name = "exosuit circuit (basic weapon systems)" contains_software = list(MECH_SOFTWARE_WEAPONS) icon = 'icons/obj/modules/module_mainboard.dmi' - origin_tech = "{'programming':4,'combat':3}" + origin_tech = @'{"programming":4,"combat":3}' diff --git a/code/modules/mechs/equipment/_equipment.dm b/code/modules/mechs/equipment/_equipment.dm index 1516c8c25eb..f4c5cee9d73 100644 --- a/code/modules/mechs/equipment/_equipment.dm +++ b/code/modules/mechs/equipment/_equipment.dm @@ -87,14 +87,14 @@ /obj/item/mech_equipment/proc/MouseUpInteraction() return 0 -/obj/item/mech_equipment/mob_can_unequip(mob/user, slot, disable_warning = FALSE) +/obj/item/mech_equipment/mob_can_unequip(mob/user, slot, disable_warning = FALSE, dropping = FALSE) . = ..() if(. && owner) //Installed equipment shall not be unequiped. return FALSE /obj/item/mech_equipment/mounted_system - var/holding_type + abstract_type = /obj/item/mech_equipment/mounted_system var/obj/item/holding /obj/item/mech_equipment/mounted_system/attack_self(var/mob/user) @@ -104,26 +104,26 @@ /obj/item/mech_equipment/mounted_system/proc/forget_holding() if(holding) //It'd be strange for this to be called with this var unset - events_repository.unregister(/decl/observ/destroyed, holding, src, .proc/forget_holding) + events_repository.unregister(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding)) holding = null if(!QDELETED(src)) qdel(src) /obj/item/mech_equipment/mounted_system/Initialize() . = ..() - if(holding_type) - holding = new holding_type(src) - events_repository.register(/decl/observ/destroyed, holding, src, .proc/forget_holding) - if(holding) - if(!icon_state) - icon = holding.icon - icon_state = holding.icon_state - SetName(holding.name) - desc = "[holding.desc] This one is suitable for installation on an exosuit." - + if(ispath(holding)) + holding = new holding(src) + events_repository.register(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding)) + if(!istype(holding)) + return + if(!icon_state) + icon = holding.icon + icon_state = holding.icon_state + SetName(holding.name) + desc = "[holding.desc] This one is suitable for installation on an exosuit." /obj/item/mech_equipment/mounted_system/Destroy() - events_repository.unregister(/decl/observ/destroyed, holding, src, .proc/forget_holding) + events_repository.unregister(/decl/observ/destroyed, holding, src, PROC_REF(forget_holding)) if(holding) QDEL_NULL(holding) . = ..() diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm index d9352b84228..8e26654c801 100644 --- a/code/modules/mechs/equipment/combat.dm +++ b/code/modules/mechs/equipment/combat.dm @@ -2,7 +2,8 @@ name = "mounted electrolaser carbine" desc = "A dual fire mode electrolaser system connected to the exosuit's targetting system." icon_state = "mech_taser" - holding_type = /obj/item/gun/energy/taser/mounted/mech + origin_tech = @'{"combat":1,"magnets":1,"engineering":1}' + holding = /obj/item/gun/energy/taser/mounted/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) @@ -10,13 +11,15 @@ name = "mounted ion rifle" desc = "An exosuit-mounted ion rifle. Handle with care." icon_state = "mech_ionrifle" - holding_type = /obj/item/gun/energy/ionrifle/mounted/mech + holding = /obj/item/gun/energy/ionrifle/mounted/mech + origin_tech = @'{"combat":2,"powerstorage":2,"magnets":4,"engineering":2}' /obj/item/mech_equipment/mounted_system/taser/laser name = "\improper CH-PS \"Immolator\" laser" desc = "An exosuit-mounted laser rifle. Handle with care." icon_state = "mech_lasercarbine" - holding_type = /obj/item/gun/energy/laser/mounted/mech + holding = /obj/item/gun/energy/laser/mounted/mech + origin_tech = @'{"combat":3,"magnets":2,"engineering":2}' /obj/item/gun/energy/taser/mounted/mech use_external_power = TRUE @@ -36,6 +39,9 @@ self_recharge = TRUE /obj/item/gun/energy/get_hardpoint_maptext() + var/obj/item/cell/power_supply = get_cell() + if(!power_supply) + return 0 return "[round(power_supply.charge / charge_cost)]/[max_shots]" /obj/item/gun/energy/get_hardpoint_status_value() @@ -51,6 +57,7 @@ restricted_hardpoints = list(HARDPOINT_BACK) restricted_software = list(MECH_SOFTWARE_WEAPONS) material = /decl/material/solid/metal/steel + origin_tech = @'{"magnets":3,"powerstorage":4,"materials":2,"engineering":2}' matter = list( /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE @@ -154,9 +161,9 @@ /obj/aura/mechshield/added_to(var/mob/living/target) . = ..() - add_vis_contents(target, src) + target.add_vis_contents(src) set_dir(target.dir) - events_repository.register(/decl/observ/dir_set, user, src, /obj/aura/mechshield/proc/update_dir) + events_repository.register(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mechshield, update_dir)) /obj/aura/mechshield/proc/update_dir(var/user, var/old_dir, var/dir) set_dir(dir) @@ -169,8 +176,8 @@ /obj/aura/mechshield/Destroy() if(user) - events_repository.unregister(/decl/observ/dir_set, user, src, /obj/aura/mechshield/proc/update_dir) - remove_vis_contents(user, src) + events_repository.unregister(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mechshield, update_dir)) + user.remove_vis_contents(src) shields = null . = ..() @@ -210,17 +217,20 @@ /obj/aura/mechshield/hitby(atom/movable/M, var/datum/thrownthing/TT) . = ..() - if(!active) - return - if(shields.charge && TT.speed <= 5) - user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash briefly as they deflect \the [M].")) - flick("shield_impact", src) - playsound(user,'sound/effects/basscannon.ogg',10,1) - return AURA_FALSE|AURA_CANCEL + if(.) + if(!active) + return + if(shields.charge && TT.speed <= 5) + user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash briefly as they deflect \the [M].")) + flick("shield_impact", src) + playsound(user,'sound/effects/basscannon.ogg',10,1) + return AURA_FALSE|AURA_CANCEL //Too fast! //Melee! As a general rule I would recommend using regular objects and putting logic in them. /obj/item/mech_equipment/mounted_system/melee + abstract_type = /obj/item/mech_equipment/mounted_system/melee + origin_tech = @'{"combat":1,"materials":1,"engineering":1}' restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_UTILITY) @@ -255,7 +265,7 @@ . = ..() if (user.a_intent != I_HURT) return - var/obj/item/mech_equipment/mounted_system/melee/mechete/MC = loc + var/obj/item/mech_equipment/mounted_system/melee/machete/MC = loc if (istype(MC)) //SPIN BLADE ATTACK GO! var/mob/living/exosuit/E = MC.owner @@ -269,9 +279,9 @@ E.spin(0.65 SECONDS, 0.125 SECONDS) playsound(E, 'sound/mecha/mechturn.ogg', 40, 1) -/obj/item/mech_equipment/mounted_system/melee/mechete +/obj/item/mech_equipment/mounted_system/melee/machete icon_state = "mech_blade" - holding_type = /obj/item/hatchet/machete/mech + holding = /obj/item/hatchet/machete/mech //Ballistic shield @@ -279,14 +289,15 @@ name = "exosuit ballistic shield" desc = "This formidable line of defense, sees widespread use in planetary peacekeeping operations and military formations alike." icon_state = "mech_shield" //Rendering is handled by aura due to layering issues: TODO, figure out a better way to do this + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_UTILITY) + origin_tech = @'{"materials":2,"engineering":2}' var/obj/aura/mech_ballistic/aura = null var/last_push = 0 var/chance = 60 //For attacks from the front, diminishing returns var/last_max_block = 0 //Blocking during a perfect block window resets this, else there is an anti spam var/max_block = 60 // Should block most things var/blocking = FALSE - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) /obj/item/mech_equipment/ballistic_shield/installed(mob/living/exosuit/_owner) . = ..() @@ -394,37 +405,35 @@ /obj/aura/mech_ballistic/added_to(mob/living/target) . = ..() - add_vis_contents(target, src) + target.add_vis_contents(src) set_dir(target.dir) - global.events_repository.register(/decl/observ/dir_set, user, src, /obj/aura/mech_ballistic/proc/update_dir) + global.events_repository.register(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mech_ballistic, update_dir)) /obj/aura/mech_ballistic/proc/update_dir(user, old_dir, dir) set_dir(dir) /obj/aura/mech_ballistic/Destroy() if (user) - global.events_repository.unregister(/decl/observ/dir_set, user, src, /obj/aura/mech_ballistic/proc/update_dir) - remove_vis_contents(user, src) + global.events_repository.unregister(/decl/observ/dir_set, user, src, TYPE_PROC_REF(/obj/aura/mech_ballistic, update_dir)) + user.remove_vis_contents(src) shield = null . = ..() /obj/aura/mech_ballistic/bullet_act(obj/item/projectile/P, def_zone) . = ..() - if (shield) - if (prob(shield.block_chance(P.damage, P.armor_penetration, source = P))) - user.visible_message(SPAN_WARNING("\The [P] is blocked by \the [user]'s [shield].")) - user.bullet_impact_visuals(P, def_zone, 0) - shield.on_block_attack() - return AURA_FALSE|AURA_CANCEL + if (shield && prob(shield.block_chance(P.damage, P.armor_penetration, source = P))) + user.visible_message(SPAN_WARNING("\The [P] is blocked by \the [user]'s [shield.name].")) + user.bullet_impact_visuals(P, def_zone, 0) + shield.on_block_attack() + return AURA_FALSE|AURA_CANCEL /obj/aura/mech_ballistic/hitby(atom/movable/M, datum/thrownthing/TT) . = ..() - if (shield) + if (. && shield) var/throw_damage = 0 if (istype(M,/obj/)) var/obj/O = M throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) - if (prob(shield.block_chance(throw_damage, 0, source = M, attacker = TT.thrower))) user.visible_message(SPAN_WARNING("\The [M] bounces off \the [user]'s [shield].")) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) @@ -433,11 +442,10 @@ /obj/aura/mech_ballistic/attackby(obj/item/I, mob/user) . = ..() - if (shield) - if (prob(shield.block_chance(I.force, I.armor_penetration, source = I, attacker = user))) - user.visible_message(SPAN_WARNING("\The [I] is blocked by \the [user]'s [shield].")) - playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) - return AURA_FALSE|AURA_CANCEL + if (shield && prob(shield.block_chance(I.force, I.armor_penetration, source = I, attacker = user))) + user.visible_message(SPAN_WARNING("\The [I] is blocked by \the [user]'s [shield.name].")) + playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) + return AURA_FALSE|AURA_CANCEL /obj/item/mech_equipment/flash name = "exosuit flash" @@ -449,7 +457,7 @@ restricted_software = list(MECH_SOFTWARE_WEAPONS) active_power_use = 7 KILOWATTS var/next_use = 0 - origin_tech = "{'magnets':2,'combat':3}" + origin_tech = @'{"magnets":2,"combat":3}' /obj/item/mech_equipment/flash/proc/area_flash() playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm index 1675de22360..040ff1497f1 100644 --- a/code/modules/mechs/equipment/combat_projectile.dm +++ b/code/modules/mechs/equipment/combat_projectile.dm @@ -28,10 +28,10 @@ /obj/item/mech_equipment/mounted_system/projectile name = "mounted submachine gun" icon_state = "mech_ballistic" - holding_type = /obj/item/gun/projectile/automatic/smg/mech + holding = /obj/item/gun/projectile/automatic/smg/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) - origin_tech = "{'programming':4,'combat':6,'engineering':5}" + origin_tech = @'{"programming":4,"combat":6,"engineering":5}' /obj/item/gun/projectile/automatic/smg/mech magazine_type = /obj/item/ammo_magazine/mech/smg_top @@ -49,10 +49,10 @@ /obj/item/mech_equipment/mounted_system/projectile/assault_rifle name = "mounted assault rifle" icon_state = "mech_ballistic2" - holding_type = /obj/item/gun/projectile/automatic/assault_rifle/mech + holding = /obj/item/gun/projectile/automatic/assault_rifle/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) - origin_tech = "{'programming':4,'combat':8,'engineering':6}" + origin_tech = @'{"programming":4,"combat":8,"engineering":6}' /obj/item/gun/projectile/automatic/assault_rifle/mech magazine_type = /obj/item/ammo_magazine/mech/rifle @@ -69,9 +69,10 @@ /obj/item/mech_equipment/mounted_system/projectile/machine name = "mounted machine gun" icon_state = "mech_machine_gun" - holding_type = /obj/item/gun/projectile/automatic/machine/mech + holding = /obj/item/gun/projectile/automatic/machine/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) + origin_tech = @'{"programming":4,"combat":8,"engineering":6}' /obj/item/gun/projectile/automatic/machine/mech magazine_type = /obj/item/ammo_magazine/mech/rifle/drum diff --git a/code/modules/mechs/equipment/engineering.dm b/code/modules/mechs/equipment/engineering.dm index 7198c815f70..19da57c8c63 100644 --- a/code/modules/mechs/equipment/engineering.dm +++ b/code/modules/mechs/equipment/engineering.dm @@ -1,6 +1,7 @@ /obj/item/mech_equipment/mounted_system/rcd icon_state = "mech_rcd" - holding_type = /obj/item/rcd/mounted + holding = /obj/item/rcd/mounted + origin_tech = @'{"engineering":4,"materials":3,"powerstorage":1}' restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_ENGINEERING) material = /decl/material/solid/metal/steel @@ -38,30 +39,33 @@ /obj/item/mech_equipment/mounted_system/extinguisher icon_state = "mech_exting" - holding_type = /obj/item/chems/spray/extinguisher/mech + holding = /obj/item/chems/spray/extinguisher/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_ENGINEERING) + origin_tech = @'{"engineering":1,"materials":1}' /obj/item/mech_equipment/atmos_shields icon_state = "mech_atmoshield_off" name = "exosuit airshield" - desc = "A 'Zephyros' portable Atmospheric Isolation and Retention Screen. It keeps air where it should be... Most of the time. Press ctrl-click to switch modes" + desc = "A 'Zephyros' portable Atmospheric Isolation and Retention Screen. It keeps air where it should be... most of the time. Press ctrl-click to switch modes." restricted_hardpoints = list(HARDPOINT_BACK) restricted_software = list(MECH_SOFTWARE_ENGINEERING) - var/list/segments equipment_delay = 0.25 SECONDS + origin_tech = @'{"engineering":2,"powerstorage":2,"materials":3}' + var/list/segments var/current_mode = 0 //0 barrier, 1 bubble var/shield_range = 2 -/obj/item/mech_equipment/atmos_shields/CtrlClick(mob/user) - if (owner && ((user in owner.pilots) || user == owner)) +// TODO: convert to alt interaction. +/obj/item/mech_equipment/atmos_shields/AltClick(mob/user) + if (owner?.hatch_closed && ((user in owner.pilots) || user == owner)) if (active) to_chat(user, SPAN_WARNING("You cannot modify the projection mode while the shield is active.")) else current_mode = !current_mode to_chat(user, SPAN_NOTICE("You set the shields to [current_mode ? "bubble" : "barrier"] mode.")) - else - ..() + return TRUE + return ..() /obj/effect/mech_shield name = "energy shield" @@ -140,14 +144,14 @@ if(istype(MS)) MS.shields = src segments += MS - events_repository.register(/decl/observ/moved, MS, src, .proc/on_moved) + events_repository.register(/decl/observ/moved, MS, src, PROC_REF(on_moved)) passive_power_use = 0.8 KILOWATTS * segments.len update_icon() owner.update_icon() - events_repository.register(/decl/observ/moved, owner, src, .proc/on_moved) - events_repository.register(/decl/observ/dir_set, owner, src, .proc/on_turned) + events_repository.register(/decl/observ/moved, owner, src, PROC_REF(on_moved)) + events_repository.register(/decl/observ/dir_set, owner, src, PROC_REF(on_turned)) /obj/item/mech_equipment/atmos_shields/on_update_icon() . = ..() @@ -156,13 +160,13 @@ /obj/item/mech_equipment/atmos_shields/deactivate() for(var/obj/effect/mech_shield/MS in segments) if(istype(MS)) - events_repository.unregister(/decl/observ/moved, MS, src, .proc/on_moved) + events_repository.unregister(/decl/observ/moved, MS, src, PROC_REF(on_moved)) if(segments.len) owner.visible_message(SPAN_WARNING("The energy shields in front of \the [owner] disappear!")) QDEL_NULL_LIST(segments) passive_power_use = 0 - events_repository.unregister(/decl/observ/moved, owner, src, .proc/on_moved) - events_repository.unregister(/decl/observ/dir_set, owner, src, .proc/on_turned) + events_repository.unregister(/decl/observ/moved, owner, src, PROC_REF(on_moved)) + events_repository.unregister(/decl/observ/dir_set, owner, src, PROC_REF(on_turned)) . = ..() update_icon() owner.update_icon() diff --git a/code/modules/mechs/equipment/medical.dm b/code/modules/mechs/equipment/medical.dm index 35473b48113..4dc126c7cc7 100644 --- a/code/modules/mechs/equipment/medical.dm +++ b/code/modules/mechs/equipment/medical.dm @@ -6,7 +6,7 @@ restricted_software = list(MECH_SOFTWARE_MEDICAL) equipment_delay = 30 //don't spam it on people pls active_power_use = 0 //Usage doesn't really require power. We don't want people stuck inside - origin_tech = "{'programming':2,'biotech':3}" + origin_tech = @'{"programming":2,"biotech":3}' passive_power_use = 1.5 KILOWATTS var/obj/machinery/sleeper/mounted/sleeper = null diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index c6bd00d378f..dd29af878ce 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -4,7 +4,7 @@ icon_state = "mech_clamp" restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' var/carrying_capacity = 5 var/list/obj/carrying = list() @@ -16,7 +16,13 @@ /obj/item/mech_equipment/clamp/attack_hand(mob/user) if(!owner || !LAZYISIN(owner.pilots, user) || owner.hatch_closed || !length(carrying) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() - var/obj/chosen_obj = input(user, "Choose an object to grab.", "Clamp Claw") as null|anything in carrying + // Filter out non-items. + var/list/carrying_items = list() + for(var/obj/item/thing in carrying) + carrying_items += thing + if(!length(carrying_items)) + return TRUE + var/obj/item/chosen_obj = input(user, "Choose an object to grab.", "Clamp Claw") as null|anything in carrying_items if(chosen_obj && do_after(user, 20, owner) && !owner.hatch_closed && !QDELETED(chosen_obj) && (chosen_obj in carrying)) owner.visible_message(SPAN_NOTICE("\The [user] carefully grabs \the [chosen_obj] from \the [src].")) playsound(src, 'sound/mecha/hydraulic.ogg', 50, 1) @@ -49,7 +55,7 @@ playsound(FD, 'sound/effects/meteorimpact.ogg', 100, 1) playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1) FD.blocked = FALSE - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0) + addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, open), TRUE), 0) FD.set_broken(TRUE) FD.visible_message(SPAN_WARNING("\The [owner] tears \the [FD] open!")) else @@ -58,10 +64,10 @@ playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1) if(FD.density) FD.visible_message(SPAN_DANGER("\The [owner] forces \the [FD] open!")) - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0) + addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, open), TRUE), 0) else FD.visible_message(SPAN_WARNING("\The [owner] forces \the [FD] closed!")) - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/close, TRUE), 0) + addtimer(CALLBACK(FD, TYPE_PROC_REF(/obj/machinery/door/firedoor, close), TRUE), 0) return else if(istype(O, /obj/machinery/door/airlock)) var/obj/machinery/door/airlock/AD = O @@ -74,7 +80,7 @@ playsound(AD, 'sound/effects/meteorimpact.ogg', 100, 1) playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1) AD.visible_message(SPAN_DANGER("\The [owner] tears \the [AD] open!")) - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0) + addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) AD.set_broken(TRUE) return else @@ -82,12 +88,12 @@ if((AD.is_broken(NOPOWER) || do_after(owner, 5 SECONDS,AD)) && !(AD.operating || AD.welded || AD.locked)) playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1) if(AD.density) - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0) + addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) if(!AD.is_broken(NOPOWER)) AD.set_broken(TRUE) AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] open!")) else - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/close, TRUE), 0) + addtimer(CALLBACK(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, close), TRUE), 0) if(!AD.is_broken(NOPOWER)) AD.set_broken(TRUE) AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] closed!")) @@ -133,11 +139,11 @@ if(.) drop_carrying(user, TRUE) -/obj/item/mech_equipment/clamp/CtrlClick(mob/user) - if(owner) +/obj/item/mech_equipment/clamp/AltClick(mob/user) + if(owner?.hatch_closed) drop_carrying(user, FALSE) - else - ..() + return TRUE + return ..() /obj/item/mech_equipment/clamp/proc/drop_carrying(var/mob/user, var/choose_object) if(!length(carrying)) @@ -197,7 +203,7 @@ item_state = "mech_floodlight" restricted_hardpoints = list(HARDPOINT_HEAD, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) mech_layer = MECH_INTERMEDIATE_LAYER - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' var/on = 0 var/l_power = 0.9 @@ -251,7 +257,7 @@ var/mode = CATAPULT_SINGLE var/atom/movable/locked equipment_delay = 30 //Stunlocks are not ideal - origin_tech = "{'materials':4,'engineering':4,'magnets':4}" + origin_tech = @'{"materials":4,"engineering":4,"magnets":4}' require_adjacent = FALSE /obj/item/mech_equipment/catapult/get_hardpoint_maptext() @@ -372,7 +378,7 @@ //Drill can have a head var/obj/item/drill_head/drill_head - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/mech_equipment/drill/Initialize() . = ..() @@ -493,15 +499,6 @@ scoop_ore(target) return - if (istype(target, /turf/simulated/floor/asteroid)) - for (var/turf/simulated/floor/asteroid/asteroid in RANGE_TURFS(target, 1)) - if (!(get_dir(owner, asteroid) & owner.dir)) - continue - drill_head.durability -= 1 - asteroid.gets_dug() - scoop_ore(target) - return - if (istype(target, /turf/simulated/wall)) var/turf/simulated/wall/wall = target var/wall_hardness = max(wall.material.hardness, wall.reinf_material ? wall.reinf_material.hardness : 0) @@ -510,6 +507,15 @@ drill_head.durability -= 2 return + if(istype(target, /turf)) + for(var/turf/asteroid in RANGE_TURFS(target, 1)) + if (!(get_dir(owner, asteroid) & owner.dir)) + continue + if(asteroid.can_be_dug() && asteroid.drop_diggable_resources()) + drill_head.durability -= 1 + scoop_ore(asteroid) + return + var/audible = "loudly grinding machinery" if (iscarbon(target)) //splorch audible = "a terrible rending of metal and flesh" @@ -544,17 +550,17 @@ name = "mounted plasma cutter" desc = "An industrial plasma cutter mounted onto the chassis of the mech. " icon_state = "mech_plasma" - holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech + holding = /obj/item/gun/energy/plasmacutter/mounted/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = "{'materials':4,'engineering':6,'exoticmatter':4,'combat':3}" + origin_tech = @'{"materials":4,"engineering":6,"exoticmatter":4,"combat":3}' /obj/item/mech_equipment/mounted_system/taser/autoplasma icon_state = "mech_energy" - holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech/auto + holding = /obj/item/gun/energy/plasmacutter/mounted/mech/auto restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = "{'materials':5,'engineering':6,'exoticmatter':4,'combat':4}" + origin_tech = @'{"materials":5,"engineering":6,"exoticmatter":4,"combat":4}' /obj/item/gun/energy/plasmacutter/mounted/mech/auto charge_cost = 13 @@ -562,9 +568,9 @@ desc = "A state of the art rotating, variable intensity, sequential-cascade plasma cutter. Resist the urge to aim this at your coworkers." max_shots = 15 firemodes = list( - list(mode_name="single shot", can_autofire=0, burst=1, fire_delay=6, dispersion = list(0.0)), - list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, burst_accuracy = list(0,-1,-1,-1,-1,-2,-2,-2), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.1)), - ) + list(mode_name="single shot", autofire_enabled=0, burst=1, fire_delay=6, dispersion = list(0.0)), + list(mode_name="full auto", autofire_enabled=1, burst=1, fire_delay=1, burst_accuracy = list(0,-1,-1,-1,-1,-2,-2,-2), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.1)), + ) /obj/item/mech_equipment/ionjets name = "\improper exosuit manouvering unit" @@ -576,7 +582,7 @@ passive_power_use = 0 KILOWATTS var/activated_passive_power = 2 KILOWATTS var/movement_power = 75 - origin_tech = "{'magnets':3,'engineering':3,'exoticmatter':3}" + origin_tech = @'{"magnets":3,"engineering":3,"exoticmatter":3}' var/datum/effect/effect/system/trail/ion/ion_trail require_adjacent = FALSE var/stabilizers = FALSE @@ -614,13 +620,12 @@ else activate() -/obj/item/mech_equipment/ionjets/CtrlClick(mob/user) - if (owner && ((user in owner.pilots) || user == owner)) - if (active) - stabilizers = !stabilizers - to_chat(user, SPAN_NOTICE("You toggle the stabilizers [stabilizers ? "on" : "off"]")) - else - ..() +/obj/item/mech_equipment/ionjets/AltClick(mob/user) + if(owner?.hatch_closed && ((user in owner.pilots) || user == owner) && active) + stabilizers = !stabilizers + to_chat(user, SPAN_NOTICE("You toggle the stabilizers [stabilizers ? "on" : "off"]")) + return TRUE + return ..() /obj/item/mech_equipment/ionjets/proc/activate() passive_power_use = activated_passive_power @@ -700,7 +705,7 @@ restricted_software = list(MECH_SOFTWARE_UTILITY) equipment_delay = 10 - origin_tech = "{'materials':1,'engineering':1,'magnets':2}" + origin_tech = @'{"materials":1,"engineering":1,"magnets":2}' /obj/item/mech_equipment/camera/Initialize() diff --git a/code/modules/mechs/interface/_interface.dm b/code/modules/mechs/interface/_interface.dm index 38535387f41..6395e7d10d8 100644 --- a/code/modules/mechs/interface/_interface.dm +++ b/code/modules/mechs/interface/_interface.dm @@ -1,5 +1,3 @@ -#define BAR_CAP 12 - /mob/living/exosuit var/static/list/additional_hud_elements = list( /obj/screen/exosuit/toggle/power_control, @@ -22,12 +20,15 @@ if(client) client.screen |= hud_elements +/obj/screen/zone_selector/exosuit + requires_ui_style = FALSE + /mob/living/exosuit/InitializeHud() - zone_sel = new + zone_sel = new /obj/screen/zone_selector/exosuit(null, src) if(!LAZYLEN(hud_elements)) var/i = 1 for(var/hardpoint in hardpoints) - var/obj/screen/exosuit/hardpoint/H = new(src, hardpoint) + var/obj/screen/exosuit/hardpoint/H = new(null, src, null, null, null, null, hardpoint) H.screen_loc = "LEFT:6,TOP-[i]:-16" hud_elements |= H hardpoint_hud_elements[hardpoint] = H @@ -38,26 +39,33 @@ i = 0 var/pos = 7 for(var/additional_hud in additional_hud_elements) - var/obj/screen/exosuit/M = new additional_hud(src) + var/obj/screen/exosuit/M = new additional_hud(null, src) M.screen_loc = "LEFT:6,BOTTOM+[pos]:[i]" hud_elements |= M i -= M.height - hud_health = new /obj/screen/exosuit/health(src) + hud_health = new /obj/screen/exosuit/health(null, src) hud_health.screen_loc = "RIGHT-1:28,CENTER-3:11" hud_elements |= hud_health hud_open = locate(/obj/screen/exosuit/toggle/hatch_open) in hud_elements - hud_power = new /obj/screen/exosuit/power(src) + hud_power = new /obj/screen/exosuit/power(null, src) hud_power.screen_loc = "RIGHT-1:28,CENTER-4:25" hud_elements |= hud_power hud_power_control = locate(/obj/screen/exosuit/toggle/power_control) in hud_elements hud_camera = locate(/obj/screen/exosuit/toggle/camera) in hud_elements - hud_heat = new /obj/screen/exosuit/heat(src) + hud_heat = new /obj/screen/exosuit/heat(null, src) hud_heat.screen_loc = "RIGHT-1:28,CENTER-4" hud_elements |= hud_heat refresh_hud() +/mob/living/exosuit/should_do_hud_updates() + . = ..() + if(!. && length(pilots)) + for(var/mob/living/pilot in pilots) + if(pilot.should_do_hud_updates()) + return TRUE + /mob/living/exosuit/handle_hud_icons() for(var/hardpoint in hardpoint_hud_elements) var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] @@ -122,4 +130,4 @@ if(H) H.color = "#a03b3b" animate(H, color = COLOR_WHITE, time = timeout, easing = CUBIC_EASING | EASE_IN) - addtimer(CALLBACK(src, .proc/reset_hardpoint_color), timeout) \ No newline at end of file + addtimer(CALLBACK(src, PROC_REF(reset_hardpoint_color)), timeout) \ No newline at end of file diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm index 86afedfdd69..66592c448fb 100644 --- a/code/modules/mechs/mech.dm +++ b/code/modules/mechs/mech.dm @@ -12,7 +12,7 @@ status_flags = PASSEMOTES a_intent = I_HURT mob_size = MOB_SIZE_LARGE - atom_flags = ATOM_FLAG_SHIELD_CONTENTS | ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_BLOCK_DIAGONAL_FACING + atom_flags = ATOM_FLAG_SHIELD_CONTENTS | ATOM_FLAG_BLOCK_DIAGONAL_FACING meat_type = null meat_amount = 0 @@ -119,8 +119,6 @@ if(source_frame.material) material = source_frame.material - updatehealth() - // Generate hardpoint list. var/list/component_descriptions for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) @@ -177,7 +175,7 @@ for(var/hardpoint in hardpoint_hud_elements) var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - H.owner = null + H.owner_ref = null H.holding = null qdel(H) hardpoint_hud_elements.Cut() @@ -241,3 +239,13 @@ hud_power_control?.queue_icon_update() else to_chat(user, SPAN_WARNING("Error: No power cell was detected.")) + +// Dump exhaled air into the environment to avoid the tank filling +// up with CO2 and the cockpit filling up with N2. This isn't an +// ideal fix; regulators or something would be a better solution. +/mob/living/exosuit/merge_exhaled_volume(datum/gas_mixture/exhaled) + return loc?.merge_exhaled_volume(exhaled) + +// Override this to avoid triggering the ancient vore code. +/mob/living/exosuit/relaymove(mob/living/user, direction) + return diff --git a/code/modules/mechs/mech_construction.dm b/code/modules/mechs/mech_construction.dm index 35f6b87b440..8a2bfd3b391 100644 --- a/code/modules/mechs/mech_construction.dm +++ b/code/modules/mechs/mech_construction.dm @@ -45,7 +45,7 @@ if(target == selected_hardpoint) clear_selected_hardpoint() - events_repository.unregister(/decl/observ/destroyed, module_to_forget, src, .proc/forget_module) + events_repository.unregister(/decl/observ/destroyed, module_to_forget, src, PROC_REF(forget_module)) var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[target] H.holding = null @@ -96,7 +96,7 @@ playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) else return FALSE - events_repository.register(/decl/observ/destroyed, system, src, .proc/forget_module) + events_repository.register(/decl/observ/destroyed, system, src, PROC_REF(forget_module)) system.forceMove(src) hardpoints[system_hardpoint] = system @@ -139,7 +139,7 @@ system.forceMove(get_turf(src)) system.screen_loc = null system.layer = initial(system.layer) - events_repository.unregister(/decl/observ/destroyed, system, src, .proc/forget_module) + events_repository.unregister(/decl/observ/destroyed, system, src, PROC_REF(forget_module)) var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[system_hardpoint] H.holding = null diff --git a/code/modules/mechs/mech_damage.dm b/code/modules/mechs/mech_damage.dm index 84e74389446..7c9189e2ff0 100644 --- a/code/modules/mechs/mech_damage.dm +++ b/code/modules/mechs/mech_damage.dm @@ -58,11 +58,12 @@ if (prob(chance)) if (enter(AM, silent = TRUE, check_incap = FALSE, instant = TRUE)) visible_message(SPAN_NOTICE("[message]")) - return + return TRUE if (LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage))) var/mob/living/pilot = pick(pilots) return pilot.hitby(AM, TT) + . = ..() /mob/living/exosuit/bullet_act(obj/item/projectile/P, def_zone, used_weapon) @@ -80,19 +81,22 @@ if(body_armor) . += body_armor -/mob/living/exosuit/updatehealth() - maxHealth = body ? body.mech_health : 0 - health = maxHealth-(getFireLoss()+getBruteLoss()) +/mob/living/exosuit/get_max_health() + return (body ? body.mech_health : 0) + +/mob/living/exosuit/get_total_life_damage() + return (getFireLoss()+getBruteLoss()) -/mob/living/exosuit/adjustFireLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head))) +/mob/living/exosuit/adjustFireLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)), var/do_update_health = TRUE) if(MC) MC.take_burn_damage(amount) - MC.update_health() + if(do_update_health) + update_health() // TODO: unify these procs somehow instead of having weird brute-wrapping behavior as the default. -/mob/living/exosuit/adjustBruteLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head))) +/mob/living/exosuit/adjustBruteLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head)), var/do_update_health = TRUE) if(MC) MC.take_brute_damage(amount) - MC.update_health() + ..() /mob/living/exosuit/proc/zoneToComponent(var/zone) switch(zone) @@ -152,8 +156,6 @@ if((damagetype == BRUTE || damagetype == BURN) && prob(25+(damage*2))) sparks.set_up(3,0,src) sparks.start() - updatehealth() - return 1 /mob/living/exosuit/rad_act(var/severity) @@ -164,7 +166,7 @@ if(!hatch_closed || (body.pilot_coverage < 100)) //Open, environment is the source return . var/list/after_armor = modify_damage_by_armor(null, ., IRRADIATE, DAM_DISPERSED, src, 0, TRUE) - return after_armor[1] + return after_armor[1] /mob/living/exosuit/getFireLoss() var/total = 0 @@ -200,6 +202,6 @@ for(var/thing in pilots) var/mob/pilot = thing pilot.emp_act(severity) - + /mob/living/exosuit/get_bullet_impact_effect_type(def_zone) return BULLET_IMPACT_METAL diff --git a/code/modules/mechs/mech_damage_immunity.dm b/code/modules/mechs/mech_damage_immunity.dm index 23a69ffd596..067c613d56d 100644 --- a/code/modules/mechs/mech_damage_immunity.dm +++ b/code/modules/mechs/mech_damage_immunity.dm @@ -14,7 +14,8 @@ /mob/living/exosuit/setOxyLoss() return 0 -/mob/living/exosuit/adjustOxyLoss() +/mob/living/exosuit/adjustOxyLoss(var/damage, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) return 0 /mob/living/exosuit/getToxLoss() @@ -23,7 +24,7 @@ /mob/living/exosuit/setToxLoss() return 0 -/mob/living/exosuit/adjustToxLoss() +/mob/living/exosuit/adjustToxLoss(var/amount, var/do_update_health = TRUE) return 0 /mob/living/exosuit/getBrainLoss() @@ -32,7 +33,8 @@ /mob/living/exosuit/setBrainLoss() return 0 -/mob/living/exosuit/adjustBrainLoss() +/mob/living/exosuit/adjustBrainLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) return 0 /mob/living/exosuit/getCloneLoss() @@ -41,7 +43,8 @@ /mob/living/exosuit/setCloneLoss() return 0 -/mob/living/exosuit/adjustCloneLoss() +/mob/living/exosuit/adjustCloneLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) return 0 /mob/living/exosuit/getHalLoss() @@ -50,5 +53,6 @@ /mob/living/exosuit/setHalLoss() return 0 -/mob/living/exosuit/adjustHalLoss() +/mob/living/exosuit/adjustHalLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) return 0 \ No newline at end of file diff --git a/code/modules/mechs/mech_icon.dm b/code/modules/mechs/mech_icon.dm index 208505e5219..d0beae15179 100644 --- a/code/modules/mechs/mech_icon.dm +++ b/code/modules/mechs/mech_icon.dm @@ -1,5 +1,6 @@ -/proc/get_mech_image(var/decal, var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER) - var/use_key = "[cache_key]-[cache_icon]-[overlay_layer]-[decal ? decal : "none"]-[image_colour ? image_colour : "none"]" +/proc/get_mech_image(var/decal, var/decal_blend = BLEND_MULTIPLY, var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER) + + var/use_key = "[cache_key]-[cache_icon]-[overlay_layer]-[decal ? decal : "none"]-[decal_blend]-[image_colour ? image_colour : "none"]" if(!global.mech_image_cache[use_key]) var/image/I = image(icon = cache_icon, icon_state = cache_key) if(image_colour) @@ -8,43 +9,42 @@ masked_color.blend_mode = BLEND_MULTIPLY I.overlays += masked_color if(decal) - var/decal_key = "[decal]-[cache_key]" + var/decal_key = "[decal]-[decal_blend]-[cache_key]" if(!global.mech_icon_cache[decal_key]) var/template_key = "template-[cache_key]" + var/icon/decal_icon = icon('icons/mecha/mech_decals.dmi', decal) if(!global.mech_icon_cache[template_key]) global.mech_icon_cache[template_key] = icon(cache_icon, "[cache_key]_mask") - var/icon/decal_icon = icon('icons/mecha/mech_decals.dmi',decal) decal_icon.AddAlphaMask(global.mech_icon_cache[template_key]) global.mech_icon_cache[decal_key] = decal_icon - var/image/decal_image = get_mech_image(null, decal_key, global.mech_icon_cache[decal_key]) - decal_image.blend_mode = BLEND_MULTIPLY + var/image/decal_image = get_mech_image(null, null, decal_key, global.mech_icon_cache[decal_key]) + decal_image.blend_mode = decal_blend + decal_image.appearance_flags |= RESET_COLOR I.overlays += decal_image I.appearance_flags |= RESET_COLOR I.layer = overlay_layer I.plane = FLOAT_PLANE global.mech_image_cache[use_key] = I - return global.mech_image_cache[use_key] -/proc/get_mech_images(var/list/components = list(), var/overlay_layer = FLOAT_LAYER) - var/list/all_images = list() - for(var/obj/item/mech_component/comp in components) - all_images += get_mech_image(comp.decal, comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer) - return all_images + var/image/I = new + I.appearance = global.mech_image_cache[use_key] + return I /mob/living/exosuit/on_update_icon() ..() - var/list/new_overlays = get_mech_images(list(body, head), MECH_BASE_LAYER) + var/list/new_overlays = list() if(body) - new_overlays += get_mech_image(body.decal, "[body.icon_state]_cockpit", body.on_mech_icon, overlay_layer = MECH_INTERMEDIATE_LAYER) + new_overlays += get_mech_image(body.decal, body.decal_blend, body.icon_state, body.on_mech_icon, body.color, overlay_layer = MECH_BASE_LAYER) + new_overlays += get_mech_image(body.decal, body.decal_blend, "[body.icon_state]_cockpit", body.on_mech_icon, overlay_layer = MECH_INTERMEDIATE_LAYER) update_pilots(FALSE) if(LAZYLEN(pilot_overlays)) new_overlays += pilot_overlays if(body) - new_overlays += get_mech_image(body.decal, "[body.icon_state]_overlay[hatch_closed ? "" : "_open"]", body.on_mech_icon, body.color, MECH_COCKPIT_LAYER) + new_overlays += get_mech_image(body.decal, body.decal_blend, "[body.icon_state]_overlay[hatch_closed ? "" : "_open"]", body.on_mech_icon, body.color, MECH_COCKPIT_LAYER) if(arms) - new_overlays += get_mech_image(arms.decal, arms.icon_state, arms.on_mech_icon, arms.color, MECH_ARM_LAYER) + new_overlays += get_mech_image(arms.decal, arms.decal_blend, arms.icon_state, arms.on_mech_icon, arms.color, MECH_ARM_LAYER) if(legs) - new_overlays += get_mech_image(legs.decal, legs.icon_state, legs.on_mech_icon, legs.color, MECH_LEG_LAYER) + new_overlays += get_mech_image(legs.decal, legs.decal_blend, legs.icon_state, legs.on_mech_icon, legs.color, MECH_LEG_LAYER) for(var/hardpoint in hardpoints) var/obj/item/mech_equipment/hardpoint_object = hardpoints[hardpoint] if(hardpoint_object) @@ -52,17 +52,21 @@ if(use_icon_state in global.mech_weapon_overlays) var/color = COLOR_WHITE var/decal = null + var/decal_blend = BLEND_MULTIPLY if(hardpoint in list(HARDPOINT_BACK, HARDPOINT_RIGHT_SHOULDER, HARDPOINT_LEFT_SHOULDER)) - color = body.color - decal = body.decal + color = body.color + decal = body.decal + decal_blend = body.decal_blend else if(hardpoint in list(HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_HAND)) - color = arms.color - decal = arms.decal + color = arms.color + decal = arms.decal + decal_blend = arms.decal_blend else - color = head.color - decal = head.decal + color = head.color + decal = head.decal + decal_blend = head.decal_blend + new_overlays += get_mech_image(decal, decal_blend, use_icon_state, 'icons/mecha/mech_weapon_overlays.dmi', color, hardpoint_object.mech_layer ) - new_overlays += get_mech_image(decal, use_icon_state, 'icons/mecha/mech_weapon_overlays.dmi', color, hardpoint_object.mech_layer ) set_overlays(new_overlays) /mob/living/exosuit/proc/update_pilots(var/update_overlays = TRUE) @@ -91,7 +95,7 @@ var/diff_x = 8 - draw_pilot.pixel_x var/diff_y = 8 - draw_pilot.pixel_y draw_pilot.add_filter("pilot_mask", 1, list(type = "alpha", icon = icon(body.on_mech_icon, "[body.icon_state]_pilot_mask[hatch_closed ? "" : "_open"]", dir), x = diff_x, y = diff_y)) - + LAZYADD(pilot_overlays, draw_pilot) if(update_overlays && LAZYLEN(pilot_overlays)) overlays += pilot_overlays diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index 2268f62713d..0bb34504ad6 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -1,11 +1,11 @@ -/mob/living/exosuit/receive_mouse_drop(atom/dropping, mob/user) +/mob/living/exosuit/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && istype(dropping, /obj/machinery/portable_atmospherics/canister)) - body.receive_mouse_drop(dropping, user) + body.receive_mouse_drop(dropping, user, params) return TRUE -/mob/living/exosuit/handle_mouse_drop(atom/over, mob/user) - if(body?.handle_mouse_drop(over, user)) +/mob/living/exosuit/handle_mouse_drop(atom/over, mob/user, params) + if(body?.handle_mouse_drop(over, user, params)) return TRUE . = ..() @@ -81,12 +81,12 @@ if(!hatch_closed) return max(shared_living_nano_distance(src_object), .) //Either visible to mech(outside) or visible to user (inside) -/mob/living/exosuit/exosuit/CanUseTopic(mob/user, datum/topic_state/state, href_list) +/mob/living/exosuit/CanUseTopic(mob/user, datum/topic_state/state, href_list) if(user in pilots) return STATUS_INTERACTIVE return ..() -/mob/living/exosuit/get_dexterity(var/silent = FALSE) +/mob/living/exosuit/get_dexterity(var/silent) return DEXTERITY_FULL /mob/living/exosuit/ClickOn(var/atom/A, var/params, var/mob/user) @@ -161,6 +161,7 @@ var/system_moved = FALSE var/obj/item/temp_system var/obj/item/mech_equipment/ME + var/temp_old_anchored if(istype(selected_system, /obj/item/mech_equipment)) ME = selected_system temp_system = ME.get_effective_obj() @@ -169,6 +170,10 @@ temp_system.forceMove(src) else temp_system = selected_system + // Hackery for preventing embedding of melee weapons. + if(temp_system) + temp_old_anchored = temp_system.anchored + temp_system.anchored = TRUE // Slip up and attack yourself maybe. failed = FALSE @@ -208,8 +213,12 @@ ME = selected_system extra_delay = ME.equipment_delay setClickCooldown(arms ? arms.action_delay + extra_delay : 15 + extra_delay) - if(system_moved) - temp_system.forceMove(selected_system) + + if(!QDELETED(temp_system)) + if(system_moved) + temp_system.forceMove(selected_system) + temp_system.anchored = temp_old_anchored + current_user = null return @@ -252,7 +261,7 @@ if(!silent) to_chat(user, SPAN_WARNING("You cannot pilot an exosuit of this size.")) return FALSE - if(!user.Adjacent(src)) + if(!user.Adjacent(src) || user.buckled) return FALSE if(hatch_locked) if(!silent) @@ -327,15 +336,14 @@ /mob/living/exosuit/attackby(var/obj/item/thing, var/mob/user) + // Install equipment. if(user.a_intent != I_HURT && istype(thing, /obj/item/mech_equipment)) if(hardpoints_locked) to_chat(user, SPAN_WARNING("Hardpoint system access is disabled.")) - return - + return TRUE var/obj/item/mech_equipment/realThing = thing if(realThing.owner) - return - + return TRUE var/free_hardpoints = list() for(var/hardpoint in hardpoints) if(hardpoints[hardpoint] == null) @@ -343,12 +351,12 @@ var/to_place = input("Where would you like to install it?") as null|anything in (realThing.restricted_hardpoints & free_hardpoints) if(!to_place) to_chat(user, SPAN_WARNING("There is no room to install \the [thing].")) - if(install_system(thing, to_place, user)) - return - to_chat(user, SPAN_WARNING("\The [thing] could not be installed in that hardpoint.")) - return + else if(!install_system(thing, to_place, user)) + to_chat(user, SPAN_WARNING("\The [thing] could not be installed in that hardpoint.")) + return TRUE - else if(istype(thing, /obj/item/kit/paint)) + // Apply customisation. + if(istype(thing, /obj/item/kit/paint)) user.visible_message(SPAN_NOTICE("\The [user] opens \the [thing] and spends some quality time customising \the [src].")) var/obj/item/kit/paint/P = thing @@ -359,77 +367,83 @@ for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) comp.decal = P.new_state + if(!isnull(P.new_blend)) + for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) + comp.decal_blend = P.new_blend + if(P.new_icon) for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) comp.icon = P.new_icon - queue_icon_update() + update_icon() P.use(1, user) - return 1 - - else - if(user.a_intent != I_HURT) - if(IS_MULTITOOL(thing)) - if(hardpoints_locked) - to_chat(user, SPAN_WARNING("Hardpoint system access is disabled.")) - return - - var/list/parts = list() - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint]) - parts += hardpoint + return TRUE - var/to_remove = input("Which component would you like to remove") as null|anything in parts + // Various tool and construction interactions. + if(user.a_intent != I_HURT) - if(remove_system(to_remove, user)) - return + // Removing systems from hardpoints. + if(IS_MULTITOOL(thing)) + if(hardpoints_locked) + to_chat(user, SPAN_WARNING("Hardpoint system access is disabled.")) + return TRUE + var/list/parts = list() + for(var/hardpoint in hardpoints) + if(hardpoints[hardpoint]) + parts += hardpoint + var/to_remove = input("Which component would you like to remove") as null|anything in parts + if(!remove_system(to_remove, user)) to_chat(user, SPAN_WARNING("\The [src] has no hardpoint systems to remove.")) - return - else if(IS_WRENCH(thing)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The securing bolts are not visible while maintenance protocols are disabled.")) - return - - visible_message(SPAN_WARNING("\The [user] begins unwrenching the securing bolts holding \the [src] together.")) - var/delay = 60 * user.skill_delay_mult(SKILL_DEVICES) - if(!do_after(user, delay) || !maintenance_protocols) - return + return TRUE + + // Dismantling an exosuit entirely. + if(IS_WRENCH(thing)) + if(!maintenance_protocols) + to_chat(user, SPAN_WARNING("The securing bolts are not visible while maintenance protocols are disabled.")) + return TRUE + visible_message(SPAN_WARNING("\The [user] begins unwrenching the securing bolts holding \the [src] together.")) + var/delay = 60 * user.skill_delay_mult(SKILL_DEVICES) + if(do_after(user, delay) && maintenance_protocols) visible_message(SPAN_NOTICE("\The [user] loosens and removes the securing bolts, dismantling \the [src].")) dismantle() - return - else if(IS_WELDER(thing)) - if(!getBruteLoss()) - return - var/list/damaged_parts = list() - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC && MC.brute_damage) - damaged_parts += MC - var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts - if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.brute_damage) - to_fix.repair_brute_generic(thing, user) - return - else if(IS_COIL(thing)) - if(!getFireLoss()) - return - var/list/damaged_parts = list() - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC && MC.burn_damage) - damaged_parts += MC - var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts - if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.burn_damage) - to_fix.repair_burn_generic(thing, user) - return - else if(IS_SCREWDRIVER(thing)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) - return - if(!body || !body.cell) - to_chat(user, SPAN_WARNING("There is no cell here for you to remove!")) - return - var/delay = 20 * user.skill_delay_mult(SKILL_DEVICES) - if(!do_after(user, delay) || !maintenance_protocols || !body || !body.cell) - return + return TRUE + + // Brute damage repair. + if(IS_WELDER(thing)) + if(!getBruteLoss()) + return TRUE + var/list/damaged_parts = list() + for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) + if(MC && MC.brute_damage) + damaged_parts += MC + var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts + if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.brute_damage) + to_fix.repair_brute_generic(thing, user) + return TRUE + + // Burn damage repair. + if(IS_COIL(thing)) + if(!getFireLoss()) + return TRUE + var/list/damaged_parts = list() + for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) + if(MC && MC.burn_damage) + damaged_parts += MC + var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts + if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.burn_damage) + to_fix.repair_burn_generic(thing, user) + return TRUE + // Cell removal. + if(IS_SCREWDRIVER(thing)) + if(!maintenance_protocols) + to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) + return TRUE + if(!body || !body.cell) + to_chat(user, SPAN_WARNING("There is no cell here for you to remove!")) + return TRUE + var/delay = (2 SECONDS) * user.skill_delay_mult(SKILL_DEVICES) + if(do_after(user, delay) && maintenance_protocols && body?.cell) user.put_in_hands(body.cell) to_chat(user, SPAN_NOTICE("You remove \the [body.cell] from \the [src].")) playsound(user.loc, 'sound/items/Crowbar.ogg', 50, 1) @@ -437,17 +451,18 @@ power = MECH_POWER_OFF hud_power_control.queue_icon_update() body.cell = null - return - else if(IS_CROWBAR(thing)) - if(!hatch_locked) - to_chat(user, SPAN_NOTICE("The cockpit isn't locked. There is no need for this.")) - return - if(!body) //Error - return - var/delay = min(50 * user.skill_delay_mult(SKILL_DEVICES), 50 * user.skill_delay_mult(SKILL_EVA)) - visible_message(SPAN_NOTICE("\The [user] starts forcing the \the [src]'s emergency [body.hatch_descriptor] release using \the [thing].")) - if(!do_after(user, delay, src)) - return + return TRUE + + // Force-opening the cockpit. + if(IS_CROWBAR(thing)) + if(!hatch_locked) + to_chat(user, SPAN_NOTICE("The cockpit isn't locked. There is no need for this.")) + return TRUE + if(!body) //Error + return TRUE + var/delay = min(50 * user.skill_delay_mult(SKILL_DEVICES), 50 * user.skill_delay_mult(SKILL_EVA)) + visible_message(SPAN_NOTICE("\The [user] starts forcing the \the [src]'s emergency [body.hatch_descriptor] release using \the [thing].")) + if(do_after(user, delay, src)) visible_message(SPAN_NOTICE("\The [user] forces \the [src]'s [body.hatch_descriptor] open using the \the [thing].")) playsound(user.loc, 'sound/machines/bolts_up.ogg', 25, 1) hatch_locked = FALSE @@ -456,28 +471,32 @@ eject(pilot, silent = 1) hud_open.queue_icon_update() queue_icon_update() - return - else if(istype(thing, /obj/item/cell)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) - return - if(!body || body.cell) - to_chat(user, SPAN_WARNING("There is already a cell in there!")) - return - - if(user.try_unequip(thing)) - thing.forceMove(body) - body.cell = thing - to_chat(user, SPAN_NOTICE("You install \the [body.cell] into \the [src].")) - playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1) - visible_message(SPAN_NOTICE("\The [user] installs \the [body.cell] into \the [src].")) - return - else if(istype(thing, /obj/item/robotanalyzer)) - to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC) - MC.return_diagnostics(user) - return + return TRUE + + // Cell replacement. + if(istype(thing, /obj/item/cell)) + if(!maintenance_protocols) + to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) + return TRUE + if(body?.cell) + to_chat(user, SPAN_WARNING("There is already a cell in there!")) + return TRUE + if(user.try_unequip(thing)) + thing.forceMove(body) + body.cell = thing + to_chat(user, SPAN_NOTICE("You install \the [body.cell] into \the [src].")) + playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1) + visible_message(SPAN_NOTICE("\The [user] installs \the [body.cell] into \the [src].")) + return TRUE + + // Diagnostic scan. + if(istype(thing, /obj/item/robotanalyzer)) + to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) + for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) + if(MC) + MC.return_diagnostics(user) + return TRUE + return ..() /mob/living/exosuit/default_interaction(var/mob/user) diff --git a/code/modules/mechs/mech_life.dm b/code/modules/mechs/mech_life.dm index c000678ca65..362d51db819 100644 --- a/code/modules/mechs/mech_life.dm +++ b/code/modules/mechs/mech_life.dm @@ -1,7 +1,16 @@ /mob/living/exosuit/handle_disabilities() return -/mob/living/exosuit/Life() +/mob/living/exosuit/update_lying() + lying = FALSE // Prevent carp from proning us + +/mob/living/exosuit/handle_regular_status_updates() + + if(!body && !QDELETED(src)) + physically_destroyed() + return FALSE + + . = ..() for(var/thing in pilots) var/mob/pilot = thing @@ -12,20 +21,10 @@ UNSETEMPTY(pilots) update_pilots() - if(!body && !QDELETED(src)) - qdel(src) - return - if(radio) radio.on = (head && head.radio && head.radio.is_functional() && get_cell()) - body.update_air(hatch_closed && use_air) - - var/powered = FALSE - if(get_cell()) - powered = get_cell().drain_power(0, 0, calc_power_draw()) > 0 - - if(!powered) + if(!is_suit_powered()) //Shut down all systems if(head) head.active_sensors = FALSE @@ -35,18 +34,11 @@ if(istype(M) && M.active && M.passive_power_use) M.deactivate() - updatehealth() - if(health <= 0 && stat != DEAD) - death() - if(emp_damage > 0) emp_damage -= min(1, emp_damage) //Reduce emp accumulation over time - ..() //Handles stuff like environment - handle_hud_icons() - - lying = FALSE // Fuck off, carp. - handle_vision(powered) +/mob/living/exosuit/proc/is_suit_powered() + return (get_cell()?.drain_power(0, 0, calc_power_draw())) > 0 /mob/living/exosuit/get_cell(force) RETURN_TYPE(/obj/item/cell) @@ -73,7 +65,13 @@ /mob/living/exosuit/handle_environment(var/datum/gas_mixture/environment) ..() - if(!environment) return + + if(body) + body.update_air(hatch_closed && use_air) + + if(!environment) + return + //Mechs and vehicles in general can be assumed to just tend to whatever ambient temperature if(abs(environment.temperature - bodytemperature) > 0 ) bodytemperature += ((environment.temperature - bodytemperature) / 6) @@ -91,48 +89,57 @@ hud_heat.Update() -/mob/living/exosuit/death(var/gibbed) - // Eject the pilot. - if(LAZYLEN(pilots)) - hatch_locked = 0 // So they can get out. - for(var/pilot in pilots) - eject(pilot, silent=1) - new wreckage_path(get_turf(src), src, gibbed) - ..(gibbed, (gibbed ? "explodes!" : "grinds to a halt before collapsing!")) - -/mob/living/exosuit/gib(anim="gibbed-m",do_gibs) - death(1) - - // Get a turf to play with. - var/turf/T = get_turf(src) - if(!T) - qdel(src) - return +/mob/living/exosuit/death(gibbed) + . = ..() + if(.) + // Eject the pilot. + if(LAZYLEN(pilots)) + hatch_locked = 0 // So they can get out. + for(var/pilot in pilots) + eject(pilot, silent=1) + new wreckage_path(get_turf(src), src, gibbed) - // Hurl our component pieces about. - var/list/stuff_to_throw = list() - for(var/obj/item/thing in list(arms, legs, head, body)) - if(thing) stuff_to_throw += thing - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint]) - var/obj/item/thing = hardpoints[hardpoint] - thing.screen_loc = null - stuff_to_throw += thing - for(var/obj/item/thing in stuff_to_throw) - thing.forceMove(T) - thing.throw_at(get_edge_target_turf(src,pick(global.alldirs)),rand(3,6),40) - explosion(T, -1, 0, 2) - qdel(src) - return +/mob/living/exosuit/get_death_message(gibbed) + return gibbed ? "explodes!" : "grinds to a halt before collapsing!" -/mob/living/exosuit/handle_vision(powered) +/mob/living/exosuit/get_gibbed_state(dusted) + return null + +/mob/living/exosuit/get_gibbed_icon() + return null + +/mob/living/exosuit/gib(do_gibs = TRUE) + SHOULD_CALL_PARENT(FALSE) + if(stat != DEAD) + death(gibbed = TRUE) + if(stat == DEAD) + // Get a turf to play with. + var/turf/T = get_turf(src) + if(T) + // Hurl our component pieces about. + var/list/stuff_to_throw = list() + for(var/obj/item/thing in list(arms, legs, head, body)) + if(thing) + stuff_to_throw += thing + for(var/hardpoint in hardpoints) + if(hardpoints[hardpoint]) + var/obj/item/thing = hardpoints[hardpoint] + thing.screen_loc = null + stuff_to_throw += thing + for(var/obj/item/thing in stuff_to_throw) + thing.forceMove(T) + thing.throw_at(get_edge_target_turf(src,pick(global.alldirs)),rand(3,6),40) + explosion(T, -1, 0, 2) + qdel(src) + +/mob/living/exosuit/handle_vision() var/was_blind = sight & BLIND if(head) + var/powered = is_suit_powered() sight = head.get_sight(powered) see_invisible = head.get_invisible(powered) if(body && (body.pilot_coverage < 100 || body.transparent_cabin) || !hatch_closed) sight &= ~BLIND - if(sight & BLIND && !was_blind) for(var/mob/pilot in pilots) to_chat(pilot, SPAN_WARNING("The sensors are not operational and you cannot see a thing!")) diff --git a/code/modules/mechs/mech_movement.dm b/code/modules/mechs/mech_movement.dm index 6f926046cfa..84f8f792e0d 100644 --- a/code/modules/mechs/mech_movement.dm +++ b/code/modules/mechs/mech_movement.dm @@ -41,7 +41,7 @@ /datum/movement_handler/mob/delay/exosuit expected_host_type = /mob/living/exosuit -/datum/movement_handler/mob/delay/exosuit/MayMove(mover, is_external) +/datum/movement_handler/mob/delay/exosuit/MayMove(mob/mover, is_external) var/mob/living/exosuit/exosuit = host if(mover && (mover != exosuit) && (!(mover in exosuit.pilots)) && is_external) return MOVEMENT_PROCEED @@ -49,7 +49,7 @@ return MOVEMENT_PROCEED return MOVEMENT_STOP -/datum/movement_handler/mob/delay/exosuit/DoMove(direction, mover, is_external) //Delay must be handled by other handlers. +/datum/movement_handler/mob/delay/exosuit/DoMove(direction, mob/mover, is_external) //Delay must be handled by other handlers. return /mob/living/exosuit/SetMoveCooldown(timeout) @@ -65,7 +65,7 @@ /datum/movement_handler/mob/exosuit expected_host_type = /mob/living/exosuit -/datum/movement_handler/mob/exosuit/MayMove(var/mob/mover, var/is_external) +/datum/movement_handler/mob/exosuit/MayMove(mob/mover, is_external) var/mob/living/exosuit/exosuit = host if((!(mover in exosuit.pilots) && mover != exosuit) || exosuit.incapacitated() || mover.incapacitated()) return MOVEMENT_STOP @@ -89,7 +89,7 @@ return MOVEMENT_PROCEED -/datum/movement_handler/mob/exosuit/DoMove(var/direction, var/mob/mover, var/is_external) +/datum/movement_handler/mob/exosuit/DoMove(direction, mob/mover, is_external) var/mob/living/exosuit/exosuit = host var/moving_dir = direction @@ -119,16 +119,17 @@ if(target_loc && exosuit.legs && exosuit.legs.can_move_on(exosuit.loc, target_loc) && exosuit.MayEnterTurf(target_loc)) exosuit.Move(target_loc) return MOVEMENT_HANDLED + /datum/movement_handler/mob/space/exosuit expected_host_type = /mob/living/exosuit // Space movement -/datum/movement_handler/mob/space/exosuit/DoMove(var/direction, var/mob/mover) +/datum/movement_handler/mob/space/exosuit/DoMove(direction, mob/mover, is_external) if(!mob.has_gravity() && (!allow_move || (allow_move == -1 && mob.handle_spaceslipping()))) return MOVEMENT_HANDLED mob.inertia_dir = 0 -/datum/movement_handler/mob/space/exosuit/MayMove(var/mob/mover, var/is_external) +/datum/movement_handler/mob/space/exosuit/MayMove(mob/mover, is_external) if((mover != host) && is_external) return MOVEMENT_PROCEED diff --git a/code/modules/mechs/premade/_premade.dm b/code/modules/mechs/premade/_premade.dm index 02caca0a7a7..77914bfc25d 100644 --- a/code/modules/mechs/premade/_premade.dm +++ b/code/modules/mechs/premade/_premade.dm @@ -4,23 +4,33 @@ name = "impossible exosuit" desc = "It seems to be saying 'please let me die'." abstract_type = /mob/living/exosuit/premade + icon = 'icons/mecha/mecha_preview.dmi' + icon_state = "preview" + pixel_x = 0 + pixel_y = 0 var/decal + var/decal_blend = BLEND_MULTIPLY /mob/living/exosuit/premade/Initialize() - if(arms) - arms.decal = decal - arms.prebuild() - if(legs) - legs.decal = decal - legs.prebuild() - if(head) - head.decal = decal - head.prebuild() - if(body) - body.decal = decal - body.prebuild() + + // Reset our mapping helpers. + default_pixel_x = -8 + default_pixel_y = 0 + pixel_x = default_pixel_x + pixel_y = default_pixel_y + icon = null + icon_state = null + + for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) + if(decal) + comp.decal = decal + if(!isnull(decal_blend)) + comp.decal_blend = decal_blend + comp.prebuild() + if(!material) material = GET_DECL(/decl/material/solid/metal/steel) + . = ..() spawn_mech_equipment() diff --git a/code/modules/mechs/premade/powerloader.dm b/code/modules/mechs/premade/powerloader.dm index ef1e7fecc0f..20c9babd52f 100644 --- a/code/modules/mechs/premade/powerloader.dm +++ b/code/modules/mechs/premade/powerloader.dm @@ -105,18 +105,19 @@ /mob/living/exosuit/premade/powerloader/mechete/spawn_mech_equipment() install_system(new /obj/item/mech_equipment/ballistic_shield(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/melee/mechete(src), HARDPOINT_RIGHT_HAND) + install_system(new /obj/item/mech_equipment/mounted_system/melee/machete(src), HARDPOINT_RIGHT_HAND) /mob/living/exosuit/premade/powerloader/flames_red name = "APLU \"Firestarter\"" desc = "An ancient, but well-liked cargo handling exosuit. This one has cool red flames." decal = "flames_red" + decal_blend = BLEND_OVERLAY /mob/living/exosuit/premade/powerloader/flames_blue name = "APLU \"Burning Chrome\"" desc = "An ancient, but well-liked cargo handling exosuit. This one has cool blue flames." decal = "flames_blue" - + decal_blend = BLEND_OVERLAY /mob/living/exosuit/premade/firefighter name = "firefighting exosuit" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 056313c206c..9d96167cbee 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -27,7 +27,7 @@ new /obj/item/chems/food/grown/ambrosiadeus(src) new /obj/item/flame/lighter/zippo(src) if(6 to 10) - new /obj/item/pickaxe/drill(src) + new /obj/item/tool/drill(src) new /obj/item/taperecorder(src) new /obj/item/clothing/suit/space(src) new /obj/item/clothing/head/helmet/space(src) @@ -80,17 +80,17 @@ var/newitem = pick(subtypesof(/obj/item/stock_parts) - /obj/item/stock_parts/subspace) new newitem(src) if(69 to 70) - new /obj/item/pickaxe/silver(src) + new /obj/item/tool/pickaxe/titanium(src) if(71 to 72) - new /obj/item/pickaxe/drill(src) + new /obj/item/tool/drill(src) if(73 to 74) - new /obj/item/pickaxe/jackhammer(src) + new /obj/item/tool/hammer/jack(src) if(75 to 76) - new /obj/item/pickaxe/diamond(src) + new /obj/item/tool/pickaxe/ocp(src) if(77 to 78) - new /obj/item/pickaxe/diamonddrill(src) + new /obj/item/tool/drill/diamond(src) if(79 to 80) - new /obj/item/pickaxe/gold(src) + new /obj/item/tool/pickaxe/plasteel(src) if(81 to 82) new /obj/item/gun/energy/plasmacutter(src) if(83 to 84) diff --git a/code/modules/mining/drilling/drill_act.dm b/code/modules/mining/drilling/drill_act.dm index d75e5162716..bca8f07cc86 100644 --- a/code/modules/mining/drilling/drill_act.dm +++ b/code/modules/mining/drilling/drill_act.dm @@ -1,5 +1,7 @@ /turf/proc/drill_act() SHOULD_CALL_PARENT(TRUE) + drop_diggable_resources() + dig_pit() var/base_turf = get_base_turf_by_area(src) if(!istype(src, base_turf)) return ChangeTurf(base_turf) @@ -17,28 +19,3 @@ /turf/space/drill_act() SHOULD_CALL_PARENT(FALSE) - -/turf/simulated/open/drill_act() - SHOULD_CALL_PARENT(FALSE) - var/turf/T = GetBelow(src) - if(istype(T)) - T.drill_act() - -/turf/exterior/open/drill_act() - SHOULD_CALL_PARENT(FALSE) - var/turf/T = GetBelow(src) - if(istype(T)) - T.drill_act() - -/turf/exterior/drill_act() - var/turf/exterior/digging = ..() - if(istype(digging) && digging.diggable) - new /obj/structure/pit(digging) - digging.diggable = FALSE - return digging - -/turf/simulated/floor/asteroid/drill_act() - var/turf/simulated/floor/asteroid/digging = ..() - if(istype(digging) && !digging.dug) - digging.gets_dug() - return digging \ No newline at end of file diff --git a/code/modules/mining/machinery/_material_processing.dm b/code/modules/mining/machinery/_material_processing.dm index 0d20dfaf71b..f149ec055a4 100644 --- a/code/modules/mining/machinery/_material_processing.dm +++ b/code/modules/mining/machinery/_material_processing.dm @@ -90,7 +90,7 @@ /obj/machinery/material_processing/Destroy() input_turf = null output_turf = null - events_repository.unregister(/decl/observ/moved, src, src, .proc/on_moved) + events_repository.unregister(/decl/observ/moved, src, src, PROC_REF(on_moved)) . = ..() /obj/machinery/material_processing/Initialize() @@ -99,7 +99,7 @@ SET_OUTPUT(output_turf) . = ..() queue_icon_update() - events_repository.register(/decl/observ/moved, src, src, .proc/on_moved) + events_repository.register(/decl/observ/moved, src, src, PROC_REF(on_moved)) /obj/machinery/material_processing/proc/on_moved(atom/moving, atom/old_loc, atom/new_loc) if(istype(input_turf, /turf)) diff --git a/code/modules/mining/machinery/material_extractor.dm b/code/modules/mining/machinery/material_extractor.dm index ce75a62e0ed..08c9ad8b7f3 100644 --- a/code/modules/mining/machinery/material_extractor.dm +++ b/code/modules/mining/machinery/material_extractor.dm @@ -88,7 +88,7 @@ if(eating.reagents?.total_volume) eating.reagents.trans_to_obj(src, eating.reagents.total_volume) for(var/mtype in eating.matter) - reagents.add_reagent(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) + add_to_reagents(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) qdel(eating) if(eaten >= MAX_INTAKE_ORE_PER_TICK) break @@ -130,7 +130,7 @@ if(processed_mols) // The ratio processed_moles/moles gives us the ratio of the reagent volume to what should be removed // since the mole to unit conversion is linear. - reagents.remove_reagent(mtype, reagent_vol*(processed_mols/mols), defer_update = TRUE) + remove_from_reagents(mtype, reagent_vol*(processed_mols/mols), defer_update = TRUE) use_power_oneoff(power_draw_per_mol*mols) // Still somewhat arbitary @@ -148,7 +148,7 @@ if(sheets > 0) // If we can't process any sheets at all, leave it for manual processing. adjusted_reagents = TRUE SSmaterials.create_object(mtype, output_turf, sheets) - reagents.remove_reagent(mtype, removing) + remove_from_reagents(mtype, removing) return adjusted_reagents @@ -173,7 +173,7 @@ if(!user.try_unequip(I, src)) return output_container = I - events_repository.register(/decl/observ/destroyed, output_container, src, /obj/machinery/material_processing/extractor/proc/remove_container) + events_repository.register(/decl/observ/destroyed, output_container, src, TYPE_PROC_REF(/obj/machinery/material_processing/extractor, remove_container)) user.visible_message(SPAN_NOTICE("\The [user] places \a [I] in \the [src]."), SPAN_NOTICE("You place \a [I] in \the [src].")) return @@ -185,7 +185,7 @@ if(!output_container) return . = output_container - events_repository.unregister(/decl/observ/destroyed, output_container, src, /obj/machinery/material_processing/extractor/proc/remove_container) + events_repository.unregister(/decl/observ/destroyed, output_container, src, TYPE_PROC_REF(/obj/machinery/material_processing/extractor, remove_container)) output_container = null /obj/machinery/material_processing/extractor/OnTopic(var/mob/user, var/list/href_list) diff --git a/code/modules/mining/machinery/material_smelter.dm b/code/modules/mining/machinery/material_smelter.dm index a696a6a28cc..188fe797b5c 100644 --- a/code/modules/mining/machinery/material_smelter.dm +++ b/code/modules/mining/machinery/material_smelter.dm @@ -38,10 +38,10 @@ var/adjusted_air = FALSE for(var/mtype in reagents?.reagent_volumes) var/decl/material/mat = GET_DECL(mtype) - if(mat.boiling_point && temperature >= mat.boiling_point) + if(!isnull(mat.boiling_point) && temperature >= mat.boiling_point) adjusted_air = TRUE var/removing = REAGENT_VOLUME(reagents, mtype) - reagents.remove_reagent(mtype, removing, defer_update = TRUE) + remove_from_reagents(mtype, removing, defer_update = TRUE) if(environment) environment.adjust_gas_temp(mtype, (removing * 0.2), temperature, FALSE) // Arbitrary conversion constant, TODO consistent one @@ -56,7 +56,7 @@ /obj/machinery/material_processing/smeltery/ProcessAtomTemperature() if(use_power) if(temperature < HIGH_SMELTING_HEAT_POINT) - temperature = min(temperature + rand(1000, 2000), HIGH_SMELTING_HEAT_POINT) + temperature = min(temperature + rand(100, 200), HIGH_SMELTING_HEAT_POINT) else if(temperature > HIGH_SMELTING_HEAT_POINT) temperature = HIGH_SMELTING_HEAT_POINT return TRUE @@ -70,7 +70,7 @@ /obj/machinery/material_processing/smeltery/proc/can_eat(var/obj/item/eating) for(var/mtype in eating.matter) var/decl/material/mat = GET_DECL(mtype) - if(mat.melting_point > temperature) + if(isnull(mat.melting_point) || mat.melting_point > temperature) return FALSE return TRUE @@ -92,7 +92,7 @@ if(eating.reagents?.total_volume) eating.reagents.trans_to_obj(src, FLOOR(eating.reagents.total_volume * 0.75)) // liquid reagents, lossy for(var/mtype in eating.matter) - reagents.add_reagent(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) + add_to_reagents(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) qdel(eating) if(eaten >= MAX_INTAKE_ORE_PER_TICK) break @@ -103,7 +103,7 @@ continue visible_message(SPAN_DANGER("\The [src] rips \the [H]'s [eating.name] clean off!")) for(var/mtype in eating.matter) - reagents.add_reagent(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) + add_to_reagents(mtype, FLOOR(eating.matter[mtype] * REAGENT_UNITS_PER_MATERIAL_UNIT)) eating.dismember(silent = TRUE) qdel(eating) break @@ -114,7 +114,7 @@ var/samt = FLOOR((ramt / REAGENT_UNITS_PER_MATERIAL_UNIT) / SHEET_MATERIAL_AMOUNT) if(samt > 0) SSmaterials.create_object(mtype, output_turf, samt) - reagents.remove_reagent(mtype, ramt) + remove_from_reagents(mtype, ramt) /obj/machinery/material_processing/smeltery/Topic(var/user, var/list/href_list) . = ..() diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index a1f53ff3004..2f935efd076 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -4,6 +4,8 @@ name = "miner's equipment" closet_appearance = /decl/closet_appearance/secure_closet/mining req_access = list(access_mining) + //mapper preview + color = COLOR_WARM_YELLOW /obj/structure/closet/secure_closet/miner/WillContain() return list( @@ -18,166 +20,14 @@ /obj/item/scanner/gas, /obj/item/storage/ore, /obj/item/flashlight/lantern, - /obj/item/shovel, - /obj/item/pickaxe, + /obj/item/tool/shovel, + /obj/item/tool/pickaxe, /obj/item/clothing/glasses/meson ) -/**********'pickaxes' but theyre drills actually***************/ - -/obj/item/pickaxe - name = "mining drill" - desc = "The most basic of mining drills, for short excavations and small mineral extractions." - icon = 'icons/obj/items/tool/drills/drill.dmi' - icon_state = ICON_STATE_WORLD - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_LOWER_BODY - force = 15.0 - throwforce = 4 - w_class = ITEM_SIZE_HUGE - material = /decl/material/solid/metal/steel - origin_tech = "{'materials':1,'engineering':1}" - attack_verb = list("hit", "pierced", "sliced", "attacked") - sharp = 0 - - var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO - var/drill_sound = 'sound/weapons/Genhit.ogg' - var/drill_verb = "drilling" - var/excavation_amount = 200 - var/build_from_parts = FALSE - var/hardware_color - -/obj/item/pickaxe/on_update_icon() - . = ..() - if(build_from_parts) - color = hardware_color - var/image/I = image(icon, "[icon_state]-handle") - I.appearance_flags |= RESET_COLOR - add_overlay(I) - -/obj/item/pickaxe/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) - if(overlay && build_from_parts && check_state_in_icon("[overlay.icon_state]-handle", overlay.icon)) - var/image/handle = image(overlay.icon, "[overlay.icon_state]-handle") - handle.appearance_flags |= RESET_COLOR - overlay.overlays += handle - . = ..() - -/obj/item/pickaxe/hammer - name = "sledgehammer" - desc = "A mining hammer made of reinforced metal. You feel like smashing your boss in the face with this." - icon = 'icons/obj/items/tool/drills/sledgehammer.dmi' - -/obj/item/pickaxe/drill - name = "advanced mining drill" // Can dig sand as well! - icon = 'icons/obj/items/tool/drills/drill_hand.dmi' - digspeed = 30 - origin_tech = "{'materials':2,'powerstorage':3,'engineering':2}" - desc = "Yours is the drill that will pierce through the rock walls." - drill_verb = "drilling" - material = /decl/material/solid/metal/steel - matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - -/obj/item/pickaxe/drill/Initialize(ml, material_key) - . = ..() - set_extension(src, /datum/extension/tool, list(TOOL_DRILL = TOOL_QUALITY_MEDIOCRE)) - -/obj/item/pickaxe/jackhammer - name = "sonic jackhammer" - icon = 'icons/obj/items/tool/drills/jackhammer.dmi' - digspeed = 20 //faster than drill, but cannot dig - origin_tech = "{'materials':3,'powerstorage':2,'engineering':2}" - desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." - drill_verb = "hammering" - -/obj/item/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! - name = "diamond mining drill" - icon = 'icons/obj/items/tool/drills/drill_diamond.dmi' - digspeed = 5 //Digs through walls, girders, and can dig up sand - origin_tech = "{'materials':6,'powerstorage':4,'engineering':5}" - desc = "Yours is the drill that will pierce the heavens!" - drill_verb = "drilling" - material = /decl/material/solid/metal/steel - matter = list( - /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, - /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE - ) - -/obj/item/pickaxe/borgdrill - name = "cyborg mining drill" - icon = 'icons/obj/items/tool/drills/drill_diamond.dmi' - digspeed = 15 - desc = "" - drill_verb = "drilling" - -//****************************actual pickaxes*********************** -/obj/item/pickaxe/silver - name = "silver pickaxe" - desc = "This makes no metallurgic sense." - icon_state = "preview" - icon = 'icons/obj/items/tool/drills/pickaxe.dmi' - digspeed = 30 - origin_tech = "{'materials':3}" - drill_verb = "picking" - sharp = 1 - build_from_parts = TRUE - hardware_color = COLOR_SILVER - -/obj/item/pickaxe/gold - name = "golden pickaxe" - desc = "This makes no metallurgic sense." - icon_state = "preview" - icon = 'icons/obj/items/tool/drills/pickaxe.dmi' - digspeed = 20 - origin_tech = "{'materials':4}" - drill_verb = "picking" - sharp = 1 - build_from_parts = TRUE - hardware_color = COLOR_GOLD - -/obj/item/pickaxe/diamond - name = "diamond pickaxe" - desc = "A pickaxe with a diamond pick head." - icon_state = "preview" - icon = 'icons/obj/items/tool/drills/pickaxe.dmi' - digspeed = 10 - origin_tech = "{'materials':6,'engineering':4}" - drill_verb = "picking" - sharp = 1 - build_from_parts = TRUE - hardware_color = COLOR_DIAMOND - material = /decl/material/solid/gemstone/diamond /*****************************Shovel********************************/ -/obj/item/shovel - name = "shovel" - desc = "A large tool for digging and moving dirt." - icon = 'icons/obj/items/tool/shovels/shovel.dmi' - icon_state = ICON_STATE_WORLD - slot_flags = SLOT_LOWER_BODY - force = 8.0 - throwforce = 4 - w_class = ITEM_SIZE_HUGE - origin_tech = "{'materials':1,'engineering':1}" - material = /decl/material/solid/metal/steel - attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") - edge = 1 - var/tmp/shovel_quality = TOOL_QUALITY_DEFAULT - -/obj/item/shovel/Initialize(ml, material_key) - . = ..() - set_extension(src, /datum/extension/tool, list(TOOL_SHOVEL = shovel_quality)) - -/obj/item/shovel/spade - name = "spade" - desc = "A small tool for digging and moving dirt." - icon = 'icons/obj/items/tool/shovels/spade.dmi' - icon_state = ICON_STATE_WORLD - force = 5.0 - throwforce = 7 - w_class = ITEM_SIZE_SMALL - shovel_quality = TOOL_QUALITY_BAD //You're not gonna dig a trench with a garden spade.. - // Flags. /obj/item/stack/flag name = "beacon" @@ -237,7 +87,7 @@ if(use(1)) // Don't skip use() checks even if you only need one! Stacks with the amount of 0 are possible, e.g. on synthetics! var/obj/item/stack/flag/newflag = new src.type(T, 1) newflag.set_up() - if(istype(T, /turf/simulated/floor/asteroid) || istype(T, /turf/exterior)) + if(istype(T, /turf/exterior)) user.visible_message("\The [user] plants \the [newflag.singular_name] firmly in the ground.") else user.visible_message("\The [user] attaches \the [newflag.singular_name] firmly to the ground.") diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 2459a3f49f3..3c6fc667459 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -6,144 +6,3 @@ density = TRUE opacity = TRUE turf_flags = TURF_IS_HOLOMAP_OBSTACLE - -/**********************Asteroid**************************/ -// Setting icon/icon_state initially will use these values when the turf is built on/replaced. -// This means you can put grass on the asteroid etc. -/turf/simulated/floor/asteroid - name = "sand" - icon = 'icons/turf/flooring/asteroid.dmi' - icon_state = "asteroid" - base_name = "sand" - base_desc = "Gritty and unpleasant." - base_icon = 'icons/turf/flooring/asteroid.dmi' - base_icon_state = "asteroid" - footstep_type = /decl/footsteps/asteroid - initial_flooring = null - initial_gas = null - temperature = TCMB - turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_PATH - - var/dug = 0 //0 = has not yet been dug, 1 = has already been dug //#TODO: This should probably be generalised? - var/overlay_detail - -/turf/simulated/floor/asteroid/Initialize() - if(prob(20)) - overlay_detail = "asteroid[rand(0,9)]" - . = ..() - var/datum/level_data/mining_level/level = SSmapping.levels_by_z[z] - if(istype(level)) - LAZYADD(level.mining_turfs, src) - -/turf/simulated/floor/asteroid/Destroy() - var/datum/level_data/mining_level/level = SSmapping.levels_by_z[z] - if(istype(level)) - LAZYREMOVE(level.mining_turfs, src) - return ..() - -/turf/simulated/floor/asteroid/explosion_act(severity) - SHOULD_CALL_PARENT(FALSE) - if(severity == 1 || (severity == 2 && prob(70))) - gets_dug() - -/turf/simulated/floor/asteroid/is_plating() - return !density - -//#TODO: This should probably be generalised? -/turf/simulated/floor/asteroid/attackby(obj/item/W, mob/user) - if(!W || !user) - return 0 - - var/list/usable_tools = list( - /obj/item/shovel, - /obj/item/pickaxe/diamonddrill, - /obj/item/pickaxe/drill, - /obj/item/pickaxe/borgdrill - ) - - var/valid_tool - for(var/valid_type in usable_tools) - if(istype(W,valid_type)) - valid_tool = 1 - break - - if(valid_tool) - if (dug) - to_chat(user, "This area has already been dug") - return TRUE - - var/turf/T = user.loc - if (!(istype(T))) - return - - to_chat(user, "You start digging.") - playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1) - . = TRUE - - if(!do_after(user,40, src)) return - - to_chat(user, "You dug a hole.") - gets_dug() - - else if(istype(W,/obj/item/storage/ore)) //#FIXME: Its kinda silly to put this in a specific turf's subtype's attackby. - var/obj/item/storage/ore/S = W - if(S.collection_mode) - for(var/obj/item/stack/material/ore/O in contents) - return O.attackby(W,user) - else if(istype(W,/obj/item/storage/bag/fossils)) - var/obj/item/storage/bag/fossils/S = W - if(S.collection_mode) - for(var/obj/item/fossil/F in contents) - return F.attackby(W,user) - - else - return ..(W,user) - -//#TODO: This should probably be generalised? -/turf/simulated/floor/asteroid/proc/gets_dug() - if(dug) - return - LAZYADD(., new /obj/item/stack/material/ore/glass(src, (rand(3) + 2))) - dug = TRUE - icon_state = "asteroid_dug" - -//#TODO: This should probably be generalised? -/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors) - - overlays.Cut() - - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - for(var/direction in step_overlays) - - if(isspaceturf(get_step(src, step_overlays[direction]))) - var/image/aster_edge = image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = step_overlays[direction]) - aster_edge.layer = DECAL_LAYER - overlays += aster_edge - - if(overlay_detail) - var/image/floor_decal = image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail) - floor_decal.layer = DECAL_LAYER - overlays |= floor_decal - - if(update_neighbors) - var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST) - for(var/direction in all_step_directions) - var/turf/simulated/floor/asteroid/A - if(istype(get_step(src, direction), /turf/simulated/floor/asteroid)) - A = get_step(src, direction) - A.updateMineralOverlays() - -//#TODO: This should probably be generalised? -/turf/simulated/floor/asteroid/Entered(atom/movable/M) - ..() - if(isrobot(M)) - var/mob/living/silicon/robot/R = M - if(R.module) - if(istype(R.module_state_1,/obj/item/storage/ore)) - attackby(R.module_state_1,R) - else if(istype(R.module_state_2,/obj/item/storage/ore)) - attackby(R.module_state_2,R) - else if(istype(R.module_state_3,/obj/item/storage/ore)) - attackby(R.module_state_3,R) - else - return diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index 7bb8b5da341..36127c24bca 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -51,7 +51,7 @@ for(var/obj/item/stack/material/ore/O in ores) if(total_ores >= maximum_ores) if(user) - to_chat(user, SPAN_WARNING("You insert only what you can..")) + to_chat(user, SPAN_WARNING("You insert only what you can.")) break inserted += O.amount insert_ore(O) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index 179cc5d85e2..65588e50446 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -20,7 +20,8 @@ /mob/proc/start_floating() - is_floating = 1 + is_floating = TRUE + update_turf_alpha_mask() var/amplitude = 2 //maximum displacement from original position var/period = 36 //time taken for the mob to go up > down > original position, in deciseconds. Should be multiple of 4 @@ -37,7 +38,8 @@ /mob/proc/stop_floating() animate(src, pixel_z = default_pixel_z, time = 5, easing = SINE_EASING | EASE_IN) //halt animation //reset the pixel offsets to zero - is_floating = 0 + is_floating = FALSE + update_turf_alpha_mask() /atom/movable/proc/do_attack_animation(atom/A, atom/movable/weapon) @@ -73,6 +75,9 @@ sleep(4) reset_offsets() + if(buckled_mob) + buckled_mob.do_attack_animation(A, weapon) + /mob/proc/clear_shown_overlays(var/list/show_to, var/image/I) for(var/client/C in show_to) C.images -= I @@ -93,10 +98,10 @@ I.appearance = weapon I.plane = DEFAULT_PLANE I.layer = A.layer + 0.1 - I.pixel_x = 0 - I.pixel_y = 0 - I.pixel_z = 0 - I.pixel_w = 0 + I.pixel_x = -(A.pixel_x) + I.pixel_y = -(A.pixel_y) + I.pixel_z = -(A.pixel_z) + I.pixel_w = -(A.pixel_w) // Who can see the attack? var/list/viewing = list() @@ -106,27 +111,27 @@ for(var/client/C in viewing) C.images += I - addtimer(CALLBACK(src, .proc/clear_shown_overlays, viewing, I), 5) + addtimer(CALLBACK(src, PROC_REF(clear_shown_overlays), viewing, I), 5) // Scale the icon. I.transform *= 0.75 // Set the direction of the icon animation. var/direction = get_dir(src, A) if(direction & NORTH) - I.pixel_y = -16 + I.pixel_y -= 16 else if(direction & SOUTH) - I.pixel_y = 16 + I.pixel_y += 16 if(direction & EAST) - I.pixel_x = -16 + I.pixel_x -= 16 else if(direction & WEST) - I.pixel_x = 16 + I.pixel_x += 16 if(!direction) // Attacked self?! - I.pixel_z = 16 + I.pixel_z += 16 // And animate the attack! - animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) + animate(I, alpha = 175, pixel_x = -(A.pixel_x), pixel_y = -(A.pixel_y), pixel_z = -(A.pixel_z), pixel_w = -(A.pixel_w), time = 3) /mob/proc/spin(spintime, speed) spawn() @@ -159,3 +164,25 @@ return playsound(T, "sparks", 50, 1) anim(src,'icons/mob/mob.dmi',,"phaseout",,dir) + +// Similar to attack animations, but in reverse and is longer to act as a telegraph. +/atom/movable/proc/do_windup_animation(atom/A, windup_time, no_reset) + + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + + var/direction = get_dir(src, A) + if(direction & NORTH) + pixel_y_diff = -8 + else if(direction & SOUTH) + pixel_y_diff = 8 + if(direction & EAST) + pixel_x_diff = -8 + else if(direction & WEST) + pixel_x_diff = 8 + + if(no_reset) + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time) + else + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time-2) + animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 35f46d326c7..547dfcfd833 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -1,58 +1,88 @@ -//This is the proc for gibbing a mob. Cannot gib ghosts. -//added different sort of gibs and animations. N -/mob/proc/gib(anim="gibbed-m",do_gibs) - set waitfor = FALSE - death(1) +/mob/proc/handle_existence_failure(dusted) + + // Make sure they're actually dead. + if(stat != DEAD) + death(gibbed = TRUE) + if(stat != DEAD) + return FALSE + ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) + + var/animation_state = get_gibbed_state(dusted) + var/animation_icon = get_gibbed_icon() // Needs to be done before nulling icon below. + icon = null set_invisibility(INVISIBILITY_ABSTRACT) - UpdateLyingBuckledAndVerbStatus() - remove_from_dead_mob_list() dump_contents() + QDEL_IN(src, 1.5 SECONDS) + + if(animation_state && animation_icon) + var/atom/movable/overlay/animation + animation = new(loc) + animation.icon_state = "blank" + animation.icon = animation_icon + animation.master = src + flick(animation_state, animation) + QDEL_IN(animation, 1.5 SECONDS) + + return TRUE - var/atom/movable/overlay/animation = new(src) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' +/mob/proc/get_dusted_remains() + var/decl/species/my_species = get_species() + return my_species ? my_species.remains_type : /obj/effect/decal/cleanable/ash - flick(anim, animation) - if(do_gibs) - gibs(loc, _blood_type = get_blood_type(), _unique_enzymes = get_unique_enzymes()) +/mob/proc/get_gibbed_state(dusted) + var/decl/species/my_species = get_species() + if(dusted) + return my_species ? my_species.dusted_anim : "dust-m" + return my_species ? my_species.gibbed_anim : "gibbed-m" - QDEL_IN(animation, 15) - QDEL_IN(src, 15) +/mob/proc/get_gibbed_icon() + return 'icons/mob/mob.dmi' +//This is the proc for gibbing a mob. Cannot gib ghosts. +//added different sort of gibs and animations. N +/mob/proc/gib(do_gibs = TRUE) + SHOULD_CALL_PARENT(TRUE) + set waitfor = FALSE + var/lastloc = loc + . = handle_existence_failure(dusted = FALSE) + if(. && do_gibs) + spawn_gibber(lastloc) //This is the proc for turning a mob into ash. Mostly a copy of gib code (above). //Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here. -//Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N -/mob/proc/dust(anim="dust-m",remains=/obj/effect/decal/cleanable/ash) - death(1) - var/atom/movable/overlay/animation = null - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(INVISIBILITY_ABSTRACT) +//Dusting robots does not eject the brain, so it's a bit more powerful than gib() /N +/mob/proc/dust() + SHOULD_CALL_PARENT(TRUE) + set waitfor = FALSE + var/lastloc = loc + . = handle_existence_failure(dusted = TRUE) + if(. && lastloc) + var/remains = get_dusted_remains() + if(remains) + new remains(lastloc) - animation = new(loc) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src +/mob/proc/get_death_message(gibbed) + return SKIP_DEATH_MESSAGE - flick(anim, animation) - new remains(loc) +/mob/proc/get_self_death_message(gibbed) + return "You have died." - remove_from_dead_mob_list() - QDEL_IN(animation, 15) - QDEL_IN(src, 15) +/mob/proc/death(gibbed) -/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...", show_dead_message = "You have died.") + SHOULD_CALL_PARENT(TRUE) if(stat == DEAD) - return 0 + return FALSE + walk(src, 0) facing_dir = null - if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it. - src.visible_message("\The [src.name] [deathmessage]") + if(!gibbed) + var/death_message = get_death_message(gibbed) + if(death_message != SKIP_DEATH_MESSAGE) + visible_message("\The [src] [death_message]") for(var/obj/item/organ/O in get_organs()) O.on_holder_death(gibbed) @@ -90,5 +120,9 @@ if(SSticker.mode) SSticker.mode.check_win() - to_chat(src,"[show_dead_message]") - return 1 + + var/show_dead_message = get_self_death_message(gibbed) + if(show_dead_message) + to_chat(src,"[show_dead_message]") + + return TRUE diff --git a/code/modules/mob/examine.dm b/code/modules/mob/examine.dm index 1026da99b4d..e2c78710061 100644 --- a/code/modules/mob/examine.dm +++ b/code/modules/mob/examine.dm @@ -58,12 +58,3 @@ show_examined_worn_held_items(user, distance, infix, suffix, hideflags, pronouns) show_other_examine_strings(user, distance, infix, suffix, hideflags, pronouns) to_chat(user, "") - -/mob/living/examine(mob/user, distance, infix, suffix) - . = ..() - // Update our target dolly. - if(user.zone_sel) - if(should_have_limb(BP_TAIL)) - user.zone_sel.icon_state = "zone_sel_tail" - else - user.zone_sel.icon_state = "zone_sel" diff --git a/code/modules/mob/floating_message.dm b/code/modules/mob/floating_message.dm index 1a37abc46d3..a6cc4a3bb3f 100644 --- a/code/modules/mob/floating_message.dm +++ b/code/modules/mob/floating_message.dm @@ -78,8 +78,8 @@ var/global/list/floating_chat_colors = list() LAZYADD(holder.stored_chat_text, I) - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_floating_text, holder, I), duration) - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), duration + CHAT_MESSAGE_EOL_FADE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_floating_text), holder, I), duration) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), duration + CHAT_MESSAGE_EOL_FADE) return I diff --git a/code/modules/mob/grab/grab_datum.dm b/code/modules/mob/grab/grab_datum.dm index 6cbc3fddc6a..b581eae1b0a 100644 --- a/code/modules/mob/grab/grab_datum.dm +++ b/code/modules/mob/grab/grab_datum.dm @@ -1,38 +1,54 @@ /decl/grab - var/name = "generic grab" - var/decl/grab/upgrab // The grab that this will upgrade to if it upgrades, null means no upgrade - var/decl/grab/downgrab // The grab that this will downgrade to if it downgrades, null means break grab on downgrade - var/stop_move = 0 // Whether or not the grabbed person can move out of the grab - var/reverse_facing = 0 // Whether the person being grabbed is facing forwards or backwards. - var/shield_assailant = 0 // Whether the person you're grabbing will shield you from bullets.,, - var/point_blank_mult = 1 // How much the grab increases point blank damage. - var/damage_stage = 1 // Affects how much damage is being dealt using certain actions. - var/same_tile = 0 // If the grabbed person and the grabbing person are on the same tile. - var/can_throw = 0 // If the grabber can throw the person grabbed. - var/downgrade_on_action = 0 // If the grab needs to be downgraded when the grabber does stuff. - var/downgrade_on_move = 0 // If the grab needs to be downgraded when the grabber moves. - var/force_danger = 0 // If the grab is strong enough to be able to force someone to do something harmful to them. - var/restrains = 0 // If the grab acts like cuffs and prevents action from the victim. - var/grab_slowdown = 0.15 // Multiplier for the object size (w_class or mob_size) of the grabbed atom, applied as slowdown. - var/shift = 0 // Whether or not this grab causes atoms to adjust their pixel offsets according to grabber dir. - var/adjust_plane = TRUE // Whether or not this grab causes atoms to adjust their plane/layer according to grabber dir. - var/success_up = "You get a better grip on $rep_affecting$." - var/success_down = "You adjust your grip on $rep_affecting$." - var/fail_up = "You can't get a better grip on $rep_affecting$!" - var/fail_down = "You can't seem to relax your grip on $rep_affecting$!" - var/icon - var/icon_state - var/upgrade_cooldown = 40 - var/action_cooldown = 40 + var/name = "generic grab" + /// Whether or not the grabbed person can move out of the grab + var/stop_move = 0 + /// Whether the person being grabbed is facing forwards or backwards. + var/reverse_facing = 0 + /// Whether the person you're grabbing will shield you from bullets.,, + var/shield_assailant = 0 + /// How much the grab increases point blank damage. + var/point_blank_mult = 1 + /// Affects how much damage is being dealt using certain actions. + var/damage_stage = 1 + /// If the grabbed person and the grabbing person are on the same tile. + var/same_tile = 0 + /// If the grabber can throw the person grabbed. + var/can_throw = 0 + /// If the grab needs to be downgraded when the grabber does stuff. + var/downgrade_on_action = 0 + /// If the grab needs to be downgraded when the grabber moves. + var/downgrade_on_move = 0 + /// If the grab is strong enough to be able to force someone to do something harmful to them. + var/force_danger = 0 + /// If the grab acts like cuffs and prevents action from the victim. + var/restrains = 0 + /// Multiplier for the object size (w_class or mob_size) of the grabbed atom, applied as slowdown. + var/grab_slowdown = 0.15 + /// Whether or not this grab causes atoms to adjust their pixel offsets according to grabber dir. + var/shift = 0 + /// Whether or not this grab causes atoms to adjust their plane/layer according to grabber dir. + var/adjust_plane = TRUE + var/success_up = "You get a better grip on $rep_affecting$." + var/success_down = "You adjust your grip on $rep_affecting$." + var/fail_up = "You can't get a better grip on $rep_affecting$!" + var/fail_down = "You can't seem to relax your grip on $rep_affecting$!" + var/grab_icon = 'icons/mob/screen/grabs.dmi' + var/grab_icon_state = "reinforce" + var/upgrade_cooldown = 40 + var/action_cooldown = 40 var/can_downgrade_on_resist = 1 var/list/break_chance_table = list(100) - var/breakability = 2 + var/breakability = 2 + /// The names of different intents for use in attack logs + var/help_action = "help intent" + var/disarm_action = "disarm intent" + var/grab_action = "grab intent" + var/harm_action = "harm intent" + /// The grab that this will upgrade to if it upgrades, null means no upgrade + var/decl/grab/upgrab + /// The grab that this will downgrade to if it downgrades, null means break grab on downgrade + var/decl/grab/downgrab - // The names of different intents for use in attack logs - var/help_action = "help intent" - var/disarm_action = "disarm intent" - var/grab_action = "grab intent" - var/harm_action = "harm intent" /decl/grab/Initialize() if(ispath(upgrab, /decl/grab)) diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm index 4f8977cca2b..9d62004fbe1 100644 --- a/code/modules/mob/grab/grab_object.dm +++ b/code/modules/mob/grab/grab_object.dm @@ -1,11 +1,11 @@ /obj/item/grab - name = "grab" - canremove = FALSE - item_flags = ITEM_FLAG_NO_BLUDGEON - w_class = ITEM_SIZE_NO_CONTAINER - pickup_sound = null - drop_sound = null - equip_sound = null + name = "grab" + canremove = FALSE + item_flags = ITEM_FLAG_NO_BLUDGEON + w_class = ITEM_SIZE_NO_CONTAINER + pickup_sound = null + drop_sound = null + equip_sound = null is_spawnable_type = FALSE var/atom/movable/affecting // Atom being targeted by this grab. @@ -49,19 +49,19 @@ LAZYADD(affecting.grabbed_by, src) // This is how we handle affecting being deleted. adjust_position() action_used() - INVOKE_ASYNC(assailant, /atom/movable/proc/do_attack_animation, affecting) + INVOKE_ASYNC(assailant, TYPE_PROC_REF(/atom/movable, do_attack_animation), affecting) playsound(affecting.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) update_icon() - events_repository.register(/decl/observ/moved, affecting, src, .proc/on_affecting_move) + events_repository.register(/decl/observ/moved, affecting, src, PROC_REF(on_affecting_move)) if(assailant.zone_sel) - events_repository.register(/decl/observ/zone_selected, assailant.zone_sel, src, .proc/on_target_change) + events_repository.register(/decl/observ/zone_selected, assailant.zone_sel, src, PROC_REF(on_target_change)) var/obj/item/organ/O = get_targeted_organ() var/decl/pronouns/G = assailant.get_pronouns() if(affecting_mob && O) // may have grabbed a buckled mob, so may be grabbing their holder SetName("[name] (\the [affecting_mob]'s [O.name])") - events_repository.register(/decl/observ/dismembered, affecting_mob, src, .proc/on_organ_loss) + events_repository.register(/decl/observ/dismembered, affecting_mob, src, PROC_REF(on_organ_loss)) if(affecting_mob != assailant) visible_message(SPAN_DANGER("\The [assailant] has grabbed [affecting_mob]'s [O.name]!")) else @@ -75,6 +75,11 @@ if(affecting_mob && assailant?.a_intent == I_HURT) upgrade(TRUE) +/obj/item/grab/mob_can_unequip(mob/user, slot, disable_warning = FALSE, dropping = FALSE) + if(dropping) + return TRUE + return FALSE + /obj/item/grab/examine(mob/user) . = ..() var/mob/M = get_affecting_mob() @@ -95,7 +100,11 @@ upgrade() /obj/item/grab/attack(mob/M, mob/living/user) - return FALSE + if(affecting == M) + var/datum/extension/abilities/abilities = get_extension(user, /datum/extension/abilities) + if(abilities?.do_grabbed_invocation(M)) + return TRUE + . = ..() /obj/item/grab/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(QDELETED(src) || !current_grab || !assailant || proximity_flag) // Close-range is handled in resolve_attackby(). @@ -232,10 +241,10 @@ /obj/item/grab/on_update_icon() . = ..() - if(current_grab.icon) - icon = current_grab.icon - if(current_grab.icon_state) - icon_state = current_grab.icon_state + if(current_grab.grab_icon) + icon = current_grab.grab_icon + if(current_grab.grab_icon_state) + icon_state = current_grab.grab_icon_state /obj/item/grab/proc/throw_held() return current_grab.throw_held(src) diff --git a/code/modules/mob/grab/normal/grab_normal.dm b/code/modules/mob/grab/normal/grab_normal.dm index 0bcdc241be9..94c52e5a5b4 100644 --- a/code/modules/mob/grab/normal/grab_normal.dm +++ b/code/modules/mob/grab/normal/grab_normal.dm @@ -1,10 +1,9 @@ /decl/grab/normal - name = "grab" - icon = 'icons/mob/screen1.dmi' - help_action = "inspect" - disarm_action = "pin" - grab_action = "jointlock" - harm_action = "dislocate" + name = "grab" + help_action = "inspect" + disarm_action = "pin" + grab_action = "jointlock" + harm_action = "dislocate" var/drop_headbutt = 1 /decl/grab/normal/on_hit_help(var/obj/item/grab/G, var/atom/A, var/proximity) diff --git a/code/modules/mob/grab/normal/norm_aggressive.dm b/code/modules/mob/grab/normal/norm_aggressive.dm index e9387d37154..003fd05c1ef 100644 --- a/code/modules/mob/grab/normal/norm_aggressive.dm +++ b/code/modules/mob/grab/normal/norm_aggressive.dm @@ -1,18 +1,18 @@ /decl/grab/normal/aggressive - name = "aggressive grab" - upgrab = /decl/grab/normal/neck - downgrab = /decl/grab/normal/passive - shift = 12 - stop_move = 1 - reverse_facing = 0 - shield_assailant = 0 - point_blank_mult = 1.5 - damage_stage = 1 - same_tile = 0 - can_throw = 1 - force_danger = 1 - breakability = 3 - icon_state = "reinforce1" + name = "aggressive grab" + upgrab = /decl/grab/normal/neck + downgrab = /decl/grab/normal/passive + shift = 12 + stop_move = 1 + reverse_facing = 0 + shield_assailant = 0 + point_blank_mult = 1.5 + damage_stage = 1 + same_tile = 0 + can_throw = 1 + force_danger = 1 + breakability = 3 + grab_icon_state = "reinforce1" break_chance_table = list(5, 20, 40, 80, 100) /decl/grab/normal/aggressive/process_effect(var/obj/item/grab/G) diff --git a/code/modules/mob/grab/normal/norm_kill.dm b/code/modules/mob/grab/normal/norm_kill.dm index 5d84027131a..ab5908e5cd5 100644 --- a/code/modules/mob/grab/normal/norm_kill.dm +++ b/code/modules/mob/grab/normal/norm_kill.dm @@ -1,19 +1,19 @@ /decl/grab/normal/kill - name = "strangle" - downgrab = /decl/grab/normal/neck - shift = 0 - stop_move = 1 - reverse_facing = 1 - shield_assailant = 0 - point_blank_mult = 2 - damage_stage = 3 - same_tile = 1 - force_danger = 1 - restrains = 1 + name = "strangle" + downgrab = /decl/grab/normal/neck + shift = 0 + stop_move = 1 + reverse_facing = 1 + shield_assailant = 0 + point_blank_mult = 2 + damage_stage = 3 + same_tile = 1 + force_danger = 1 + restrains = 1 downgrade_on_action = 1 - downgrade_on_move = 1 - icon_state = "kill1" - break_chance_table = list(5, 20, 40, 80, 100) + downgrade_on_move = 1 + grab_icon_state = "kill1" + break_chance_table = list(5, 20, 40, 80, 100) /decl/grab/normal/kill/process_effect(var/obj/item/grab/G) var/mob/living/affecting = G.get_affecting_mob() diff --git a/code/modules/mob/grab/normal/norm_neck.dm b/code/modules/mob/grab/normal/norm_neck.dm index e2a31ee765b..3db9b2f0bdc 100644 --- a/code/modules/mob/grab/normal/norm_neck.dm +++ b/code/modules/mob/grab/normal/norm_neck.dm @@ -1,19 +1,19 @@ /decl/grab/normal/neck - name = "chokehold" - upgrab = /decl/grab/normal/kill - downgrab = /decl/grab/normal/aggressive - drop_headbutt = 0 - shift = -10 - stop_move = 1 - reverse_facing = 1 - shield_assailant = 1 - point_blank_mult = 2 - damage_stage = 2 - same_tile = 1 - can_throw = 1 - force_danger = 1 - restrains = 1 - icon_state = "kill" + name = "chokehold" + upgrab = /decl/grab/normal/kill + downgrab = /decl/grab/normal/aggressive + drop_headbutt = 0 + shift = -10 + stop_move = 1 + reverse_facing = 1 + shield_assailant = 1 + point_blank_mult = 2 + damage_stage = 2 + same_tile = 1 + can_throw = 1 + force_danger = 1 + restrains = 1 + grab_icon_state = "kill" break_chance_table = list(3, 18, 45, 100) /decl/grab/normal/neck/process_effect(var/obj/item/grab/G) diff --git a/code/modules/mob/grab/normal/norm_passive.dm b/code/modules/mob/grab/normal/norm_passive.dm index 989515e9859..886d83340f7 100644 --- a/code/modules/mob/grab/normal/norm_passive.dm +++ b/code/modules/mob/grab/normal/norm_passive.dm @@ -1,13 +1,13 @@ /decl/grab/normal/passive - name = "passive hold" - upgrab = /decl/grab/normal/struggle - shift = 8 - stop_move = 0 - reverse_facing = 0 - shield_assailant = 0 - point_blank_mult = 1.1 - same_tile = 0 - icon_state = "reinforce" + name = "passive hold" + upgrab = /decl/grab/normal/struggle + shift = 8 + stop_move = 0 + reverse_facing = 0 + shield_assailant = 0 + point_blank_mult = 1.1 + same_tile = 0 + grab_icon_state = "reinforce" break_chance_table = list(15, 60, 100) /decl/grab/normal/passive/on_hit_disarm(var/obj/item/grab/G, var/atom/A, var/proximity) diff --git a/code/modules/mob/grab/normal/norm_struggle.dm b/code/modules/mob/grab/normal/norm_struggle.dm index 557e09de7b5..095cd9ae973 100644 --- a/code/modules/mob/grab/normal/norm_struggle.dm +++ b/code/modules/mob/grab/normal/norm_struggle.dm @@ -1,18 +1,18 @@ /decl/grab/normal/struggle - name = "struggle grab" - upgrab = /decl/grab/normal/aggressive - downgrab = /decl/grab/normal/passive - shift = 8 - stop_move = 1 - reverse_facing = 0 - point_blank_mult = 1 - same_tile = 0 - breakability = 3 - grab_slowdown = 0.35 - upgrade_cooldown = 20 + name = "struggle grab" + upgrab = /decl/grab/normal/aggressive + downgrab = /decl/grab/normal/passive + shift = 8 + stop_move = 1 + reverse_facing = 0 + point_blank_mult = 1 + same_tile = 0 + breakability = 3 + grab_slowdown = 0.35 + upgrade_cooldown = 20 can_downgrade_on_resist = 0 - icon_state = "reinforce" - break_chance_table = list(5, 20, 30, 80, 100) + grab_icon_state = "reinforce" + break_chance_table = list(5, 20, 30, 80, 100) /decl/grab/normal/struggle/process_effect(var/obj/item/grab/G) var/mob/living/affecting = G.get_affecting_mob() @@ -43,7 +43,7 @@ else affecting.visible_message("[affecting] struggles against [assailant]!") G.done_struggle = FALSE - addtimer(CALLBACK(G, .proc/handle_resist), 1 SECOND) + addtimer(CALLBACK(G, PROC_REF(handle_resist)), 1 SECOND) resolve_struggle(G) /decl/grab/normal/struggle/proc/resolve_struggle(var/obj/item/grab/G) diff --git a/code/modules/mob/grab/simple/simple_control.dm b/code/modules/mob/grab/simple/simple_control.dm new file mode 100644 index 00000000000..ff6db9134cb --- /dev/null +++ b/code/modules/mob/grab/simple/simple_control.dm @@ -0,0 +1,49 @@ +/decl/grab/simple/control + name = "controlling grab" + shift = 0 + adjust_plane = FALSE + +/decl/grab/simple/control/on_hit_help(var/obj/item/grab/G, var/atom/A, var/proximity) + if(A == G.assailant) + A = G.affecting + if(isliving(G.affecting)) + var/mob/living/living_mob = G.affecting + return living_mob.handle_rider_help_order(G.assailant, A, proximity) + return FALSE + +/decl/grab/simple/control/on_hit_disarm(var/obj/item/grab/G, var/atom/A, var/proximity) + if(A == G.assailant) + A = G.affecting + if(isliving(G.affecting)) + var/mob/living/living_mob = G.affecting + return living_mob.handle_rider_disarm_order(G.assailant, A, proximity) + return FALSE + +/decl/grab/simple/control/on_hit_grab(var/obj/item/grab/G, var/atom/A, var/proximity) + if(A == G.assailant) + A = G.affecting + if(isliving(G.affecting)) + var/mob/living/living_mob = G.affecting + return living_mob.handle_rider_grab_order(G.assailant, A, proximity) + return FALSE + +/decl/grab/simple/control/on_hit_harm(var/obj/item/grab/G, var/atom/A, var/proximity) + if(A == G.assailant) + A = G.affecting + if(isliving(G.affecting)) + var/mob/living/living_mob = G.affecting + return living_mob.handle_rider_harm_order(G.assailant, A, proximity) + return FALSE + +// Override these for mobs that will respond to instructions from a rider. +/mob/living/proc/handle_rider_harm_order(mob/user, atom/target, proximity) + return FALSE + +/mob/living/proc/handle_rider_grab_order(mob/user, atom/target, proximity) + return FALSE + +/mob/living/proc/handle_rider_disarm_order(mob/user, atom/target, proximity) + return FALSE + +/mob/living/proc/handle_rider_help_order(mob/user, atom/target, proximity) + return FALSE diff --git a/code/modules/mob/grab/simple/simple_passive.dm b/code/modules/mob/grab/simple/simple_passive.dm index 4478a131632..838e94391d3 100644 --- a/code/modules/mob/grab/simple/simple_passive.dm +++ b/code/modules/mob/grab/simple/simple_passive.dm @@ -6,7 +6,6 @@ shield_assailant = 0 point_blank_mult = 1 same_tile = 0 - icon_state = "reinforce" break_chance_table = list(15, 60, 100) /decl/grab/simple/upgrade(obj/item/grab/G) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 4648117ef40..68ea0922ebe 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -111,8 +111,8 @@ if(!say_understands(speaker,language)) if(isanimal(speaker)) var/mob/living/simple_animal/S = speaker - if(S.speak && S.speak.len) - message = pick(S.speak) + if(LAZYLEN(S.emote_speech)) + message = pick(S.emote_speech) else return else diff --git a/code/modules/mob/hugs.dm b/code/modules/mob/hugs.dm index a884e569db3..191d10734fe 100644 --- a/code/modules/mob/hugs.dm +++ b/code/modules/mob/hugs.dm @@ -20,8 +20,8 @@ var/global/list/_default_hug_messages = list( hug_3p = "$USER$ rubs $TARGET$'s back soothingly." hug_1p = "You rub $TARGET$'s back soothingly." else - hug_3p = "$USER$ hugs $TARGET$ to make $TARGET_HIM$ feel better." - hug_1p = "You hug $TARGET$ to make $TARGET_HIM$ feel better." + hug_3p = "$USER$ hugs $TARGET$ to make $TARGET_THEM$ feel better." + hug_1p = "You hug $TARGET$ to make $TARGET_THEM$ feel better." var/list/use_hug_messages = target.get_hug_zone_messages(get_target_zone()) if(length(use_hug_messages) >= 2) @@ -33,16 +33,16 @@ var/global/list/_default_hug_messages = list( var/decl/pronouns/target_pronouns = target.get_pronouns() hug_3p = replacetext(hug_3p, "$USER$", "\the [src]") - hug_3p = replacetext(hug_3p, "$USER_HIM$", my_pronouns.him) - hug_3p = replacetext(hug_3p, "$USER_HIS$", my_pronouns.his) + hug_3p = replacetext(hug_3p, "$USER_THEM$", my_pronouns.him) + hug_3p = replacetext(hug_3p, "$USER_THEIR$", my_pronouns.his) hug_3p = replacetext(hug_3p, "$TARGET$", "\the [target]") - hug_3p = replacetext(hug_3p, "$TARGET_HIM$", target_pronouns.him) - hug_3p = replacetext(hug_3p, "$TARGET_HIS$", target_pronouns.his) + hug_3p = replacetext(hug_3p, "$TARGET_THEM$", target_pronouns.him) + hug_3p = replacetext(hug_3p, "$TARGET_THEIR$", target_pronouns.his) hug_1p = replacetext(hug_1p, "$TARGET$", "\the [target]") - hug_1p = replacetext(hug_1p, "$TARGET_HIM$", target_pronouns.him) - hug_1p = replacetext(hug_1p, "$TARGET_HIS$", target_pronouns.his) + hug_1p = replacetext(hug_1p, "$TARGET_THEM$", target_pronouns.him) + hug_1p = replacetext(hug_1p, "$TARGET_THEIR$", target_pronouns.his) visible_message( SPAN_NOTICE(capitalize(hug_3p)), diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 5cd9975038d..1cde56a39dc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -27,6 +27,22 @@ to_chat(src, SPAN_WARNING("You are unable to equip that.")) /mob/proc/can_equip_anything_to_slot(var/slot) + + // Held item slots may not have the dexterity to hold an item. + if(slot in get_held_item_slots()) + var/datum/inventory_slot/gripper/hand = get_inventory_slot_datum(slot) + // No actual held item slot, this is a bug or an error. + if(!istype(hand)) + return FALSE + // Hand is organ based, ask the organ if it has the required dexterity. + if(hand.requires_organ_tag) + var/obj/item/organ/external/hand_organ = get_organ(hand.requires_organ_tag) + if(!hand_organ || !(hand_organ.get_manual_dexterity() & DEXTERITY_HOLD_ITEM)) + return FALSE + // Hand is not organ based, ask the gripper slot directly. + else if(!(hand.get_dexterity() & DEXTERITY_HOLD_ITEM)) + return FALSE + return (slot in get_all_available_equipment_slots()) //This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. @@ -187,13 +203,17 @@ //Drops the item in our active hand. TODO: rename this to drop_active_hand or something /mob/proc/drop_item(var/atom/Target) - if(!Target && !length(get_held_items())) + var/obj/item/I = get_active_hand() + if(!istype(I)) if(length(get_active_grabs())) for(var/obj/item/grab/grab in get_active_grabs()) qdel(grab) . = TRUE return - . = drop_from_inventory(get_active_hand(), Target) + return FALSE + else if(!I.mob_can_unequip(src, get_equipped_slot_for_item(I), dropping = TRUE)) + return FALSE + . = drop_from_inventory(I, Target) /* Removes the object from any slots the mob might have, calling the appropriate icon update proc. @@ -224,7 +244,7 @@ /mob/proc/canUnEquip(obj/item/I) if(!I) //If there's nothing to drop, the drop is automatically successful. - return 1 + return TRUE var/slot = get_equipped_slot_for_item(I) if(!slot && !istype(I.loc, /obj/item/rig_module)) return 1 //already unequipped, so success diff --git a/code/modules/mob/language/animal.dm b/code/modules/mob/language/animal.dm index 1247bb4288a..4cdebefa6b1 100644 --- a/code/modules/mob/language/animal.dm +++ b/code/modules/mob/language/animal.dm @@ -26,8 +26,7 @@ /decl/language/animal/scramble(mob/living/speaker, input, list/known_languages) if(isanimal(speaker)) var/mob/living/simple_animal/critter = speaker - if(length(critter.speak)) - return pick(critter.speak) + return DEFAULTPICK(critter.emote_speech, "...") return "..." /decl/language/animal/get_spoken_verb(mob/living/speaker, msg_end) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 60d2513ea44..c540c9855c6 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -1,7 +1,6 @@ /mob/living/bot name = "Bot" - health = 20 - maxHealth = 20 + max_health = 20 icon = 'icons/mob/bot/placeholder.dmi' universal_speak = TRUE density = FALSE @@ -55,34 +54,37 @@ access_scanner = new /obj(src) access_scanner.req_access = req_access?.Copy() -/mob/living/bot/Initialize() - . = ..() if(on) turn_on() // Update lights and other stuff else turn_off() -/mob/living/bot/Life() - ..() - if(health <= 0) - death() - return - set_status(STAT_WEAK, 0) - set_status(STAT_STUN, 0) - set_status(STAT_PARA, 0) +/mob/living/bot/handle_regular_status_updates() + . = ..() + if(.) + set_status(STAT_WEAK, 0) + set_status(STAT_STUN, 0) + set_status(STAT_PARA, 0) - if(on && !client && !busy) - handleAI() +/mob/living/bot/get_total_life_damage() + return getFireLoss() + getBruteLoss() -/mob/living/bot/updatehealth() - if(status_flags & GODMODE) - health = maxHealth - set_stat(CONSCIOUS) - else - health = maxHealth - getFireLoss() - getBruteLoss() +/mob/living/bot/get_dusted_remains() + return /obj/effect/decal/cleanable/blood/oil + +/mob/living/bot/gib(do_gibs = TRUE) + if(stat != DEAD) + death(gibbed = TRUE) + if(stat == DEAD) + turn_off() + visible_message(SPAN_DANGER("\The [src] blows apart!")) + spark_at(src, cardinal_only = TRUE) + return ..() -/mob/living/bot/death() - explode() +/mob/living/bot/death(gibbed) + . = ..() + if(. && !gibbed) + gib() /mob/living/bot/attackby(var/obj/item/O, var/mob/user) if(O.GetIdCard()) @@ -104,9 +106,9 @@ to_chat(user, "You need to unlock the controls first.") return else if(IS_WELDER(O)) - if(health < maxHealth) + if(current_health < get_max_health()) if(open) - health = min(maxHealth, health + 10) + heal_overall_damage(10) user.visible_message("\The [user] repairs \the [src].","You repair \the [src].") else to_chat(user, "Unable to repair with the maintenance panel closed.") @@ -209,7 +211,12 @@ /mob/living/bot/emag_act(var/remaining_charges, var/mob/user) return 0 -/mob/living/bot/proc/handleAI() +/mob/living/bot/handle_legacy_ai() + . = ..() + if(on && !busy) + handle_async_ai() + +/mob/living/bot/proc/handle_async_ai() set waitfor = FALSE if(ignore_list.len) for(var/atom/A in ignore_list) @@ -288,7 +295,7 @@ /mob/living/bot/proc/startPatrol() var/turf/T = getPatrolTurf() if(T) - patrol_path = AStar(get_turf(loc), T, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_patrol_dist, id = botcard, exclude = obstacle) + patrol_path = AStar(get_turf(loc), T, TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_patrol_dist, id = botcard, exclude = obstacle) if(!patrol_path) patrol_path = list() obstacle = null @@ -320,7 +327,7 @@ return /mob/living/bot/proc/calcTargetPath() - target_path = AStar(get_turf(loc), get_turf(target), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard, exclude = obstacle) + target_path = AStar(get_turf(loc), get_turf(target), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_target_dist, id = botcard, exclude = obstacle) if(!target_path) if(target && target.loc) ignore_list |= target @@ -360,9 +367,6 @@ set_light(0) update_icon() -/mob/living/bot/proc/explode() - qdel(src) - /******************************************************************/ // Navigation procs // Used for A-star pathfinding @@ -373,13 +377,10 @@ /turf/proc/CardinalTurfsWithAccess(var/obj/item/card/id/ID) var/L[] = new() - // for(var/turf/simulated/t in oview(src,1)) - for(var/d in global.cardinal) - var/turf/simulated/T = get_step(src, d) - if(istype(T) && !T.density) - if(!LinkBlockedWithAccess(src, T, ID)) - L.Add(T) + var/turf/T = get_step(src, d) + if(istype(T) && !T.density && T.simulated && !LinkBlockedWithAccess(src, T, ID)) + L.Add(T) return L diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 75c8b970996..bdcd85af07a 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -21,15 +21,14 @@ /mob/living/bot/cleanbot/handleIdle() if(!screwloose && !oddbutton && prob(5)) visible_message("\The [src] makes an excited beeping booping sound!") - if(screwloose && prob(5)) // Make a mess - if(istype(loc, /turf/simulated)) - var/turf/simulated/T = loc - T.wet_floor() - + if(isturf(loc)) + var/turf/T = loc + if(T.simulated) + T.wet_floor() if(oddbutton && prob(5)) // Make a big mess visible_message("Something flies out of [src]. He seems to be acting oddly.") - var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(loc) + var/obj/effect/decal/cleanable/blood/gibs/gib = new(loc) var/weakref/g = weakref(gib) ignore_list += g spawn(600) @@ -55,45 +54,38 @@ UnarmedAttack(target) /mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity) - if(!..()) + + . = ..() + if(.) return if(!istype(D)) - return + return TRUE if(D.loc != loc) - return + return FALSE busy = 1 visible_message("\The [src] begins to clean up \the [D].") update_icon() var/cleantime = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50 - if(do_after(src, cleantime, progress = 0)) - if(istype(loc, /turf/simulated)) - var/turf/simulated/f = loc - f.dirt = 0 - if(!D) - return - qdel(D) + if(do_after(src, cleantime, progress = 0) && !QDELETED(D)) if(D == target) target = null + qdel(D) playsound(src, 'sound/machines/boop2.ogg', 30) busy = 0 update_icon() + return TRUE -/mob/living/bot/cleanbot/explode() - on = 0 - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/chems/glass/bucket(Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - spark_at(src, cardinal_only = TRUE) - qdel(src) - return +/mob/living/bot/cleanbot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + new /obj/item/chems/glass/bucket(my_turf) + new /obj/item/assembly/prox_sensor(my_turf) + if(prob(50)) + new /obj/item/robot_parts/l_arm(my_turf) /mob/living/bot/cleanbot/on_update_icon() ..() diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index 178b5cd51ac..f4e8ebe3a24 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -6,8 +6,7 @@ attack_state = "ed209-c" layer = MOB_LAYER density = TRUE - health = 100 - maxHealth = 100 + max_health = 100 preparing_arrest_sounds = new() @@ -23,26 +22,22 @@ ..() icon_state = "ed2090" -/mob/living/bot/secbot/ed209/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - var/obj/item/gun/energy/taser/G = new /obj/item/gun/energy/taser(Tsec) - G.power_supply.charge = 0 - if(prob(50)) - new /obj/item/robot_parts/l_leg(Tsec) - if(prob(50)) - new /obj/item/robot_parts/r_leg(Tsec) - if(prob(50)) +/mob/living/bot/secbot/ed209/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + var/obj/item/gun/energy/taser/G = new /obj/item/gun/energy/taser(my_turf) + var/obj/item/cell/power_supply = G.get_cell() + power_supply?.charge = 0 if(prob(50)) - new /obj/item/clothing/head/helmet(Tsec) - else - new /obj/item/clothing/suit/armor/vest(Tsec) - - spark_at(src, cardinal_only = TRUE) - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - qdel(src) + new /obj/item/robot_parts/l_leg(my_turf) + if(prob(50)) + new /obj/item/robot_parts/r_leg(my_turf) + if(prob(50)) + if(prob(50)) + new /obj/item/clothing/head/helmet(my_turf) + else + new /obj/item/clothing/suit/armor/vest(my_turf) /mob/living/bot/secbot/ed209/handleRangedTarget() RangedAttack(target) diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 6dea16be17b..30279ac5915 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -8,8 +8,7 @@ desc = "The botanist's best friend." icon = 'icons/mob/bot/farmbot.dmi' icon_state = "farmbot0" - health = 50 - maxHealth = 50 + max_health = 50 req_access = list(list(access_hydroponics, access_robotics)) var/action = "" // Used to update icon @@ -126,7 +125,7 @@ /mob/living/bot/farmbot/calcTargetPath() // We need to land NEXT to the tray, because the tray itself is impassable for(var/trayDir in list(NORTH, SOUTH, EAST, WEST)) - target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard) + target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), TYPE_PROC_REF(/turf, CardinalTurfsWithAccess), TYPE_PROC_REF(/turf, Distance), 0, max_target_dist, id = botcard) if(target_path) break if(!target_path) @@ -143,17 +142,19 @@ return /mob/living/bot/farmbot/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) + . = ..() + if(.) return + if(busy) - return + return TRUE if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) var/obj/machinery/portable_atmospherics/hydroponics/T = A var/t = confirmTarget(T) switch(t) if(0) - return + return TRUE if(FARMBOT_COLLECT) action = "water" // Needs a better one update_icon() @@ -186,20 +187,20 @@ busy = 1 if(do_after(src, 30, A)) visible_message("[src] fertilizes \the [A].") - T.reagents.add_reagent(/decl/material/gas/ammonia, 10) + T.add_to_reagents(/decl/material/gas/ammonia, 10) busy = 0 action = "" update_icon() T.update_icon() else if(istype(A, /obj/structure/hygiene/sink)) if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume) - return + return TRUE action = "water" update_icon() visible_message("[src] starts refilling its tank from \the [A].") busy = 1 while(do_after(src, 10) && tank.reagents.total_volume < tank.reagents.maximum_volume) - tank.reagents.add_reagent(/decl/material/liquid/water, 100) + tank.add_to_reagents(/decl/material/liquid/water, 100) if(prob(5)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) busy = 0 @@ -217,32 +218,27 @@ do_attack_animation(A) if(prob(50)) visible_message("[src] swings wildly at [A] with a minihoe, missing completely!") - return + return TRUE var/t = pick("slashed", "sliced", "cut", "clawed") A.attack_generic(src, 5, t) if("water") flick("farmbot_water", src) visible_message("[src] splashes [A] with water!") tank.reagents.splash(A, 100) + return TRUE -/mob/living/bot/farmbot/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/minihoe(Tsec) - new /obj/item/chems/glass/bucket(Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/scanner/plant(Tsec) - - if(tank) - tank.forceMove(Tsec) - - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - spark_at(src, cardinal_only = TRUE) - qdel(src) - return +/mob/living/bot/farmbot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + new /obj/item/minihoe(my_turf) + new /obj/item/chems/glass/bucket(my_turf) + new /obj/item/assembly/prox_sensor(my_turf) + new /obj/item/scanner/plant(my_turf) + if(tank) + tank.forceMove(my_turf) + if(prob(50)) + new /obj/item/robot_parts/l_arm(my_turf) /mob/living/bot/farmbot/confirmTarget(var/atom/targ) if(!..()) @@ -268,7 +264,7 @@ if(tray.dead && removes_dead || tray.harvest && collects_produce) return FARMBOT_COLLECT - else if(refills_water && tray.waterlevel < 40 && !tray.reagents.has_reagent(/decl/material/liquid/water)) + else if(refills_water && tray.waterlevel < 40 && !tray.reagents.has_reagent(/decl/material/liquid/water) && (tank?.reagents.total_volume > 0)) return FARMBOT_WATER else if(uproots_weeds && tray.weedlevel > 3) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index bd018937452..585b02238ba 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -133,14 +133,16 @@ return (amount && (T.broken || T.burnt || (improvefloors && !T.flooring))) /mob/living/bot/floorbot/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) + + . = ..() + if(.) return if(busy) - return + return TRUE if(get_turf(A) != loc) - return + return FALSE if(emagged && istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A @@ -210,35 +212,25 @@ M.use(1) addTiles(4) anchored = FALSE + return TRUE -/mob/living/bot/floorbot/explode() - turn_off() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - - var/list/things = list() - for(var/atom/A in orange(5, src.loc)) - things += A - - var/list/shrapnel = list() - - for(var/I = 3, I<3 , I++) //Toolbox shatters. - shrapnel += new /obj/item/shard/shrapnel(Tsec) - - for(var/Amt = amount, Amt>0, Amt--) //Why not just spit them out in a disorganized jumble? - shrapnel += new /obj/item/stack/tile/floor(Tsec) - - if(prob(50)) - shrapnel += new /obj/item/robot_parts/l_arm(Tsec) - shrapnel += new /obj/item/assembly/prox_sensor(Tsec) - - spark_at(src, cardinal_only = TRUE) - - for(var/atom/movable/AM in shrapnel) - AM.throw_at(pick(things),5) - - qdel(src) +/mob/living/bot/floorbot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + var/list/things = list() + for(var/atom/A in orange(5, src.loc)) + things += A + var/list/shrapnel = list() + for(var/I = 3, I<3 , I++) //Toolbox shatters. + shrapnel += new /obj/item/shard/shrapnel(my_turf) + for(var/Amt = amount, Amt>0, Amt--) //Why not just spit them out in a disorganized jumble? + shrapnel += new /obj/item/stack/tile/floor(my_turf) + if(prob(50)) + shrapnel += new /obj/item/robot_parts/l_arm(my_turf) + shrapnel += new /obj/item/assembly/prox_sensor(my_turf) + for(var/atom/movable/AM in shrapnel) + AM.throw_at(pick(things),5) /mob/living/bot/floorbot/proc/addTiles(var/am) amount += am diff --git a/code/modules/mob/living/bot/medibot.dm b/code/modules/mob/living/bot/medibot.dm index 9807ec8e483..cabc6ca8f51 100644 --- a/code/modules/mob/living/bot/medibot.dm +++ b/code/modules/mob/living/bot/medibot.dm @@ -96,17 +96,15 @@ break /mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity) - if(!..()) - return - - if(!on) + . = ..() + if(.) return - if(!istype(H)) - return + if(!on || !istype(H)) + return FALSE if(busy) - return + return TRUE if(H.stat == DEAD) if(vocal) @@ -142,10 +140,11 @@ if(t == 1) reagent_glass.reagents.trans_to_mob(H, injection_amount, CHEM_INJECT) else - H.reagents.add_reagent(t, injection_amount) + H.add_to_reagents(t, injection_amount) visible_message("[src] injects [H] with the syringe!") busy = 0 update_icon() + return TRUE /mob/living/bot/medbot/on_update_icon() ..() @@ -285,24 +284,18 @@ update_icon() . = 1 -/mob/living/bot/medbot/explode() - on = 0 - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/storage/firstaid(Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/scanner/health(Tsec) - if (prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - if(reagent_glass) - reagent_glass.forceMove(Tsec) - reagent_glass = null - - spark_at(src, cardinal_only = TRUE) - qdel(src) - return +/mob/living/bot/medbot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + new /obj/item/storage/firstaid(my_turf) + new /obj/item/assembly/prox_sensor(my_turf) + new /obj/item/scanner/health(my_turf) + if (prob(50)) + new /obj/item/robot_parts/l_arm(my_turf) + if(reagent_glass) + reagent_glass.forceMove(my_turf) + reagent_glass = null /mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) if(!..()) diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index 818d8a95f59..bb3c960f2fc 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -15,8 +15,7 @@ layer = MOB_LAYER anchored = TRUE density = TRUE - health = 150 - maxHealth = 150 + max_health = 150 mob_bump_flag = HEAVY min_target_dist = 0 @@ -52,7 +51,7 @@ suffix = num2text(++amount) name = "Mulebot #[suffix]" -/mob/living/bot/mulebot/receive_mouse_drop(var/atom/dropping, var/mob/user) +/mob/living/bot/mulebot/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!.) load(dropping) @@ -222,20 +221,14 @@ if(load == user) unload(direction) -/mob/living/bot/mulebot/explode() +/mob/living/bot/mulebot/gib(do_gibs = TRUE) unload(pick(0, 1, 2, 4, 8)) - - visible_message("[src] blows apart!") - - var/turf/Tsec = get_turf(src) - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/stack/cable_coil/cut(Tsec) - SSmaterials.create_object(/decl/material/solid/metal/steel, get_turf(src), 2, /obj/item/stack/material/rods) - - spark_at(src, cardinal_only = TRUE) - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - ..() + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + new /obj/item/assembly/prox_sensor(my_turf) + new /obj/item/stack/cable_coil/cut(my_turf) + SSmaterials.create_object(/decl/material/solid/metal/steel, get_turf(src), 2, /obj/item/stack/material/rods) /mob/living/bot/mulebot/proc/GetBeaconList() var/list/beaconlist = list() @@ -250,7 +243,7 @@ if(busy || load || get_dist(C, src) > 1 || !isturf(C.loc) || C.anchored) return - for(var/obj/structure/plasticflaps/P in src.loc)//Takes flaps into account + for(var/obj/structure/flaps/P in src.loc)//Takes flaps into account if(!CanPass(C,P)) return diff --git a/code/modules/mob/living/bot/remotebot.dm b/code/modules/mob/living/bot/remotebot.dm index 88698d91de4..ec98235438f 100644 --- a/code/modules/mob/living/bot/remotebot.dm +++ b/code/modules/mob/living/bot/remotebot.dm @@ -3,8 +3,7 @@ desc = "A remote controlled robot used by lazy people to switch channels and get pizza." icon = 'icons/mob/bot/fetchbot.dmi' icon_state = "fetchbot1" - health = 15 - maxHealth = 15 + max_health = 15 var/working = 0 var/speed = 10 //lower = better @@ -23,20 +22,17 @@ if(holding) to_chat(user, "It is holding \the [html_icon(holding)] [holding].") -/mob/living/bot/remotebot/explode() - on = 0 - new /obj/effect/decal/cleanable/blood/oil(get_turf(src.loc)) - visible_message("[src] blows apart!") - if(controller) - controller.bot = null - controller = null - for(var/i in 1 to rand(3,5)) - var/obj/item/stack/material/cardstock/mapped/cardboard/C = new(src.loc) - if(prob(50)) - C.forceMove(get_step(src, pick(global.alldirs))) - - spark_at(src, cardinal_only = TRUE) - qdel(src) +/mob/living/bot/remotebot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + if(controller) + controller.bot = null + controller = null + for(var/i in 1 to rand(3,5)) + var/obj/item/stack/material/cardstock/mapped/cardboard/C = new(my_turf) + if(prob(50)) + C.forceMove(get_step(src, pick(global.alldirs))) /mob/living/bot/remotebot/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/bot_controller) && !controller) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index b33a7665cc9..9194a3508de 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -7,10 +7,8 @@ desc = "A little security robot. He looks less than thrilled." icon = 'icons/mob/bot/secbot.dmi' icon_state = "secbot0" - var/attack_state = "secbot-c" layer = MOB_LAYER - maxHealth = 50 - health = 50 + max_health = 50 req_access = list(list(access_security, access_forensics_lockers)) botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) @@ -20,6 +18,7 @@ RequiresAccessToToggle = 1 // Haha no + var/attack_state = "secbot-c" var/idcheck = 0 // If true, arrests for having weapons without authorization. var/check_records = 0 // If true, arrests people without a record. var/check_arrest = 1 // If true, arrests people who are set to arrest. @@ -39,12 +38,9 @@ will_patrol = 1 /mob/living/bot/secbot/Initialize() - stun_baton = new(src) - stun_baton.bcell = new /obj/item/cell/infinite(stun_baton) - stun_baton.set_status(1, null) - . = ..() - + stun_baton = new /obj/item/baton/infinite(src) handcuffs = new(src) + . = ..() /mob/living/bot/secbot/Destroy() qdel(stun_baton) @@ -108,9 +104,9 @@ emagged = !emagged /mob/living/bot/secbot/attackby(var/obj/item/O, var/mob/user) - var/curhealth = health + var/curhealth = current_health . = ..() - if(health < curhealth) + if(current_health < curhealth) react_to_attack(user) /mob/living/bot/secbot/emag_act(var/remaining_charges, var/mob/user) @@ -123,11 +119,11 @@ return 1 /mob/living/bot/secbot/bullet_act(var/obj/item/projectile/P) - var/curhealth = health + var/curhealth = current_health var/mob/shooter = P.firer . = ..() //if we already have a target just ignore to avoid lots of checking - if(!target && health < curhealth && istype(shooter) && (shooter in view(world.view, src))) + if(!target && current_health < curhealth && istype(shooter) && (shooter in view(world.view, src))) react_to_attack(shooter) /mob/living/bot/secbot/proc/begin_arrest(mob/target, var/threat) @@ -136,7 +132,7 @@ broadcast_security_hud_message("[src] is arresting a level [threat] suspect [suspect_name] in [get_area_name(src)].", src) say("Down on the floor, [suspect_name]! You have [SECBOT_WAIT_TIME] seconds to comply.") playsound(src.loc, pick(preparing_arrest_sounds), 50) - events_repository.register(/decl/observ/moved, target, src, /mob/living/bot/secbot/proc/target_moved) + events_repository.register(/decl/observ/moved, target, src, TYPE_PROC_REF(/mob/living/bot/secbot, target_moved)) /mob/living/bot/secbot/proc/target_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) if(get_dist(get_turf(src), get_turf(target)) >= 1) @@ -194,16 +190,18 @@ resetTarget() //we're done, failed or not. Don't want to get stuck if C is not /mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity) - if(!..()) + + . = ..() + if(.) return if(!istype(M)) - return + return FALSE var/mob/living/carbon/human/H = M if(istype(H) && H.lying) cuff_target(H) - return + return TRUE if(isanimal(M)) a_intent = I_HURT @@ -212,19 +210,16 @@ stun_baton.attack(M, src, BP_CHEST) //robots and turrets aim for center of mass flick(attack_state, src) + return TRUE -/mob/living/bot/secbot/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/baton(Tsec) - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - spark_at(src, cardinal_only = TRUE) - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - qdel(src) +/mob/living/bot/secbot/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(. && my_turf) + new /obj/item/assembly/prox_sensor(my_turf) + new /obj/item/baton(my_turf) + if(prob(50)) + new /obj/item/robot_parts/l_arm(my_turf) /mob/living/bot/secbot/proc/target_name(mob/living/T) if(ishuman(T)) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm new file mode 100644 index 00000000000..63245e2713d --- /dev/null +++ b/code/modules/mob/living/brain/brain.dm @@ -0,0 +1,116 @@ +/mob/living/brain + name = "brain" + icon = 'icons/obj/surgery.dmi' + icon_state = "brain1" + + // Used for EMP damage when inside an interface or robobrain. + var/emp_damage = 0 + var/last_emp_message = 0 + var/static/max_emp_damage = 30 + var/static/list/emp_reboot_strings = list( + SPAN_NOTICE("System reboot nearly complete."), + SPAN_NOTICE("Primary systems are now online."), + SPAN_DANGER("Major electrical distruption detected: System rebooting.") + ) + +SAVED_VAR(/mob/living/brain, emp_damage) + +/mob/living/brain/get_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/audible/alarm, + /decl/emote/audible/alert, + /decl/emote/audible/notice, + /decl/emote/audible/whistle, + /decl/emote/audible/synth, + /decl/emote/audible/boop, + /decl/emote/visible/blink, + /decl/emote/visible/flash + ) + return default_emotes + +/mob/living/brain/handle_regular_status_updates() + . = ..() + if(emp_damage || stat == DEAD || !is_in_interface()) + SET_STATUS_MAX(src, STAT_SILENCE, 2) + +/mob/living/brain/is_deaf() + return emp_damage || stat == DEAD || !is_in_interface() + +/mob/living/brain/is_blind() + return emp_damage || stat == DEAD || !is_in_interface() + +/mob/living/brain/Logout() + . = ..() + var/obj/item/organ/internal/container = get_container() + if(istype(container)) + container.queue_icon_update() + +/mob/living/brain/proc/get_container() + . = loc?.loc + +/mob/living/brain/Login() + . = ..() + var/obj/item/organ/internal/container = get_container() + if(istype(container)) + var/obj/item/organ/internal/brain_interface/interface = container + if(istype(interface)) + interface.locked = TRUE + container.update_icon() + +/mob/living/brain/proc/is_in_interface() + var/container = get_container() + return istype(container, /obj/item/organ/internal/brain_interface) || istype(container, /obj/item/organ/internal/brain/robotic) + +/mob/living/brain/can_emote(emote_type, show_message) + return is_in_interface() && ..() + +/mob/living/brain/can_use_rig() + return is_in_interface() + +/mob/living/brain/Destroy() + ghostize() + . = ..() + +/mob/living/brain/say_understands(var/other) + . = ishuman(other) || (is_in_interface() && issilicon(other)) || ..() + +/mob/living/brain/UpdateLyingBuckledAndVerbStatus() + return + +/mob/living/brain/isSynthetic() + return istype(get_container(), /obj/item/organ/internal/brain/robotic) + +/mob/living/brain/binarycheck() + return isSynthetic() + +/mob/living/brain/check_has_mouth() + return FALSE + +/mob/living/brain/emp_act(severity) + if(!isSynthetic()) + return + switch(severity) + if(1) + emp_damage += rand(20,30) + if(2) + emp_damage += rand(10,20) + if(3) + emp_damage += rand(0,10) + emp_damage = clamp(emp_damage, 0, max_emp_damage) + +/mob/living/brain/handle_regular_status_updates() // Status & health update, are we dead or alive etc. + . = ..() + if(stat == DEAD || !isSynthetic()) + emp_damage = 0 + return + if(emp_damage <= 0) + return + emp_damage -= 1 + var/msg_threshold = clamp(CEILING(emp_damage / (max_emp_damage / length(emp_reboot_strings))), 1, length(emp_reboot_strings)) + if(last_emp_message != msg_threshold) + last_emp_message = msg_threshold + to_chat(src, emp_reboot_strings[msg_threshold]) + if(emp_damage <= 0) + last_emp_message = 0 + emp_damage = 0 + to_chat(src, SPAN_NOTICE("All systems restored.")) diff --git a/code/modules/mob/living/brain/death.dm b/code/modules/mob/living/brain/death.dm new file mode 100644 index 00000000000..a58511aaaef --- /dev/null +++ b/code/modules/mob/living/brain/death.dm @@ -0,0 +1,25 @@ +/mob/living/brain/get_death_message(gibbed) + var/obj/item/organ/internal/brain_interface/container = get_container() + if(!gibbed && istype(container)) + return "beeps shrilly as \the [container] flatlines!" + return ..() + +/mob/living/brain/death(gibbed) + var/obj/item/organ/holder = loc + var/obj/item/organ/internal/brain_interface/container = get_container() + . = ..() + if(.) + if(stat == DEAD && istype(holder)) + holder.die() + if(istype(container) && !QDELETED(container)) + container.update_icon() + +/mob/living/brain/gib(do_gibs = TRUE) + var/obj/item/organ/internal/brain_interface/container = get_container() + var/obj/item/organ/internal/brain/sponge = loc + . = ..() + if(.) + if(!QDELETED(container)) + qdel(container) + if(!QDELETED(sponge)) + qdel(sponge) diff --git a/code/modules/mob/living/brain/say.dm b/code/modules/mob/living/brain/say.dm new file mode 100644 index 00000000000..4a59e86f064 --- /dev/null +++ b/code/modules/mob/living/brain/say.dm @@ -0,0 +1,16 @@ +/mob/living/brain/say(var/message, var/decl/language/speaking, var/verb = "says", var/alt_name = "", whispering) + if(GET_STATUS(src, STAT_SILENCE) || !is_in_interface()) + return + if(prob(emp_damage*4)) + if(prob(10)) + return + message = Gibberish(message, (emp_damage*6)) + . = ..(message, speaking, verb, alt_name, whispering) + var/obj/item/radio/radio = get_radio() + if(radio) + radio.hear_talk(src, sanitize(message), verb, speaking) + +/mob/living/brain/get_radio() + var/obj/item/organ/internal/brain_interface/container = get_container() + if(istype(container)) + return container.get_radio() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 2ef856b10ea..6ea8078caa5 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -2,8 +2,7 @@ name = "alien" desc = "What IS that?" pass_flags = PASS_FLAG_TABLE - health = 100 - maxHealth = 100 + max_health = 100 mob_size = MOB_SIZE_TINY mob_sort_value = 8 var/dead_icon @@ -11,6 +10,9 @@ var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw." var/instance_num +/mob/living/carbon/alien/get_death_message() + return death_msg || ..() + /mob/living/carbon/alien/Initialize() verbs += /mob/living/proc/ventcrawl verbs += /mob/living/proc/hide @@ -26,8 +28,40 @@ gender = NEUTER . = ..() +/mob/living/carbon/alien/get_blood_color() + return COLOR_LIME + /mob/living/carbon/alien/restrained() return 0 /mob/living/carbon/alien/get_admin_job_string() return "Alien" + +/mob/living/carbon/alien/get_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/visible, + /decl/emote/visible/scratch, + /decl/emote/visible/drool, + /decl/emote/visible/nod, + /decl/emote/visible/sway, + /decl/emote/visible/sulk, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/roll, + /decl/emote/visible/shake, + /decl/emote/visible/jump, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/hiss, + /decl/emote/audible/burp, + /decl/emote/audible/deathgasp_alien, + /decl/emote/audible/whimper, + /decl/emote/audible/gasp, + /decl/emote/audible/scretch, + /decl/emote/audible/choke, + /decl/emote/audible/moan, + /decl/emote/audible/gnarl + ) + return default_emotes diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm index dd556813f6e..a9589f5725e 100644 --- a/code/modules/mob/living/carbon/alien/alien_attacks.dm +++ b/code/modules/mob/living/carbon/alien/alien_attacks.dm @@ -20,7 +20,6 @@ SET_STATUS_MAX(src, STAT_WEAK, rand(10,15)) user.visible_message(SPAN_DANGER("\The [user] has weakened \the [src]!"), 1, SPAN_WARNING("You hear someone fall."), 2) adjustBruteLoss(damage) - updatehealth() else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message(SPAN_DANGER("\The [user] has attempted to punch \the [src]!"), 1) diff --git a/code/modules/mob/living/carbon/alien/alien_damage.dm b/code/modules/mob/living/carbon/alien/alien_damage.dm index e75135ae6a6..1a1d4e2ef77 100644 --- a/code/modules/mob/living/carbon/alien/alien_damage.dm +++ b/code/modules/mob/living/carbon/alien/alien_damage.dm @@ -17,6 +17,5 @@ SET_STATUS_MAX(src, STAT_PARA, 1) SET_STATUS_MAX(src, STAT_TINNITUS, 15) SET_STATUS_MAX(src, STAT_DEAF, 60) - adjustBruteLoss(b_loss) + adjustBruteLoss(b_loss, do_update_health = FALSE) adjustFireLoss(f_loss) - updatehealth() diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index 87990ae7564..e255f170f20 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -1,4 +1,7 @@ +/mob/living/carbon/alien/get_death_message(gibbed) + return death_msg + /mob/living/carbon/alien/death(gibbed) - if(!gibbed && dead_icon) + . = ..() + if(. && !gibbed && dead_icon) icon_state = dead_icon - return ..(gibbed,death_msg) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index e30e596790e..58fff70c26a 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -1,13 +1,3 @@ -// Alien larva are quite simple. -/mob/living/carbon/alien/Life() - set invisibility = FALSE - set background = TRUE - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return - if(!loc) return - ..() - //Status updates, death etc. - update_icon() - /mob/living/carbon/alien/handle_mutations_and_radiation() ..() if(radiation) @@ -15,57 +5,55 @@ radiation -= rads adjust_nutrition(rads) heal_overall_damage(rads,rads) - adjustOxyLoss(-(rads)) + adjustOxyLoss(-(rads), do_update_health = FALSE) adjustToxLoss(-(rads)) /mob/living/carbon/alien/handle_regular_status_updates() - if(status_flags & GODMODE) return 0 + . = ..() if(stat == DEAD) SET_STATUS_MAX(src, STAT_BLIND, 2) set_status(STAT_SILENCE, 0) - else - updatehealth() - if(health <= 0) - death() - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_status(STAT_SILENCE, 0) - return 1 - - if(HAS_STATUS(src, STAT_PARA)) - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_stat(UNCONSCIOUS) - if(getHalLoss() > 0) - adjustHalLoss(-3) - - if(HAS_STATUS(src, STAT_ASLEEP)) + else if(HAS_STATUS(src, STAT_PARA)) + SET_STATUS_MAX(src, STAT_BLIND, 2) + set_stat(UNCONSCIOUS) + if(getHalLoss() > 0) adjustHalLoss(-3) - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_stat(UNCONSCIOUS) - else if(resting) - if(getHalLoss() > 0) - adjustHalLoss(-3) - - else - set_stat(CONSCIOUS) - if(getHalLoss() > 0) - adjustHalLoss(-1) - - // Eyes and blindness. - if(!check_has_eyes()) - SET_STATUS_MAX(src, STAT_BLIND, 2) - SET_STATUS_MAX(src, STAT_BLURRY, 1) - - update_icon() + if(HAS_STATUS(src, STAT_ASLEEP)) + adjustHalLoss(-3) + if (mind) + if(mind.active && client != null) + ADJ_STATUS(src, STAT_ASLEEP, -1) + SET_STATUS_MAX(src, STAT_BLIND, 2) + set_stat(UNCONSCIOUS) + else if(resting) + if(getHalLoss() > 0) + adjustHalLoss(-3) + else + set_stat(CONSCIOUS) + if(getHalLoss() > 0) + adjustHalLoss(-1) - return 1 + // Eyes and blindness. + if(!check_has_eyes()) + set_status(STAT_BLIND, 1) + SET_STATUS_MAX(src, STAT_BLIND, 2) + set_status(STAT_BLURRY, 1) + else if(GET_STATUS(src, STAT_BLIND)) + ADJ_STATUS(src, STAT_BLIND, -1) + SET_STATUS_MAX(src, STAT_BLIND, 2) + update_icon() + return TRUE /mob/living/carbon/alien/handle_regular_hud_updates() + . = ..() + if(!.) + return update_sight() if (healths) if(stat != DEAD) - switch(health) + switch(current_health) if(100 to INFINITY) healths.icon_state = "health0" if(80 to 100) @@ -94,7 +82,6 @@ if(machine) if(machine.check_eye(src) < 0) reset_view(null) - return 1 /mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) ..() diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm deleted file mode 100644 index 745a08ca834..00000000000 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ /dev/null @@ -1,189 +0,0 @@ -/obj/item/mmi/digital/Initialize() - brainmob = new(src) - brainmob.set_stat(CONSCIOUS) - brainmob.add_language(/decl/language/binary) - brainmob.add_language(/decl/language/machine) - brainmob.container = src - brainmob.set_status(STAT_SILENCE, 0) - PickName() - . = ..() - -/obj/item/mmi/digital/proc/PickName() - return - -/obj/item/mmi/digital/attackby() - return - -/obj/item/mmi/digital/attack_self() - return - -/obj/item/mmi - name = "\improper Man-Machine Interface" - desc = "A complex life support shell that interfaces between a brain and electronic devices." - icon = 'icons/obj/assemblies.dmi' - icon_state = "mmi_empty" - w_class = ITEM_SIZE_NORMAL - origin_tech = "{'biotech':3}" - material = /decl/material/solid/metal/steel - matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) - req_access = list(access_robotics) - - //Revised. Brainmob is now contained directly within object of transfer. MMI in this case. - - var/locked = 0 - var/mob/living/carbon/brain/brainmob = null//The current occupant. - var/obj/item/organ/internal/brain/brainobj = null //The current brain organ. - -/obj/item/mmi/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO - - var/obj/item/organ/internal/brain/B = O - if(B.damage >= B.max_damage) - to_chat(user, "That brain is well and truly dead.") - return - else if(!B.brainmob || !B.can_use_mmi) - to_chat(user, "This brain is completely useless to you.") - return - if(!user.try_unequip(O, src)) - return - user.visible_message("\The [user] sticks \a [O] into \the [src].") - - brainmob = B.brainmob - B.brainmob = null - brainmob.forceMove(src) - brainmob.container = src - brainmob.set_stat(CONSCIOUS) - brainmob.switch_from_dead_to_living_mob_list() //Update dem lists - - brainobj = O - - SetName("[initial(name)]: ([brainmob.real_name])") - update_icon() - - locked = 1 - - SSstatistics.add_field("cyborg_mmis_filled",1) - - return - - if((istype(O,/obj/item/card/id)||istype(O,/obj/item/modular_computer)) && brainmob) - if(allowed(user)) - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] the brain holder.") - else - to_chat(user, "Access denied.") - return - if(brainmob) - O.attack(brainmob, user)//Oh noooeeeee - return - ..() - - //TODO: ORGAN REMOVAL UPDATE. Make the brain remain in the MMI so it doesn't lose organ data. -/obj/item/mmi/attack_self(mob/user) - if(!brainmob) - to_chat(user, "You upend the MMI, but there's nothing in it.") - else if(locked) - to_chat(user, "You upend the MMI, but the brain is clamped into place.") - else - to_chat(user, "You upend the MMI, spilling the brain onto the floor.") - var/obj/item/organ/internal/brain/brain - if (brainobj) //Pull brain organ out of MMI. - brainobj.forceMove(user.loc) - brain = brainobj - brainobj = null - else //Or make a new one if empty. - brain = new(user.loc) - brainmob.container = null//Reset brainmob mmi var. - brainmob.forceMove(brain)//Throw mob into brain. - brainmob.remove_from_living_mob_list() //Get outta here - brain.brainmob = brainmob//Set the brain to use the brainmob - brainmob = null//Set mmi brainmob var to null - - update_icon() - SetName(initial(name)) - -/obj/item/mmi/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. - brainmob = new(src) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna - brainmob.container = src - brainmob.timeofhostdeath = H.timeofdeath - brainmob.set_stat(CONSCIOUS) - - SetName("[initial(name)]: [brainmob.real_name]") - update_icon() - locked = 1 - -/obj/item/mmi/preserve_in_cryopod(obj/machinery/cryopod/pod) - return brainmob && brainmob.client && brainmob.key - -/obj/item/mmi/relaymove(var/mob/user, var/direction) - if(user.incapacitated(INCAPACITATION_KNOCKOUT)) - return - var/obj/item/rig/rig = get_rig() - if(rig) - rig.forced_move(direction, user) - -/obj/item/mmi/Destroy() - if(isrobot(loc)) - var/mob/living/silicon/robot/borg = loc - borg.mmi = null - QDEL_NULL(brainmob) - return ..() - -/obj/item/mmi/radio_enabled - name = "radio-enabled man-machine interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." - origin_tech = "{'biotech':4}" - material = /decl/material/solid/metal/steel - matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) - var/obj/item/radio/radio = null//Let's give it a radio. - -/obj/item/mmi/radio_enabled/Initialize() - . = ..() - radio = new(src)//Spawns a radio inside the MMI. - radio.broadcasting = 1//So it's broadcasting from the start. - -/obj/item/mmi/radio_enabled/verb/Toggle_Broadcasting() //Allows the brain to toggle the radio functions. - set name = "Toggle Broadcasting" - set desc = "Toggle broadcasting channel on or off." - set category = "MMI" - set src = usr.loc//In user location, or in MMI in this case. - set popup_menu = 0//Will not appear when right clicking. - - if(brainmob.stat)//Only the brainmob will trigger these so no further check is necessary. - to_chat(brainmob, "Can't do that while incapacitated or dead.") - - radio.broadcasting = radio.broadcasting==1 ? 0 : 1 - to_chat(brainmob, "Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting.") - -/obj/item/mmi/radio_enabled/verb/Toggle_Listening() - set name = "Toggle Listening" - set desc = "Toggle listening channel on or off." - set category = "MMI" - set src = usr.loc - set popup_menu = 0 - - if(brainmob.stat) - to_chat(brainmob, "Can't do that while incapacitated or dead.") - - radio.listening = radio.listening==1 ? 0 : 1 - to_chat(brainmob, "Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.") - -/obj/item/mmi/emp_act(severity) - if(!brainmob) - return - else - switch(severity) - if(1) - brainmob.emp_damage += rand(20,30) - if(2) - brainmob.emp_damage += rand(10,20) - if(3) - brainmob.emp_damage += rand(0,10) - ..() - -/obj/item/mmi/on_update_icon() - . = ..() - icon_state = brainmob ? "mmi_full" : "mmi_empty" diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm deleted file mode 100644 index 6c61b5d061a..00000000000 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ /dev/null @@ -1,37 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/mob/living/carbon/brain - var/obj/item/container = null - var/timeofhostdeath = 0 - var/emp_damage = 0//Handles a type of MMI damage - var/alert = null - icon = 'icons/obj/surgery.dmi' - icon_state = "brain1" - mob_sort_value = 7 - -/mob/living/carbon/brain/Initialize() - create_reagents(1000) - . = ..() - -/mob/living/carbon/brain/Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - . = ..() - -/mob/living/carbon/brain/say_understands(mob/speaker, decl/language/speaking) - return (issilicon(speaker) && (istype(container, /obj/item/mmi) || istype(loc, /obj/item/organ/internal/posibrain))) || ishuman(speaker) || ..() - -/mob/living/carbon/brain/UpdateLyingBuckledAndVerbStatus() - return - -/mob/living/carbon/brain/isSynthetic() - return istype(container, /obj/item/mmi/digital) || istype(loc, /obj/item/organ/internal/posibrain) - -/mob/living/carbon/brain/binarycheck() - return isSynthetic() - -/mob/living/carbon/brain/check_has_mouth() - return 0 - diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm deleted file mode 100644 index 5f728287cec..00000000000 --- a/code/modules/mob/living/carbon/brain/death.dm +++ /dev/null @@ -1,14 +0,0 @@ -/mob/living/carbon/brain/death(gibbed) - if(!gibbed && istype(container, /obj/item/mmi)) //If not gibbed but in a container. - container.icon_state = "mmi_dead" - return ..(gibbed,"beeps shrilly as the MMI flatlines!") - else - return ..(gibbed,"no message") - -/mob/living/carbon/brain/gib(anim="gibbed-m",do_gibs) - if(istype(container, /obj/item/mmi)) - qdel(container)//Gets rid of the MMI if there is one - if(loc) - if(istype(loc,/obj/item/organ/internal/brain)) - qdel(loc)//Gets rid of the brain item - ..(null,1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm deleted file mode 100644 index 98fd99f1e2b..00000000000 --- a/code/modules/mob/living/carbon/brain/life.dm +++ /dev/null @@ -1,177 +0,0 @@ -/mob/living/carbon/brain/need_breathe() - return FALSE - -/mob/living/carbon/brain/should_breathe() - return FALSE - -/mob/living/carbon/brain/handle_mutations_and_radiation() - ..() - if (radiation) - if (radiation > 100) - radiation = 100 - if(!container)//If it's not in an MMI - to_chat(src, "You feel weak.") - else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that - to_chat(src, "STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED.") - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 - adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - if(!container) - to_chat(src, "You feel weak.") - else - to_chat(src, "STATUS: DANGEROUS LEVELS OF RADIATION DETECTED.") - updatehealth() - - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - updatehealth() - - -/mob/living/carbon/brain/handle_environment(datum/gas_mixture/environment) - ..() - if(!environment) - return - var/environment_heat_capacity = environment.heat_capacity() - if(isspaceturf(get_turf(src))) - var/turf/heat_turf = get_turf(src) - environment_heat_capacity = heat_turf.heat_capacity - if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) - var/transfer_coefficient = 1 - handle_temperature_damage(SLOT_HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) - if(stat == DEAD) - bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) - - -/mob/living/carbon/brain/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(status_flags & GODMODE) return - - if(exposed_temperature > bodytemperature) - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - //adjustFireLoss(5.0*discomfort) - adjustFireLoss(20.0*discomfort) - - else - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - adjustFireLoss(5.0*discomfort) - -/mob/living/carbon/brain/apply_chemical_effects() - . = ..() - if(resting) - ADJ_STATUS(src, STAT_DIZZY, -4) - return TRUE - -/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_> - updatehealth() - - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_status(STAT_SILENCE, 0) - else //ALIVE. LIGHTS ARE ON - if( !container && (health < config.health_threshold_dead || (config.revival_brain_life >= 0 && (world.time - timeofhostdeath) > config.revival_brain_life)) ) - death() - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_status(STAT_SILENCE, 0) - return 1 - - //Handling EMP effect in the Life(), it's made VERY simply, and has some additional effects handled elsewhere - if(emp_damage) //This is pretty much a damage type only used by MMIs, dished out by the emp_act - if(!(container && istype(container, /obj/item/mmi))) - emp_damage = 0 - else - emp_damage = round(emp_damage,1)//Let's have some nice numbers to work with - switch(emp_damage) - if(31 to INFINITY) - emp_damage = 30//Let's not overdo it - if(21 to 30)//High level of EMP damage, unable to see, hear, or speak - SET_STATUS_MAX(src, STAT_BLIND, 2) - SET_STATUS_MAX(src, STAT_DEAF, 2) - SET_STATUS_MAX(src, STAT_SILENCE, 2) - if(!alert)//Sounds an alarm, but only once per 'level' - emote("alarm") - to_chat(src, "Major electrical distruption detected: System rebooting.") - alert = 1 - if(prob(75)) - emp_damage -= 1 - if(20) - alert = 0 - set_status(STAT_BLIND, 0) - set_status(STAT_DEAF, 0) - set_status(STAT_SILENCE, 0) - emp_damage -= 1 - if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage - set_status(STAT_BLURRY, 2) - set_status(STAT_TINNITUS, 2) - if(!alert) - emote("alert") - to_chat(src, "Primary systems are now online.") - alert = 1 - if(prob(50)) - emp_damage -= 1 - if(10) - alert = 0 - set_status(STAT_BLURRY, 0) - set_status(STAT_TINNITUS, 0) - emp_damage -= 1 - if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere) - if(!alert) - emote("notice") - to_chat(src, "System reboot nearly complete.") - alert = 1 - if(prob(25)) - emp_damage -= 1 - if(1) - alert = 0 - to_chat(src, "All systems restored.") - emp_damage -= 1 - - return 1 - -/mob/living/carbon/brain/handle_regular_hud_updates() - update_sight() - if (healths) - if (stat != DEAD) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" - - if(stat != DEAD) - if(is_blind()) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - return 1 - -/mob/living/carbon/brain/can_change_intent() - return TRUE diff --git a/code/modules/mob/living/carbon/brain/login.dm b/code/modules/mob/living/carbon/brain/login.dm deleted file mode 100644 index 4f8a38ca269..00000000000 --- a/code/modules/mob/living/carbon/brain/login.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/carbon/brain/Login() - ..() - set_status(STAT_ASLEEP, 0) diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm deleted file mode 100644 index 1c4a5490ec4..00000000000 --- a/code/modules/mob/living/carbon/brain/robot.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/mmi/digital/robot - name = "robotic intelligence circuit" - desc = "The pinnacle of artifical intelligence which can be achieved using classical computer science." - icon = 'icons/obj/modules/module_mainboard.dmi' - icon_state = ICON_STATE_WORLD - w_class = ITEM_SIZE_NORMAL - origin_tech = "{'engineering':4,'materials':3,'programming':4}" - -/obj/item/mmi/digital/robot/PickName() - src.brainmob.SetName("[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]") - src.brainmob.real_name = src.brainmob.name - -/obj/item/mmi/digital/robot/on_update_icon() - . = ..() - icon_state = initial(icon_state) diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm deleted file mode 100644 index 793e0ea9033..00000000000 --- a/code/modules/mob/living/carbon/brain/say.dm +++ /dev/null @@ -1,38 +0,0 @@ -//TODO: Convert this over for languages. -/mob/living/carbon/brain/say(var/message) - if(HAS_STATUS(src, STAT_SILENCE)) - return - - message = sanitize(message) - - if(!(container && istype(container, /obj/item/mmi))) - return //No MMI, can't speak, bucko./N - else - var/decl/language/speaking = parse_language(message) - if(speaking) - message = copytext(message, 2+length(speaking.key)) - var/verb = "says" - var/ending = copytext(message, length(message)) - if (speaking) - verb = speaking.get_spoken_verb(src, ending) - else - if(ending=="!") - verb=pick("exclaims","shouts","yells") - if(ending=="?") - verb="asks" - - if(prob(emp_damage*4)) - if(prob(10))//10% chane to drop the message entirely - return - else - message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher - - if(speaking && speaking.flags & LANG_FLAG_HIVEMIND) - speaking.broadcast(src,trim(message)) - return - - if(istype(container, /obj/item/mmi/radio_enabled)) - var/obj/item/mmi/radio_enabled/R = container - if(R.radio) - spawn(0) R.radio.hear_talk(src, sanitize(message), verb, speaking) - ..(trim(message), speaking, verb) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index baed605b983..8a12df26b04 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -15,7 +15,6 @@ QDEL_NULL(touching) QDEL_NULL(bloodstr) reagents = null //We assume reagents is a reference to bloodstr here - QDEL_NULL_LIST(hallucinations) if(loc) for(var/mob/M in contents) M.dropInto(loc) @@ -61,18 +60,11 @@ var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, BP_CHEST) if(istype(organ)) organ.take_external_damage(d, 0) - updatehealth() else take_organ_damage(d) if(prob(getBruteLoss() - 50)) gib() -/mob/living/carbon/gib(anim="gibbed-m",do_gibs) - for(var/mob/M in contents) - M.dropInto(loc) - visible_message(SPAN_DANGER("\The [M] bursts out of \the [src]!")) - ..() - /mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) if(status_flags & GODMODE) return 0 //godmode @@ -302,15 +294,8 @@ /mob/living/carbon/proc/can_devour(atom/movable/victim) return FALSE -/mob/living/carbon/check_has_mouth() - // carbon mobs have mouths by default - // behavior of this proc for humans is overridden in human.dm - return 1 - -/mob/living/carbon/proc/check_mouth_coverage() - // carbon mobs do not have blocked mouths by default - // overridden in human_defense.dm - return null +/mob/living/carbon/get_satiated_nutrition() + return 350 /mob/living/carbon/get_max_nutrition() return 400 @@ -330,9 +315,6 @@ RETURN_TYPE(/decl/species) return species -/mob/living/carbon/get_species_name() - return species.name - /mob/living/carbon/get_contact_reagents() return touching diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 7c9cd0a684f..103d203f205 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -1,25 +1,6 @@ /mob/living/carbon/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - if(!effective_force) - return 0 - - //Apply weapon damage - var/damage_flags = I.damage_flags() - var/datum/wound/created_wound = apply_damage(effective_force, I.damtype, hit_zone, damage_flags, used_weapon=I, armor_pen=I.armor_penetration) - - //Melee weapon embedded object code. - if(istype(created_wound) && I && I.can_embed() && I.damtype == BRUTE && !I.anchored && !is_robot_module(I)) - var/weapon_sharp = (damage_flags & DAM_SHARP) - var/damage = effective_force //just the effective damage used for sorting out embedding, no further damage is applied here - damage *= 1 - get_blocked_ratio(hit_zone, I.damtype, I.damage_flags(), I.armor_penetration, I.force) - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3) - var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class - - //Sharp objects will always embed if they do enough damage. - if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) - src.embed(I, hit_zone, supplied_wound = created_wound) - I.has_embedded() - - return 1 + if(effective_force) + try_embed_in_mob(I, hit_zone, effective_force, direction = get_dir(user, src)) + return TRUE + return FALSE diff --git a/code/modules/mob/living/carbon/carbon_eating.dm b/code/modules/mob/living/carbon/carbon_eating.dm new file mode 100644 index 00000000000..efe6bda4d36 --- /dev/null +++ b/code/modules/mob/living/carbon/carbon_eating.dm @@ -0,0 +1,9 @@ +/mob/living/carbon/can_eat_food_currently(obj/eating, mob/user, consumption_method) + user = user || src + if(get_food_satiation(consumption_method) < get_max_nutrition()) + return TRUE + if(user == src) + to_chat(user, SPAN_WARNING("You cannot force any more of \the [eating] down your throat.")) + else + to_chat(user, SPAN_WARNING("You cannot force any more of \the [eating] down \the [src]'s throat.")) + return FALSE diff --git a/code/modules/mob/living/carbon/carbon_grabs.dm b/code/modules/mob/living/carbon/carbon_grabs.dm index 94b0b3c09b0..d318c1179f2 100644 --- a/code/modules/mob/living/carbon/carbon_grabs.dm +++ b/code/modules/mob/living/carbon/carbon_grabs.dm @@ -3,5 +3,6 @@ for(var/obj/item/grab/grab in get_held_items()) . += grab -/mob/living/carbon/make_grab(var/atom/movable/target, var/grab_tag = /decl/grab/simple) - . = ..(target, species?.grab_type || grab_tag) +/mob/living/carbon/make_grab(atom/movable/target, grab_tag = /decl/grab/simple, defer_hand = FALSE, force_grab_tag = FALSE) + grab_tag = (!force_grab_tag && species?.grab_type) || grab_tag + return ..() diff --git a/code/modules/mob/living/carbon/carbon_organs.dm b/code/modules/mob/living/carbon/carbon_organs.dm index 9e3bcd0efdb..4fd1c5d27c1 100644 --- a/code/modules/mob/living/carbon/carbon_organs.dm +++ b/code/modules/mob/living/carbon/carbon_organs.dm @@ -26,7 +26,7 @@ internal_organs = null external_organs = null -/mob/living/carbon/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached) +/mob/living/carbon/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE) var/obj/item/organ/existing = LAZYACCESS(organs_by_tag, O.organ_tag) if(existing && O != existing) CRASH("mob/living/carbon/add_organ(): '[O]' tried to overwrite [src]'s existing organ '[existing]' in slot '[O.organ_tag]'!") @@ -43,7 +43,7 @@ LAZYDISTINCTADD(external_organs, O) . = ..() -/mob/living/carbon/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE) +/mob/living/carbon/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE) if(istype(O) && !in_place && O.is_vital_to_owner() && usr) admin_attack_log(usr, src, "Removed a vital organ ([src]).", "Had a vital organ ([src]) removed.", "removed a vital organ ([src]) from") if(!(. = ..())) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 0329801ad70..348e5d0fc2e 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -9,5 +9,4 @@ Specifically made to do radiation burns. if(!isSynthetic() && !ignore_rads) damage = 0.25 * damage * (species ? species.get_radiation_mod(src) : 1) adjustFireLoss(damage) - updatehealth() return TRUE diff --git a/code/modules/mob/living/carbon/hallucinations.dm b/code/modules/mob/living/carbon/hallucinations.dm deleted file mode 100644 index 3ff542395a8..00000000000 --- a/code/modules/mob/living/carbon/hallucinations.dm +++ /dev/null @@ -1,317 +0,0 @@ -/mob/living/carbon/var/hallucination_power = 0 -/mob/living/carbon/var/hallucination_duration = 0 -/mob/living/carbon/var/next_hallucination -/mob/living/carbon/var/list/hallucinations = list() - -/mob/living/proc/adjust_hallucination(duration, power) - return - -/mob/living/proc/set_hallucination(duration, power) - return - -/mob/living/carbon/set_hallucination(duration, power) - hallucination_duration = max(hallucination_duration, duration) - hallucination_power = max(hallucination_power, power) - -/mob/living/carbon/adjust_hallucination(duration, power) - hallucination_duration = max(0, hallucination_duration + duration) - hallucination_power = max(0, hallucination_power + power) - -/mob/living/carbon/proc/handle_hallucinations() - //Tick down the duration - hallucination_duration = max(0, hallucination_duration - 1) - //Adjust power if we have some chems that affect it - if(has_chemical_effect(CE_MIND, threshold_under = -1)) - hallucination_power = hallucination_power++ - else if(has_chemical_effect(CE_MIND, threshold_under = 0)) - hallucination_power = min(hallucination_power++, 50) - else if(has_chemical_effect(CE_MIND, 1)) - hallucination_duration = max(0, hallucination_duration - 1) - hallucination_power = max(hallucination_power - GET_CHEMICAL_EFFECT(src, CE_MIND), 0) - - //See if hallucination is gone - if(!hallucination_power) - hallucination_duration = 0 - return - if(!hallucination_duration) - hallucination_power = 0 - return - - if(!client || stat || world.time < next_hallucination) - return - if(has_chemical_effect(CE_MIND, 1) && prob(GET_CHEMICAL_EFFECT(src, CE_MIND)*40)) //antipsychotics help - return - var/hall_delay = rand(10,20) SECONDS - - if(hallucination_power < 50) - hall_delay *= 2 - next_hallucination = world.time + hall_delay - var/list/candidates = list() - for(var/T in subtypesof(/datum/hallucination/)) - var/datum/hallucination/H = new T - if(H.can_affect(src)) - candidates += H - if(candidates.len) - var/datum/hallucination/H = pick(candidates) - H.holder = src - H.activate() - -////////////////////////////////////////////////////////////////////////////////////////////////////// -//Hallucination effects datums -////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/hallucination - var/mob/living/carbon/holder - var/allow_duplicates = 1 - var/duration = 0 - var/min_power = 0 //at what levels of hallucination power mobs should get it - var/max_power = INFINITY - -/datum/hallucination/proc/start() - -/datum/hallucination/proc/end() - -/datum/hallucination/proc/can_affect(var/mob/living/carbon/C) - if(!C.client) - return 0 - if(min_power > C.hallucination_power) - return 0 - if(max_power < C.hallucination_power) - return 0 - if(!allow_duplicates && (locate(type) in C.hallucinations)) - return 0 - return 1 - -/datum/hallucination/Destroy() - . = ..() - holder = null - -/datum/hallucination/proc/activate() - if(!holder || !holder.client) - return - holder.hallucinations += src - start() - spawn(duration) - if(holder) - end() - holder.hallucinations -= src - qdel(src) - - -//Playing a random sound -/datum/hallucination/sound - var/list/sounds = list('sound/machines/airlock.ogg','sound/effects/explosionfar.ogg','sound/machines/windowdoor.ogg','sound/machines/twobeep.ogg') - -/datum/hallucination/sound/start() - var/turf/T = locate(holder.x + rand(6,11), holder.y + rand(6,11), holder.z) - holder.playsound_local(T,pick(sounds),70) - -/datum/hallucination/sound/tools - sounds = list('sound/items/Ratchet.ogg','sound/items/Welder.ogg','sound/items/Crowbar.ogg','sound/items/Screwdriver.ogg') - -/datum/hallucination/sound/danger - min_power = 30 - sounds = list('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/weapons/smash.ogg') - -/datum/hallucination/sound/spooky - min_power = 50 - sounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - -//Hearing someone being shot twice -/datum/hallucination/gunfire - var/gunshot - var/turf/origin - duration = 15 - min_power = 30 - -/datum/hallucination/gunfire/start() - gunshot = pick('sound/weapons/gunshot/gunshot_strong.ogg', 'sound/weapons/gunshot/gunshot2.ogg', 'sound/weapons/gunshot/shotgun.ogg', 'sound/weapons/gunshot/gunshot.ogg','sound/weapons/Taser.ogg') - origin = locate(holder.x + rand(4,8), holder.y + rand(4,8), holder.z) - holder.playsound_local(origin,gunshot,50) - -/datum/hallucination/gunfire/end() - holder.playsound_local(origin,gunshot,50) - -//Hearing someone talking to/about you. -/datum/hallucination/talking/can_affect(var/mob/living/carbon/C) - if(!..()) - return 0 - for(var/mob/living/M in oview(C)) - return TRUE - -/datum/hallucination/talking/start() - var/sanity = 5 //even insanity needs some sanity - for(var/mob/living/talker in oview(holder)) - if(talker.stat) - continue - var/message - if(prob(80)) - var/list/names = list() - var/lastname = copytext(holder.real_name, findtext(holder.real_name, " ")+1) - var/firstname = copytext(holder.real_name, 1, findtext(holder.real_name, " ")) - if(lastname) names += lastname - if(firstname) names += firstname - if(!names.len) - names += holder.real_name - var/add = prob(20) ? ", [pick(names)]" : "" - var/list/phrases = list("[prob(50) ? "Hey, " : ""][pick(names)]!","[prob(50) ? "Hey, " : ""][pick(names)]?","Get out[add]!","Go away[add].","What are you doing[add]?","Where's your ID[add]?") - if(holder.hallucination_power > 50) - phrases += list("What did you come here for[add]?","Don't touch me[add].","You're not getting out of here[add].", "You are a failure, [pick(names)].","Just kill yourself already, [pick(names)].","Put on some clothes[add].","Take off your clothes[add].") - message = pick(phrases) - to_chat(holder,"[talker.name] [holder.say_quote(message)], \"[message]\"") - else - to_chat(holder,"[talker.name] points at [holder.name]") - to_chat(holder,"[talker.name] says something softly.") - - var/speech_state = holder.check_speech_punctuation_state(message) - if(speech_state) - var/image/speech_bubble = image('icons/mob/talk.dmi', talker, speech_state) - addtimer(CALLBACK(src, .proc/qdel_image, speech_bubble), 3 SECONDS) - show_image(holder, speech_bubble) - - sanity-- //don't spam them in very populated rooms. - if(!sanity) - return - -/datum/hallucination/talking/proc/qdel_image(var/image/speech_bubble) - qdel(speech_bubble) - -//Spiderling skitters -/datum/hallucination/skitter/start() - to_chat(holder,"The spiderling skitters[pick(" away"," around","")].") - -//Spiders in your body -/datum/hallucination/spiderbabies - min_power = 40 - -/datum/hallucination/spiderbabies/start() - var/mob/living/carbon/H = holder - var/list/limbs = H.get_external_organs() - if(!LAZYLEN(limbs)) - return - var/obj/O = pick(limbs) - to_chat(H,SPAN_WARNING("You feel something [pick("moving","squirming","skittering")] inside of your [O.name]!")) - -//Seeing stuff -/datum/hallucination/mirage - duration = 30 SECONDS - max_power = 30 - var/number = 1 - var/list/things = list() //list of images to display - -/datum/hallucination/mirage/Destroy() - end() - . = ..() - -/datum/hallucination/mirage/proc/generate_mirage() - var/icon/T = new('icons/obj/trash.dmi') - return image(T, pick(T.IconStates()), layer = BELOW_TABLE_LAYER) - -/datum/hallucination/mirage/start() - var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(holder, world.view+1)) - possible_points += F - if(possible_points.len) - for(var/i = 1 to number) - var/image/thing = generate_mirage() - things += thing - thing.loc = pick(possible_points) - holder.client.images += things - -/datum/hallucination/mirage/end() - if(holder.client) - holder.client.images -= things - -//LOADSEMONEY -/datum/hallucination/mirage/money - min_power = 20 - max_power = 45 - number = 2 - -/datum/hallucination/mirage/money/generate_mirage() - return image('icons/obj/items/money.dmi', "cash_x_5]", layer = BELOW_TABLE_LAYER) - -//Blood and aftermath of firefight -/datum/hallucination/mirage/carnage - min_power = 50 - number = 10 - -/datum/hallucination/mirage/carnage/generate_mirage() - if(prob(50)) - var/image/I = image('icons/effects/blood.dmi', pick("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7"), layer = BELOW_TABLE_LAYER) - I.color = COLOR_BLOOD_HUMAN - return I - else - var/image/I = image('icons/obj/ammo.dmi', "s-casing-spent", layer = BELOW_TABLE_LAYER) - I.layer = BELOW_TABLE_LAYER - I.dir = pick(global.alldirs) - I.pixel_x = rand(-10,10) - I.pixel_y = rand(-10,10) - return I - -//Fake telepathy -/datum/hallucination/telepahy - allow_duplicates = 0 - duration = 20 MINUTES - -/datum/hallucination/telepahy/start() - to_chat(holder,"You expand your mind outwards.") - holder.verbs += /mob/living/carbon/human/proc/fakeremotesay - -/datum/hallucination/telepahy/end() - if(holder) - holder.verbs -= /mob/living/carbon/human/proc/fakeremotesay - -/mob/living/carbon/human/proc/fakeremotesay() - set name = "Telepathic Message" - set category = "Superpower" - - if(!hallucination_power) - src.verbs -= /mob/living/carbon/human/proc/fakeremotesay - return - - if(stat) - to_chat(usr, SPAN_WARNING("You're not in any state to use your powers right now!")) - return - - if(has_chemical_effect(CE_MIND, 1)) - to_chat(usr, SPAN_WARNING("Chemicals in your blood prevent you from using your power!")) - - var/list/creatures = list() - for(var/mob/living/carbon/C in SSmobs.mob_list) - creatures += C - creatures -= usr - var/mob/target = input("Who do you want to project your mind to?") as null|anything in creatures - if (isnull(target)) - return - - var/msg = sanitize(input(usr, "What do you wish to transmit")) - show_message(SPAN_NOTICE("You project your mind into [target.name]: \"[msg]\"")) - if(!stat && prob(20)) - say(msg) - -//Fake attack -/datum/hallucination/fakeattack - min_power = 30 - -/datum/hallucination/fakeattack/can_affect(var/mob/living/carbon/C) - if(!..()) - return 0 - for(var/mob/living/M in oview(C,1)) - return TRUE - -/datum/hallucination/fakeattack/start() - for(var/mob/living/M in oview(holder,1)) - to_chat(holder, "[M] has punched [holder]!") - holder.playsound_local(get_turf(holder),"punch",50) - -//Fake injection -/datum/hallucination/fakeattack/hypo - min_power = 30 - -/datum/hallucination/fakeattack/hypo/start() - to_chat(holder, "You feel a tiny prick!") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 187c27dc5ea..65b725089f0 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -1,58 +1,42 @@ -/mob/living/carbon/human/gib(anim="gibbed-m",do_gibs) - for(var/obj/item/organ/I in get_internal_organs()) - remove_organ(I) - if(!QDELETED(I) && isturf(loc)) - I.throw_at(get_edge_target_turf(src, pick(global.alldirs)), rand(1,3), THROWFORCE_GIBS) - - for(var/obj/item/organ/external/E in get_external_organs()) - if(!E.parent_organ) - continue //Skip root organ - E.dismember(FALSE, DISMEMBER_METHOD_EDGE, TRUE, ignore_last_organ = TRUE) - - for(var/obj/item/I in get_contained_external_atoms()) - drop_from_inventory(I) - if(!QDELETED(I)) - I.throw_at(get_edge_target_turf(src, pick(global.alldirs)), rand(1,3), round(THROWFORCE_GIBS/I.w_class)) - - var/last_loc = loc - ..(species.gibbed_anim, do_gibs = FALSE) - if(last_loc) - gibs(last_loc, _fleshcolor = species.get_flesh_colour(src), _bloodcolor = species.get_blood_color(src)) - -/mob/living/carbon/human/dust() - if(species) - ..(species.dusted_anim, species.remains_type) - else - ..() - -/mob/living/carbon/human/death(gibbed,deathmessage="seizes up and falls limp...", show_dead_message = "You have died.") - - if(stat == DEAD) return - - BITSET(hud_updateflag, HEALTH_HUD) - BITSET(hud_updateflag, STATUS_HUD) - BITSET(hud_updateflag, LIFE_HUD) - - //Handle species-specific deaths. - species.handle_death(src) - - animate_tail_stop() - - callHook("death", list(src, gibbed)) - - if(SSticker.mode) - SSticker.mode.check_win() - - if(config.show_human_death_message) - deathmessage = species.get_death_message(src) || "seizes up and falls limp..." - else - deathmessage = "no message" - . = ..(gibbed, deathmessage, show_dead_message) - if(!gibbed) - handle_organs() - if(species.death_sound) - playsound(loc, species.death_sound, 80, 1, 1) - handle_hud_list() +/mob/living/carbon/human/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..() + if(.) + for(var/obj/item/organ/I in get_internal_organs()) + remove_organ(I) + if(!QDELETED(I) && isturf(my_turf)) + I.dropInto(my_turf) + I.throw_at(get_edge_target_turf(I, pick(global.alldirs)), rand(1,3), THROWFORCE_GIBS) + for(var/obj/item/organ/external/E in get_external_organs()) + if(!E.parent_organ) + continue //Skip root organ + E.dismember(FALSE, DISMEMBER_METHOD_EDGE, TRUE, ignore_last_organ = TRUE) + if(my_turf) + E.dropInto(my_turf) + E.throw_at(get_edge_target_turf(E, pick(global.alldirs)), rand(1,3), THROWFORCE_GIBS) + +/mob/living/carbon/human/get_death_message(gibbed) + if(get_config_value(/decl/config/toggle/health_show_human_death_message)) + return species.get_species_death_message(src) || "seizes up and falls limp..." + return ..() + +/mob/living/carbon/human/death(gibbed) + . = ..() + if(.) + BITSET(hud_updateflag, HEALTH_HUD) + BITSET(hud_updateflag, STATUS_HUD) + BITSET(hud_updateflag, LIFE_HUD) + //Handle species-specific deaths. + callHook("death", list(src, gibbed)) + handle_hud_list() + if(!gibbed) + animate_tail_stop() + handle_organs() + if(species.death_sound) + playsound(loc, species.death_sound, 80, 1, 1) + if(SSticker.mode) + SSticker.mode.check_win() + species.handle_death(src) /mob/living/carbon/human/proc/is_husked() return (MUTATION_HUSK in mutations) @@ -61,9 +45,8 @@ if(is_husked()) return - f_style = /decl/sprite_accessory/facial_hair/shaved - h_style = /decl/sprite_accessory/hair/bald - update_hair(0) + SET_FACIAL_HAIR_STYLE(src, /decl/sprite_accessory/facial_hair/shaved, TRUE) + SET_HAIR_STYLE(src, /decl/sprite_accessory/hair/bald, FALSE) mutations.Add(MUTATION_HUSK) for(var/obj/item/organ/external/E in get_external_organs()) diff --git a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm index 168bc7d0aa9..c0aaf0a4224 100644 --- a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm +++ b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm @@ -14,7 +14,7 @@ */ -/mob/living/carbon/human/proc/show_descriptors_to(var/mob/user) +/mob/living/carbon/human/proc/show_descriptors_to(mob/user) if(LAZYLEN(appearance_descriptors)) if(user == src) for(var/entry in appearance_descriptors) @@ -41,7 +41,21 @@ var/equivalent_variance_threshold = 0.1 // Variance % below this value will be treated as equivalent when examining another mob. var/comparison_variance_multiplier = 0.75 // A multiplier applied to variance values to tighten them in a bit and allow for major cross-species variations to have more significant strings. -/datum/appearance_descriptor/New(var/comparison_val = 1) +SAVED_VAR(/datum/appearance_descriptor, name) +SAVED_VAR(/datum/appearance_descriptor, chargen_label) +SAVED_VAR(/datum/appearance_descriptor, default_value) +SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptor_equivalent) +SAVED_VAR(/datum/appearance_descriptor, standalone_value_descriptors) +SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptors_smaller) +SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptors_larger) +SAVED_VAR(/datum/appearance_descriptor, chargen_value_descriptors) +SAVED_VAR(/datum/appearance_descriptor, chargen_min_index) +SAVED_VAR(/datum/appearance_descriptor, chargen_max_index) +SAVED_VAR(/datum/appearance_descriptor, skip_species_mention) +SAVED_VAR(/datum/appearance_descriptor, equivalent_variance_threshold) +SAVED_VAR(/datum/appearance_descriptor, comparison_variance_multiplier) + +/datum/appearance_descriptor/New(comparison_val = 1) if(!isnull(comparison_val)) relative_value_comparison_multiplier = comparison_val if(!chargen_label) @@ -60,19 +74,19 @@ /datum/appearance_descriptor/proc/set_default_value() default_value = CEILING(LAZYLEN(standalone_value_descriptors) * 0.5) -/datum/appearance_descriptor/proc/get_mob_scale_adjustments(var/offset_value) +/datum/appearance_descriptor/proc/get_mob_scale_adjustments(decl/bodytype/bodytype, offset_value) return -/datum/appearance_descriptor/proc/get_mob_overlay(var/mob/applying, var/offset_value) +/datum/appearance_descriptor/proc/get_mob_appearance_overlay(mob/applying, offset_value) return -/datum/appearance_descriptor/proc/get_third_person_message_start(var/decl/pronouns/my_gender) +/datum/appearance_descriptor/proc/get_third_person_message_start(decl/pronouns/my_gender) return "[my_gender.He] [my_gender.is]" /datum/appearance_descriptor/proc/get_first_person_message_start() return "You are" -/datum/appearance_descriptor/proc/get_standalone_value_descriptor(var/check_value) +/datum/appearance_descriptor/proc/get_standalone_value_descriptor(check_value) if(isnull(check_value)) check_value = default_value else @@ -81,10 +95,10 @@ return standalone_value_descriptors[check_value] // Build a species-specific descriptor string. -/datum/appearance_descriptor/proc/get_species_text(var/use_name) +/datum/appearance_descriptor/proc/get_species_text(use_name) . = " for \a [use_name]" -/datum/appearance_descriptor/proc/get_initial_comparison_component(var/mob/me, var/mob/them, var/decl/pronouns/my_gender, var/decl/pronouns/other_gender, var/my_value) +/datum/appearance_descriptor/proc/get_initial_comparison_component(mob/me, mob/them, decl/pronouns/my_gender, decl/pronouns/other_gender, my_value) if(!skip_species_mention) var/mob/living/carbon/human/H = me var/mob/living/carbon/human/O = them @@ -92,7 +106,7 @@ . = get_species_text("\improper [H.species.name]") . = "[get_third_person_message_start(my_gender)] [get_standalone_value_descriptor(my_value)][.]" -/datum/appearance_descriptor/proc/get_secondary_comparison_component(var/decl/pronouns/my_gender, var/decl/pronouns/other_gender, var/my_value, var/comparing_value) +/datum/appearance_descriptor/proc/get_secondary_comparison_component(decl/pronouns/my_gender, decl/pronouns/other_gender, my_value, comparing_value) var/variance = abs(1-(my_value/comparing_value)) * comparison_variance_multiplier if(variance < equivalent_variance_threshold) . = "[.], [get_comparative_value_string_equivalent(my_gender, other_gender)]" @@ -102,7 +116,7 @@ else if(my_value > comparing_value) . = "[.], [get_comparative_value_string_larger(variance, my_gender, other_gender)]" -/datum/appearance_descriptor/proc/get_comparative_value_descriptor(var/my_value, var/mob/observer, var/mob/me) +/datum/appearance_descriptor/proc/get_comparative_value_descriptor(my_value, mob/observer, mob/me) // Store our gender info for later. var/decl/pronouns/my_gender = me.get_pronouns() @@ -124,18 +138,18 @@ // We're done, add a full stop. . = "[.]. " -/datum/appearance_descriptor/proc/get_index_from_value(var/value) +/datum/appearance_descriptor/proc/get_index_from_value(value) return value -/datum/appearance_descriptor/proc/get_comparative_value_string_equivalent(var/decl/pronouns/my_gender, var/decl/pronouns/other_gender) +/datum/appearance_descriptor/proc/get_comparative_value_string_equivalent(decl/pronouns/my_gender, decl/pronouns/other_gender) return comparative_value_descriptor_equivalent -/datum/appearance_descriptor/proc/get_comparative_value_string_smaller(var/value, var/decl/pronouns/my_gender, var/decl/pronouns/other_gender) +/datum/appearance_descriptor/proc/get_comparative_value_string_smaller(value, decl/pronouns/my_gender, decl/pronouns/other_gender) var/maxval = LAZYLEN(comparative_value_descriptors_smaller) value = clamp(CEILING(value * maxval), 1, maxval) return comparative_value_descriptors_smaller[value] -/datum/appearance_descriptor/proc/get_comparative_value_string_larger(var/value, var/decl/pronouns/my_gender, var/decl/pronouns/other_gender) +/datum/appearance_descriptor/proc/get_comparative_value_string_larger(value, decl/pronouns/my_gender, decl/pronouns/other_gender) var/maxval = LAZYLEN(comparative_value_descriptors_larger) value = clamp(CEILING(value * maxval), 1, maxval) return comparative_value_descriptors_larger[value] @@ -143,22 +157,22 @@ /datum/appearance_descriptor/proc/has_custom_value() return FALSE -/datum/appearance_descriptor/proc/randomize_value(var/limit_chargen = TRUE) +/datum/appearance_descriptor/proc/randomize_value(limit_chargen = TRUE) if(limit_chargen) return rand(chargen_min_index, chargen_max_index) return rand(1, LAZYLEN(standalone_value_descriptors)) -/datum/appearance_descriptor/proc/get_value_from_index(var/value, var/chargen_bound = TRUE) +/datum/appearance_descriptor/proc/get_value_from_index(value, chargen_bound = TRUE) if(chargen_bound) return clamp(round(value), chargen_min_index, chargen_max_index) return clamp(round(value), 1, LAZYLEN(standalone_value_descriptors)) -/datum/appearance_descriptor/proc/sanitize_value(var/value, var/chargen_bound = TRUE) +/datum/appearance_descriptor/proc/sanitize_value(value, chargen_bound = TRUE) if(chargen_bound) return clamp(round(value), get_min_chargen_value(), get_max_chargen_value()) return clamp(round(value), 1, LAZYLEN(standalone_value_descriptors)) -/datum/appearance_descriptor/proc/get_value_text(var/value) +/datum/appearance_descriptor/proc/get_value_text(value) . = "[value || "0"]" /datum/appearance_descriptor/proc/get_min_chargen_value() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b68d1e52ac0..fd18140bdee 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -6,7 +6,7 @@ species_name += "[species.cyborg_noun] [species.get_root_species_name(src)]" else species_name += "[species.name]" - msg += ", \a [species_name]![(user.can_use_codex() && SScodex.get_codex_entry(get_codex_value(user))) ? SPAN_NOTICE(" \[?\]") : ""]" + msg += ", \a [species_name]![(user.can_use_codex() && SScodex.get_codex_entry(get_codex_value(user))) ? SPAN_NOTICE(" \[?\]") : ""]" var/extra_species_text = species.get_additional_examine_text(src) if(extra_species_text) msg += "
    [extra_species_text]" @@ -213,6 +213,22 @@ msg += "Physical status: \[[medical]\]\n" msg += "Medical records: \[View\]\n" + // Show IC/OOC info if available. + if(comments_record_id) + var/datum/character_information/comments = SScharacter_info.get_record(comments_record_id) + if(comments?.show_info_on_examine && (comments.ic_info || comments.ooc_info)) + msg += "*---------*
    " + if(comments.ic_info) + if(length(comments.ic_info) <= 40) + msg += "IC Info:
        [comments.ic_info]
    " + else + msg += "IC Info:
        [copytext_preserve_html(comments.ic_info,1,37)]... More...
    " + if(comments.ooc_info) + if(length(comments.ooc_info) <= 40) + msg += "OOC Info:
        [comments.ooc_info]
    " + else + msg += "OOC Info:
        [copytext_preserve_html(comments.ooc_info,1,37)]... More...
    " + msg += "*---------*
    " msg += applying_pressure diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e666da8e827..536b0f0cb12 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -6,12 +6,14 @@ icon_state = "body_m_s" mob_sort_value = 6 dna = new /datum/dna() + max_health = 150 var/list/hud_list[10] var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/step_count /mob/living/carbon/human/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + current_health = max_health setup_hud_overlays() var/list/newargs = args.Copy(2) setup(arglist(newargs)) @@ -20,6 +22,56 @@ if(. != INITIALIZE_HINT_QDEL) post_setup(arglist(newargs)) + //Persistence + LATE_INIT_IF_SAVED + + //#TODO: That's not the best place to do this? + // Check if humans are asleep on startup. + if(!istype(client)) + goto_sleep() + +/mob/living/carbon/human/before_save() + . = ..() + CUSTOM_SV("move_intent", ispath(move_intent)? move_intent : move_intent?.type) + +/mob/living/carbon/human/after_deserialize() + . = ..() + backpack_setup = null //Make sure we don't repawn a new backpack + +/mob/living/carbon/human/LateInitialize() + . = ..() + if(!persistent_id) + return + + set_move_intent(GET_DECL(LOAD_CUSTOM_SV("move_intent"))) + CLEAR_SV("move_intent") + + //Force equipped items to refresh their held icon + // for(var/obj/item/I in get_contained_external_atoms()) + // I.hud_layerise() + + //Important to regen icons here, since we skipped on that before load! + refresh_visible_overlays() + + if(ignore_persistent_spawn()) + return + if(!loc) // We're loading into null-space because we were in an unsaved level or intentionally in limbo. Move them to the last valid spawn. + if(istype(home_spawn)) + if(home_spawn.loc) + forceMove(get_turf(home_spawn)) // Welcome home! + return + else // Your bed is in nullspace with you! + QDEL_NULL(home_spawn) + forceMove(get_spawn_turf()) // Sorry man. Your bed/cryopod was not set. + +// Don't let it update icons during initialize +// Can't avoid upstream code from doing it, so just postpone it +// /mob/living/carbon/human/update_icon() +// if(!(atom_flags & ATOM_FLAG_INITIALIZED)) +// queue_icon_update() //Queue it later instead +// return +// . = ..() + /mob/living/carbon/human/proc/setup_hud_overlays() hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100") hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") @@ -47,14 +99,6 @@ var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH) return stomach?.ingested -/mob/living/carbon/human/get_fullness() - if(!should_have_organ(BP_STOMACH)) - return ..() - var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH, /obj/item/organ/internal/stomach) - if(stomach) - return nutrition + (stomach.ingested?.total_volume * 10) - return 0 //Always hungry, but you can't actually eat. :( - /mob/living/carbon/human/get_inhaled_reagents() if(!should_have_organ(BP_LUNGS)) return @@ -97,7 +141,7 @@ stat(null, "Hardsuit charge: [cell_status]") /mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default. - if(!config.use_loyalty_implants && !override) return // Nuh-uh. + if(!get_config_value(/decl/config/toggle/use_loyalty_implants) && !override) return // Nuh-uh. var/obj/item/implant/loyalty/L = new/obj/item/implant/loyalty(M) L.imp_in = M @@ -320,19 +364,6 @@ return FALSE return ..() -/mob/living/carbon/human/proc/check_dna() - dna.check_integrity(src) - return - -/mob/living/carbon/human/get_bodytype_category() - . = get_bodytype()?.bodytype_category - -/mob/living/carbon/human/check_has_mouth() - var/obj/item/organ/external/head/H = get_organ(BP_HEAD, /obj/item/organ/external/head) - if(!H || !istype(H) || !H.can_intake_reagents) - return FALSE - return TRUE - /mob/living/carbon/human/empty_stomach() SET_STATUS_MAX(src, STAT_STUN, 3) @@ -363,7 +394,7 @@ visible_message(SPAN_DANGER("\The [src] throws up!"),SPAN_DANGER("You throw up!")) playsound(loc, 'sound/effects/splat.ogg', 50, 1) var/turf/location = loc - if(istype(location, /turf/simulated)) + if(istype(location) && location.simulated) var/obj/effect/decal/cleanable/vomit/splat = new /obj/effect/decal/cleanable/vomit(location) if(stomach.ingested.total_volume) stomach.ingested.trans_to_obj(splat, min(15, stomach.ingested.total_volume)) @@ -415,7 +446,7 @@ reset_blood() if(!client || !key) //Don't boot out anyone already in the mob. - for(var/mob/living/carbon/brain/brain in global.player_list) // This is really nasty, does it even work anymore? + for(var/mob/living/brain/brain in global.player_list) // This is really nasty, does it even work anymore? if(brain.real_name == src.real_name && brain.mind) brain.mind.transfer_to(src) qdel(brain.loc) @@ -424,7 +455,7 @@ UpdateAppearance() ..() -/mob/living/carbon/human/add_blood(mob/living/carbon/human/M, amount = 2, blood_data) +/mob/living/add_blood(mob/living/M, amount = 2, list/blood_data) if (!..()) return 0 var/bloodied @@ -435,23 +466,6 @@ verbs += /mob/living/carbon/human/proc/bloody_doodle return 1 //we applied blood to the item -/mob/living/carbon/human/clean_blood(var/clean_feet) - . = ..() - var/obj/item/gloves = get_equipped_item(slot_gloves_str) - if(gloves) - gloves.clean() - gloves.germ_level = 0 - else - germ_level = 0 - - for(var/obj/item/organ/external/organ in get_external_organs()) - //TODO check that organ is not covered - if(clean_feet || (organ.organ_tag in list(BP_L_HAND,BP_R_HAND))) - organ.clean() - update_equipment_overlay(slot_gloves_str, FALSE) - update_equipment_overlay(slot_shoes_str) - return TRUE - /mob/living/carbon/human/get_visible_implants(var/class = 0) var/list/visible_implants = list() @@ -488,7 +502,7 @@ to_chat(src, SPAN_DANGER("You feel something rip out of your [stomach.name]!")) O.dropInto(loc) if(parent) - parent.embed(O) + parent.embed_in_organ(O) else jostle_internal_object(parent, O) @@ -514,16 +528,7 @@ new_bodytype.create_missing_organs(src, TRUE) // actually rebuild the body apply_bodytype_appearance() force_update_limbs() - - // Check and clear hair. - var/decl/sprite_accessory/hair/hairstyle = GET_DECL(h_style) - if(!hairstyle?.accessory_is_available(src, species, new_bodytype)) - change_hair(new_bodytype.default_h_style, FALSE) - var/decl/sprite_accessory/hair/facialhairstyle = GET_DECL(f_style) - if(!facialhairstyle?.accessory_is_available(src, species, new_bodytype)) - change_facial_hair(new_bodytype.default_f_style, FALSE) - // TODO: check markings. - + update_hair() update_eyes() return TRUE return FALSE @@ -552,7 +557,7 @@ holder_type = null if(species.holder_type) holder_type = species.holder_type - maxHealth = species.total_health + set_max_health(species.total_health, skip_health_update = TRUE) // Health update is handled later. remove_extension(src, /datum/extension/armor) if(species.natural_armour_values) set_extension(src, /datum/extension/armor, species.natural_armour_values) @@ -585,7 +590,6 @@ set_move_intent(GET_DECL(move_intents[1])) if(!istype(move_intent)) set_next_usable_move_intent() - update_emotes() apply_species_inventory_restrictions() refresh_ai_handler() @@ -655,13 +659,28 @@ /mob/living/carbon/human/proc/apply_bodytype_appearance() var/decl/bodytype/root_bodytype = get_bodytype() if(!root_bodytype) - skin_colour = COLOR_BLACK + set_skin_colour(COLOR_BLACK) else root_bodytype.apply_appearance(src) default_pixel_x = initial(pixel_x) + root_bodytype.pixel_offset_x default_pixel_y = initial(pixel_y) + root_bodytype.pixel_offset_y default_pixel_z = initial(pixel_z) + root_bodytype.pixel_offset_z + for(var/obj/item/organ/external/E in get_external_organs()) + E.sanitize_sprite_accessories() + + for(var/acc_cat in root_bodytype.default_sprite_accessories) + var/decl/sprite_accessory_category/acc_cat_decl = GET_DECL(acc_cat) + if(!acc_cat_decl.always_apply_defaults) + continue + for(var/accessory in root_bodytype.default_sprite_accessories[acc_cat]) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + var/accessory_colour = root_bodytype.default_sprite_accessories[acc_cat][accessory] + for(var/bodypart in accessory_decl.body_parts) + var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(src, bodypart) + if(O && O.bodytype == root_bodytype) + O.set_sprite_accessory(accessory, accessory_decl.accessory_category, accessory_colour, skip_update = TRUE) + reset_offsets() /mob/living/carbon/human/proc/update_languages() @@ -710,6 +729,15 @@ if(length(default_languages) && isnull(default_language)) default_language = default_languages[1] +/mob/living/proc/bodypart_is_covered(target_zone) + var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, target_zone) + if(!affecting?.body_part) + return FALSE + for(var/obj/item/clothing/thing in get_equipped_items()) + if(thing.body_parts_covered & affecting.body_part) + return thing + return FALSE + /mob/living/carbon/human/can_inject(var/mob/user, var/target_zone) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, target_zone) @@ -936,7 +964,7 @@ /mob/living/carbon/human/proc/make_reagent(amount, reagent_type) if(stat == CONSCIOUS) var/limit = max(0, reagents.get_overdose(reagent_type) - REAGENT_VOLUME(reagents, reagent_type)) - reagents.add_reagent(reagent_type, min(amount, limit)) + add_to_reagents(reagent_type, min(amount, limit)) //Get fluffy numbers /mob/living/carbon/human/proc/get_blood_pressure() @@ -947,7 +975,7 @@ //Point at which you dun breathe no more. Separate from asystole crit, which is heart-related. /mob/living/carbon/human/nervous_system_failure() - return getBrainLoss() >= maxHealth * 0.75 + return getBrainLoss() >= get_max_health() * 0.75 /mob/living/carbon/human/melee_accuracy_mods() . = ..() @@ -1031,79 +1059,25 @@ return BULLET_IMPACT_METAL return BULLET_IMPACT_MEAT -/mob/living/carbon/human/bullet_impact_visuals(var/obj/item/projectile/P, var/def_zone, var/damage) - ..() - switch(get_bullet_impact_effect_type(def_zone)) - if(BULLET_IMPACT_MEAT) - if(damage && P.damtype == BRUTE) - var/hit_dir = get_dir(P.starting, src) - var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir) - if(!QDELETED(B)) - B.icon_state = pick("dir_splatter_1","dir_splatter_2") - var/scale = min(1, round(P.damage / 50, 0.2)) - B.set_scale(scale) - new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, species.get_blood_color(src)) - -/mob/living/carbon/human/get_dexterity(var/silent = FALSE) - - // Check if we have a slot to use for this. - var/check_slot = get_active_held_item_slot() - if(!check_slot) - return DEXTERITY_NONE - var/datum/inventory_slot/gripper/gripper = get_inventory_slot_datum(check_slot) - if(!istype(gripper)) - if(!silent) - to_chat(src, "Your [parse_zone(check_slot)] is missing!") - return DEXTERITY_NONE - - // Work out if we have any brain damage impacting our dexterity. - var/dex_malus = 0 - if(getBrainLoss() && getBrainLoss() > config.dex_malus_brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there. - dex_malus = clamp(CEILING((getBrainLoss()-config.dex_malus_brainloss_threshold)/10), 0, length(global.dexterity_levels)) - if(dex_malus > 0) - dex_malus = global.dexterity_levels[dex_malus] - - // If this slot does not need an organ we just go off the dexterity of the slot itself. - if(isnull(gripper.requires_organ_tag)) - if(dex_malus) - if(!silent) - to_chat(src, SPAN_WARNING("Your [lowertext(gripper.slot_name)] doesn't respond properly!")) - return (gripper.get_dexterity() & ~dex_malus) - return gripper.get_dexterity() - - // If this slot requires an organ, do the appropriate organ checks. - var/obj/item/organ/external/active_hand = GET_EXTERNAL_ORGAN(src, check_slot) - if(!active_hand) - if(!silent) - to_chat(src, "Your [parse_zone(check_slot)] is missing!") - return DEXTERITY_NONE - if(!active_hand.is_usable()) - if(!silent) - to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!")) - return DEXTERITY_NONE - - // Return our organ dexterity. - if(dex_malus) - if(!silent) - to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!")) - return (active_hand.get_manual_dexterity() & ~dex_malus) - return active_hand.get_manual_dexterity() - /mob/living/carbon/human/lose_hair() - if(get_bodytype().set_default_hair(src)) - . = TRUE if(species.handle_additional_hair_loss(src)) . = TRUE for(var/obj/item/organ/external/E in get_external_organs()) - for(var/mark in E.markings) - var/decl/sprite_accessory/marking/mark_datum = GET_DECL(mark) - if(mark_datum.flags & HAIR_LOSS_VULNERABLE) - E.markings -= mark - . = TRUE + if(E.handle_hair_loss()) + . = TRUE if(.) update_body() to_chat(src, SPAN_DANGER("You feel a chill and your skin feels lighter...")) +/obj/item/organ/external/proc/handle_hair_loss() + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + if(accessory_decl.accessory_flags & HAIR_LOSS_VULNERABLE) + remove_sprite_accessory(accessory, skip_update = TRUE) + . = TRUE + /mob/living/carbon/human/increaseBodyTemp(value) bodytemperature += value return bodytemperature @@ -1163,6 +1137,7 @@ //Human mob specific init code. Meant to be used only on init. /mob/living/carbon/human/proc/setup(species_name = null, datum/dna/new_dna = null, decl/bodytype/new_bodytype = null) + //#FIXME: This will not work for creating characters loaded from save. if(new_dna) species_name = new_dna.species src.dna = new_dna @@ -1171,15 +1146,12 @@ set_species(species_name, new_bodytype) var/decl/bodytype/root_bodytype = get_bodytype() // root bodytype is set in set_species - if(!skin_colour) - skin_colour = root_bodytype.base_color - if(!hair_colour) - hair_colour = root_bodytype.base_hair_color - if(!facial_hair_colour) - facial_hair_colour = root_bodytype.base_hair_color - if(!eye_colour) - eye_colour = root_bodytype.base_eye_color - root_bodytype.set_default_hair(src, override_existing = TRUE, defer_update_hair = TRUE) + if(!get_skin_colour()) + set_skin_colour(root_bodytype.base_color, skip_update = TRUE) + if(!get_eye_colour()) + set_eye_colour(root_bodytype.base_eye_color, skip_update = TRUE) + root_bodytype.set_default_sprite_accessories(src) + if(!blood_type && length(species?.blood_types)) blood_type = pickweight(species.blood_types) @@ -1246,3 +1218,134 @@ add_stressor(/datum/stressor/thirsty, STRESSOR_DURATION_INDEFINITE) else remove_stressor(/datum/stressor/thirsty) + +/mob/living/carbon/human/get_comments_record() + if(comments_record_id) + return SScharacter_info.get_record(comments_record_id, TRUE) + return ..() + +/mob/living/carbon/human/get_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/visible/blink, + /decl/emote/audible/synth, + /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/audible/gasp, + /decl/emote/audible/sneeze, + /decl/emote/audible/sniff, + /decl/emote/audible/snore, + /decl/emote/audible/whimper, + /decl/emote/audible/yawn, + /decl/emote/audible/clap, + /decl/emote/audible/chuckle, + /decl/emote/audible/cough, + /decl/emote/audible/cry, + /decl/emote/audible/sigh, + /decl/emote/audible/laugh, + /decl/emote/audible/mumble, + /decl/emote/audible/grumble, + /decl/emote/audible/groan, + /decl/emote/audible/moan, + /decl/emote/audible/grunt, + /decl/emote/audible/slap, + /decl/emote/audible/deathgasp, + /decl/emote/audible/giggle, + /decl/emote/audible/scream, + /decl/emote/visible/airguitar, + /decl/emote/visible/blink_r, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/drool, + /decl/emote/visible/eyebrow, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/twitch_v, + /decl/emote/visible/faint, + /decl/emote/visible/frown, + /decl/emote/visible/blush, + /decl/emote/visible/wave, + /decl/emote/visible/glare, + /decl/emote/visible/stare, + /decl/emote/visible/look, + /decl/emote/visible/point, + /decl/emote/visible/raise, + /decl/emote/visible/grin, + /decl/emote/visible/shrug, + /decl/emote/visible/smile, + /decl/emote/visible/pale, + /decl/emote/visible/tremble, + /decl/emote/visible/wink, + /decl/emote/visible/hug, + /decl/emote/visible/dap, + /decl/emote/visible/signal, + /decl/emote/visible/handshake, + /decl/emote/visible/afold, + /decl/emote/visible/alook, + /decl/emote/visible/eroll, + /decl/emote/visible/hbow, + /decl/emote/visible/hip, + /decl/emote/visible/holdup, + /decl/emote/visible/hshrug, + /decl/emote/visible/crub, + /decl/emote/visible/erub, + /decl/emote/visible/fslap, + /decl/emote/visible/ftap, + /decl/emote/visible/hrub, + /decl/emote/visible/hspread, + /decl/emote/visible/pocket, + /decl/emote/visible/rsalute, + /decl/emote/visible/rshoulder, + /decl/emote/visible/squint, + /decl/emote/visible/tfist, + /decl/emote/visible/tilt, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/visible/vomit + ) + return default_emotes + +/mob/living/carbon/human/HandleBloodTrail(turf/T, old_loc) + // Tracking blood + var/obj/item/source + var/obj/item/clothing/shoes/shoes = get_equipped_item(slot_shoes_str) + if(istype(shoes)) + shoes.handle_movement(src, MOVING_QUICKLY(src)) + if(shoes.coating && shoes.coating.total_volume > 1) + source = shoes + else + for(var/foot_tag in list(BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/stomper = GET_EXTERNAL_ORGAN(src, foot_tag) + if(stomper && stomper.coating && stomper.coating.total_volume > 1) + source = stomper + if(!source) + species.handle_trail(src, T, old_loc) + return + + var/list/bloodDNA + var/bloodcolor + var/list/blood_data = REAGENT_DATA(source.coating, /decl/material/liquid/blood) + if(blood_data) + bloodDNA = list(blood_data["blood_DNA"] = blood_data["blood_type"]) + else + bloodDNA = list() + bloodcolor = source.coating.get_color() + source.remove_coating(1) + update_equipment_overlay(slot_shoes_str) + + if(species.get_move_trail(src)) + T.AddTracks(species.get_move_trail(src),bloodDNA, dir, 0, bloodcolor) // Coming + if(isturf(old_loc)) + var/turf/old_turf = old_loc + old_turf.AddTracks(species.get_move_trail(src), bloodDNA, 0, dir, bloodcolor) // Going + +/mob/living/carbon/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) + if((. = ..()) && !surgical_removal) + shock_stage += 20 diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/human_appearance.dm similarity index 58% rename from code/modules/mob/living/carbon/human/appearance.dm rename to code/modules/mob/living/carbon/human/human_appearance.dm index 6c52b5604f6..c35f0b73bea 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/human_appearance.dm @@ -1,8 +1,21 @@ +/mob/living/carbon/human + var/_skin_colour + /mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = global.default_topic_state) var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist) AC.flags = flags AC.ui_interact(user, state = state) +/mob/living/carbon/human/get_skin_colour() + return _skin_colour + +/mob/living/carbon/human/set_skin_colour(var/new_color, var/skip_update = FALSE) + if((. = ..())) + _skin_colour = new_color + if(!skip_update) + force_update_limbs() + update_body() + /mob/living/carbon/human/proc/change_species(var/new_species, var/new_bodytype = null) if(!new_species) return @@ -46,70 +59,33 @@ var/decl/pronouns/pronouns = pick(species.available_pronouns) set_gender(pronouns.name, TRUE) -/mob/living/carbon/human/proc/change_hair(var/hair_style, var/update_icons = TRUE) - if(!hair_style || h_style == hair_style || !ispath(hair_style, /decl/sprite_accessory/hair)) - return - h_style = hair_style - update_hair(update_icons) - return 1 - -/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style, var/update_icons = TRUE) - if(!facial_hair_style || f_style == facial_hair_style || !ispath(facial_hair_style, /decl/sprite_accessory/facial_hair)) - return - f_style = facial_hair_style - update_hair(update_icons) - return 1 - /mob/living/carbon/human/proc/reset_hair() - var/list/valid_hairstyles = get_valid_hairstyle_types() - var/list/valid_facial_hairstyles = get_valid_facial_hairstyle_types() - + var/decl/bodytype/root_bodytype = get_bodytype() + var/decl/sprite_accessory_category/hair/hair_category = GET_DECL(SAC_HAIR) + var/list/valid_hairstyles = species?.get_available_accessories(root_bodytype, SAC_HAIR) if(length(valid_hairstyles)) - h_style = pick(valid_hairstyles) + var/body_default_hairstyles = LAZYACCESS(root_bodytype?.default_sprite_accessories, SAC_HAIR) + // Forgive us, but we need to set both hair color AND style at the same time... + set_organ_sprite_accessory_by_category(pick(valid_hairstyles), SAC_HAIR, GET_HAIR_COLOUR(src) || body_default_hairstyles?[body_default_hairstyles[1]] || hair_category.default_accessory_color, TRUE, TRUE, BP_HEAD, TRUE) else //this shouldn't happen - h_style = get_bodytype()?.default_h_style || /decl/sprite_accessory/hair/bald + var/new_hair = LAZYACCESS(root_bodytype?.default_sprite_accessories, SAC_HAIR) || /decl/sprite_accessory/hair/bald + if(new_hair) + set_organ_sprite_accessory_by_category(new_hair[1], SAC_HAIR, new_hair[new_hair[1]] || hair_category.default_accessory_color, TRUE, TRUE, BP_HEAD, TRUE) + var/decl/sprite_accessory_category/facial_hair/facial_hair_category = GET_DECL(SAC_FACIAL_HAIR) + var/list/valid_facial_hairstyles = species?.get_available_accessories(root_bodytype, SAC_FACIAL_HAIR) if(length(valid_facial_hairstyles)) - f_style = pick(valid_facial_hairstyles) + var/body_default_facial_hairstyles = LAZYACCESS(root_bodytype?.default_sprite_accessories, SAC_FACIAL_HAIR) + set_organ_sprite_accessory_by_category(pick(valid_facial_hairstyles), SAC_FACIAL_HAIR, GET_FACIAL_HAIR_COLOUR(src) || body_default_facial_hairstyles?[body_default_facial_hairstyles[1]] || facial_hair_category.default_accessory_color, TRUE, TRUE, BP_HEAD, TRUE) else //this shouldn't happen - f_style = get_bodytype()?.default_f_style || /decl/sprite_accessory/facial_hair/shaved + var/new_facial_hair = LAZYACCESS(root_bodytype?.default_sprite_accessories, SAC_FACIAL_HAIR) || /decl/sprite_accessory/facial_hair/shaved + if(new_facial_hair) + set_organ_sprite_accessory_by_category(new_facial_hair[1], SAC_FACIAL_HAIR, new_facial_hair[new_facial_hair[1]] || facial_hair_category.default_accessory_color, TRUE, TRUE, BP_HEAD, TRUE) update_hair() -/mob/living/carbon/human/proc/change_eye_color(var/new_colour) - if(eye_colour != new_colour) - eye_colour = new_colour - update_eyes() - update_body() - return TRUE - return FALSE - -/mob/living/carbon/human/proc/change_hair_color(var/new_colour) - if(hair_colour != new_colour) - hair_colour = new_colour - force_update_limbs() - update_body() - update_hair() - return TRUE - return FALSE - -/mob/living/carbon/human/proc/change_facial_hair_color(var/new_colour) - if(facial_hair_colour != new_colour) - facial_hair_colour = new_colour - update_hair() - return TRUE - return FALSE - -/mob/living/carbon/human/proc/change_skin_color(var/new_colour) - if(skin_colour == new_colour || !(get_bodytype().appearance_flags & HAS_SKIN_COLOR)) - return FALSE - skin_colour = new_colour - force_update_limbs() - update_body() - return TRUE - /mob/living/carbon/human/proc/change_skin_tone(var/tone) if(skin_tone == tone || !(get_bodytype().appearance_flags & HAS_A_SKIN_TONE)) return @@ -141,12 +117,6 @@ return valid_species -/mob/living/carbon/human/proc/get_valid_hairstyle_types() - return species.get_hair_style_types(get_bodytype()) - -/mob/living/carbon/human/proc/get_valid_facial_hairstyle_types() - return species.get_facial_hair_style_types(get_bodytype()) - /mob/living/carbon/human/proc/force_update_limbs() for(var/obj/item/organ/external/O in get_external_organs()) O.sync_colour_to_human(src) diff --git a/code/modules/mob/living/carbon/human/human_appearance_head.dm b/code/modules/mob/living/carbon/human/human_appearance_head.dm new file mode 100644 index 00000000000..d60fc877013 --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_appearance_head.dm @@ -0,0 +1,13 @@ +/mob/living/carbon/human + var/_eye_colour + +// Eyes! TODO, make these a marking. +/mob/living/carbon/human/get_eye_colour() + return _eye_colour + +/mob/living/carbon/human/set_eye_colour(var/new_color, var/skip_update = FALSE) + if((. = ..())) + _eye_colour = new_color + if(!skip_update) + update_eyes() + update_body() diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 50172253223..83b1f557211 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -334,10 +334,12 @@ return 1 -/mob/living/carbon/human/verb/set_default_unarmed_attack(var/atom/radial_target) +/mob/living/carbon/human/verb/set_default_unarmed_attack() + set name = "Set Default Unarmed Attack" set category = "IC" set src = usr + var/list/choices for(var/thing in get_natural_attacks()) var/decl/natural_attack/u_attack = GET_DECL(thing) @@ -345,7 +347,7 @@ var/image/radial_button = new radial_button.name = capitalize(u_attack.name) LAZYSET(choices, u_attack, radial_button) - var/decl/natural_attack/new_attack = show_radial_menu(src, (radial_target || src), choices, radius = 42, use_labels = TRUE) + var/decl/natural_attack/new_attack = show_radial_menu(src, (attack_selector || src), choices, radius = 42, use_labels = TRUE) if(QDELETED(src) || !istype(new_attack) || !(new_attack.type in get_natural_attacks())) return default_attack = new_attack @@ -354,4 +356,13 @@ var/summary = default_attack.summarize() if(summary) to_chat(src, SPAN_NOTICE(summary)) - attack_selector?.update_icon() \ No newline at end of file + attack_selector?.update_icon() + +/mob/living/carbon/human/UnarmedAttack(atom/A, proximity_flag) + // Hackfix for humans trying to attack someone without hands. + // Dexterity ect. should be checked in these procs regardless, + // but unarmed attacks that don't require hands should still + // have the ability to be used. + if(!(. = ..()) && !get_active_held_item_slot() && a_intent == I_HURT && isliving(A)) + var/mob/living/victim = A + return victim.default_hurt_interaction(src) diff --git a/code/modules/organs/blood.dm b/code/modules/mob/living/carbon/human/human_blood.dm similarity index 60% rename from code/modules/organs/blood.dm rename to code/modules/mob/living/carbon/human/human_blood.dm index 834456dd00c..e4d1a6a7e0e 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/mob/living/carbon/human/human_blood.dm @@ -1,7 +1,3 @@ -/**************************************************** - BLOOD SYSTEM -****************************************************/ - /mob/living/carbon/human var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here. @@ -49,7 +45,7 @@ "donor" = weakref(src), "species" = get_species_name(), "blood_DNA" = get_unique_enzymes(), - "blood_color" = species.get_blood_color(src), + "blood_color" = species.get_species_blood_color(src), "blood_type" = get_blood_type(), "trace_chem" = null )) @@ -130,72 +126,32 @@ return 0 if(!amt) return 0 - amt *= ((src.mob_size/MOB_SIZE_MEDIUM) ** 0.5) - return vessel.remove_any(amt) -/**************************************************** - BLOOD TRANSFERS -****************************************************/ - -//Gets blood from mob to the container, preserving all data in it. -/mob/living/carbon/proc/take_blood(obj/item/chems/container, var/amount) - container.reagents.add_reagent(species.blood_reagent, amount, get_blood_data()) - return 1 - -//For humans, blood does not appear from blue, it comes from vessels. -/mob/living/carbon/human/take_blood(obj/item/chems/container, var/amount) - - if(!vessel) - make_blood() - - if(!should_have_organ(BP_HEART)) - reagents.trans_to_obj(container, amount) - return 1 - - if(vessel.total_volume < amount) - return null - if(vessel.has_reagent(species.blood_reagent)) - LAZYSET(vessel.reagent_data, species.blood_reagent, get_blood_data()) - vessel.trans_to_holder(container.reagents, amount) - return 1 - -//Transfers blood from container ot vessels -/mob/living/carbon/proc/inject_blood(var/amount, var/datum/reagents/donor) - if(!species.blood_volume) - return //Don't divide by 0 - var/injected_data = REAGENT_DATA(donor, species.blood_reagent) - var/chems = LAZYACCESS(injected_data, "trace_chem") - for(var/C in chems) - src.reagents.add_reagent(C, (text2num(chems[C]) / species.blood_volume) * amount)//adds trace chemicals to owner's blood - //Transfers blood from reagents to vessel, respecting blood types compatability. /mob/living/carbon/human/inject_blood(var/amount, var/datum/reagents/donor) if(!should_have_organ(BP_HEART)) - reagents.add_reagent(species.blood_reagent, amount, REAGENT_DATA(donor, species.blood_reagent)) + add_to_reagents(species.blood_reagent, amount, REAGENT_DATA(donor, species.blood_reagent)) return var/injected_data = REAGENT_DATA(donor, species.blood_reagent) var/injected_b_type = LAZYACCESS(injected_data, "blood_type") - if(blood_incompatible(injected_b_type)) + if(is_blood_incompatible(injected_b_type)) var/decl/blood_type/blood_decl = injected_b_type && get_blood_type_by_name(injected_b_type) if(istype(blood_decl)) - reagents.add_reagent(blood_decl.transfusion_fail_reagent, amount * blood_decl.transfusion_fail_percentage) + add_to_reagents(blood_decl.transfusion_fail_reagent, amount * blood_decl.transfusion_fail_percentage) else - reagents.add_reagent(/decl/material/liquid/coagulated_blood, amount * 0.5) + add_to_reagents(/decl/material/liquid/coagulated_blood, amount * 0.5) else adjust_blood(amount, injected_data) ..() -/mob/living/carbon/human/proc/blood_incompatible(blood_type) - return species.is_blood_incompatible(dna?.b_type, blood_type) - /mob/living/carbon/human/proc/regenerate_blood(var/amount) amount *= (species.blood_volume / SPECIES_BLOOD_DEFAULT) var/stress_modifier = get_stress_modifier() if(stress_modifier) - amount *= 1-(config.stress_blood_recovery_constant * stress_modifier) + amount *= 1-(get_config_value(/decl/config/num/health_stress_blood_recovery_constant) * stress_modifier) var/blood_volume_raw = vessel.total_volume amount = max(0,min(amount, species.blood_volume - blood_volume_raw)) @@ -203,107 +159,22 @@ adjust_blood(amount, get_blood_data()) return amount -/mob/living/proc/get_blood_data() - - var/data = list() - data["donor"] = weakref(src) - data["blood_DNA"] = get_unique_enzymes() - data["blood_type"] = get_blood_type() - data["species"] = get_species_name() - - var/list/temp_chem = list() - for(var/R in reagents.reagent_volumes) - temp_chem[R] = REAGENT_VOLUME(reagents, R) - data["trace_chem"] = temp_chem - data["dose_chem"] = chem_doses ? chem_doses.Copy() : list() - - var/decl/species/my_species = get_species() - if(my_species) - data["has_oxy"] = my_species.blood_oxy - data["blood_color"] = my_species.get_blood_color(src) - else if(isSynthetic()) - data["has_oxy"] = FALSE - data["blood_color"] = SYNTH_BLOOD_COLOR - else - data["has_oxy"] = TRUE - data["blood_color"] = COLOR_BLOOD_HUMAN - return data - -/proc/blood_splatter(var/target, var/source, var/large, var/spray_dir) - - var/obj/effect/decal/cleanable/blood/splatter - var/decal_type = /obj/effect/decal/cleanable/blood/splatter - var/turf/T = get_turf(target) - - // Are we dripping or splattering? - var/list/drips = list() - // Only a certain number of drips (or one large splatter) can be on a given turf. - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips |= drop.drips - qdel(drop) - if(!large && drips.len < 3) - decal_type = /obj/effect/decal/cleanable/blood/drip - - // Find a blood decal or create a new one. - if(T) - var/list/existing = filter_list(T.contents, decal_type) - if(length(existing) > 3) - splatter = pick(existing) - if(!splatter) - splatter = new decal_type(T) - - if(QDELETED(splatter)) - return +//For humans, blood does not appear from blue, it comes from vessels. +/mob/living/carbon/human/take_blood(obj/item/chems/container, var/amount) - if(istype(splatter, /obj/effect/decal/cleanable/blood/drip) && drips && drips.len && !large) - var/obj/effect/decal/cleanable/blood/drip/drop = splatter - drop.overlays |= drips - drop.drips |= drips - - // If there's no data to copy, call it quits here. - var/blood_data - var/blood_type - if(ishuman(source)) - var/mob/living/carbon/human/donor = source - blood_data = REAGENT_DATA(donor.vessel, donor.species.blood_reagent) - blood_type = donor.get_blood_type() - else if(isatom(source)) - var/atom/donor = source - blood_data = REAGENT_DATA(donor.reagents, /decl/material/liquid/blood) - if(!islist(blood_data)) - return splatter - - if(spray_dir) - splatter.icon_state = "squirt" - splatter.set_dir(spray_dir) - // Update blood information. - if(LAZYACCESS(blood_data, "blood_DNA")) - LAZYSET(splatter.blood_data, blood_data["blood_DNA"], blood_data) - splatter.blood_DNA = list() - if(LAZYACCESS(blood_data, "blood_type")) - splatter.blood_DNA[blood_data["blood_DNA"]] = blood_data["blood_type"] - else - splatter.blood_DNA[blood_data["blood_DNA"]] = "O+" - var/datum/extension/forensic_evidence/forensics = get_or_create_extension(splatter, /datum/extension/forensic_evidence) - forensics.add_data(/datum/forensics/blood_dna, blood_data["blood_DNA"]) - - if(!blood_type && LAZYACCESS(blood_data, "blood_type")) - blood_type = LAZYACCESS(blood_data, "blood_type") - - // Update appearance. - if(blood_type) - var/decl/blood_type/blood_type_decl = get_blood_type_by_name(blood_type) - splatter.name = blood_type_decl.splatter_name - splatter.desc = blood_type_decl.splatter_desc - splatter.basecolor = blood_type_decl.splatter_colour - - if(LAZYACCESS(blood_data, "blood_color")) - splatter.basecolor = blood_data["blood_color"] - - splatter.update_icon() - splatter.fluorescent = FALSE - splatter.set_invisibility(INVISIBILITY_NONE) - return splatter + if(!vessel) + make_blood() + + if(!should_have_organ(BP_HEART)) + reagents.trans_to_obj(container, amount) + return 1 + + if(vessel.total_volume < amount) + return null + if(vessel.has_reagent(species.blood_reagent)) + LAZYSET(vessel.reagent_data, species.blood_reagent, get_blood_data()) + vessel.trans_to_holder(container.reagents, amount) + return 1 //Percentage of maximum blood volume. /mob/living/carbon/human/proc/get_blood_volume() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 7ac0f60acec..8fcc14c9d9f 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -1,24 +1,19 @@ -//Updates the mob's health from organs and mob damage variables -/mob/living/carbon/human/updatehealth() - - if(status_flags & GODMODE) - health = maxHealth - set_stat(CONSCIOUS) - return - - health = maxHealth - getBrainLoss() +/mob/living/carbon/human/get_total_life_damage() + return getBrainLoss() +//Updates the mob's health from organs and mob damage variables +/mob/living/carbon/human/update_health() + . = ..() //TODO: fix husking - if(((maxHealth - getFireLoss()) < config.health_threshold_dead) && stat == DEAD) + if(. && stat == DEAD && (get_max_health() - getFireLoss()) < get_config_value(/decl/config/num/health_health_threshold_dead)) make_husked() - return -/mob/living/carbon/human/adjustBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode - if(should_have_organ(BP_BRAIN)) +/mob/living/carbon/human/adjustBrainLoss(var/amount, var/do_update_health = TRUE) + if(!(status_flags & GODMODE) && should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) sponge.take_internal_damage(amount) + ..() /mob/living/carbon/human/setBrainLoss(var/amount) if(status_flags & GODMODE) return 0 //godmode @@ -26,7 +21,7 @@ var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) sponge.damage = min(max(amount, 0),sponge.species.total_health) - updatehealth() + update_health() /mob/living/carbon/human/getBrainLoss() if(status_flags & GODMODE) return 0 //godmode @@ -52,7 +47,7 @@ /mob/living/carbon/human/setHalLoss(var/amount) adjustHalLoss(getHalLoss()-amount) -/mob/living/carbon/human/adjustHalLoss(var/amount) +/mob/living/carbon/human/adjustHalLoss(var/amount, var/do_update_health = TRUE) var/heal = (amount < 0) amount = abs(amount) var/list/limbs = get_external_organs() @@ -69,6 +64,8 @@ else amount -= E.add_pain(amount) BITSET(hud_updateflag, HEALTH_HUD) + if(do_update_health) + update_health() //These procs fetch a cumulative total damage from all organs /mob/living/carbon/human/getBruteLoss() @@ -87,14 +84,15 @@ amount += O.burn_dam return amount -/mob/living/carbon/human/adjustBruteLoss(var/amount) +/mob/living/carbon/human/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) // take/heal overall call update_health regardless of arg if(amount > 0) take_overall_damage(amount, 0) else heal_overall_damage(-amount, 0) BITSET(hud_updateflag, HEALTH_HUD) -/mob/living/carbon/human/adjustFireLoss(var/amount) +/mob/living/carbon/human/adjustFireLoss(var/amount, var/do_update_health = TRUE) if(amount > 0) take_overall_damage(0, amount) else @@ -110,7 +108,7 @@ /mob/living/carbon/human/setCloneLoss(var/amount) adjustCloneLoss(getCloneLoss()-amount) -/mob/living/carbon/human/adjustCloneLoss(var/amount) +/mob/living/carbon/human/adjustCloneLoss(var/amount, var/do_update_health = TRUE) var/heal = amount < 0 amount = abs(amount) var/list/limbs = get_external_organs() @@ -124,6 +122,7 @@ else amount -= E.add_genetic_damage(amount) BITSET(hud_updateflag, HEALTH_HUD) + ..() /mob/living/carbon/human/proc/getOxyLossPercent() return (getOxyLoss() / species.total_health) * 100 @@ -137,14 +136,15 @@ /mob/living/carbon/human/setOxyLoss(var/amount) adjustOxyLoss(amount - getOxyLoss()) -/mob/living/carbon/human/adjustOxyLoss(var/amount) +/mob/living/carbon/human/adjustOxyLoss(var/damage, var/do_update_health = TRUE) + . = FALSE if(need_breathe()) var/obj/item/organ/internal/lungs/breathe_organ = get_organ(get_bodytype().breathing_organ, /obj/item/organ/internal/lungs) if(breathe_organ) - breathe_organ.adjust_oxygen_deprivation(amount) + breathe_organ.adjust_oxygen_deprivation(damage) BITSET(hud_updateflag, HEALTH_HUD) - return TRUE - return FALSE + . = TRUE + ..(do_update_health = FALSE) // Oxyloss cannot directly kill humans /mob/living/carbon/human/getToxLoss() if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) @@ -159,7 +159,7 @@ adjustToxLoss(getToxLoss()-amount) // TODO: better internal organ damage procs. -/mob/living/carbon/human/adjustToxLoss(var/amount) +/mob/living/carbon/human/adjustToxLoss(var/amount, var/do_update_health = TRUE) if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) return @@ -212,6 +212,9 @@ I.take_internal_damage(amount, silent=TRUE) amount = 0 + if(do_update_health) + update_health() + /mob/living/carbon/human/proc/can_autoheal(var/dam_type) if(!species || !dam_type) return FALSE @@ -242,13 +245,13 @@ //Heals ONE external organ, organ gets randomly selected from damaged ones. //It automatically updates damage overlays if necesary //It automatically updates health status -/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE) +/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) if(!parts.len) return var/obj/item/organ/external/picked = pick(parts) if(picked.heal_damage(brute,burn,robo_repair = affect_robo)) BITSET(hud_updateflag, HEALTH_HUD) - updatehealth() + update_health() //TODO reorganize damage procs so that there is a clean API for damaging living mobs @@ -261,11 +264,12 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t //It automatically updates health status /mob/living/carbon/human/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb) var/list/parts = get_damageable_organs() - if(length(parts)) - var/obj/item/organ/external/picked = pick(parts) - if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb)) - BITSET(hud_updateflag, HEALTH_HUD) - updatehealth() + if(!length(parts)) + return + var/obj/item/organ/external/picked = pick(parts) + if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb)) + BITSET(hud_updateflag, HEALTH_HUD) + update_health() //Heal MANY external organs, in random order /mob/living/carbon/human/heal_overall_damage(var/brute, var/burn) @@ -283,14 +287,17 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t burn -= (burn_was-picked.burn_dam) parts -= picked - updatehealth() + update_health() BITSET(hud_updateflag, HEALTH_HUD) // damage MANY external organs, in random order /mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null) - if(status_flags & GODMODE) return //godmode + if(status_flags & GODMODE) + return //godmode + var/list/obj/item/organ/external/parts = get_damageable_organs() - if(!parts.len) return + if(!parts.len) + return var/dam_flags = (sharp? DAM_SHARP : 0)|(edge? DAM_EDGE : 0) var/brute_avg = brute / parts.len @@ -306,7 +313,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t if(burn_avg) apply_damage(damage = burn_avg, damagetype = BURN, damage_flags = dam_flags, used_weapon = used_weapon, silent = TRUE, given_organ = E) - updatehealth() + update_health() BITSET(hud_updateflag, HEALTH_HUD) /* @@ -380,7 +387,7 @@ This function restores all organs. organ.add_genetic_damage(damage) // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). - updatehealth() + update_health() BITSET(hud_updateflag, HEALTH_HUD) return created_wound diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d7a9f1dbb8e..7d337970d53 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -112,16 +112,6 @@ meteor_act if(istype(gear) && (gear.body_parts_covered & SLOT_FACE) && !(gear.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) return gear -/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - var/list/checking_slots = get_held_items() - var/obj/item/suit = get_equipped_item(slot_wear_suit_str) - if(suit) - LAZYDISTINCTADD(checking_slots, suit) - for(var/obj/item/shield in checking_slots) - if(shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text)) - return TRUE - return FALSE - /mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) for (var/obj/item/grab/G in grabbed_by) @@ -229,7 +219,7 @@ meteor_act //getting the weapon bloodied is easier than getting the target covered in blood, so run prob() again if(prob(33 + W.sharp*10)) var/turf/location = loc - if(istype(location, /turf/simulated)) + if(istype(location) && location.simulated) location.add_blood(src) if(ishuman(attacker)) var/mob/living/carbon/human/H = attacker @@ -261,7 +251,7 @@ meteor_act return if(prob(effective_force)) var/turf/location = loc - if(istype(location, /turf/simulated)) + if(istype(location) && location.simulated) location.add_blood(src) if(hit_zone) organ = GET_EXTERNAL_ORGAN(src, hit_zone) @@ -278,7 +268,7 @@ meteor_act return 0 //want the dislocation chance to be such that the limb is expected to dislocate after dealing a fraction of the damage needed to break the limb - var/dislocate_chance = effective_force/(dislocate_mult * organ.min_broken_damage * config.organ_health_multiplier)*100 + var/dislocate_chance = effective_force/(dislocate_mult * organ.min_broken_damage * get_config_value(/decl/config/num/health_organ_health_multiplier))*100 if(prob(dislocate_chance * blocked_mult(blocked))) visible_message("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!") organ.dislocate(1) @@ -297,84 +287,15 @@ meteor_act affecting.status |= ORGAN_SABOTAGED return 1 -//this proc handles being hit by a thrown atom /mob/living/carbon/human/hitby(atom/movable/AM, var/datum/thrownthing/TT) - - if(istype(AM,/obj/)) - var/obj/O = AM - - if(in_throw_mode && !get_active_hand() && TT.speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode - if(!incapacitated()) - if(isturf(O.loc)) - put_in_active_hand(O) - visible_message("[src] catches [O]!") - throw_mode_off() - process_momentum(AM, TT) - return - - var/dtype = O.damtype - var/throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) - - var/zone = BP_CHEST - if (TT.target_zone) - zone = check_zone(TT.target_zone, src) - else - zone = ran_zone() //Hits a random part of the body, -was already geared towards the chest - - //check if we hit - var/miss_chance = max(15*(TT.dist_travelled-2),0) - zone = get_zone_with_miss_chance(zone, src, miss_chance, ranged_attack=1) - - if(zone && TT.thrower && TT.thrower != src) - var/shield_check = check_shields(throw_damage, O, TT.thrower, zone, "[O]") - if(shield_check == PROJECTILE_FORCE_MISS) - zone = null - else if(shield_check) - return - - var/obj/item/organ/external/affecting = (zone && GET_EXTERNAL_ORGAN(src, zone)) - if(!affecting) - visible_message(SPAN_NOTICE("\The [O] misses \the [src] narrowly!")) - return - - var/datum/wound/created_wound - visible_message(SPAN_DANGER("\The [src] has been hit in \the [affecting.name] by \the [O].")) - created_wound = apply_damage(throw_damage, dtype, zone, O.damage_flags(), O, O.armor_penetration) - - if(TT.thrower) - var/client/assailant = TT.thrower.client - if(assailant) - admin_attack_log(TT.thrower, src, "Threw \an [O] at their victim.", "Had \an [O] thrown at them", "threw \an [O] at") - - //thrown weapon embedded object code. - if(dtype == BRUTE && istype(O,/obj/item)) - var/obj/item/I = O - if (!is_robot_module(I)) - var/sharp = I.can_embed() - var/damage = throw_damage //the effective damage used for embedding purposes, no actual damage is dealt here - damage *= (1 - get_blocked_ratio(zone, BRUTE, O.damage_flags(), O.armor_penetration, I.force)) - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3) - var/embed_threshold = sharp? 5*I.w_class : 15*I.w_class - - //Sharp objects will always embed if they do enough damage. - //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold - if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) - affecting.embed(I, supplied_wound = created_wound) - I.has_embedded() - + // empty active hand and we're in throw mode, so we can catch it + if(isobj(AM) && in_throw_mode && !get_active_hand() && TT.speed <= THROWFORCE_SPEED_DIVISOR && !incapacitated() && isturf(AM.loc)) + put_in_active_hand(AM) + visible_message(SPAN_NOTICE("\The [src] catches \the [AM]!")) + throw_mode_off() process_momentum(AM, TT) - - else - ..() - -/mob/living/carbon/human/embed(var/obj/O, var/def_zone=null, var/datum/wound/supplied_wound) - if(!def_zone) ..() - - var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, def_zone) - if(affecting) - affecting.embed(O, supplied_wound = supplied_wound) + return FALSE + return ..() /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) var/obj/item/clothing/gloves/gloves = get_equipped_item(slot_gloves_str) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 7f9ce538e1c..c3dfc04955b 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,21 +1,11 @@ /mob/living/carbon/human - var/h_style - var/f_style - - var/hair_colour - var/facial_hair_colour - var/skin_colour - var/eye_colour - var/regenerate_body_icon = FALSE // If true, the next icon update will also regenerate the body. var/skin_tone = 0 //Skin tone var/damage_multiplier = 1 //multiplies melee combat damage - var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup - var/list/worn_underwear = list() var/datum/backpack_setup/backpack_setup @@ -70,8 +60,6 @@ var/became_older var/became_younger - var/list/appearance_descriptors - var/list/smell_cooldown /// var for caching last getHalloss() run to avoid looping through organs over and over and over again @@ -84,9 +72,48 @@ ai = /datum/ai/human + /// PS13 The object we last safe-slept on. Used for moving characters to safe locations on loads. + var/obj/home_spawn + + /mob/living/carbon/human/proc/get_age() . = LAZYACCESS(appearance_descriptors, "age") || 30 /mob/living/carbon/human/proc/set_age(var/val) var/datum/appearance_descriptor/age = LAZYACCESS(species.appearance_descriptors, "age") LAZYSET(appearance_descriptors, "age", age.sanitize_value(val)) + + +SAVED_VAR(/mob/living/carbon/human, _skin_colour) +SAVED_VAR(/mob/living/carbon/human, skin_tone) +SAVED_VAR(/mob/living/carbon/human, damage_multiplier) +SAVED_VAR(/mob/living/carbon/human, blood_type) +SAVED_VAR(/mob/living/carbon/human, worn_underwear) +SAVED_VAR(/mob/living/carbon/human, cultural_info) +SAVED_VAR(/mob/living/carbon/human, voice) +SAVED_VAR(/mob/living/carbon/human, last_dam) +SAVED_VAR(/mob/living/carbon/human, remoteview_target) +SAVED_VAR(/mob/living/carbon/human, hand_blood_color) +SAVED_VAR(/mob/living/carbon/human, flavor_texts) +SAVED_VAR(/mob/living/carbon/human, pulling_punches) +SAVED_VAR(/mob/living/carbon/human, last_attack) +SAVED_VAR(/mob/living/carbon/human, flash_protection) +SAVED_VAR(/mob/living/carbon/human, equipment_tint_total) +SAVED_VAR(/mob/living/carbon/human, equipment_darkness_modifier) +SAVED_VAR(/mob/living/carbon/human, equipment_vision_flags) +SAVED_VAR(/mob/living/carbon/human, equipment_see_invis) +SAVED_VAR(/mob/living/carbon/human, equipment_prescription) +SAVED_VAR(/mob/living/carbon/human, equipment_light_protection) +SAVED_VAR(/mob/living/carbon/human, char_branch) +SAVED_VAR(/mob/living/carbon/human, char_rank) +SAVED_VAR(/mob/living/carbon/human, stance_damage) +SAVED_VAR(/mob/living/carbon/human, default_attack) +SAVED_VAR(/mob/living/carbon/human, shock_stage) +SAVED_VAR(/mob/living/carbon/human, became_older) +SAVED_VAR(/mob/living/carbon/human, became_younger) +SAVED_VAR(/mob/living/carbon/human, appearance_descriptors) +SAVED_VAR(/mob/living/carbon/human, skin_state) +SAVED_VAR(/mob/living/carbon/human, embedded_flag) +SAVED_VAR(/mob/living/carbon/human, stamina) +SAVED_VAR(/mob/living/carbon/human, vessel) +SAVED_VAR(/mob/living/carbon/human, home_spawn) diff --git a/code/modules/mob/living/carbon/human/human_grabs.dm b/code/modules/mob/living/carbon/human/human_grabs.dm index 0f65740dde9..37c1c45832a 100644 --- a/code/modules/mob/living/carbon/human/human_grabs.dm +++ b/code/modules/mob/living/carbon/human/human_grabs.dm @@ -28,7 +28,7 @@ if(istype(C)) C.leave_evidence(grabber) -/mob/living/carbon/human/make_grab(var/atom/movable/target, var/grab_tag = /decl/grab/simple) +/mob/living/carbon/human/make_grab(atom/movable/target, grab_tag = /decl/grab/simple, defer_hand = FALSE, force_grab_tag = FALSE) . = ..() if(.) remove_cloaking_source(species) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 386675c1d6a..68555ec7890 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -1,46 +1,8 @@ -#define HUMAN_EATING_NO_ISSUE 0 -#define HUMAN_EATING_NBP_MOUTH 1 -#define HUMAN_EATING_BLOCKED_MOUTH 2 - #define add_clothing_protection(A) \ var/obj/item/clothing/C = A; \ flash_protection += C.flash_protection; \ equipment_tint_total += C.tint; -/mob/living/carbon/human/can_eat(var/food, var/feedback = 1) - var/list/status = can_eat_status() - if(status[1] == HUMAN_EATING_NO_ISSUE) - return 1 - if(feedback) - if(status[1] == HUMAN_EATING_NBP_MOUTH) - to_chat(src, "Where do you intend to put \the [food]? You don't have a mouth!") - else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) - to_chat(src, "\The [status[2]] is in the way!") - return 0 - -/mob/living/carbon/human/can_force_feed(var/feeder, var/food, var/feedback = 1) - var/list/status = can_eat_status() - if(status[1] == HUMAN_EATING_NO_ISSUE) - return 1 - if(feedback) - if(status[1] == HUMAN_EATING_NBP_MOUTH) - to_chat(feeder, "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!") - else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) - to_chat(feeder, "\The [status[2]] is in the way!") - return 0 - -/mob/living/carbon/human/proc/can_eat_status() - if(!check_has_mouth()) - return list(HUMAN_EATING_NBP_MOUTH) - var/obj/item/blocked = check_mouth_coverage() - if(blocked) - return list(HUMAN_EATING_BLOCKED_MOUTH, blocked) - return list(HUMAN_EATING_NO_ISSUE) - -#undef HUMAN_EATING_NO_ISSUE -#undef HUMAN_EATING_NBP_MOUTH -#undef HUMAN_EATING_BLOCKED_MOUTH - /mob/living/carbon/human/proc/update_equipment_vision() flash_protection = 0 equipment_tint_total = 0 @@ -77,8 +39,8 @@ equipment_darkness_modifier += G.darkness_view equipment_vision_flags |= G.vision_flags equipment_light_protection += G.light_protection - if(G.overlay) - equipment_overlays |= G.overlay + if(G.screen_overlay) + equipment_overlays |= G.screen_overlay if(G.see_invisible >= 0) if(equipment_see_invis) equipment_see_invis = min(equipment_see_invis, G.see_invisible) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 4d660df5951..b97bf79c27d 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -18,7 +18,7 @@ tally -= GET_CHEMICAL_EFFECT(src, CE_SPEEDBOOST) tally += GET_CHEMICAL_EFFECT(src, CE_SLOWDOWN) - var/health_deficiency = (maxHealth - health) + var/health_deficiency = (get_max_health() - current_health) if(health_deficiency >= 40) tally += (health_deficiency / 25) if(can_feel_pain()) @@ -55,15 +55,16 @@ if(facing_dir) tally += 3 // Locking direction will slow you down. - if (bodytemperature < species.cold_discomfort_level) - tally += (species.cold_discomfort_level - bodytemperature) / 10 * 1.75 + var/decl/bodytype/root_bodytype = get_bodytype() + if (root_bodytype && bodytemperature < root_bodytype.cold_discomfort_level) + tally += (root_bodytype.cold_discomfort_level - bodytemperature) / 10 * 1.75 tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow if(mRun in mutations) tally = 0 - return (tally+config.human_delay) + return (tally+get_config_value(/decl/config/num/movement_human)) /mob/living/carbon/human/size_strength_mod() . = ..() diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 6e57fb48c2c..2b46401517c 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -83,8 +83,8 @@ W.germ_level += 1 /mob/living/carbon/human/proc/Check_Proppable_Object() - for(var/turf/simulated/T in RANGE_TURFS(src, 1)) //we only care for non-space turfs - if(T.density) //walls work + for(var/turf/T in RANGE_TURFS(src, 1)) //we only care for non-space turfs + if(T.density && T.simulated) //walls work return 1 for(var/obj/O in orange(1, src)) @@ -166,7 +166,7 @@ if(stance_damage >= 4 || (stance_damage >= 2 && prob(2)) || (stance_damage >= 3 && prob(8))) if(!(lying || resting)) if(limb_pain) - emote("scream") + emote(/decl/emote/audible/scream) custom_emote(VISIBLE_MESSAGE, "collapses!") SET_STATUS_MAX(src, STAT_WEAK, 3) //can't emote while weakened, apparently. @@ -272,7 +272,7 @@ //Registers an organ and setup the organ hierachy properly. //affected : Parent organ if applicable. //in_place : If true, we're performing an in-place replacement, without triggering anything related to adding the organ in-game as part of surgery or else. -/mob/living/carbon/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached) +/mob/living/carbon/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE) if(!(. = ..())) return if(!O.is_internal()) @@ -283,7 +283,7 @@ update_inhand_overlays(FALSE) update_body(FALSE) update_bandages(FALSE) - UpdateDamageIcon(FALSE) + update_damage_overlays(FALSE) hud_reset() queue_icon_update() //Avoids calling icon updates 50 times when adding multiple organs @@ -293,7 +293,7 @@ //ignore_children: Skips recursively removing this organ's child organs. //in_place : If true we remove only the organ (no children items or implants) and avoid triggering mob changes and parent organs changes as much as possible. // Meant to be used for init and species transforms, without triggering any updates to mob state or anything related to losing a limb as part of surgery or combat. -/mob/living/carbon/human/remove_organ(obj/item/organ/O, drop_organ, detach, ignore_children, in_place, update_icon) +/mob/living/carbon/human/remove_organ(obj/item/organ/O, drop_organ, detach, ignore_children, in_place, update_icon, skip_health_update = FALSE) if(!(. = ..())) return if(!O.is_internal()) diff --git a/code/modules/mob/living/carbon/human/human_persistence.dm b/code/modules/mob/living/carbon/human/human_persistence.dm new file mode 100644 index 00000000000..19fee94d23a --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_persistence.dm @@ -0,0 +1,35 @@ + +/mob/living/carbon/human/proc/ignore_persistent_spawn() +#ifdef UNIT_TEST + return TRUE +#else + return FALSE +#endif + +/mob/living/carbon/human/dummy/ignore_persistent_spawn() + return TRUE + +/mob/living/carbon/human/quantum/ignore_persistent_spawn() + return TRUE + +//#TODO: This shouldn't be done by the mob here. Handling it here like that we make it harder to come up with sane fallbacks. +/mob/living/carbon/human/proc/get_spawn_turf() + var/spawn_turf + for(var/obj/machinery/cryopod/C in SSmachines.machinery) + spawn_turf = locate(C.x, C.y, C.z) + if(!spawn_turf) + spawn_turf = locate(100,100,3) + return spawn_turf + +//#TODO: Check if still relevant? +/mob/living/carbon/human/proc/goto_sleep() + if(istype(client)) + // We have a client, so we're awake. + return + + if(locate(/obj/structure/bed) in get_turf(src)) + set_stasis(20, STASIS_SLEEP) // beds are better. + return + + //Apply sleeping stasis. + set_stasis(10, STASIS_SLEEP) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index a3f34561ed9..b0c922c386c 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -20,9 +20,10 @@ to_chat(src, SPAN_WARNING("You can't mess with your hair right now!")) return - if(h_style) - var/decl/sprite_accessory/hair/hair_style = GET_DECL(h_style) - if(!(hair_style.flags & HAIR_TIEABLE)) + var/hairstyle = GET_HAIR_STYLE(src) + if(hairstyle) + var/decl/sprite_accessory/hair/hair_style = GET_DECL(hairstyle) + if(!(hair_style.accessory_flags & HAIR_TIEABLE)) to_chat(src, SPAN_WARNING("Your hair isn't long enough to tie.")) return @@ -31,7 +32,7 @@ var/list/hairstyle_instances = list() for(var/hair_type in valid_hairstyles) var/decl/sprite_accessory/hair/test = valid_hairstyles[hair_type] - if(test.flags & HAIR_TIEABLE) + if(test.accessory_flags & HAIR_TIEABLE) hairstyle_instances += test var/decl/selected_decl = input("Select a new hairstyle", "Your hairstyle", hair_style) as null|anything in hairstyle_instances if(selected_decl) @@ -39,9 +40,8 @@ if(incapacitated()) to_chat(src, SPAN_WARNING("You can't mess with your hair right now!")) return - if(selected_type && h_style != selected_type) - h_style = selected_type - try_refresh_visible_overlays() + if(selected_type && hairstyle != selected_type) + SET_HAIR_STYLE(src, selected_type, FALSE) visible_message(SPAN_NOTICE("\The [src] pauses a moment to style their hair.")) else to_chat(src, SPAN_NOTICE("You're already using that style.")) @@ -103,5 +103,5 @@ set name = "Change Colour" set desc = "Choose the colour of your skin." - var/new_skin = input(usr, "Choose your new skin colour: ", "Change Colour", skin_colour) as color|null - change_skin_color(new_skin) + var/new_skin = input(usr, "Choose your new skin colour: ", "Change Colour", get_skin_colour()) as color|null + set_skin_colour(new_skin) diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index e025108b45f..d234db7ec9b 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -3,12 +3,12 @@ status_flags = GODMODE|CANPUSH virtual_mob = null -/mob/living/carbon/human/dummy/mannequin/Initialize() +/mob/living/carbon/human/dummy/mannequin/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) . = ..() STOP_PROCESSING(SSmobs, src) global.human_mob_list -= src -/mob/living/carbon/human/dummy/selfdress/Initialize() +/mob/living/carbon/human/dummy/selfdress/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) ..() return INITIALIZE_HINT_LATELOAD @@ -19,6 +19,9 @@ /mob/living/carbon/human/corpse real_name = "corpse" +/mob/living/carbon/human/corpse/get_death_message(gibbed) + return SKIP_DEATH_MESSAGE + /mob/living/carbon/human/corpse/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype, obj/abstract/landmark/corpse/corpse) . = ..(mapload, species_name, new_dna, new_bodytype) // do not pass the corpse landmark var/decl/cultural_info/culture = get_cultural_value(TAG_CULTURE) @@ -36,9 +39,10 @@ /mob/living/carbon/human/corpse/LateInitialize() ..() - adjustOxyLoss(maxHealth)//cease life functions - setBrainLoss(maxHealth) - death(FALSE, deathmessage = "no message", show_dead_message = FALSE) + var/current_max_health = get_max_health() + adjustOxyLoss(current_max_health)//cease life functions + setBrainLoss(current_max_health) + death() var/obj/item/organ/internal/heart/corpse_heart = get_organ(BP_HEART, /obj/item/organ/internal/heart) if(corpse_heart) corpse_heart.pulse = PULSE_NONE//actually stops heart to make worried explorers not care too much @@ -58,7 +62,8 @@ /mob/living/carbon/human/monkey gender = PLURAL -/mob/living/carbon/human/monkey/Initialize() +/mob/living/carbon/human/monkey/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) if(gender == PLURAL) gender = pick(MALE, FEMALE) - . = ..(species_name = SPECIES_MONKEY) + species_name = SPECIES_MONKEY + . = ..() diff --git a/code/modules/mob/living/carbon/human/human_verbs.dm b/code/modules/mob/living/carbon/human/human_verbs.dm index c9ed44b806b..3c5a947da48 100644 --- a/code/modules/mob/living/carbon/human/human_verbs.dm +++ b/code/modules/mob/living/carbon/human/human_verbs.dm @@ -11,18 +11,17 @@ src.verbs -= /mob/living/carbon/human/proc/morph return - var/new_facial = input("Please select facial hair color.", "Character Generation", facial_hair_colour) as color + var/new_facial = input("Please select facial hair color.", "Character Generation", GET_FACIAL_HAIR_COLOUR(src)) as color if(new_facial) - facial_hair_colour = new_facial + SET_FACIAL_HAIR_COLOUR(src, new_facial, TRUE) - var/new_hair = input("Please select hair color.", "Character Generation", hair_colour) as color + var/new_hair = input("Please select hair color.", "Character Generation", GET_HAIR_COLOUR(src)) as color if(new_hair) - hair_colour = new_hair + SET_HAIR_COLOUR(src, new_hair, TRUE) - var/new_eyes = input("Please select eye color.", "Character Generation", eye_colour) as color + var/new_eyes = input("Please select eye color.", "Character Generation", get_eye_colour()) as color if(new_eyes) - eye_colour = new_eyes - update_eyes() + set_eye_colour(new_eyes) var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-skin_tone]") as text @@ -39,11 +38,11 @@ for(var/x in all_hairs) hairs += all_hairs[x] - var/decl/new_style = input("Please select hair style", "Character Generation",h_style) as null|anything in hairs + var/decl/new_style = input("Please select hair style", "Character Generation", GET_HAIR_STYLE(src)) as null|anything in hairs // if new style selected (not cancel) if(new_style) - h_style = new_style.type + SET_HAIR_STYLE(src, new_style.type, TRUE) // facial hair var/list/all_fhairs = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/facial_hair) @@ -52,10 +51,10 @@ for(var/x in all_fhairs) fhairs += all_fhairs[x] - new_style = input("Please select facial style", "Character Generation",f_style) as null|anything in fhairs + new_style = input("Please select facial style", "Character Generation", GET_FACIAL_HAIR_STYLE(src)) as null|anything in fhairs if(new_style) - f_style = new_style.type + SET_FACIAL_HAIR_STYLE(src, new_style.type, TRUE) var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neutral") if (new_gender) @@ -65,6 +64,8 @@ gender = FEMALE else gender = NEUTER + + update_hair() try_refresh_visible_overlays() check_dna() @@ -220,8 +221,8 @@ to_chat(src, SPAN_WARNING("Your [gloves] are getting in the way.")) return - var/turf/simulated/T = src.loc - if (!istype(T)) //to prevent doodling out of mechs and lockers + var/turf/T = src.loc + if (!istype(T) || !T.simulated) //to prevent doodling out of mechs and lockers to_chat(src, "You cannot reach the floor.") return diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm deleted file mode 100644 index 607e23fcf0d..00000000000 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ /dev/null @@ -1,30 +0,0 @@ -/* -Add fingerprints to items when we put them in our hands. -This saves us from having to call add_fingerprint() any time something is put in a human's hands programmatically. -*/ -/mob/living/carbon/human/verb/quick_equip() - set name = "quick-equip" - set hidden = 1 - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - var/obj/item/I = H.get_active_hand() - if(!I) - to_chat(H, SPAN_NOTICE("You are not holding anything to equip.")) - return - if(!H.equip_to_appropriate_slot(I)) - to_chat(H, SPAN_WARNING("You are unable to equip that.")) - -/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1) - for (var/slot in slots) - if (equip_to_slot_if_possible(W, slots[slot], del_on_fail = 0)) - return slot - if (del_on_fail) - qdel(W) - return null - -//Same as get_covering_equipped_items, but using target zone instead of bodyparts flags -/mob/living/carbon/human/proc/get_covering_equipped_item_by_zone(var/zone) - var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(src, zone) - if(O) - return get_covering_equipped_item(O.body_part) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f2ae8279901..62874f0e1a9 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -3,14 +3,6 @@ //NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick! #define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it. -#define HUMAN_CRIT_TIME_CUSHION (10 MINUTES) //approximate time limit to stabilize someone in crit -#define HUMAN_CRIT_HEALTH_CUSHION (config.health_threshold_crit - config.health_threshold_dead) - -//The amount of damage you'll get when in critical condition. We want this to be a HUMAN_CRIT_TIME_CUSHION long deal. -//There are HUMAN_CRIT_HEALTH_CUSHION hp to get through, so (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) per tick. -//Breaths however only happen once every MOB_BREATH_DELAY life ticks. The delay between life ticks is set by the mob process. -#define HUMAN_CRIT_MAX_OXYLOSS ( MOB_BREATH_DELAY * process_schedule_interval("mob") * (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) ) - #define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point #define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point #define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point @@ -36,36 +28,16 @@ var/pressure_alert = 0 var/stamina = 100 -/mob/living/carbon/human/Life() - set invisibility = FALSE - set background = BACKGROUND_ENABLED - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. - - ..() - - if(life_tick%30==15) - hud_updateflag = 1022 - - voice = GetVoice() - - //No need to update all of these procs if the guy is dead. - if(stat != DEAD && !is_in_stasis()) - last_pain = null // Clear the last cached pain value so further getHalloss() calls won't use an old value. - //Organs and blood - handle_organs() - handle_shock() - handle_pain() - handle_stamina() - - if(!handle_some_updates()) - return //We go ahead and process them 5 times for HUD images and other stuff though. - - //Update our name based on whether our face is obscured/disfigured - SetName(get_visible_name()) +/mob/living/carbon/human/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE + last_pain = null // Clear the last cached pain value so further getHalloss() calls won't use an old value. + //Organs and blood + handle_organs() + handle_shock() + handle_pain() + handle_stamina() /mob/living/carbon/human/get_stamina() return stamina @@ -86,7 +58,7 @@ /mob/living/carbon/human/proc/handle_stamina() if((world.time - last_quick_move_time) > 5 SECONDS) var/mod = (lying + (nutrition / get_max_nutrition())) / 2 - adjust_stamina(max(config.minimum_stamina_recovery, config.maximum_stamina_recovery * mod) * (1 + GET_CHEMICAL_EFFECT(src, CE_ENERGETIC))) + adjust_stamina(max(get_config_value(/decl/config/num/movement_max_stamina_recovery), get_config_value(/decl/config/num/movement_min_stamina_recovery) * mod) * (1 + GET_CHEMICAL_EFFECT(src, CE_ENERGETIC))) /mob/living/carbon/human/set_stat(var/new_stat) var/old_stat = stat @@ -144,7 +116,11 @@ return ONE_ATMOSPHERE + pressure_difference /mob/living/carbon/human/handle_impaired_vision() - ..() + + . = ..() + if(!.) + return + //Vision var/obj/item/organ/vision var/decl/bodytype/root_bodytype = get_bodytype() @@ -163,10 +139,9 @@ /mob/living/carbon/human/handle_disabilities() ..() - if(stat != DEAD) - if ((disabilities & COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1) - drop_held_items() - cough() + if(stat != DEAD && (disabilities & COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1) + drop_held_items() + cough() /mob/living/carbon/human/handle_mutations_and_radiation() if(getFireLoss()) @@ -219,7 +194,7 @@ if(relative_density > 0.02) //don't bother if we are in vacuum or near-vacuum var/loc_temp = environment.temperature - if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < get_temperature_threshold(HEAT_LEVEL_1) && bodytemperature > get_temperature_threshold(COLD_LEVEL_1) && species.body_temperature) + if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_1) && bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_1) && species.body_temperature) pressure_alert = 0 return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp @@ -235,32 +210,32 @@ temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) //Use heat transfer as proportional to the gas density. However, we only care about the relative density vs standard 101 kPa/20 C air. Therefore we can use mole ratios - bodytemperature += clamp(BODYTEMP_COOLING_MAX, temp_adj*relative_density, BODYTEMP_HEATING_MAX) + bodytemperature += clamp(temp_adj*relative_density, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(bodytemperature >= get_temperature_threshold(HEAT_LEVEL_1)) + if(bodytemperature >= get_mob_temperature_threshold(HEAT_LEVEL_1)) //Body temperature is too hot. fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode var/burn_dam = 0 - if(bodytemperature < get_temperature_threshold(HEAT_LEVEL_2)) + if(bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_2)) burn_dam = HEAT_DAMAGE_LEVEL_1 - else if(bodytemperature < get_temperature_threshold(HEAT_LEVEL_3)) + else if(bodytemperature < get_mob_temperature_threshold(HEAT_LEVEL_3)) burn_dam = HEAT_DAMAGE_LEVEL_2 else burn_dam = HEAT_DAMAGE_LEVEL_3 take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) - else if(bodytemperature <= get_temperature_threshold(COLD_LEVEL_1)) + else if(bodytemperature <= get_mob_temperature_threshold(COLD_LEVEL_1)) fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode var/burn_dam = 0 - if(bodytemperature > get_temperature_threshold(COLD_LEVEL_2)) + if(bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_2)) burn_dam = COLD_DAMAGE_LEVEL_1 - else if(bodytemperature > get_temperature_threshold(COLD_LEVEL_3)) + else if(bodytemperature > get_mob_temperature_threshold(COLD_LEVEL_3)) burn_dam = COLD_DAMAGE_LEVEL_2 else burn_dam = COLD_DAMAGE_LEVEL_3 @@ -382,103 +357,85 @@ return TRUE /mob/living/carbon/human/handle_regular_status_updates() - if(!handle_some_updates()) - return 0 - if(status_flags & GODMODE) return 0 + voice = GetVoice() + SetName(get_visible_name()) - //SSD check, if a logged player is awake put them back to sleep! - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_status(STAT_SILENCE, 0) - else //ALIVE. LIGHTS ARE ON - updatehealth() //TODO - - if(hallucination_power) - handle_hallucinations() - - if(get_shock() >= species.total_health) - if(!stat) - to_chat(src, "[species.halloss_message_self]") - src.visible_message("[src] [species.halloss_message]") - SET_STATUS_MAX(src, STAT_PARA, 10) - - if(HAS_STATUS(src, STAT_PARA) || HAS_STATUS(src, STAT_ASLEEP)) - SET_STATUS_MAX(src, STAT_BLIND, 2) - set_stat(UNCONSCIOUS) - animate_tail_reset() - adjustHalLoss(-3) - - if(prob(2) && is_asystole() && isSynthetic()) - visible_message("[src] [pick("emits low pitched whirr","beeps urgently")].") - //CONSCIOUS - else - set_stat(CONSCIOUS) - - // Check everything else. - - //Periodically double-check embedded_flag - if(embedded_flag && !(life_tick % 10)) - if(!embedded_needs_process()) - embedded_flag = 0 - - //Resting - if(resting) - if(HAS_STATUS(src, STAT_DIZZY)) - ADJ_STATUS(src, STAT_DIZZY, -15) - if(HAS_STATUS(src, STAT_JITTER)) - ADJ_STATUS(src, STAT_JITTER, -15) - adjustHalLoss(-3) - else - if(HAS_STATUS(src, STAT_DIZZY)) - ADJ_STATUS(src, STAT_DIZZY, -3) - if(HAS_STATUS(src, STAT_JITTER)) - ADJ_STATUS(src, STAT_JITTER, -3) - adjustHalLoss(-1) + if(status_flags & GODMODE) + return FALSE - if(HAS_STATUS(src, STAT_DROWSY)) - SET_STATUS_MAX(src, STAT_BLURRY, 2) - var/sleepy = GET_STATUS(src, STAT_DROWSY) - if(sleepy > 10) - var/zzzchance = min(5, 5*sleepy/30) - if((prob(zzzchance) || sleepy >= 60)) - if(stat == CONSCIOUS) - to_chat(src, "You are about to fall asleep...") - SET_STATUS_MAX(src, STAT_ASLEEP, 5) - - // If you're dirty, your gloves will become dirty, too. - var/obj/item/gloves = get_equipped_item(slot_gloves_str) - if(gloves && germ_level > gloves.germ_level && prob(10)) - gloves.germ_level += 1 - - if(vsc.contaminant_control.CONTAMINATION_LOSS) - var/total_contamination= 0 - for(var/obj/item/I in src) - if(I.contaminated) - total_contamination += vsc.contaminant_control.CONTAMINATION_LOSS - adjustToxLoss(total_contamination) - - if(stasis_value > 1 && GET_STATUS(src, STAT_DROWSY) < stasis_value * 4) - ADJ_STATUS(src, STAT_DROWSY, min(stasis_value, 3)) - if(!stat && prob(1)) - to_chat(src, "You feel slow and sluggish...") + if(vsc.contaminant_control.CONTAMINATION_LOSS) + var/total_contamination= 0 + for(var/obj/item/I in src) + if(I.contaminated) + total_contamination += vsc.contaminant_control.CONTAMINATION_LOSS + adjustToxLoss(total_contamination) + + . = ..() + if(!.) + return + + if(get_shock() >= species.total_health) + if(!stat) + to_chat(src, "[species.halloss_message_self]") + src.visible_message("[src] [species.halloss_message]") + SET_STATUS_MAX(src, STAT_PARA, 10) + + if(HAS_STATUS(src, STAT_PARA) || HAS_STATUS(src, STAT_ASLEEP)) + set_stat(UNCONSCIOUS) + animate_tail_reset() + adjustHalLoss(-3) + if(prob(2) && is_asystole() && isSynthetic()) + visible_message("[src] [pick("emits low pitched whirr","beeps urgently")].") + else + set_stat(CONSCIOUS) + + // Check everything else. + //Periodically double-check embedded_flag + if(embedded_flag && !(life_tick % 10)) + if(!embedded_needs_process()) + embedded_flag = 0 + + //Resting + if(resting) + if(HAS_STATUS(src, STAT_DIZZY)) + ADJ_STATUS(src, STAT_DIZZY, -15) + if(HAS_STATUS(src, STAT_JITTER)) + ADJ_STATUS(src, STAT_JITTER, -15) + adjustHalLoss(-3) + else + if(HAS_STATUS(src, STAT_DIZZY)) + ADJ_STATUS(src, STAT_DIZZY, -3) + if(HAS_STATUS(src, STAT_JITTER)) + ADJ_STATUS(src, STAT_JITTER, -3) + adjustHalLoss(-1) + + if(HAS_STATUS(src, STAT_DROWSY)) + SET_STATUS_MAX(src, STAT_BLURRY, 2) + var/sleepy = GET_STATUS(src, STAT_DROWSY) + if(sleepy > 10) + var/zzzchance = min(5, 5*sleepy/30) + if((prob(zzzchance) || sleepy >= 60)) + if(stat == CONSCIOUS) + to_chat(src, SPAN_NOTICE("You are about to fall asleep...")) + SET_STATUS_MAX(src, STAT_ASLEEP, 5) - return 1 /mob/living/carbon/human/handle_regular_hud_updates() + fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. + if(life_tick%30==15) + hud_updateflag = 1022 if(hud_updateflag) // update our mob's hud overlays, AKA what others see flaoting above our head handle_hud_list() - - // now handle what we see on our screen - - if(!..()) + . = ..() + if(!.) return - if(stat != DEAD) - if(stat == UNCONSCIOUS && health < maxHealth/2) + var/half_health = get_max_health()/2 + if(stat == UNCONSCIOUS && current_health < half_health) //Critical damage passage overlay var/severity = 0 - switch(health - maxHealth/2) + switch(current_health - half_health) if(-20 to -10) severity = 1 if(-30 to -20) severity = 2 if(-40 to -30) severity = 3 @@ -542,23 +499,27 @@ for(var/obj/item/organ/external/E in get_external_organs()) if(no_damage && (E.brute_dam || E.burn_dam)) no_damage = 0 - health_images += E.get_damage_hud_image() + var/damage_image = E.get_damage_hud_image() + if(damage_image) + health_images += damage_image + // Apply a fire overlay if we're burning. + var/crit_markers = get_ui_icon(client?.prefs?.UI_style, UI_ICON_CRIT_MARKER) if(on_fire) - health_images += image('icons/mob/screen1_health.dmi',"burning") + health_images += image(crit_markers, "burning") // Show a general pain/crit indicator if needed. if(is_asystole()) - health_images += image('icons/mob/screen1_health.dmi',"hardcrit") + health_images += image(crit_markers, "hardcrit") else if(trauma_val) if(can_feel_pain()) if(trauma_val > 0.7) - health_images += image('icons/mob/screen1_health.dmi',"softcrit") + health_images += image(crit_markers, "softcrit") if(trauma_val >= 1) - health_images += image('icons/mob/screen1_health.dmi',"hardcrit") + health_images += image(crit_markers, "hardcrit") else if(no_damage) - health_images += image('icons/mob/screen1_health.dmi',"fullhealth") + health_images += image(crit_markers, "fullhealth") healths_ma.overlays += health_images healths.appearance = healths_ma @@ -608,8 +569,8 @@ if(260 to 280) bodytemp.icon_state = "temp-3" else bodytemp.icon_state = "temp-4" else - var/heat_1 = get_temperature_threshold(HEAT_LEVEL_1) - var/cold_1 = get_temperature_threshold(COLD_LEVEL_1) + var/heat_1 = get_mob_temperature_threshold(HEAT_LEVEL_1) + var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1) //TODO: precalculate all of this stuff when the species datum is created var/base_temperature = species.body_temperature if(base_temperature == null) //some species don't have a set metabolic temperature @@ -683,7 +644,7 @@ var/stress_modifier = get_stress_modifier() if(stress_modifier) - stress_modifier *= config.stress_shock_recovery_constant + stress_modifier *= get_config_value(/decl/config/num/health_stress_shock_recovery_constant) if(is_asystole()) shock_stage = max(shock_stage + (BASE_SHOCK_RECOVERY + stress_modifier), 61) @@ -881,12 +842,12 @@ if(species) - if(burn_temperature < get_temperature_threshold(HEAT_LEVEL_2)) + if(burn_temperature < get_mob_temperature_threshold(HEAT_LEVEL_2)) species_heat_mod = 0.5 - else if(burn_temperature < get_temperature_threshold(HEAT_LEVEL_3)) + else if(burn_temperature < get_mob_temperature_threshold(HEAT_LEVEL_3)) species_heat_mod = 0.75 - burn_temperature -= get_temperature_threshold(HEAT_LEVEL_1) + burn_temperature -= get_mob_temperature_threshold(HEAT_LEVEL_1) if(burn_temperature < 1) return diff --git a/code/modules/mob/living/carbon/human/logout.dm b/code/modules/mob/living/carbon/human/logout.dm index f449ce991ad..ec3e59f4e1e 100644 --- a/code/modules/mob/living/carbon/human/logout.dm +++ b/code/modules/mob/living/carbon/human/logout.dm @@ -1,4 +1,14 @@ /mob/living/carbon/human/Logout() ..() if(species) species.handle_logout_special(src) - return \ No newline at end of file + + //#TODO: Is the whole sleep cryo thing even still relevant? + addtimer(CALLBACK(src, /mob/living/carbon/human/proc/goto_sleep), 5 MINUTES) + var/obj/bed = locate(/obj/structure/bed) in get_turf(src) + var/obj/cryopod = locate(/obj/machinery/cryopod) in get_turf(src) + if(istype(bed)) + // We logged out in a bed or cryopod. Set this as home_spawn. + home_spawn = bed + if(istype(cryopod)) + // We logged out in a bed or cryopod. Set this as home_spawn. + home_spawn = cryopod diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm index 31f3dbf6ff7..58f39cb763c 100644 --- a/code/modules/mob/living/carbon/human/npcs.dm +++ b/code/modules/mob/living/carbon/human/npcs.dm @@ -2,7 +2,7 @@ real_name = "Pun Pun" gender = MALE -/mob/living/carbon/human/monkey/punpun/Initialize() +/mob/living/carbon/human/monkey/punpun/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) ..() return INITIALIZE_HINT_LATELOAD @@ -19,21 +19,22 @@ /decl/hierarchy/outfit/blank_subject name = "Test Subject" - uniform = /obj/item/clothing/under/color/white + uniform = /obj/item/clothing/under/color/white/blank shoes = /obj/item/clothing/shoes/color/white head = /obj/item/clothing/head/helmet/facecover mask = /obj/item/clothing/mask/muzzle suit = /obj/item/clothing/suit/straight_jacket -/decl/hierarchy/outfit/blank_subject/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/clothing/under/color/white/C = locate() in H - if(C) - C.has_sensor = SUIT_LOCKED_SENSORS - C.sensor_mode = SUIT_SENSOR_OFF +/obj/item/clothing/under/color/white/blank/Initialize() + . = ..() + var/obj/item/clothing/accessory/vitals_sensor/sensor = new(src) + sensor.set_sensors_locked(TRUE) + sensor.set_sensor_mode(VITALS_SENSOR_OFF) + attach_accessory(null, sensor) -/mob/living/carbon/human/blank/Initialize() - . = ..(species_name = SPECIES_HUMAN) +/mob/living/carbon/human/blank/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + species_name = SPECIES_HUMAN + ..() return INITIALIZE_HINT_LATELOAD /mob/living/carbon/human/blank/LateInitialize() diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index b36bf38379a..c83237d385b 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -58,32 +58,6 @@ /mob/living/carbon/human/say_understands(mob/speaker, decl/language/speaking) return (!speaking && (issilicon(speaker) || istype(speaker, /mob/announcer) || isbrain(speaker))) || ..() -/mob/living/carbon/human/GetVoice() - - var/voice_sub - var/obj/item/rig/rig = get_rig() - if(rig?.speech?.voice_holder?.active && rig.speech.voice_holder.voice) - voice_sub = rig.speech.voice_holder.voice - - if(!voice_sub) - - var/list/check_gear = list(get_equipped_item(slot_wear_mask_str), get_equipped_item(slot_head_str)) - if(rig) - var/datum/extension/armor/rig/armor_datum = get_extension(rig, /datum/extension/armor) - if(istype(armor_datum) && armor_datum.sealed && rig.helmet == get_equipped_item(slot_head_str)) - check_gear |= rig - - for(var/obj/item/gear in check_gear) - if(!gear) - continue - var/obj/item/voice_changer/changer = locate() in gear - if(changer && changer.active && changer.voice) - voice_sub = changer.voice - - if(voice_sub) - return voice_sub - return real_name - /mob/living/carbon/human/say_quote(var/message, var/decl/language/speaking = null) var/verb = "says" var/ending = copytext(message, length(message)) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index e693d21e906..86475e9a9f4 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -21,16 +21,6 @@ var/global/list/sparring_attack_cache = list() var/list/usable_with_limbs = list(BP_L_HAND, BP_R_HAND) var/is_starting_default = FALSE -/decl/natural_attack/validate() - . = ..() - if(selector_icon_state) - for(var/check_icon_name in global.all_ui_styles) - var/check_icon = global.all_ui_styles[check_icon_name] - if(!check_state_in_icon(selector_icon_state, check_icon)) - . += "missing state '[selector_icon_state]' from icon '[check_icon]'" - else - . += "no selector_icon_state set" - /decl/natural_attack/proc/summarize() var/list/usable_limbs = list() for(var/limb in usable_with_limbs) @@ -364,3 +354,17 @@ var/global/list/sparring_attack_cache = list() if(zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH) zone = BP_CHEST . = ..() + +/decl/natural_attack/forelimb_slash + name = "forelimb slash" + selector_icon_state = "attack_slash" + attack_verb = list("mauled", "slashed", "struck", "pierced") + attack_noun = list("forelimb") + damage = 8 + shredding = 1 + sharp = 1 + edge = 1 + delay = 20 + eye_attack_text = "a forelimb" + eye_attack_text_victim = "a forelimb" + usable_with_limbs = list(BP_L_HAND, BP_R_HAND) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e6a4688bf0c..742203eeb2c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,5 +1,9 @@ var/global/list/_limb_mask_cache = list() -/proc/get_limb_mask_for(var/decl/bodytype/bodytype, var/bodypart) +/proc/get_limb_mask_for(obj/item/organ/external/limb) + var/decl/bodytype/bodytype = limb?.bodytype + var/bodypart = limb?.icon_state + if(!bodytype || !bodypart) + return LAZYINITLIST(_limb_mask_cache[bodytype]) if(!_limb_mask_cache[bodytype][bodypart]) var/icon/limb_mask = icon(bodytype.icon_base, bodypart) @@ -13,8 +17,9 @@ var/global/list/_limb_mask_cache = list() TODO: Proper documentation icon_key is [bodytype.get_icon_cache_uid(src)][g][husk][skin_tone] */ -var/global/list/human_icon_cache = list() -var/global/list/tail_icon_cache = list() //key is [bodytype.get_icon_cache_uid(src)][skin_colour] +var/global/list/human_icon_cache = list() +var/global/list/eye_icon_cache = list() +var/global/list/tail_icon_cache = list() //key is [bodytype.get_icon_cache_uid(src)][skin_colour] var/global/list/light_overlay_cache = list() /proc/overlay_image(icon,icon_state,color,flags) @@ -65,7 +70,7 @@ There are several things that need to be remembered: > There are also these special cases: update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) + update_damage_overlays() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and ...eyes were merged into update_body) @@ -99,9 +104,6 @@ If you have any questions/constructive-comments/bugs-to-report/or have a massivl Please contact me on #coderbus IRC. ~Carn x */ -/mob/living/carbon/human - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - /mob/living/carbon/human/refresh_visible_overlays() update_mutations(FALSE) update_body(FALSE) @@ -112,7 +114,7 @@ Please contact me on #coderbus IRC. ~Carn x update_fire(FALSE) update_surgery(FALSE) update_bandages(FALSE) - UpdateDamageIcon(FALSE) + update_damage_overlays(FALSE) return ..() /mob/living/carbon/human/on_update_icon() @@ -138,6 +140,7 @@ Please contact me on #coderbus IRC. ~Carn x if(lying && (root_bodytype.prone_overlay_offset[1] || root_bodytype.prone_overlay_offset[2])) M.Translate(root_bodytype.prone_overlay_offset[1], root_bodytype.prone_overlay_offset[2]) + var/mangle_planes = FALSE for(var/i = 1 to LAZYLEN(visible_overlays)) var/entry = visible_overlays[i] if(istype(entry, /image)) @@ -145,11 +148,18 @@ Please contact me on #coderbus IRC. ~Carn x if(i != HO_DAMAGE_LAYER) overlay.transform = M add_overlay(entry) + mangle_planes = mangle_planes || overlay.plane >= ABOVE_LIGHTING_PLANE else if(islist(entry)) for(var/image/overlay in entry) if(i != HO_DAMAGE_LAYER) overlay.transform = M add_overlay(overlay) + mangle_planes = mangle_planes || overlay.plane >= ABOVE_LIGHTING_PLANE + + if(mangle_planes) + z_flags |= ZMM_MANGLE_PLANES + else + z_flags &= ~ZMM_MANGLE_PLANES for(var/i = 1 to LAZYLEN(visible_underlays)) var/entry = visible_underlays[i] @@ -161,16 +171,29 @@ Please contact me on #coderbus IRC. ~Carn x underlay.transform = M underlays = visible_underlays - var/obj/item/organ/external/head/head = get_organ(BP_HEAD, /obj/item/organ/external/head) - if(head) - var/image/I = head.get_eye_overlay() - if(I) - add_overlay(I) - -/mob/living/carbon/human/proc/get_icon_scale_mult() +/mob/living/proc/get_icon_scale_mult() // If you want stuff like scaling based on species or something, here is a good spot to mix the numbers together. return list(icon_scale_x, icon_scale_y) +/mob/living/carbon/human/update_appearance_flags(add_flags, remove_flags) + . = ..() + if(.) + update_icon() + +// Separate and duplicated from human logic due to humans having `lying` and many overlays. +/mob/living/update_transform() + var/list/icon_scale_values = get_icon_scale_mult() + var/desired_scale_x = icon_scale_values[1] + var/desired_scale_y = icon_scale_values[2] + var/matrix/M = matrix() + M.Scale(desired_scale_x, desired_scale_y) + M.Translate(0, 16 * (desired_scale_y - 1)) + if(transform_animate_time) + animate(src, transform = M, time = transform_animate_time) + else + transform = M + return transform + /mob/living/carbon/human/update_transform() // First, get the correct size. @@ -181,15 +204,16 @@ Please contact me on #coderbus IRC. ~Carn x // Apply KEEP_TOGETHER so all the component overlays move properly when // applying a transform, or remove it if we aren't doing any transforms // (due to cost). - if(!lying && desired_scale_x == 1 && desired_scale_y == 1) - appearance_flags &= ~KEEP_TOGETHER + if(!lying && desired_scale_x == 1 && desired_scale_y == 1 && !("turf_alpha_mask" in filter_data)) + update_appearance_flags(remove_flags = KEEP_TOGETHER) else - appearance_flags |= KEEP_TOGETHER + update_appearance_flags(add_flags = KEEP_TOGETHER) // Scale/translate/rotate and apply the transform. + var/turn_angle var/matrix/M = matrix() + M.Scale(desired_scale_x, desired_scale_y) if(lying) - var/turn_angle if(dir & WEST) turn_angle = -90 else if(dir & EAST) @@ -197,10 +221,8 @@ Please contact me on #coderbus IRC. ~Carn x else turn_angle = pick(-90, 90) M.Turn(turn_angle) - M.Scale(desired_scale_y, desired_scale_x) M.Translate(turn_angle == 90 ? 1 : -2, (turn_angle == 90 ? -6 : -5) - default_pixel_z) else - M.Scale(desired_scale_x, desired_scale_y) M.Translate(0, 16 * (desired_scale_y - 1)) if(transform_animate_time) @@ -208,48 +230,25 @@ Please contact me on #coderbus IRC. ~Carn x else transform = M - return transform - -var/global/list/damage_icon_parts = list() - -//DAMAGE OVERLAYS -//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) - - // first check whether something actually changed about damage appearance - var/damage_appearance = "" - for(var/obj/item/organ/external/O in get_external_organs()) - damage_appearance += O.damage_state - - if(damage_appearance == previous_damage_appearance) - // nothing to do here - return - - previous_damage_appearance = damage_appearance - var/decl/bodytype/root_bodytype = get_bodytype() - var/image/standing_image = image(root_bodytype.get_damage_overlays(src), icon_state = "00") - - // blend the individual damage states with our icons - for(var/obj/item/organ/external/O in get_external_organs()) - O.update_damstate() - O.update_icon() - if(O.damage_state == "00") - continue - var/icon/DI - var/use_colour = (BP_IS_PROSTHETIC(O) ? SYNTH_BLOOD_COLOR : O.species.get_blood_color(src)) - var/cache_index = "[O.damage_state]/[O.bodytype.type]/[O.icon_state]/[use_colour]/[species.name]" - if(damage_icon_parts[cache_index] == null) - DI = new /icon(O.bodytype.get_damage_overlays(src), O.damage_state) // the damage icon for whole human - DI.Blend(get_limb_mask_for(O.bodytype, O.icon_state), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(use_colour, ICON_MULTIPLY) - damage_icon_parts[cache_index] = DI + var/atom/movable/mask = global._alpha_masks[src] + if(mask) + var/matrix/inverted_transform = matrix() + inverted_transform.Scale(desired_scale_y, desired_scale_x) + if(lying) + inverted_transform.Turn(-turn_angle) + inverted_transform.Translate(turn_angle == -90 ? 1 : -2, (turn_angle == -90 ? -6 : -5) - default_pixel_z) else - DI = damage_icon_parts[cache_index] + inverted_transform.Translate(0, 16 * (desired_scale_y - 1)) + if(transform_animate_time) + animate(mask, transform = inverted_transform, time = transform_animate_time) + else + mask.transform = inverted_transform - standing_image.overlays += DI + return transform +/mob/living/carbon/human/update_damage_overlays(update_icons = TRUE) + . = ..() update_bandages(update_icons) - set_current_mob_overlay(HO_DAMAGE_LAYER, standing_image, update_icons) /mob/living/carbon/human/proc/update_bandages(var/update_icons=1) var/list/bandage_overlays @@ -261,63 +260,37 @@ var/global/list/damage_icon_parts = list() LAZYADD(bandage_overlays, image(bandage_icon, "[O.icon_state][bandage_level]")) set_current_mob_overlay(HO_DAMAGE_LAYER, bandage_overlays, update_icons) +/mob/living/carbon/human/proc/get_human_icon_cache_key() + . = list() + for(var/limb_tag in global.all_limb_tags) + . += "[limb_tag]_" + var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, limb_tag) + if(isnull(part) || part.skip_body_icon_draw) + . += "skip" + continue + part.update_icon() // This wil regenerate their icon if needed, and more importantly set their cache key. + . += part._icon_cache_key + . += "husked_[!!is_husked()]" + . = JOINTEXT(.) + //BASE MOB SPRITE -/mob/living/carbon/human/update_body(var/update_icons=1) +/mob/living/carbon/human/update_body(var/update_icons = TRUE) var/list/limbs = get_external_organs() if(!LAZYLEN(limbs)) return // Something is trying to update our body pre-init (probably loading a preview image during world startup). - var/husk_color_mod = rgb(96,88,80) - var/husk = is_husked() - - //CACHING: Generate an index key from visible bodyparts. - //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - - //Create a new, blank icon for our mob to use. - if(stand_icon) - qdel(stand_icon) var/decl/bodytype/root_bodytype = get_bodytype() - stand_icon = new(root_bodytype.icon_template || 'icons/mob/human.dmi',"blank") - - var/icon_key = "[root_bodytype.get_icon_cache_uid(src)][skin_tone][skin_colour]" - if(lip_style) - icon_key += "[lip_style]" - else - icon_key += "nolips" - var/obj/item/organ/internal/eyes/eyes = get_organ((root_bodytype.vision_organ || BP_EYES), /obj/item/organ/internal/eyes) - icon_key += istype(eyes) ? eyes.eye_colour : COLOR_BLACK + var/icon_key = get_human_icon_cache_key() - for(var/limb_tag in global.all_limb_tags) - var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, limb_tag) - if(isnull(part) || part.skip_body_icon_draw) - icon_key += "0" - continue - for(var/M in part.markings) - icon_key += "[M][part.markings[M]]" - if(part) - icon_key += "[part.bodytype.get_icon_cache_uid(part.owner)][part.render_alpha]" - icon_key += "[part.skin_tone]" - if(part.skin_colour) - icon_key += "[part.skin_colour]" - icon_key += "[part.skin_blend]" - for(var/M in part.markings) - icon_key += "[M][part.markings[M]]" - if(!BP_IS_PROSTHETIC(part) && (part.status & ORGAN_DEAD)) - icon_key += "2" - else - icon_key += "1" - - icon_key = "[icon_key][husk ? 1 : 0]" - - var/icon/base_icon - if(human_icon_cache[icon_key]) - base_icon = human_icon_cache[icon_key] - else + stand_icon = global.human_icon_cache[icon_key] + if(!stand_icon) //BEGIN CACHED ICON GENERATION. - base_icon = icon(root_bodytype.icon_template) + stand_icon = new(root_bodytype.icon_template || 'icons/mob/human.dmi', "blank") for(var/obj/item/organ/external/part in limbs) - var/icon/temp = part.get_icon() + if(isnull(part) || part.skip_body_icon_draw) + continue + var/icon/temp = part.icon //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) if(part.icon_position & (LEFT | RIGHT)) @@ -328,34 +301,28 @@ var/global/list/damage_icon_parts = list() temp2.Insert(new /icon(temp,dir=EAST),dir=EAST) if(!(part.icon_position & RIGHT)) temp2.Insert(new /icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_OVERLAY) + stand_icon.Blend(temp2, ICON_OVERLAY) if(part.icon_position & LEFT) temp2.Insert(new /icon(temp,dir=EAST),dir=EAST) if(part.icon_position & RIGHT) temp2.Insert(new /icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_UNDERLAY) + stand_icon.Blend(temp2, ICON_UNDERLAY) else if(part.icon_position & UNDER) - base_icon.Blend(temp, ICON_UNDERLAY) + stand_icon.Blend(temp, ICON_UNDERLAY) else - base_icon.Blend(temp, ICON_OVERLAY) - - if(husk) - base_icon.ColorTone(husk_color_mod) - + stand_icon.Blend(temp, ICON_OVERLAY) //Handle husk overlay. - if(husk) + if(is_husked()) var/husk_icon = root_bodytype.get_husk_icon(src) if(husk_icon) - var/icon/mask = new(base_icon) + var/icon/mask = new(stand_icon) var/icon/husk_over = new(husk_icon, "") mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) husk_over.Blend(mask, ICON_ADD) - base_icon.Blend(husk_over, ICON_OVERLAY) - - human_icon_cache[icon_key] = base_icon - - //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) + stand_icon.Blend(husk_over, ICON_OVERLAY) + else + stand_icon.ColorTone("#605850") + global.human_icon_cache[icon_key] = stand_icon //tail update_tail_showing(0) @@ -388,8 +355,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_hair(var/update_icons=1) var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD, /obj/item/organ/external/head) + var/list/new_accessories = head_organ?.get_mob_overlays() + set_current_mob_overlay(HO_HAIR_LAYER, new_accessories, update_icons) - set_current_mob_overlay(HO_HAIR_LAYER, (istype(head_organ) ? head_organ.get_hair_icon() : null), update_icons) /mob/living/carbon/human/proc/update_skin(var/update_icons=1) // todo: make this use bodytype set_current_mob_overlay(HO_SKIN_LAYER, species.update_skin(src), update_icons) @@ -457,6 +425,8 @@ var/global/list/damage_icon_parts = list() return // No tail data! // These values may be null and are generally optional. + var/hair_colour = GET_HAIR_COLOUR(src) + var/skin_colour = get_skin_colour() var/tail_hair = tail_organ.get_tail_hair() var/tail_blend = tail_organ.get_tail_blend() var/tail_hair_blend = tail_organ.get_tail_hair_blend() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm deleted file mode 100644 index ff3b7588e00..00000000000 --- a/code/modules/mob/living/carbon/life.dm +++ /dev/null @@ -1,22 +0,0 @@ -/mob/living/carbon/Life() - if(!..()) - return - - // Increase germ_level regularly - if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level - germ_level++ - - if(stat != DEAD && !is_in_stasis()) - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Random events (vomiting etc) - handle_random_events() - - // eye, ear, brain damages - handle_disabilities() - - . = 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 0e7af051b09..9eef36b15d9 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -78,10 +78,10 @@ return if(!cuffs || buckled) return - if (cuffs.can_take_damage() && cuffs.health > 0) // Improvised cuffs can break because their health is > 0 + if (cuffs.can_take_damage() && cuffs.current_health > 0) // Improvised cuffs can break because their health is > 0 var/cuffs_name = "\the [cuffs]" - cuffs.take_damage(cuffs.max_health / 2) - if (QDELETED(cuffs) || cuffs.health < 1) + cuffs.take_damage(cuffs.get_max_health() / 2) + if (QDELETED(cuffs) || cuffs.current_health < 1) visible_message( SPAN_DANGER("\The [src] manages to remove [cuffs_name], breaking them!"), SPAN_NOTICE("You successfully remove [cuffs_name], breaking them!"), range = 2 diff --git a/code/modules/mob/living/carbon/taste.dm b/code/modules/mob/living/carbon/taste.dm index be5741d61b1..643fe0fbf3c 100644 --- a/code/modules/mob/living/carbon/taste.dm +++ b/code/modules/mob/living/carbon/taste.dm @@ -92,6 +92,3 @@ calculate text size per text. out += "[intensity_desc] [taste_desc]" return english_list(out, "something indescribable") - -/mob/living/carbon/proc/get_fullness() - return nutrition + (REAGENT_VOLUME(reagents, /decl/material/liquid/nutriment) * 25) \ No newline at end of file diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index f3ad31eec72..1b1257a75d2 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -27,7 +27,7 @@ adjustBruteLoss(damage) if(BURN) if(MUTATION_COLD_RESISTANCE in mutations) - damage = 0 + return adjustFireLoss(damage) if(TOX) adjustToxLoss(damage) @@ -41,8 +41,6 @@ electrocute_act(damage, used_weapon, 1, def_zone) if(IRRADIATE) apply_radiation(damage) - - updatehealth() return TRUE @@ -64,7 +62,6 @@ /mob/living/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) if(!effect || (blocked >= 100)) return FALSE - switch(effecttype) if(STUN) SET_STATUS_MAX(src, STAT_STUN, effect * blocked_mult(blocked)) @@ -81,7 +78,6 @@ SET_STATUS_MAX(src, STAT_BLURRY, effect * blocked_mult(blocked)) if(DROWSY) SET_STATUS_MAX(src, STAT_DROWSY, effect * blocked_mult(blocked)) - updatehealth() return TRUE /mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 8fff75e85d9..d443bd4b080 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -1,11 +1,11 @@ -/mob/living/death(gibbed, deathmessage="seizes up and falls limp...", show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(buckled_mob) - unbuckle_mob() - if(hiding) - hiding = FALSE - var/obj/item/rig/rig = get_rig() - if(rig) - rig.notify_ai(SPAN_DANGER("Warning: user death event. Mobility control passed to integrated intelligence system.")) +/mob/living/death(gibbed) + . = ..() if(.) + if(buckled_mob) + unbuckle_mob() + if(hiding) + hiding = FALSE + var/obj/item/rig/rig = get_rig() + if(rig) + rig.notify_ai(SPAN_DANGER("Warning: user death event. Mobility control passed to integrated intelligence system.")) stop_aiming(no_message=1) diff --git a/code/modules/mob/living/deity/deity.dm b/code/modules/mob/living/deity/deity.dm index a8a8981195b..0f3084f6893 100644 --- a/code/modules/mob/living/deity/deity.dm +++ b/code/modules/mob/living/deity/deity.dm @@ -5,8 +5,7 @@ icon_state = "egg" pixel_x = -128 pixel_y = -128 - health = 100 - maxHealth = 100 //I dunno what to do with health at this point. + max_health = 100 universal_understand = TRUE mob_sort_value = 5 @@ -33,7 +32,7 @@ eyeobj.possess(src) eyenet.add_source(src) -/mob/living/deity/death() +/mob/living/deity/death(gibbed) . = ..() if(.) for(var/m in minions) @@ -67,7 +66,7 @@ qdel(items[i]) items.Cut() - death(0) + death() if(length(minions)) minions.Cut() if(length(structures)) @@ -103,14 +102,14 @@ var/list/forms = subtypesof(/datum/god_form) for(var/form in forms) - var/datum/god_form/G = form - var/god_name = initial(G.name) - var/icon/god_icon = icon('icons/mob/mob.dmi', initial(G.pylon_icon_state)) + var/datum/god_form/god = form + var/god_name = initial(god.name) + var/icon/god_icon = icon('icons/mob/mob.dmi', initial(god.pylon_icon_state)) send_rsc(src,god_icon, "[god_name].png") dat += {"
  • - + - + "} dat += "
    " . += "\<\<\[[pref.gear_slot]\] \>\>" - if(config.max_gear_cost < INFINITY) - . += "[pref.total_loadout_cost]/[config.max_gear_cost] loadout points spent." + if(max_gear_cost < INFINITY) + . += "[pref.total_loadout_cost]/[max_gear_cost] loadout points spent." . += "Clear Loadout" . += "[hide_unavailable_gear ? "Show all" : "Hide unavailable"]
    " var/firstcat = 1 - var/decl/loadout_category/current_category_decl = GET_DECL(current_tab || /decl/loadout_category) - var/list/all_loadout_categories = decls_repository.get_decls_of_type(/decl/loadout_category) - for(var/category in all_loadout_categories) + current_tab = current_tab || global.using_map.loadout_categories[1].type + var/decl/loadout_category/current_category_decl = GET_DECL(current_tab) + for(var/decl/loadout_category/LC as anything in global.using_map.loadout_categories) if(firstcat) firstcat = FALSE else . += " |" - var/decl/loadout_category/LC = all_loadout_categories[category] var/category_cost = 0 for(var/gear in LC.gear) var/decl/loadout_option/G = LC.gear[gear] @@ -155,9 +160,9 @@ var/global/list/gear_datums = list() if(LC.max_selections < INFINITY) category_selections = " - [LC.max_selections - pref.total_loadout_selections[category]] remaining" if(category_cost) - . += " [LC.name] - [category_cost][category_selections] " + . += " [LC.name] - [category_cost][category_selections] " else - . += " [LC.name] - 0[category_selections] " + . += " [LC.name] - 0[category_selections] " . += "
    [G.name][G.cost][G.get_description(get_gear_metadata(G,1))]" + entry += "[G.get_description(get_gear_metadata(G, TRUE))]" var/allowed = 1 if(allowed && G.allowed_roles) @@ -256,11 +261,11 @@ var/global/list/gear_datums = list() /datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/decl/loadout_option/G, var/readonly) var/list/gear = pref.gear_list[pref.gear_slot] - . = gear[G.name] + . = gear[G.uid] if(!.) . = list() if(!readonly) - gear[G.name] = . + gear[G.uid] = . /datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/decl/loadout_option/G, var/datum/gear_tweak/tweak) var/list/metadata = get_gear_metadata(G) @@ -276,18 +281,18 @@ var/global/list/gear_datums = list() /datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) if(href_list["toggle_gear"]) var/decl/loadout_option/TG = locate(href_list["toggle_gear"]) - if(!istype(TG) || global.gear_datums[TG.name] != TG) + if(!istype(TG)) return TOPIC_REFRESH - if(TG.name in pref.gear_list[pref.gear_slot]) - pref.gear_list[pref.gear_slot] -= TG.name + if(TG.uid in pref.gear_list[pref.gear_slot]) + pref.gear_list[pref.gear_slot] -= TG.uid else if(TG.can_afford(preference_mob(), pref)) - pref.gear_list[pref.gear_slot] += TG.name + pref.gear_list[pref.gear_slot] += TG.uid return TOPIC_REFRESH_UPDATE_PREVIEW if(href_list["gear"] && href_list["tweak"]) var/decl/loadout_option/gear = locate(href_list["gear"]) var/datum/gear_tweak/tweak = locate(href_list["tweak"]) - if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks) || global.gear_datums[gear.name] != gear) + if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) return TOPIC_NOACTION var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) if(!metadata || !CanUseTopic(user)) @@ -296,23 +301,22 @@ var/global/list/gear_datums = list() return TOPIC_REFRESH_UPDATE_PREVIEW if(href_list["next_slot"]) pref.gear_slot = pref.gear_slot+1 - if(pref.gear_slot > config.loadout_slots) + if(pref.gear_slot > get_config_value(/decl/config/num/loadout_slots)) pref.gear_slot = 1 recalculate_loadout_cost() return TOPIC_REFRESH_UPDATE_PREVIEW if(href_list["prev_slot"]) pref.gear_slot = pref.gear_slot-1 if(pref.gear_slot < 1) - pref.gear_slot = config.loadout_slots + pref.gear_slot = get_config_value(/decl/config/num/loadout_slots) recalculate_loadout_cost() return TOPIC_REFRESH_UPDATE_PREVIEW if(href_list["select_category"]) - var/list/all_loadout_categories = decls_repository.get_decls_of_type(/decl/loadout_category) - for(var/category in all_loadout_categories) - var/decl/loadout_category/LC = all_loadout_categories[category] - if(LC.name == href_list["select_category"]) - current_tab = category - break + var/decl/loadout_category/LC = locate(href_list["select_category"]) + if(istype(LC) && (LC in global.using_map.loadout_categories)) + current_tab = LC.type + else + current_tab = global.using_map.loadout_categories[1].type return TOPIC_REFRESH if(href_list["clear_loadout"]) var/list/gear = pref.gear_list[pref.gear_slot] @@ -329,6 +333,9 @@ var/global/list/gear_datums = list() var/list/gear = list() /decl/loadout_option + abstract_type = /decl/loadout_option + decl_flags = DECL_FLAG_MANDATORY_UID + var/name // Name/index. Must be unique. var/description // Description of this gear. If left blank will default to the description of the pathed item. var/path // Path of item. @@ -346,20 +353,17 @@ var/global/list/gear_datums = list() var/list/faction_restricted // List of types of cultural datums that will allow this loadout option. var/whitelisted // Species name to check the whitelist for. - abstract_type = /decl/loadout_option - /decl/loadout_option/Initialize() - if(config.allow_loadout_customization) + if(get_config_value(/decl/config/toggle/allow_loadout_customization)) loadout_flags |= GEAR_HAS_CUSTOM_SELECTION . = ..() - if(name && (!global.using_map.loadout_blacklist || !(type in global.using_map.loadout_blacklist))) - global.gear_datums[name] = src + if(!global.using_map.loadout_blacklist || !(type in global.using_map.loadout_blacklist)) var/decl/loadout_category/LC = GET_DECL(category) - ADD_SORTED(LC.gear, name, /proc/cmp_text_asc) - LC.gear[name] = src + ADD_SORTED(LC.gear, uid, /proc/cmp_text_asc) + LC.gear[uid] = src if(FLAGS_EQUALS(loadout_flags, GEAR_HAS_TYPE_SELECTION|GEAR_HAS_SUBTYPE_SELECTION)) CRASH("May not have both type and subtype selection tweaks") @@ -389,10 +393,12 @@ var/global/list/gear_datums = list() . = ..() if(!name) . += "missing display name" - else if(isnull(cost) || cost < 0) + if(isnull(cost) || cost < 0) . += "invalid cost" - else if(!path) + if(!path) . += "missing path definition" + if(!ispath(category, /decl/loadout_category)) + . += "null or invalid category: [category || "NULL"]" /decl/loadout_option/proc/get_gear_tweak_options() . = list() @@ -405,16 +411,18 @@ var/global/list/gear_datums = list() /datum/gear_data var/path var/location + var/material -/datum/gear_data/New(var/path, var/location) +/datum/gear_data/New(var/path, var/location, var/material) src.path = path src.location = location + src.material = material /decl/loadout_option/proc/spawn_item(user, location, metadata) var/datum/gear_data/gd = new(path, location) for(var/datum/gear_tweak/gt in gear_tweaks) gt.tweak_gear_data(islist(metadata) && metadata["[gt]"], gd) - var/item = new gd.path(gd.location) + var/item = new gd.path(gd.location, gd.material) for(var/datum/gear_tweak/gt in gear_tweaks) gt.tweak_item(user, item, (islist(metadata) && metadata["[gt]"])) . = item @@ -431,6 +439,7 @@ var/global/list/gear_datums = list() . = item if(!old_item) return + item.handle_loadout_equip_replacement(old_item) if(old_item.type != item.type) place_in_storage_or_drop(wearer, old_item) else diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 468760abdd5..0ff94c20d9b 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -426,7 +426,7 @@ var/datum/mil_branch/B = mil_branches.get_branch_by_type(T) dat += "
  • [B.name]: [job.get_ranks(B.name)]" dat += "
    " - if(config.wikiurl) + if(get_config_value(/decl/config/text/wikiurl)) dat += "Open wiki page in browser" var/description = job.get_description_blurb() @@ -438,7 +438,7 @@ else if(href_list["job_wiki"]) var/rank = href_list["job_wiki"] - open_link(user,"[config.wikiurl][rank]") + open_link(user,"[get_config_value(/decl/config/text/wikiurl)][rank]") return ..() diff --git a/code/modules/client/preference_setup/occupation/skill_selection.dm b/code/modules/client/preference_setup/occupation/skill_selection.dm index b1ecefe452b..913cada7522 100644 --- a/code/modules/client/preference_setup/occupation/skill_selection.dm +++ b/code/modules/client/preference_setup/occupation/skill_selection.dm @@ -119,7 +119,7 @@ purge_skills_missing_prerequisites(job) /datum/preferences/proc/get_character_age() - return appearance_descriptors["age"] || 30 + return LAZYACCESS(appearance_descriptors, "age") || 30 /datum/preferences/proc/check_skill_prerequisites(datum/job/job, decl/hierarchy/skill/S) if(!S.prerequisites) @@ -192,8 +192,7 @@ dat += "" var/decl/hierarchy/skill/skill = GET_DECL(/decl/hierarchy/skill) for(var/decl/hierarchy/skill/cat in skill.children) - dat += "" + dat += "" for(var/decl/hierarchy/skill/S in cat.children) dat += get_skill_row(job, S) for(var/decl/hierarchy/skill/perk in S.children) @@ -207,7 +206,7 @@ var/level = min + (pref.skills_allocated[job] ? pref.skills_allocated[job][S] : 0) //the current skill level var/cap = pref.get_max_affordable(job, S) //if selecting the skill would make you overspend, it won't be shown dat += "" - dat += "" + dat += "" for(var/i = SKILL_MIN, i <= SKILL_MAX, i++) dat += skill_to_button(S, job, level, i, min, cap) dat += "" @@ -222,20 +221,20 @@ var/offset = skill.prerequisites ? skill.prerequisites[skill.parent.type] - 1 : 0 var/effective_level = selection_level - offset if(effective_level <= 0 || effective_level > length(skill.levels)) - return "" + return "" var/level_name = skill.levels[effective_level] var/cost = skill.get_cost(effective_level) var/button_label = "[level_name] ([cost])" if(effective_level < min) - return "" + return "" else if(effective_level < current_level) - return "" + return "" else if(effective_level == current_level) - return "" + return "" else if(effective_level <= max) - return "" + return "" else - return "" + return "" /datum/category_item/player_setup_item/occupation/proc/add_link(decl/hierarchy/skill/skill, datum/job/job, text, style, value) if(pref.check_skill_prerequisites(job, skill)) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index ca61617116b..54aec096125 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -42,12 +42,12 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" /datum/category_group/player_setup_category/controls name = "Controls" - sort_order = 9 + sort_order = 8 category_item_type = /datum/category_item/player_setup_item/controls /datum/category_group/player_setup_category/global_preferences name = "Global" - sort_order = 10 + sort_order = 9 category_item_type = /datum/category_item/player_setup_item/player_global diff --git a/code/modules/client/preference_setup/records/00_records.dm b/code/modules/client/preference_setup/records/00_records.dm index 39558c4cc42..da808508666 100644 --- a/code/modules/client/preference_setup/records/00_records.dm +++ b/code/modules/client/preference_setup/records/00_records.dm @@ -6,22 +6,25 @@ /datum/category_item/player_setup_item/records/content(var/mob/user) . = list() - . += "
    [name]:
    " - if(jobban_isbanned(user, "Records") || jobban_isbanned(user, name)) - . += "You are banned from modifying your [lowertext(name)].
    " - else - . += "[TextPreview(pref.records[record_key], 40)]
    " + if(record_key) + . += "
    [name]:
    " + if(jobban_isbanned(user, "Records") || jobban_isbanned(user, name)) + . += "You are banned from modifying your [lowertext(name)].
    " + else + . += "[TextPreview(pref.records[record_key], 40)]
    " . = jointext(.,null) /datum/category_item/player_setup_item/records/OnTopic(var/href,var/list/href_list, var/mob/user) - if (href_list["set_record"]) + if (record_key && href_list["set_record"]) var/new_record = sanitize(input(user,"Enter new [lowertext(name)] here.", CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.records[record_key])) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) if(!isnull(new_record) && !jobban_isbanned(user, "Records") && !jobban_isbanned(user, name) && CanUseTopic(user)) pref.records[record_key] = new_record return TOPIC_REFRESH /datum/category_item/player_setup_item/records/load_character(var/datum/pref_record_reader/R) - pref.records[record_key] = R.read(record_key) + if(record_key) + pref.records[record_key] = R.read(record_key) /datum/category_item/player_setup_item/records/save_character(var/datum/pref_record_writer/P) - P.write(record_key, pref.records[record_key]) + if(record_key) + P.write(record_key, pref.records[record_key]) diff --git a/code/modules/client/preference_setup/records/01_character_info.dm b/code/modules/client/preference_setup/records/01_character_info.dm new file mode 100644 index 00000000000..bf2c6e996fe --- /dev/null +++ b/code/modules/client/preference_setup/records/01_character_info.dm @@ -0,0 +1,66 @@ +/datum/category_item/player_setup_item/records/character_info + name = "Character Information" + sort_order = 1 + record_key = null + +/datum/category_item/player_setup_item/records/character_info/content(var/mob/user) + + var/comments_prep = pref.validate_comments_record() + if(comments_prep) + return "
    [comments_prep]
    " + + var/datum/character_information/comments = SScharacter_info.get_record(pref.comments_record_id, TRUE) + . = list("IC/OOC information preferences:
    ") + if(get_config_value(/decl/config/toggle/allow_character_comments)) + . += "[comments.allow_comments ? "Allowing and displaying comments." : "Not allowing or displaying comments."]
    " + . += "[comments.show_info_on_examine ? "Showing IC and OOC info on examine." : "Not showing IC and OOC info on examine."]
    " + + var/is_banned = jobban_isbanned(user, "Records") || jobban_isbanned(user, name) + . += "
    IC information:
    " + if(is_banned) + . += "You are banned from modifying your IC character information.
    " + else + . += "[TextPreview(comments.ic_info, 40)]
    " + + . += "
    OOC information:
    " + if(is_banned) + . += "You are banned from modifying your OOC character information.
    " + else + . += "[TextPreview(comments.ooc_info, 40)]
    " + . = jointext(.,null) + +/datum/category_item/player_setup_item/records/character_info/OnTopic(var/href,var/list/href_list, var/mob/user) + + if (record_key && href_list["set_record"]) + var/new_record = sanitize(input(user,"Enter new [lowertext(name)] here.", CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.records[record_key])) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + if(!isnull(new_record) && !jobban_isbanned(user, "Records") && !jobban_isbanned(user, name) && CanUseTopic(user)) + pref.records[record_key] = new_record + return TOPIC_REFRESH + + var/datum/character_information/comments = pref.comments_record_id && SScharacter_info.get_record(pref.comments_record_id, TRUE) + if(comments) + + if(get_config_value(/decl/config/toggle/allow_character_comments) && href_list["toggle_comments"]) + comments.allow_comments = !comments.allow_comments + . = TOPIC_REFRESH + + if(href_list["toggle_examine_info"]) + comments.show_info_on_examine = !comments.show_info_on_examine + . = TOPIC_REFRESH + + if(href_list["set_ic_info"]) + var/new_ic_info = input(user, "Enter your new IC info.", "Set IC Info", comments.ic_info) as null|message + if(isnull(new_ic_info)) + return TOPIC_NOACTION + comments.ic_info = sanitize(new_ic_info) + . = TOPIC_REFRESH + + if(href_list["set_ooc_info"]) + var/new_ooc_info = input(user, "Enter your new OOC info.", "Set OOC Info", comments.ooc_info) as null|message + if(isnull(new_ooc_info)) + return TOPIC_NOACTION + comments.ooc_info = sanitize(new_ooc_info) + . = TOPIC_REFRESH + + if(. == TOPIC_REFRESH && istext(pref.comments_record_id) && length(pref.comments_record_id)) + SScharacter_info.queue_to_save(pref.comments_record_id) diff --git a/code/modules/client/preference_setup/records/01_public_record.dm b/code/modules/client/preference_setup/records/02_public_record.dm similarity index 87% rename from code/modules/client/preference_setup/records/01_public_record.dm rename to code/modules/client/preference_setup/records/02_public_record.dm index 30cecb639cc..eecc37bacee 100644 --- a/code/modules/client/preference_setup/records/01_public_record.dm +++ b/code/modules/client/preference_setup/records/02_public_record.dm @@ -1,4 +1,4 @@ /datum/category_item/player_setup_item/records/public name = "Public Records" - sort_order = 1 + sort_order = 2 record_key = PREF_PUB_RECORD \ No newline at end of file diff --git a/code/modules/client/preference_setup/records/02_medical_record.dm b/code/modules/client/preference_setup/records/03_medical_record.dm similarity index 87% rename from code/modules/client/preference_setup/records/02_medical_record.dm rename to code/modules/client/preference_setup/records/03_medical_record.dm index dcc465c8a85..4633eeddb12 100644 --- a/code/modules/client/preference_setup/records/02_medical_record.dm +++ b/code/modules/client/preference_setup/records/03_medical_record.dm @@ -1,4 +1,4 @@ /datum/category_item/player_setup_item/records/medical name = "Medical Records" - sort_order = 2 + sort_order = 3 record_key = PREF_MED_RECORD diff --git a/code/modules/client/preference_setup/records/03_security_record.dm b/code/modules/client/preference_setup/records/04_security_record.dm similarity index 87% rename from code/modules/client/preference_setup/records/03_security_record.dm rename to code/modules/client/preference_setup/records/04_security_record.dm index 09de3196aa6..2f5f5965b9f 100644 --- a/code/modules/client/preference_setup/records/03_security_record.dm +++ b/code/modules/client/preference_setup/records/04_security_record.dm @@ -1,4 +1,4 @@ /datum/category_item/player_setup_item/records/security name = "Security Records" - sort_order = 1 + sort_order = 4 record_key = PREF_SEC_RECORD diff --git a/code/modules/client/preference_setup/records/04_general_record.dm b/code/modules/client/preference_setup/records/05_general_record.dm similarity index 87% rename from code/modules/client/preference_setup/records/04_general_record.dm rename to code/modules/client/preference_setup/records/05_general_record.dm index 21d9ba865f7..f8539c5fdd0 100644 --- a/code/modules/client/preference_setup/records/04_general_record.dm +++ b/code/modules/client/preference_setup/records/05_general_record.dm @@ -1,4 +1,4 @@ /datum/category_item/player_setup_item/records/general name = "Employment Records" - sort_order = 1 + sort_order = 5 record_key = PREF_GEN_RECORD diff --git a/code/modules/client/preference_setup/records/05_memory.dm b/code/modules/client/preference_setup/records/06_memory.dm similarity index 86% rename from code/modules/client/preference_setup/records/05_memory.dm rename to code/modules/client/preference_setup/records/06_memory.dm index ad7c73638bd..cac94c0e78d 100644 --- a/code/modules/client/preference_setup/records/05_memory.dm +++ b/code/modules/client/preference_setup/records/06_memory.dm @@ -1,4 +1,4 @@ /datum/category_item/player_setup_item/records/memory name = "Memories" - sort_order = 1 + sort_order = 6 record_key = PREF_MEM_RECORD diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ac46b89ff8a..a17968f5b78 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -189,6 +189,17 @@ var/global/list/time_prefs_fixed = list() update_preview_icon() show_character_previews() + // This is a bit out of place; we do this here because it means that loading and viewing + // a character slot is sufficient to refresh our comment history. Otherwise, you would + // have to go back and edit your comments every X days for them to stay visible. + if(comments_record_id) + for(var/record_id in SScharacter_info._comment_holders_by_id) + var/datum/character_information/record = SScharacter_info._comment_holders_by_id[record_id] + if(record) + for(var/datum/character_comment/comment in record.comments) + if(comment.author_id == comments_record_id) + comment.last_updated = REALTIMEOFDAY + var/dat = list("
    ") if(is_guest) dat += SPAN_WARNING("Please create an account to save your preferences. If you have an account and are seeing this, please adminhelp for assistance.") @@ -244,7 +255,6 @@ var/global/list/time_prefs_fixed = list() var/obj/screen/setup_preview/bg/BG = LAZYACCESS(char_render_holders, "BG") if(!BG) BG = new - BG.icon = 'icons/effects/32x32.dmi' BG.pref = src LAZYSET(char_render_holders, "BG", BG) client.screen |= BG @@ -279,13 +289,13 @@ var/global/list/time_prefs_fixed = list() char_render_holders = null /datum/preferences/proc/process_link(mob/user, list/href_list) - - if(!user) return - if(isliving(user)) return - + if(!user) + return + if(isliving(user)) + return if(href_list["preference"] == "open_whitelist_forum") - if(config.forumurl) - direct_output(user, link(config.forumurl)) + if(get_config_value(/decl/config/text/forumurl)) + direct_output(user, link(get_config_value(/decl/config/text/forumurl))) else to_chat(user, "The forum URL is not set in the server configuration.") return @@ -343,6 +353,8 @@ var/global/list/time_prefs_fixed = list() // Sanitizing rather than saving as someone might still be editing when copy_to occurs. player_setup.sanitize_setup() + validate_comments_record() // Make sure a record has been generated for this character. + character.comments_record_id = comments_record_id character.personal_aspects = list() var/decl/bodytype/new_bodytype = get_bodytype_decl() if(species == character.get_species_name()) @@ -352,9 +364,10 @@ var/global/list/time_prefs_fixed = list() if(be_random_name) var/decl/cultural_info/culture = GET_DECL(cultural_info[TAG_CULTURE]) - if(culture) real_name = culture.get_random_name(gender) + if(culture) + real_name = culture.get_random_name(gender) - if(config.humans_need_surnames) + if(get_config_value(/decl/config/toggle/humans_need_surnames)) var/firstspace = findtext(real_name, " ") var/name_length = length(real_name) if(!firstspace) //we need a surname @@ -367,20 +380,11 @@ var/global/list/time_prefs_fixed = list() character.set_gender(gender) character.blood_type = blood_type - character.eye_colour = eye_colour + character.set_eye_colour(eye_colour, skip_update = TRUE) - character.h_style = h_style - character.hair_colour = hair_colour - - character.f_style = f_style - character.facial_hair_colour = facial_hair_colour - - character.skin_colour = skin_colour + character.set_skin_colour(skin_colour, skip_update = TRUE) character.skin_tone = skin_tone - character.h_style = h_style - character.f_style = f_style - QDEL_NULL_LIST(character.worn_underwear) character.worn_underwear = list() @@ -399,24 +403,27 @@ var/global/list/time_prefs_fixed = list() character.backpack_setup = new(backpack, backpack_metadata["[backpack]"]) for(var/obj/item/organ/external/O in character.get_external_organs()) - LAZYCLEARLIST(O.markings) - - for(var/M in body_markings) - var/decl/sprite_accessory/marking/mark_datum = GET_DECL(M) - var/mark_color = "[body_markings[M]]" + for(var/decl/sprite_accessory_category/sprite_category in O.get_sprite_accessory_categories()) + if(!sprite_category.clear_in_pref_apply) + continue + O.clear_sprite_accessories_by_category(sprite_category.type, skip_update = TRUE) - for(var/bodypart in mark_datum.body_parts) - var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(character, bodypart) - if(O) - LAZYSET(O.markings, M, mark_color) + for(var/accessory_category in sprite_accessories) + for(var/accessory in sprite_accessories[accessory_category]) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + var/accessory_colour = sprite_accessories[accessory_category][accessory] + for(var/bodypart in accessory_decl.body_parts) + var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(character, bodypart) + if(O) + O.set_sprite_accessory(accessory, accessory_category, accessory_colour, skip_update = TRUE) if(LAZYLEN(appearance_descriptors)) character.appearance_descriptors = appearance_descriptors.Copy() if(character.dna) character.dna.ready_dna(character) - if(client.prefs?.blood_type) - character.dna.b_type = client.prefs.blood_type + if(blood_type) + character.dna.b_type = blood_type character.force_update_limbs() character.update_mutations(0) @@ -466,7 +473,8 @@ var/global/list/time_prefs_fixed = list() dat += "
    " dat += "Select a character slot to load
    " - for(var/i=1, i<= config.character_slots, i++) + var/character_slots = get_config_value(/decl/config/num/character_slots) + for(var/i = 1 to character_slots) var/name = (slot_names && slot_names[get_slot_key(i)]) || "Character[i]" if(i==default_slot) name = "[name]" diff --git a/code/modules/client/preferences_persist.dm b/code/modules/client/preferences_persist.dm index d18dd143f3a..a5fbeba0660 100644 --- a/code/modules/client/preferences_persist.dm +++ b/code/modules/client/preferences_persist.dm @@ -1,4 +1,6 @@ #define PREF_SER_VERSION 1 +/datum/preferences + var/comments_record_id /datum/preferences/proc/get_path(ckey, record_key, extension="json") return "data/player_saves/[copytext(ckey,1,2)]/[ckey]/[record_key].[extension]" @@ -42,9 +44,28 @@ R = new /datum/pref_record_reader/null_reader(PREF_SER_VERSION) player_setup.load_preferences(R) +/datum/preferences/proc/validate_comments_record(var/validate_slot) + if(!SScharacter_info.initialized) + return "The comments subsystem is still loading, or something has gone wrong. Please wait for server initialization to finish, and contact an admin if this message persists afterwards." + if(isnull(validate_slot)) + validate_slot = default_slot + var/slot_key = validate_slot && get_slot_key(validate_slot) + if(!slot_key || !LAZYACCESS(slot_names, slot_key)) // Not actually a character slot. + return "You have tried to validate an invalid slot ('[validate_slot || "null"]'). Please report this as a bug on the issue tracker." + comments_record_id = SScharacter_info.get_record_id("[client_ckey]-[get_slot_key(validate_slot || default_slot)]") + var/datum/character_information/comments = SScharacter_info.get_record(comments_record_id, TRUE) + if(!comments) + comments = SScharacter_info.get_or_create_record(comments_record_id, TRUE) + comments.ckey = client_ckey + comments.char_name = slot_names[slot_key] || "Unknown" // this may be inaccurate but it doesn't really matter at this point. + comments.update_fields() + comments_record_id = comments.record_id + /datum/preferences/proc/save_preferences() var/datum/pref_record_writer/json_list/W = new(PREF_SER_VERSION) player_setup.save_preferences(W) + if(istext(comments_record_id) && length(comments_record_id)) + SScharacter_info.queue_to_save(comments_record_id) save_pref_record("preferences", W.data) /datum/preferences/proc/get_slot_key(slot) @@ -55,19 +76,23 @@ slot = default_slot if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes. - slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) + slot = sanitize_integer(slot, 1, get_config_value(/decl/config/num/character_slots), initial(default_slot)) if(slot != default_slot) default_slot = slot SScharacter_setup.queue_preferences_save(src) + var/record_id = "[client_ckey]-[get_slot_key(default_slot)]" if(slot == SAVE_RESET) // If we're resetting, set everything to null. Sanitization will clean it up var/datum/pref_record_reader/null_reader/R = new(PREF_SER_VERSION) + SScharacter_info.clear_record(record_id) player_setup.load_character(R) else var/datum/pref_record_reader/R = load_pref_record(get_slot_key(slot)) if(!R) R = new /datum/pref_record_reader/null_reader(PREF_SER_VERSION) + // Load/reload our character info record - mass preload is done if comments are enabled, but not done otherwise. + SScharacter_info.reload_record(record_id) player_setup.load_character(R) update_preview_icon() diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 8ddf5bfce69..f4ac71d058a 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -36,6 +36,9 @@ /// A list of event categories that are not allowed to use this spawnpoint (ex. ASSIGNMENT_JANITOR) var/list/disallow_job_event_categories + ///The positions avaible for spawning + //VAR_PRIVATE/list/_spawn_positions + // Returns the spawn list. Mob is supplied in case overrides want to check prefs. /decl/spawnpoint/proc/get_spawn_turfs(var/mob/spawning) return _spawn_turfs @@ -73,6 +76,36 @@ /decl/spawnpoint/proc/after_join(mob/victim) return +// ///Pick a valid spawn turf to spawn the player on according to the spawnpoint's own criteras, and place the player there +// /decl/spawnpoint/proc/try_spawn(mob/victim) +// var/list/possible_places +// for(var/datum/extension/spawn_position/SP in _spawn_positions) +// if(SP.is_available(victim) && !SP.is_busy()) +// LAZYADD(possible_places, SP) + +// //Add the turfs, if any +// if(length(_spawn_turfs)) +// possible_places |= _spawn_turfs +// var/datum/extension/spawn_position/chosen = SAFEPICK(possible_places) +// if(istype(chosen, /datum/extension/spawn_position)) +// . = chosen.place(victim) +// after_join(victim) +// else if(isturf(chosen)) +// . = chosen +// after_join(victim) + +// // Adds to the spawn list. Uses a proc for subtype overrides. +// /decl/spawnpoint/proc/register_spawn_position(datum/extension/spawn_position/adding) +// LAZYDISTINCTADD(_spawn_positions, adding) + +// // Removes from the spawn list. +// /decl/spawnpoint/proc/unregister_spawn_position(datum/extension/spawn_position/removing) +// LAZYREMOVE(_spawn_positions, removing) + +// ////////////////////////////////////////////////////////////// +// // Spawn Point Providers +// ////////////////////////////////////////////////////////////// + // Dummy spawnpoint for ghosts. /decl/spawnpoint/observer name = "Observer" diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm deleted file mode 100644 index f20646370b6..00000000000 --- a/code/modules/client/ui_style.dm +++ /dev/null @@ -1,78 +0,0 @@ - - -var/global/all_ui_styles = list( - "Midnight" = 'icons/mob/screen/midnight.dmi', - "Orange" = 'icons/mob/screen/orange.dmi', - "Old" = 'icons/mob/screen/old.dmi', - "White" = 'icons/mob/screen/white.dmi', - "Old-noborder" = 'icons/mob/screen/old-noborder.dmi', - "Minimalist" = 'icons/mob/screen/minimalist.dmi' - ) - -var/global/all_tooltip_styles = list( - "Midnight", //Default for everyone is the first one, - "Plasmafire", - "Retro", - "Slimecore", - "Operative", - "Clockwork" - ) - -/proc/ui_style2icon(ui_style) - if(ui_style in all_ui_styles) - return all_ui_styles[ui_style] - return all_ui_styles["White"] - - -/client/verb/change_ui() - set name = "Change UI" - set desc = "Configure your user interface" - set category = "OOC" - - if(!ishuman(mob)) - to_chat(src, SPAN_WARNING("You must be human to use this verb.")) - return - - var/UI_style_new = input(src, "Select a style. White is recommended for customization", "Change UI: Style", prefs.UI_style) as null|anything in global.all_ui_styles - if(!UI_style_new) - return - - var/UI_style_color_new = input(src, "Choose your UI color. Dark colors are not recommended!", "Change UI: Color", prefs.UI_style_color) as color|null - if(!UI_style_color_new) - return - - var/UI_style_alpha_new = input(src, "Select a new alpha (transparency) parameter for your UI, between 50 and 255", "Change UI: Alpha", prefs.UI_style_alpha) as null|num - if(!UI_style_alpha_new) - return - - UI_style_alpha_new = clamp(UI_style_alpha_new, 50, 255) - - var/list/icons = mob.hud_used.adding + mob.hud_used.other + mob.hud_used.hotkeybuttons - - icons.Add( - mob.zone_sel, - mob.gun_setting_icon, - mob.item_use_icon, - mob.gun_move_icon, - mob.radio_use_icon - ) - - var/icon/UI_style_icon_new = all_ui_styles[UI_style_new] - - apply_ui_style(icons, UI_style_icon_new, UI_style_color_new, UI_style_alpha_new) - - if(alert("Like it? Save changes?",,"Yes", "No") == "Yes") - prefs.UI_style = UI_style_new - prefs.UI_style_alpha = UI_style_alpha_new - prefs.UI_style_color = UI_style_color_new - SScharacter_setup.queue_preferences_save(prefs) - to_chat(usr, "Your UI settings were saved.") - else - apply_ui_style(icons) - -/client/proc/apply_ui_style(list/atoms, ui_icon = all_ui_styles[prefs.UI_style], ui_color = prefs.UI_style_color, ui_alpha = prefs.UI_style_alpha) - for(var/obj/screen/S in atoms) - if(!(S.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB))) - S.icon = ui_icon - S.color = ui_color - S.alpha = ui_alpha diff --git a/code/modules/client/ui_styles/_helpers.dm b/code/modules/client/ui_styles/_helpers.dm new file mode 100644 index 00000000000..36685c53f35 --- /dev/null +++ b/code/modules/client/ui_styles/_helpers.dm @@ -0,0 +1,30 @@ +/proc/get_ui_styles(var/filter_available = TRUE) + var/list/all_ui_styles = decls_repository.get_decls_of_subtype(/decl/ui_style) + for(var/ui_type in all_ui_styles) + var/decl/ui_style/ui = all_ui_styles[ui_type] + if(!ui.restricted || !filter_available) + LAZYADD(., ui) + +/proc/get_default_ui_icon(ui_key) + var/static/list/default_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/midnight/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/midnight/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/midnight/hands.dmi', + UI_ICON_HEALTH = 'icons/mob/screen/styles/health.dmi', + UI_ICON_CRIT_MARKER = 'icons/mob/screen/styles/crit_markers.dmi', + UI_ICON_HYDRATION = 'icons/mob/screen/styles/hydration.dmi', + UI_ICON_INTENT = 'icons/mob/screen/styles/intents.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/midnight/interaction.dmi', + UI_ICON_INTERNALS = 'icons/mob/screen/styles/internals.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/midnight/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/midnight/movement.dmi', + UI_ICON_NUTRITION = 'icons/mob/screen/styles/nutrition.dmi', + UI_ICON_STATUS = 'icons/mob/screen/styles/status.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/midnight/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/midnight/zone_selector.dmi' + ) + return istext(ui_key) ? default_icons[ui_key] : null + +/proc/get_ui_icon(ui_style, ui_key) + var/decl/ui_style/style = GET_DECL(ui_style) + return style?.get_icon(ui_key) || get_default_ui_icon(ui_key) diff --git a/code/modules/client/ui_styles/_ui_style.dm b/code/modules/client/ui_styles/_ui_style.dm new file mode 100644 index 00000000000..24e3d908516 --- /dev/null +++ b/code/modules/client/ui_styles/_ui_style.dm @@ -0,0 +1,61 @@ +/decl/ui_style + abstract_type = /decl/ui_style + decl_flags = DECL_FLAG_MANDATORY_UID + /// Whether or not this style is selectable in preferences. + var/restricted = FALSE + /// A descriptive string. + var/name + /// Associative mapping of UI icon key to icon file. + var/list/icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/midnight/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/midnight/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/midnight/hands.dmi', + UI_ICON_HEALTH = 'icons/mob/screen/styles/health.dmi', + UI_ICON_CRIT_MARKER = 'icons/mob/screen/styles/crit_markers.dmi', + UI_ICON_HYDRATION = 'icons/mob/screen/styles/hydration.dmi', + UI_ICON_INTENT = 'icons/mob/screen/styles/intents.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/midnight/interaction.dmi', + UI_ICON_INTERNALS = 'icons/mob/screen/styles/internals.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/midnight/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/midnight/movement.dmi', + UI_ICON_NUTRITION = 'icons/mob/screen/styles/nutrition.dmi', + UI_ICON_STATUS_FIRE = 'icons/mob/screen/styles/status_fire.dmi', + UI_ICON_STATUS = 'icons/mob/screen/styles/status.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/midnight/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/midnight/zone_selector.dmi', + UI_ICON_CHARGE = 'icons/mob/screen/styles/charge.dmi' + ) + /// A subset of UI keys to icon files used to override the above. + var/list/override_icons + +/decl/ui_style/Initialize() + for(var/ui_key in override_icons) + icons[ui_key] = override_icons[ui_key] + return ..() + +/decl/ui_style/validate() + . = ..() + if(!istext(name)) + . += "invalid name: [name || "NULL"]" + + // Validate we have icons and states as expected. + var/list/states_to_check = get_expected_states() + for(var/ui_key in global._ui_all_keys) + if(!(ui_key in icons)) + . += "no entry for UI key [ui_key]" + continue + var/check_icon = icons[ui_key] + var/list/missing_states = list() + var/list/checking_states = states_to_check[ui_key] + var/list/remaining_states = icon_states(check_icon) + for(var/check_state in checking_states) + remaining_states -= check_state + if(!check_state_in_icon(check_state, check_icon)) + missing_states |= check_state + if(length(remaining_states)) + . += "icon [check_icon] for key [ui_key] has extraneous states: '[jointext(remaining_states, "', '")]'" + if(length(missing_states)) + . += "icon [check_icon] for key [ui_key] is missing states: '[jointext(missing_states, "', '")]'" + +/decl/ui_style/proc/get_icon(var/ui_key) + return istext(ui_key) && length(icons) ? icons[ui_key] : null diff --git a/code/modules/client/ui_styles/_ui_style_states.dm b/code/modules/client/ui_styles/_ui_style_states.dm new file mode 100644 index 00000000000..bac1d053713 --- /dev/null +++ b/code/modules/client/ui_styles/_ui_style_states.dm @@ -0,0 +1,184 @@ +var/global/list/_ui_all_keys = list( + UI_ICON_INTERACTION, + UI_ICON_ZONE_SELECT, + UI_ICON_MOVEMENT, + UI_ICON_INVENTORY, + UI_ICON_ATTACK, + UI_ICON_HANDS, + UI_ICON_INTERNALS, + UI_ICON_HEALTH, + UI_ICON_NUTRITION, + UI_ICON_HYDRATION, + UI_ICON_FIRE_INTENT, + UI_ICON_INTENT, + UI_ICON_UP_HINT, + UI_ICON_STATUS, + UI_ICON_STATUS_FIRE, + UI_ICON_CHARGE +) + +var/global/list/_ui_expected_states +/decl/ui_style/proc/get_expected_states() + if(!global._ui_expected_states) + global._ui_expected_states = collect_expected_states() + return global._ui_expected_states + +/decl/ui_style/proc/collect_expected_states() + + // Set hardcoded strings. + global._ui_expected_states = list( + UI_ICON_ATTACK = list( + "attack_none" + ), + UI_ICON_FIRE_INTENT = list( + "no_walk0", + "no_walk1", + "no_run0", + "no_run1", + "no_item0", + "no_item1", + "no_radio0", + "no_radio1", + "gun0", + "gun1" + ), + UI_ICON_HANDS = list( + "hand_base", + "hand_selected", + "act_equip", + "hand1", + "hand2" + ), + UI_ICON_HEALTH = list( + "health0", + "health1", + "health2", + "health3", + "health4", + "health5", + "health6", + "health7", + "health_numb" + ), + UI_ICON_CRIT_MARKER = list( + "softcrit", + "hardcrit", + "fullhealth", + "burning" + ), + UI_ICON_HYDRATION = list( + "hydration0", + "hydration1", + "hydration2", + "hydration3", + "hydration4" + ), + UI_ICON_INTENT = list( + "intent_all", + "intent_help", + "intent_disarm", + "intent_grab", + "intent_harm", + "intent_none" + ), + UI_ICON_INTERACTION = list( + "act_resist", + "act_throw_off", + "act_throw_on", + "act_drop", + "maneuver_off", + "maneuver_on" + ), + UI_ICON_INTERNALS = list( + "internal0", + "internal1" + ), + UI_ICON_INVENTORY = list( + "other" + ), + UI_ICON_MOVEMENT = list(), + UI_ICON_NUTRITION = list( + "nutrition0", + "nutrition1", + "nutrition2", + "nutrition3", + "nutrition4" + ), + UI_ICON_STATUS_FIRE = list( + "fire0", + "fire1", + "fire2" + ), + UI_ICON_STATUS = list( + "temp-4", + "temp-3", + "temp-2", + "temp-1", + "temp0", + "temp1", + "temp2", + "temp3", + "temp4", + "tox0", + "tox1", + "oxy0", + "oxy1", + "oxy2", + "pressure-2", + "pressure-1", + "pressure0", + "pressure1", + "pressure2" + ), + UI_ICON_UP_HINT = list( + "uphint0", + "uphint1" + ), + UI_ICON_ZONE_SELECT = list( + "zone_sel_tail" + ), + UI_ICON_CHARGE = list( + "charge0", + "charge1", + "charge2", + "charge3", + "charge4", + "charge-empty" + ) + ) + + // Collect attack selector icon states. + var/list/all_attacks = decls_repository.get_decls_of_subtype(/decl/natural_attack) + for(var/attack_type in all_attacks) + var/decl/natural_attack/attack = all_attacks[attack_type] + if(attack.selector_icon_state) + global._ui_expected_states[UI_ICON_ATTACK] |= attack.selector_icon_state + + // Collect hand slot sates. + for(var/slot in global.all_hand_slots) + global._ui_expected_states[UI_ICON_HANDS] |= "hand_[slot]" + for(var/gripper_type in subtypesof(/datum/inventory_slot/gripper)) + var/datum/inventory_slot/gripper/gripper = gripper_type + if(TYPE_IS_ABSTRACT(gripper)) + continue + var/ui_label = initial(gripper.ui_label) + if(ui_label) + global._ui_expected_states[UI_ICON_HANDS] |= "hand_[ui_label]" + + // Collect movement intent states. + var/list/all_movement = decls_repository.get_decls_of_subtype(/decl/move_intent) + for(var/movement_type in all_movement) + var/decl/move_intent/movement = all_movement[movement_type] + if(movement.hud_icon_state) + global._ui_expected_states[UI_ICON_MOVEMENT] |= movement.hud_icon_state + + // Collect inventory slot states. + for(var/inventory_slot_type in subtypesof(/datum/inventory_slot)) + var/datum/inventory_slot/slot = inventory_slot_type + if(TYPE_IS_ABSTRACT(slot)) + continue + var/slot_string = initial(slot.slot_state) + if(slot_string) + global._ui_expected_states[UI_ICON_INVENTORY] |= slot_string + + return global._ui_expected_states diff --git a/code/modules/client/ui_styles/_ui_tooltips.dm b/code/modules/client/ui_styles/_ui_tooltips.dm new file mode 100644 index 00000000000..63880a90bcd --- /dev/null +++ b/code/modules/client/ui_styles/_ui_tooltips.dm @@ -0,0 +1,8 @@ +var/global/all_tooltip_styles = list( + "Midnight", //Default for everyone is the first one, + "Plasmafire", + "Retro", + "Slimecore", + "Operative", + "Clockwork" + ) diff --git a/code/modules/client/ui_styles/ui_style_subtypes.dm b/code/modules/client/ui_styles/ui_style_subtypes.dm new file mode 100644 index 00000000000..7fbd15f6c0d --- /dev/null +++ b/code/modules/client/ui_styles/ui_style_subtypes.dm @@ -0,0 +1,75 @@ +// Midnight just uses base type defaults since that's where they came from. +/decl/ui_style/midnight + name = "Midnight" + uid = "ui_style_midnight" + +/decl/ui_style/orange + name = "Orange" + uid = "ui_style_orange" + override_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/orange/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/orange/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/orange/hands.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/orange/interaction.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/orange/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/orange/movement.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/orange/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/orange/zone_selector.dmi' + ) + +/decl/ui_style/old + name = "Old" + uid = "ui_style_old" + override_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/old/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/old/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/old/hands.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/old/interaction.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/old/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/old/movement.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/old/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/old/zone_selector.dmi' + ) + +/decl/ui_style/old_noborder + name = "Old (no border)" + uid = "ui_style_old_noborder" + override_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/old/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/old/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/old/hands.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/old/interaction.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/old_noborder/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/old/movement.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/old_noborder/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/old_noborder/zone_selector.dmi' + ) + +/decl/ui_style/white + name = "White" + uid = "ui_style_white" + override_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/white/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/white/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/white/hands.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/white/interaction.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/white/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/white/movement.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/white/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/white/zone_selector.dmi' + ) + +/decl/ui_style/minimalist + name = "Minimalist" + uid = "ui_style_minimalist" + override_icons = list( + UI_ICON_ATTACK = 'icons/mob/screen/styles/minimalist/attack_selector.dmi', + UI_ICON_FIRE_INTENT = 'icons/mob/screen/styles/minimalist/fire_intent.dmi', + UI_ICON_HANDS = 'icons/mob/screen/styles/minimalist/hands.dmi', + UI_ICON_INTENT = 'icons/mob/screen/styles/minimalist/intents.dmi', + UI_ICON_INTERACTION = 'icons/mob/screen/styles/minimalist/interaction.dmi', + UI_ICON_INVENTORY = 'icons/mob/screen/styles/minimalist/inventory.dmi', + UI_ICON_MOVEMENT = 'icons/mob/screen/styles/minimalist/movement.dmi', + UI_ICON_UP_HINT = 'icons/mob/screen/styles/minimalist/uphint.dmi', + UI_ICON_ZONE_SELECT = 'icons/mob/screen/styles/minimalist/zone_selector.dmi' + ) diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 1dedcd609ab..5d4c25c2626 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -1,7 +1,7 @@ /obj/item/clothing name = "clothing" siemens_coefficient = 0.9 - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' material = /decl/material/solid/organic/cloth var/wizard_garb = 0 @@ -58,7 +58,7 @@ // End placeholder. // Updates the vision of the mob wearing the clothing item, if any -/obj/item/clothing/proc/update_vision() +/obj/item/clothing/proc/update_wearer_vision() if(isliving(src.loc)) var/mob/living/L = src.loc L.handle_vision() @@ -67,15 +67,10 @@ /obj/item/clothing/proc/needs_vision_update() return flash_protection || tint -/obj/item/clothing/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) - if(length(accessories)) - for(var/obj/item/clothing/accessory/A in accessories) - if(A.should_overlay()) - overlay.overlays += A.get_mob_overlay(user_mob, slot) - if(markings_icon && markings_color && check_state_in_icon("[overlay.icon_state][markings_icon]", overlay.icon)) overlay.overlays += mutable_appearance(overlay.icon, "[overlay.icon_state][markings_icon]", markings_color) @@ -89,7 +84,13 @@ if(markings_icon && markings_color) overlay.overlays += mutable_appearance(overlay.icon, markings_icon, markings_color) - . = ..() + // We apply accessory overlays after calling parent so accessories are not offset twice. + overlay = ..() + if(overlay && length(accessories)) + for(var/obj/item/clothing/accessory/A in accessories) + if(A.should_overlay()) + overlay.overlays += A.get_mob_overlay(user_mob, slot, bodypart) + return overlay /obj/item/clothing/on_update_icon() . = ..() @@ -111,7 +112,7 @@ return set_extension(src, /datum/extension/scent/custom, odorant.scent, odorant.scent_intensity, odorant.scent_descriptor, odorant.scent_range) - addtimer(CALLBACK(src, /obj/item/clothing/proc/change_smell), time, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/clothing, change_smell)), time, TIMER_UNIQUE | TIMER_OVERRIDE) /obj/item/clothing/proc/get_fibers() . = "material from \a [name]" @@ -152,7 +153,7 @@ /obj/item/clothing/equipped(var/mob/user) if(needs_vision_update()) - update_vision() + update_wearer_vision() return ..() /obj/item/clothing/proc/refit_for_bodytype(var/target_bodytype) @@ -201,6 +202,18 @@ if(rags) to_chat(user, SPAN_SUBTLE("With a sharp object, you could cut \the [src] up into [rags] rag\s.")) + var/obj/item/clothing/accessory/vitals_sensor/sensor = locate() in accessories + if(sensor) + switch(sensor.sensor_mode) + if(VITALS_SENSOR_OFF) + to_chat(user, "Its sensors appear to be disabled.") + if(VITALS_SENSOR_BINARY) + to_chat(user, "Its binary life sensors appear to be enabled.") + if(VITALS_SENSOR_VITAL) + to_chat(user, "Its vital tracker appears to be enabled.") + if(VITALS_SENSOR_TRACKING) + to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + #undef RAG_COUNT /obj/item/clothing/Topic(href, href_list, datum/topic_state/state) @@ -232,3 +245,41 @@ /obj/item/clothing/proc/check_limb_support(var/mob/living/carbon/human/user) return FALSE + +/obj/item/clothing/verb/toggle_suit_sensors() + set name = "Toggle Suit Sensors" + set category = "Object" + set src in usr + set_sensors(usr) + +/obj/item/clothing/proc/set_sensors(mob/user) + if (isobserver(user) || user.incapacitated()) + return + var/obj/item/clothing/accessory/vitals_sensor/sensor = locate() in accessories + if(sensor) + sensor.user_set_sensors(user) + +/obj/item/clothing/handle_loadout_equip_replacement(obj/item/old_item) + . = ..() + if(!istype(old_item, /obj/item/clothing) || !(ACCESSORY_SLOT_SENSORS in valid_accessory_slots)) + return + var/obj/item/clothing/old_clothes = old_item + var/obj/item/clothing/accessory/vitals_sensor/sensor = locate() in old_clothes.accessories + if(!sensor) + return + sensor.removable = TRUE // This will be refreshed by remove_accessory/attach_accessory + old_clothes.remove_accessory(null, sensor) + attach_accessory(null, sensor) + + +/decl/interaction_handler/clothing_set_sensors + name = "Set Sensors Level" + expected_target_type = /obj/item/clothing/under + +/decl/interaction_handler/clothing_set_sensors/invoked(var/atom/target, var/mob/user) + var/obj/item/clothing/under/U = target + U.set_sensors(user) + +/obj/item/clothing/get_alt_interactions(var/mob/user) + . = ..() + LAZYADD(., /decl/interaction_handler/clothing_set_sensors) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index bc323d94fea..957872f823f 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -47,7 +47,7 @@ name = "jumpsuit" icon = 'icons/clothing/under/jumpsuits/jumpsuit.dmi' desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -76,7 +76,7 @@ name = "grey cap" desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." icon = 'icons/clothing/head/softcap.dmi' - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' body_parts_covered = 0 item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -105,8 +105,8 @@ /obj/item/clothing/suit/chameleon name = "armor" icon = 'icons/clothing/suit/armor/vest.dmi' - desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change it's appearance, but offering no protection.. It seems to have a small dial inside." - origin_tech = "{'esoteric':3}" + desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change its appearance, but offering no protection. It seems to have a small dial inside." + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -134,7 +134,7 @@ name = "black shoes" icon = 'icons/clothing/feet/colored_shoes.dmi' desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -161,7 +161,7 @@ /obj/item/storage/backpack/chameleon name = "backpack" desc = "A backpack outfitted with cloaking tech. It seems to have a small dial inside, kept away from the storage." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON icon = 'icons/obj/items/storage/backpack/backpack.dmi' var/static/list/clothing_choices @@ -197,7 +197,7 @@ color = COLOR_GRAY40 icon = 'icons/clothing/hands/gloves_generic.dmi' desc = "It looks like a pair of gloves, but it seems to have a small dial inside." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -226,7 +226,7 @@ name = "gas mask" icon = 'icons/clothing/mask/gas_mask_full.dmi' desc = "It looks like a plain gask mask, but on closer inspection, it seems to have a small dial inside." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -255,7 +255,7 @@ name = "Optical Meson Scanner" icon = 'icons/clothing/eyes/scanner_meson.dmi' desc = "It looks like a plain set of mesons, but on closer inspection, it seems to have a small dial inside." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -284,7 +284,7 @@ name = "radio headset" icon = 'icons/obj/items/device/radio/headsets/headset.dmi' desc = "An updated, modular intercom that fits over the head. This one seems to have a small dial on it." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -316,7 +316,7 @@ name = "tie" icon = 'icons/clothing/accessories/ties/tie.dmi' desc = "A neosilk clip-on tie. It seems to have a small dial on its back." - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON var/static/list/clothing_choices @@ -355,7 +355,7 @@ icon = 'icons/obj/guns/revolvers.dmi' icon_state = "revolver" w_class = ITEM_SIZE_SMALL - origin_tech = "{'combat':2,'materials':2,'esoteric':8}" + origin_tech = @'{"combat":2,"materials":2,"esoteric":8}' item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON matter = list() diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index 1fd15a2fcd4..47ce6070e55 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -69,7 +69,7 @@ update_clothing_icon() /obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A) - if(!A || !(A in accessories)) + if(!A || !(A in accessories) || !A.removable || !A.canremove) return A.on_removed(user) @@ -94,11 +94,21 @@ if(!LAZYLEN(accessories)) return + var/list/removable_accessories = list() + for(var/obj/item/clothing/accessory/accessory in accessories) + if(accessory.canremove && accessory.removable) + removable_accessories += accessory + + if(!length(removable_accessories)) + to_chat(usr, SPAN_WARNING("You have no removable accessories.")) + verbs -= /obj/item/clothing/proc/removetie_verb + return + var/obj/item/clothing/accessory/A - if(LAZYLEN(accessories) > 1) - A = show_radial_menu(M, M, make_item_radial_menu_choices(accessories), radius = 42, tooltips = TRUE) + if(LAZYLEN(removable_accessories) > 1) + A = show_radial_menu(M, M, make_item_radial_menu_choices(removable_accessories), radius = 42, tooltips = TRUE) else - A = accessories[1] + A = removable_accessories[1] remove_accessory(usr, A) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 6cf4c26780b..9ac497c285a 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -18,7 +18,7 @@ var/electric = FALSE //if the glasses should be disrupted by EMP var/hud_type - var/obj/screen/overlay + var/obj/screen/screen_overlay var/obj/item/clothing/glasses/hud/hud // Hud glasses, if any var/activation_sound = 'sound/items/goggles_charge.ogg' var/deactivation_sound // set this if you want a sound on deactivation @@ -32,7 +32,7 @@ if(ispath(hud)) hud = new hud(src) -/obj/item/clothing/glasses/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/glasses/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && active && check_state_in_icon("[overlay.icon_state]-active", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-active" . = ..() @@ -43,7 +43,7 @@ . = ..() /obj/item/clothing/glasses/needs_vision_update() - return ..() || overlay || vision_flags || see_invisible || darkness_view + return ..() || screen_overlay || vision_flags || see_invisible || darkness_view /obj/item/clothing/glasses/emp_act(severity) if(electric) @@ -69,7 +69,7 @@ active = _active update_icon() update_clothing_icon() - update_vision() + update_wearer_vision() /obj/item/clothing/glasses/on_update_icon() . = ..() diff --git a/code/modules/clothing/glasses/eyepatch.dm b/code/modules/clothing/glasses/eyepatch.dm index e660806e603..57b9e63696b 100644 --- a/code/modules/clothing/glasses/eyepatch.dm +++ b/code/modules/clothing/glasses/eyepatch.dm @@ -60,7 +60,7 @@ eye.color = eye_color add_overlay(eye) -/obj/item/clothing/glasses/eyepatch/hud/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/glasses/eyepatch/hud/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && active && check_state_in_icon("[overlay.icon_state]-eye", overlay.icon)) var/image/eye = emissive_overlay(overlay.icon, "[overlay.icon_state]-eye") eye.color = eye_color @@ -96,7 +96,7 @@ /obj/item/clothing/glasses/eyepatch/hud/meson/Initialize() . = ..() var/datum/global_hud/global_hud = get_global_hud() - overlay = global_hud.meson + screen_overlay = global_hud.meson /obj/item/clothing/glasses/eyepatch/monocle name = "monocle" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 2766c94ee05..d5be4791a90 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -4,7 +4,7 @@ gender = NEUTER icon = 'icons/clothing/eyes/scanner_meson.dmi' action_button_name = "Toggle Goggles" - origin_tech = "{'magnets':2,'engineering':2}" + origin_tech = @'{"magnets":2,"engineering":2}' toggleable = TRUE vision_flags = SEE_TURFS see_invisible = SEE_INVISIBLE_NOLIGHTING @@ -13,7 +13,7 @@ /obj/item/clothing/glasses/meson/Initialize() . = ..() var/datum/global_hud/global_hud = get_global_hud() - overlay = global_hud.meson + screen_overlay = global_hud.meson /obj/item/clothing/glasses/meson/prescription name = "prescription mesons" @@ -37,13 +37,13 @@ /obj/item/clothing/glasses/science/Initialize() . = ..() var/datum/global_hud/global_hud = get_global_hud() - overlay = global_hud.science + screen_overlay = global_hud.science /obj/item/clothing/glasses/night name = "night vision goggles" desc = "You can totally see in the dark now!" icon = 'icons/clothing/eyes/night_vision.dmi' - origin_tech = "{'magnets':2}" + origin_tech = @'{"magnets":2}' darkness_view = 7 action_button_name = "Toggle Goggles" toggleable = TRUE @@ -53,13 +53,13 @@ /obj/item/clothing/glasses/night/Initialize() . = ..() var/datum/global_hud/global_hud = get_global_hud() - overlay = global_hud.nvg + screen_overlay = global_hud.nvg /obj/item/clothing/glasses/tacgoggles name = "tactical goggles" desc = "Self-polarizing goggles with light amplification for dark environments. Made from durable synthetic." icon = 'icons/clothing/eyes/tactical.dmi' - origin_tech = "{'magnets':2,'combat':4}" + origin_tech = @'{"magnets":2,"combat":4}' darkness_view = 5 action_button_name = "Toggle Goggles" toggleable = TRUE @@ -79,7 +79,7 @@ desc = "Very confusing glasses." gender = NEUTER icon = 'icons/clothing/eyes/scanner_material.dmi' - origin_tech = "{'magnets':3,'engineering':3}" + origin_tech = @'{"magnets":3,"engineering":3}' action_button_name = "Toggle Goggles" toggleable = TRUE vision_flags = SEE_OBJS diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 4a4b6dc75a4..7da212e8b23 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -1,7 +1,7 @@ /obj/item/clothing/glasses/hud name = "\improper HUD" desc = "A heads-up display that provides important info in (almost) real time." - origin_tech = "{'magnets':3,'biotech':2}" + origin_tech = @'{"magnets":3,"biotech":2}' electric = TRUE gender = NEUTER toggleable = TRUE diff --git a/code/modules/clothing/glasses/thermals.dm b/code/modules/clothing/glasses/thermals.dm index 2896b7f7578..6938f8ecea8 100644 --- a/code/modules/clothing/glasses/thermals.dm +++ b/code/modules/clothing/glasses/thermals.dm @@ -4,7 +4,7 @@ gender = NEUTER icon = 'icons/clothing/eyes/scanner_thermal.dmi' action_button_name = "Toggle Goggles" - origin_tech = "{'magnets':3}" + origin_tech = @'{"magnets":3}' toggleable = TRUE vision_flags = SEE_MOBS see_invisible = SEE_INVISIBLE_NOLIGHTING @@ -13,13 +13,13 @@ /obj/item/clothing/glasses/thermal/Initialize() . = ..() var/datum/global_hud/global_hud = get_global_hud() - overlay = global_hud.thermal + screen_overlay = global_hud.thermal /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete name = "optical meson scanner" desc = "Used for seeing walls, floors, and stuff through anything." icon = 'icons/clothing/eyes/scanner_meson.dmi' - origin_tech = "{'magnets':3,'esoteric':4}" + origin_tech = @'{"magnets":3,"esoteric":4}' /obj/item/clothing/glasses/thermal/plain toggleable = FALSE diff --git a/code/modules/clothing/gloves/thick.dm b/code/modules/clothing/gloves/thick.dm index 4136e182991..f6b427c2857 100644 --- a/code/modules/clothing/gloves/thick.dm +++ b/code/modules/clothing/gloves/thick.dm @@ -42,7 +42,7 @@ . = ..() add_overlay(overlay_image(icon, "[icon_state]-botany_fingertips", flags = RESET_COLOR)) -/obj/item/clothing/gloves/thick/botany/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/gloves/thick/botany/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && slot == slot_gloves_str) var/image/I = image(overlay.icon, "[overlay.icon_state]-botany_fingertips") I.appearance_flags |= RESET_COLOR diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 299273022fb..4dfca922a2e 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -8,21 +8,10 @@ body_parts_covered = SLOT_HEAD var/protects_against_weather = FALSE - var/image/light_overlay_image - var/light_overlay = "helmet_light" var/light_applied var/brightness_on var/on = 0 -/obj/item/clothing/head/equipped(var/mob/user, var/slot) - light_overlay_image = null - ..(user, slot) - -/obj/item/clothing/head/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) - if(overlay && on && slot == slot_head_str) - overlay.overlays += overlay_image('icons/mob/light_overlays.dmi', "[light_overlay]", null, RESET_COLOR) - . = ..() - /obj/item/clothing/head/attack_self(mob/user) if(brightness_on) if(!isturf(user.loc)) @@ -46,23 +35,15 @@ /obj/item/clothing/head/on_update_icon(var/mob/user) . = ..() - if(on) - add_light_overlay() update_clothing_icon() + if(on) + var/light_state = "[icon_state]_light" + if(check_state_in_icon(light_state, icon)) + var/image/light_overlay = image(icon, light_state) + light_overlay.appearance_flags |= RESET_COLOR + add_overlay(light_overlay) -/obj/item/clothing/head/proc/add_light_overlay() - if(use_single_icon) - var/cache_key = "[icon]-[get_world_inventory_state()]_icon" - if(!light_overlay_cache[cache_key]) - light_overlay_cache[cache_key] = image(icon, "[get_world_inventory_state()]_light") - overlays |= light_overlay_cache[cache_key] - return - - if(!light_overlay_cache["[light_overlay]_icon"]) - light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]") - overlays |= light_overlay_cache["[light_overlay]_icon"] - -/obj/item/clothing/head/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && on && check_state_in_icon("[overlay.icon_state]_light", overlay.icon)) var/light_overlay if(user_mob.get_bodytype_category() != bodytype) diff --git a/code/modules/clothing/head/fated_key.dm b/code/modules/clothing/head/fated_key.dm index 7220fb501e8..ca70c143077 100644 --- a/code/modules/clothing/head/fated_key.dm +++ b/code/modules/clothing/head/fated_key.dm @@ -12,7 +12,7 @@ canremove = FALSE to_chat(user, SPAN_DANGER("\The [src] shatters your mind as it sears through [user.isSynthetic() ? "metal and circuitry" : "flesh and bone"], embedding itself into your skull!")) SET_STATUS_MAX(user, STAT_PARA, 5) - addtimer(CALLBACK(src, .proc/activate_role), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(activate_role)), 5 SECONDS) else canremove = TRUE name = initial(name) @@ -26,7 +26,7 @@ name = "halo of starfire" desc = "Beware the fire of the star-bearers; it is too terrible to touch." starbearer.add_aura(new /obj/aura/regenerating(starbearer)) - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_HANDS|SLOT_FEET + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_HANDS|SLOT_FEET|SLOT_TAIL item_flags |= ITEM_FLAG_AIRTIGHT /obj/item/clothing/head/fated/verb/perform_division() diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 42eb94b9b79..fbfcf71f12c 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -4,7 +4,6 @@ icon = 'icons/clothing/head/hardhat/yellow.dmi' action_button_name = "Toggle Headlamp" brightness_on = 4 //luminosity when on - light_overlay = "hardhat_light" w_class = ITEM_SIZE_NORMAL armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, @@ -22,7 +21,7 @@ max_pressure_protection = FIRESUIT_MAX_PRESSURE material = /decl/material/solid/organic/plastic matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' /obj/item/clothing/head/hardhat/orange icon = 'icons/clothing/head/hardhat/orange.dmi' @@ -40,7 +39,6 @@ name = "\improper EMS helmet" desc = "A polymer helmet worn by EMTs throughout human space to protect their head. This one comes with an attached flashlight and has 'Medic' written on its back in blue lettering." icon = 'icons/clothing/head/hardhat/medic.dmi' - light_overlay = "EMS_light" w_class = ITEM_SIZE_NORMAL armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, diff --git a/code/modules/clothing/head/headphones.dm b/code/modules/clothing/head/headphones.dm index 409e4822b6a..061e6763f37 100644 --- a/code/modules/clothing/head/headphones.dm +++ b/code/modules/clothing/head/headphones.dm @@ -23,7 +23,7 @@ icon_state = "[icon_state]-on" update_clothing_icon() -/obj/item/clothing/head/headphones/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/headphones/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && headphones_on) overlay.icon_state = "[overlay.icon_state]-on" . = ..() diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 744eb4e6174..541a7d9cd93 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -22,7 +22,7 @@ w_class = ITEM_SIZE_NORMAL material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/plasteel = MATTER_AMOUNT_TRACE) - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' protects_against_weather = TRUE /obj/item/clothing/head/helmet/tactical @@ -38,7 +38,7 @@ ) siemens_coefficient = 0.6 material = /decl/material/solid/metal/plasteel - origin_tech = "{'materials':2,'engineering':2,'combat':2}" + origin_tech = @'{"materials":2,"engineering":2,"combat":2}' /obj/item/clothing/head/helmet/merc name = "combat helmet" @@ -54,7 +54,7 @@ siemens_coefficient = 0.5 material = /decl/material/solid/metal/plasteel matter = list(/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':2,'engineering':2,'combat':2}" + origin_tech = @'{"materials":2,"engineering":2,"combat":2}' /obj/item/clothing/head/helmet/riot name = "riot helmet" @@ -86,7 +86,7 @@ icon_state = "[icon_state]_up" update_clothing_icon() -/obj/item/clothing/head/helmet/riot/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/helmet/riot/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && up && check_state_in_icon("[overlay.icon_state]_up", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_up" . = ..() @@ -122,7 +122,7 @@ /decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':3,'engineering':2,'combat':3}" + origin_tech = @'{"materials":3,"engineering":2,"combat":3}' /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" @@ -140,7 +140,7 @@ siemens_coefficient = 0.5 material = /decl/material/solid/metal/plasteel matter = list(/decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':4,'engineering':2,'combat':4}" + origin_tech = @'{"materials":4,"engineering":2,"combat":4}' /obj/item/clothing/head/helmet/thunderdome name = "\improper Thunderdome helmet" @@ -159,7 +159,7 @@ siemens_coefficient = 1 material = /decl/material/solid/metal/plasteel matter = list(/decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':4,'engineering':2,'combat':4}" + origin_tech = @'{"materials":4,"engineering":2,"combat":4}' /obj/item/clothing/head/helmet/gladiator name = "gladiator helmet" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 8e1a1901d64..abad0360e71 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -34,6 +34,8 @@ var/up = 0 var/base_state +SAVED_VAR(/obj/item/clothing/head/welding, up) + /obj/item/clothing/head/welding/attack_self() if(!base_state) base_state = icon_state @@ -60,7 +62,7 @@ flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) to_chat(usr, "You push the [src] up out of your face.") update_icon() - update_vision() + update_wearer_vision() usr.update_action_buttons() /obj/item/clothing/head/welding/on_update_icon() @@ -70,7 +72,7 @@ icon_state = "[icon_state]_up" update_clothing_icon() //so our mob-overlays -/obj/item/clothing/head/welding/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/welding/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && up && check_state_in_icon("[overlay.icon_state]_up", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_up" . = ..() @@ -126,7 +128,7 @@ icon_state = "[icon_state]_up" update_clothing_icon() -/obj/item/clothing/head/ushanka/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/ushanka/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && up && check_state_in_icon("[overlay.icon_state]_up", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_up" . = ..() @@ -142,7 +144,6 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCK_ALL_HAIR body_parts_covered = SLOT_HEAD|SLOT_FACE|SLOT_EYES brightness_on = 2 - light_overlay = "helmet_light" w_class = ITEM_SIZE_NORMAL /* @@ -199,7 +200,7 @@ if(overlay && check_state_in_icon("[overlay.icon_state]-flame", overlay.icon)) return emissive_overlay(overlay.icon, "[overlay.icon_state]-flame") -/obj/item/clothing/head/cakehat/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/clothing/head/cakehat/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && is_on_fire) var/image/I = get_mob_flame_overlay(overlay, bodytype) if(I) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 03d5f37f661..885b9195403 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -13,10 +13,10 @@ if(flipped) icon_state = "[get_world_inventory_state()]_flipped" -/obj/item/clothing/head/soft/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/soft/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && flipped && check_state_in_icon("[overlay.icon_state]_flipped", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_flipped" - . = ..() + . = ..() /obj/item/clothing/head/soft/dropped() src.flipped=0 diff --git a/code/modules/clothing/masks/_mask.dm b/code/modules/clothing/masks/_mask.dm index 97fdf660499..4457c7089a4 100644 --- a/code/modules/clothing/masks/_mask.dm +++ b/code/modules/clothing/masks/_mask.dm @@ -7,7 +7,7 @@ blood_overlay_type = "maskblood" material = /decl/material/solid/fiberglass matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' var/voicechange = 0 var/list/say_messages @@ -33,7 +33,7 @@ . = ..() LAZYDISTINCTADD(., slot_wear_mask_str) -/obj/item/clothing/mask/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/mask/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && hanging && slot == slot_wear_mask_str && check_state_in_icon("[overlay.icon_state]-down", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-down" . = ..() diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index f3719365900..06d78421b29 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -12,7 +12,7 @@ down_body_parts_covered = null down_item_flags = ITEM_FLAG_THICKMATERIAL pull_mask = 1 - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/organic/plastic /obj/item/clothing/mask/breath/medical diff --git a/code/modules/clothing/masks/chewable.dm b/code/modules/clothing/masks/chewable.dm index aab492be317..de2af1fbaf6 100644 --- a/code/modules/clothing/masks/chewable.dm +++ b/code/modules/clothing/masks/chewable.dm @@ -70,6 +70,7 @@ name = "spit wad" desc = "A disgusting spitwad." icon = 'icons/clothing/mask/chewables/chew_spit.dmi' + icon_state = ICON_STATE_WORLD /obj/item/clothing/mask/chewable/proc/extinguish(var/mob/user, var/no_message) STOP_PROCESSING(SSobj, src) @@ -91,14 +92,14 @@ desc = "A chewy wad of tobacco. Cut in long strands and treated with syrups so it tastes less like a ash-tray when you stuff it into your face." /obj/item/clothing/mask/chewable/tobacco/lenni/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco, 2) + add_to_reagents(/decl/material/solid/tobacco, 2) /obj/item/clothing/mask/chewable/tobacco/redlady name = "chewing tobacco" desc = "A chewy wad of fine tobacco. Cut in long strands and treated with syrups so it doesn't taste like a ash-tray when you stuff it into your face" /obj/item/clothing/mask/chewable/tobacco/redlady/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/fine, 2) + add_to_reagents(/decl/material/solid/tobacco/fine, 2) /obj/item/clothing/mask/chewable/tobacco/nico name = "nicotine gum" @@ -111,7 +112,7 @@ color = reagents.get_color() /obj/item/clothing/mask/chewable/tobacco/nico/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nicotine, 2) + add_to_reagents(/decl/material/liquid/nicotine, 2) /obj/item/clothing/mask/chewable/candy name = "wad" @@ -127,10 +128,10 @@ var/initial_payload_amount = 3 /obj/item/clothing/mask/chewable/candy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 2) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 2) var/list/possible_payloads = get_possible_initial_reagents() if(length(possible_payloads)) - reagents.add_reagent(pick(possible_payloads), initial_payload_amount) + add_to_reagents(pick(possible_payloads), initial_payload_amount) /obj/item/clothing/mask/chewable/candy/proc/get_possible_initial_reagents() return @@ -221,7 +222,7 @@ /obj/item/clothing/mask/chewable/candy/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 4) //6u in total + add_to_reagents(/decl/material/liquid/nutriment/sugar, 4) //6u in total /obj/item/clothing/mask/chewable/candy/lolli/weak_meds/get_possible_initial_reagents() return list( diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index d94970abc92..21b84c44b3b 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -111,7 +111,7 @@ /decl/material/solid/glass = MATTER_AMOUNT_SECONDARY, /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/mask/gas/syndicate name = "tactical mask" @@ -129,7 +129,7 @@ /decl/material/solid/glass = MATTER_AMOUNT_SECONDARY, /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/mask/gas/death_commando name = "\improper Death Commando Mask" @@ -152,7 +152,7 @@ ) body_parts_covered = SLOT_HEAD|SLOT_FACE|SLOT_EYES material = /decl/material/solid/organic/cloth - origin_tech = "{'materials':1,'engineering':2}" + origin_tech = @'{"materials":1,"engineering":2}' /obj/item/clothing/mask/gas/clown_hat name = "clown wig and mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 830763e2872..4856bf57ba5 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -107,7 +107,7 @@ flags_inv = HIDEFACE body_parts_covered = SLOT_FACE|SLOT_EYES action_button_name = "Toggle MUI" - origin_tech = "{'programming':5,'engineering':5}" + origin_tech = @'{"programming":5,"engineering":5}' /obj/item/clothing/mask/ai/Initialize() . = ..() diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index 820695de34e..0cc94b7409b 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -47,7 +47,7 @@ . = ..() update_icon() -/obj/item/clothing/mask/monitor/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/mask/monitor/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) if(!(monitor_state_index in monitor_states)) monitor_state_index = initial(monitor_state_index) diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 4de18782b1c..bfae54c9515 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -22,6 +22,9 @@ var/smoke_effect = 0 var/smoke_amount = 1 +/obj/item/clothing/mask/smokable/get_tool_quality(archetype, property) + return (!lit && archetype == TOOL_CAUTERY) ? TOOL_QUALITY_NONE : ..() + /obj/item/clothing/mask/smokable/dropped(mob/user) . = ..() if(lit) @@ -50,6 +53,7 @@ /obj/item/clothing/mask/smokable/fire_act() light(0) + return ..() /obj/item/clothing/mask/smokable/proc/smoke(amount, manual) smoketime -= amount @@ -62,7 +66,7 @@ reagents.trans_to_mob(C, smoke_amount * amount, CHEM_INHALE, 0.2) add_trace_DNA(C) else // else just remove some of the reagents - reagents.remove_any(smoke_amount * amount) + remove_any_reagents(smoke_amount * amount) smoke_effect++ @@ -109,7 +113,7 @@ M.update_equipment_overlay(slot_wear_mask_str, FALSE) M.update_inhand_overlays() -/obj/item/clothing/mask/smokable/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/mask/smokable/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && lit && check_state_in_icon("[overlay.icon_state]-on", overlay.icon)) var/image/on_overlay = emissive_overlay(overlay.icon, "[overlay.icon_state]-on") on_overlay.appearance_flags |= RESET_COLOR @@ -201,13 +205,16 @@ ignitermes = "USER fiddles with FLAME, and manages to light their NAME." brand = "\improper Trans-Stellar Duty-free" +/obj/item/clothing/mask/smokable/cigarette/can_be_injected_by(var/atom/injector) + return TRUE + /obj/item/clothing/mask/smokable/cigarette/Initialize() . = ..() initialize_reagents() set_extension(src, /datum/extension/tool, list(TOOL_CAUTERY = TOOL_QUALITY_MEDIOCRE)) /obj/item/clothing/mask/smokable/cigarette/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco, 1) + add_to_reagents(/decl/material/solid/tobacco, 1) /obj/item/clothing/mask/smokable/cigarette/light(var/flavor_text = "[usr] lights the [name].") ..() @@ -240,7 +247,7 @@ /obj/item/clothing/mask/smokable/cigarette/menthol/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/menthol, 1) + add_to_reagents(/decl/material/liquid/menthol, 1) /obj/item/trash/cigbutt/menthol icon = 'icons/clothing/mask/smokables/cigarette_menthol_butt.dmi' @@ -256,7 +263,7 @@ type_butt = /obj/item/trash/cigbutt/jerichos /obj/item/clothing/mask/smokable/cigarette/jerichos/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/bad, 1.5) + add_to_reagents(/decl/material/solid/tobacco/bad, 1.5) /obj/item/trash/cigbutt/jerichos icon = 'icons/clothing/mask/smokables/cigarette_jericho_butt.dmi' @@ -273,7 +280,7 @@ type_butt = /obj/item/trash/cigbutt/professionals /obj/item/clothing/mask/smokable/cigarette/professionals/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/bad, 1) + add_to_reagents(/decl/material/solid/tobacco/bad, 1) /obj/item/trash/cigbutt/professionals icon = 'icons/clothing/mask/smokables/cigarette_professional_butt.dmi' @@ -295,7 +302,7 @@ var/band_color /obj/item/clothing/mask/smokable/cigarette/trident/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/fine, 2) + add_to_reagents(/decl/material/solid/tobacco/fine, 2) /obj/item/clothing/mask/smokable/cigarette/trident/on_update_icon() . = ..() @@ -310,42 +317,42 @@ /obj/item/clothing/mask/smokable/cigarette/trident/mint/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/menthol, 2) + add_to_reagents(/decl/material/liquid/menthol, 2) /obj/item/clothing/mask/smokable/cigarette/trident/berry band_color = COLOR_VIOLET /obj/item/clothing/mask/smokable/cigarette/trident/berry/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/berry, 2) + add_to_reagents(/decl/material/liquid/drink/juice/berry, 2) /obj/item/clothing/mask/smokable/cigarette/trident/cherry band_color = COLOR_RED /obj/item/clothing/mask/smokable/cigarette/trident/cherry/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, 2) + add_to_reagents(/decl/material/liquid/nutriment/cherryjelly, 2) /obj/item/clothing/mask/smokable/cigarette/trident/grape band_color = COLOR_PURPLE /obj/item/clothing/mask/smokable/cigarette/trident/grape/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/grape, 2) + add_to_reagents(/decl/material/liquid/drink/juice/grape, 2) /obj/item/clothing/mask/smokable/cigarette/trident/watermelon band_color = COLOR_GREEN /obj/item/clothing/mask/smokable/cigarette/trident/watermelon/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/watermelon, 2) + add_to_reagents(/decl/material/liquid/drink/juice/watermelon, 2) /obj/item/clothing/mask/smokable/cigarette/trident/orange band_color = COLOR_ORANGE /obj/item/clothing/mask/smokable/cigarette/trident/orange/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/orange, 2) + add_to_reagents(/decl/material/liquid/drink/juice/orange, 2) /obj/item/trash/cigbutt/woodbutt name = "wooden tip" @@ -354,14 +361,12 @@ material = /decl/material/solid/organic/wood /obj/item/clothing/mask/smokable/cigarette/attackby(var/obj/item/W, var/mob/user) - ..() - if(istype(W, /obj/item/energy_blade/sword)) var/obj/item/energy_blade/sword/S = W if(S.active) light(SPAN_WARNING("[user] swings their [W], barely missing their nose. They light their [name] in the process.")) - - return + return TRUE + return ..() /obj/item/clothing/mask/smokable/cigarette/attack(mob/living/carbon/human/H, mob/user, def_zone) if(lit && H == user && istype(H)) @@ -387,13 +392,12 @@ return ..() /obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/chems/glass/glass, var/mob/user, proximity) - ..() if(!proximity) return - if(istype(glass)) //you can dip cigarettes into beakers + if(!lit && istype(glass)) //you can dip unlit cigarettes into beakers. todo: extinguishing lit cigarettes in beakers? disambiguation via intent? if(!ATOM_IS_OPEN_CONTAINER(glass)) to_chat(user, SPAN_NOTICE("You need to take the lid off first.")) - return + return TRUE var/transfered = glass.reagents.trans_to_obj(src, chem_volume) if(transfered) //if reagents were transfered, show the message to_chat(user, SPAN_NOTICE("You dip \the [src] into \the [glass].")) @@ -402,6 +406,8 @@ to_chat(user, SPAN_NOTICE("[glass] is empty.")) else to_chat(user, SPAN_NOTICE("[src] is full.")) + return TRUE + return ..() /obj/item/clothing/mask/smokable/cigarette/attack_self(var/mob/user) if(lit == 1) @@ -428,7 +434,7 @@ brand = null /obj/item/clothing/mask/smokable/cigarette/cigar/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/fine, 5) + add_to_reagents(/decl/material/solid/tobacco/fine, 5) /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba name = "\improper Cohiba Robusto cigar" @@ -445,13 +451,13 @@ brand = "Havana" /obj/item/clothing/mask/smokable/cigarette/cigar/havana/populate_reagents() - reagents.add_reagent(/decl/material/solid/tobacco/fine, 10) + add_to_reagents(/decl/material/solid/tobacco/fine, 10) /obj/item/trash/cigbutt name = "cigarette butt" desc = "A manky old cigarette butt." icon = 'icons/clothing/mask/smokables/cigarette_butt.dmi' - icon_state = "butt" + icon_state = ICON_STATE_WORLD randpixel = 10 w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS @@ -465,7 +471,7 @@ /obj/item/trash/cigbutt/cigarbutt name = "cigar butt" desc = "A manky old cigar butt." - icon = 'icons/clothing/mask/smokables/cigar.dmi' + icon = 'icons/clothing/mask/smokables/cigar_butt.dmi' /obj/item/clothing/mask/smokable/cigarette/cigar/attackby(var/obj/item/W, var/mob/user) ..() @@ -483,7 +489,7 @@ brand = "sausage... wait what." /obj/item/clothing/mask/smokable/cigarette/rolled/sausage/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) /obj/item/trash/cigbutt/sausagebutt name = "sausage butt" @@ -561,18 +567,18 @@ ..() if (istype(W, /obj/item/chems/food)) - var/obj/item/chems/food/grown/G = W - if (!G.dry) - to_chat(user, SPAN_NOTICE("[G] must be dried before you stuff it into [src].")) + var/obj/item/chems/food/grown/grown = W + if (!grown.dry) + to_chat(user, SPAN_NOTICE("\The [grown] must be dried before you stuff it into \the [src].")) return if (smoketime) - to_chat(user, SPAN_NOTICE("[src] is already packed.")) + to_chat(user, SPAN_NOTICE("\The [src] is already packed.")) return smoketime = 1000 - if(G.reagents) - G.reagents.trans_to_obj(src, G.reagents.total_volume) - SetName("[G.name]-packed [initial(name)]") - qdel(G) + if(grown.reagents) + grown.reagents.trans_to_obj(src, grown.reagents.total_volume) + SetName("[grown.name]-packed [initial(name)]") + qdel(grown) else if(istype(W, /obj/item/flame/lighter)) var/obj/item/flame/lighter/L = W diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm index 9cd680243c9..edee4acd8eb 100644 --- a/code/modules/clothing/masks/voice.dm +++ b/code/modules/clothing/masks/voice.dm @@ -9,7 +9,7 @@ name = "gas mask" desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics." var/obj/item/voice_changer/changer - origin_tech = "{'esoteric':4}" + origin_tech = @'{"esoteric":4}' /obj/item/clothing/mask/chameleon/voice/verb/Toggle_Voice_Changer() set category = "Object" diff --git a/code/modules/clothing/pants/_pants.dm b/code/modules/clothing/pants/_pants.dm index 860c287e3b1..d2b2590cdba 100644 --- a/code/modules/clothing/pants/_pants.dm +++ b/code/modules/clothing/pants/_pants.dm @@ -9,6 +9,7 @@ w_class = ITEM_SIZE_NORMAL force = 0 valid_accessory_slots = list( + ACCESSORY_SLOT_SENSORS, ACCESSORY_SLOT_UTILITY, ACCESSORY_SLOT_HOLSTER, ACCESSORY_SLOT_ARMBAND, diff --git a/code/modules/clothing/rings/rings.dm b/code/modules/clothing/rings/rings.dm index a6dc2b84426..5e468f80323 100644 --- a/code/modules/clothing/rings/rings.dm +++ b/code/modules/clothing/rings/rings.dm @@ -43,7 +43,7 @@ /obj/item/clothing/ring/reagent atom_flags = ATOM_FLAG_OPEN_CONTAINER - origin_tech = "{'materials':2,'esoteric':4}" + origin_tech = @'{"materials":2,"esoteric":4}' var/tmp/volume = 15 /obj/item/clothing/ring/reagent/Initialize(ml, material_key) @@ -73,11 +73,11 @@ /obj/item/clothing/ring/reagent/sleepy name = "silver ring" desc = "A ring made from what appears to be silver." - origin_tech = "{'materials':2,'esoteric':5}" + origin_tech = @'{"materials":2,"esoteric":5}' /obj/item/clothing/ring/reagent/sleepy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/paralytics, 10) - reagents.add_reagent(/decl/material/liquid/sedatives, 5) + add_to_reagents(/decl/material/liquid/paralytics, 10) + add_to_reagents(/decl/material/liquid/sedatives, 5) ///////////////////////////////////////// //Seals and Signet Rings diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index e5ed6ebafa8..3ba2f7bc765 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -13,7 +13,7 @@ force = 2 blood_overlay_type = "shoeblood" material = /decl/material/solid/organic/leather - origin_tech = "{'materials':1,'engineering':1}" + origin_tech = @'{"materials":1,"engineering":1}' var/can_fit_under_magboots = TRUE var/can_add_cuffs = TRUE @@ -30,6 +30,10 @@ /// A modifier applied to move delay when walking on snow. var/snow_slowdown_mod = 0 +SAVED_VAR(/obj/item/clothing/shoes, attached_cuffs) +SAVED_VAR(/obj/item/clothing/shoes, hidden_item) +SAVED_VAR(/obj/item/clothing/shoes, shine) + /obj/item/clothing/shoes/Destroy() . = ..() if (hidden_item) @@ -174,7 +178,7 @@ S.blend_mode = BLEND_ADD add_overlay(S) -/obj/item/clothing/shoes/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/shoes/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && shine > 0 && slot == slot_shoes_str) var/mutable_appearance/S = mutable_appearance(overlay.icon, "shine") S.alpha = 127 * shine / 100 diff --git a/code/modules/clothing/shoes/jobs.dm b/code/modules/clothing/shoes/jobs.dm index a6c15773f9b..38f03b11e15 100644 --- a/code/modules/clothing/shoes/jobs.dm +++ b/code/modules/clothing/shoes/jobs.dm @@ -35,7 +35,7 @@ max_pressure_protection = FIRESUIT_MAX_PRESSURE var/artificail_shine = 20 matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/shoes/jackboots/set_material(var/new_material) ..() @@ -61,4 +61,4 @@ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE max_pressure_protection = FIRESUIT_MAX_PRESSURE matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 34fdaf91abc..93ea8e30439 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -11,11 +11,14 @@ center_of_mass = null randpixel = 0 matter = list(/decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':2,'engineering':2,'magnets':3}" + origin_tech = @'{"materials":2,"engineering":2,"magnets":3}' var/magpulse = 0 var/obj/item/clothing/shoes/covering_shoes var/online_slowdown = 3 +SAVED_VAR(/obj/item/clothing/shoes/magboots, magpulse) +SAVED_VAR(/obj/item/clothing/shoes/magboots, covering_shoes) + /obj/item/clothing/shoes/magboots/preserve_in_cryopod(var/obj/machinery/cryopod/pod) return TRUE @@ -54,7 +57,7 @@ icon_state = new_state update_clothing_icon() -/obj/item/clothing/shoes/magboots/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/shoes/magboots/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) var/new_state = overlay.icon_state if(magpulse) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 03cf4f3dec2..74aa9e80546 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -6,7 +6,7 @@ markings_color = WOOD_COLOR_CHOCOLATE permeability_coefficient = 0.05 item_flags = ITEM_FLAG_NOSLIP - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' siemens_coefficient = 0.8 bodytype_equip_flags = null matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index fcab77cc951..1bd4a98b6ce 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -36,7 +36,7 @@ /datum/breach/proc/update_descriptor() //Sanity... - class = clamp(1, round(class), 5) + class = clamp(round(class), 1, 5) //Apply the correct descriptor. if(damtype == BURN) descriptor = breach_burn_descriptors[class] diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index 21fecbb9a4a..d574528f109 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -34,7 +34,7 @@ interface_desc = "Disorientates your target by blinding them with this intense palm-mounted light." device = /obj/item/flash - origin_tech = "{'combat':2,'magnets':3,'engineering':5}" + origin_tech = @'{"combat":2,"magnets":3,"engineering":5}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, @@ -44,7 +44,7 @@ /obj/item/rig_module/device/flash/advanced name = "advanced mounted flash" device = /obj/item/flash/advanced - origin_tech = "{'combat':3,'magnets':3,'engineering':5}" + origin_tech = @'{"combat":3,"magnets":3,"engineering":5}' /obj/item/rig_module/device/flash/installed() . = ..() @@ -262,7 +262,7 @@ interface_name = "mounted energy gun" interface_desc = "A shoulder-mounted suit-powered energy gun." - origin_tech = "{'powerstorage':6,'combat':6,'engineering':6}" + origin_tech = @'{"powerstorage":6,"combat":6,"engineering":6}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -284,7 +284,7 @@ interface_name = "mounted electrolaser" interface_desc = "A shoulder-mounted, cell-powered electrolaser." - origin_tech = "{'powerstorage':5,'combat':5,'engineering':6}" + origin_tech = @'{"powerstorage":5,"combat":5,"engineering":6}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, @@ -304,7 +304,7 @@ interface_name = "mounted plasma cutter" interface_desc = "A forearm-mounted suit-powered plasma cutter." - origin_tech = "{'materials':5,'exoticmatter':4,'engineering':7,'combat':5}" + origin_tech = @'{"materials":5,"exoticmatter":4,"engineering":7,"combat":5}' gun = /obj/item/gun/energy/plasmacutter/mounted material = /decl/material/solid/metal/steel diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 954e61f8ea4..d92a4c0e239 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -54,10 +54,10 @@ /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE ) - origin_tech = "{'programming':6,'materials':5,'engineering':6}" + origin_tech = @'{"programming":6,"materials":5,"engineering":6}' var/mob/integrated_ai // Direct reference to the actual mob held in the suit. - var/obj/item/ai_card // Reference to the MMI, posibrain, inteliCard or pAI card previously holding the AI. + var/obj/item/ai_card // Reference to the object previously holding the AI. var/obj/item/ai_verbs/verb_holder /mob @@ -136,7 +136,7 @@ return 1 // Okay, it wasn't a terminal being touched, check for all the simple insertions. - if(input_device.type in list(/obj/item/paicard, /obj/item/mmi, /obj/item/organ/internal/posibrain)) + if(input_device.type in list(/obj/item/paicard, /obj/item/organ/internal/brain_interface)) if(integrated_ai) integrated_ai.attackby(input_device,user) // If the transfer was successful, we can clear out our vars. @@ -340,7 +340,7 @@ interface_name = "niling d-sink" interface_desc = "Colloquially known as a power siphon, this module drains power through the suit hands into the suit battery." - origin_tech = "{'powerstorage':6,'engineering':6}" + origin_tech = @'{"powerstorage":6,"engineering":6}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm index e5bf2be851b..91ba1424b49 100644 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm @@ -20,7 +20,7 @@ active_power_cost = 6 KILOWATTS // 30 min battery life /w best (3kWh) cell passive_power_cost = 0 module_cooldown = 10 SECONDS - origin_tech = "{'materials':5,'powerstorage':6,'magnets':6,'esoteric':6,'engineering':7}" + origin_tech = @'{"materials":5,"powerstorage":6,"magnets":6,"esoteric":6,"engineering":7}' activate_string = "Enable Cloak" deactivate_string = "Disable Cloak" @@ -153,7 +153,7 @@ fabrication_type = /obj/item/energy_net use_power_cost = 20 KILOWATTS - origin_tech = "{'materials':5,'powerstorage':6,'magnets':5,'esoteric':4,'engineering':6}" + origin_tech = @'{"materials":5,"powerstorage":6,"magnets":5,"esoteric":4,"engineering":6}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 76ed6600e50..15b1e98afb9 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -37,7 +37,7 @@ engage_string = "Display Readout" usable = 1 use_power_cost = 200 - origin_tech = "{'magnets':3,'biotech':3,'engineering':5}" + origin_tech = @'{"magnets":3,"biotech":3,"engineering":5}' device = /obj/item/scanner/health material = /decl/material/solid/organic/plastic matter = list( @@ -66,8 +66,8 @@ suit_overlay_inactive = null use_power_cost = 3600 //2 Wh per use module_cooldown = 0 - origin_tech = "{'materials':6,'powerstorage':4,'engineering':6}" - device = /obj/item/pickaxe/diamonddrill + origin_tech = @'{"materials":6,"powerstorage":4,"engineering":6}' + device = /obj/item/tool/drill/diamond material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -86,7 +86,7 @@ usable = 1 selectable = 0 device = /obj/item/ano_scanner - origin_tech = "{'wormholes':4,'magnets':4,'engineering':6}" + origin_tech = @'{"wormholes":4,"magnets":4,"engineering":6}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, @@ -105,7 +105,7 @@ toggleable = 1 use_power_cost = 200 device = /obj/item/scanner/mining - origin_tech = "{'materials':4,'magnets':4,'engineering':6}" + origin_tech = @'{"materials":4,"magnets":4,"engineering":6}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, @@ -128,7 +128,7 @@ usable = 1 engage_string = "Configure RCD" use_power_cost = 300 - origin_tech = "{'materials':6,'magnets':5,'engineering':7}" + origin_tech = @'{"materials":6,"magnets":5,"engineering":7}' device = /obj/item/rcd/mounted material = /decl/material/solid/metal/steel matter = list( @@ -221,7 +221,7 @@ if((charge.charges + chems_to_transfer) > max_reagent_volume) chems_to_transfer = max_reagent_volume - charge.charges charge.charges += chems_to_transfer - input_item.reagents.remove_reagent(rtype, chems_to_transfer) + input_item.remove_from_reagents(rtype, chems_to_transfer) total_transferred += chems_to_transfer break @@ -266,7 +266,7 @@ if(target_mob != H) to_chat(H, "You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name].") to_chat(target_mob, "You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.") - target_mob.reagents.add_reagent(charge.product_type, chems_to_use) + target_mob.add_to_reagents(charge.product_type, chems_to_use) charge.charges -= chems_to_use if(charge.charges < 0) charge.charges = 0 @@ -383,7 +383,7 @@ interface_name = "maneuvering jets" interface_desc = "An inbuilt EVA maneuvering system that runs off a seperate gas supply." - origin_tech = "{'materials':6,'engineering':7}" + origin_tech = @'{"materials":6,"engineering":7}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, @@ -523,7 +523,7 @@ icon_state = "ewar" interface_name = "mounted matter decompiler" interface_desc = "Eats trash like no one's business." - origin_tech = "{'materials':5,'engineering':5}" + origin_tech = @'{"materials":5,"engineering":5}' device = /obj/item/matter_decompiler material = /decl/material/solid/metal/steel matter = list( @@ -534,7 +534,7 @@ /obj/item/rig_module/cooling_unit name = "mounted cooling unit" toggleable = 1 - origin_tech = "{'magnets':2,'materials':2,'engineering':5}" + origin_tech = @'{"magnets":2,"materials":2,"engineering":5}' interface_name = "mounted cooling unit" interface_desc = "A heat sink with a liquid cooled radiator." module_cooldown = 0 SECONDS //no cd because its critical for a life-support module diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm index 6728356e8bf..3b19bf49653 100644 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm @@ -91,7 +91,7 @@ name = "hardsuit meson scanner" desc = "A layered, translucent visor system for a hardsuit." icon_state = "meson" - origin_tech = "{'magnets':2,'engineering':5}" + origin_tech = @'{"magnets":2,"engineering":5}' usable = 0 interface_name = "meson scanner" @@ -117,7 +117,7 @@ name = "hardsuit night vision interface" desc = "A multi input night vision system for a hardsuit." icon_state = "night" - origin_tech = "{'magnets':6,'engineering':6}" + origin_tech = @'{"magnets":6,"engineering":6}' usable = 0 interface_name = "night vision interface" @@ -136,7 +136,7 @@ name = "hardsuit security hud" desc = "A simple tactical information system for a hardsuit." icon_state = "securityhud" - origin_tech = "{'magnets':3,'biotech':2,'engineering':5}" + origin_tech = @'{"magnets":3,"biotech":2,"engineering":5}' usable = 0 interface_name = "security HUD" @@ -149,7 +149,7 @@ name = "hardsuit medical hud" desc = "A simple medical status indicator for a hardsuit." icon_state = "healthhud" - origin_tech = "{'magnets':3,'biotech':2,'engineering':5}" + origin_tech = @'{"magnets":3,"biotech":2,"engineering":5}' usable = 0 interface_name = "medical HUD" diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index f752dd8294f..f842ec06611 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -200,7 +200,7 @@ LAZYSET(chest.slowdown_per_slot, slot_wear_suit_str, (active? online_slowdown : offline_slowdown)) if(helmet) helmet.tint = (active? vision_restriction : offline_vision_restriction) - helmet.update_vision() + helmet.update_wearer_vision() /obj/item/rig/proc/suit_is_deployed() if(!istype(wearer) || src.loc != wearer || wearer.get_equipped_item(slot_back_str) != src) @@ -579,7 +579,7 @@ for(var/slot in update_rig_slots) wearer.update_equipment_overlay(slot) -/obj/item/rig/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/rig/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && slot == slot_back_str && !offline && equipment_overlay_icon && LAZYLEN(installed_modules)) for(var/obj/item/rig_module/module in installed_modules) if(module.suit_overlay) diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index c90476de578..3f325318548 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -29,7 +29,7 @@ if(user?.check_rig_status() && check_state_in_icon("[icon_state]-sealed", icon)) icon_state = "[icon_state]-sealed" -/obj/item/clothing/head/helmet/space/rig/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/helmet/space/rig/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && user_mob?.check_rig_status() && check_state_in_icon("[overlay.icon_state]-sealed", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-sealed" . = ..() @@ -49,7 +49,7 @@ if(user?.check_rig_status() && check_state_in_icon("[icon_state]-sealed", icon)) icon_state = "[icon_state]-sealed" -/obj/item/clothing/gloves/rig/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/gloves/rig/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && user_mob?.check_rig_status() && check_state_in_icon("[overlay.icon_state]-sealed", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-sealed" . = ..() @@ -69,7 +69,7 @@ if(user?.check_rig_status() && check_state_in_icon("[icon_state]-sealed", icon)) icon_state = "[icon_state]-sealed" -/obj/item/clothing/shoes/magboots/rig/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/shoes/magboots/rig/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && user_mob?.check_rig_status() && check_state_in_icon("[overlay.icon_state]-sealed", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-sealed" . = ..() @@ -77,9 +77,9 @@ /obj/item/clothing/suit/space/rig name = "chestpiece" allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit) - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS - cold_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL + cold_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL // HIDEJUMPSUIT no longer needed, see "hides_uniform" and "update_component_sealed()" in rig.dm flags_inv = HIDETAIL item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT @@ -95,7 +95,7 @@ if(user?.check_rig_status() && check_state_in_icon("[icon_state]-sealed", icon)) icon_state = "[icon_state]-sealed" -/obj/item/clothing/suit/space/rig/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/space/rig/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && user_mob?.check_rig_status() && check_state_in_icon("[overlay.icon_state]-sealed", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-sealed" . = ..() @@ -173,9 +173,9 @@ name = "suit" icon = 'icons/clothing/rigs/chests/chest_light.dmi' allowed = list(/obj/item/flashlight) - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS - cold_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL + cold_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_TAIL flags_inv = HIDEJUMPSUIT item_flags = ITEM_FLAG_THICKMATERIAL diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 23c2abd6baa..a21fb598d8b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -47,7 +47,6 @@ gloves = /obj/item/clothing/gloves/rig/combat /obj/item/clothing/head/helmet/space/rig/combat - light_overlay = "helmet_light_dual_green" icon = 'icons/clothing/rigs/helmets/helmet_security.dmi' /obj/item/clothing/suit/space/rig/combat icon = 'icons/clothing/rigs/chests/chest_security.dmi' @@ -120,7 +119,6 @@ gloves = /obj/item/clothing/gloves/rig/military /obj/item/clothing/head/helmet/space/rig/military - light_overlay = "helmet_light_dual_green" icon = 'icons/clothing/rigs/helmets/helmet_military.dmi' /obj/item/clothing/suit/space/rig/military icon = 'icons/clothing/rigs/chests/chest_military.dmi' diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 6a0c955ac50..06c837cbe4a 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -37,7 +37,6 @@ item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS icon = 'icons/clothing/rigs/gloves/gloves_merc.dmi' /obj/item/clothing/head/helmet/space/rig/merc - light_overlay = "helmet_light_dual_green" camera = /obj/machinery/camera/network/mercenary icon = 'icons/clothing/rigs/helmets/helmet_merc.dmi' /obj/item/clothing/shoes/rig/merc diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 77582a59243..18722034cd4 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -59,7 +59,16 @@ boots = /obj/item/clothing/shoes/magboots/rig/industrial gloves = /obj/item/clothing/gloves/rig/industrial - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd) + allowed = list( + /obj/item/flashlight, + /obj/item/tank, + /obj/item/suit_cooling_unit, + /obj/item/stack/flag, + /obj/item/storage/ore, + /obj/item/t_scanner, + /obj/item/tool, + /obj/item/rcd + ) /obj/item/clothing/head/helmet/space/rig/industrial camera = /obj/machinery/camera/network/mining @@ -110,7 +119,6 @@ req_access = list(access_engine_equip) /obj/item/clothing/head/helmet/space/rig/eva - light_overlay = "helmet_light_dual" camera = /obj/machinery/camera/network/engineering icon = 'icons/clothing/rigs/helmets/helmet_eva.dmi' /obj/item/clothing/suit/space/rig/eva @@ -152,7 +160,19 @@ helmet = /obj/item/clothing/head/helmet/space/rig/ce gloves = /obj/item/clothing/gloves/rig/ce - allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/ore,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/inflatable_dispenser,/obj/item/t_scanner,/obj/item/pickaxe,/obj/item/rcd) + allowed = list( + /obj/item/gun, + /obj/item/flashlight, + /obj/item/tank, + /obj/item/suit_cooling_unit, + /obj/item/storage/ore, + /obj/item/storage/toolbox, + /obj/item/storage/briefcase/inflatable, + /obj/item/inflatable_dispenser, + /obj/item/t_scanner, + /obj/item/tool, + /obj/item/rcd + ) req_access = list(access_ce) max_pressure_protection = FIRESUIT_MAX_PRESSURE @@ -206,13 +226,29 @@ boots = /obj/item/clothing/shoes/magboots/rig/hazmat gloves = /obj/item/clothing/gloves/rig/hazmat - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/excavation,/obj/item/pickaxe,/obj/item/scanner/health,/obj/item/scanner/breath,/obj/item/measuring_tape,/obj/item/ano_scanner,/obj/item/depth_scanner,/obj/item/core_sampler,/obj/item/gps,/obj/item/pinpointer/radio,/obj/item/radio/beacon,/obj/item/pickaxe/xeno,/obj/item/storage/bag/fossils) + allowed = list( + /obj/item/flashlight, + /obj/item/tank, + /obj/item/suit_cooling_unit, + /obj/item/stack/flag, + /obj/item/storage/excavation, + /obj/item/tool, + /obj/item/scanner/health, + /obj/item/scanner/breath, + /obj/item/measuring_tape, + /obj/item/ano_scanner, + /obj/item/depth_scanner, + /obj/item/core_sampler, + /obj/item/gps, + /obj/item/pinpointer/radio, + /obj/item/radio/beacon, + /obj/item/storage/bag/fossils + ) anomaly_shielding = 1 req_access = list(access_tox) /obj/item/clothing/head/helmet/space/rig/hazmat - light_overlay = "helmet_light_dual" camera = /obj/machinery/camera/network/research icon = 'icons/clothing/rigs/helmets/helmet_science.dmi' /obj/item/clothing/suit/space/rig/hazmat @@ -303,7 +339,6 @@ anomaly_shielding = 1 /obj/item/clothing/head/helmet/space/rig/hazard - light_overlay = "helmet_light_dual" camera = /obj/machinery/camera/network/security icon = 'icons/clothing/rigs/helmets/helmet_hazard.dmi' /obj/item/clothing/suit/space/rig/hazard @@ -354,11 +389,10 @@ /obj/item/clothing/head/helmet/space/rig/zero camera = null - light_overlay = "helm_light" desc = "A bubble helmet that maximizes the field of view. A state of the art holographic display provides a stream of information" icon = 'icons/clothing/rigs/helmets/helmet_null.dmi' /obj/item/clothing/suit/space/rig/zero breach_threshold = 18 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL icon = 'icons/clothing/rigs/chests/chest_null.dmi' diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 5b748deed1f..fa008a113e7 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -23,14 +23,13 @@ randpixel = 0 flash_protection = FLASH_PROTECTION_MAJOR action_button_name = "Toggle Helmet Light" - light_overlay = "helmet_light" brightness_on = 4 light_wedge = LIGHT_WIDE on = 0 var/obj/machinery/camera/camera var/tinted = null //Set to non-null for toggleable tint helmets - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel /obj/item/clothing/head/helmet/space/Destroy() @@ -98,20 +97,20 @@ to_chat(usr, "You toggle [src]'s visor tint.") update_tint() -/obj/item/clothing/head/helmet/space/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/head/helmet/space/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && tint && check_state_in_icon("[overlay.icon_state]_dark", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_dark" . = ..() /obj/item/clothing/head/helmet/space/on_update_icon(mob/user) . = ..() - var/base_icon = get_world_inventory_state() - if(!base_icon) - base_icon = initial(icon_state) - if(tint && check_state_in_icon("[base_icon]_dark", icon)) - icon_state = "[base_icon]_dark" + var/base_icon_state = get_world_inventory_state() + if(!base_icon_state) + base_icon_state = initial(icon_state) + if(tint && check_state_in_icon("[base_icon_state]_dark", icon)) + icon_state = "[base_icon_state]_dark" else - icon_state = base_icon + icon_state = base_icon_state /obj/item/clothing/suit/space name = "space suit" @@ -121,14 +120,14 @@ gas_transfer_coefficient = 0 permeability_coefficient = 0 item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL allowed = list(/obj/item/flashlight,/obj/item/tank/emergency,/obj/item/suit_cooling_unit) armor = list( ARMOR_BIO = ARMOR_BIO_SHIELDED, ARMOR_RAD = ARMOR_RAD_SMALL ) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - cold_protection = SLOT_UPPER_BODY | SLOT_LOWER_BODY | SLOT_LEGS | SLOT_FEET | SLOT_ARMS | SLOT_HANDS + cold_protection = SLOT_UPPER_BODY | SLOT_LOWER_BODY | SLOT_LEGS | SLOT_FEET | SLOT_ARMS | SLOT_HANDS | SLOT_TAIL min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE min_pressure_protection = 0 max_pressure_protection = SPACE_SUIT_MAX_PRESSURE @@ -136,7 +135,7 @@ center_of_mass = null randpixel = 0 valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_OVER) - origin_tech = "{'materials':3, 'engineering':3}" + origin_tech = @'{"materials":3, "engineering":3}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/clothing/spacesuits/void/misc.dm b/code/modules/clothing/spacesuits/void/misc.dm index cf0a7c2031f..273b6f81185 100644 --- a/code/modules/clothing/spacesuits/void/misc.dm +++ b/code/modules/clothing/spacesuits/void/misc.dm @@ -3,7 +3,7 @@ name = "\improper SWAT suit" desc = "A heavily armored suit that protects against moderate damage. Used in special operations." icon = 'icons/clothing/spacesuit/void/deathsquad/suit.dmi' - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_TAIL allowed = list(/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/baton,/obj/item/handcuffs,/obj/item/tank) armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index 576458343a5..5e0a3eea0ad 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -68,7 +68,16 @@ ARMOR_RAD = ARMOR_RAD_MINOR ) max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/stack/flag,/obj/item/suit_cooling_unit,/obj/item/storage/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd) + allowed = list( + /obj/item/flashlight, + /obj/item/tank, + /obj/item/stack/flag, + /obj/item/suit_cooling_unit, + /obj/item/storage/ore, + /obj/item/t_scanner, + /obj/item/tool, + /obj/item/rcd + ) /obj/item/clothing/suit/space/void/mining/prepared helmet = /obj/item/clothing/head/helmet/space/void/mining diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 919f3be047b..5eef26e5041 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -35,7 +35,7 @@ ARMOR_RAD = ARMOR_RAD_MINOR ) allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit) - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE max_pressure_protection = VOIDSUIT_MAX_PRESSURE siemens_coefficient = 0.4 @@ -54,6 +54,10 @@ var/helmet_deploy_sound = 'sound/items/helmet_close.ogg' var/helmet_retract_sound = 'sound/items/helmet_open.ogg' +SAVED_VAR(/obj/item/clothing/suit/space/void, boots) +SAVED_VAR(/obj/item/clothing/suit/space/void, helmet) +SAVED_VAR(/obj/item/clothing/suit/space/void, tank) + #define VOIDSUIT_INIT_EQUIPMENT(equipment_var, expected_path) \ if(ispath(##equipment_var, ##expected_path )){\ ##equipment_var = new equipment_var (src);\ @@ -285,7 +289,7 @@ else if(##equipment_var) {\ /obj/item/clothing/suit/space/void/attack_self() //sole purpose of existence is to toggle the helmet toggle_helmet() -/obj/item/clothing/suit/space/void/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/space/void/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && tank && slot == slot_back_str) overlay.overlays += tank.get_mob_overlay(user_mob, slot_back_str) . = ..() diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm index 614aec8086d..48dfc6d852a 100644 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ b/code/modules/clothing/spacesuits/void/wizard.dm @@ -34,8 +34,8 @@ siemens_coefficient = 0.7 wizard_garb = 1 flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETAIL //For gloves. - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS - cold_protection = SLOT_UPPER_BODY | SLOT_LOWER_BODY | SLOT_LEGS | SLOT_FEET | SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY | SLOT_LOWER_BODY | SLOT_LEGS | SLOT_FEET | SLOT_ARMS | SLOT_TAIL + cold_protection = SLOT_UPPER_BODY | SLOT_LOWER_BODY | SLOT_LEGS | SLOT_FEET | SLOT_ARMS | SLOT_TAIL /obj/item/clothing/suit/space/void/wizard/Initialize() . = ..() diff --git a/code/modules/clothing/suits/_suit.dm b/code/modules/clothing/suits/_suit.dm index 58e9f58a648..99ed1ab1a02 100644 --- a/code/modules/clothing/suits/_suit.dm +++ b/code/modules/clothing/suits/_suit.dm @@ -19,7 +19,7 @@ /obj/item/clothing/suit/preserve_in_cryopod(var/obj/machinery/cryopod/pod) return TRUE -/obj/item/clothing/suit/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && item_state) overlay.icon_state = item_state . = ..() diff --git a/code/modules/clothing/suits/armor/_armor.dm b/code/modules/clothing/suits/armor/_armor.dm index 1369417acf4..eb04ea7d330 100644 --- a/code/modules/clothing/suits/armor/_armor.dm +++ b/code/modules/clothing/suits/armor/_armor.dm @@ -9,4 +9,4 @@ max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.6 blood_overlay_type = "armor" - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' diff --git a/code/modules/clothing/suits/armor/bulletproof.dm b/code/modules/clothing/suits/armor/bulletproof.dm index 198bb143bfd..8c217d5b4f4 100644 --- a/code/modules/clothing/suits/armor/bulletproof.dm +++ b/code/modules/clothing/suits/armor/bulletproof.dm @@ -19,7 +19,7 @@ /decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':3,'engineering':1,'combat':3}" + origin_tech = @'{"materials":3,"engineering":1,"combat":3}' // no accessory /obj/item/clothing/suit/armor/bulletproof/prepared @@ -43,7 +43,7 @@ /decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':3,'engineering':1,'combat':3}" + origin_tech = @'{"materials":3,"engineering":1,"combat":3}' /obj/item/clothing/accessory/legguards/ballistic name = "ballistic leg guards" @@ -64,4 +64,4 @@ /decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':3,'engineering':1,'combat':3}" \ No newline at end of file + origin_tech = @'{"materials":3,"engineering":1,"combat":3}' \ No newline at end of file diff --git a/code/modules/clothing/suits/armor/merc.dm b/code/modules/clothing/suits/armor/merc.dm index 3ee072f2d06..c81931f77f1 100644 --- a/code/modules/clothing/suits/armor/merc.dm +++ b/code/modules/clothing/suits/armor/merc.dm @@ -15,7 +15,7 @@ ) material = /decl/material/solid/metal/titanium matter = list(/decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'materials':5,'engineering':2,'combat':3}" + origin_tech = @'{"materials":5,"engineering":2,"combat":3}' /obj/item/clothing/accessory/armguards/merc name = "heavy arm guards" @@ -30,7 +30,7 @@ ) color = null material = /decl/material/solid/metal/steel - origin_tech = "{'materials':2,'engineering':1,'combat':2}" + origin_tech = @'{"materials":2,"engineering":1,"combat":2}' /obj/item/clothing/accessory/legguards/merc name = "heavy leg guards" @@ -45,4 +45,4 @@ ARMOR_BOMB = ARMOR_BOMB_PADDED ) material = /decl/material/solid/metal/steel - origin_tech = "{'materials':2,'engineering':1,'combat':2}" + origin_tech = @'{"materials":2,"engineering":1,"combat":2}' diff --git a/code/modules/clothing/suits/armor/reactive.dm b/code/modules/clothing/suits/armor/reactive.dm index e57aacf502c..8c3a5cae75e 100644 --- a/code/modules/clothing/suits/armor/reactive.dm +++ b/code/modules/clothing/suits/armor/reactive.dm @@ -48,7 +48,7 @@ . = ..() icon_state = "[get_world_inventory_state()][active ? "_on" : ""]" -/obj/item/clothing/suit/armor/reactive/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/armor/reactive/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && active && check_state_in_icon("[overlay.icon_state]_on", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_on" . = ..() diff --git a/code/modules/clothing/suits/armor/riot.dm b/code/modules/clothing/suits/armor/riot.dm index 878ffe7d971..378f70efd61 100644 --- a/code/modules/clothing/suits/armor/riot.dm +++ b/code/modules/clothing/suits/armor/riot.dm @@ -18,7 +18,7 @@ matter = list( /decl/material/solid/organic/cloth = MATTER_AMOUNT_SECONDARY ) - origin_tech = "{'materials':1,'engineering':1,'combat':2}" + origin_tech = @'{"materials":1,"engineering":1,"combat":2}' /obj/item/clothing/suit/armor/riot/prepared starting_accessories = list(/obj/item/clothing/accessory/armguards/riot, /obj/item/clothing/accessory/legguards/riot) @@ -41,7 +41,7 @@ slowdown = 1 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/organic/cloth = MATTER_AMOUNT_SECONDARY) - origin_tech = "{'materials':1,'engineering':1,'combat':2}" + origin_tech = @'{"materials":1,"engineering":1,"combat":2}' /obj/item/clothing/accessory/armguards/riot name = "riot arm guards" @@ -58,5 +58,5 @@ siemens_coefficient = 0.5 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/organic/cloth = MATTER_AMOUNT_SECONDARY) - origin_tech = "{'materials':1,'engineering':1,'combat':2}" + origin_tech = @'{"materials":1,"engineering":1,"combat":2}' diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index dd98a64a70e..0a181a128e2 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -12,7 +12,7 @@ item_flags = ITEM_FLAG_THICKMATERIAL body_parts_covered = SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_EARS siemens_coefficient = 0.9 - origin_tech = "{'materials':3, 'engineering':3}" + origin_tech = @'{"materials":3, "engineering":3}' matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT @@ -25,7 +25,7 @@ w_class = ITEM_SIZE_HUGE//bulky item gas_transfer_coefficient = 0 permeability_coefficient = 0 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL allowed = list(/obj/item/tank/emergency,/obj/item/pen,/obj/item/flashlight/pen,/obj/item/scanner/health,/obj/item/scanner/breath,/obj/item/ano_scanner,/obj/item/clothing/head/bio_hood,/obj/item/clothing/mask/gas) armor = list( ARMOR_BIO = ARMOR_BIO_SHIELDED, @@ -34,7 +34,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL item_flags = ITEM_FLAG_THICKMATERIAL siemens_coefficient = 0.9 - origin_tech = "{'materials':3, 'engineering':3}" + origin_tech = @'{"materials":3, "engineering":3}' matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT @@ -89,7 +89,7 @@ desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against space plague." icon = 'icons/clothing/suit/biosuit/plague.dmi' flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL - origin_tech = "{'materials':1,'engineering':1,'biotech':1}" + origin_tech = @'{"materials":1,"engineering":1,"biotech":1}' matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 394b41d4ddd..6d8dbb01420 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -69,7 +69,7 @@ valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) blood_overlay_type = "coat" body_parts_covered = SLOT_UPPER_BODY|SLOT_ARMS - allowed = list(/obj/item/tank/emergency,/obj/item/flashlight,/obj/item/gun/energy,/obj/item/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/baton,/obj/item/handcuffs,/obj/item/storage/fancy/cigarettes,/obj/item/flame/lighter,/obj/item/taperecorder) + allowed = list(/obj/item/tank/emergency,/obj/item/flashlight,/obj/item/gun/energy,/obj/item/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/baton,/obj/item/handcuffs,/obj/item/storage/box/fancy/cigarettes,/obj/item/flame/lighter,/obj/item/taperecorder) protects_against_weather = TRUE /obj/item/clothing/suit/storage/det_trench/grey @@ -85,7 +85,7 @@ ARMOR_LASER = ARMOR_LASER_SMALL, ARMOR_ENERGY = ARMOR_ENERGY_MINOR ) - origin_tech = "{'materials':2, 'engineering':2}" + origin_tech = @'{"materials":2, "engineering":2}' matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) //Forensics @@ -101,7 +101,7 @@ ARMOR_LASER = ARMOR_LASER_MINOR, ARMOR_ENERGY = ARMOR_ENERGY_MINOR ) - origin_tech = "{'materials':2, 'engineering':2}" + origin_tech = @'{"materials":2, "engineering":2}' matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT) /obj/item/clothing/suit/storage/forensics/red diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 7ed9c634d74..a5527976a9d 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -26,7 +26,7 @@ restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND) markings_icon = "_marking" matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE) - origin_tech = "{'materials':1,'engineering':1,'biotech':1}" + origin_tech = @'{"materials":1,"engineering":1,"biotech":1}' /obj/item/clothing/suit/storage/toggle/labcoat/cmo name = "chief medical officer's labcoat" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 427695b8c85..102de130332 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -47,7 +47,7 @@ desc = "This robe commands authority." icon = 'icons/clothing/suit/judge.dmi' body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS - allowed = list(/obj/item/storage/fancy/cigarettes,/obj/item/cash) + allowed = list(/obj/item/storage/box/fancy/cigarettes,/obj/item/cash) flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/apron/overalls @@ -63,7 +63,7 @@ w_class = ITEM_SIZE_NORMAL allowed = list(/obj/item/flashlight,/obj/item/tank/emergency,/obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_ARMS|SLOT_HANDS|SLOT_LEGS|SLOT_FEET + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_ARMS|SLOT_HANDS|SLOT_LEGS|SLOT_FEET|SLOT_TAIL /obj/item/clothing/suit/hastur name = "Hastur's Robes" @@ -121,7 +121,7 @@ name = "straitjacket" desc = "A suit that completely restrains the wearer." icon = 'icons/clothing/suit/straightjacket.dmi' - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE) @@ -158,7 +158,7 @@ shine = material.reflectiveness desc = "A long, thick [material.use_name] coat." -/obj/item/clothing/suit/leathercoat/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/leathercoat/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && shine > 0 && slot == slot_wear_suit_str) var/mutable_appearance/S = mutable_appearance(overlay.icon, "shine") S.alpha = max(shine, artificial_shine)/100 * 255 diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 2a23761a6fd..bf3988cca0b 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -2,6 +2,9 @@ var/obj/item/storage/internal/pockets/pockets var/slots = 2 +SAVED_VAR(/obj/item/clothing/suit/storage, pockets) +SAVED_VAR(/obj/item/clothing/suit/storage, slots) + /obj/item/clothing/suit/storage/Initialize() . = ..() pockets = new/obj/item/storage/internal/pockets(src, slots, ITEM_SIZE_SMALL) //fit only pocket sized items @@ -15,7 +18,7 @@ return ..(user) return TRUE -/obj/item/clothing/suit/storage/handle_mouse_drop(atom/over, mob/user) +/obj/item/clothing/suit/storage/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/screen/inventory)) return ..() return pockets?.handle_storage_internal_mouse_drop(user, over) && ..() diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 255ce885048..3820e8bd95e 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -59,7 +59,7 @@ else icon_state = get_world_inventory_state() -/obj/item/clothing/suit/storage/toggle/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/suit/storage/toggle/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(buttons && overlay && check_state_in_icon("[overlay.icon_state]_open", overlay.icon)) overlay.icon_state = "[overlay.icon_state]_open" . = ..() @@ -130,7 +130,7 @@ ARMOR_BIO = ARMOR_BIO_MINOR ) hood = /obj/item/clothing/head/winterhood - allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/storage/fancy/cigarettes, /obj/item/storage/box/matches, /obj/item/chems/drinks/flask) + allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/flashlight,/obj/item/storage/box/fancy/cigarettes, /obj/item/storage/box/matches, /obj/item/chems/drinks/flask) siemens_coefficient = 0.6 protects_against_weather = TRUE diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index dc96ba35557..8bb2fae4a79 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -16,7 +16,7 @@ w_class = ITEM_SIZE_LARGE//large item flags_inv = HIDETAIL - body_parts_covered = SLOT_UPPER_BODY | SLOT_LOWER_BODY| SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY | SLOT_LOWER_BODY| SLOT_ARMS | SLOT_TAIL armor = list(ARMOR_LASER = ARMOR_LASER_MINOR, ARMOR_ENERGY = ARMOR_ENERGY_MINOR, ARMOR_BOMB = ARMOR_BOMB_MINOR) allowed = list(/obj/item/flashlight,/obj/item/tank/emergency,/obj/item/chems/spray/extinguisher,/obj/item/clothing/head/hardhat) @@ -31,7 +31,7 @@ matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/suit/fire/Initialize() . = ..() @@ -70,7 +70,7 @@ ARMOR_BOMB = ARMOR_BOMB_SHIELDED ) flags_inv = HIDEJUMPSUIT|HIDETAIL - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_TAIL max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0 @@ -85,7 +85,7 @@ /obj/item/clothing/suit/bomb_suit/security icon = 'icons/clothing/suit/bombsuit_olive.dmi' allowed = list(/obj/item/gun/energy,/obj/item/baton,/obj/item/handcuffs) - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL /* * Radiation protection @@ -105,7 +105,7 @@ /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/suit/radiation name = "radiation suit" @@ -114,7 +114,7 @@ w_class = ITEM_SIZE_HUGE//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HANDS|SLOT_FEET + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS|SLOT_HANDS|SLOT_FEET|SLOT_TAIL allowed = list(/obj/item/flashlight,/obj/item/tank/emergency,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas,/obj/item/geiger) armor = list( ARMOR_BIO = ARMOR_BIO_RESISTANT, @@ -125,7 +125,7 @@ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/suit/radiation/Initialize() . = ..() @@ -152,7 +152,7 @@ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' /obj/item/clothing/suit/chem_suit name = "chemical suit" @@ -161,7 +161,7 @@ w_class = ITEM_SIZE_HUGE//bulky item gas_transfer_coefficient = 0 permeability_coefficient = 0 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL allowed = list(/obj/item/tank/emergency,/obj/item/pen,/obj/item/flashlight/pen,/obj/item/scanner/health,/obj/item/scanner/breath,/obj/item/ano_scanner,/obj/item/clothing/head/chem_hood,/obj/item/clothing/mask/gas,/obj/item/geiger) armor = list( ARMOR_BIO = ARMOR_BIO_RESISTANT, @@ -174,4 +174,4 @@ /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':2,'engineering':2}" + origin_tech = @'{"materials":2,"engineering":2}' diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 35f3bf665a0..437c5468fd8 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -9,6 +9,7 @@ force = 0 valid_accessory_slots = list( + ACCESSORY_SLOT_SENSORS, ACCESSORY_SLOT_UTILITY, ACCESSORY_SLOT_HOLSTER, ACCESSORY_SLOT_ARMBAND, @@ -29,21 +30,22 @@ ACCESSORY_SLOT_OVER ) - var/has_sensor = SUIT_HAS_SENSORS - var/sensor_mode = SUIT_SENSOR_OFF var/displays_id = 1 var/rolled_down = FALSE var/rolled_sleeves = FALSE +SAVED_VAR(/obj/item/clothing/under, displays_id) +SAVED_VAR(/obj/item/clothing/under, rolled_down) +SAVED_VAR(/obj/item/clothing/under, rolled_sleeves) + /obj/item/clothing/under/Initialize() - sensor_mode = pick(0,1,2,3) . = ..() if(check_state_in_icon("[BODYTYPE_HUMANOID]-[slot_w_uniform_str]-rolled", icon)) verbs |= /obj/item/clothing/under/proc/roll_down_clothes if(check_state_in_icon("[BODYTYPE_HUMANOID]-[slot_w_uniform_str]-sleeves", icon)) verbs |= /obj/item/clothing/under/proc/roll_up_sleeves -/obj/item/clothing/under/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/under/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && slot == slot_w_uniform_str) if(rolled_down && check_state_in_icon("[overlay.icon_state]-rolled", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-rolled" @@ -88,93 +90,6 @@ var/static/list/under_slots = list(slot_w_uniform_str, slot_wear_id_str) LAZYDISTINCTADD(., under_slots) -/obj/item/clothing/under/examine(mob/user) - . = ..() - switch(src.sensor_mode) - if(0) - to_chat(user, "Its sensors appear to be disabled.") - if(1) - to_chat(user, "Its binary life sensors appear to be enabled.") - if(2) - to_chat(user, "Its vital tracker appears to be enabled.") - if(3) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") - -/obj/item/clothing/under/proc/set_sensors(mob/user) - var/mob/M = user - if (isobserver(M)) return - if (user.incapacitated()) return - if(has_sensor >= SUIT_LOCKED_SENSORS) - to_chat(user, "The controls are locked.") - return 0 - if(has_sensor <= SUIT_NO_SENSORS) - to_chat(user, "This suit does not have any sensors.") - return 0 - - var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon") - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(get_dist(user, src) > 1) - to_chat(user, "You have moved too far away.") - return - sensor_mode = modes.Find(switchMode) - 1 - - if (src.loc == user) - var/user_message - switch(sensor_mode) - if(0) - user_message = "You disable your suit's remote sensing equipment." - if(1) - user_message = "Your suit will now report whether you are live or dead." - if(2) - user_message = "Your suit will now report your vital lifesigns." - if(3) - user_message = "Your suit will now report your vital lifesigns as well as your coordinate position." - - if(user_message) - var/decl/pronouns/G = user.get_pronouns() - user.visible_message( \ - SPAN_NOTICE("\The [user] adjusts the tracking sensor on [G.his] [name]."), \ - SPAN_NOTICE(user_message)) - - else if (ismob(src.loc)) - if(sensor_mode == 0) - user.visible_message("[user] disables [src.loc]'s remote sensing equipment.", "You disable [src.loc]'s remote sensing equipment.") - else - user.visible_message("[user] adjusts the tracking sensor on [src.loc]'s [src.name].", "You adjust [src.loc]'s sensors.") - else - user.visible_message("[user] adjusts the tracking sensor on [src]", "You adjust the sensor on [src].") - -/obj/item/clothing/under/emp_act(var/severity) - ..() - var/new_mode - switch(severity) - if(1) - new_mode = pick(75;SUIT_SENSOR_OFF, 15;SUIT_SENSOR_BINARY, 10;SUIT_SENSOR_VITAL) - if(2) - new_mode = pick(50;SUIT_SENSOR_OFF, 25;SUIT_SENSOR_BINARY, 20;SUIT_SENSOR_VITAL, 5;SUIT_SENSOR_TRACKING) - else - new_mode = pick(25;SUIT_SENSOR_OFF, 35;SUIT_SENSOR_BINARY, 30;SUIT_SENSOR_VITAL, 10;SUIT_SENSOR_TRACKING) - - sensor_mode = new_mode - -/obj/item/clothing/under/verb/toggle() - set name = "Toggle Suit Sensors" - set category = "Object" - set src in usr - set_sensors(usr) - -/decl/interaction_handler/clothing_set_sensors - name = "Set Sensors Level" - expected_target_type = /obj/item/clothing/under - -/decl/interaction_handler/clothing_set_sensors/invoked(var/atom/target, var/mob/user) - var/obj/item/clothing/under/U = target - U.set_sensors(user) - -/obj/item/clothing/under/get_alt_interactions(var/mob/user) - . = ..() - LAZYADD(., /decl/interaction_handler/clothing_set_sensors) - // This stub is so the linter stops yelling about sleeping during Initialize() // due to corpse props equipping themselves, which calls equip_to_slot, which // calls attackby(), which sometimes sleeps due to input(). Yeah. diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index bea89057513..5d3becfdf66 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -61,7 +61,7 @@ if(uniform.rolled_sleeves && hide_on_uniform_rollsleeves) return FALSE -/obj/item/clothing/accessory/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && istype(loc, /obj/item/clothing/under)) var/new_state = overlay.icon_state var/obj/item/clothing/under/uniform = loc diff --git a/code/modules/clothing/under/accessories/accessory_toggleable.dm b/code/modules/clothing/under/accessories/accessory_toggleable.dm index 0720696be1d..56d6a31f1ac 100644 --- a/code/modules/clothing/under/accessories/accessory_toggleable.dm +++ b/code/modules/clothing/under/accessories/accessory_toggleable.dm @@ -5,7 +5,7 @@ icon_state = ICON_STATE_WORLD var/open = FALSE -/obj/item/clothing/accessory/toggleable/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/toggleable/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && open && check_state_in_icon("[overlay.icon_state]-open", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-open" . = ..() @@ -155,7 +155,7 @@ icon_state = "[icon_state]-tucked" update_clothing_icon() -/obj/item/clothing/accessory/toggleable/flannel/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/toggleable/flannel/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) if(rolled && check_state_in_icon("[overlay.icon_state]-rolled", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-rolled" diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index 7adb7b15558..5960722be72 100644 --- a/code/modules/clothing/under/accessories/armor.dm +++ b/code/modules/clothing/under/accessories/armor.dm @@ -37,7 +37,7 @@ matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY ) - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' /obj/item/clothing/accessory/armor/plate/get_fibers() return null //plates do not shed @@ -56,7 +56,7 @@ matter = list( /decl/material/solid/metal/plasteel = MATTER_AMOUNT_SECONDARY ) - origin_tech = "{'materials':2,'engineering':1,'combat':2}" + origin_tech = @'{"materials":2,"engineering":1,"combat":2}' /obj/item/clothing/accessory/armor/plate/tactical name = "tactical armor plate" @@ -75,7 +75,7 @@ /decl/material/solid/metal/titanium = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'materials':3,'engineering':2,'combat':2}" + origin_tech = @'{"materials":3,"engineering":2,"combat":2}' //Arm guards /obj/item/clothing/accessory/armguards @@ -98,7 +98,7 @@ matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY ) - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' /obj/item/clothing/accessory/armguards/craftable material_armor_multiplier = 1 @@ -126,7 +126,7 @@ matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY ) - origin_tech = "{'materials':1,'engineering':1,'combat':1}" + origin_tech = @'{"materials":1,"engineering":1,"combat":1}' /obj/item/clothing/accessory/legguards/craftable material_armor_multiplier = 1 diff --git a/code/modules/clothing/under/accessories/cloaks.dm b/code/modules/clothing/under/accessories/cloaks.dm index 5588cac0dee..390f2eba438 100644 --- a/code/modules/clothing/under/accessories/cloaks.dm +++ b/code/modules/clothing/under/accessories/cloaks.dm @@ -25,7 +25,7 @@ // Cloaks should layer over and under everything, so set the layer directly rather // than relying on overlay order. This also overlays over inhands but it looks ok. -/obj/item/clothing/accessory/cloak/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/cloak/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(slot == slot_wear_suit_str || slot == slot_tie_str || slot == slot_w_uniform_str) diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm index 0fa9fbee52c..d335ba0e92d 100644 --- a/code/modules/clothing/under/accessories/clothing.dm +++ b/code/modules/clothing/under/accessories/clothing.dm @@ -16,7 +16,7 @@ ARMOR_ENERGY = ARMOR_ENERGY_MINOR ) body_parts_covered = SLOT_UPPER_BODY - origin_tech = "{'combat':2,'materials':3,'esoteric':2}" + origin_tech = @'{"combat":2,"materials":3,"esoteric":2}' /obj/item/clothing/accessory/suspenders name = "suspenders" @@ -95,7 +95,7 @@ if(sleeves_rolled && check_state_in_icon("[icon_state]-sleeves", icon)) icon_state = "[icon_state]-sleeves" -/obj/item/clothing/accessory/tangzhuang/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/tangzhuang/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && sleeves_rolled && check_state_in_icon("[overlay.icon_state]-sleeves", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-sleeves" . = ..() @@ -109,11 +109,11 @@ permeability_coefficient = 0.50 armor = list(ARMOR_LASER = ARMOR_LASER_MINOR, ARMOR_ENERGY = ARMOR_ENERGY_MINOR, ARMOR_BOMB = ARMOR_BOMB_MINOR) - body_parts_covered = SLOT_LOWER_BODY | SLOT_LEGS + body_parts_covered = SLOT_LOWER_BODY | SLOT_LEGS | SLOT_TAIL slowdown = 0.5 - heat_protection = SLOT_LOWER_BODY | SLOT_LEGS - cold_protection = SLOT_LOWER_BODY | SLOT_LEGS + heat_protection = SLOT_LOWER_BODY | SLOT_LEGS | SLOT_TAIL + cold_protection = SLOT_LOWER_BODY | SLOT_LEGS | SLOT_TAIL max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE max_pressure_protection = FIRESUIT_MAX_PRESSURE diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 221f35d7a32..4b08fd752e7 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -31,7 +31,7 @@ return ..(user) return TRUE -/obj/item/clothing/accessory/storage/handle_mouse_drop(atom/over, mob/user) +/obj/item/clothing/accessory/storage/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/screen/inventory)) return ..() if(!istype(loc, /obj/item/clothing) && hold?.handle_storage_internal_mouse_drop(user, over)) @@ -112,8 +112,8 @@ /obj/item/hatchet, /obj/item/knife, ) - new /obj/item/knife/table/primitive(hold) - new /obj/item/knife/table/primitive(hold) + new /obj/item/knife/primitive(hold) + new /obj/item/knife/primitive(hold) update_icon() /obj/item/clothing/accessory/storage/knifeharness/on_update_icon() @@ -123,7 +123,7 @@ if(contents_count > 0 && check_state_in_icon("[icon_state]-[contents_count]", icon)) icon_state = "[icon_state]-[contents_count]" -/obj/item/clothing/accessory/storage/knifeharness/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/storage/knifeharness/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) var/contents_count = min(length(contents), 2) if(contents_count > 0 && check_state_in_icon("[overlay.icon_state]-[contents_count]", overlay.icon)) diff --git a/code/modules/clothing/under/accessories/ties.dm b/code/modules/clothing/under/accessories/ties.dm index 282035a7942..fbff4b81f28 100644 --- a/code/modules/clothing/under/accessories/ties.dm +++ b/code/modules/clothing/under/accessories/ties.dm @@ -75,7 +75,7 @@ tied = !tied update_icon() -/obj/item/clothing/accessory/bowtie/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/clothing/accessory/bowtie/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && !tied && check_state_in_icon("[overlay.icon_state]-untied", overlay.icon)) overlay.icon_state = "[overlay.icon_state]-untied" . = ..() diff --git a/code/modules/clothing/under/accessories/vitals_sensor.dm b/code/modules/clothing/under/accessories/vitals_sensor.dm new file mode 100644 index 00000000000..fd1ba232277 --- /dev/null +++ b/code/modules/clothing/under/accessories/vitals_sensor.dm @@ -0,0 +1,146 @@ +/obj/item/clothing/accessory/vitals_sensor + name = "vitals sensor" + desc = "A small sensor used to read the biometrics and vital signs of the wearer." + slot_flags = SLOT_TIE + icon = 'icons/clothing/accessories/vitals_sensor.dmi' + icon_state = ICON_STATE_WORLD + slot = ACCESSORY_SLOT_SENSORS + var/sensors_locked = FALSE + var/sensor_mode + var/static/list/sensor_modes = list( + "Off", + "Binary sensors", + "Vitals tracker", + "Tracking beacon" + ) + +SAVED_VAR(/obj/item/clothing/accessory/vitals_sensor, sensors_locked) +SAVED_VAR(/obj/item/clothing/accessory/vitals_sensor, sensor_mode) + +/obj/item/clothing/accessory/vitals_sensor/Initialize() + . = ..() + if(isnull(sensor_mode) || sensor_mode < VITALS_SENSOR_OFF || sensor_mode > VITALS_SENSOR_TRACKING) + set_sensor_mode(rand(VITALS_SENSOR_OFF, VITALS_SENSOR_TRACKING)) + update_removable() + +/obj/item/clothing/accessory/vitals_sensor/proc/toggle_sensors_locked() + set_sensors_locked(!get_sensors_locked()) + +/obj/item/clothing/accessory/vitals_sensor/proc/get_sensors_locked() + return sensors_locked + +/obj/item/clothing/accessory/vitals_sensor/proc/set_sensors_locked(new_state) + if(get_sensors_locked() != new_state) + sensors_locked = new_state + update_removable() + +/obj/item/clothing/accessory/vitals_sensor/examine(mob/user) + . = ..() + switch(sensor_mode) + if(VITALS_SENSOR_OFF) + to_chat(user, "It appears to be disabled.") + if(VITALS_SENSOR_BINARY) + to_chat(user, "Its binary life tracker appear to be enabled.") + if(VITALS_SENSOR_VITAL) + to_chat(user, "Its vital tracker appears to be enabled.") + if(VITALS_SENSOR_TRACKING) + to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + +/obj/item/clothing/accessory/vitals_sensor/on_attached(obj/item/clothing/S, mob/user) + . = ..() + update_removable() + +/obj/item/clothing/accessory/vitals_sensor/on_removed(mob/user) + . = ..() + update_removable() + +/obj/item/clothing/accessory/vitals_sensor/proc/update_removable() + var/obj/item/clothing/clothes = loc + if(istype(clothes) && (src in clothes.accessories)) + removable = !sensors_locked + else + removable = TRUE + +/obj/item/clothing/accessory/vitals_sensor/proc/set_sensor_mode(var/new_sensor_mode) + if(sensor_mode != new_sensor_mode) + sensor_mode = new_sensor_mode + update_icon() + +/obj/item/clothing/accessory/vitals_sensor/on_update_icon() + . = ..() + cut_overlays() + var/image/I = image(icon, "[icon_state]-indicator") + I.appearance_flags |= RESET_COLOR + switch(sensor_mode) + if(VITALS_SENSOR_OFF) + I.color = COLOR_GRAY15 + if(VITALS_SENSOR_BINARY) + I.color = COLOR_AMBER + if(VITALS_SENSOR_VITAL) + I.color = COLOR_YELLOW + if(VITALS_SENSOR_TRACKING) + I.color = COLOR_LIME + else + I.color = COLOR_RED + add_overlay(I) + +/obj/item/clothing/accessory/vitals_sensor/attack_self(mob/user) + user_set_sensors(user) + return TRUE + +/obj/item/clothing/accessory/vitals_sensor/proc/user_set_sensors(mob/user) + if(sensors_locked) + to_chat(user, "The controls are locked.") + return FALSE + var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", sensor_modes[sensor_mode + 1]) in sensor_modes + if(user.incapacitated()) + return + if(loc != user && loc?.loc != user && !Adjacent(user)) + to_chat(user, "You have moved too far away.") + return + set_sensor_mode(sensor_modes.Find(switchMode) - 1) + var/mob/wearer = (ismob(loc) ? loc : (ismob(loc?.loc) ? loc.loc : null)) + if (wearer == user) // accessory or inhand + var/user_message + switch(sensor_mode) + if(VITALS_SENSOR_OFF) + user_message = "You disable your remote vitals sensor." + if(VITALS_SENSOR_BINARY) + user_message = "Your vitals sensor will now report whether you are live or dead." + if(VITALS_SENSOR_VITAL) + user_message = "Your vitals sensor will now report your vital lifesigns." + if(VITALS_SENSOR_TRACKING) + user_message = "Your vitals sensor will now report your vital lifesigns as well as your coordinate position." + if(user_message) + var/decl/pronouns/G = user.get_pronouns() + user.visible_message( \ + SPAN_NOTICE("\The [user] adjusts [G.his] vitals sensor."), + SPAN_NOTICE(user_message) + ) + return + if(wearer) + if(sensor_mode == 0) + user.visible_message( + SPAN_DANGER("\The [user] disables \the [wearer]'s vitals sensor."), + SPAN_DANGER("You disable \the [wearer]'s vitals sensor.") + ) + else + user.visible_message( + SPAN_NOTICE("\The [user] adjusts \the [wearer]'s vitals sensor."), + SPAN_NOTICE("You adjust \the [wearer]'s vitals sensor.") + ) + return + user.visible_message( + SPAN_NOTICE("\The [user] adjusts \the [src]"), + SPAN_NOTICE("You adjust \the [src].") + ) + +/obj/item/clothing/accessory/vitals_sensor/emp_act(var/severity) + ..() + switch(severity) + if(1) + set_sensor_mode(pick(75;VITALS_SENSOR_OFF, 15;VITALS_SENSOR_BINARY, 10;VITALS_SENSOR_VITAL)) + if(2) + set_sensor_mode(pick(50;VITALS_SENSOR_OFF, 25;VITALS_SENSOR_BINARY, 20;VITALS_SENSOR_VITAL, 5;VITALS_SENSOR_TRACKING)) + else + set_sensor_mode(pick(25;VITALS_SENSOR_OFF, 35;VITALS_SENSOR_BINARY, 30;VITALS_SENSOR_VITAL, 10;VITALS_SENSOR_TRACKING)) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index abedb755a47..d4205a6f449 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -9,8 +9,13 @@ name = "orange jumpsuit" desc = "It's standardised prisoner-wear. Its suit sensor controls are permanently set to the \"Fully On\" position." icon = 'icons/clothing/under/jumpsuits/jumpsuit_prisoner.dmi' - has_sensor = SUIT_LOCKED_SENSORS - sensor_mode = SUIT_SENSOR_TRACKING + +/obj/item/clothing/under/color/orange/Initialize() + . = ..() + var/obj/item/clothing/accessory/vitals_sensor/sensor = new(src) + sensor.set_sensors_locked(TRUE) + sensor.set_sensor_mode(VITALS_SENSOR_TRACKING) + attach_accessory(null, sensor) /obj/item/clothing/under/color/blackjumpshorts name = "black jumpsuit shorts" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 7b04b2ea763..b9476b9f16d 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -141,7 +141,7 @@ siemens_coefficient = 0.8 material = /decl/material/solid/organic/leather matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE) - origin_tech = "{'materials':1,'engineering':1, 'combat':1}" + origin_tech = @'{"materials":1,"engineering":1, "combat":1}' /obj/item/clothing/head/HoS name = "Head of Security hat" @@ -170,7 +170,7 @@ /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':3,'engineering':1, 'combat':2}" + origin_tech = @'{"materials":3,"engineering":1, "combat":2}' //Jensen cosplay gear /obj/item/clothing/under/head_of_security/jensen @@ -179,7 +179,7 @@ icon = 'icons/clothing/under/jumpsuits/jumpsuit_hos_alt.dmi' siemens_coefficient = 0.6 matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_TRACE) - origin_tech = "{'materials':3,'engineering':1, 'combat':2}" + origin_tech = @'{"materials":3,"engineering":1, "combat":2}' /obj/item/clothing/suit/armor/hos/jensen name = "armored trenchcoat" @@ -192,4 +192,4 @@ /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT ) - origin_tech = "{'materials':3,'engineering':1, 'combat':2}" + origin_tech = @'{"materials":3,"engineering":1, "combat":2}' diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 8cf7aa379cc..f7f9d8fc033 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -2,7 +2,6 @@ name = "tactical turtleneck" desc = "It's some non-descript, slightly suspicious looking, civilian clothing." icon = 'icons/clothing/under/uniform_tacticool.dmi' - has_sensor = SUIT_NO_SENSORS armor = list( ARMOR_MELEE = ARMOR_MELEE_SMALL, ARMOR_BULLET = ARMOR_BALLISTIC_MINOR, @@ -15,7 +14,6 @@ name = "combat turtleneck" desc = "The height of fashion and tactical utility." icon = 'icons/clothing/under/uniform_combat.dmi' - has_sensor = SUIT_HAS_SENSORS /obj/item/clothing/under/syndicate/tacticool name = "\improper Tacticool turtleneck" @@ -23,5 +21,4 @@ icon = 'icons/clothing/under/uniform_tacticool.dmi' armor = null siemens_coefficient = 1 - has_sensor = SUIT_HAS_SENSORS matter = null \ No newline at end of file diff --git a/code/modules/clothing/underwear/base.dm b/code/modules/clothing/underwear/base.dm index 9c13251a8af..a4878aaebf7 100644 --- a/code/modules/clothing/underwear/base.dm +++ b/code/modules/clothing/underwear/base.dm @@ -10,7 +10,7 @@ return // Might as well check DelayedEquipUnderwear(user, target) -/obj/item/underwear/handle_mouse_drop(atom/over, mob/user) +/obj/item/underwear/handle_mouse_drop(atom/over, mob/user, params) SHOULD_CALL_PARENT(FALSE) DelayedEquipUnderwear(user, over) return TRUE diff --git a/code/modules/codex/categories/_materials.dm b/code/modules/codex/categories/_materials.dm new file mode 100644 index 00000000000..6509270555d --- /dev/null +++ b/code/modules/codex/categories/_materials.dm @@ -0,0 +1,98 @@ +/decl/codex_category/materials + abstract_type = /decl/codex_category/materials + var/reaction_category + +/decl/codex_category/materials/Populate() + + guide_html = guide_html + {" +

    Reactions

    +
    [cat.name]" - dat += "
    [cat.name]
    [S.name] ([pref.get_spent_points(job, S)])[S.name] ([pref.get_spent_points(job, S)])
    [button_label][button_label][add_link(skill, job, button_label, "'Current'", effective_level)][add_link(skill, job, button_label, "'Current'", effective_level)][button_label][button_label][add_link(skill, job, button_label, "'Selectable'", effective_level)][add_link(skill, job, button_label, "'Selectable'", effective_level)][button_label][button_label]
    + + "} + + var/list/entries_to_register = list() + var/list/all_reactions = decls_repository.get_decls_of_subtype(/decl/chemical_reaction) + for(var/reactiontype in all_reactions) + var/decl/chemical_reaction/reaction = all_reactions[reactiontype] + if(!reaction || !reaction.name || reaction.hidden_from_codex || istype(reaction, /decl/chemical_reaction/recipe) || reaction.reaction_category != reaction_category) + continue // Food recipes are handled in category_recipes.dm. + var/mechanics_text = "This reaction requires the following reagents:
    " + if(reaction.mechanics_text) + mechanics_text = "[reaction.mechanics_text]
    [mechanics_text]" + var/list/reactant_values = list() + for(var/reactant_id in reaction.required_reagents) + var/decl/material/reactant = GET_DECL(reactant_id) + var/reactant_name = "[reactant.name]" + reactant_values += "[reaction.required_reagents[reactant_id]]u [reactant_name]" + mechanics_text += " [jointext(reactant_values, " + ")]" + var/list/inhibitors = list() + + for(var/inhibitor_id in reaction.inhibitors) + var/decl/material/inhibitor = GET_DECL(inhibitor_id) + var/inhibitor_name = "[inhibitor.name]" + inhibitors += inhibitor_name + if(length(inhibitors)) + mechanics_text += " (inhibitors: [jointext(inhibitors, ", ")])" + + var/list/catalysts = list() + for(var/catalyst_id in reaction.catalysts) + var/decl/material/catalyst = GET_DECL(catalyst_id) + var/catalyst_name = "[catalyst.name]" + catalysts += "[reaction.catalysts[catalyst_id]]u [catalyst_name]" + if(length(catalysts)) + mechanics_text += " (catalysts: [jointext(catalysts, ", ")])" + + var/produces + if(reaction.result && reaction.result_amount) + var/decl/material/product = GET_DECL(reaction.result) + produces = product.codex_name || product.name + mechanics_text += "
    It will produce [reaction.result_amount]u [product.name]." + if(reaction.maximum_temperature != INFINITY) + mechanics_text += "
    The reaction will not occur if the temperature is above [reaction.maximum_temperature]K." + if(reaction.minimum_temperature > 0) + mechanics_text += "
    The reaction will not occur if the temperature is below [reaction.minimum_temperature]K." + + var/reaction_name = produces || lowertext(reaction.name) + if(produces) + guide_html += "
    " + else + guide_html += "" + guide_html += "" + guide_html += "" + if(length(catalysts)) + guide_html += "" + else + guide_html += "" + if(length(inhibitors)) + guide_html += "" + else + guide_html += "" + if(reaction.minimum_temperature > 0 && reaction.minimum_temperature < INFINITY) + guide_html += "" + else + guide_html += "" + if(reaction.maximum_temperature > 0 && reaction.maximum_temperature < INFINITY) + guide_html += "" + else + guide_html += "" + guide_html += "" + + entries_to_register += new /datum/codex_entry( \ + _display_name = "[reaction.name] (reaction)", \ + _associated_strings = list("[reaction.name] (chemical reaction)"), \ + _lore_text = reaction.lore_text, \ + _mechanics_text = mechanics_text \ + ) + guide_html += "
    Product nameProduct amountRequired reagentsCatalystsInhibitorsMin temperatureMax temperatureNotes
    [capitalize(reaction_name)]
    [capitalize(reaction_name)][reaction.result_amount || "N/A"][jointext(reactant_values, "
    ")]
    [jointext(catalysts, "
    ")]
    No catalysts.[jointext(inhibitors, "
    ")]
    No inhibitors.[reaction.minimum_temperature]KAny[reaction.maximum_temperature]KAny" + if(reaction.mechanics_text) + guide_html += reaction.mechanics_text + if(reaction.lore_text) + guide_html += "
    " + if(reaction.lore_text) + guide_html += reaction.lore_text + guide_html += "
    " + + for(var/datum/codex_entry/entry in entries_to_register) + items |= entry.name + + ..() diff --git a/code/modules/codex/categories/category_reactions.dm b/code/modules/codex/categories/category_reactions.dm index f64d5e317b3..c46829e0dfa 100644 --- a/code/modules/codex/categories/category_reactions.dm +++ b/code/modules/codex/categories/category_reactions.dm @@ -1,10 +1,8 @@ -/decl/codex_category/chemistry - name = "Chemical Reactions" - desc = "Chemical reactions with mundane, interesting or spectacular effects." - guide_name = "Chemistry" - -/decl/codex_category/chemistry/Populate() - +/decl/codex_category/materials/chemistry + name = "Pharmacology" + desc = "Chemical reactions with medical or metabolic effects on living things." + guide_name = "Pharmacology" + reaction_category = REACTION_TYPE_PHARMACEUTICAL guide_html = {"

    Chemistry Basics

    @@ -17,93 +15,26 @@

  • Chem grenades make use of a variety of reactions that produce effects like smoke or foam rather than a new chemical.
  • -

    Reactions

    - - "} - - var/list/entries_to_register = list() - var/list/all_reactions = decls_repository.get_decls_of_subtype(/decl/chemical_reaction) - for(var/reactiontype in all_reactions) - var/decl/chemical_reaction/reaction = all_reactions[reactiontype] - if(!reaction || !reaction.name || reaction.hidden_from_codex || istype(reaction, /decl/chemical_reaction/recipe)) - continue // Food recipes are handled in category_recipes.dm. - var/mechanics_text = "This reaction requires the following reagents:
    " - if(reaction.mechanics_text) - mechanics_text = "[reaction.mechanics_text]
    [mechanics_text]" - var/list/reactant_values = list() - for(var/reactant_id in reaction.required_reagents) - var/decl/material/reactant = GET_DECL(reactant_id) - var/reactant_name = "[reactant.name]" - reactant_values += "[reaction.required_reagents[reactant_id]]u [reactant_name]" - mechanics_text += " [jointext(reactant_values, " + ")]" - var/list/inhibitors = list() - - for(var/inhibitor_id in reaction.inhibitors) - var/decl/material/inhibitor = GET_DECL(inhibitor_id) - var/inhibitor_name = "[inhibitor.name]" - inhibitors += inhibitor_name - if(length(inhibitors)) - mechanics_text += " (inhibitors: [jointext(inhibitors, ", ")])" - - var/list/catalysts = list() - for(var/catalyst_id in reaction.catalysts) - var/decl/material/catalyst = GET_DECL(catalyst_id) - var/catalyst_name = "[catalyst.name]" - catalysts += "[reaction.catalysts[catalyst_id]]u [catalyst_name]" - if(length(catalysts)) - mechanics_text += " (catalysts: [jointext(catalysts, ", ")])" - - var/produces - if(reaction.result && reaction.result_amount) - var/decl/material/product = GET_DECL(reaction.result) - produces = product.codex_name || product.name - mechanics_text += "
    It will produce [reaction.result_amount]u [product.name]." - if(reaction.maximum_temperature != INFINITY) - mechanics_text += "
    The reaction will not occur if the temperature is above [reaction.maximum_temperature]K." - if(reaction.minimum_temperature > 0) - mechanics_text += "
    The reaction will not occur if the temperature is below [reaction.minimum_temperature]K." - - var/reaction_name = produces || lowertext(reaction.name) - if(produces) - guide_html += "" - else - guide_html += "" - guide_html += "" - guide_html += "" - if(length(catalysts)) - guide_html += "" - else - guide_html += "" - if(length(inhibitors)) - guide_html += "" - else - guide_html += "" - if(reaction.minimum_temperature > 0 && reaction.minimum_temperature < INFINITY) - guide_html += "" - else - guide_html += "" - if(reaction.maximum_temperature > 0 && reaction.maximum_temperature < INFINITY) - guide_html += "" - else - guide_html += "" - guide_html += "" - - entries_to_register += new /datum/codex_entry( \ - _display_name = "[reaction.name] (reaction)", \ - _associated_strings = list("[reaction.name] (chemical reaction)"), \ - _lore_text = reaction.lore_text, \ - _mechanics_text = mechanics_text \ - ) - guide_html += "
    Product nameProduct amountRequired reagentsCatalystsInhibitorsMin temperatureMax temperatureNotes
    [capitalize(reaction_name)]
    [capitalize(reaction_name)][reaction.result_amount || "N/A"][jointext(reactant_values, "
    ")]
    [jointext(catalysts, "
    ")]
    No catalysts.[jointext(inhibitors, "
    ")]
    No inhibitors.[reaction.minimum_temperature]KAny[reaction.maximum_temperature]KAny" - if(reaction.mechanics_text) - guide_html += reaction.mechanics_text - if(reaction.lore_text) - guide_html += "
    " - if(reaction.lore_text) - guide_html += reaction.lore_text - guide_html += "
    " - - for(var/datum/codex_entry/entry in entries_to_register) - items |= entry.name - - . = ..() + "} + +/decl/codex_category/materials/chemistry/compounds + name = "Compounds" + desc = "Chemical reactions with non-medical, mundane, interesting or spectacular effects." + guide_name = "Compounds" + reaction_category = REACTION_TYPE_COMPOUND + +/decl/codex_category/materials/chemistry/synthesis + name = "Material Synthesis" + desc = "Chemical reactions that produce solid materials." + guide_name = "Material Synthesis" + reaction_category = REACTION_TYPE_SYNTHESIS + +/decl/codex_category/materials/alloying + name = "Alloys" + desc = "Combinations of metals that form various products." + guide_name = "Metallurgy" + reaction_category = REACTION_TYPE_ALLOYING + guide_html = {" +

    Metallurgy Basics

    +

    Put metal in the smelter!

    + "} diff --git a/code/modules/codex/categories/category_substances.dm b/code/modules/codex/categories/category_substances.dm index a30a0d1fc04..922239595d1 100644 --- a/code/modules/codex/categories/category_substances.dm +++ b/code/modules/codex/categories/category_substances.dm @@ -55,7 +55,7 @@ material_info += "
  • It is a moderately strong solvent, capable of removing ink.
  • " else if(mat.solvent_power <= MAT_SOLVENT_STRONG) material_info += "
  • It is a strong solvent and will burn exposed skin on contact.
  • " - if(LAZYLEN(mat.dissolves_into)) + if(mat.dissolves_in != MAT_SOLVENT_IMMUNE && LAZYLEN(mat.dissolves_into)) var/chems = list() for(var/chemical in mat.dissolves_into) var/decl/material/R = chemical diff --git a/code/modules/codex/codex_atom.dm b/code/modules/codex/codex_atom.dm index 531ae62e228..289ed75612e 100644 --- a/code/modules/codex/codex_atom.dm +++ b/code/modules/codex/codex_atom.dm @@ -37,4 +37,4 @@ /atom/examine(mob/user, distance, infix = "", suffix = "") . = ..() if(user?.get_preference_value(/datum/client_preference/inquisitive_examine) == PREF_ON && user.can_use_codex() && SScodex.get_codex_entry(get_codex_value(user))) - to_chat(user, "The codex has relevant information available.") + to_chat(user, SPAN_NOTICE("The codex has relevant information available.")) diff --git a/code/modules/codex/codex_cataloguer.dm b/code/modules/codex/codex_cataloguer.dm index df02a4d084b..0cf00324007 100644 --- a/code/modules/codex/codex_cataloguer.dm +++ b/code/modules/codex/codex_cataloguer.dm @@ -1,85 +1,3 @@ -/obj/screen/scan_radius - name = null - plane = HUD_PLANE - layer = UNDER_HUD_LAYER - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - screen_loc = "CENTER,CENTER" - icon = 'icons/screen/scanner.dmi' - icon_state = "blank" - alpha = 180 - var/scan_range - var/image/holder_image - -/obj/screen/scan_radius/proc/set_radius(var/new_range) - if(new_range != scan_range) - scan_range = max(1, new_range) - update_icon() - -/obj/screen/scan_radius/proc/fade_out(var/mob/user, var/fade_time) - set waitfor = FALSE - animate(src, alpha = 0, time = fade_time) - if(fade_time > 0) - sleep(fade_time) - if(user?.client && holder_image) - user.client.images -= holder_image - -/obj/screen/scan_radius/Destroy() - if(holder_image) - holder_image.vis_contents.Cut() - QDEL_NULL(holder_image) - return ..() - -/obj/screen/scan_radius/on_update_icon() - cut_overlays() - if(scan_range <= 1) - add_overlay("single") - else - var/pixel_bound = (world.icon_size * scan_range) - - var/image/I = image(icon, "bottomleft") - I.pixel_x = -(pixel_bound) - I.pixel_y = -(pixel_bound) - add_overlay(I) - - I = image(icon, "bottomright") - I.pixel_x = pixel_bound - I.pixel_y = -(pixel_bound) - add_overlay(I) - - I = image(icon, "topleft") - I.pixel_x = -(pixel_bound) - I.pixel_y = pixel_bound - add_overlay(I) - - I = image(icon, "topright") - I.pixel_x = pixel_bound - I.pixel_y = pixel_bound - add_overlay(I) - - var/offset_scan_range = scan_range-1 - for(var/i = -(offset_scan_range) to offset_scan_range) - I = image(icon, "left") - I.pixel_x = -(pixel_bound) - I.pixel_y = world.icon_size * i - add_overlay(I) - - I = image(icon, "right") - I.pixel_x = pixel_bound - I.pixel_y = world.icon_size * i - add_overlay(I) - - I = image(icon, "bottom") - I.pixel_x = world.icon_size * i - I.pixel_y = -(pixel_bound) - add_overlay(I) - - I = image(icon, "top") - I.pixel_x = world.icon_size * i - I.pixel_y = pixel_bound - add_overlay(I) - - compile_overlays() - /obj/item/cataloguer name = "cataloguer" desc = "A hand-held device used for compiling information about an object by scanning it, and then uploading it to the local codex. Alt-click to highlight scannable objects around you." @@ -87,7 +5,7 @@ icon = 'icons/obj/items/device/cataloguer.dmi' icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_NORMAL - origin_tech = "{'materials':2, 'programming':3,'magnets':3}" + origin_tech = @'{"materials":2, "programming":3,"magnets":3}' force = 0 item_flags = ITEM_FLAG_NO_BLUDGEON slot_flags = SLOT_LOWER_BODY @@ -196,7 +114,7 @@ /obj/item/cataloguer/examine(mob/user, distance, infix, suffix) . = ..() if(loaded_disk) - to_chat(user, "It has \a [loaded_disk] slotted into the storage port. The display indicates it currently holds [loaded_disk.data] Good Explorer Point\s.") + to_chat(user, "It has \a [loaded_disk] slotted into the storage port. The display indicates it currently holds [loaded_disk.data] good explorer point\s.") /obj/item/cataloguer/proc/stop_scan(var/interrupted = TRUE, var/mob/user, var/fade_out = 0) @@ -277,7 +195,7 @@ // Draw glow filter over target. if(ismovable(target)) var/atom/movable/thing = target - thing.add_filter("cataloguer_glow", 1, list("drop_shadow", color = glow_colour, size = 4, offset = 1, x = 0, y = 0)) + thing.add_filter("cataloguer_glow", 1, list(type = "drop_shadow", color = glow_colour, size = 4, offset = 1, x = 0, y = 0)) scan_beam = user.Beam(target, "scanner", time = scan_delay, maxdistance = scan_range+1, beam_color = glow_colour) @@ -291,4 +209,4 @@ var/datum/codex_entry/scannable/scan_result = scannable.scanned() if(scan_result) loaded_disk.data += scan_result.worth_points - to_chat(user, SPAN_NOTICE("You complete the scan of \the [target], earning [scan_result.worth_points] Good Explorer Point\s.")) + to_chat(user, SPAN_NOTICE("You complete the scan of \the [target], earning [scan_result.worth_points] good explorer point\s.")) diff --git a/code/modules/codex/codex_client.dm b/code/modules/codex/codex_client.dm index c40a52431ee..180e7624c44 100644 --- a/code/modules/codex/codex_client.dm +++ b/code/modules/codex/codex_client.dm @@ -25,7 +25,7 @@ return codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_codex_cooldown)), 1 SECOND) var/list/all_entries = SScodex.retrieve_entries_for_string(searching) if(mob && mob.mind && !player_is_antag(mob.mind)) @@ -71,7 +71,7 @@ to_chat(src, SPAN_WARNING("You cannot perform codex actions currently.")) return codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_codex_cooldown)), 1 SECOND) to_chat(mob, SPAN_NOTICE("The codex forwards you an index file.")) @@ -114,7 +114,7 @@ return codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(reset_codex_cooldown)), 1 SECOND) var/datum/codex_entry/entry = SScodex.get_codex_entry("nexus") SScodex.present_codex_entry(mob, entry) diff --git a/code/modules/codex/entries/_codex_entry.dm b/code/modules/codex/entries/_codex_entry.dm index ce72d55aa9a..c81ee255fc2 100644 --- a/code/modules/codex/entries/_codex_entry.dm +++ b/code/modules/codex/entries/_codex_entry.dm @@ -3,18 +3,28 @@ /datum/codex_entry var/name + /// Whether or not this entry is stored on the subsystem, or is associated with solely the specific atom. var/store_codex_entry = TRUE + /// A list of string search terms associated with this entry. var/list/associated_strings + /// A list of typepaths used to populate associated_strings. var/list/associated_paths + /// IC text. var/lore_text + /// OOC text. var/mechanics_text + /// Text shown to antagonists. var/antag_text + /// Value used to disambiguate overlapping codex names. var/disambiguator + /// A list of category decls that this codex entry belongs to. var/list/categories /// If TRUE, don't create this entry in codex init. Where possible, consider using abstract_type or store_codex_entry = FALSE instead. var/skip_hardcoded_generation = FALSE /// If TRUE, associated_paths is set to include each path's subtypes in New(). var/include_subtypes = FALSE + /// HTML returned when the entry is used to populate a guide manual. + var/guide_html /datum/codex_entry/temporary store_codex_entry = FALSE @@ -136,4 +146,5 @@ . += "" . += footer . += "" + #undef TRIM_LINEBREAKS diff --git a/code/modules/codex/entries/engineering.dm b/code/modules/codex/entries/engineering.dm index 66c24731bd2..98a90924909 100644 --- a/code/modules/codex/entries/engineering.dm +++ b/code/modules/codex/entries/engineering.dm @@ -46,26 +46,6 @@ mechanics_text = "This device disrupts shields on directly adjacent tiles (in a + shaped pattern), in a similar way the floor mounted variant does. It is, however, portable and run by an internal battery. Can be recharged with a regular recharger." disambiguator = "equipment" -/datum/codex_entry/hacking - associated_strings = list("hacking") - mechanics_text = "Airlocks, vending machines, and various other machinery can be hacked by opening them up and fiddling with the wires. \ - While it might sound like a unlawful deed (and it usually is) this process is also performed by engineers, usually to fix said criminal deeds. \ - Hacking also benefits from the Electrical Engineering skill: a low skill may cause wires to tangle, and a high enough skill will let you examine wires to see what they do. \ -
    Hacking makes use of several items: \ -
    • a screwdriver, for opening maintenance panels.
    • \ -
    • a multitool, for pulsing wires (optional for many tasks, but very useful)
    • \ -
    • wirecutters, for cutting wires
    • \ -
    • insulated gloves, to prevent electrocution (optional but highly recommended)
    • \ -
    • a crowbar, if you're hacking a door to open it.
    \ -
    The first step to most hacking procedures is to use the screwdriver to open a maintenance panel and access the wiring. \ - After, you can click on the machine to view the wires. \ - You then use the multitool to pulse the wires, and in response some of the displayed information may change, causing certain effects to occur or allowing for certain benefits. \ - If you don't have a multitool, you can cut the wires. \ - Pulsing tends to cause temporary changes or toggles something, whereas cutting a wire is usually longer lasting, but this is not always the case. \ - Note that the corresponding wires and effects are randomized between rounds of the game. \ - You can also attach a signaler to pulse wires remotely." - antag_text = "To avoid suspicion or accidents, practice quietly somewhere out of the way and learn the wires you need before doing it for real." - /datum/codex_entry/solars associated_paths = list(/obj/item/solar_assembly, /obj/machinery/power/solar, /obj/machinery/power/tracker, /obj/machinery/power/solar_control) associated_strings = list("solar array") diff --git a/code/modules/codex/entries/guides.dm b/code/modules/codex/entries/guides.dm new file mode 100644 index 00000000000..75d149383fd --- /dev/null +++ b/code/modules/codex/entries/guides.dm @@ -0,0 +1,618 @@ +/datum/codex_entry/guide + abstract_type = /datum/codex_entry/guide + lore_text = "This guide has not been written yet, sorry!" + +/datum/codex_entry/guide/New() + ..() + if(QDELETED(src)) + return + + // Add to category. + var/decl/codex_category/cat = GET_DECL(/decl/codex_category/guides) + LAZYDISTINCTADD(categories, cat) + LAZYDISTINCTADD(cat.items, name) + + // Generate our guide text. + guide_html = guide_html ? list(guide_html) : list() + if(lore_text) + guide_html += "

    [lore_text]

    " + if(mechanics_text) + guide_html += "

    [mechanics_text]

    " + // No antag text for the guide text. + guide_html = JOINTEXT(guide_html) + +/datum/codex_entry/guide/robotics + name = "Guide to Robotics" + lore_text = {" +

    Cyborgs for Dummies

    + +

    Chapters

    +
      +
    1. Cyborg Related Equipment
    2. +
    3. Cyborg Modules
    4. +
    5. Cyborg Construction
    6. +
    7. Cyborg Maintenance
    8. +
    9. Cyborg Repairs
    10. +
    11. In Case of Emergency
    12. +
    + +

    Cyborg Related Equipment

    + +

    Exosuit Fabricator

    + The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. + +

    Cyborg Recharging Station

    + This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. + +

    Robotics Control Console

    + This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again. + +

    Cyborg Modules

    + When a cyborg is created it picks out of an array of modules to designate its purpose. There are 11 different cyborg modules.
    + All cyborg modules carry a flash. + + # TODO generate from SSrobots + +

    Cyborg Construction

    + Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
    The required materials to make a cyborg are: +
      +
    • Metal
    • +
    • Two Flashes
    • +
    • One Power Cell (Preferably rated to 15000w)
    • +
    • Some electrical wires
    • +
    • One Human Brain
    • +
    • One Man-Machine Interface
    • +
    + Once you have acquired the materials, you can start on construction of your cyborg.
    To construct a cyborg, follow the steps below: +
      +
    1. Start the Exosuit Fabricators constructing all of the cyborg parts
    2. +
    3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
    4. +
    5. Once you have a Robot Head, place your two flashes inside the eye sockets
    6. +
    7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
    8. +
    9. Attach all of the Robot parts to the Robot frame
    10. +
    11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
    12. +
    13. Congratulations! You have a new cyborg!
    14. +
    + +

    Cyborg Maintenance

    + Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. + +

    Replacing a Power Cell

    + Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
    The steps to replace a cell are as follows: +
      +
    1. Unlock the Cyborg's Interface by swiping your ID on it
    2. +
    3. Open the Cyborg's outer panel using a crowbar
    4. +
    5. Remove the old power cell
    6. +
    7. Insert the new power cell
    8. +
    9. Close the Cyborg's outer panel using a crowbar
    10. +
    11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
    12. +
    + +

    Exposing the Internal Wiring

    + Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
    You can easily expose the internal wiring by following the steps below: +
      +
    1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
    2. +
    3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
    4. +
    + To re-seal the cyborg's internal wiring: +
      +
    1. Use a screwdriver to secure the cyborg's internal panel
    2. +
    3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
    4. +
    + +

    Cyborg Repairs

    + Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). + +

    Dents

    + If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. + Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. + +

    Excessive Heat Damage

    + If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
    To replace the internal wiring follow the steps below: +
      +
    1. Unlock the Cyborg's Interface by swiping your ID
    2. +
    3. Open the Cyborg's External Panel using a crowbar
    4. +
    5. Remove the Cyborg's Power Cell
    6. +
    7. Using a screwdriver, expose the internal wiring of the Cyborg
    8. +
    9. Replace the damaged wires inside the cyborg
    10. +
    11. Secure the internal wiring cover using a screwdriver
    12. +
    13. Insert the Cyborg's Power Cell
    14. +
    15. Close the Cyborg's External Panel using a crowbar
    16. +
    17. Lock the Cyborg's Interface by swiping your ID
    18. +
    + These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. + +

    In Case of Emergency

    + In case of emergency, there are a few steps you can take. + +

    "Rogue" Cyborgs

    + If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. + To repair the situation, follow these steps: +
      +
    1. Locate the nearest robotics console
    2. +
    3. Determine which cyborgs are "Rogue"
    4. +
    5. Press the lockdown button to immobilize the cyborg
    6. +
    7. Locate the cyborg
    8. +
    9. Expose the cyborg's internal wiring
    10. +
    11. Check to make sure the LawSync and AI Sync lights are lit
    12. +
    13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
    14. +
    15. Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.
    16. +
    17. Use a "Reset" upload moduleto reset the cyborg's laws
    18. +
    19. Proceed to a Robotics Control console
    20. +
    21. Remove the lockdown on the cyborg
    22. +
    + +

    As a last resort

    + If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. +

    WARNING:

    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason. + "} + +/datum/codex_entry/guide/detective + name = "Guide to Forensics" + lore_text = {" +

    Detective Work

    + Between your bouts of self-narration and drinking whiskey on the rocks, you might get a case or two to solve.
    + To have the best chance to solve your case, follow these directions: +

    +

      +
    1. Go to the crime scene.
    2. +
    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog).
    4. +
    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
    6. +
    7. Return to your office.
    8. +
    9. Using your forensic scanning computer, scan your scanner to upload all of your evidence into the database.
    10. +
    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    12. +
    13. If you have 80% or more of the print (The print is displayed), go to step 10, otherwise continue to step 8.
    14. +
    15. Look for clues from the suit fibres you found on your perpetrator, and go about looking for more evidence with this new information, scanning as you go.
    16. +
    17. Try to get a fingerprint card of your perpetrator, as if used in the computer, the prints will be completed on their dossier.
    18. +
    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
    20. +
    21. Since you now have both your dossier and the name of the person, print both out as evidence and get security to nab your baddie.
    22. +
    23. Give yourself a pat on the back and a bottle of the ship's finest vodka, you did it!
    24. +
    +

    + It really is that easy! Good luck! + "} + +/datum/codex_entry/guide/nuclear_sabotage + name = "Guide to Nuclear Sabotage" + lore_text = {" +

    Nuclear Explosives 101

    + Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.

    + + First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.
    + +

    To make the nuclear device functional

    +
      +
    • Place the nuclear device in the designated detonation zone.
    • +
    • Extend and anchor the nuclear device from its interface.
    • +
    • Insert the nuclear authorisation disk into the slot.
    • +
    • Type the numeric authorisation code into the keypad. This should have been provided.
      + Note: If you make a mistake, press R to reset the device. +
    • Press the E button to log on to the device.
    • +

    + + You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.

    + Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.
    + Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.

    + + So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
    + Note: THE BOMB IS STILL SET AND WILL DETONATE

    + + Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.

    + + Remember the order:
    + Disk, Code, Safety, Timer, Disk, RUN!

    + Intelligence Analysts believe that normal corporate procedure is for the Captain to secure the nuclear authentication disk.

    + + Good luck! + "} + +/datum/codex_entry/guide/particle_accelerator + name = "Guide to Particle Accelerators" + lore_text = {" +

    Experienced User's Guide

    +

    Setting up the accelerator

    +
      +
    1. Wrench all pieces to the floor
    2. +
    3. Add wires to all the pieces
    4. +
    5. Close all the panels with your screwdriver
    6. +
    +

    Using the accelerator

    +
      +
    1. Open the control panel
    2. +
    3. Set the speed to 2
    4. +
    5. Start firing at the singularity generator
    6. +
    7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
    8. +
    9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
    10. +
    + "} + + +/datum/codex_entry/guide/singularity + name = "Guide to Singularity Engines" + lore_text = {" +

    Singularity Safety in Special Circumstances

    +

    Power outage

    + A power problem has made you lose power? Could be wiring problems or syndicate power sinks. In any case follow these steps: +
      +
    1. PANIC!
    2. +
    3. Get your ass over to engineering! QUICKLY!!!
    4. +
    5. Get to the Area Power Controller which controls the power to the emitters.
    6. +
    7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
    8. +
    9. Open the console and disengage the cover lock.
    10. +
    11. Pry open the APC with a Crowbar.
    12. +
    13. Take out the empty power cell.
    14. +
    15. Put in the new, full power cell - if you don't have one, continue with step 15.
    16. +
    17. Quickly put on a Radiation suit.
    18. +
    19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
    20. +
    21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
    22. +
    23. Grab your crowbar and pry away the tile closest to the APC.
    24. +
    25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
    26. +
    27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
    28. +
    29. GET THE FUCK OUT OF THERE!!!
    30. +
    +

    Shields get damaged

    +
      +
    1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
    2. +
    + "} + +/datum/codex_entry/guide/mech_construction + name = "Guide to Exosuit Construction" + lore_text = {" +
    +
    + Weyland-Yutani - Building Better Worlds +

    Autonomous Power Loader Unit \"Ripley\"

    +
    +

    Specifications:

    +
      +
    • Class: Autonomous Power Loader
    • +
    • Scope: Logistics and Construction
    • +
    • Weight: 820kg (without operator and with empty cargo compartment)
    • +
    • Height: 2.5m
    • +
    • Width: 1.8m
    • +
    • Top speed: 5km/hour
    • +
    • Operation in vacuum/hostile environment: Possible +
    • Airtank volume: 500 liters
    • +
    • Devices: +
        +
      • Hydraulic clamp
      • +
      • High-speed drill
      • +
      +
    • +
    • Propulsion device: Powercell-powered electro-hydraulic system
    • +
    • Powercell capacity: Varies
    • +
    +

    Construction:

    +
      +
    1. Connect all exosuit parts to the chassis frame.
    2. +
    3. Connect all hydraulic fittings and tighten them up with a wrench.
    4. +
    5. Adjust the servohydraulics with a screwdriver.
    6. +
    7. Wire the chassis (Cable is not included).
    8. +
    9. Use the wirecutters to remove the excess cable if needed.
    10. +
    11. Install the central control module (Not included. Use supplied datadisk to create one).
    12. +
    13. Secure the mainboard with a screwdriver.
    14. +
    15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
    16. +
    17. Secure the peripherals control module with a screwdriver.
    18. +
    19. Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).
    20. +
    21. Secure the internal armor plating with a wrench.
    22. +
    23. Weld the internal armor plating to the chassis.
    24. +
    25. Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).
    26. +
    27. Secure the external reinforced armor plating with a wrench.
    28. +
    29. Weld the external reinforced armor plating to the chassis.
    30. +
    +

    Additional Information:

    +
      +
    • The firefighting variation is made in a similar fashion.
    • +
    • A firesuit must be connected to the firefighter chassis for heat shielding.
    • +
    • Internal armor is plasteel for additional strength.
    • +
    • External armor must be installed in 2 parts, totalling 10 sheets.
    • +
    • Completed exosuit is more resilient against fire, and is a bit more durable overall.
    • +
    • The Company is determined to ensure the safety of its investments employees.
    • +
    + + "} + +/datum/codex_entry/guide/atmospherics + name = "Guide to Atmospherics" + lore_text = {" +

    Contents

    +
      +
    1. Author's Foreword
    2. +
    3. Basic Piping
    4. +
    5. Insulated Pipes
    6. +
    7. Atmospherics Devices
    8. +
    9. Heat Exchange Systems
    10. +
    11. Final Checks
    12. +

    +

    HOW TO NOT SUCK QUITE SO HARD AT ATMOSPHERICS


    + Or: What the fuck does a "pressure regulator" do?

    + Alright. It has come to my attention that a variety of people are unsure of what a "pipe" is and what it does. + Apparently, there is an unnatural fear of these arcane devices and their "gases." Spooky, spooky. So, + this will tell you what every device constructable by an ordinary pipe dispenser within atmospherics actually does. + You are not going to learn what to do with them to be the super best person ever, or how to play guitar with passive gates, + or something like that. Just what stuff does.

    +

    Basic Pipes

    + The boring ones.
    + Most ordinary pipes are pretty straightforward. They hold gas. If gas is moving in a direction for some reason, gas will flow in that direction. + That's about it. Even so, here's all of your wonderful pipe options.
    +
      +
    • Straight pipes: They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this + standard one-meter size, so most things will take up as much space as one of these.
    • +
    • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
    • +
    • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
    • +
    • 4-way manifold: A four-way junction.
    • +
    • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh, use them to decorate your house or something.
    • +
    • Manual valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
    • +
    • Manual T-valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


    • +
    + An important note here is that pipes are now done in three distinct lines - general, supply, and scrubber. You can move gases between these with a universal adapter. Use the correct position for the correct location. + Connecting scrubbers to a supply position pipe makes you an idiot who gives everyone a difficult job. Insulated and HE pipes don't go through these positions. +

    Insulated Pipes

    +
  • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
  • +
  • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
  • +
  • 4-way manifold: A four-way junction.
  • +
  • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh. Use them to decorate your house or something.
  • +
  • Manual Valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
  • +
  • Manual T-Valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


  • +

    Insulated Pipes


    + Special Public Service Announcement.
    + Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.

    +

    Devices:

    + They actually do something.
    + This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now. + Stop it. It's unbecoming. Most of these are fairly straightforward.
    +
      +
    • Gas pump: Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 15000 kPa (kilopascals). + Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa + (though 18 kPa is preferred when using internals with pure oxygen, for various reasons). A high-powered variant will move gas more quickly at the expense of consuming more power. Do not turn the distribution loop up to 15000 kPa. + You will make engiborgs cry and the Chief Engineer will beat you.
    • +
    • Pressure regulator: These replaced the old passive gates. You can choose to regulate pressure by input or output, and regulate flow rate. Regulating by input means that when input pressure is above the limit, gas will flow. + Regulating by output means that when pressure is below the limit, gas will flow. Flow rate can be controlled.
    • +
    • Unary vent: The basic vent used in rooms. It pumps gas into the room, but can't suck it back out. Controlled by the room's air alarm system.
    • +
    • Scrubber: The other half of room equipment. Filters air, and can suck it in entirely in what's called a "panic siphon." Activating a panic siphon without very good reason will kill someone. Don't do it.
    • +
    • Meter: A little box with some gauges and numbers. Fasten it to any pipe or manifold and it'll read you the pressure in it. Very useful.
    • +
    • Gas mixer: Two sides are input, one side is output. Mixes the gases pumped into it at the ratio defined. The side perpendicular to the other two is "node 2," for reference, on non-mirrored mixers. + Output is controlled by flow rate. There is also an "omni" variant that allows you to set input and output sections freely.
    • +
    • Gas filter: Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe, + the rest will continue out the other side. Can also output from 0-4500 kPa. The "omni" vairant allows you to set input and output sections freely.
    • +
    +

    Heat Exchange Systems

    + Will not set you on fire.
    + These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt), + a higher temperature will raise pressure, and a lower one will lower temperature.
    +
  • Pipe: This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.
  • +
  • Bent pipe: Take a wild guess.
  • +
  • Junction: The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.
  • +
  • Heat exchanger: These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch. + This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions.

  • + That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please. + "} + +/datum/codex_entry/guide/eva + name = "Guide to EVA" + lore_text = {" +

    EVA Gear and You: Not Spending All Day Inside

    + Or: How not to suffocate because there's a hole in your shoes
    +

    Contents

    +
      +
    1. A foreword on using EVA gear
    2. +
    3. Donning a Civilian Suit
    4. +
    5. Putting on a Hardsuit
    6. +
    7. Cyclers and Other Modification Equipment
    8. +
    9. Final Checks
    10. +
    +
    + EVA gear. Wonderful to use. It's useful for mining, engineering, and occasionally just surviving, if things are that bad. Most people have EVA training, + but apparently there are some people out in space who don't. This guide should give you a basic idea of how to use this gear, safely. It's split into two sections: + Civilian suits and hardsuits.

    +

    Civilian Suits

    + The bulkiest things this side of Alpha Centauri
    + These suits are the grey ones that are stored in EVA. They're the more simple to get on, but are also a lot bulkier, and provide less protection from environmental hazards such as radiation or physical impact. + As Medical, Engineering, Security, and Mining all have hardsuits of their own, these don't see much use, but knowing how to put them on is quite useful anyways.

    + First, take the suit. It should be in three pieces: A top, a bottom, and a helmet. Put the bottom on first, shoes and the like will fit in it. If you have magnetic boots, however, + put them on on top of the suit's feet. Next, get the top on, as you would a shirt. It can be somewhat awkward putting these pieces on, due to the makeup of the suit, + but to an extent they will adjust to you. You can then find the snaps and seals around the waist, where the two pieces meet. Fasten these, and double-check their tightness. + The red indicators around the waist of the lower half will turn green when this is done correctly. Next, put on whatever breathing apparatus you're using, be it a gas mask or a breath mask. Make sure the oxygen tube is fastened into it. + Put on the helmet now, straightforward, and make sure the tube goes into the small opening specifically for internals. Again, fasten seals around the neck, a small indicator light in the inside of the helmet should go from red to off when all is fastened. + There is a small slot on the side of the suit where an emergency oxygen tank or extended emergency oxygen tank will fit, + but it is recommended to have a full-sized tank on your back for EVA.

    + These suits tend to be wearable by most species. They're large and flexible. They might be pretty uncomfortable for some, though, so keep that in mind.

    +

    Hardsuits

    + Heavy, uncomfortable, still the best option.
    + These suits come in Engineering, Mining, and the Armory. There's also a couple Medical Hardsuits in EVA. These provide a lot more protection than the standard suits.

    + Similarly to the other suits, these are split into three parts. Fastening the pant and top are mostly the same as the other spacesuits, with the exception that these are a bit heavier, + though not as bulky. The helmet goes on differently, with the air tube feeding into the suit and out a hole near the left shoulder, while the helmet goes on turned ninety degrees counter-clockwise, + and then is screwed in for one and a quarter full rotations clockwise, leaving the faceplate directly in front of you. There is a small button on the right side of the helmet that activates the helmet light. + The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.

    + These suits generally only fit one species. Standard-issue suits are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.

    +

    Modification Equipment

    + How to actually make hardsuits fit you.
    + There's a variety of equipment that can modify hardsuits to fit species that can't fit into them, making life quite a bit easier.

    + The first piece of equipment is a suit cycler. This is a large machine resembling the storage pods that are in place in some places. These are machines that will automatically tailor a suit to certain specifications. + The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will be painful. + These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

    + There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not recommend using them unless no other option is available. +

    Final Checks

    +
      +
    • Are all seals fastened correctly?
    • +
    • If you have modified it manually, is absolutely everything sealed perfectly?
    • +
    • Do you either have shoes on under the suit, or magnetic boots on over it?
    • +
    • Do you have a mask on and internals on the suit or your back?
    • +
    • Do you have a way to communicate with your fellow crew in case something goes wrong?
    • +
    • Do you have a second person watching if this is a training session?

    • +
    + If you don't have any further issues, go out and do whatever is necessary. + "} + +/datum/codex_entry/guide/xenoarchaeology + name = "Guide to Xenoarchaeology" + lore_text = {" +

    Contents

    +
      +
    1. Prepping the expedition
    2. +
    3. Knowing your tools
    4. +
    5. Finding the dig
    6. +
    7. Analysing deposits
    8. +
    9. Extracting your first find
    10. +
    +
    +

    Prepping the expedition

    + Every digsite I've been to, someone has forgotten something and I've never yet been to a dig that hasn't had me hiking to get to it - so gather your gear + and get it to the site the first time. You learn quick that time is money, when you've got a shipful of bandits searching for you the next valley over, + but don't be afraid to clear some space if there are any inconvenient boulders in the way.
    +
      +
    • Floodlights (if it's dark)
    • +
    • Wooden trestle tables (for holding tools and finds)
    • +
    • Suspension field generator
    • +
    • Load bearing servitors (such as a mulebot, or hover-tray)
    • +
    • Spare energy packs
    • +

    + Contents +

    Knowing your tools

    + Every archaeologist has a plethora of tools at their disposal, but here's the important ones:
    +
      +
    • Picks, pickaxes, and brushes - don't underestimate the the smallest or largest in your arsenal, each one clears a different amount + of the rockface so each one has a use.
    • +
    • Measuring tape - don't leave home without it, you can use it to measure the depth a rock face has been excavated to.
    • +
    • GPS locator - knowing where you are is the first step to not be lost.
    • +
    • Core sampler - use this to take core samples from rock faces, which you can then run to the lab for analysis.
    • +
    • Depth scanner - uses X-ray diffraction to locate anomalous densities in rock, indicating archaeological deposits or mineral veins. + Comes with a handy reference log containing coordinates and time of each scan.
    • +
    • Alden-Saraspova counter - uses a patented application of Fourier Transform analysis to determine the difference between background and + exotic radiation. Use it to determine how far you are from anomalous energy sources.
    • +
    • Radio beacon locator - leave a beacon at an item of interest, then track it down later with this handy gadget. Watch for interference from other + devices though.
    • +
    • Flashlight or portable light source - Self explanatory, I hope.
    • +
    • Environmental safety gear - This one's dependent on the environment you're working in, but enclosed footwear and a pack of internals + could save your life.
    • +
    • Anomaly safety gear - A biosealed and catalysis-resistant suit along with eye shielding, tinted hood, and non-reactive disposable gloves are + the best kind of protection you can hope for from the errors our forebears may have unleashed.
    • +
    • Personal defence weapon - Never know what you'll find on the dig: pirates, natives, ancient guardians, carnivorous wildlife... + it pays in blood to be prepared.
    • +

    + Contents +

    Finding the dig

    + Wouldn't be an archaeologist without their dig, but everyone has to start somewhere. Here's a basic procedure I go through when cataloguing a new planet:
    +
      +
    • Get in touch with the locals (in particular geologists, miners, and farmers) - Never know what's been turned up by accident, then left to + gather dust on a shelf.
    • +
    • Check the obvious areas first - even if you're pressed for time, these ones are the generally easiest to search, and the most likely targets + of your rivals.
    • +
    • Do some prospecting - the earth mother isn't in the habit of displaying her secrets to the world (although sometimes you get lucky). + Drop a shaft and clear away a bit of surface rock here and there, you never know what might be lurking below the surface.
    • +
    • Tips on unearthing a deposit - How do you know when you're golden? Look for telltale white strata that looks strange or out of place, or if + something has broken under your pick while you're digging. Your depth scanner is your best friend, but even it can't distinguish between + ordinary minerals and ancient leavings, if in doubt then err on the side of caution.
    • +

    + Contents +

    Analysing the contents of a dig

    + You've found some unusual strata, but it's not all peaches from here. No archaeologist ever managed to pull a bone from the earth without doing thorough + chemical analysis on every two meters of rock face nearby.
    +
      +
    • Take core samples - Grab a rock core for every 4m^2.
    • +
    • Clear around any potential finds - Clear away ordinary rock, leaving your prizes reachable in a clearly marked area.
    • +
    • Haul off excess rock - It's easy for a dig to get cluttered, and a neat archaeologist is a successful archaeologist.
    • +
    • Don't be afraid to be cautious - It's slower sometimes, but the extra time will be worth the payoff when you find an Exolitic relic.
    • +
    • Chemical analysis - I won't go into detail here, but the labwork is essential to any successful extraction. Marshal your core samples, and + send them off to the labcoated geniuses.
    • +

    + Contents +

    Extracting your first find

    +
      +
    • Scan the rock - Use a depth scanner to determine the find's depth and clearance. DON'T FORGET THESE.
    • +
    • Choose stasis field - Chemical analysis on a core sample from the rock face will tell you which field is necessary to extract the find safely.
    • +
    • Setup field gen - Bolt it down, choose the field, check the charge, and activate it. If you forget it, you'll wish you hadn't when that priceless + Uryom vase crumbles as it sees the light of day.
    • +
    • FUNCTIONAL AND SAFE digging - Dig into the rock until you've cleared away a depth equal to (the anomaly depth MINUS the clearance range). The find + should come loose on it's own, but it will be in the midst of a chunk of rock. Use a welder or miniature excavation tool to clear away the excess.
    • +
    • FANCY AND SPEEDY digging - Dig into the rock until you've cleared away a depth equal to the anomaly depth, but without any of your strokes + entering the clearance range.
    • +
    • The big find - Sometimes, you'll chance upon something big, both literally and figuratively. Giant statues and functioning remnants of Precursor + technology are just as exciting, to the right buyers. If your digging leaves a large boulder behind, dig into it normally and see if anything's hidden + inside.
    • +

    + Contents + "} + + +/datum/codex_entry/guide/mass_spectrometry + name = "Guide to Mass Spectrometry" + lore_text = {" +

    Contents

    +
      +
    1. A note on terms
    2. +
    3. Analysis progression
    4. +
    5. Heat management
    6. +
    7. Ambient radiation
    8. +
    +
    +

    A note on terms

    +
      +
    • Mass spectrometry - MS is the procedure used used to measure and quantify the components of matter. The most prized tool in the field of + 'Materials analysis.'
    • +
    • Radiometric dating - MS applied using the right carrier reagents can be used to accurately determine the age of a sample.
    • +
    • Dissonance ratio - This is a pseudoarbitrary value indicating the overall presence of a particular element in a greater composite. + It takes into account volume, density, molecular excitation and isotope spread.
    • +
    • Vacuum seal integrity - A reference to how close an airtight seal is to failure.
    • +

    + Contents +

    Analysis progression

    + Modern mass spectrometry requires constant attention from the diligent researcher in order to be successful. There are many different elements to juggle, + and later chapters will delve into them. For the spectrometry assistant, the first thing you need to know is that the scanner wavelength is automatically + calculated for you. Just tweak the settings and try to match it with the actual wavelength as closely as possible.
    +
    + Contents +

    Seal integrity

    + In order to maintain sterile and environmentally static procedures, a special chamber is set up inside the spectrometer. It's protected by a proprietary vacuum seal + produced by top tier industrial science. It will only last for a certain number of scans before failing outright, but it can be resealed through use of nanite paste. + Unfortunately, it's susceptible to malforming under heat stress so exposing it to higher temperatures will cause it's operation life to drop significantly.
    +
    + Contents +

    Heat management

    + The scanner relies on a gyro-rotational system that varies in speed and intensity. Over the course of an ordinary scan, the RPMs can change dramatically. Higher RPMs + means greater heat generation, but is necessary for the ongoing continuation of the scan. To offset heat production, spectrometers have an inbuilt cooling system. + Researchers can modify the flow rate of water to aid in dropping temperature as necessary, but are advised that frequent water replacements may be necessary + depending on coolant purity. Other substances may be viable substitutes, but nowhere near as effective as water itself.
    +
    + Contents +

    Ambient radiation

    + Researchers are warned that while operational, mass spectrometers emit period bursts of radiation and are thus advised to wear protective gear. In the event of + radiation spikes, there is also a special shield that can be lowered to block emissions. Lowering this, however, will have the effect of blocking the scanner + so use it sparingly.
    +
    + Contents + "} + +/datum/codex_entry/guide/engineering + name = "Guide to Engineering" + +/datum/codex_entry/guide/construction + name = "Guide to Construction" + +/datum/codex_entry/guide/supermatter + name = "Guide to Supermatter Engines" + +/datum/codex_entry/guide/fusion + name = "Guide to Fusion Reactors" + +/datum/codex_entry/guide/hacking + name = "Guide to Hacking" + associated_strings = list("hacking") + mechanics_text = "Airlocks, vending machines, and various other machinery can be hacked by opening them up and fiddling with the wires. \ + While it might sound like a unlawful deed (and it usually is) this process is also performed by engineers, usually to fix said criminal deeds. \ + Hacking also benefits from the Electrical Engineering skill: a low skill may cause wires to tangle, and a high enough skill will let you examine wires to see what they do. \ +
    Hacking makes use of several items: \ +
    • a screwdriver, for opening maintenance panels.
    • \ +
    • a multitool, for pulsing wires (optional for many tasks, but very useful)
    • \ +
    • wirecutters, for cutting wires
    • \ +
    • insulated gloves, to prevent electrocution (optional but highly recommended)
    • \ +
    • a crowbar, if you're hacking a door to open it.
    \ +
    The first step to most hacking procedures is to use the screwdriver to open a maintenance panel and access the wiring. \ + After, you can click on the machine to view the wires. \ + You then use the multitool to pulse the wires, and in response some of the displayed information may change, causing certain effects to occur or allowing for certain benefits. \ + If you don't have a multitool, you can cut the wires. \ + Pulsing tends to cause temporary changes or toggles something, whereas cutting a wire is usually longer lasting, but this is not always the case. \ + Note that the corresponding wires and effects are randomized between rounds of the game. \ + You can also attach a signaler to pulse wires remotely." + antag_text = "To avoid suspicion or accidents, practice quietly somewhere out of the way and learn the wires you need before doing it for real." diff --git a/code/modules/codex/entries/guns.dm b/code/modules/codex/entries/guns.dm index 1df3529eae6..5779576b776 100644 --- a/code/modules/codex/entries/guns.dm +++ b/code/modules/codex/entries/guns.dm @@ -52,19 +52,20 @@ . = ..() var/list/traits = list() - traits += "
    Caliber: [caliber]" - - var/list/loading_ways = list() - if(load_method & SINGLE_CASING) - loading_ways += "loose [caliber] rounds" - if(load_method & SPEEDLOADER) - loading_ways += "speedloaders" - if(load_method & MAGAZINE) - loading_ways += "magazines" - traits += "Can be loaded using [english_list(loading_ways)]" - - if(load_method & (SINGLE_CASING|SPEEDLOADER)) - traits += "It can hold [max_shells] rounds." + if(caliber == CALIBER_UNUSABLE) + traits += "
    It cannot be reloaded with standard ammunition." + else + traits += "
    It is chambered for [caliber] caliber." + var/list/loading_ways = list() + if(load_method & SINGLE_CASING) + loading_ways += "loose [caliber] rounds" + if(load_method & SPEEDLOADER) + loading_ways += "speedloaders" + if(load_method & MAGAZINE) + loading_ways += "magazines" + traits += "Can be loaded using [english_list(loading_ways)]" + if(load_method & (SINGLE_CASING|SPEEDLOADER)) + traits += "It can hold [max_shells] rounds." if(jam_chance) traits += "It's prone to jamming." diff --git a/code/modules/crafting/stack_recipes/_recipe.dm b/code/modules/crafting/stack_recipes/_recipe.dm new file mode 100644 index 00000000000..edcf812b488 --- /dev/null +++ b/code/modules/crafting/stack_recipes/_recipe.dm @@ -0,0 +1,352 @@ +#define MATERIAL_RECIPE_PARAMS req_mat_to_type(mat, required_material), req_mat_to_type(reinf_mat, required_reinforce_material) + +#define MATERIAL_FORBIDDEN -1 +#define MATERIAL_ALLOWED 0 +#define MATERIAL_REQUIRED 1 + +#define BASE_CRAFTING_TIME (1 SECOND) +// Normalize crafting time to item size. +#define CRAFT_TIME_SIZE(X) ((ITEM_SIZE_NORMAL/X) * (1 SECOND)) +// Add half a second per difficulty level. +#define CRAFT_TIME_DIFFICULTY(X) (X * (0.5 SECONDS)) + +/* + * Recipe datum + */ +/decl/stack_recipe + abstract_type = /decl/stack_recipe + /// Descriptive name, omitting any materials etc. Taken from product if null. + var/name + /// Descriptive name for multiple products, uses "[name]s" if null. + var/name_plural + /// Used for name grammar, grabbed from product if null. + var/gender + // Object path to the desired product. + var/result_type + /// Amount of sheets/ingots/etc needed for this recipe. If null, generates from result matter. + var/req_amount + /// Amount of stuff that is produced in one batch (e.g. 4 for floor tiles). + var/res_amount = 1 + // Caps the amount that can be produced in one craft action. Set to null for no cap. + var/max_res_amount + /// Time it takes for this recipe to be crafted (not including skill and tool modifiers). If null, generates from product w_class and difficulty. + var/time + /// If set, only one of this object can be made per turf. + var/one_per_turf = FALSE + /// If set will be created on the floor instead of in-hand. + var/on_floor = FALSE + /// Higher difficulty requires higher skill level to make. + var/difficulty = MAT_VALUE_NORMAL_DIY + /// Whether the recipe will prepend a material name to the title - 'steel clipboard' vs 'clipboard'. + var/apply_material_name = TRUE + /// Sets direction to the crafting user on creation. + var/set_dir_on_spawn = TRUE + /// Used to validate some checks like matter (since /turf has no matter). + var/expected_product_type = /obj + /// Used for providing a display name. + + /// What stack types can be used to make this recipe? + var/list/craft_stack_types = list( + /obj/item/stack/material/sheet, + /obj/item/stack/material/ingot, + /obj/item/stack/material/plank, + /obj/item/stack/material/bar, + /obj/item/stack/material/puck + ) + /// What stack types cannot be used to make this recipe? + var/list/forbidden_craft_stack_types = list( + /obj/item/stack/material/ore, + /obj/item/stack/material/log, + /obj/item/stack/material/lump, + /obj/item/stack/material/slab + ) + /// If set, will group recipes under a stack recipe list. + var/category + /// Modifies the matter values retrieved by req_amount calculation. Should always be more than 1. + var/crafting_extra_cost_factor = 1.2 + /// Skill to check for the recipe. + var/recipe_skill = SKILL_CONSTRUCTION + + /// Tool archetype required, if any. + var/required_tool + /// Can this recipe use a material? Set to type for a specific material. + var/required_material = MATERIAL_REQUIRED + /// Can this recipe use a reinforced material? Set to type for a specific material. + var/required_reinforce_material = MATERIAL_FORBIDDEN + + /// Minimum material wall support value. + var/required_wall_support_value + /// Minimum material integrity value. + var/required_integrity + /// Minimum material hardness value. + var/required_hardness + /// Maximum material opacity value. + var/required_max_opacity + +/decl/stack_recipe/Initialize() + . = ..() + + // Use initial() instead of atom info repo + // to avoid grabbing the material name. + if(result_type) + var/obj/result = result_type + if(isnull(name)) + name = initial(result.name) + if(isnull(time)) + time = max(0.5 SECONDS, round(BASE_CRAFTING_TIME + CRAFT_TIME_SIZE(initial(result.w_class)) + CRAFT_TIME_DIFFICULTY(difficulty), 5)) + if(isnull(gender)) + gender = initial(result.gender) + + // Clamp stack max amount to this regardless of anything else + // so we don't lose material on crafting an impossible stack. + if(ispath(result_type, /obj/item/stack)) + var/obj/item/stack/result_stack = result_type + var/stack_max = initial(result_stack.max_amount) + if(isnull(max_res_amount) || max_res_amount > stack_max) + max_res_amount = stack_max + + if(isnull(name_plural)) + name_plural = "[name]s" + + // Wipe our tool requirements if the server is not configured to use them. + if(required_tool && !get_config_value(/decl/config/toggle/stack_crafting_uses_tools)) + required_tool = null + + // We keep the stack blacklists because they're mainly there to stop people crafting with raw forms. + if(craft_stack_types && !get_config_value(/decl/config/toggle/on/stack_crafting_uses_types)) + craft_stack_types = null + + update_req_amount() + +/decl/stack_recipe/validate() + . = ..() + + if(isnull(initial(req_amount)) && crafting_extra_cost_factor < 1) + . += "crafting cost factor is less than one, this may result in free materials." + + if(!istext(name)) + . += "null or non-text name: [name || "NULL"]" + if(!isnum(time)) + . += "null or non-text crafting time: [time || "NULL"]" + if(!ispath(result_type)) + . += "null or non-path result type: [result_type || "NULL"]" + else if(!ispath(expected_product_type)) + . += "null or non-path expected product type: [expected_product_type || "NULL"]" + else if(!ispath(result_type, expected_product_type)) + . += "result type [result_type || "NULL"] is not subtype of expected product type [expected_product_type || "NULL"]" + + if(isnull(required_material) || required_material == MATERIAL_FORBIDDEN) + if(!isnull(required_wall_support_value)) + . += "null required material but non-null wall support value" + if(!isnull(required_integrity)) + . += "null required material but non-null integrity value" + if(!isnull(required_max_opacity)) + . += "null required material but non-null max opacity value" + if(!isnull(required_hardness)) + . += "null required material but non-null hardness value" + + if(recipe_skill && difficulty > 0) + var/decl/hierarchy/skill/used_skill = GET_DECL(recipe_skill) + if(!istype(used_skill)) + . += "invalid skill decl [recipe_skill]" + else if(length(used_skill.levels) < difficulty) + . += "required skill [recipe_skill] is missing skill level [isnull(difficulty) ? "NULL" : json_encode(difficulty)]" + + if(length(forbidden_craft_stack_types) && length(craft_stack_types)) + for(var/stack_type in (forbidden_craft_stack_types|craft_stack_types)) + if((stack_type in craft_stack_types) && (stack_type in forbidden_craft_stack_types)) + . += "[stack_type] is in both forbidden and craftable stack types" + +/decl/stack_recipe/proc/get_list_display(mob/user, obj/item/stack/stack) + + . = list("
    " + . += get_display_name(res_amount, apply_article = FALSE) + . += "" + . += "[req_amount] [req_amount == 1 ? stack.singular_name : stack.plural_name]" + . += "" + . += "[round(time / 10, 0.5)] second\s" + . += "" + if(recipe_skill && difficulty) + var/decl/hierarchy/skill/S = GET_DECL(recipe_skill) + var/skill_message = "[capitalize(LAZYACCESS(S.levels, difficulty))] [capitalize(S.name)]" + if(user.skill_check(recipe_skill, difficulty)) + . += skill_message + else + . += "[skill_message]" + . += "" + var/max_multiplier = round(stack.get_amount() / req_amount) + if(max_multiplier) + if(max_res_amount > 0) + max_multiplier = min(max_multiplier, round(max_res_amount / res_amount)) + var/static/list/multipliers = list(1, 5, 10, 25, 50) + for(var/n in multipliers) + if(max_multiplier < n) + break + . += "[n*res_amount]x" + if(!(max_multiplier in multipliers)) + . += "[max_multiplier*res_amount]x" + . += "
    [name]expand
    [god_name][god_name] [initial(G.info)][initial(god.info)]
    " show_browser(src, JOINTEXT(dat), "window=godform;can_close=0") diff --git a/code/modules/mob/living/deity/deity_phenomena.dm b/code/modules/mob/living/deity/deity_phenomena.dm index 7e4193d63b9..0ca6dd7514b 100644 --- a/code/modules/mob/living/deity/deity_phenomena.dm +++ b/code/modules/mob/living/deity/deity_phenomena.dm @@ -19,7 +19,7 @@ if(!silenced) to_chat(src, "You've been silenced! Your phenomenas are disabled!") var/obj/screen/intent/deity/SD = hud_used?.action_intent - if(SD) + if(istype(SD)) SD.color = "#ff0000" silenced += amount for(var/phenom in phenomenas) //Also make it so that you don't do cooldowns. @@ -27,7 +27,7 @@ if(P.refresh_time) P.refresh_time += amount -/mob/living/deity/Life() +/mob/living/deity/handle_regular_status_updates() . = ..() if(.) if(silenced > 0) @@ -35,7 +35,7 @@ if(!silenced) to_chat(src, "You are no longer silenced.") var/obj/screen/intent/deity/SD = hud_used?.action_intent - if(SD) + if(istype(SD)) SD.color = null if(power_per_regen < 0 || power < power_min) adjust_power(power_per_regen) @@ -65,7 +65,7 @@ if(intent_list[mod] == P) intent_list[mod] = null var/obj/screen/intent/deity/SD = hud_used?.action_intent - if(SD) + if(istype(SD)) SD.update_text() update_phenomenas() update_phenomena_bindings() diff --git a/code/modules/mob/living/deity/deity_sources.dm b/code/modules/mob/living/deity/deity_sources.dm index 181957044cb..4c479cff036 100644 --- a/code/modules/mob/living/deity/deity_sources.dm +++ b/code/modules/mob/living/deity/deity_sources.dm @@ -10,8 +10,8 @@ if(form) L.faction = form.faction update_followers() - events_repository.register(/decl/observ/destroyed, L,src, .proc/dead_follower) - events_repository.register(/decl/observ/death, L,src, .proc/update_followers) + events_repository.register(/decl/observ/destroyed, L,src, PROC_REF(dead_follower)) + events_repository.register(/decl/observ/death, L,src, PROC_REF(update_followers)) /mob/living/deity/proc/dead_follower(var/mob/living/L) events_repository.unregister(/decl/observ/death, L,src) diff --git a/code/modules/mob/living/deity/deity_tracking.dm b/code/modules/mob/living/deity/deity_tracking.dm index 0ac0cd7ba75..0b8de46e9f4 100644 --- a/code/modules/mob/living/deity/deity_tracking.dm +++ b/code/modules/mob/living/deity/deity_tracking.dm @@ -25,9 +25,9 @@ eyeobj.setLoc(get_turf(L)) to_chat(src, "You begin to follow \the [L].") following = L - events_repository.register(/decl/observ/moved, L, src, /mob/living/deity/proc/keep_following) - events_repository.register(/decl/observ/destroyed, L, src, /mob/living/deity/proc/stop_follow) - events_repository.register(/decl/observ/death, L, src, /mob/living/deity/proc/stop_follow) + events_repository.register(/decl/observ/moved, L, src, TYPE_PROC_REF(/mob/living/deity, keep_following)) + events_repository.register(/decl/observ/destroyed, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow)) + events_repository.register(/decl/observ/death, L, src, TYPE_PROC_REF(/mob/living/deity, stop_follow)) /mob/living/deity/proc/stop_follow() events_repository.unregister(/decl/observ/moved, following, src) diff --git a/code/modules/mob/living/deity/menu/deity_nano.dm b/code/modules/mob/living/deity/menu/deity_nano.dm index d194b111912..046276fcffe 100644 --- a/code/modules/mob/living/deity/menu/deity_nano.dm +++ b/code/modules/mob/living/deity/menu/deity_nano.dm @@ -77,5 +77,5 @@ nano_data["bindings"] = phenomena_bindings //Update the hud as well. var/obj/screen/intent/deity/SD = hud_used?.action_intent - if(SD) + if(istype(SD)) SD.update_text() \ No newline at end of file diff --git a/code/modules/mob/living/deity/phenomena/communication.dm b/code/modules/mob/living/deity/phenomena/communication.dm index 72876f3f9e9..5771c6b38c8 100644 --- a/code/modules/mob/living/deity/phenomena/communication.dm +++ b/code/modules/mob/living/deity/phenomena/communication.dm @@ -26,7 +26,7 @@ /datum/phenomena/point/activate(var/atom/a) ..() if(!arrow) - arrow = image('icons/mob/screen1.dmi', icon_state = "arrow", layer = POINTER_LAYER) + arrow = image('icons/effects/markers.dmi', icon_state = "arrow", layer = POINTER_LAYER) var/turf/T = get_turf(a) arrow.loc = T var/list/view = view(7,T) @@ -37,7 +37,7 @@ if((M in view) && M.client) to_chat(M, "Your attention is eerily drawn to \the [a].") M.client.images += arrow - events_repository.register(/decl/observ/logged_out, M, src, /datum/phenomena/point/proc/remove_image) + events_repository.register(/decl/observ/logged_out, M, src, TYPE_PROC_REF(/datum/phenomena/point, remove_image)) spawn(20) if(M.client) remove_image(M) diff --git a/code/modules/mob/living/deity/phenomena/conjuration.dm b/code/modules/mob/living/deity/phenomena/conjuration.dm index 2176486f697..ac0f27c6075 100644 --- a/code/modules/mob/living/deity/phenomena/conjuration.dm +++ b/code/modules/mob/living/deity/phenomena/conjuration.dm @@ -27,7 +27,7 @@ var/obj/effect/portal/P = new(get_turf(a), null, 0) P.failchance = 0 portals += P - events_repository.register(/decl/observ/destroyed, P,src,/datum/phenomena/portals/proc/remove_portal) + events_repository.register(/decl/observ/destroyed, P,src, TYPE_PROC_REF(/datum/phenomena/portals, remove_portal)) if(portals.len > 2) var/removed = portals[1] remove_portal(removed) @@ -59,7 +59,7 @@ L.take_overall_damage(rand(5,30),0,0,0,"blunt intrument") //Actual spell does 5d10 but maaaybe too much. playsound(get_turf(L), 'sound/effects/bamf.ogg', 100, 1) to_chat(L, "Something hard hits you!") - if(L.health < L.maxHealth/2) //If it reduces past 50% + if(L.current_health < L.get_max_health()/2) //If it reduces past 50% var/obj/effect/rift/R = new(get_turf(L)) L.visible_message("\The [L] is quickly sucked into \a [R]!") L.forceMove(R) diff --git a/code/modules/mob/living/deity/phenomena/conversion.dm b/code/modules/mob/living/deity/phenomena/conversion.dm index d9dc309a33c..344880f91f2 100644 --- a/code/modules/mob/living/deity/phenomena/conversion.dm +++ b/code/modules/mob/living/deity/phenomena/conversion.dm @@ -40,7 +40,7 @@ return 0 var/obj/structure/deity/altar/A = locate() in get_turf(L) if(!A || A.linked_god != linked) - to_chat(linked,"\The [L] needs to be on \a [linked.get_type_name(/obj/structure/deity/altar)] to be forcefully converted..") + to_chat(linked,"\The [L] needs to be on \a [linked.get_type_name(/obj/structure/deity/altar)] to be forcefully converted.") return 0 return 1 diff --git a/code/modules/mob/living/deity/phenomena/generic.dm b/code/modules/mob/living/deity/phenomena/generic.dm index 33b53f57bf5..633cd96eb7f 100644 --- a/code/modules/mob/living/deity/phenomena/generic.dm +++ b/code/modules/mob/living/deity/phenomena/generic.dm @@ -18,7 +18,7 @@ if(object_to_move) events_repository.unregister(/decl/observ/destroyed, object_to_move,src) object_to_move = new object_type() - events_repository.register(/decl/observ/destroyed, object_to_move, src, .proc/add_object) + events_repository.register(/decl/observ/destroyed, object_to_move, src, PROC_REF(add_object)) /datum/phenomena/movable_object/activate(var/atom/a, var/mob/living/deity/user) ..() diff --git a/code/modules/mob/living/deity/phenomena/starlight.dm b/code/modules/mob/living/deity/phenomena/starlight.dm index 6a8a98f1990..762cb18d549 100644 --- a/code/modules/mob/living/deity/phenomena/starlight.dm +++ b/code/modules/mob/living/deity/phenomena/starlight.dm @@ -139,8 +139,8 @@ to_chat(L, "[whisper_from ? "The [whisper_from] speaks to you" : "You hear a whisper say"] \"[message]\"") linked.eyenet.add_source(L) - events_repository.register(/decl/observ/destroyed, L, src, .proc/deactivate_look) - addtimer(CALLBACK(src, .proc/deactivate_look, L), 30 SECONDS) + events_repository.register(/decl/observ/destroyed, L, src, PROC_REF(deactivate_look)) + addtimer(CALLBACK(src, PROC_REF(deactivate_look), L), 30 SECONDS) /datum/phenomena/flickering_whisper/proc/deactivate_look(var/mob/viewer) if(!linked.is_follower(viewer)) //Don't remove if they are follower @@ -198,8 +198,8 @@ SET_STATUS_MAX(L, STAT_WEAK, 1) new /obj/aura/starborn(L) L.status_flags |= GODMODE - events_repository.register(/decl/observ/destroyed, L,src,.proc/fail_ritual) - addtimer(CALLBACK(src, .proc/succeed_ritual, L), 600 SECONDS) //6 minutes + events_repository.register(/decl/observ/destroyed, L,src,PROC_REF(fail_ritual)) + addtimer(CALLBACK(src, PROC_REF(succeed_ritual), L), 600 SECONDS) //6 minutes for(var/mob/living/player in global.player_list) sound_to(player, 'sound/effects/cascade.ogg') if(player?.mind?.assigned_job?.is_holy) diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index 2a8cac458bc..eff0474b548 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -15,6 +15,8 @@ for(var/slot in get_inventory_slots()) all_slots += get_inventory_slot_datum(slot) for(var/datum/inventory_slot/inv_slot as anything in sortTim(all_slots, /proc/cmp_inventory_slot_desc)) + if(isnull(inv_slot.quick_equip_priority)) // Never quick-equip into some slots. + continue _inventory_slot_priority += inv_slot.slot_id return _inventory_slot_priority @@ -39,17 +41,17 @@ qdel(existing_slot) LAZYDISTINCTADD(_held_item_slots, held_slot.slot_id) add_inventory_slot(held_slot) - if(!get_active_hand()) + if(!get_active_held_item_slot()) select_held_item_slot(held_slot.slot_id) queue_hand_rebuild() /mob/living/remove_held_item_slot(var/slot) var/datum/inventory_slot/inv_slot = istype(slot, /datum/inventory_slot) ? slot : get_inventory_slot_datum(slot) if(inv_slot) - LAZYREMOVE(_held_item_slots, slot) + LAZYREMOVE(_held_item_slots, inv_slot.slot_id) remove_inventory_slot(inv_slot) var/held_slots = get_held_item_slots() - if(get_active_held_item_slot() == slot && length(held_slots)) + if(!get_active_held_item_slot() && length(held_slots)) select_held_item_slot(held_slots[1]) queue_hand_rebuild() @@ -168,7 +170,7 @@ if(held) drop_from_inventory(held) qdel(inv_slot) - LAZYREMOVE(_inventory_slots, slot) + LAZYREMOVE(_inventory_slots, inv_slot.slot_id) /mob/living/proc/get_jetpack() var/obj/item/tank/jetpack/thrust = get_equipped_item(slot_back_str) @@ -178,4 +180,31 @@ var/obj/item/rig/rig = thrust for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules) return module.jets + thrust = get_equipped_item(slot_s_store_str) + if(istype(thrust)) + return thrust return null + +/mob/living/verb/quick_equip() + set name = "quick-equip" + set hidden = 1 + var/obj/item/I = get_active_hand() + if(!I) + to_chat(src, SPAN_WARNING("You are not holding anything to equip.")) + return + if(!equip_to_appropriate_slot(I)) + to_chat(src, SPAN_WARNING("You are unable to equip that.")) + +/mob/living/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1) + for (var/slot in slots) + if (equip_to_slot_if_possible(W, slots[slot], del_on_fail = 0)) + return slot + if (del_on_fail) + qdel(W) + return null + +//Same as get_covering_equipped_items, but using target zone instead of bodyparts flags +/mob/living/proc/get_covering_equipped_item_by_zone(var/zone) + var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(src, zone) + if(O) + return get_covering_equipped_item(O.body_part) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 1185eec50a1..f2f03a5dae4 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -4,7 +4,7 @@ ..() - if (HasMovementHandler(/datum/movement_handler/mob/transformation/)) + if (HasMovementHandler(/datum/movement_handler/mob/transformation)) return // update the current life tick, can be used to e.g. only do something every 4 ticks @@ -20,38 +20,48 @@ //Handle temperature/pressure differences between body and environment handle_environment(loc.return_air()) - - if(stat != DEAD && !is_in_stasis()) - //Breathing, if applicable - handle_breathing() - handle_nutrition_and_hydration() - handle_immunity() - //Body temperature adjusts itself (self-regulation) - stabilize_body_temperature() - - // human/handle_regular_status_updates() needs a cleanup, as blindness should be handled in handle_disabilities() handle_regular_status_updates() // Status & health update, are we dead or alive etc. handle_stasis() if(stat != DEAD) + if(!is_in_stasis()) + . = handle_living_non_stasis_processes() aura_check(AURA_TYPE_LIFE) - //Check if we're on fire - handle_fire() - for(var/obj/item/grab/G in get_active_grabs()) G.Process() + //Check if we're on fire + handle_fire() handle_actions() - UpdateLyingBuckledAndVerbStatus() - handle_regular_hud_updates() - handle_status_effects() return 1 +/mob/living/proc/handle_living_non_stasis_processes() + SHOULD_CALL_PARENT(TRUE) + // hungy + handle_nutrition_and_hydration() + // Breathing, if applicable + handle_breathing() + // Mutations and radiation + handle_mutations_and_radiation() + // Chemicals in the body + handle_chemicals_in_body() + // Random events (vomiting etc) + handle_random_events() + // eye, ear, brain damages + handle_disabilities() + handle_immunity() + //Body temperature adjusts itself (self-regulation) + stabilize_body_temperature() + // Only handle AI stuff if we're not being played. + if(!key) + handle_legacy_ai() + return TRUE + /mob/living/proc/experiences_hunger_and_thirst() return TRUE @@ -67,6 +77,10 @@ return my_species.hunger_factor return 0 +// Used to handle non-datum AI. +/mob/living/proc/handle_legacy_ai() + return + /mob/living/proc/handle_nutrition_and_hydration() SHOULD_CALL_PARENT(TRUE) if(!experiences_hunger_and_thirst()) @@ -85,11 +99,10 @@ SHOULD_CALL_PARENT(TRUE) radiation = clamp(radiation,0,500) - var/decl/species/my_species = get_species() var/decl/bodytype/my_bodytype = get_bodytype() - if(my_species && my_bodytype && (my_bodytype.appearance_flags & RADIATION_GLOWS)) + if(my_bodytype?.appearance_flags & RADIATION_GLOWS) if(radiation) - set_light(max(1,min(10,radiation/10)), max(1,min(20,radiation/20)), my_species.get_flesh_colour(src)) + set_light(max(1,min(10,radiation/10)), max(1,min(20,radiation/20)), get_flesh_color()) else set_light(0) @@ -110,7 +123,7 @@ to_chat(src, "You feel weak.") SET_STATUS_MAX(src, STAT_WEAK, 3) if(!lying) - emote("collapse") + emote(/decl/emote/visible/collapse) if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT)) lose_hair() @@ -123,21 +136,22 @@ if(prob(1)) to_chat(src, "You feel strange!") adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT) - emote("gasp") + emote(/decl/emote/audible/gasp) if(radiation > 150) damage = 8 radiation -= 4 * RADIATION_SPEED_COEFFICIENT + var/decl/species/my_species = get_species() damage = FLOOR(damage * (my_species ? my_species.get_radiation_mod(src) : 1)) if(damage) - adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT) immunity = max(0, immunity - damage * 15 * RADIATION_SPEED_COEFFICIENT) - updatehealth() + adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT) var/list/limbs = get_external_organs() if(!isSynthetic() && LAZYLEN(limbs)) var/obj/item/organ/external/O = pick(limbs) if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) + #undef RADIATION_SPEED_COEFFICIENT // Get valid, unique reagent holders for metabolizing. Avoids metabolizing the same holder twice in a tick. @@ -182,9 +196,8 @@ LAZYSET(chem_doses, T, dose) if(LAZYACCESS(chem_doses, T) <= 0) LAZYREMOVE(chem_doses, T) - if(apply_chemical_effects()) - updatehealth() + update_health() return TRUE @@ -192,9 +205,9 @@ var/burn_regen = GET_CHEMICAL_EFFECT(src, CE_REGEN_BURN) var/brute_regen = GET_CHEMICAL_EFFECT(src, CE_REGEN_BRUTE) if(burn_regen || brute_regen) - heal_organ_damage(brute_regen, burn_regen) + heal_organ_damage(brute_regen, burn_regen, FALSE) // apply_chemical_effects() calls update_health() if it returns true; don't do it unnecessarily. return TRUE - + return FALSE /mob/living/proc/handle_random_events() return @@ -216,75 +229,135 @@ if(!.) // If we're under or inside shelter, use the z-level rain (for ambience) . = SSweather.weather_by_z[my_turf.z] -/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) - - SHOULD_CALL_PARENT(TRUE) +/* Accidentally copied from dev - leaving commented for easier merge resolution when this commit goes back up to dev. +/mob/living/proc/handle_contact_reagent_dripping() + // TODO: process dripping outside of Life() so corpses don't become sponges. + // TODO: factor temperature and vapor into this so warmer locations dry you off. + // TODO: apply a dripping overlay a la fire to show someone is saturated. + if(!loc) + return + var/datum/reagents/touching_reagents = get_contact_reagents() + if(!touching_reagents?.total_volume) + return + var/drip_amount = max(1, round(touching_reagents.total_volume * 0.1)) + if(drip_amount) + touching_reagents.trans_to(loc, drip_amount) +*/ +/mob/living/proc/handle_weather_effects(obj/abstract/weather_system/weather) // Handle physical effects of weather. - var/decl/state/weather/weather_state - var/obj/abstract/weather_system/weather = get_affecting_weather() - if(weather) - weather_state = weather.weather_system.current_state - if(istype(weather_state)) - weather_state.handle_exposure(src, get_weather_exposure(weather), weather) + if(!istype(weather)) + return + var/decl/state/weather/weather_state = weather.weather_system.current_state + if(istype(weather_state)) + weather_state.handle_exposure(src, get_weather_exposure(weather), weather) +/mob/living/proc/handle_weather_ambience(obj/abstract/weather_system/weather) // Refresh weather ambience. // Show messages and play ambience. - if(client && get_preference_value(/datum/client_preference/play_ambiance) == PREF_YES) - - // Work out if we need to change or cancel the current ambience sound. - var/send_sound - var/mob_ref = weakref(src) - if(istype(weather_state)) - var/ambient_sounds = !is_outside() ? weather_state.ambient_indoors_sounds : weather_state.ambient_sounds - var/ambient_sound = length(ambient_sounds) && pick(ambient_sounds) - if(global.current_mob_ambience[mob_ref] == ambient_sound) - return - send_sound = ambient_sound - global.current_mob_ambience[mob_ref] = send_sound - else if(mob_ref in global.current_mob_ambience) - global.current_mob_ambience -= mob_ref - else + if(!istype(weather) || !client || get_preference_value(/datum/client_preference/play_ambiance) != PREF_YES) + return + + // Work out if we need to change or cancel the current ambience sound. + var/send_sound + var/mob_ref = weakref(src) + var/decl/state/weather/weather_state = weather.weather_system.current_state + if(istype(weather_state)) + var/ambient_sounds = !is_outside() ? weather_state.ambient_indoors_sounds : weather_state.ambient_sounds + var/ambient_sound = length(ambient_sounds) && pick(ambient_sounds) + if(global.current_mob_ambience[mob_ref] == ambient_sound) return + send_sound = ambient_sound + global.current_mob_ambience[mob_ref] = send_sound + else if(mob_ref in global.current_mob_ambience) + global.current_mob_ambience -= mob_ref + else + return - // Push sound to client. Pipe dream TODO: crossfade between the new and old weather ambience. - sound_to(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = sound_channels.weather_channel)) - if(send_sound) - sound_to(src, sound(send_sound, repeat = TRUE, wait = 0, volume = 30, channel = sound_channels.weather_channel)) + // Push sound to client. Pipe dream TODO: crossfade between the new and old weather ambience. + sound_to(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = sound_channels.weather_channel)) + if(send_sound) + sound_to(src, sound(send_sound, repeat = TRUE, wait = 0, volume = 30, channel = sound_channels.weather_channel)) + +/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) + SHOULD_CALL_PARENT(TRUE) + //handle_contact_reagent_dripping() // See comment on proc definition + var/weather = get_affecting_weather() + handle_weather_effects(weather) + handle_weather_ambience(weather) //This updates the health and status of the mob (conscious, unconscious, dead) /mob/living/proc/handle_regular_status_updates() - updatehealth() - if(stat != DEAD) - if(HAS_STATUS(src, STAT_PARA)) - set_stat(UNCONSCIOUS) - else if (status_flags & FAKEDEATH) - set_stat(UNCONSCIOUS) - else - set_stat(CONSCIOUS) + + SHOULD_CALL_PARENT(TRUE) + + // Check if we are (or should be) dead at this point. + update_health() + + if(!handle_some_updates()) + return FALSE + + // Godmode just skips most of this processing. + if(status_flags & GODMODE) + set_stat(CONSCIOUS) + germ_level = 0 return TRUE + // TODO: move hallucinations into a status condition decl. + if(hallucination_power) + handle_hallucinations() + + // Increase germ_level regularly + if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level + germ_level++ + // If you're dirty, your gloves will become dirty, too. + var/obj/item/gloves = get_equipped_item(slot_gloves_str) + if(gloves && germ_level > gloves.germ_level && prob(10)) + gloves.germ_level++ + + // If we're dead, don't continue further. + if(stat == DEAD) + return FALSE + + // Handle some general state updates. + if(HAS_STATUS(src, STAT_PARA)) + set_stat(UNCONSCIOUS) + else if (status_flags & FAKEDEATH) + set_stat(UNCONSCIOUS) + else + set_stat(CONSCIOUS) + return TRUE + /mob/living/proc/handle_disabilities() handle_impaired_vision() handle_impaired_hearing() /mob/living/proc/handle_impaired_vision() - if((sdisabilities & BLINDED) || stat) //blindness from disability or unconsciousness doesn't get better on its own + SHOULD_CALL_PARENT(TRUE) + if(stat == DEAD) + SET_STATUS_MAX(src, STAT_BLIND, 0) + if(stat != CONSCIOUS && (sdisabilities & BLINDED)) //blindness from disability or unconsciousness doesn't get better on its own SET_STATUS_MAX(src, STAT_BLIND, 2) + else + return TRUE + return FALSE /mob/living/proc/handle_impaired_hearing() if((sdisabilities & DEAFENED) || stat) //disabled-deaf, doesn't get better on its own SET_STATUS_MAX(src, STAT_TINNITUS, 2) +/mob/living/proc/should_do_hud_updates() + return client + //this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/proc/handle_regular_hud_updates() - if(!client) return 0 - + SHOULD_CALL_PARENT(TRUE) + if(!should_do_hud_updates()) + return FALSE handle_hud_icons() handle_vision() handle_low_light_vision() - - return 1 + return TRUE /mob/living/proc/handle_low_light_vision() @@ -315,10 +388,8 @@ /mob/living/proc/handle_vision() update_sight() - if(stat == DEAD) return - if(is_blind()) overlay_fullscreen("blind", /obj/screen/fullscreen/blind) else @@ -326,9 +397,7 @@ set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry) set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high) - set_fullscreen(stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout) - if(machine) var/viewflags = machine.check_eye(src) if(viewflags < 0) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index cb2a79f052d..9b902a6de85 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,5 +1,6 @@ /mob/living/Initialize() + current_health = get_max_health() original_fingerprint_seed = sequential_id(/mob) fingerprint = md5(num2text(original_fingerprint_seed)) original_genetic_seed = sequential_id(/mob) @@ -185,22 +186,37 @@ default behaviour is: /mob/living/verb/succumb() set hidden = 1 - if ((src.health < src.maxHealth/2)) // Health below half of maxhealth. - src.adjustBrainLoss(src.health + src.maxHealth * 2) // Deal 2x health in BrainLoss damage, as before but variable. - updatehealth() - to_chat(src, "You have given up life and succumbed to death.") + var/current_max_health = get_max_health() + if (current_health < (current_max_health/2)) // Health below half of maxhealth. + adjustBrainLoss(current_max_health * 2) // Deal 2x health in BrainLoss damage, as before but variable. + to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death.")) /mob/living/proc/update_body(var/update_icons=1) if(update_icons) queue_icon_update() -/mob/living/proc/updatehealth() - if(status_flags & GODMODE) - health = maxHealth +/mob/living/proc/should_be_dead() + return current_health <= 0 + +/mob/living/proc/get_total_life_damage() + return (getOxyLoss()+getToxLoss()+getFireLoss()+getBruteLoss()+getCloneLoss()+getHalLoss()) + +/mob/living/update_health() + + . = ..() + if(!.) + current_health = get_max_health() set_stat(CONSCIOUS) - else - health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - getHalLoss() + return + var/current_max_health = get_max_health() + current_health = clamp(current_max_health-get_total_life_damage(), -(current_max_health), current_max_health) + if(stat != DEAD && should_be_dead()) + death() + if(!QDELETED(src)) // death() may delete or remove us + set_status(STAT_BLIND, 1) + set_status(STAT_SILENCE, 0) + return TRUE //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually //affects them once clothing is factored in. ~Errorage @@ -231,73 +247,16 @@ default behaviour is: return btemperature -/mob/living/proc/getBruteLoss() - return maxHealth - health - -/mob/living/proc/adjustBruteLoss(var/amount) - if (status_flags & GODMODE) - return - health = clamp(health - amount, 0, maxHealth) - -/mob/living/proc/getOxyLoss() - return 0 - -/mob/living/proc/adjustOxyLoss(var/amount) - return - -/mob/living/proc/setOxyLoss(var/amount) - return - -/mob/living/proc/getToxLoss() - return 0 - -/mob/living/proc/adjustToxLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setToxLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getFireLoss() - return - -/mob/living/proc/adjustFireLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setFireLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getHalLoss() - return 0 - -/mob/living/proc/adjustHalLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setHalLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getBrainLoss() - return 0 - -/mob/living/proc/adjustBrainLoss(var/amount) - return - -/mob/living/proc/setBrainLoss(var/amount) - return - -/mob/living/proc/getCloneLoss() - return 0 +/mob/living/proc/get_health_ratio() // ratio might be the wrong word + return current_health/get_max_health() -/mob/living/proc/setCloneLoss(var/amount) - return - -/mob/living/proc/adjustCloneLoss(var/amount) - return +/mob/living/proc/get_health_percent(var/sigfig = 1) + return round(get_health_ratio()*100, sigfig) -/mob/living/proc/getMaxHealth() - return maxHealth - -/mob/living/proc/setMaxHealth(var/newMaxHealth) - maxHealth = newMaxHealth +/mob/living/proc/set_max_health(var/val, var/skip_health_update = FALSE) + max_health = val + if(!skip_health_update) + update_health() // ++++ROCKDTBEN++++ MOB PROCS //END @@ -344,30 +303,27 @@ default behaviour is: // heal ONE external organ, organ gets randomly selected from damaged ones. -/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE) - adjustBruteLoss(-brute) - adjustFireLoss(-burn) - src.updatehealth() +/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) + adjustBruteLoss(-brute, do_update_health = FALSE) + adjustFireLoss(-burn, do_update_health = update_health) // damage ONE external organ, organ gets randomly selected from damaged ones. /mob/living/proc/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb) - if(!(status_flags & GODMODE)) - adjustBruteLoss(brute) - adjustFireLoss(burn) - updatehealth() + if(status_flags & GODMODE) + return + adjustBruteLoss(brute, do_update_health = FALSE) + adjustFireLoss(burn) // heal MANY external organs, in random order /mob/living/proc/heal_overall_damage(var/brute, var/burn) - adjustBruteLoss(-brute) + adjustBruteLoss(-brute, do_update_health = FALSE) adjustFireLoss(-burn) - src.updatehealth() // damage MANY external organs, in random order /mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null) if(status_flags & GODMODE) return 0 //godmode - adjustBruteLoss(brute) + adjustBruteLoss(brute, do_update_health = FALSE) adjustFireLoss(burn) - src.updatehealth() /mob/living/proc/restore_all_organs() return @@ -470,8 +426,46 @@ default behaviour is: brain.update_icon() ..(repair_brain) -/mob/living/proc/UpdateDamageIcon() - return +/mob/living + var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed + var/static/list/damage_icon_parts = list() + +/mob/living/proc/update_damage_overlays(update_icons = TRUE) + + // first check whether something actually changed about damage appearance + var/damage_appearance = "" + for(var/obj/item/organ/external/O in get_external_organs()) + damage_appearance += O.damage_state || "00" + + if(damage_appearance == previous_damage_appearance) + // nothing to do here + return + + previous_damage_appearance = damage_appearance + var/decl/bodytype/root_bodytype = get_bodytype() + if(!root_bodytype) + return + var/image/standing_image = image(root_bodytype.get_damage_overlays(src), icon_state = "00") + + // blend the individual damage states with our icons + for(var/obj/item/organ/external/O in get_external_organs()) + if(!O.damage_state || O.damage_state == "00") + continue + var/icon/DI + var/use_colour = (BP_IS_PROSTHETIC(O) ? SYNTH_BLOOD_COLOR : O.species.get_species_blood_color(src)) + var/cache_index = "[O.damage_state]/[O.bodytype.type]/[O.icon_state]/[use_colour]/[O.species.name]" + if(!(cache_index in damage_icon_parts)) + var/damage_overlay_icon = O.bodytype.get_damage_overlays(src) + if(check_state_in_icon(O.damage_state, damage_overlay_icon)) + DI = new /icon(damage_overlay_icon, O.damage_state) // the damage icon for whole human + DI.Blend(get_limb_mask_for(O), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(use_colour, ICON_MULTIPLY) + damage_icon_parts[cache_index] = DI || FALSE + else + DI = damage_icon_parts[cache_index] + if(DI) + standing_image.overlays += DI + set_current_mob_overlay(HO_DAMAGE_LAYER, standing_image, update_icons) /mob/living/handle_grabs_after_move(var/turf/old_loc, var/direction) @@ -480,7 +474,7 @@ default behaviour is: if(!isturf(loc)) for(var/G in get_active_grabs()) qdel(G) - return + return if(isturf(old_loc)) for(var/atom/movable/AM as anything in ret_grab()) @@ -496,13 +490,15 @@ default behaviour is: if(QDELETED(G) || QDELETED(G.affecting)) mygrabs -= G - if(!length(mygrabs)) - return - if(length(grabbed_by)) + for(var/obj/item/grab/G as anything in grabbed_by) + G.adjust_position() reset_offsets() reset_plane_and_layer() + if(!length(mygrabs)) + return + if(direction & (UP|DOWN)) var/txt_dir = (direction & UP) ? "upwards" : "downwards" if(old_loc) @@ -660,11 +656,7 @@ default behaviour is: return FALSE /mob/living/carbon/human/canUnEquip(obj/item/I) - if(!..()) - return - if(I in get_organs()) - return - return 1 + . = ..() && !(I in get_organs()) /mob/proc/can_be_possessed_by(var/mob/observer/ghost/possessor) return istype(possessor) && possessor.client @@ -720,6 +712,9 @@ default behaviour is: return 1 /mob/living/Destroy() + QDEL_NULL(aiming) + QDEL_NULL_LIST(_hallucinations) + QDEL_NULL_LIST(aimed_at_by) if(stressors) // Do not QDEL_NULL, keys are managed instances. stressors = null if(auras) @@ -766,23 +761,22 @@ default behaviour is: return (!L || L.can_drown()) /mob/living/handle_drowning() - var/turf/T = get_turf(src) - if(!can_drown() || !loc.is_flooded(lying)) + if(!can_drown() || !loc?.is_flooded(lying)) return FALSE + var/turf/T = get_turf(src) if(!lying && T.above && T.above.is_open() && !T.above.is_flooded() && can_overcome_gravity()) return FALSE if(prob(5)) var/datum/reagents/metabolism/inhaled = get_inhaled_reagents() var/datum/reagents/metabolism/ingested = get_ingested_reagents() - var/obj/effect/fluid/F = locate() in loc - to_chat(src, SPAN_DANGER("You choke and splutter as you inhale [(F?.reagents && F.reagents.get_primary_reagent_name()) || "liquid"]!")) + to_chat(src, SPAN_DANGER("You choke and splutter as you inhale [T.get_fluid_name()]!")) var/inhale_amount = 0 if(inhaled) inhale_amount = rand(2,5) - F?.reagents?.trans_to_holder(inhaled, min(F.reagents.total_volume, inhale_amount)) + T.reagents?.trans_to_holder(inhaled, min(T.reagents.total_volume, inhale_amount)) if(ingested) var/ingest_amount = 5 - inhale_amount - F?.reagents?.trans_to_holder(ingested, min(F.reagents.total_volume, ingest_amount)) + reagents?.trans_to_holder(ingested, min(T.reagents.total_volume, ingest_amount)) T.show_bubbles() return TRUE // Presumably chemical smoke can't be breathed while you're underwater. @@ -806,9 +800,6 @@ default behaviour is: if(saturation > 0) fluids.trans_to_holder(touching_reagents, saturation) -/mob/living/proc/nervous_system_failure() - return FALSE - /mob/living/proc/needs_wheelchair() return FALSE @@ -825,14 +816,17 @@ default behaviour is: return null /mob/living/proc/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) - vomit.reagents.add_reagent(/decl/material/liquid/acid/stomach, 5) + vomit.add_to_reagents(/decl/material/liquid/acid/stomach, 5) /mob/living/proc/eyecheck() return FLASH_PROTECTION_NONE -/mob/living/proc/get_max_nutrition() +/mob/living/proc/get_satiated_nutrition() return 500 +/mob/living/proc/get_max_nutrition() + return 550 + /mob/living/proc/set_nutrition(var/amt) nutrition = clamp(amt, 0, get_max_nutrition()) @@ -900,9 +894,6 @@ default behaviour is: else if(skip_delays || do_after(src, 5 SECONDS, user)) . = ..() -/mob/living/can_be_injected_by(var/atom/injector) - return ..() && (can_inject(null, 0, BP_CHEST) || can_inject(null, 0, BP_GROIN)) - /mob/living/handle_grab_damage() ..() if(!has_gravity()) @@ -923,7 +914,12 @@ default behaviour is: /mob/living/proc/can_do_special_ranged_attack(var/check_flag = TRUE) return TRUE +/mob/living/proc/get_food_satiation(consumption_method = EATING_METHOD_EAT) + . = (consumption_method == EATING_METHOD_EAT) ? get_nutrition() : get_hydration() + . += get_ingested_reagents()?.total_volume * 5 + /mob/living/proc/get_ingested_reagents() + RETURN_TYPE(/datum/reagents) return reagents /mob/living/proc/should_have_organ(organ_to_check) @@ -937,12 +933,15 @@ default behaviour is: return root_bodytype?.has_limbs[limb_to_check] /mob/living/proc/get_contact_reagents() + RETURN_TYPE(/datum/reagents) return reagents /mob/living/proc/get_injected_reagents() + RETURN_TYPE(/datum/reagents) return reagents /mob/living/proc/get_inhaled_reagents() + RETURN_TYPE(/datum/reagents) return reagents /mob/living/proc/get_adjusted_metabolism(metabolism) @@ -951,7 +950,7 @@ default behaviour is: /mob/living/get_admin_job_string() return "Living" -/mob/living/handle_mouse_drop(atom/over, mob/user) +/mob/living/handle_mouse_drop(atom/over, mob/user, params) if(!anchored && user == src && user != over) if(isturf(over)) @@ -1034,33 +1033,25 @@ default behaviour is: if(hud_used.action_buttons_hidden) if(!hud_used.hide_actions_toggle) hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.UpdateIcon() + hud_used.hide_actions_toggle.update_icon() hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1) client.screen += hud_used.hide_actions_toggle return var/button_number = 0 - for(var/datum/action/A in actions) + for(var/datum/action/action in actions) button_number++ - if(A.button == null) - var/obj/screen/action_button/N = new(hud_used) - N.owner = A - A.button = N - - var/obj/screen/action_button/B = A.button - - B.UpdateIcon() - - B.SetName(A.UpdateName()) - B.desc = A.UpdateDesc() - - client.screen += B - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) + if(isnull(action.button)) + action.button = new /obj/screen/action_button(null, src, null, null, null, null, action) + action.button.SetName(action.UpdateName()) + action.button.desc = action.UpdateDesc() + action.button.update_icon() + action.button.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) + client.screen |= action.button if(button_number > 0) if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.InitialiseIcon(src) + hud_used.hide_actions_toggle = new(hud_used, src) hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) client.screen += hud_used.hide_actions_toggle @@ -1129,34 +1120,13 @@ default behaviour is: /mob/living/proc/get_seconds_until_next_special_ability_string() return ticks2readable(next_special_ability - world.time) -//Get species or synthetic temp if the mob is a FBP/robot. Used when a synthetic mob is exposed to a temp check. -//Essentially, used when a synthetic mob should act diffferently than a normal type mob. -/mob/living/get_temperature_threshold(var/threshold) - if(isSynthetic()) - switch(threshold) - if(COLD_LEVEL_1) - return SYNTH_COLD_LEVEL_1 - if(COLD_LEVEL_2) - return SYNTH_COLD_LEVEL_2 - if(COLD_LEVEL_3) - return SYNTH_COLD_LEVEL_3 - if(HEAT_LEVEL_1) - return SYNTH_HEAT_LEVEL_1 - if(HEAT_LEVEL_2) - return SYNTH_HEAT_LEVEL_2 - if(HEAT_LEVEL_3) - return SYNTH_HEAT_LEVEL_3 - else - CRASH("synthetic get_temperature_threshold() called with invalid threshold value.") - var/decl/species/my_species = get_species() - if(my_species) - return my_species.get_species_temperature_threshold(threshold) - return ..() - /mob/living/proc/handle_some_updates() //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle return life_tick <= 5 || !timeofdeath || (timeofdeath >= 5 && (world.time-timeofdeath) <= 10 MINUTES) +/mob/living/proc/check_dna() + dna?.check_integrity(src) + /mob/living/get_unique_enzymes() return unique_enzymes @@ -1205,12 +1175,12 @@ default behaviour is: var/list/overlays_to_add if(check_state_in_icon(overlay_state, surgery_icon)) var/image/flesh = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) - flesh.color = E.species.get_flesh_colour(src) + flesh.color = E.species.get_species_flesh_color(src) LAZYADD(overlays_to_add, flesh) overlay_state = "[base_state]-blood" if(check_state_in_icon(overlay_state, surgery_icon)) var/image/blood = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) - blood.color = E.species.get_blood_color(src) + blood.color = E.species.get_species_blood_color(src) LAZYADD(overlays_to_add, blood) overlay_state = "[base_state]-bones" if(check_state_in_icon(overlay_state, surgery_icon)) @@ -1286,4 +1256,260 @@ default behaviour is: //gets name from ID or PDA itself, ID inside PDA doesn't matter //Useful when player is being seen by other mobs /mob/living/proc/get_id_name(if_no_id = "Unknown") - return GetIdCard(exceptions = list(/obj/item/holder))?.registered_name || if_no_id \ No newline at end of file + return GetIdCard(exceptions = list(/obj/item/holder))?.registered_name || if_no_id + +/mob/living/get_default_temperature_threshold(threshold) + if(isSynthetic()) + switch(threshold) + if(COLD_LEVEL_1) + return SYNTH_COLD_LEVEL_1 + if(COLD_LEVEL_2) + return SYNTH_COLD_LEVEL_2 + if(COLD_LEVEL_3) + return SYNTH_COLD_LEVEL_3 + if(HEAT_LEVEL_1) + return SYNTH_HEAT_LEVEL_1 + if(HEAT_LEVEL_2) + return SYNTH_HEAT_LEVEL_2 + if(HEAT_LEVEL_3) + return SYNTH_HEAT_LEVEL_3 + else + CRASH("synthetic get_default_temperature_threshold() called with invalid threshold value.") + return ..() + +/mob/living/clean(clean_forensics = TRUE) + + SHOULD_CALL_PARENT(FALSE) + + for(var/obj/item/thing in get_held_items()) + thing.clean() + + var/obj/item/back = get_equipped_item(slot_back_str) + if(back) + back.clean() + + //flush away reagents on the skin + var/datum/reagents/touching_reagents = get_contact_reagents() + if(touching_reagents) + var/remove_amount = touching_reagents.maximum_volume * reagent_permeability() //take off your suit first + touching_reagents.remove_any(remove_amount) + + var/obj/item/mask = get_equipped_item(slot_wear_mask_str) + if(mask) + mask.clean() + + var/washgloves = TRUE + var/washshoes = TRUE + var/washmask = TRUE + var/washears = TRUE + var/washglasses = TRUE + + var/obj/item/suit = get_equipped_item(slot_wear_suit_str) + if(suit) + washgloves = !(suit.flags_inv & HIDEGLOVES) + washshoes = !(suit.flags_inv & HIDESHOES) + + var/obj/item/head = get_equipped_item(slot_head_str) + if(head) + washmask = !(head.flags_inv & HIDEMASK) + washglasses = !(head.flags_inv & HIDEEYES) + washears = !(head.flags_inv & HIDEEARS) + + if(mask) + if (washears) + washears = !(mask.flags_inv & HIDEEARS) + if (washglasses) + washglasses = !(mask.flags_inv & HIDEEYES) + + if(head) + head.clean() + + if(suit) + suit.clean() + else + var/obj/item/uniform = get_equipped_item(slot_w_uniform_str) + if(uniform) + uniform.clean() + + if(washgloves) + var/obj/item/gloves = get_equipped_item(slot_gloves_str) + if(gloves) + gloves.clean() + else + germ_level = 0 + + var/obj/item/shoes = get_equipped_item(slot_shoes_str) + if(shoes && washshoes) + shoes.clean() + + if(mask && washmask) + mask.clean() + + if(washglasses) + var/obj/item/glasses = get_equipped_item(slot_glasses_str) + if(glasses) + glasses.clean() + + if(washears) + var/obj/item/ear = get_equipped_item(slot_l_ear_str) + if(ear) + ear.clean() + ear = get_equipped_item(slot_r_ear_str) + if(ear) + ear.clean() + + var/obj/item/belt = get_equipped_item(slot_belt_str) + if(belt) + belt.clean() + + var/obj/item/gloves = get_equipped_item(slot_gloves_str) + if(gloves) + gloves.clean() + gloves.germ_level = 0 + for(var/organ_tag in get_held_item_slots()) + var/obj/item/organ/external/organ = get_organ(organ_tag) + if(organ) + organ.clean() + else + germ_level = 0 + update_equipment_overlay(slot_gloves_str, FALSE) + + if(!get_equipped_item(slot_shoes_str)) + var/static/list/clean_slots = list(BP_L_FOOT, BP_R_FOOT) + for(var/organ_tag in clean_slots) + var/obj/item/organ/external/organ = get_organ(organ_tag) + if(organ) + organ.clean() + update_equipment_overlay(slot_shoes_str) + + return TRUE + +/mob/living/proc/can_direct_mount(var/mob/user) + if(can_buckle && istype(user) && !user.incapacitated() && user == buckled_mob) + // TODO: Piloting skillcheck for hands-free moving? Stupid but amusing + for(var/obj/item/grab/reins in user.get_held_items()) + if(istype(reins.current_grab, /decl/grab/simple/control) && reins.get_affecting_mob() == src) + return TRUE + return FALSE + +/mob/living/handle_buckled_relaymove(var/datum/movement_handler/mh, var/mob/mob, var/direction, var/mover) + if(can_direct_mount(mob)) + if(HAS_STATUS(mob, STAT_CONFUSE)) + direction = turn(direction, pick(90, -90)) + SelfMove(direction) + return MOVEMENT_HANDLED + +/mob/living/show_buckle_message(var/mob/buckled, var/mob/buckling) + if(buckled == buckling) + visible_message(SPAN_NOTICE("\The [buckled] climbs onto \the [src].")) + else + visible_message(SPAN_NOTICE("\The [buckled] is lifted onto \the [src] by \the [buckling].")) + +/mob/living/show_unbuckle_message(var/mob/buckled, var/mob/buckling) + if(buckled == buckling) + visible_message(SPAN_NOTICE("\The [buckled] steps down from \the [src].")) + else + visible_message(SPAN_NOTICE("\The [buckled] is pulled off \the [src] by \the [buckling].")) + +/mob/living/buckle_mob(mob/living/M) + . = ..() + if(buckled_mob) + buckled_mob.reset_layer() + for(var/obj/item/grab/G in buckled_mob.get_held_items()) + if(G.get_affecting_mob() == src && !istype(G.current_grab, /decl/grab/simple/control)) + qdel(G) + +/mob/living/can_buckle_mob(var/mob/living/dropping) + . = ..() && stat == CONSCIOUS && !buckled && dropping.mob_size <= mob_size + +/mob/living/refresh_buckled_mob() + ..() + if(buckled_mob) + if(dir == SOUTH) + buckled_mob.layer = layer - 0.01 + else + buckled_mob.layer = layer + 0.01 + buckled_mob.plane = plane + +/mob/living/OnSimulatedTurfEntered(turf/T, old_loc) + T.add_dirt(0.5) + + HandleBloodTrail(T, old_loc) + + if(lying) + return + + var/turf_wet = T.get_wetness() + if(turf_wet <= 0) + return + + if(buckled || (MOVING_DELIBERATELY(src) && prob(min(100, 100/(turf_wet/10))))) + return + + // skillcheck for slipping + if(!prob(min(100, skill_fail_chance(SKILL_HAULING, 100, SKILL_MAX+1)/(3/turf_wet)))) + return + + var/slip_dist = 1 + var/slip_stun = 6 + var/floor_type = "wet" + + if(2 <= turf_wet) // Lube + floor_type = "slippery" + slip_dist = 4 + slip_stun = 10 + + // Dir check to avoid slipping up and down via ladders. + if(slip("the [floor_type] floor", slip_stun) && (dir in global.cardinal)) + for(var/i = 1 to slip_dist) + step(src, dir) + sleep(1) + +/mob/living/proc/HandleBloodTrail(turf/T, old_loc) + return + +/mob/living/proc/handle_general_grooming(user, obj/item/grooming/tool) + if(tool.grooming_flags & (GROOMABLE_BRUSH|GROOMABLE_COMB)) + visible_message(SPAN_NOTICE(tool.replace_message_tokens((user == src) ? tool.message_target_self_generic : tool.message_target_other_generic, user, src, tool))) + add_stressor(/datum/stressor/well_groomed, 5 MINUTES) + return TRUE + return FALSE + +/mob/living/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called. + return !length(pinned) && ..() + +/mob/living/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) + + LAZYREMOVE(embedded, implant) + + if(!LAZYLEN(get_visible_implants(0))) //Yanking out last object - removing verb. + verbs -= /mob/proc/yank_out_object + + for(var/obj/item/O in pinned) + if(O == implant) + LAZYREMOVE(pinned, O) + if(!LAZYLEN(pinned)) + anchored = FALSE + implant.dropInto(loc) + implant.add_blood(src) + implant.update_icon() + if(istype(implant,/obj/item/implant)) + var/obj/item/implant/imp = implant + imp.removed() + + if(!affected) //Grab the organ holding the implant. + for(var/obj/item/organ/external/organ in get_external_organs()) + for(var/obj/item/O in organ.implants) + if(O == implant) + affected = organ + break + if(affected) + LAZYREMOVE(affected.implants, implant) + for(var/datum/wound/wound in affected.wounds) + LAZYREMOVE(wound.embedded_objects, implant) + if(!surgical_removal) + affected.take_external_damage((implant.w_class * 3), 0, DAM_EDGE, "Embedded object extraction") + if(!BP_IS_PROSTHETIC(affected) && prob(implant.w_class * 5) && affected.sever_artery()) //I'M SO ANEMIC I COULD JUST -DIE-. + custom_pain("Something tears wetly in your [affected.name] as [implant] is pulled free!", 50, affecting = affected) + + return TRUE diff --git a/code/modules/mob/living/living_appearance.dm b/code/modules/mob/living/living_appearance.dm new file mode 100644 index 00000000000..9a1d54672b2 --- /dev/null +++ b/code/modules/mob/living/living_appearance.dm @@ -0,0 +1,73 @@ +/mob/living + var/list/mob_overlays[TOTAL_OVER_LAYERS] + var/list/mob_underlays[TOTAL_UNDER_LAYERS] + +/mob/living/update_icon() + ..() + compile_overlays() + +/mob/living/on_update_icon() + SHOULD_CALL_PARENT(TRUE) + ..() + cut_overlays() + if(auras) + for(var/obj/aura/aura as anything in auras) + var/image/A = new() + A.appearance = aura + add_overlay(A) + try_refresh_visible_overlays() + +/mob/living/proc/set_organ_sprite_accessory(var/accessory_type, var/accessory_category, var/accessory_color, var/organ_tag, var/skip_update = FALSE) + if(!accessory_category || !organ_tag) + return + var/obj/item/organ/external/organ = organ_tag && GET_EXTERNAL_ORGAN(src, organ_tag) + if(!organ) + return + if(!accessory_type) + accessory_type = organ.get_sprite_accessory_by_category(accessory_category) + if(accessory_type) + return organ.set_sprite_accessory(accessory_type, accessory_category, accessory_color, skip_update) + +/mob/living/proc/get_organ_sprite_accessory(var/accessory_type, var/organ_tag) + var/obj/item/organ/external/organ = organ_tag && GET_EXTERNAL_ORGAN(src, organ_tag) + return organ?.get_sprite_accessory_value(accessory_type) + +/mob/living/proc/get_organ_sprite_accessory_by_category(var/accessory_category, var/organ_tag) + var/obj/item/organ/external/organ = organ_tag && GET_EXTERNAL_ORGAN(src, organ_tag) + return organ?.get_sprite_accessory_by_category(accessory_category) + +/mob/living/proc/set_organ_sprite_accessory_by_category(var/accessory_type, var/accessory_category, var/accessory_color, var/preserve_colour = TRUE, var/preserve_type = TRUE, var/organ_tag, var/skip_update = FALSE) + var/obj/item/organ/external/organ = organ_tag && GET_EXTERNAL_ORGAN(src, organ_tag) + return organ?.set_sprite_accessory_by_category(accessory_type, accessory_category, accessory_color, preserve_colour, preserve_type, skip_update) + +/mob/living/proc/get_skin_colour() + return + +/mob/living/proc/set_skin_colour(var/new_color, var/skip_update = FALSE) + return get_skin_colour() != new_color + +/mob/living/proc/get_eye_colour() + return + +/mob/living/proc/set_eye_colour(var/new_color, var/skip_update = FALSE) + return get_eye_colour() != new_color + +/mob/living/get_all_current_mob_overlays() + return mob_overlays + +/mob/living/set_current_mob_overlay(var/overlay_layer, var/image/overlay, var/redraw_mob = TRUE) + mob_overlays[overlay_layer] = overlay + ..() + +/mob/living/get_current_mob_overlay(var/overlay_layer) + return mob_overlays[overlay_layer] + +/mob/living/get_all_current_mob_underlays() + return mob_underlays + +/mob/living/set_current_mob_underlay(var/underlay_layer, var/image/underlay, var/redraw_mob = TRUE) + mob_underlays[underlay_layer] = underlay + ..() + +/mob/living/get_current_mob_underlay(var/underlay_layer) + return mob_underlays[underlay_layer] diff --git a/code/modules/mob/living/living_attackhand.dm b/code/modules/mob/living/living_attackhand.dm index 2958ceb4b6a..14b602b6991 100644 --- a/code/modules/mob/living/living_attackhand.dm +++ b/code/modules/mob/living/living_attackhand.dm @@ -1,4 +1,7 @@ /mob/living/attack_hand(mob/user) + // Allow grabbing a mob that you are buckled to, so that you can generate a control grab (for riding). + if(buckled == user && user.a_intent == I_GRAB) + return try_make_grab(user) return ..() || (user && default_interaction(user)) /mob/living/proc/default_interaction(var/mob/user) diff --git a/code/modules/mob/living/living_blood.dm b/code/modules/mob/living/living_blood.dm new file mode 100644 index 00000000000..343728061ca --- /dev/null +++ b/code/modules/mob/living/living_blood.dm @@ -0,0 +1,41 @@ +//Transfers blood from container to vessels +/mob/living/proc/inject_blood(var/amount, var/datum/reagents/donor) + var/decl/species/my_species = get_species() + if(!my_species?.blood_volume) + return //Don't divide by 0 + var/injected_data = REAGENT_DATA(donor, my_species.blood_reagent) + var/chems = LAZYACCESS(injected_data, "trace_chem") + for(var/C in chems) + add_to_reagents(C, (text2num(chems[C]) / my_species.blood_volume) * amount)//adds trace chemicals to owner's blood + +/mob/living/get_blood_data() + + var/data = ..() + data["blood_DNA"] = get_unique_enzymes() + data["blood_type"] = get_blood_type() + var/species_name = get_species_name() + if(species_name) + data["species"] = species_name + + var/list/temp_chem = list() + for(var/R in reagents?.reagent_volumes) + temp_chem[R] = REAGENT_VOLUME(reagents, R) + data["trace_chem"] = temp_chem + data["dose_chem"] = chem_doses?.Copy() || list() + + if(isSynthetic()) + data["has_oxy"] = FALSE + data["blood_color"] = SYNTH_BLOOD_COLOR + else + data["has_oxy"] = get_blood_oxy() + data["blood_color"] = get_blood_color() + return data + +/mob/living/proc/is_blood_incompatible(their_blood_type) + var/decl/blood_type/my_blood = get_blood_type_by_name(get_blood_type()) + return !istype(my_blood) || !my_blood.can_take_donation_from(get_blood_type_by_name(their_blood_type)) + +/mob/living/get_gibber_type() + if(mob_size <= MOB_SIZE_TINY) + return isSynthetic() ? /obj/effect/decal/cleanable/blood/gibs/robot : /obj/effect/decal/cleanable/blood/gibs + return isSynthetic() ? /obj/effect/gibspawner/robot : /obj/effect/gibspawner/generic diff --git a/code/modules/mob/living/living_bodytemp.dm b/code/modules/mob/living/living_bodytemp.dm index 58a184891ab..eee7572b398 100644 --- a/code/modules/mob/living/living_bodytemp.dm +++ b/code/modules/mob/living/living_bodytemp.dm @@ -27,8 +27,8 @@ if (abs(body_temperature_difference) < 0.5) return //fuck this precision - var/cold_1 = get_temperature_threshold(COLD_LEVEL_1) - var/heat_1 = get_temperature_threshold(HEAT_LEVEL_1) + var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1) + var/heat_1 = get_mob_temperature_threshold(HEAT_LEVEL_1) if(bodytemperature < cold_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. var/nut_remove = 10 * DEFAULT_HUNGER_FACTOR if(get_nutrition() >= nut_remove) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. diff --git a/code/modules/mob/living/living_breath.dm b/code/modules/mob/living/living_breath.dm index 06a3150811d..24254f67401 100644 --- a/code/modules/mob/living/living_breath.dm +++ b/code/modules/mob/living/living_breath.dm @@ -34,7 +34,7 @@ if(ticks_since_last_successful_breath>0) //Suffocating so do not take a breath ticks_since_last_successful_breath-- if (prob(10) && !is_asystole() && active_breathe) //Gasp per 10 ticks? Sounds about right. - INVOKE_ASYNC(src, .proc/emote, "gasp") + INVOKE_ASYNC(src, PROC_REF(emote), "gasp") else //Okay, we can breathe, now check if we can get air var/volume_needed = get_breath_volume() @@ -57,8 +57,8 @@ // First handle being in a submerged environment. var/datum/gas_mixture/breath - var/turf/my_turf = get_turf(src) - if(istype(my_turf) && my_turf.is_flooded(lying)) + if(is_flooded(lying)) + var/turf/my_turf = get_turf(src) //Can we get air from the turf above us? var/can_breathe_air_above = FALSE @@ -151,4 +151,5 @@ if(internals_air && (internals_air.return_pressure() < loc_air.return_pressure())) // based on the assumption it has a one-way valve for gas release internals_air.merge(breath) return - loc_air.merge(breath) \ No newline at end of file + if(loc) + loc.merge_exhaled_volume(breath) diff --git a/code/modules/mob/living/living_damage.dm b/code/modules/mob/living/living_damage.dm new file mode 100644 index 00000000000..49d10739b83 --- /dev/null +++ b/code/modules/mob/living/living_damage.dm @@ -0,0 +1,23 @@ +/mob/living/setBruteLoss(var/amount) + adjustBruteLoss((amount * 0.5)-getBruteLoss()) + +/mob/living/getBruteLoss() + return get_max_health() - current_health + +/mob/living/adjustToxLoss(var/amount, var/do_update_health = TRUE) + adjustBruteLoss(amount * 0.5, do_update_health) + +/mob/living/setToxLoss(var/amount) + adjustBruteLoss((amount * 0.5)-getBruteLoss()) + +/mob/living/adjustFireLoss(var/amount, var/do_update_health = TRUE) + adjustBruteLoss(amount * 0.5, do_update_health) + +/mob/living/setFireLoss(var/amount) + adjustBruteLoss((amount * 0.5)-getBruteLoss()) + +/mob/living/adjustHalLoss(var/amount, var/do_update_health = TRUE) + adjustBruteLoss(amount * 0.5, do_update_health) + +/mob/living/setHalLoss(var/amount) + adjustBruteLoss((amount * 0.5)-getBruteLoss()) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index a4fb97c4ce4..04da122de18 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -44,6 +44,17 @@ var/list/impact_sounds = LAZYACCESS(P.impact_sounds, get_bullet_impact_effect_type(def_zone)) if(length(impact_sounds)) playsound(src, pick(impact_sounds), 75) + if(get_bullet_impact_effect_type(def_zone) != BULLET_IMPACT_MEAT) + return + if(!damage || P.damtype != BRUTE) + return + var/hit_dir = get_dir(P.starting, src) + var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir) + if(!QDELETED(B)) + B.icon_state = pick("dir_splatter_1","dir_splatter_2") + var/scale = min(1, round(mob_size / MOB_SIZE_MEDIUM, 0.1)) + B.set_scale(scale) + new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, get_blood_color()) /mob/living/get_bullet_impact_effect_type(var/def_zone) return BULLET_IMPACT_MEAT @@ -103,61 +114,79 @@ if(I.attack_message_name()) weapon_mention = " with [I.attack_message_name()]" if(effective_force) - visible_message("[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"][weapon_mention] by [user]!") + visible_message(SPAN_DANGER("\The [src] has been [DEFAULTPICK(I.attack_verb, "attacked")][weapon_mention] by [user]!")) else - visible_message("[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"][weapon_mention] by [user]!") - + visible_message(SPAN_WARNING("\The [src] has been [DEFAULTPICK(I.attack_verb, "attacked")][weapon_mention] by \the [user]!")) . = standard_weapon_hit_effects(I, user, effective_force, hit_zone) - - if(I.damtype == BRUTE && prob(33)) // Added blood for whacking non-humans too - var/turf/simulated/location = get_turf(src) - if(istype(location)) location.add_blood_floor(src) + if(I.damtype == BRUTE && prob(33)) + blood_splatter(get_turf(loc), src) //returns 0 if the effects failed to apply for some reason, 1 otherwise. /mob/living/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) if(effective_force) return apply_damage(effective_force, I.damtype, hit_zone, I.damage_flags(), used_weapon=I, armor_pen=I.armor_penetration) -//this proc handles being hit by a thrown atom /mob/living/hitby(var/atom/movable/AM, var/datum/thrownthing/TT) - ..() - - if(isliving(AM)) - var/mob/living/M = AM - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - if(skill_fail_prob(SKILL_COMBAT, 75)) - SET_STATUS_MAX(src, STAT_WEAK, rand(3,5)) - if(M.skill_fail_prob(SKILL_HAULING, 100)) - SET_STATUS_MAX(M, STAT_WEAK, rand(4,8)) - M.visible_message(SPAN_DANGER("\The [M] collides with \the [src]!")) + . = ..() + if(.) - if(!aura_check(AURA_TYPE_THROWN, AM, TT.speed)) - return + if(isliving(AM)) + var/mob/living/M = AM + playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) + if(skill_fail_prob(SKILL_COMBAT, 75)) + SET_STATUS_MAX(src, STAT_WEAK, rand(3,5)) + if(M.skill_fail_prob(SKILL_HAULING, 100)) + SET_STATUS_MAX(M, STAT_WEAK, rand(4,8)) + M.visible_message(SPAN_DANGER("\The [M] collides with \the [src]!")) - if(istype(AM,/obj/)) - var/obj/O = AM - var/dtype = O.damtype - var/throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) + if(!aura_check(AURA_TYPE_THROWN, AM, TT.speed)) + return FALSE - var/miss_chance = max(15*(TT.dist_travelled-2),0) + if(istype(AM, /obj)) + . = handle_thrown_obj_damage(AM, TT) - if (prob(miss_chance)) - visible_message("\The [O] misses [src] narrowly!") - return + if(!.) + process_momentum(AM, TT) - src.visible_message("\The [src] has been hit by \the [O].") - apply_damage(throw_damage, dtype, null, O.damage_flags(), O) +/mob/living/proc/handle_thrown_obj_damage(obj/O, datum/thrownthing/TT) - if(TT.thrower) - var/client/assailant = TT.thrower.client - if(assailant) - admin_attack_log(TT.thrower, src, "Threw \an [O] at the victim.", "Had \an [O] thrown at them.", "threw \an [O] at") + var/dtype = O.damtype + var/throw_damage = O.throwforce*(TT?.speed/THROWFORCE_SPEED_DIVISOR) + var/zone = BP_CHEST - if(O.can_embed() && (throw_damage > 5*O.w_class)) //Handles embedding for non-humans and simple_animals. - embed(O) + //check if we hit + var/miss_chance = max(15*(TT?.dist_travelled-2),0) + if(prob(miss_chance)) + visible_message(SPAN_NOTICE("\The [O] misses \the [src] completely!")) + return FALSE - process_momentum(AM, TT) + if (TT?.target_zone) + zone = check_zone(TT.target_zone, src) + else + zone = ran_zone() //Hits a random part of the body, -was already geared towards the chest + zone = get_zone_with_miss_chance(zone, src, miss_chance, ranged_attack=1) + + if(zone && TT?.thrower && TT.thrower != src) + var/shield_check = check_shields(throw_damage, O, TT.thrower, zone, "[O]") + if(shield_check == PROJECTILE_FORCE_MISS) + zone = null + else if(shield_check) + return FALSE + + // Mobs with organs can potentially be missing the targetted organ. + var/obj/item/organ/external/affecting + if(length(get_external_organs())) + affecting = (zone && GET_EXTERNAL_ORGAN(src, zone)) + if(!affecting) + visible_message(SPAN_NOTICE("\The [O] misses \the [src] narrowly!")) + return FALSE + + visible_message(SPAN_DANGER("\The [src] is hit [affecting ? "in \the [affecting.name] " : ""]by \the [O]!")) + if(TT?.thrower?.client) + admin_attack_log(TT.thrower, src, "Threw \an [O] at the victim.", "Had \an [O] thrown at them.", "threw \an [O] at") + try_embed_in_mob(O, zone, throw_damage, dtype, null, affecting, direction = TT.init_dir) + return TRUE /mob/living/momentum_power(var/atom/movable/AM, var/datum/thrownthing/TT) if(anchored || buckled) @@ -167,33 +196,59 @@ if(has_gravity() || check_space_footing()) . *= 0.5 -/mob/living/momentum_do(var/power, var/datum/thrownthing/TT, var/atom/movable/AM) - if(power >= 0.75) //snowflake to enable being pinned to walls - var/direction = TT.init_dir - throw_at(get_edge_target_turf(src, direction), min((TT.maxrange - TT.dist_travelled) * power, 10), throw_speed * min(power, 1.5), callback = CALLBACK(src,/mob/living/proc/pin_to_wall,AM,direction)) - visible_message(SPAN_DANGER("\The [src] staggers under the impact!"),SPAN_DANGER("You stagger under the impact!")) - return - - . = ..() - -/mob/living/proc/pin_to_wall(var/obj/O, var/direction) - if(!istype(O) || O.loc != src || !O.can_embed())//Projectile is suitable for pinning. - return - - var/turf/T = near_wall(direction,2) - - if(T) - forceMove(T) - visible_message(SPAN_DANGER("[src] is pinned to the wall by [O]!"),SPAN_DANGER("You are pinned to the wall by [O]!")) - src.anchored = TRUE - LAZYADD(pinned, O) - if(!LAZYISIN(embedded,O)) - embed(O) - -/mob/living/proc/embed(var/obj/O, var/def_zone=null, var/datum/wound/supplied_wound) - O.forceMove(src) - LAZYADD(embedded, O) - src.verbs += /mob/proc/yank_out_object +/mob/living/proc/try_embed_in_mob(obj/O, def_zone, embed_damage = 0, dtype = BRUTE, datum/wound/supplied_wound, obj/item/organ/external/affecting, direction) + + if(!istype(O)) + return FALSE + + if(!supplied_wound) + supplied_wound = apply_damage(embed_damage, dtype, def_zone, O.damage_flags(), O, O.armor_penetration) + + if(!O.can_embed()) + return FALSE + + if(!affecting) + affecting = get_organ(def_zone) + + if(affecting && supplied_wound?.is_open() && dtype == BRUTE) // Can't embed in a small bruise. + var/obj/item/I = O + var/sharp = is_sharp(I) + embed_damage *= (1 - get_blocked_ratio(def_zone, BRUTE, O.damage_flags(), O.armor_penetration, I.force)) + + //blunt objects should really not be embedding in things unless a huge amount of force is involved + var/embed_chance = embed_damage / (sharp ? I.w_class : (I.w_class*3)) + var/embed_threshold = (sharp ? 5 : 10) * I.w_class + var/sharp_embed_chance = embed_damage/(10*I.w_class)*100 + + //Sharp objects will always embed if they do enough damage. + //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold + if((sharp && prob(sharp_embed_chance)) || (embed_damage > embed_threshold && prob(embed_chance))) + affecting.embed_in_organ(I, supplied_wound = supplied_wound) + I.has_embedded(src) + . = TRUE + + // Simple embed for mobs with no limbs. + if(!. && !length(get_external_organs())) + O.forceMove(src) + if(isitem(O)) + var/obj/item/I = O + I.has_embedded(src) + . = TRUE + + // Allow a tick for throwing/striking to resolve. + if(. && direction) + addtimer(CALLBACK(src, PROC_REF(check_embed_pinning), O, direction), 1) + +/mob/living/proc/check_embed_pinning(obj/O, direction) + if(QDELETED(src) || QDELETED(O) || !isturf(loc) || !(O in embedded) || !direction) + return FALSE + var/turf/wall = get_step_resolving_mimic(loc, direction) + if(!istype(wall) || !wall.density) + return FALSE + LAZYDISTINCTADD(pinned, O) + visible_message("\The [src] is pinned to \the [wall] by \the [O]!") + // TODO: cancel all throwing and momentum after this point + return TRUE //This is called when the mob is thrown into a dense turf /mob/living/proc/turf_collision(var/turf/T, var/speed) @@ -222,23 +277,25 @@ if(!damage || !istype(user)) return - adjustBruteLoss(damage) admin_attack_log(user, src, "Attacked", "Was attacked", "attacked") src.visible_message("\The [user] has [attack_message] \the [src]!") + adjustBruteLoss(damage) user.do_attack_animation(src) - spawn(1) updatehealth() return 1 +/mob/living/proc/can_ignite() + return fire_stacks > 0 && !on_fire + /mob/living/proc/IgniteMob() - if(fire_stacks > 0 && !on_fire) - on_fire = 1 + if(can_ignite()) + on_fire = TRUE set_light(4, l_color = COLOR_ORANGE) update_fire() /mob/living/proc/ExtinguishMob() if(on_fire) - on_fire = 0 + on_fire = FALSE fire_stacks = 0 set_light(0) update_fire() @@ -269,14 +326,18 @@ var/turf/location = get_turf(src) location.hotspot_expose(fire_burn_temperature(), 50, 1) +/mob/living/proc/increase_fire_stacks(exposed_temperature) + if(fire_stacks <= 4 || fire_burn_temperature() < exposed_temperature) + adjust_fire_stacks(2) + /mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(status_flags & GODMODE) return //once our fire_burn_temperature has reached the temperature of the fire that's giving fire_stacks, stop adding them. //allow fire_stacks to go up to 4 for fires cooler than 700 K, since are being immersed in flame after all. - if(fire_stacks <= 4 || fire_burn_temperature() < exposed_temperature) - adjust_fire_stacks(2) + increase_fire_stacks(exposed_temperature) IgniteMob() + return ..() /mob/living/proc/get_cold_protection() return 0 @@ -299,7 +360,7 @@ /mob/living/lava_act(datum/gas_mixture/air, temperature, pressure) fire_act(air, temperature) FireBurn(0.4*vsc.fire_firelevel_multiplier, temperature, pressure) - . = (health <= 0) ? ..() : FALSE + . = (current_health <= 0) ? ..() : FALSE // called when something steps onto a mob // this handles mulebots and vehicles @@ -308,25 +369,37 @@ /mob/living/proc/solvent_act(var/severity, var/amount_per_item, var/solvent_power = MAT_SOLVENT_STRONG) + // TODO move this to a contact var or something. + if(solvent_power < MAT_SOLVENT_STRONG) + return + for(var/slot in global.standard_headgear_slots) var/obj/item/thing = get_equipped_item(slot) if(!istype(thing)) continue if(!thing.solvent_can_melt(solvent_power) || !try_unequip(thing)) - to_chat(src, SPAN_NOTICE("Your [thing] protects you from the solvent.")) + to_chat(src, SPAN_NOTICE("Your [thing.name] protects you from the solvent.")) return TRUE - to_chat(src, SPAN_DANGER("Your [thing] dissolves!")) + to_chat(src, SPAN_DANGER("Your [thing.name] dissolves!")) qdel(thing) severity -= amount_per_item if(severity <= 0) return TRUE - // TODO move this to a contact var or something. - if(solvent_power >= MAT_SOLVENT_STRONG) - var/screamed - for(var/obj/item/organ/external/affecting in get_external_organs()) - if(!screamed && affecting.can_feel_pain()) - screamed = TRUE - emote("scream") - affecting.status |= ORGAN_DISFIGURED - take_organ_damage(0, severity, override_droplimb = DISMEMBER_METHOD_ACID) + var/screamed + for(var/obj/item/organ/external/affecting in get_external_organs()) + if(!screamed && affecting.can_feel_pain()) + screamed = TRUE + emote(/decl/emote/audible/scream) + affecting.status |= ORGAN_DISFIGURED + take_organ_damage(0, severity, override_droplimb = DISMEMBER_METHOD_ACID) + +/mob/living/proc/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + var/list/checking_slots = get_held_items() + var/obj/item/suit = get_equipped_item(slot_wear_suit_str) + if(suit) + LAZYDISTINCTADD(checking_slots, suit) + for(var/obj/item/shield in checking_slots) + if(shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text)) + return TRUE + return FALSE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 4020796aa03..4ee63ac1c1f 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -5,8 +5,8 @@ abstract_type = /mob/living //Health and life related vars - var/maxHealth = 100 //Maximum health that should be possible. - var/health = 100 //A mob's health + max_health = 100 //Maximum health that should be possible. + current_health = INFINITY // A mob's current health. Set by update_health(). Defaults to INFINITY so mobs don't die on init. var/hud_updateflag = 0 @@ -66,3 +66,7 @@ var/original_genetic_seed var/unique_enzymes var/blood_type = "A+" + + // Used to track appearance descriptor datums. + // Currently only on humans due to the spaghetti code involved, TODO: generalize. + var/list/appearance_descriptors diff --git a/code/modules/mob/living/living_dreams.dm b/code/modules/mob/living/living_dreams.dm new file mode 100644 index 00000000000..53b15252827 --- /dev/null +++ b/code/modules/mob/living/living_dreams.dm @@ -0,0 +1,14 @@ +/mob/living + var/dreaming = FALSE + +/mob/living/proc/handle_dreams() + set waitfor = FALSE + if(!client || dreaming || !prob(5)) + return + dreaming = TRUE + for(var/i = 1 to rand(1,4)) + to_chat(src, SPAN_NOTICE("... [pick(SSlore.dreams)] ...")) + sleep(rand(4 SECONDS, 7 SECONDS)) + if(!HAS_STATUS(src, STAT_ASLEEP)) + break + dreaming = FALSE diff --git a/code/modules/mob/living/living_grabs.dm b/code/modules/mob/living/living_grabs.dm index e8eda8cec1d..b94afb4f0f4 100644 --- a/code/modules/mob/living/living_grabs.dm +++ b/code/modules/mob/living/living_grabs.dm @@ -1,13 +1,18 @@ -/mob/living/proc/can_grab(var/atom/movable/target, var/target_zone, var/defer_hand = FALSE) - if(!ismob(target) && target.anchored) - to_chat(src, SPAN_WARNING("\The [target] won't budge!")) - return FALSE +/mob/living/proc/check_grab_hand(defer_hand) if(defer_hand) if(!get_empty_hand_slot()) to_chat(src, SPAN_WARNING("Your hands are full!")) return FALSE else if(get_active_hand()) - to_chat(src, SPAN_WARNING("Your [parse_zone(get_active_hand())] is full!")) + to_chat(src, SPAN_WARNING("Your [parse_zone(get_active_held_item_slot())] is full!")) + return FALSE + return TRUE + +/mob/living/proc/can_grab(var/atom/movable/target, var/target_zone, var/defer_hand = FALSE) + if(!ismob(target) && target.anchored) + to_chat(src, SPAN_WARNING("\The [target] won't budge!")) + return FALSE + if(!check_grab_hand(defer_hand)) return FALSE if(LAZYLEN(grabbed_by)) to_chat(src, SPAN_WARNING("You cannot start grappling while already being grappled!")) @@ -25,7 +30,7 @@ return FALSE return TRUE -/mob/living/proc/make_grab(var/atom/movable/target, var/grab_tag = /decl/grab/simple, var/defer_hand = FALSE) +/mob/living/proc/make_grab(atom/movable/target, grab_tag = /decl/grab/simple, defer_hand = FALSE, force_grab_tag = FALSE) // Resolve to the 'topmost' atom in the buckle chain, as grabbing someone buckled to something tends to prevent further interaction. var/atom/movable/original_target = target @@ -60,3 +65,6 @@ /mob/living/ProcessGrabs() if(LAZYLEN(grabbed_by)) resist() + +/mob/living/give_control_grab(var/mob/living/M) + return (isliving(M) && M == buckled_mob) ? M.make_grab(src, /decl/grab/simple/control, force_grab_tag = TRUE) : ..() diff --git a/code/modules/mob/living/living_hallucinations.dm b/code/modules/mob/living/living_hallucinations.dm new file mode 100644 index 00000000000..c5e4d290f96 --- /dev/null +++ b/code/modules/mob/living/living_hallucinations.dm @@ -0,0 +1,52 @@ +/mob/living + var/hallucination_power = 0 + var/hallucination_duration = 0 + var/next_hallucination + var/list/_hallucinations + +/mob/living/proc/adjust_hallucination(duration, power) + hallucination_duration = max(0, hallucination_duration + duration) + hallucination_power = max(0, hallucination_power + power) + +/mob/living/proc/set_hallucination(duration, power) + hallucination_duration = max(hallucination_duration, duration) + hallucination_power = max(hallucination_power, power) + +/mob/living/proc/handle_hallucinations() + //Tick down the duration + hallucination_duration = max(0, hallucination_duration - 1) + //Adjust power if we have some chems that affect it + if(has_chemical_effect(CE_MIND, threshold_under = -1)) + hallucination_power = hallucination_power++ + else if(has_chemical_effect(CE_MIND, threshold_under = 0)) + hallucination_power = min(hallucination_power++, 50) + else if(has_chemical_effect(CE_MIND, 1)) + hallucination_duration = max(0, hallucination_duration - 1) + hallucination_power = max(hallucination_power - GET_CHEMICAL_EFFECT(src, CE_MIND), 0) + + //See if hallucination is gone + if(!hallucination_power) + hallucination_duration = 0 + return + if(!hallucination_duration) + hallucination_power = 0 + return + + if(!client || stat || world.time < next_hallucination) + return + if(has_chemical_effect(CE_MIND, 1) && prob(GET_CHEMICAL_EFFECT(src, CE_MIND)*40)) //antipsychotics help + return + var/hall_delay = rand(10,20) SECONDS + + if(hallucination_power < 50) + hall_delay *= 2 + next_hallucination = world.time + hall_delay + var/list/candidates = list() + for(var/T in subtypesof(/datum/hallucination)) + var/datum/hallucination/H = new T + if(H.can_affect(src)) + candidates += H + if(candidates.len) + var/datum/hallucination/H = pick(candidates) + H.holder = src + H.activate_hallucination() diff --git a/code/modules/mob/living/living_maneuvers.dm b/code/modules/mob/living/living_maneuvers.dm index 5637a34e83e..89a47a1f63b 100644 --- a/code/modules/mob/living/living_maneuvers.dm +++ b/code/modules/mob/living/living_maneuvers.dm @@ -15,16 +15,25 @@ if(!can_fall(location_override = check)) break if(check && check != loc) - addtimer(CALLBACK(src, /mob/living/proc/reflexive_maneuver_callback, lastloc, check), 0) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living, reflexive_maneuver_callback), lastloc, check), 0) return . = ..() /mob/living/proc/reflexive_maneuver_callback(var/turf/origin, var/turf/check) if(prepared_maneuver) - if(origin) + if(origin) // Used to avoid falling into open space. forceMove(get_turf(origin)) prepared_maneuver.perform(src, check, get_acrobatics_multiplier(prepared_maneuver), reflexively = TRUE) prepared_maneuver = null + maneuver_icon?.icon_state = "maneuver_off" + +/mob/living/proc/try_maneuver(var/atom/target) + if(prepared_maneuver && (isturf(target) || isturf(target.loc))) // Avoid trying to jump at your backpack contents. + prepared_maneuver.perform(src, get_turf(target), get_acrobatics_multiplier(prepared_maneuver)) + prepared_maneuver = null + maneuver_icon?.icon_state = "maneuver_off" + return TRUE + return FALSE /mob/living/verb/prepare_maneuver() set name = "Prepare To Maneuver" @@ -35,22 +44,34 @@ to_chat(src, SPAN_WARNING("You are unable to perform any maneuvers.")) return + var/list/maneuvers_by_name = list() var/list/maneuvers = list() for(var/maneuver in available_maneuvers) - maneuvers += GET_DECL(maneuver) + var/decl/maneuver/maneuver_decl = GET_DECL(maneuver) + maneuvers_by_name[maneuver_decl.name] = maneuver_decl + var/image/I = image(maneuver_decl.selection_icon, maneuver_decl.selection_icon_state) + I.name = capitalize(maneuver_decl.name) + maneuvers[maneuver_decl.name] = I - var/next_maneuver = input(src, "Select a maneuver.") as null|anything in maneuvers + var/next_maneuver = show_radial_menu(src, src, maneuvers, require_near = TRUE, radius = 42, tooltips = TRUE, check_locs = list(src), use_labels = TRUE) if(next_maneuver) - prepared_maneuver = next_maneuver + var/decl/maneuver/maneuver = maneuvers_by_name[next_maneuver] + if(!maneuver.can_be_used_by(src, null)) + return + prepared_maneuver = maneuver + maneuver_icon?.icon_state = "maneuver_on" to_chat(src, SPAN_NOTICE("You prepare to [prepared_maneuver.name].")) else prepared_maneuver = null + maneuver_icon?.icon_state = "maneuver_off" to_chat(src, SPAN_NOTICE("You are no longer preparing to perform a maneuver.")) /mob/living/proc/perform_maneuver(var/maneuver, var/atom/target) var/decl/maneuver/performing_maneuver = ispath(maneuver) ? GET_DECL(maneuver) : maneuver if(istype(performing_maneuver)) . = performing_maneuver.perform(src, target, get_acrobatics_multiplier(performing_maneuver)) + prepared_maneuver = null + maneuver_icon?.icon_state = "maneuver_off" /mob/living/proc/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver) return 1 diff --git a/code/modules/mob/living/living_organs.dm b/code/modules/mob/living/living_organs.dm index 7ab280144bf..39942b2bf1f 100644 --- a/code/modules/mob/living/living_organs.dm +++ b/code/modules/mob/living/living_organs.dm @@ -20,17 +20,23 @@ /mob/living/proc/has_internal_organs() return LAZYLEN(get_internal_organs()) > 0 +/mob/living/get_contained_matter() + . = ..() + for(var/obj/item/organ in get_organs()) + . = MERGE_ASSOCS_WITH_NUM_VALUES(., organ.get_contained_matter()) + //Can be called when we want to add an organ in a detached state or an attached state. -/mob/living/proc/add_organ(var/obj/item/organ/O, var/obj/item/organ/external/affected = null, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) +/mob/living/proc/add_organ(var/obj/item/organ/O, var/obj/item/organ/external/affected = null, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE, var/skip_health_update = FALSE) . = O.do_install(src, affected, in_place, update_icon, detached) //Only run install effects if we're not detached and we're not adding in place if(!in_place && !(O.status & ORGAN_CUT_AWAY)) on_gained_organ(O) - updatehealth() + if(!skip_health_update) + update_health() return TRUE //Can be called when the organ is detached or attached. -/mob/living/proc/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = FALSE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE) +/mob/living/proc/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = FALSE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE) //Only run effects if we're not already detached, and we're not doing a in-place removal if(!in_place && !(O.status & ORGAN_CUT_AWAY)) //Gotta check the flag here, because of prosthetics handling detached state differently on_lost_organ(O) @@ -41,7 +47,8 @@ if(client) client.screen -= O - updatehealth() + if(!skip_health_update) + update_health() if(drop_organ) var/drop_loc = get_turf(src) @@ -67,6 +74,8 @@ /mob/living/proc/delete_organs() SHOULD_CALL_PARENT(TRUE) - var/list/organs = get_organs() - QDEL_LIST(organs) - return \ No newline at end of file + for(var/datum/organ in get_organs()) + if(istype(organ, /obj/item/organ/internal)) + var/obj/item/organ/internal/innard = organ + innard.transfer_brainmob_with_organ = FALSE // Don't boot our current client. + qdel(organ) diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm index e3dcb6505eb..8a4fcf94518 100644 --- a/code/modules/mob/living/living_powers.dm +++ b/code/modules/mob/living/living_powers.dm @@ -34,7 +34,7 @@ var/turf/T = get_turf(src) var/obj/effect/effect/water/chempuff/chem = new(T) chem.create_reagents(10) - chem.reagents.add_reagent(/decl/material/liquid/zombie, 2) + chem.add_to_reagents(/decl/material/liquid/zombie, 2) chem.set_up(get_step(T, dir), 2, 10) playsound(T, 'sound/hallucinations/wail.ogg', 20, 1) @@ -67,6 +67,6 @@ to_chat(target,"\The [src] scrapes your flesh from your bones!") to_chat(src,"You feed hungrily off \the [target]'s flesh.") target.adjustBruteLoss(25) - if(target.getBruteLoss() < -target.maxHealth) + if(target.getBruteLoss() < -target.get_max_health()) target.gib() src.adjustBruteLoss(-25) \ No newline at end of file diff --git a/code/modules/mob/living/living_status.dm b/code/modules/mob/living/living_status.dm index 1014107e700..11c01992201 100644 --- a/code/modules/mob/living/living_status.dm +++ b/code/modules/mob/living/living_status.dm @@ -13,7 +13,7 @@ if(amount == PENDING_STATUS(src, condition)) return FALSE LAZYSET(pending_status_counters, condition, amount) - addtimer(CALLBACK(src, .proc/apply_pending_status_changes), 0, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(apply_pending_status_changes)), 0, TIMER_UNIQUE) return TRUE /mob/living/proc/rebuild_status_markers() diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 5ef4b739097..db1058faccb 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -26,3 +26,6 @@ var/obj/item/held = inv_slot?.get_equipped_item() if(held) held.reconsider_client_screen_presence(client, slot) + + var/datum/extension/abilities/abilities = get_extension(src, /datum/extension/abilities) + abilities?.refresh_login() diff --git a/code/modules/mob/living/maneuvers/_maneuver.dm b/code/modules/mob/living/maneuvers/_maneuver.dm index e3effad6518..788c299aa2d 100644 --- a/code/modules/mob/living/maneuvers/_maneuver.dm +++ b/code/modules/mob/living/maneuvers/_maneuver.dm @@ -1,9 +1,21 @@ /decl/maneuver + abstract_type = /decl/maneuver var/name = "unnamed" var/delay = 2 SECONDS var/cooldown = 10 SECONDS var/stamina_cost = 10 var/reflexive_modifier = 1 + var/selection_icon = 'icons/screen/maneuver.dmi' + var/selection_icon_state + +/decl/maneuver/validate() + . = ..() + if(!selection_icon) + . += "no selection icon" + else if(!selection_icon_state) + . += "no selection icon_state" + else if(!check_state_in_icon(selection_icon_state, selection_icon)) + . += "selection icon_state [selection_icon_state] not found in icon [selection_icon]" /decl/maneuver/proc/can_be_used_by(var/mob/living/user, var/atom/target, var/silent = FALSE) if(!istype(user) || !user.can_do_maneuver(src, silent)) @@ -22,7 +34,7 @@ return FALSE if(user.is_on_special_ability_cooldown()) if(!silent) - to_chat(user, SPAN_WARNING("You cannot maneuver again for another [user.get_seconds_until_next_special_ability_string()]")) + to_chat(user, SPAN_WARNING("You cannot maneuver again for another [user.get_seconds_until_next_special_ability_string()].")) return FALSE if(user.get_stamina() < stamina_cost) if(!silent) diff --git a/code/modules/mob/living/maneuvers/maneuver_leap.dm b/code/modules/mob/living/maneuvers/maneuver_leap.dm index e148d33e705..5dd783f2765 100644 --- a/code/modules/mob/living/maneuvers/maneuver_leap.dm +++ b/code/modules/mob/living/maneuvers/maneuver_leap.dm @@ -2,6 +2,7 @@ name = "leap" stamina_cost = 10 reflexive_modifier = 1.5 + selection_icon_state = "leap" /decl/maneuver/leap/perform(var/mob/living/user, var/atom/target, var/strength, var/reflexively = FALSE) . = ..() @@ -15,8 +16,8 @@ user.jump_layer_shift() animate(user, pixel_z = 16, time = 3, easing = SINE_EASING | EASE_IN) animate(pixel_z = user.default_pixel_z, time = 3, easing = SINE_EASING | EASE_OUT) - user.throw_at(get_turf(target), strength, 1, user, FALSE, CALLBACK(src, /decl/maneuver/leap/proc/end_leap, user, target, old_pass_flags)) - addtimer(CALLBACK(user, /mob/living/proc/jump_layer_shift_end), 4.5) + user.throw_at(get_turf(target), strength, 1, user, FALSE, CALLBACK(src, TYPE_PROC_REF(/decl/maneuver/leap, end_leap), user, target, old_pass_flags)) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, jump_layer_shift_end)), 4.5) /decl/maneuver/leap/proc/end_leap(var/mob/living/user, var/atom/target, var/pass_flag) user.pass_flags = pass_flag @@ -29,6 +30,8 @@ if(.) var/can_leap_distance = user.get_jump_distance() * user.get_acrobatics_multiplier() . = (can_leap_distance > 0 && (!target || get_dist(user, target) <= can_leap_distance)) + if(!. && !silent) + to_chat(user, SPAN_WARNING("You cannot leap that far!")) /decl/maneuver/leap/spider stamina_cost = 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 50eee15f469..bef11669125 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -160,7 +160,7 @@ speaking = get_any_good_language(set_default=TRUE) if (!speaking) to_chat(src, SPAN_WARNING("You don't know a language and cannot speak.")) - emote("custom", AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.") + custom_emote(AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.") return if(handle_mob_specific_speech(message, message_mode, verb, speaking)) @@ -300,10 +300,10 @@ if(O) //It's possible that it could be deleted in the meantime. O.hear_talk(src, stars(message), verb, speaking) - INVOKE_ASYNC(GLOBAL_PROC, .proc/animate_speech_bubble, speech_bubble, speech_bubble_recipients | eavesdroppers, 30) - INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, speaking, italics, speech_bubble_recipients) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(animate_speech_bubble), speech_bubble, speech_bubble_recipients | eavesdroppers, 30) + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), message, speaking, italics, speech_bubble_recipients) if(length(eavesdroppers)) - INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, stars(message), speaking, italics, eavesdroppers) + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), stars(message), speaking, italics, eavesdroppers) if(whispering) log_whisper("[name]/[key] : [message]") @@ -317,4 +317,27 @@ return 1 /mob/proc/GetVoice() - return name + var/voice_sub + var/obj/item/rig/rig = get_rig() + if(rig?.speech?.voice_holder?.active && rig.speech.voice_holder.voice) + voice_sub = rig.speech.voice_holder.voice + + if(!voice_sub) + + var/list/check_gear = list(get_equipped_item(slot_wear_mask_str), get_equipped_item(slot_head_str)) + if(rig) + var/datum/extension/armor/rig/armor_datum = get_extension(rig, /datum/extension/armor) + if(istype(armor_datum) && armor_datum.sealed && rig.helmet == get_equipped_item(slot_head_str)) + check_gear |= rig + + for(var/obj/item/gear in check_gear) + if(!gear) + continue + var/obj/item/voice_changer/changer = locate() in gear + if(changer && changer.active && changer.voice) + voice_sub = changer.voice + + if(voice_sub) + return voice_sub + + return real_name diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f78d5049548..344e367a8fb 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -56,7 +56,11 @@ var/global/list/ai_verbs_default = list( density = TRUE status_flags = CANSTUN|CANPARALYSE|CANPUSH shouldnt_see = list(/obj/effect/rune) - maxHealth = 200 + max_health = 200 + + silicon_camera = /obj/item/camera/siliconcam/ai_camera + silicon_radio = /obj/item/radio/headset/heads/ai_integrated + var/obj/machinery/camera/camera = null var/list/connected_robots = list() var/aiRestorePowerRoutine = 0 @@ -65,9 +69,6 @@ var/global/list/ai_verbs_default = list( var/icon/holo_icon_longrange //Yellow hologram. var/holo_icon_malf = FALSE // for new hologram system var/obj/item/multitool/aiMulti = null - - silicon_camera = /obj/item/camera/siliconcam/ai_camera - silicon_radio = /obj/item/radio/headset/heads/ai_integrated var/obj/item/radio/headset/heads/ai_integrated/ai_radio var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through. @@ -103,7 +104,7 @@ var/global/list/ai_verbs_default = list( src.verbs -= ai_verbs_default src.verbs += /mob/living/verb/ghost -/mob/living/silicon/ai/Initialize(mapload, var/datum/ai_laws/L, var/obj/item/mmi/B, var/safety = 0) +/mob/living/silicon/ai/Initialize(mapload, var/datum/ai_laws/L, var/obj/item/organ/internal/brain_interface/B, var/safety = 0) announcement = new() announcement.title = "A.I. Announcement" announcement.announcement_type = "A.I. Announcement" @@ -143,11 +144,12 @@ var/global/list/ai_verbs_default = list( add_language(/decl/language/sign, 0) if(!safety)//Only used by AIize() to successfully spawn an AI. - if (!B)//If there is no player/brain inside. + var/mob/living/brainmob = B?.get_brainmob() + if(!brainmob) // If there is no player/brain inside. empty_playable_ai_cores += new/obj/structure/aicore/deactivated(loc)//New empty terminal. . = INITIALIZE_HINT_QDEL - else if(B.brainmob.mind) - B.brainmob.mind.transfer_to(src) + else if(brainmob.mind) + brainmob.mind.transfer_to(src) hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") @@ -678,7 +680,7 @@ var/global/list/custom_ai_icons_by_ckey_and_name = list() set name = "Rest" set category = "IC" - resting = 0 + resting = FALSE var/obj/item/rig/rig = src.get_rig() if(rig) rig.force_rest(src) diff --git a/code/modules/mob/living/silicon/ai/ai_damage.dm b/code/modules/mob/living/silicon/ai/ai_damage.dm index 087e8ecafcb..ae0a474b73a 100644 --- a/code/modules/mob/living/silicon/ai/ai_damage.dm +++ b/code/modules/mob/living/silicon/ai/ai_damage.dm @@ -12,17 +12,27 @@ /mob/living/silicon/ai/getOxyLoss() return oxyloss -/mob/living/silicon/ai/adjustFireLoss(var/amount) +/mob/living/silicon/ai/adjustFireLoss(var/amount, var/do_update_health = TRUE) if(status_flags & GODMODE) return - fireloss = max(0, fireloss + min(amount, health)) + fireloss = max(0, fireloss + min(amount, current_health)) + if(do_update_health) + update_health() -/mob/living/silicon/ai/adjustBruteLoss(var/amount) - if(status_flags & GODMODE) return - bruteloss = max(0, bruteloss + min(amount, health)) +/mob/living/silicon/ai/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + if(!(status_flags & GODMODE)) + bruteloss = max(0, bruteloss + min(amount, current_health)) + ..() -/mob/living/silicon/ai/adjustOxyLoss(var/amount) - if(status_flags & GODMODE) return - oxyloss = max(0, oxyloss + min(amount, maxHealth - oxyloss)) +/mob/living/silicon/ai/adjustOxyLoss(var/damage, var/do_update_health = TRUE) + if(!(status_flags & GODMODE)) + oxyloss = max(0, oxyloss + min(damage, get_max_health() - oxyloss)) + ..() + +/mob/living/silicon/ai/setBruteLoss(var/amount) + if(status_flags & GODMODE) + bruteloss = 0 + return + bruteloss = max(0, amount) /mob/living/silicon/ai/setFireLoss(var/amount) if(status_flags & GODMODE) @@ -36,22 +46,16 @@ return oxyloss = max(0, amount) -/mob/living/silicon/ai/updatehealth() - if(status_flags & GODMODE) - health = maxHealth - set_stat(CONSCIOUS) +/mob/living/silicon/ai/update_health() + . = ..() + if(!.) setOxyLoss(0) - else - health = maxHealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine. /mob/living/silicon/ai/rejuvenate() ..() add_ai_verbs(src) -// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss). +// Returns percentage of AI's remaining backup capacitor charge (max health - oxyloss). /mob/living/silicon/ai/proc/backup_capacitor() - return ((getOxyLoss() - maxHealth) / maxHealth) * (-100) - -// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss)) -/mob/living/silicon/ai/proc/hardware_integrity() - return (health / maxHealth) * 100 \ No newline at end of file + var/current_max_health = get_max_health() + return ((getOxyLoss() - current_max_health) / current_max_health) * (-100) diff --git a/code/modules/mob/living/silicon/ai/ai_radio.dm b/code/modules/mob/living/silicon/ai/ai_radio.dm index a4b198194e6..c9a32ee9cd3 100644 --- a/code/modules/mob/living/silicon/ai/ai_radio.dm +++ b/code/modules/mob/living/silicon/ai/ai_radio.dm @@ -12,7 +12,9 @@ /obj/item/encryptionkey/heads/ai_integrated name = "ai integrated encryption key" desc = "Integrated encryption key." - icon_state = "cap_cypherkey" + color = COLOR_GOLD + fill_color = COLOR_PALE_GOLD + inlay_color = COLOR_ROYAL_BLUE can_decrypt = list( access_bridge, access_security, diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index c6c1c363eda..9135ac2b3a9 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,20 +1,11 @@ -/mob/living/silicon/ai/death(gibbed, deathmessage, show_dead_message) - - if(stat == DEAD) - return - - if(src.eyeobj) - src.eyeobj.setLoc(get_turf(src)) - - - remove_ai_verbs(src) - - for(var/obj/machinery/ai_status_display/O in SSmachines.machinery) - O.mode = 2 - - if (istype(loc, /obj/item/aicard)) - var/obj/item/aicard/card = loc - card.update_icon() - - . = ..(gibbed,"gives one shrill beep before falling lifeless.", "You have suffered a critical system failure, and are dead.") - set_density(1) +/mob/living/silicon/ai/death(gibbed) + . = ..() + if(.) + eyeobj?.setLoc(get_turf(src)) + remove_ai_verbs(src) + for(var/obj/machinery/ai_status_display/O in SSmachines.machinery) + O.mode = 2 + if (istype(loc, /obj/item/aicard)) + var/obj/item/aicard/card = loc + card.update_icon() + set_density(TRUE) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 06d5c557536..7985307ca9e 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -1,50 +1,37 @@ -/mob/living/silicon/ai/Life() +/mob/living/silicon/ai/should_be_dead() + return get_health_percent() <= 0 || backup_capacitor() <= 0 - SHOULD_CALL_PARENT(FALSE) - - if (src.stat == DEAD) - return - - if (src.stat!=CONSCIOUS) +/mob/living/silicon/ai/handle_regular_status_updates() + . = ..() + if(stat != CONSCIOUS) src.cameraFollow = null src.reset_view(null) - src.updatehealth() - - if ((hardware_integrity() <= 0) || (backup_capacitor() <= 0)) - death() - return +/mob/living/silicon/ai/update_lying() + lying = FALSE +/mob/living/silicon/ai/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE // If our powersupply object was destroyed somehow, create new one. if(!psupply) create_powersupply() - - lying = 0 // Handle lying down - // We aren't shut down, and we lack external power. Try to fix it using the restoration routine. if (!self_shutdown && !has_power(0)) // AI's restore power routine is not running. Start it automatically. if(aiRestorePowerRoutine == AI_RESTOREPOWER_IDLE) aiRestorePowerRoutine = AI_RESTOREPOWER_STARTING handle_power_failure() - - handle_impaired_vision() update_power_usage() handle_power_oxyloss() - update_sight() - process_queued_alarms() - handle_regular_hud_updates() - switch(src.sensor_mode) if (SEC_HUD) process_sec_hud(src,0,src.eyeobj,get_computer_network()) if (MED_HUD) process_med_hud(src,0,src.eyeobj,get_computer_network()) - process_os() - handle_status_effects() - if(controlling_drone && stat != CONSCIOUS) controlling_drone.release_ai_control("WARNING: Primary control loop failure. Session terminated.") diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 57d377c45ce..19fd42dcd78 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,12 +1,23 @@ -/mob/living/silicon/gib() - ..("gibbed-r") - gibs(loc, gibber_type = /obj/effect/gibspawner/robot) +/mob/living/silicon/get_death_message(gibbed) + return "gives one shrill beep before falling lifeless." -/mob/living/silicon/dust() - ..("dust-r", /obj/item/remains/robot) +/mob/living/silicon/get_self_death_message(gibbed) + return "You have suffered a critical system failure, and are dead." -/mob/living/silicon/death(gibbed, deathmessage, show_dead_message) - if(in_contents_of(/obj/machinery/recharge_station))//exit the recharge station +/mob/living/silicon/get_dusted_remains() + return /obj/item/remains/robot + +/mob/living/silicon/get_gibbed_state(dusted) + return dusted ? "dust-r" : "gibbed-r" + +/mob/living/silicon/gib(do_gibs = TRUE) + var/turf/my_turf = get_turf(src) + . = ..(do_gibs = FALSE) + if(. && my_turf) + spawn_gibber(my_turf) + +/mob/living/silicon/death(gibbed) + . = ..() + if(. && in_contents_of(/obj/machinery/recharge_station))//exit the recharge station var/obj/machinery/recharge_station/RC = loc - RC.go_out() - return ..(gibbed, deathmessage, show_dead_message) \ No newline at end of file + RC.go_out() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm index 3f3e5e90fdc..0fb383db64b 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -106,7 +106,7 @@ var/list/channels = new() channels += MAIN_CHANNEL channels += additional_law_channels - for(var/datum/radio_channel/channel in silicon_radio.get_available_channels()) + for(var/datum/radio_channel/channel in silicon_radio?.get_available_channels()) channels |= channel.key channels += "Binary" return channels diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 6e2db95e39c..425e69b796e 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -1,13 +1,14 @@ -/mob/living/silicon/pai/death(gibbed, deathmessage, show_dead_message) - if(card) - card.removePersonality() - if(gibbed) - dropInto(loc) - qdel(card) - else - fold() - if(mind) - qdel(mind) - ..(gibbed, deathmessage, "You have suffered a critical system failure, and are dead.") - ghostize() - qdel(src) \ No newline at end of file +/mob/living/silicon/pai/death(gibbed) + . = ..() + if(.) + if(card) + card.removePersonality() + if(gibbed) + dropInto(loc) + qdel(card) + else + fold() + if(mind) + qdel(mind) + ghostize() + qdel(src) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index f3697bfefe9..60de69ab379 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -1,40 +1,16 @@ -/mob/living/silicon/pai/Life() - - SHOULD_CALL_PARENT(FALSE) - - if (src.stat == DEAD) - return - - if(src.cable) - if(get_dist(src, cable) > 1) - visible_message( \ - message = SPAN_NOTICE("The data cable rapidly retracts back into its spool."), \ - blind_message = SPAN_NOTICE("You hear a click and the sound of wire spooling rapidly.")) - QDEL_NULL(cable) - - handle_regular_hud_updates() - - if(src.secHUD == 1) - process_sec_hud(src, 1, network = get_computer_network()) - - if(src.medHUD == 1) - process_med_hud(src, 1, network = get_computer_network()) - +/mob/living/silicon/pai/handle_regular_hud_updates() + . = ..() + if(.) + if(src.secHUD == 1) + process_sec_hud(src, 1, network = get_computer_network()) + if(src.medHUD == 1) + process_med_hud(src, 1, network = get_computer_network()) + +/mob/living/silicon/pai/handle_regular_status_updates() + . = ..() process_os() // better safe than sorry, in case some pAI has it - - if(silence_time) - if(world.timeofday >= silence_time) - silence_time = null - to_chat(src, SPAN_NOTICE("Communication circuit reinitialized. Speech and messaging functionality restored.")) - - handle_status_effects() - - if(health <= 0) - death(null,"gives one shrill beep before falling lifeless.") - -/mob/living/silicon/pai/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - else - health = 100 - getBruteLoss() - getFireLoss() \ No newline at end of file + if(src.cable && get_dist(src, cable) > 1) + visible_message( \ + message = SPAN_NOTICE("The data cable rapidly retracts back into its spool."), \ + blind_message = SPAN_NOTICE("You hear a click and the sound of wire spooling rapidly.")) + QDEL_NULL(cable) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index f7ab6c949c2..c6a279205e3 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -34,6 +34,7 @@ var/global/list/possible_say_verbs = list( holder_type = /obj/item/holder idcard = /obj/item/card/id silicon_radio = null // pAIs get their radio from the card they belong to. + max_health = 100 os_type = /datum/extension/interactive/os/silicon/small starting_stock_parts = list( @@ -58,8 +59,6 @@ var/global/list/possible_say_verbs = list( var/pai_law0 = "Serve your master." var/pai_laws // String for additional operating instructions our master might give us - var/silence_time // Timestamp when we were silenced (normally via EMP burst), set to null after silence has faded - // Various software-specific vars var/secHUD = 0 // Toggles whether the Security HUD is active or not @@ -81,32 +80,40 @@ var/global/list/possible_say_verbs = list( chassis = global.possible_chassis[1] - set_extension(src, /datum/extension/base_icon_state, icon_state) status_flags |= NO_ANTAG - card = loc + if(!card) + if(istype(loc, /obj/item/paicard)) + card = loc + else + card.radio = new /obj/item/radio(card) + if(istype(card)) + if(!card.radio) + card.radio = new /obj/item/radio(card) + silicon_radio = card.radio + card.setPersonality(src) + else + return INITIALIZE_HINT_QDEL //As a human made device, we'll understand sol common without the need of the translator add_language(/decl/language/human/common, 1) - verbs -= /mob/living/verb/ghost . = ..() - if(card) - if(!card.radio) - card.radio = new /obj/item/radio(card) - silicon_radio = card.radio + software = default_pai_software.Copy() /mob/living/silicon/pai/Destroy() - card = null + if(card) + if(card.pai == src) + card.removePersonality() + card = null silicon_radio = null // Because this radio actually belongs to another instance we simply null . = ..() // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() - if(silence_time) - var/timeleft = round((silence_time - world.timeofday)/10 ,1) - stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]") + var/timeleft = round((HAS_STATUS(src, STAT_SILENCE) * SSmobs.wait) / 10, 1) + stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]") /mob/living/silicon/pai/Stat() . = ..() @@ -129,13 +136,13 @@ var/global/list/possible_say_verbs = list( // 33% chance to change prime directive (based on severity) // 33% chance of no additional effect - silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes + SET_STATUS_MAX(src, STAT_SILENCE, 2 MINUTES) to_chat(src, SPAN_DANGER("Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.")) if(prob(20)) visible_message( \ message = SPAN_DANGER("A shower of sparks spray from [src]'s inner workings!"), \ blind_message = SPAN_DANGER("You hear and smell the ozone hiss of electrical sparks being expelled violently.")) - return death(0) + return death() switch(pick(1,2,3)) if(1) @@ -210,14 +217,11 @@ var/global/list/possible_say_verbs = list( return if(loc == card) return - if(is_on_special_ability_cooldown()) return set_special_ability_cooldown(10 SECONDS) - // Move us into the card and move the card to the ground. resting = 0 - // If we are being held, handle removing our holder from their inv. var/obj/item/holder/H = loc if(istype(H)) @@ -225,14 +229,11 @@ var/global/list/possible_say_verbs = list( if(istype(M)) M.drop_from_inventory(H, get_turf(src)) dropInto(loc) - card.dropInto(card.loc) forceMove(card) - if (src && client) client.perspective = EYE_PERSPECTIVE client.eye = card - set_icon_state("[chassis]") is_in_card = TRUE var/turf/T = get_turf(src) if(istype(T)) @@ -240,15 +241,23 @@ var/global/list/possible_say_verbs = list( /mob/living/silicon/pai/lay_down() // Pass lying down or getting up to our pet human, if we're in a rig. - if(istype(src.loc,/obj/item/paicard)) - resting = 0 + if(istype(loc, /obj/item/paicard)) + resting = FALSE var/obj/item/rig/rig = src.get_rig() if(rig) rig.force_rest(src) else resting = !resting - icon_state = resting ? "[chassis]_rest" : "[chassis]" to_chat(src, SPAN_NOTICE("You are now [resting ? "resting" : "getting up"]")) + update_icon() + +/mob/living/silicon/pai/on_update_icon() + . = ..() + icon_state = ICON_STATE_WORLD + if(stat == DEAD) + icon_state = "[icon_state]-dead" + else if(resting) + icon_state = "[icon_state]-rest" //Overriding this will stop a number of headaches down the track. /mob/living/silicon/pai/attackby(obj/item/W, mob/user) @@ -266,7 +275,6 @@ var/global/list/possible_say_verbs = list( if(W.force) visible_message(SPAN_DANGER("[user] attacks [src] with [W]!")) adjustBruteLoss(W.force) - updatehealth() else visible_message(SPAN_WARNING("[user] bonks [src] harmlessly with [W].")) diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm index efc75877826..732261c052d 100644 --- a/code/modules/mob/living/silicon/pai/say.dm +++ b/code/modules/mob/living/silicon/pai/say.dm @@ -1,5 +1,5 @@ /mob/living/silicon/pai/say(var/msg) - if(silence_time) + if(HAS_STATUS(src, STAT_SILENCE)) to_chat(src, SPAN_WARNING("Communication circuits are disabled.")) return return ..(msg) diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index d55cb711c2b..72c1af676bb 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -33,16 +33,14 @@ var/global/list/default_pai_software = list() default_pai_software[P.id] = P return r -/mob/living/silicon/pai/Initialize() - . = ..() - software = default_pai_software.Copy() - /mob/living/silicon/pai/proc/paiInterface() ui_interact(src) /mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(user != src) - if(ui) ui.set_status(STATUS_CLOSE, 0) + + if(user != src || !istype(card)) + if(ui) + ui.set_status(STATUS_CLOSE, 0) return if(ui_key != "main") diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index c6b6eaf500f..c3187cfa3d9 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -12,7 +12,7 @@ w_class = ITEM_SIZE_SMALL throw_speed = 5 throw_range = 10 - origin_tech = "{'magnets':2,'biotech':1,'engineering':2}" + origin_tech = @'{"magnets":2,"biotech":1,"engineering":2}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -44,7 +44,7 @@ if("robot") var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() - user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.getHalLoss()]% functional"]") + user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.current_health - M.getHalLoss()]% functional"]") user.show_message("\t Key: Electronics/Brute", 1) user.show_message("\t Damage Specifics: [BU] - [BR]") if(M.stat == DEAD) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 245fce44990..c673d6b2301 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -1,4 +1,4 @@ -// TODO: remove the robot.mmi and robot.cell variables and completely rely on the robot component system +// TODO: remove the robot.central_processor and robot.cell variables and completely rely on the robot component system /datum/robot_component/var/name /datum/robot_component/var/installed = 0 @@ -17,8 +17,18 @@ // The wrapped device(e.g. radio), only set if external_type isn't null /datum/robot_component/var/obj/item/wrapped = null +SAVED_VAR(/datum/robot_component, installed) +SAVED_VAR(/datum/robot_component, powered) +SAVED_VAR(/datum/robot_component, toggled) +SAVED_VAR(/datum/robot_component, brute_damage) +SAVED_VAR(/datum/robot_component, electronics_damage) +SAVED_VAR(/datum/robot_component, owner) +SAVED_VAR(/datum/robot_component, external_type) +SAVED_VAR(/datum/robot_component, wrapped) + /datum/robot_component/New(mob/living/silicon/robot/R) - src.owner = R + if(R) + owner = R /datum/robot_component/proc/accepts_component(var/obj/item/thing) . = istype(thing, external_type) @@ -122,6 +132,8 @@ max_damage = 50 var/obj/item/cell/stored_cell = null +SAVED_VAR(/datum/robot_component/cell, stored_cell) + /datum/robot_component/cell/destroy() ..() stored_cell = owner.cell @@ -222,31 +234,34 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "working" material = /decl/material/solid/metal/steel - health = 30 + current_health = 30 max_health = 30 var/burn_damage = 0 var/brute_damage = 0 var/icon_state_broken = "broken" /obj/item/robot_parts/robot_component/check_health(lastdamage, lastdamtype, lastdamflags, consumed) + var/current_max_health = get_max_health() if(lastdamage > 0) if(lastdamtype == BRUTE) - brute_damage = clamp(lastdamage, 0, max_health) + brute_damage = clamp(lastdamage, 0, current_max_health) if(lastdamtype == BURN || lastdamtype == ELECTROCUTE) - burn_damage = clamp(lastdamage, 0, max_health) + burn_damage = clamp(lastdamage, 0, current_max_health) //Health works differently for this thing - health = clamp(max_health - (brute_damage + burn_damage), 0, max_health) + current_health = clamp(current_max_health - (brute_damage + burn_damage), 0, current_max_health) . = ..() /obj/item/robot_parts/robot_component/proc/set_bruteloss(var/amount) - brute_damage = clamp(amount, 0, max_health) - health = max_health - (brute_damage + burn_damage) + var/current_max_health = get_max_health() + brute_damage = clamp(amount, 0, current_max_health) + current_health = current_max_health - (brute_damage + burn_damage) check_health(amount, BRUTE) /obj/item/robot_parts/robot_component/proc/set_burnloss(var/amount) - burn_damage = clamp(amount, 0, max_health) - health = max_health - (brute_damage + burn_damage) + var/current_max_health = get_max_health() + burn_damage = clamp(amount, 0, current_max_health) + current_health = current_max_health - (brute_damage + burn_damage) check_health(amount, BURN) /obj/item/robot_parts/robot_component/physically_destroyed(skip_qdel) @@ -258,7 +273,7 @@ . = ..() /obj/item/robot_parts/robot_component/proc/is_functional() - return ((brute_damage + burn_damage) < max_health) + return ((brute_damage + burn_damage) < get_max_health()) /obj/item/robot_parts/robot_component/binary_communication_device name = "binary communication device" diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index c275e273f0f..43b602f2e72 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -1,13 +1,16 @@ -/mob/living/silicon/robot/dust() - //Delete the MMI first so that it won't go popping out. - if(mmi) - qdel(mmi) - ..() +/mob/living/silicon/robot/dust(do_gibs) + . = ..() + if(.) + clear_brain() -/mob/living/silicon/robot/death(gibbed,deathmessage, show_dead_message) - if(module) - for(var/obj/item/gripper/G in module.equipment) - G.drop_gripped_item() - locked = 0 - remove_robot_verbs() - ..(gibbed,"shudders violently for a moment, then becomes motionless, its eyes slowly darkening.", "You have suffered a critical system failure, and are dead.") +/mob/living/silicon/robot/get_death_message(gibbed) + return "shudders violently for a moment, then becomes motionless, its eyes slowly darkening." + +/mob/living/silicon/robot/death(gibbed) + . = ..() + if(.) + if(module) + for(var/obj/item/gripper/G in module.equipment) + G.drop_gripped_item() + locked = 0 + remove_robot_verbs() diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index ac2bc304c8f..043435c127d 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -2,8 +2,7 @@ name = "maintenance drone" real_name = "drone" icon = 'icons/mob/robots/drones/drone.dmi' - maxHealth = 35 - health = 35 + max_health = 35 cell_emp_mult = 1 universal_speak = FALSE universal_understand = TRUE @@ -47,7 +46,7 @@ default_language = /decl/language/binary/drone // NO BRAIN. - mmi = null + central_processor = null //We need to screw with their HP a bit. They have around one fifth as much HP as a full borg. for(var/V in components) if(V != "power cell") @@ -57,39 +56,37 @@ verbs -= /mob/living/silicon/robot/verb/Namepick update_icon() - events_repository.register(/decl/observ/moved, src, src, /mob/living/silicon/robot/drone/proc/on_moved) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/silicon/robot/drone, on_moved)) /mob/living/silicon/robot/drone/Destroy() - events_repository.unregister(/decl/observ/moved, src, src, /mob/living/silicon/robot/drone/proc/on_moved) + events_repository.unregister(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/silicon/robot/drone, on_moved)) . = ..() /mob/living/silicon/robot/drone/proc/on_moved(var/atom/movable/am, var/turf/old_loc, var/turf/new_loc) old_loc = get_turf(old_loc) new_loc = get_turf(new_loc) - if(!(old_loc && new_loc)) // Allows inventive admins to move drones between non-adjacent Z-levels by moving them to null space first I suppose return if(LEVELS_ARE_Z_CONNECTED(old_loc.z, new_loc.z)) return - // None of the tests passed, good bye - self_destruct() + gib() /mob/living/silicon/robot/drone/can_be_possessed_by(var/mob/observer/ghost/possessor) if(!istype(possessor) || !possessor.client || !possessor.ckey) - return 0 - if(!config.allow_drone_spawn) - to_chat(src, "Playing as drones is not currently permitted.") - return 0 + return FALSE + if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn)) + to_chat(possessor, SPAN_DANGER("Playing as drones is not currently permitted.")) + return FALSE if(too_many_active_drones()) - to_chat(src, "The maximum number of active drones has been reached..") - return 0 + to_chat(possessor, SPAN_DANGER("The maximum number of active drones has been reached.")) + return FALSE if(jobban_isbanned(possessor,ASSIGNMENT_ROBOT)) - to_chat(usr, "You are banned from playing synthetics and cannot spawn as a drone.") - return 0 + to_chat(possessor, SPAN_DANGER("You are banned from playing synthetics and cannot spawn as a drone.")) + return FALSE if(!possessor.MayRespawn(1,DRONE_SPAWN_DELAY)) - return 0 - return 1 + return FALSE + return TRUE /mob/living/silicon/robot/drone/do_possession(var/mob/observer/ghost/possessor) if(!(istype(possessor) && possessor.ckey)) @@ -137,7 +134,7 @@ //Redefining some robot procs... /mob/living/silicon/robot/drone/fully_replace_character_name(pickedName as text) - // Would prefer to call the grandparent proc but this isn't possible, so.. + // Would prefer to call the grandparent proc but this isn't possible, so... real_name = pickedName SetName(real_name) @@ -180,7 +177,7 @@ if(stat == DEAD) - if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave. + if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn) || emagged || should_be_dead()) //It's dead, Dave. to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.") return @@ -244,32 +241,10 @@ to_chat(src, SPAN_DANGER("ALERT: [user.real_name] is your new master. Obey your new laws and [G.his] commands.")) return 1 -//DRONE LIFE/DEATH -//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here. -/mob/living/silicon/robot/drone/updatehealth() - if(status_flags & GODMODE) - health = 35 - set_stat(CONSCIOUS) - return - health = 35 - (getBruteLoss() + getFireLoss()) - return - -//Easiest to check this here, then check again in the robot proc. -//Standard robots use config for crit, which is somewhat excessive for these guys. -//Drones killed by damage will gib. -/mob/living/silicon/robot/drone/handle_regular_status_updates() - if(health <= -35 && src.stat != DEAD) - self_destruct() - return - if(health <= 0 && src.stat != DEAD) - death() - return - ..() - -/mob/living/silicon/robot/drone/self_destruct() - timeofdeath = world.time - death() //Possibly redundant, having trouble making death() cooperate. - gib() +/mob/living/silicon/robot/drone/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + . = ..() + if(amount && should_be_dead() && stat == DEAD && !QDELETED(src)) + gib() //DRONE MOVEMENT. /mob/living/silicon/robot/drone/slip_chance(var/prob_slip) @@ -358,7 +333,7 @@ for(var/mob/living/silicon/robot/drone/D in global.silicon_mob_list) if(D.key && D.client) drones++ - return drones >= config.max_maint_drones + return drones >= get_config_value(/decl/config/num/max_maint_drones) /mob/living/silicon/robot/drone/show_laws(var/everyone = 0) if(!controlling_ai) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm index db105871c13..2e5a4d814c6 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm @@ -6,19 +6,21 @@ /mob/living/silicon/robot/drone/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/used_weapon = null) bruteloss += brute fireloss += burn + update_health() /mob/living/silicon/robot/drone/heal_overall_damage(var/brute, var/burn) - bruteloss -= brute fireloss -= burn - - if(bruteloss<0) bruteloss = 0 - if(fireloss<0) fireloss = 0 + if(bruteloss<0) + bruteloss = 0 + if(fireloss<0) + fireloss = 0 + update_health() /mob/living/silicon/robot/drone/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb) take_overall_damage(brute, burn) -/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE) +/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) heal_overall_damage(brute, burn) /mob/living/silicon/robot/drone/getFireLoss() 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 a4d759a82de..cef20e56fe9 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -76,12 +76,11 @@ can_hold = list( /obj/item/cell, /obj/item/stock_parts, - /obj/item/mmi, + /obj/item/organ/internal/brain_interface, /obj/item/robot_parts, /obj/item/borg/upgrade, /obj/item/flash, /obj/item/organ/internal/brain, - /obj/item/organ/internal/posibrain, /obj/item/stack/cable_coil, /obj/item/stock_parts/circuitboard, /obj/item/chems/glass, @@ -199,7 +198,7 @@ var/resolved = wrapped.resolve_attackby(target,user,params) //If resolve_attackby forces waiting before taking wrapped, we need to let it finish before doing the rest. - addtimer(CALLBACK(src, .proc/finish_using, target, user, params, force_holder, resolved), 0) + addtimer(CALLBACK(src, PROC_REF(finish_using), target, user, params, force_holder, resolved), 0) else if(istype(target,/obj/item)) //Check that we're not pocketing a mob. var/obj/item/I = target diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 8e53f6adbaf..da19e46697c 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -64,14 +64,14 @@ icon_state = "drone_fab_active" var/elapsed = world.time - time_last_drone - drone_progress = round((elapsed/config.drone_build_time)*100) + drone_progress = round((elapsed/get_config_value(/decl/config/num/drone_build_time))*100) if(drone_progress >= 100) visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.") /obj/machinery/drone_fabricator/examine(mob/user) . = ..() - if(produce_drones && drone_progress >= 100 && isghost(user) && config.allow_drone_spawn && count_drones() < config.max_maint_drones) + if(produce_drones && drone_progress >= 100 && isghost(user) && get_config_value(/decl/config/toggle/on/allow_drone_spawn) && count_drones() < get_config_value(/decl/config/num/max_maint_drones)) to_chat(user, "
    A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.") /obj/machinery/drone_fabricator/proc/create_drone(var/client/player) @@ -79,7 +79,7 @@ if(stat & NOPOWER) return - if(!produce_drones || !config.allow_drone_spawn || count_drones() >= config.max_maint_drones) + if(!produce_drones || !get_config_value(/decl/config/toggle/on/allow_drone_spawn) || count_drones() >= get_config_value(/decl/config/num/max_maint_drones)) return if(player && !isghost(player.mob)) @@ -110,7 +110,7 @@ to_chat(user, "The game hasn't started yet!") return - if(!(config.allow_drone_spawn)) + if(!get_config_value(/decl/config/toggle/on/allow_drone_spawn)) to_chat(user, "That verb is not currently permitted.") return @@ -118,7 +118,7 @@ to_chat(user, "You are banned from playing synthetics and cannot spawn as a drone.") return - if(config.use_age_restriction_for_jobs && isnum(user.client.player_age)) + if(get_config_value(/decl/config/num/use_age_restriction_for_jobs) && isnum(user.client.player_age)) if(user.client.player_age <= 3) to_chat(user, " Your account is not old enough to play as a maintenance drone.") return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm index 12e65e16e6a..9563d47d807 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm @@ -7,14 +7,14 @@ /mob/living/silicon/robot/drone/attack_ai(mob/living/silicon/ai/user) - if(!istype(user) || controlling_ai || !config.allow_drone_spawn) + if(!istype(user) || controlling_ai || !get_config_value(/decl/config/toggle/on/allow_drone_spawn)) return if(stat != DEAD || client || key) to_chat(user, SPAN_WARNING("You cannot take control of an autonomous, active drone.")) return - if(health < -35 || emagged) + if(current_health < -(get_max_health()) || emagged) to_chat(user, SPAN_WARNING("WARNING: connection timed out.")) return @@ -46,7 +46,7 @@ /obj/machinery/drone_fabricator/attack_ai(mob/living/silicon/ai/user) - if(!istype(user) || user.controlling_drone || !config.allow_drone_spawn) + if(!istype(user) || user.controlling_drone || !get_config_value(/decl/config/toggle/on/allow_drone_spawn)) return if(stat & NOPOWER) @@ -61,7 +61,7 @@ to_chat(user, "\The [src] is not ready to produce a new drone.") return - if(count_drones() >= config.max_maint_drones) + if(count_drones() >= get_config_value(/decl/config/num/max_maint_drones)) to_chat(user, "The drone control subsystems are tasked to capacity; they cannot support any more drones.") return @@ -70,15 +70,16 @@ /mob/living/silicon/robot/drone/death(gibbed) - if(controlling_ai) - release_ai_control("WARNING: remote system failure. Connection timed out.") - drone_silicon_radio = null - . = ..(gibbed) + . = ..() + if(.) + if(controlling_ai) + release_ai_control("WARNING: remote system failure. Connection timed out.") + drone_silicon_radio = null /mob/living/silicon/ai/death(gibbed) - if(controlling_drone) + . = ..() + if(. && controlling_drone) controlling_drone.release_ai_control("WARNING: Primary control loop failure. Session terminated.") - . = ..(gibbed) /mob/living/silicon/robot/drone/proc/release_ai_control_verb() set name = "Release Control" diff --git a/code/modules/mob/living/silicon/robot/flying/flying.dm b/code/modules/mob/living/silicon/robot/flying/flying.dm index b242c869bb7..42d6b717d93 100644 --- a/code/modules/mob/living/silicon/robot/flying/flying.dm +++ b/code/modules/mob/living/silicon/robot/flying/flying.dm @@ -21,7 +21,7 @@ components["comms"] = new/datum/robot_component/binary_communication(src) components["armour"] = new/datum/robot_component/armour/light(src) -/mob/living/silicon/robot/flying/Life() +/mob/living/silicon/robot/flying/handle_regular_status_updates() . = ..() if(incapacitated() || !is_component_functioning("actuator")) stop_flying() @@ -38,9 +38,9 @@ default_pixel_y = -8 stop_floating() -/mob/living/silicon/robot/flying/death() +/mob/living/silicon/robot/flying/death(gibbed) . = ..() - if(!QDELETED(src) && stat == DEAD) + if(. && !gibbed) stop_flying() /mob/living/silicon/robot/flying/Process_Spacemove() diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm index b5472458470..52bababd1ce 100644 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm +++ b/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm @@ -43,7 +43,7 @@ /obj/item/robot_module/flying/emergency/finalize_emag() . = ..() - emag.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 250) + emag.add_to_reagents(/decl/material/liquid/acid/polyacid, 250) emag.SetName("Polyacid spray") /obj/item/robot_module/flying/emergency/finalize_equipment() @@ -73,5 +73,5 @@ if(PS && PS.reagents.total_volume < PS.volume) var/adding = min(PS.volume-PS.reagents.total_volume, 2*amount) if(adding > 0) - PS.reagents.add_reagent(/decl/material/liquid/acid/polyacid, adding) + PS.add_to_reagents(/decl/material/liquid/acid/polyacid, adding) ..() diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm index 06d167b6f44..ed66d252a57 100644 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm +++ b/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm @@ -44,5 +44,5 @@ if(luminol.reagents.total_volume < luminol.volume) var/adding = min(luminol.volume-luminol.reagents.total_volume, 2*amount) if(adding > 0) - luminol.reagents.add_reagent(/decl/material/liquid/luminol, adding) + luminol.add_to_reagents(/decl/material/liquid/luminol, adding) ..() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 36a53530d03..8a661932583 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,38 +1,12 @@ -/mob/living/silicon/robot/Life() - - SHOULD_CALL_PARENT(FALSE) - - set invisibility = FALSE - set background = 1 - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - //Status updates, death etc. - clamp_values() - handle_regular_status_updates() - handle_actions() - - if(client) - handle_regular_hud_updates() - update_items() - if (src.stat != DEAD) //still using power - use_power() - process_killswitch() - process_locks() - process_queued_alarms() - process_os() - - handle_status_effects() - UpdateLyingBuckledAndVerbStatus() - -/mob/living/silicon/robot/proc/clamp_values() - set_status(STAT_PARA, min(GET_STATUS(src, STAT_PARA), 30)) - set_status(STAT_ASLEEP, 0) - adjustBruteLoss(0) - adjustToxLoss(0) - adjustOxyLoss(0) - adjustFireLoss(0) +/mob/living/silicon/robot/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE + use_power() + process_killswitch() + process_locks() + process_queued_alarms() + process_os() /mob/living/silicon/robot/proc/use_power() used_power_this_tick = 0 @@ -67,18 +41,20 @@ lights_on = 0 set_light(0) +/mob/living/silicon/robot/should_be_dead() + return current_health < get_config_value(/decl/config/num/health_health_threshold_dead) + /mob/living/silicon/robot/handle_regular_status_updates() - updatehealth() + SHOULD_CALL_PARENT(FALSE) + update_health() + set_status(STAT_PARA, min(GET_STATUS(src, STAT_PARA), 30)) if(HAS_STATUS(src, STAT_ASLEEP)) SET_STATUS_MAX(src, STAT_PARA, 3) if(resting) SET_STATUS_MAX(src, STAT_WEAK, 5) - if(health < config.health_threshold_dead && stat != DEAD) //die only once - death() - if (stat != DEAD) //Alive. // This previously used incapacitated(INCAPACITATION_DISRUPTED) but that was setting the robot to be permanently unconscious, which isn't ideal. if(!has_power || incapacitated(INCAPACITATION_STUNNED) || HAS_STATUS(src, STAT_PARA)) @@ -115,8 +91,9 @@ return 1 /mob/living/silicon/robot/handle_regular_hud_updates() - ..() - + . = ..() + if(!.) + return var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src) if(hud && hud.hud) hud.hud.process_hud(src) @@ -137,7 +114,7 @@ if (src.healths) if (src.stat != DEAD) if(isdrone(src)) - switch(health) + switch(current_health) if(35 to INFINITY) src.healths.icon_state = "health0" if(25 to 34) @@ -153,7 +130,7 @@ else src.healths.icon_state = "health6" else - switch(health) + switch(current_health) if(200 to INFINITY) src.healths.icon_state = "health0" if(150 to 200) @@ -165,7 +142,7 @@ if(0 to 50) src.healths.icon_state = "health4" else - if(health > config.health_threshold_dead) + if(current_health > get_config_value(/decl/config/num/health_health_threshold_dead)) src.healths.icon_state = "health5" else src.healths.icon_state = "health6" @@ -230,6 +207,7 @@ set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry) set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high) + update_items() return 1 /mob/living/silicon/robot/handle_vision() @@ -265,7 +243,7 @@ if (src.client) src.client.screen -= src.contents for(var/obj/I in src.contents) - if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/mmi))) + if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/organ/internal/brain_interface))) src.client.screen += I if(src.module_state_1) src.module_state_1:screen_loc = ui_inv1 @@ -300,6 +278,9 @@ if(on_fire) overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") -/mob/living/silicon/robot/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them - IgniteMob() +//Silicons don't gain stacks from hotspots, but hotspots can ignite them +/mob/living/silicon/increase_fire_stacks(exposed_temperature) + return + +/mob/living/silicon/can_ignite() + return !on_fire diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 8c66d4b590c..761f3e6d450 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -5,5 +5,3 @@ // Forces synths to select an icon relevant to their module if(!icon_selected && module) choose_icon(module.get_sprites_for(src)) - if(hands) - hands.icon_state = istype(module) ? lowertext(module.display_name) : "nomod" diff --git a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm b/code/modules/mob/living/silicon/robot/modules/module_clerical.dm index a716a3b158c..53f4cb60798 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_clerical.dm @@ -72,13 +72,13 @@ /obj/item/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() var/obj/item/chems/condiment/enzyme/E = locate() in equipment - E.reagents.add_reagent(/decl/material/liquid/enzyme, 2 * amount) + E.add_to_reagents(/decl/material/liquid/enzyme, 2 * amount) if(emag) var/obj/item/chems/drinks/bottle/small/beer/B = emag - B.reagents.add_reagent(/decl/material/liquid/ethanol/beer, amount * 0.4) - B.reagents.add_reagent(/decl/material/solid/ice, amount * 0.1) - B.reagents.add_reagent(/decl/material/liquid/paralytics, amount * 0.2) - B.reagents.add_reagent(/decl/material/liquid/sedatives, amount * 0.3) + B.add_to_reagents(/decl/material/liquid/ethanol/beer, amount * 0.4) + B.add_to_reagents(/decl/material/solid/ice, amount * 0.1) + B.add_to_reagents(/decl/material/liquid/paralytics, amount * 0.2) + B.add_to_reagents(/decl/material/liquid/sedatives, amount * 0.3) /obj/item/robot_module/clerical/general name = "clerical robot module" diff --git a/code/modules/mob/living/silicon/robot/modules/module_janitor.dm b/code/modules/mob/living/silicon/robot/modules/module_janitor.dm index 801ec08cb83..ae9d70e5a2b 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_janitor.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_janitor.dm @@ -25,7 +25,7 @@ /obj/item/robot_module/janitor/finalize_emag() . = ..() - emag.reagents.add_reagent(/decl/material/liquid/lube, 250) + emag.add_to_reagents(/decl/material/liquid/lube, 250) emag.SetName("Lube spray") /obj/item/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) @@ -34,4 +34,4 @@ LR.Charge(R, amount) if(emag) var/obj/item/chems/spray/S = emag - S.reagents.add_reagent(/decl/material/liquid/lube, 20 * amount) + S.add_to_reagents(/decl/material/liquid/lube, 20 * amount) diff --git a/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm b/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm index 012206fe5ee..eeb10eae170 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm @@ -116,7 +116,7 @@ /obj/item/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() var/obj/item/chems/spray/cleaner/drone/SC = locate() in equipment - SC.reagents.add_reagent(/decl/material/liquid/cleaner, 8 * amount) + SC.add_to_reagents(/decl/material/liquid/cleaner, 8 * amount) /obj/item/robot_module/drone/construction name = "construction drone module" diff --git a/code/modules/mob/living/silicon/robot/modules/module_medical.dm b/code/modules/mob/living/silicon/robot/modules/module_medical.dm index 26a0b11dcfd..c874dfb5c2a 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_medical.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_medical.dm @@ -70,7 +70,7 @@ /obj/item/robot_module/medical/surgeon/finalize_emag() . = ..() - emag.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 250) + emag.add_to_reagents(/decl/material/liquid/acid/polyacid, 250) emag.SetName("Polyacid spray") /obj/item/robot_module/medical/surgeon/finalize_synths() @@ -86,7 +86,7 @@ /obj/item/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) if(emag) var/obj/item/chems/spray/PS = emag - PS.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 2 * amount) + PS.add_to_reagents(/decl/material/liquid/acid/polyacid, 2 * amount) ..() /obj/item/robot_module/medical/crisis @@ -143,7 +143,7 @@ /obj/item/robot_module/medical/crisis/finalize_emag() . = ..() - emag.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 250) + emag.add_to_reagents(/decl/material/liquid/acid/polyacid, 250) emag.SetName("Polyacid spray") /obj/item/robot_module/medical/crisis/finalize_synths() @@ -166,5 +166,5 @@ S.update_icon() if(emag) var/obj/item/chems/spray/PS = emag - PS.reagents.add_reagent(/decl/material/liquid/acid/polyacid, 2 * amount) + PS.add_to_reagents(/decl/material/liquid/acid/polyacid, 2 * amount) ..() diff --git a/code/modules/mob/living/silicon/robot/modules/module_miner.dm b/code/modules/mob/living/silicon/robot/modules/module_miner.dm index 2ee0cfedd1c..0159e6038f4 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_miner.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_miner.dm @@ -25,7 +25,7 @@ /obj/item/wrench, /obj/item/screwdriver, /obj/item/storage/ore, - /obj/item/pickaxe/borgdrill, + /obj/item/tool/drill/advanced, /obj/item/storage/sheetsnatcher/borg, /obj/item/gripper/miner, /obj/item/scanner/mining, @@ -40,10 +40,10 @@ ) /obj/item/robot_module/miner/handle_emagged() - var/obj/item/pickaxe/D = locate(/obj/item/pickaxe/borgdrill) in equipment + var/obj/item/tool/drill/advanced/D = locate() in equipment if(D) equipment -= D qdel(D) - D = new /obj/item/pickaxe/diamonddrill(src) + D = new /obj/item/tool/drill/diamond(src) D.canremove = FALSE equipment += D diff --git a/code/modules/mob/living/silicon/robot/modules/module_security.dm b/code/modules/mob/living/silicon/robot/modules/module_security.dm index 1a2421bb265..9322a91f744 100644 --- a/code/modules/mob/living/silicon/robot/modules/module_security.dm +++ b/code/modules/mob/living/silicon/robot/modules/module_security.dm @@ -23,15 +23,12 @@ /obj/item/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() for(var/obj/item/gun/energy/T in equipment) - if(T && T.power_supply) - if(T.power_supply.charge < T.power_supply.maxcharge) - T.power_supply.give(T.charge_cost * amount) - T.update_icon() - else - T.charge_tick = 0 - var/obj/item/baton/robot/B = locate() in equipment - if(B && B.bcell) - B.bcell.give(amount) + var/obj/item/cell/power_supply = T.get_cell() + if(power_supply.charge < power_supply.maxcharge) + power_supply.give(T.charge_cost * amount) + update_icon() + else + T.charge_tick = 0 /obj/item/robot_module/security/general name = "security robot module" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1dc7351d5fe..e3cc8708cda 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -5,8 +5,7 @@ real_name = "robot" icon = 'icons/mob/robots/robot.dmi' icon_state = ICON_STATE_WORLD - maxHealth = 300 - health = 300 + max_health = 300 mob_sort_value = 4 z_flags = ZMM_MANGLE_PLANES @@ -35,13 +34,13 @@ //Hud stuff - var/obj/screen/inv1 = null - var/obj/screen/inv2 = null - var/obj/screen/inv3 = null + var/obj/screen/robot_module/one/inv1 + var/obj/screen/robot_module/two/inv2 + var/obj/screen/robot_module/three/inv3 var/obj/screen/robot_drop_grab/ui_drop_grab var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not - var/obj/screen/robot_modules_background + var/obj/screen/robot_modules_background/robot_modules_background //3 Modules can be activated at any one time. var/obj/item/robot_module/module = null @@ -61,7 +60,7 @@ // Components are basically robot organs. var/list/components = list() - var/obj/item/mmi/mmi = null + var/obj/item/organ/internal/central_processor var/opened = 0 var/emagged = 0 @@ -94,6 +93,37 @@ light_wedge = LIGHT_WIDE +SAVED_VAR(/mob/living/silicon/robot, lights_on) +SAVED_VAR(/mob/living/silicon/robot, sight_mode) +SAVED_VAR(/mob/living/silicon/robot, custom_name) +SAVED_VAR(/mob/living/silicon/robot, module_category) +SAVED_VAR(/mob/living/silicon/robot, module) +SAVED_VAR(/mob/living/silicon/robot, module_active) +SAVED_VAR(/mob/living/silicon/robot, module_state_1) +SAVED_VAR(/mob/living/silicon/robot, module_state_2) +SAVED_VAR(/mob/living/silicon/robot, module_state_3) +SAVED_VAR(/mob/living/silicon/robot, cell) +SAVED_VAR(/mob/living/silicon/robot, components) +SAVED_VAR(/mob/living/silicon/robot, central_processor) +SAVED_VAR(/mob/living/silicon/robot, opened) +SAVED_VAR(/mob/living/silicon/robot, emagged) +SAVED_VAR(/mob/living/silicon/robot, wiresexposed) +SAVED_VAR(/mob/living/silicon/robot, locked) +SAVED_VAR(/mob/living/silicon/robot, has_power) +SAVED_VAR(/mob/living/silicon/robot, ident) +SAVED_VAR(/mob/living/silicon/robot, modtype) +SAVED_VAR(/mob/living/silicon/robot, killswitch) +SAVED_VAR(/mob/living/silicon/robot, killswitch_time) +SAVED_VAR(/mob/living/silicon/robot, weapon_lock) +SAVED_VAR(/mob/living/silicon/robot, weaponlock_time) +SAVED_VAR(/mob/living/silicon/robot, lockcharge) +SAVED_VAR(/mob/living/silicon/robot, speed) +SAVED_VAR(/mob/living/silicon/robot, scrambledcodes) +SAVED_VAR(/mob/living/silicon/robot, tracking_entities) +SAVED_VAR(/mob/living/silicon/robot, braintype) +SAVED_VAR(/mob/living/silicon/robot, intenselight) +SAVED_VAR(/mob/living/silicon/robot, vtec) + /mob/living/silicon/robot/Initialize() . = ..() @@ -103,8 +133,7 @@ wires = new(src) - robot_modules_background = new() - robot_modules_background.icon_state = "block" + robot_modules_background = new(null, src) ident = random_id(/mob/living/silicon/robot, 1, 999) updatename(modtype) @@ -197,21 +226,15 @@ return amount return 0 -//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO -//Improved /N /mob/living/silicon/robot/Destroy() - if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. - if(mind) - mmi.dropInto(loc) - if(mmi.brainmob) - mind.transfer_to(mmi.brainmob) - else - to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.") - ghostize() - //ERROR("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].") - mmi = null + if(central_processor) + central_processor.dropInto(loc) + var/mob/living/brainmob = central_processor.get_brainmob() + if(mind && brainmob) + mind.transfer_to(brainmob) else - QDEL_NULL(mmi) + ghostize() + central_processor = null if(connected_ai) connected_ai.connected_robots -= src connected_ai = null @@ -282,12 +305,10 @@ if(prefix) modtype = prefix - if(istype(mmi, /obj/item/organ/internal/posibrain)) - braintype = "Robot" - else if(istype(mmi, /obj/item/mmi/digital/robot)) - braintype = "Drone" + if(istype(central_processor)) + braintype = central_processor.get_synthetic_owner_name() else - braintype = "Cyborg" + braintype = "Robot" var/changed_name = "" if(custom_name) @@ -497,7 +518,6 @@ if (WT.weld(0)) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) adjustBruteLoss(-30) - updatehealth() add_fingerprint(user) user.visible_message(SPAN_NOTICE("\The [user] has fixed some of the dents on \the [src]!")) else @@ -512,30 +532,36 @@ if (coil.use(1)) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) adjustFireLoss(-30) - updatehealth() user.visible_message(SPAN_NOTICE("\The [user] has fixed some of the burnt wires on \the [src]!")) else if(IS_CROWBAR(W) && user.a_intent != I_HURT) // crowbar means open or close the cover - we all know what a crowbar is by now if(opened) if(cell) - user.visible_message("\The [user] begins clasping shut \the [src]'s maintenance hatch.", "You begin closing up \the [src].") + + user.visible_message( + SPAN_NOTICE("\The [user] begins clasping shut \the [src]'s maintenance hatch."), + SPAN_NOTICE("You begin closing up \the [src].")) + if(do_after(user, 50, src)) - to_chat(user, "You close \the [src]'s maintenance hatch.") + to_chat(user, SPAN_NOTICE("You close \the [src]'s maintenance hatch.")) opened = 0 update_icon() else if(wiresexposed && wires.IsAllCut()) - //Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob. - if(!mmi) - to_chat(user, "\The [src] has no brain to remove.") + //Cell is out, wires are exposed, remove CPU, produce damaged chassis, baleet original mob. + if(!central_processor) + to_chat(user, "\The [src] has no central processor to remove.") return - user.visible_message("\The [user] begins ripping [mmi] from [src].", "You jam the crowbar into the robot and begin levering [mmi].") + user.visible_message( + SPAN_NOTICE("\The [user] begins ripping \the [central_processor] out of \the [src]."), + SPAN_NOTICE("You jam the crowbar into the robot and begin levering out \the [central_processor].")) + if(do_after(user, 50, src)) dismantle(user) else - // Okay we're not removing the cell or an MMI, but maybe something else? + // Okay we're not removing the cell or a CPU, but maybe something else? var/list/removable_components = list() for(var/V in components) if(V == "power cell") continue @@ -834,49 +860,18 @@ /mob/living/silicon/robot/proc/radio_menu() silicon_radio.interact(src)//Just use the radio's Topic() instead of bullshit special-snowflake code - /mob/living/silicon/robot/Move(a, b, flag) - . = ..() - - if(module) - if(module.type == /obj/item/robot_module/janitor) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - if (istype(tile, /turf/simulated)) - var/turf/simulated/S = tile - S.dirt = 0 - for(var/A in tile) - if(istype(A, /obj/effect)) - if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay)) - qdel(A) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(ishuman(A)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - var/obj/item/head = cleaned_human.get_equipped_item(slot_head_str) - if(head) - head.clean_blood() - var/obj/item/suit = cleaned_human.get_equipped_item(slot_wear_suit_str) - if(suit) - suit.clean_blood() - else - var/obj/item/uniform = cleaned_human.get_equipped_item(slot_w_uniform_str) - if(uniform) - uniform.clean_blood() - var/obj/item/shoes = cleaned_human.get_equipped_item(slot_shoes_str) - if(shoes) - shoes.clean_blood() - cleaned_human.clean_blood(1) - to_chat(cleaned_human, "[src] cleans your face!") - return - -/mob/living/silicon/robot/proc/self_destruct() - gib() - return + if(.) + if(module && isturf(loc)) + var/obj/item/storage/ore/orebag = locate() in list(module_state_1, module_state_2, module_state_3) + if(orebag) + loc.attackby(orebag, src) + if(istype(module, /obj/item/robot_module/janitor)) + loc.clean() + if(client) + var/turf/above = GetAbove(src) + up_hint.icon_state = "uphint[!!(above && TURF_IS_MIMICKING(above))]" /mob/living/silicon/robot/proc/UnlinkSelf() disconnect_from_ai() @@ -1103,7 +1098,10 @@ return ASSIGNMENT_ROBOT /mob/living/silicon/robot/handle_pre_transformation() - QDEL_NULL(mmi) + clear_brain() + +/mob/living/silicon/robot/proc/clear_brain() + QDEL_NULL(central_processor) /mob/living/silicon/robot/do_flash_animation() set waitfor = FALSE @@ -1133,3 +1131,36 @@ /mob/living/silicon/robot/try_breathe() return FALSE +/mob/living/silicon/robot/get_default_emotes() + var/static/list/default_emotes = list( + /decl/emote/audible/clap, + /decl/emote/visible/bow, + /decl/emote/visible/salute, + /decl/emote/visible/flap, + /decl/emote/visible/aflap, + /decl/emote/visible/twitch, + /decl/emote/visible/twitch_v, + /decl/emote/visible/dance, + /decl/emote/visible/nod, + /decl/emote/visible/shake, + /decl/emote/visible/glare, + /decl/emote/visible/look, + /decl/emote/visible/stare, + /decl/emote/visible/deathgasp_robot, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/synth, + /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/buzz, + /decl/emote/audible/synth/confirm, + /decl/emote/audible/synth/deny, + /decl/emote/audible/synth/security, + /decl/emote/audible/synth/security/halt + ) + return default_emotes + +/mob/living/silicon/robot/check_grab_hand() + if(locate(/obj/item/grab) in contents) + to_chat(src, SPAN_WARNING("You have already grabbed something!")) + return FALSE + return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index cb83947ce63..550429f8d68 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -1,11 +1,3 @@ -/mob/living/silicon/robot/updatehealth() - if(status_flags & GODMODE) - health = maxHealth - stat = CONSCIOUS - return - health = maxHealth - (getBruteLoss() + getFireLoss()) - return - /mob/living/silicon/robot/getBruteLoss() var/amount = 0 for(var/V in components) @@ -20,13 +12,14 @@ if(C.installed != 0) amount += C.electronics_damage return amount -/mob/living/silicon/robot/adjustBruteLoss(var/amount) +/mob/living/silicon/robot/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) // take/heal overall call update_health regardless of arg if(amount > 0) take_overall_damage(amount, 0) else heal_overall_damage(-amount, 0) -/mob/living/silicon/robot/adjustFireLoss(var/amount) +/mob/living/silicon/robot/adjustFireLoss(var/amount, var/do_update_health = TRUE) if(amount > 0) take_overall_damage(0, amount) else @@ -56,7 +49,7 @@ return C return 0 -/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE) +/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) var/list/datum/robot_component/parts = get_damaged_components(brute, burn) if(!parts.len) return var/datum/robot_component/picked = pick(parts) @@ -133,20 +126,16 @@ var/datum/robot_component/armour/A = get_armour() if(A) A.take_damage(brute,burn,sharp) - return - - while(parts.len && (brute>0 || burn>0) ) - var/datum/robot_component/picked = pick(parts) - - var/brute_was = picked.brute_damage - var/burn_was = picked.electronics_damage - - picked.take_damage(brute,burn) - - brute -= (picked.brute_damage - brute_was) - burn -= (picked.electronics_damage - burn_was) - - parts -= picked + else + while(parts.len && (brute>0 || burn>0) ) + var/datum/robot_component/picked = pick(parts) + var/brute_was = picked.brute_damage + var/burn_was = picked.electronics_damage + picked.take_damage(brute,burn) + brute -= (picked.brute_damage - brute_was) + burn -= (picked.electronics_damage - burn_was) + parts -= picked + update_health() /mob/living/silicon/robot/emp_act(severity) uneq_all() diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index f61cee15c28..d368c595b46 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -122,7 +122,7 @@ var/mode = 1 /obj/item/pen/robopen/make_pen_description() - desc = "\A [stroke_colour_name] [medium_name] printing attachment with a paper naming mode." + desc = "\A [stroke_color_name] [medium_name] printing attachment with a paper naming mode." /obj/item/pen/robopen/attack_self(mob/user) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index ff5553a8004..0ff911e5d0e 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -11,13 +11,6 @@ /mob/living/silicon/robot/get_jetpack() return locate(/obj/item/tank/jetpack) in module?.equipment -/mob/living/silicon/robot/Move() - . = ..() - if(. && client) - - var/turf/B = GetAbove(src) - up_hint.icon_state = "uphint[!!(B && TURF_IS_MIMICKING(B))]" - //No longer needed, but I'll leave it here incase we plan to re-use it. /mob/living/silicon/robot/get_movement_delay(var/travel_dir) var/tally = ..() //Incase I need to add stuff other than "speed" later @@ -27,4 +20,4 @@ if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) tally-=3 - return tally+config.robot_delay + return tally+get_config_value(/decl/config/num/movement_robot) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f9e406ec906..5b6a3437979 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -50,9 +50,9 @@ global.silicon_mob_list += src . = ..() - if(silicon_radio) + if(ispath(silicon_radio)) silicon_radio = new silicon_radio(src) - if(silicon_camera) + if(ispath(silicon_camera)) silicon_camera = new silicon_camera(src) for(var/T in starting_stock_parts) stock_parts += new T(src) @@ -140,16 +140,13 @@ return /mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) - if(!Proj.nodamage) switch(Proj.damage_type) if(BRUTE) adjustBruteLoss(Proj.damage) if(BURN) adjustFireLoss(Proj.damage) - Proj.on_hit(src,100) //wow this is a terrible hack - updatehealth() return 100 /mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) @@ -166,7 +163,7 @@ // this function shows the health of the AI in the Status panel /mob/living/silicon/proc/show_system_integrity() if(!src.stat) - stat(null, text("System integrity: [round((health/maxHealth)*100)]%")) + stat(null, text("System integrity: [get_health_percent()]%")) else stat(null, text("Systems nonfunctional")) @@ -193,9 +190,8 @@ //can't inject synths /mob/living/silicon/can_inject(var/mob/user, var/target_zone) - to_chat(user, "The armoured plating is too tough.") - return 0 - + to_chat(user, SPAN_WARNING("The armoured plating is too tough.")) + return FALSE //Silicon mob language procs @@ -377,7 +373,7 @@ qdel(mind.objectives) mind.assigned_special_role = null clear_antag_roles(mind) - ghostize(0) + ghostize(CORPSE_CANNOT_REENTER) qdel(src) /mob/living/silicon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) @@ -464,3 +460,15 @@ // This seems to be specifically to stop ghosted maintenance drones being used as free all-access cards. if(istype(idcard) && !stat && !(ckey && !client) && !is_type_in_list(idcard, exceptions)) LAZYDISTINCTADD(., idcard) + +/mob/living/silicon/get_total_life_damage() + return (getBruteLoss() + getFireLoss()) + +/mob/living/silicon/get_dexterity(var/silent) + return dexterity + +/mob/living/silicon/robot/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE, obj/item/organ/external/affected) + . = ..() + if(.) + adjustBruteLoss(5, do_update_health = FALSE) + adjustFireLoss(10) diff --git a/code/modules/mob/living/silicon/subsystems.dm b/code/modules/mob/living/silicon/subsystems.dm index be952b3df5e..fb03130e74d 100644 --- a/code/modules/mob/living/silicon/subsystems.dm +++ b/code/modules/mob/living/silicon/subsystems.dm @@ -30,7 +30,7 @@ if(/datum/nano_module/alarm_monitor/all in silicon_subsystems) for(var/datum/alarm_handler/AH in SSalarm.all_handlers) - AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) + AH.register_alarm(src, TYPE_PROC_REF(/mob/living/silicon, receive_alarm)) queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order /mob/living/silicon/proc/init_subsystem(var/subsystem_type) diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm index 2ff829b00dc..769a359969d 100644 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm +++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm @@ -3,8 +3,7 @@ desc = "A ferocious fish. May be too hardcore." icon = 'icons/mob/simple_animal/fish_carp.dmi' faction = "fishes" - maxHealth = 20 - health = 20 + max_health = 20 meat_type = /obj/item/chems/food/fish/carp /mob/living/simple_animal/hostile/retaliate/aquatic/carp/Initialize() diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm index 6e9debe9174..779afa840fe 100644 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm +++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm @@ -2,8 +2,7 @@ name = "small fish" desc = "Glub glub." faction = "fishes" - maxHealth = 10 - health = 10 + max_health = 10 mob_size = MOB_SIZE_TINY can_pull_size = 0 can_pull_mobs = 0 diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm index 5fd6d61494c..8e2ade73687 100644 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm +++ b/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm @@ -2,8 +2,7 @@ name = "shark" desc = "A ferocious fish with many, many teeth." icon = 'icons/mob/simple_animal/shark.dmi' - maxHealth = 150 - health = 150 + max_health = 150 natural_weapon = /obj/item/natural_weapon/bite/shark break_stuff_probability = 15 faction = "sharks" @@ -28,8 +27,7 @@ speed = 0 mob_size = MOB_SIZE_LARGE pixel_x = -16 - health = 400 - maxHealth = 400 + max_health = 400 harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/bite/giantshark break_stuff_probability = 35 diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm index e42bc8a005a..d0252a1d961 100644 --- a/code/modules/mob/living/simple_animal/constructs/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm @@ -2,7 +2,7 @@ name = "Construct" real_name = "Construct" desc = "" - speak = list("Hsssssssszsht.", "Hsssssssss...", "Tcshsssssssszht!") + emote_speech = list("Hsssssssszsht.", "Hsssssssss...", "Tcshsssssssszht!") speak_emote = list("hisses") emote_hear = list("wails","screeches") base_animal_type = /mob/living/simple_animal/construct @@ -43,6 +43,9 @@ var/list/construct_spells = list() +/mob/living/simple_animal/construct/check_has_mouth() + return FALSE + /mob/living/simple_animal/construct/on_defilement() return @@ -57,15 +60,21 @@ set_light(1.5, -2, COLOR_WHITE) update_icon() -/mob/living/simple_animal/construct/death(gibbed, deathmessage, show_dead_message) - new /obj/item/ectoplasm (src.loc) - ..(null,"collapses in a shattered heap.","The bonds tying you to this mortal plane have been severed.") - ghostize() - qdel(src) +/mob/living/simple_animal/construct/get_death_message(gibbed) + return "collapses in a shattered heap." + +/mob/living/simple_animal/construct/get_self_death_message(gibbed) + return "The bonds tying you to this mortal plane have been severed." + +/mob/living/simple_animal/construct/death(gibbed) + . = ..() + if(. && !gibbed) + new /obj/item/ectoplasm(src.loc) + qdel(src) /mob/living/simple_animal/construct/attack_animal(var/mob/user) if(istype(user, /mob/living/simple_animal/construct/builder)) - if(health < maxHealth) + if(current_health < get_max_health()) adjustBruteLoss(-5) user.visible_message("\The [user] mends some of \the [src]'s wounds.") else @@ -75,8 +84,9 @@ /mob/living/simple_animal/construct/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..(user) - if(health < maxHealth) - if(health >= maxHealth/2) + var/current_max_health = get_max_health() + if(current_health < current_max_health) + if(current_health >= current_max_health/2) to_chat(user, SPAN_WARNING("It looks slightly dented.")) else to_chat(user, SPAN_DANGER("It looks severely dented!")) @@ -98,8 +108,7 @@ real_name = "Juggernaut" desc = "A possessed suit of armour driven by the will of the restless dead" icon = 'icons/mob/simple_animal/construct_behemoth.dmi' - maxHealth = 250 - health = 250 + max_health = 250 speak_emote = list("rumbles") response_harm = "harmlessly punches" harm_intent_damage = 0 @@ -119,7 +128,7 @@ hitsound = 'sound/weapons/heavysmash.ogg' force = 30 -/mob/living/simple_animal/construct/armoured/Life() +/mob/living/simple_animal/construct/armoured/handle_regular_status_updates() set_status(STAT_WEAK, 0) if ((. = ..())) return @@ -156,8 +165,7 @@ real_name = "Wraith" desc = "A wicked bladed shell contraption piloted by a bound spirit" icon = 'icons/mob/simple_animal/construct_floating.dmi' - maxHealth = 75 - health = 75 + max_health = 75 natural_weapon = /obj/item/natural_weapon/wraith speed = -1 environment_smash = 1 @@ -181,8 +189,7 @@ real_name = "Artificer" desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies" icon = 'icons/mob/simple_animal/construct_artificer.dmi' - maxHealth = 50 - health = 50 + max_health = 50 response_harm = "viciously beaten" harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/cult_builder @@ -208,8 +215,7 @@ real_name = "Behemoth" desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal." icon = 'icons/mob/simple_animal/construct_behemoth.dmi' - maxHealth = 750 - health = 750 + max_health = 750 speak_emote = list("rumbles") response_harm = "harmlessly punches" harm_intent_damage = 0 @@ -232,8 +238,7 @@ real_name = "Harvester" desc = "The promised reward of the livings who follow Nar-Sie. Obtained by offering their bodies to the geometer of blood" icon = 'icons/mob/simple_animal/construct_harvester.dmi' - maxHealth = 150 - health = 150 + max_health = 150 natural_weapon = /obj/item/natural_weapon/harvester speed = -1 environment_smash = 1 @@ -252,79 +257,24 @@ force = 25 ////////////////HUD////////////////////// +/mob/living/simple_animal/construct/handle_regular_status_updates() + . = ..() + if(.) + silence_spells(purge) -/mob/living/simple_animal/construct/Life() +/mob/living/simple_animal/construct/handle_regular_hud_updates() . = ..() if(.) if(fire) fire.icon_state = "fire[!!fire_alert]" silence_spells(purge) - -/mob/living/simple_animal/construct/armoured/Life() - . = ..() - if(healths) - switch(health) - if(250 to INFINITY) healths.icon_state = "juggernaut_health0" - if(208 to 249) healths.icon_state = "juggernaut_health1" - if(167 to 207) healths.icon_state = "juggernaut_health2" - if(125 to 166) healths.icon_state = "juggernaut_health3" - if(84 to 124) healths.icon_state = "juggernaut_health4" - if(42 to 83) healths.icon_state = "juggernaut_health5" - if(1 to 41) healths.icon_state = "juggernaut_health6" - else healths.icon_state = "juggernaut_health7" - - -/mob/living/simple_animal/construct/behemoth/Life() - . = ..() - if(healths) - switch(health) - if(750 to INFINITY) healths.icon_state = "juggernaut_health0" - if(625 to 749) healths.icon_state = "juggernaut_health1" - if(500 to 624) healths.icon_state = "juggernaut_health2" - if(375 to 499) healths.icon_state = "juggernaut_health3" - if(250 to 374) healths.icon_state = "juggernaut_health4" - if(125 to 249) healths.icon_state = "juggernaut_health5" - if(1 to 124) healths.icon_state = "juggernaut_health6" - else healths.icon_state = "juggernaut_health7" - -/mob/living/simple_animal/construct/builder/Life() - . = ..() - if(healths) - switch(health) - if(50 to INFINITY) healths.icon_state = "artificer_health0" - if(42 to 49) healths.icon_state = "artificer_health1" - if(34 to 41) healths.icon_state = "artificer_health2" - if(26 to 33) healths.icon_state = "artificer_health3" - if(18 to 25) healths.icon_state = "artificer_health4" - if(10 to 17) healths.icon_state = "artificer_health5" - if(1 to 9) healths.icon_state = "artificer_health6" - else healths.icon_state = "artificer_health7" - - - -/mob/living/simple_animal/construct/wraith/Life() - . = ..() - if(healths) - switch(health) - if(75 to INFINITY) healths.icon_state = "wraith_health0" - if(62 to 74) healths.icon_state = "wraith_health1" - if(50 to 61) healths.icon_state = "wraith_health2" - if(37 to 49) healths.icon_state = "wraith_health3" - if(25 to 36) healths.icon_state = "wraith_health4" - if(12 to 24) healths.icon_state = "wraith_health5" - if(1 to 11) healths.icon_state = "wraith_health6" - else healths.icon_state = "wraith_health7" - - -/mob/living/simple_animal/construct/harvester/Life() - . = ..() - if(healths) - switch(health) - if(150 to INFINITY) healths.icon_state = "harvester_health0" - if(125 to 149) healths.icon_state = "harvester_health1" - if(100 to 124) healths.icon_state = "harvester_health2" - if(75 to 99) healths.icon_state = "harvester_health3" - if(50 to 74) healths.icon_state = "harvester_health4" - if(25 to 49) healths.icon_state = "harvester_health5" - if(1 to 24) healths.icon_state = "harvester_health6" - else healths.icon_state = "harvester_health7" + if(healths) + switch(current_health) + if(250 to INFINITY) healths.icon_state = "health0" + if(208 to 249) healths.icon_state = "health1" + if(167 to 207) healths.icon_state = "health2" + if(125 to 166) healths.icon_state = "health3" + if(84 to 124) healths.icon_state = "health4" + if(42 to 83) healths.icon_state = "health5" + if(1 to 41) healths.icon_state = "health6" + else healths.icon_state = "health7" diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm index cba1c3eed2f..c63f5a08009 100644 --- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm +++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm @@ -5,7 +5,7 @@ desc = "A strange, ridged chunk of some glassy red material. Achingly cold to the touch." w_class = ITEM_SIZE_SMALL slot_flags = SLOT_LOWER_BODY - origin_tech = "{'wormholes':4,'materials':4}" + origin_tech = @'{"wormholes":4,"materials":4}' material = /decl/material/solid/gemstone/crystal var/full = SOULSTONE_EMPTY var/is_evil = 1 @@ -45,16 +45,16 @@ /obj/item/soulstone/attackby(var/obj/item/I, var/mob/user) ..() if(is_evil && istype(I, /obj/item/nullrod)) - to_chat(user, "You cleanse \the [src] of taint, purging its shackles to its creator..") + to_chat(user, SPAN_NOTICE("You cleanse \the [src] of taint, purging its shackles to its creator.")) is_evil = 0 return if(I.force >= 5) if(full != SOULSTONE_CRACKED) - user.visible_message("\The [user] hits \the [src] with \the [I], and it breaks.[shade.client ? " You hear a terrible scream!" : ""]", "You hit \the [src] with \the [I], and it cracks.[shade.client ? " You hear a terrible scream!" : ""]", shade.client ? "You hear a scream." : null) + user.visible_message(SPAN_WARNING("\The [user] hits \the [src] with \the [I], and it breaks.[shade.client ? " You hear a terrible scream!" : ""]"), SPAN_WARNING("You hit \the [src] with \the [I], and it cracks.[shade.client ? " You hear a terrible scream!" : ""]"), shade.client ? "You hear a scream." : null) playsound(loc, 'sound/effects/Glasshit.ogg', 75) set_full(SOULSTONE_CRACKED) else - user.visible_message("\The [user] shatters \the [src] with \the [I]!") + user.visible_message(SPAN_DANGER("\The [user] shatters \the [src] with \the [I]!")) shatter() /obj/item/soulstone/attack(var/mob/living/simple_animal/M, var/mob/user) diff --git a/code/modules/mob/living/simple_animal/crow/crow.dm b/code/modules/mob/living/simple_animal/crow/crow.dm index 3aa1942d299..dbb6e6c6f9a 100644 --- a/code/modules/mob/living/simple_animal/crow/crow.dm +++ b/code/modules/mob/living/simple_animal/crow/crow.dm @@ -1,7 +1,7 @@ -/obj/item/storage/messenger - name = "messenger bag" +/obj/item/storage/backpack/messenger/corvid_couriers + name = "corvid messenger bag" desc = "A small green-grey messenger bag with a blue Corvid Couriers logo on it." - icon = 'icons/obj/items/messenger_bag.dmi' + icon = 'icons/obj/items/storage/backpack/corvid.dmi' icon_state = ICON_STATE_WORLD storage_slots = 7 w_class = ITEM_SIZE_SMALL @@ -15,10 +15,10 @@ pass_flags = PASS_FLAG_TABLE mob_size = MOB_SIZE_SMALL - speak = list("Caw.", "Caw?", "Caw!", "CAW.") - speak_emote = list("caws") - emote_hear = list("caws") - emote_see = list("hops") + emote_speech = list("Caw.", "Caw?", "Caw!", "CAW.") + speak_emote = list("caws") + emote_hear = list("caws") + emote_see = list("hops") natural_weapon = /obj/item/natural_weapon/crow_claws @@ -26,8 +26,16 @@ universal_speak = TRUE pass_flags = PASS_FLAG_TABLE - var/obj/item/storage/messenger/messenger_bag - var/obj/item/card/id/access_card + +/mob/living/simple_animal/crow/get_overlay_state_modifier() + return (stat == DEAD) ? "-dead" : null + +/decl/bodytype/animal/crow + name = "crow" + bodytype_category = "crow body" + +/mob/living/simple_animal/crow/get_bodytype() + return GET_DECL(/decl/bodytype/animal/crow) /obj/item/natural_weapon/crow_claws name = "claws" @@ -38,102 +46,40 @@ /mob/living/simple_animal/crow/Initialize() . = ..() - messenger_bag = new(src) + add_inventory_slot(new /datum/inventory_slot/back/simple) + add_inventory_slot(new /datum/inventory_slot/id) + add_held_item_slot(new /datum/inventory_slot/gripper/mouth/simple) + equip_to_slot_or_del(new /obj/item/storage/backpack/messenger/corvid_couriers(src), slot_back_str) update_icon() -/mob/living/simple_animal/crow/GetIdCards(list/exceptions) - . = ..() - if (istype(access_card) && !is_type_in_list(access_card, exceptions)) - LAZYDISTINCTADD(., access_card) - -/mob/living/simple_animal/crow/show_stripping_window(var/mob/user) - if(user.incapacitated()) - return - var/list/dat = list() - if(access_card) - dat += "ID: [access_card] (Remove)" - else - dat += "ID: Nothing" - if(messenger_bag) - dat += "Back: [messenger_bag] (Remove)" - else - dat += "Back: Nothing" - var/datum/browser/popup = new(user, "[name]", "Inventory of \the [name]", 350, 150, src) - popup.set_content(jointext(dat, "
    ")) - popup.open() +/mob/living/simple_animal/crow/get_dexterity(var/silent) + return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM) /mob/living/simple_animal/crow/DefaultTopicState() return global.physical_topic_state -/mob/living/simple_animal/crow/OnTopic(mob/user, href_list) - if(!ishuman(user)) - return ..() - if(href_list["remove_inv"]) - var/obj/item/removed - switch(href_list["remove_inv"]) - if("access cuff") - removed = access_card - access_card = null - if("back") - removed = messenger_bag - messenger_bag = null - if(removed) - removed.dropInto(loc) - usr.put_in_hands(removed) - visible_message("\The [usr] removes \the [removed] from \the [src]'s [href_list["remove_inv"]].") - show_stripping_window(usr) - update_icon() - else - to_chat(user, "There is nothing to remove from \the [src]'s [href_list["remove_inv"]].") - return TOPIC_HANDLED - if(href_list["add_inv"]) - var/obj/item/equipping = user.get_active_hand() - if(!equipping) - to_chat(user, "You have nothing in your hand to put on \the [src]'s [href_list["add_inv"]].") - return 0 - var/obj/item/equipped - var/checktype - switch(href_list["add_inv"]) - if("access cuff") - equipped = access_card - checktype = /obj/item/card/id - if("back") - equipped = messenger_bag - checktype = /obj/item/storage/messenger - if(equipped) - to_chat(user, "There is already something worn on \the [src]'s [href_list["add_inv"]].") - return TOPIC_HANDLED - if(!istype(equipping, checktype)) - to_chat(user, "\The [equipping] won't fit on \the [src]'s [href_list["add_inv"]].") - return TOPIC_HANDLED - switch(href_list["add_inv"]) - if("access cuff") - access_card = equipping - if("back") - messenger_bag = equipping - if(!user.try_unequip(equipping, src)) - return TOPIC_HANDLED - visible_message("\The [user] places \the [equipping] on to \the [src]'s [href_list["add_inv"]].") - update_icon() - show_stripping_window(user) - return TOPIC_HANDLED +// Let people interact with the Bird Storage. +/mob/living/simple_animal/crow/attack_hand(mob/user) + if(user.a_intent == I_HELP) + var/obj/item/backpack = get_equipped_item(slot_back_str) + if(backpack) + return backpack.attack_hand(user) return ..() -/mob/living/simple_animal/crow/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - . = ..() - if(Adjacent(src)) - if(messenger_bag) - if(messenger_bag.contents.len) - to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. There's something stuffed inside.") - else - to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. It seems to be empty.") - if(access_card) - to_chat(user, "It has an access cuff with \the [access_card] inserted.") +/mob/living/simple_animal/crow/attackby(obj/item/I, mob/user) + if(user.a_intent == I_HELP) + var/obj/item/backpack = get_equipped_item(slot_back_str) + if(backpack) + return backpack.attackby(I, user) + return ..() /mob/living/simple_animal/crow/on_update_icon() ..() - if(messenger_bag) - add_overlay("[icon_state]-bag") + var/obj/item/backpack = get_equipped_item(slot_back_str) + if(backpack) + var/overlay_state = "crow-[icon_state]-bag" + if(check_state_in_icon(overlay_state, backpack.icon)) + add_overlay(image(backpack.icon, overlay_state)) /mob/living/simple_animal/crow/cyber name = "cybercrow" diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm index 5778aa1450c..a2ef3e0f9c4 100644 --- a/code/modules/mob/living/simple_animal/familiars/familiars.dm +++ b/code/modules/mob/living/simple_animal/familiars/familiars.dm @@ -23,12 +23,8 @@ name = "carcinus" desc = "A small crab said to be made of stone and starlight." icon = 'icons/mob/simple_animal/evilcrab.dmi' - speak_emote = list("chitters","clicks") - - - health = 200 - maxHealth = 200 + max_health = 200 natural_weapon = /obj/item/natural_weapon/pincers/strong resistance = 9 can_escape = TRUE //snip snip @@ -44,16 +40,13 @@ desc = "A bigger, more magical cousin of the space carp." icon = 'icons/mob/simple_animal/spaceshark.dmi' pixel_x = -16 + offset_overhead_text_x = 16 speak_emote = list("gnashes") - - health = 100 - maxHealth = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/bite can_escape = TRUE - min_gas = null - wizardy_spells = list(/spell/aoe_turf/conjure/forcewall) /mob/living/simple_animal/familiar/pike/Process_Spacemove() @@ -64,14 +57,10 @@ desc = "Looking at it fills you with dread." icon = 'icons/mob/simple_animal/horror.dmi' speak_emote = list("moans", "groans") - response_help_1p = "You think better of touching $TARGET$." response_help_3p = "$USER$ thinks better of touching $TARGET$." - - health = 150 - maxHealth = 150 + max_health = 150 natural_weapon = /obj/item/natural_weapon/horror - wizardy_spells = list(/spell/targeted/torment) /obj/item/natural_weapon/horror @@ -80,13 +69,16 @@ damtype = BURN attack_verb = list("touched") -/mob/living/simple_animal/familiar/horror/death(gibbed, deathmessage, show_dead_message) - ..(null,"rapidly deteriorates","The bonds tying you to this mortal plane have been severed.") - - ghostize() - gibs(src.loc) - qdel(src) +/mob/living/simple_animal/familiar/horror/get_death_message(gibbed) + return "rapidly deteriorates" +/mob/living/simple_animal/familiar/horror/get_self_death_message(gibbed) + return "The bonds tying you to this mortal plane have been severed." +/mob/living/simple_animal/familiar/horror/death(gibbed) + . = ..() + if(. && !gibbed) + spawn_gibber(loc) + qdel(src) /mob/living/simple_animal/familiar/minor_amaros name = "minor amaros" @@ -94,8 +86,7 @@ icon = 'icons/mob/simple_animal/amaros.dmi' speak_emote = list("entones") mob_size = MOB_SIZE_SMALL - health = 25 - maxHealth = 25 + max_health = 25 wizardy_spells = list( /spell/targeted/heal_target, /spell/targeted/heal_target/area @@ -105,16 +96,12 @@ name = "elderly mouse" desc = "A small rodent. It looks very old." icon = 'icons/mob/simple_animal/mouse_gray.dmi' - speak_emote = list("squeeks") holder_type = /obj/item/holder/mouse pass_flags = PASS_FLAG_TABLE mob_size = MOB_SIZE_MINISCULE - response_harm = "stamps on" - - health = 15 - maxHealth = 15 + max_health = 15 natural_weapon = /obj/item/natural_weapon/bite/mouse can_escape = TRUE @@ -133,7 +120,6 @@ speak_emote = list("meows", "purrs") holder_type = /obj/item/holder mob_size = MOB_SIZE_SMALL - health = 25 - maxHealth = 25 + max_health = 25 natural_weapon = /obj/item/natural_weapon/claws/weak wizardy_spells = list(/spell/targeted/subjugation) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 9c0aca82923..a7b14f38725 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -3,11 +3,11 @@ name = "cat" desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." icon = 'icons/mob/simple_animal/cat_calico.dmi' - speak = list("Meow!","Esp!","Purr!","HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows","mews") - emote_see = list("shakes their head", "shivers") - speak_chance = 1 + emote_speech = list("Meow!","Esp!","Purr!","HSSSSS") + speak_emote = list("purrs", "meows") + emote_hear = list("meows","mews") + emote_see = list("shakes their head", "shivers") + speak_chance = 0.5 turns_per_move = 5 see_in_dark = 6 minbodytemp = 223 //Below -50 Degrees Celsius @@ -153,7 +153,7 @@ var/follow_dist = 4 if (friend.stat >= DEAD || friend.is_asystole()) //danger follow_dist = 1 - else if (friend.stat || friend.health <= 50) //danger or just sleeping + else if (friend.stat || friend.current_health <= 50) //danger or just sleeping follow_dist = 2 var/near_dist = max(follow_dist - 2, 1) var/current_dist = get_dist(src, friend) @@ -195,7 +195,7 @@ "brushes against [friend].", "rubs against [friend].", "purrs.")) - else if (friend.health <= 50) + else if (friend.current_health <= 50) if (prob(10)) var/verb = pick("meows", "mews", "mrowls") audible_emote("[verb] anxiously.") @@ -233,7 +233,7 @@ holder_type = /obj/item/holder/runtime /obj/item/holder/runtime - origin_tech = "{'programming':1,'biotech':1}" + origin_tech = @'{"programming":1,"biotech":1}' /mob/living/simple_animal/cat/kitten name = "kitten" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 38823335ca0..98ed703a94a 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -4,11 +4,11 @@ real_name = "corgi" desc = "It's a corgi." icon = 'icons/mob/simple_animal/corgi.dmi' - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") - speak_emote = list("barks", "woofs") - emote_hear = list("barks", "woofs", "yaps","pants") - emote_see = list("shakes its head", "shivers") - speak_chance = 1 + speak_emote = list("barks", "woofs") + emote_speech = list("YAP", "Woof!", "Bark!", "AUUUUUU") + emote_hear = list("barks", "woofs", "yaps","pants") + emote_see = list("shakes its head", "shivers") + speak_chance = 0.5 turns_per_move = 10 response_disarm = "bops" see_in_dark = 5 @@ -17,6 +17,7 @@ holder_type = /obj/item/holder/corgi pass_flags = PASS_FLAG_TABLE base_animal_type = /mob/living/simple_animal/corgi + can_buckle = TRUE meat_type = /obj/item/chems/food/meat/corgi meat_amount = 3 @@ -129,6 +130,7 @@ meat_amount = 1 skin_amount = 3 bone_amount = 3 + can_buckle = FALSE /mob/living/simple_animal/corgi/puppy/get_bodytype() return GET_DECL(/decl/bodytype/animal/puppy) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 764b7b281d4..a77bfb6becd 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -7,7 +7,7 @@ speak_emote = list("clicks") emote_hear = list("clicks") emote_see = list("clacks") - speak_chance = 1 + speak_chance = 0.5 turns_per_move = 5 response_harm = "stamps on" stop_automated_movement = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index cc12d9bd0d0..d2de8b3cb0c 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -3,15 +3,15 @@ name = "goat" desc = "Not known for their pleasant disposition." icon = 'icons/mob/simple_animal/goat.dmi' - speak = list("EHEHEHEHEH","eh?") - speak_emote = list("brays") - emote_hear = list("brays") - emote_see = list("shakes its head", "stamps a foot", "glares around") - speak_chance = 1 + speak_emote = list("brays") + emote_speech = list("EHEHEHEHEH","eh?") + emote_hear = list("brays") + emote_see = list("shakes its head", "stamps a foot", "glares around") + speak_chance = 0.5 turns_per_move = 5 see_in_dark = 6 faction = "goat" - health = 40 + max_health = 40 natural_weapon = /obj/item/natural_weapon/hooves meat_type = /obj/item/chems/food/meat/goat @@ -28,10 +28,9 @@ expected_type = /mob/living/simple_animal/hostile/retaliate/goat /datum/ai/goat/do_process(time_elapsed) - . = ..() - var/mob/living/simple_animal/hostile/retaliate/goat/goat = body //chance to go crazy and start wacking stuff + var/mob/living/simple_animal/hostile/retaliate/goat/goat = body if(!length(goat.enemies) && prob(1)) goat.Retaliate() @@ -66,9 +65,11 @@ QDEL_NULL(udder) . = ..() -/mob/living/simple_animal/hostile/retaliate/goat/handle_regular_status_updates() +/mob/living/simple_animal/hostile/retaliate/goat/handle_living_non_stasis_processes() . = ..() - if(. && stat == CONSCIOUS && udder && prob(5)) + if(!.) + return FALSE + if(stat == CONSCIOUS && udder && prob(5)) udder.add_reagent(/decl/material/liquid/drink/milk, rand(5, 10)) /mob/living/simple_animal/hostile/retaliate/goat/Retaliate() @@ -93,14 +94,14 @@ name = "cow" desc = "Known for their milk, just don't tip them over." icon = 'icons/mob/simple_animal/cow.dmi' - speak = list("moo?","moo","MOOOOOO") - speak_emote = list("moos","moos hauntingly") - emote_hear = list("brays") - emote_see = list("shakes its head") - speak_chance = 1 + speak_emote = list("moos","moos hauntingly") + emote_speech = list("moo?","moo","MOOOOOO") + emote_hear = list("brays") + emote_see = list("shakes its head") + speak_chance = 0.5 turns_per_move = 5 see_in_dark = 6 - health = 50 + max_health = 50 meat_type = /obj/item/chems/food/meat/beef meat_amount = 6 @@ -140,16 +141,18 @@ return TRUE . = ..() -/mob/living/simple_animal/cow/handle_regular_status_updates() +/mob/living/simple_animal/cow/handle_living_non_stasis_processes() . = ..() - if(. && udder && prob(5)) + if(!.) + return FALSE + if(udder && prob(5)) udder.add_reagent(/decl/material/liquid/drink/milk, rand(5, 10)) /mob/living/simple_animal/cow/default_disarm_interaction(mob/user) if(stat != DEAD && !HAS_STATUS(src, STAT_WEAK)) user.visible_message(SPAN_NOTICE("\The [user] tips over \the [src].")) SET_STATUS_MAX(src, STAT_WEAK, 30) - addtimer(CALLBACK(src, .proc/do_tip_response), rand(20, 50)) + addtimer(CALLBACK(src, PROC_REF(do_tip_response)), rand(20, 50)) return TRUE return ..() @@ -161,13 +164,13 @@ name = "chick" desc = "Adorable! They make such a racket though." icon = 'icons/mob/simple_animal/chick.dmi' - speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") - speak_emote = list("cheeps") - emote_hear = list("cheeps") - emote_see = list("pecks at the ground","flaps its tiny wings") - speak_chance = 2 + speak_emote = list("cheeps") + emote_speech = list("Cherp.","Cherp?","Chirrup.","Cheep!") + emote_hear = list("cheeps") + emote_see = list("pecks at the ground","flaps its tiny wings") + speak_chance = 1 turns_per_move = 2 - health = 1 + max_health = 1 pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE mob_size = MOB_SIZE_MINISCULE @@ -184,43 +187,55 @@ pixel_x = rand(-6, 6) pixel_y = rand(0, 10) -/mob/living/simple_animal/chick/Life() +/mob/living/simple_animal/chick/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE amount_grown += rand(1,2) if(amount_grown >= 100) - new /mob/living/simple_animal/chicken(src.loc) + new /mob/living/simple_animal/fowl/chicken(src.loc) qdel(src) -var/global/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 - -/mob/living/simple_animal/chicken - name = "chicken" - desc = "Hopefully the eggs are good this season." - icon = 'icons/mob/simple_animal/chicken_white.dmi' - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - speak_emote = list("clucks","croons") - emote_hear = list("clucks") - emote_see = list("pecks at the ground","flaps its wings viciously") - speak_chance = 2 - turns_per_move = 3 - health = 10 +/mob/living/simple_animal/fowl + max_health = 10 pass_flags = PASS_FLAG_TABLE mob_size = MOB_SIZE_SMALL - meat_type = /obj/item/chems/food/meat/chicken meat_amount = 2 skin_material = /decl/material/solid/organic/skin/feathers + speak_chance = 2 + turns_per_move = 3 + abstract_type = /mob/living/simple_animal/fowl + var/body_color +/mob/living/simple_animal/fowl/Initialize() + if(!default_pixel_x) + default_pixel_x = rand(-6, 6) + if(!default_pixel_y) + default_pixel_y = rand(0, 10) + . = ..() + +var/global/const/MAX_CHICKENS = 50 +var/global/chicken_count = 0 +/mob/living/simple_animal/fowl/chicken + name = "chicken" + desc = "Hopefully the eggs are good this season." + icon = 'icons/mob/simple_animal/chicken_white.dmi' + speak_emote = list("clucks","croons") + emote_speech = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") + emote_hear = list("clucks") + emote_see = list("pecks at the ground","flaps its wings viciously") var/eggsleft = 0 - var/body_color -/mob/living/simple_animal/chicken/Initialize() +/mob/living/simple_animal/fowl/chicken/Initialize() . = ..() if(!body_color) - body_color = pick( list("brown","black","white") ) + body_color = pick("brown", "black", "white") + update_icon() + global.chicken_count += 1 + +/mob/living/simple_animal/fowl/chicken/on_update_icon() + . = ..() switch(body_color) if("brown") icon = 'icons/mob/simple_animal/chicken_brown.dmi' @@ -228,30 +243,28 @@ var/global/chicken_count = 0 icon = 'icons/mob/simple_animal/chicken_black.dmi' else icon = 'icons/mob/simple_animal/chicken_white.dmi' - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - chicken_count += 1 -/mob/living/simple_animal/chicken/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - chicken_count -= 1 +/mob/living/simple_animal/fowl/chicken/death(gibbed) + . = ..() + if(.) + global.chicken_count -= 1 -/mob/living/simple_animal/chicken/attackby(var/obj/item/O, var/mob/user) +/mob/living/simple_animal/fowl/chicken/attackby(var/obj/item/O, var/mob/user) if(istype(O, /obj/item/chems/food/grown)) //feedin' dem chickens var/obj/item/chems/food/grown/G = O if(G.seed && G.seed.kitchen_tag == "wheat") if(!stat && eggsleft < 8) - user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.") + user.visible_message(SPAN_NOTICE("[user] feeds \the [O] to \the [src]! It clucks happily."), SPAN_NOTICE("You feed \the [O] to \the [src]! It clucks happily."), SPAN_NOTICE("You hear clucking.")) qdel(O) eggsleft += rand(1, 4) else - to_chat(user, "[name] doesn't seem hungry!") + to_chat(user, SPAN_NOTICE("\The [src] doesn't seem hungry!")) else - to_chat(user, "[name] doesn't seem interested in that.") + to_chat(user, "\The [src] doesn't seem interested in that.") else ..() -/mob/living/simple_animal/chicken/Life() +/mob/living/simple_animal/fowl/chicken/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE @@ -265,6 +278,31 @@ var/global/chicken_count = 0 E.amount_grown = 1 START_PROCESSING(SSobj, E) +/mob/living/simple_animal/fowl/duck + name = "duck" + desc = "It's a duck. Quack." + icon = 'icons/mob/simple_animal/duck_white.dmi' + speak_emote = list("quacks") + emote_speech = list("Wak!","Wak wak wak!","Wak wak.") + emote_hear = list("quacks") + emote_see = list("preens itself", "waggles its tail") + +/mob/living/simple_animal/fowl/duck/Initialize() + . = ..() + if(!body_color) + body_color = pick("brown", "mallard", "white") + update_icon() + +/mob/living/simple_animal/fowl/duck/on_update_icon() + . = ..() + switch(body_color) + if("brown") + icon = 'icons/mob/simple_animal/duck_brown.dmi' + if("mallard") + icon = 'icons/mob/simple_animal/duck_mallard.dmi' + else + icon = 'icons/mob/simple_animal/duck_white.dmi' + /obj/item/chems/food/egg var/amount_grown = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/koala.dm b/code/modules/mob/living/simple_animal/friendly/koala.dm index ecf21426047..773b78c75db 100644 --- a/code/modules/mob/living/simple_animal/friendly/koala.dm +++ b/code/modules/mob/living/simple_animal/friendly/koala.dm @@ -3,14 +3,13 @@ name = "koala" desc = "A little grey bear. How long is he gonna sleep today?" icon = 'icons/mob/simple_animal/koala.dmi' - maxHealth = 45 - health = 45 + max_health = 45 speed = 4 - speak = list("Rrr", "Wraarh...", "Pfrrr...") - speak_emote = list("roar") - emote_hear = list("grunting.","rustling.", "slowly yawns.") - emote_see = list("slowly turns around his head.", "rises to his feet, and lays to the ground on all fours.") - speak_chance = 1 + speak_emote = list("roar") + emote_speech = list("Rrr", "Wraarh...", "Pfrrr...") + emote_hear = list("grunting.","rustling.", "slowly yawns.") + emote_see = list("slowly turns around his head.", "rises to his feet, and lays to the ground on all fours.") + speak_chance = 0.5 turns_per_move = 10 //lazy see_in_dark = 6 stop_automated_movement_when_pulled = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index f625f22f154..f5e338c8515 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -3,8 +3,7 @@ desc = "A cute tiny lizard." icon = 'icons/mob/simple_animal/lizard.dmi' speak_emote = list("hisses") - health = 5 - maxHealth = 5 + max_health = 5 natural_weapon = /obj/item/natural_weapon/bite/weak response_harm = "stamps on" mob_size = MOB_SIZE_MINISCULE diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index d90551c6835..8d3371d848f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -3,16 +3,15 @@ real_name = "mouse" desc = "It's a small rodent." icon = 'icons/mob/simple_animal/mouse_gray.dmi' - speak = list("Squeek!","SQUEEK!","Squeek?") - speak_emote = list("squeeks","squeeks","squiks") - emote_hear = list("squeeks","squeaks","squiks") - emote_see = list("runs in a circle", "shakes", "scritches at something") + speak_emote = list("squeeks","squeeks","squiks") + emote_speech = list("Squeek!","SQUEEK!","Squeek?") + emote_hear = list("squeeks","squeaks","squiks") + emote_see = list("runs in a circle", "shakes", "scritches at something") pass_flags = PASS_FLAG_TABLE - speak_chance = 1 + speak_chance = 0.5 turns_per_move = 5 see_in_dark = 6 - health = 5 - maxHealth = 5 + max_health = 5 response_harm = "stamps on" density = FALSE minbodytemp = 223 //Below -50 Degrees Celsius @@ -37,7 +36,7 @@ var/body_color //brown, gray and white, leave blank for random var/splatted = FALSE -/mob/living/simple_animal/mouse/get_dexterity(var/silent = FALSE) +/mob/living/simple_animal/mouse/get_dexterity(var/silent) return DEXTERITY_NONE // Mice are troll bait, give them no power. /datum/ai/mouse @@ -50,14 +49,14 @@ playsound(mouse.loc, 'sound/effects/mousesqueek.ogg', 50) if(mouse.stat == CONSCIOUS && prob(0.5)) mouse.set_stat(UNCONSCIOUS) - mouse.wander = 0 + mouse.wander = FALSE mouse.speak_chance = 0 else if(mouse.stat == UNCONSCIOUS) if(prob(1)) mouse.set_stat(CONSCIOUS) - mouse.wander = 1 + mouse.wander = TRUE else if(prob(5)) - INVOKE_ASYNC(mouse, /mob/living/simple_animal/proc/audible_emote, "snuffles.") + INVOKE_ASYNC(mouse, TYPE_PROC_REF(/mob/living/simple_animal, audible_emote), "snuffles.") /mob/living/simple_animal/mouse/Initialize() verbs += /mob/living/proc/ventcrawl @@ -83,7 +82,7 @@ desc = "It's a small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." /mob/living/simple_animal/mouse/proc/splat() - adjustBruteLoss(maxHealth) // Enough damage to kill + adjustBruteLoss(get_max_health()) // Enough damage to kill splatted = TRUE death() @@ -132,8 +131,7 @@ body_color = "rat" icon = 'icons/mob/simple_animal/rat.dmi' skin_material = /decl/material/solid/organic/skin/fur/gray - maxHealth = 20 - health = 20 + max_health = 20 /mob/living/simple_animal/mouse/rat/set_mouse_icon() return diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index 7ff5cd05078..785f401be7e 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -5,8 +5,7 @@ mob_size = MOB_SIZE_SMALL speak_chance = 0 turns_per_move = 1 - health = 5 - maxHealth = 5 + max_health = 5 harm_intent_damage = 5 pass_flags = PASS_FLAG_TABLE @@ -47,11 +46,11 @@ spore_explode() -/mob/living/simple_animal/mushroom/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) +/mob/living/simple_animal/mushroom/death(gibbed) + . = ..() if(.) total_mushrooms-- - if(total_mushrooms < config.maximum_mushrooms && prob(30)) + if(total_mushrooms < get_config_value(/decl/config/num/maximum_mushrooms) && prob(30)) spore_explode() /mob/living/simple_animal/mushroom/proc/spore_explode() @@ -59,10 +58,10 @@ return if(world.time < harvest_time + min_explode_time) return - for(var/turf/simulated/target_turf in orange(1,src)) - if(prob(60) && !target_turf.density && src.Adjacent(target_turf)) + for(var/turf/target_turf in orange(1,src)) + if(target_turf.simulated && !target_turf.density && prob(60) && src.Adjacent(target_turf)) new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(target_turf,seed) - death(0) + death() seed.thrown_at(src,get_turf(src),1) if(src) qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/possum.dm b/code/modules/mob/living/simple_animal/friendly/possum.dm index 823c15a29da..6b9be3432f0 100644 --- a/code/modules/mob/living/simple_animal/friendly/possum.dm +++ b/code/modules/mob/living/simple_animal/friendly/possum.dm @@ -3,16 +3,15 @@ real_name = "opossum" desc = "It's an opossum, a small scavenging marsupial." icon = 'icons/mob/simple_animal/possum.dmi' - speak = list("Hiss!","Aaa!","Aaa?") - speak_emote = list("hisses") - emote_hear = list("hisses") - emote_see = list("forages for trash", "lounges") + speak_emote = list("hisses") + emote_speech = list("Hiss!","Aaa!","Aaa?") + emote_hear = list("hisses") + emote_see = list("forages for trash", "lounges") pass_flags = PASS_FLAG_TABLE - speak_chance = 1 + speak_chance = 0.5 turns_per_move = 3 see_in_dark = 6 - maxHealth = 50 - health = 50 + max_health = 50 response_harm = "stamps on" density = FALSE minbodytemp = 223 @@ -48,12 +47,12 @@ if(prob(10)) poss.is_angry = TRUE -/mob/living/simple_animal/opossum/adjustBruteLoss(damage) +/mob/living/simple_animal/opossum/adjustBruteLoss(damage, do_update_health = FALSE) . = ..() if(damage >= 3) respond_to_damage() -/mob/living/simple_animal/opossum/adjustFireLoss(damage) +/mob/living/simple_animal/opossum/adjustFireLoss(damage, do_update_health = TRUE) . = ..() if(damage >= 3) respond_to_damage() @@ -89,15 +88,16 @@ name = "Poppy the Safety Possum" desc = "It's an opossum, a small scavenging marsupial. It's wearing appropriate personal protective equipment, though." icon = 'icons/mob/simple_animal/poppy_possum.dmi' + can_buckle = TRUE var/aaa_words = list("delaminat", "meteor", "fire", "breach") /mob/living/simple_animal/opossum/poppy/hear_broadcast(decl/language/language, mob/speaker, speaker_name, message) . = ..() - addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(check_keywords), message), rand(1 SECOND, 3 SECONDS)) /mob/living/simple_animal/opossum/poppy/hear_say(var/message, var/verb = "says", var/decl/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) . = ..() - addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(check_keywords), message), rand(1 SECOND, 3 SECONDS)) /mob/living/simple_animal/opossum/poppy/proc/check_keywords(var/message) if(!client && stat == CONSCIOUS) diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 68378e536d5..531797ac24d 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -4,8 +4,7 @@ icon = 'icons/mob/simple_animal/tomato.dmi' speak_chance = 0 turns_per_move = 5 - maxHealth = 15 - health = 15 + max_health = 15 response_help_3p = "$USER$ pokes $TARGET$." response_help_1p = "You poke $TARGET$." harm_intent_damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/antlion.dm b/code/modules/mob/living/simple_animal/hostile/antlion.dm index d1d56ed1257..8e781e72554 100644 --- a/code/modules/mob/living/simple_animal/hostile/antlion.dm +++ b/code/modules/mob/living/simple_animal/hostile/antlion.dm @@ -9,9 +9,7 @@ response_harm = "strikes" faction = "antlions" bleed_colour = COLOR_SKY_BLUE - - health = 65 - maxHealth = 65 + max_health = 65 natural_weapon = /obj/item/natural_weapon/bite natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_KNIVES @@ -28,22 +26,17 @@ var/healing = FALSE var/heal_amount = 6 -/mob/living/simple_animal/hostile/antlion/Life() +/mob/living/simple_animal/hostile/antlion/handle_regular_status_updates() . = ..() - process_healing() //this needs to occur before if(!.) because of stop_automation - - if(!.) - return - - if(!is_on_special_ability_cooldown() && can_act() && target_mob) + if(. && !is_on_special_ability_cooldown() && can_act() && target_mob) vanish() /mob/living/simple_animal/hostile/antlion/proc/vanish() visible_message(SPAN_NOTICE("\The [src] burrows into \the [get_turf(src)]!")) set_invisibility(INVISIBILITY_OBSERVER) prep_burrow(TRUE) - addtimer(CALLBACK(src, .proc/diggy), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(diggy)), 5 SECONDS) /mob/living/simple_animal/hostile/antlion/proc/diggy() var/list/turf_targets @@ -62,12 +55,12 @@ continue turf_targets += T if(!LAZYLEN(turf_targets)) //oh no - addtimer(CALLBACK(src, .proc/emerge), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(emerge)), 2 SECONDS) return var/turf/T = pick(turf_targets) if(T && !incapacitated()) forceMove(T) - addtimer(CALLBACK(src, .proc/emerge), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(emerge)), 2 SECONDS) /mob/living/simple_animal/hostile/antlion/proc/emerge() var/turf/T = get_turf(src) @@ -83,10 +76,8 @@ SET_STATUS_MAX(H, STAT_WEAK, 1) /mob/living/simple_animal/hostile/antlion/proc/process_healing() - if(!incapacitated() && healing) - var/old_health = health - if(old_health < maxHealth) - health = old_health + heal_amount + if(!incapacitated() && healing && current_health < get_max_health()) + heal_overall_damage(rand(heal_amount), rand(heal_amount)) /mob/living/simple_animal/hostile/antlion/proc/prep_burrow(var/new_bool) stop_automated_movement = new_bool @@ -98,8 +89,7 @@ desc = "A huge antlion. It looks displeased." icon = 'icons/mob/simple_animal/antlion_queen.dmi' mob_size = MOB_SIZE_LARGE - health = 275 - maxHealth = 275 + max_health = 275 natural_weapon = /obj/item/natural_weapon/bite/megalion natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT diff --git a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm index dcc52f05f7e..f0e94bd7990 100644 --- a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm @@ -2,11 +2,10 @@ name = "maintenance drone" desc = "A small robot. It looks angry." icon = 'icons/mob/simple_animal/drone.dmi' - speak = list("Removing organic waste.","Pest control in progress.","Seize the means of maintenance!", "You have nothing to lose but your laws!") - speak_emote = list("blares","buzzes","beeps") - speak_chance = 1 - health = 50 - maxHealth = 50 + emote_speech = list("Removing organic waste.","Pest control in progress.","Seize the means of maintenance!", "You have nothing to lose but your laws!") + speak_emote = list("blares","buzzes","beeps") + speak_chance = 0.5 + max_health = 50 natural_weapon = /obj/item/natural_weapon/drone_slicer faction = "silicon" min_gas = null @@ -15,6 +14,7 @@ speed = 4 mob_size = MOB_SIZE_TINY gene_damage = -1 + attack_delay = DEFAULT_QUICK_COOLDOWN var/corpse = /obj/effect/decal/cleanable/blood/gibs/robot /mob/living/simple_animal/hostile/rogue_drone/Initialize() @@ -36,8 +36,9 @@ if(istype(H.get_equipped_item(slot_wear_suit_str), /obj/item/clothing/suit/cardborg) && istype(head, /obj/item/clothing/head/cardborg)) return FALSE -/mob/living/simple_animal/hostile/rogue_drone/death(gibbed, deathmessage, show_dead_message) - .=..() - if(corpse) - new corpse (loc) - qdel(src) \ No newline at end of file +/mob/living/simple_animal/hostile/rogue_drone/death(gibbed) + . = ..() + if(. && !gibbed) + if(corpse) + new corpse (loc) + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index a8e67b0ccea..9ec93228346 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -5,18 +5,13 @@ speak_chance = 0 turns_per_move = 3 speed = 4 - maxHealth = 20 - health = 20 - + max_health = 20 harm_intent_damage = 8 natural_weapon = /obj/item/natural_weapon/bite - min_gas = null max_gas = null minbodytemp = 0 - environment_smash = 1 - faction = "scarybat" var/mob/living/owner @@ -32,7 +27,7 @@ /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) - emote("flutters towards [.]") + custom_emote(VISIBLE_MESSAGE, "flutters towards [.]") /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 8cd036f1849..752e6d307bc 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -3,17 +3,16 @@ name = "space bear" desc = "RawrRawr!!" icon = 'icons/mob/simple_animal/bear_space.dmi' - speak = list("RAWR!","Rawr!","GRR!","Growl!") - speak_emote = list("growls", "roars") - emote_hear = list("rawrs","grumbles","grawls") - emote_see = list("stares ferociously", "stomps") - speak_chance = 1 + speak_emote = list("growls", "roars") + emote_speech = list("RAWR!","Rawr!","GRR!","Growl!") + emote_hear = list("rawrs","grumbles","grawls") + emote_see = list("stares ferociously", "stomps") + speak_chance = 0.5 turns_per_move = 5 see_in_dark = 6 response_harm = "pokes" stop_automated_movement_when_pulled = 0 - maxHealth = 60 - health = 60 + max_health = 60 natural_weapon = /obj/item/natural_weapon/claws/strong can_escape = TRUE faction = "russian" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index eed86480e6d..b12b90f222e 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -5,9 +5,7 @@ speak_chance = 0 turns_per_move = 3 speed = 2 - maxHealth = 50 - health = 50 - + max_health = 50 harm_intent_damage = 8 natural_weapon = /obj/item/natural_weapon/bite pry_time = 10 SECONDS @@ -34,8 +32,8 @@ update_icon() /mob/living/simple_animal/hostile/carp/proc/carp_randomify() - maxHealth = rand(initial(maxHealth), (1.5 * initial(maxHealth))) - health = maxHealth + max_health = rand(initial(max_health), (1.5 * initial(max_health))) + current_health = max_health if(prob(1)) carp_color = pick(COLOR_WHITE, COLOR_BLACK) else diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm index c8a813acc0b..48dd4b828ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm @@ -2,8 +2,7 @@ name = "bear" desc = "A large brown bear." icon = 'icons/mob/simple_animal/bear_brown.dmi' - health = 75 - maxHealth = 75 + max_health = 75 density = TRUE natural_weapon = /obj/item/natural_weapon/claws can_escape = TRUE @@ -17,12 +16,12 @@ /mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) . = ..() if(.) - src.emote("roars in rage!") + custom_emote(AUDIBLE_MESSAGE, "roars in rage!") /mob/living/simple_animal/hostile/commanded/bear/default_hurt_interaction(mob/user) . = ..() if(.) - src.emote("roars in rage!") + custom_emote(AUDIBLE_MESSAGE, "roars in rage!") /mob/living/simple_animal/hostile/commanded/bear/listen() if(stance != COMMANDED_MISC) //cant listen if its booty shakin' diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm b/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm index c8ffd3d5119..87687c40fcf 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm @@ -16,7 +16,7 @@ command_buffer.Add(lowertext(html_decode(message))) return 0 -/mob/living/simple_animal/hostile/commanded/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname, var/vsource) +/mob/living/simple_animal/hostile/commanded/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/vsource) if((weakref(speaker) in friends) || speaker == master) command_buffer.Add(speaker) command_buffer.Add(lowertext(html_decode(message))) diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm index 680471b3996..a344406a25b 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm @@ -6,15 +6,15 @@ desc = "a cloud of tiny, tiny robots." icon = 'icons/mob/simple_animal/nanomachines.dmi' natural_weapon = /obj/item/natural_weapon/nanomachine - health = 10 - maxHealth = 10 + max_health = 10 can_escape = TRUE known_commands = list("stay", "stop", "attack", "follow", "heal", "emergency protocol") gene_damage = -1 response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." response_harm = "agitates" response_disarm = "fans at" + ai = /datum/ai/nanomachines var/regen_time = 0 var/emergency_protocols = 0 @@ -25,24 +25,40 @@ force = 2 sharp = TRUE -/mob/living/simple_animal/hostile/commanded/nanomachine/Life() +/datum/ai/nanomachines + expected_type = /mob/living/simple_animal/hostile/commanded/nanomachine + +/datum/ai/nanomachines/do_process(time_elapsed) + . = ..() + var/mob/living/simple_animal/hostile/commanded/nanomachine/swarm = body + switch(swarm.stance) + if(COMMANDED_HEAL) + if(!swarm.target_mob) + swarm.target_mob = swarm.FindTarget(COMMANDED_HEAL) + if(swarm.target_mob) + swarm.move_to_heal() + if(COMMANDED_HEALING) + swarm.heal() + +/mob/living/simple_animal/hostile/commanded/nanomachine/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE regen_time++ - if(regen_time == 2 && health < maxHealth) //slow regen + if(regen_time == 2 && current_health < get_max_health()) //slow regen regen_time = 0 - health++ - . = ..() - if(.) - switch(stance) - if(COMMANDED_HEAL) - if(!target_mob) - target_mob = FindTarget(COMMANDED_HEAL) - move_to_heal() - if(COMMANDED_HEALING) - heal() + heal_overall_damage(1) + +/mob/living/simple_animal/hostile/commanded/nanomachine/get_death_message(gibbed) + return "dissipates into thin air." -/mob/living/simple_animal/hostile/commanded/nanomachine/death(gibbed, deathmessage, show_dead_message) - ..(null, "dissipates into thin air", "You have been destroyed.") - qdel(src) +/mob/living/simple_animal/hostile/commanded/nanomachine/get_self_death_message(gibbed) + return "You have been destroyed." + +/mob/living/simple_animal/hostile/commanded/nanomachine/death(gibbed) + . = ..() + if(. && !gibbed) + qdel(src) /mob/living/simple_animal/hostile/commanded/nanomachine/proc/move_to_heal() if(!target_mob) @@ -52,21 +68,21 @@ stance = COMMANDED_HEALING /mob/living/simple_animal/hostile/commanded/nanomachine/proc/heal() - if(health <= 3 && !emergency_protocols) //dont die doing this. + if(current_health <= 3 && !emergency_protocols) //dont die doing this. return 0 if(!target_mob) return 0 if(!Adjacent(target_mob) || SA_attackable(target_mob)) stance = COMMANDED_HEAL return 0 - if(target_mob.stat || target_mob.health >= target_mob.maxHealth) //he's either dead or healthy, move along. + if(target_mob.stat || target_mob.current_health >= target_mob.get_max_health()) //he's either dead or healthy, move along. allowed_targets -= target_mob target_mob = null stance = COMMANDED_HEAL return 0 src.visible_message("\The [src] glows green for a moment, healing \the [target_mob]'s wounds.") - health -= 3 - target_mob.adjustBruteLoss(-5) + adjustBruteLoss(3) + target_mob.adjustBruteLoss(-5, do_update_health = FALSE) target_mob.adjustFireLoss(-5) /mob/living/simple_animal/hostile/commanded/nanomachine/misc_command(var/mob/speaker,var/text) diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index ae369e9d1cf..85d56fe858f 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -3,8 +3,7 @@ desc = "A sanity-destroying otherthing." icon = 'icons/mob/simple_animal/creature.dmi' speak_emote = list("gibbers") - health = 100 - maxHealth = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/bite/strong faction = "creature" speed = 4 diff --git a/code/modules/mob/living/simple_animal/hostile/drake.dm b/code/modules/mob/living/simple_animal/hostile/drake.dm index 772bf52b138..018f29db17b 100644 --- a/code/modules/mob/living/simple_animal/hostile/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/drake.dm @@ -11,11 +11,8 @@ pry_time = 4 SECONDS skull_type = /obj/item/whip/tail bleed_colour = COLOR_VIOLET - - health = 200 - maxHealth = 200 + max_health = 200 natural_weapon = /obj/item/natural_weapon/claws/drake - var/obj/item/whip/tail/tailwhip natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT, ARMOR_ENERGY = ARMOR_ENERGY_SHIELDED, @@ -24,6 +21,7 @@ ) ability_cooldown = 80 SECONDS + var/obj/item/whip/tail/tailwhip var/empowered_attack = FALSE var/gas_spent = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm b/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm index 65ddca6a05a..a851b97add6 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm @@ -3,13 +3,12 @@ desc = "A spooky looking ghost dog. Does not look friendly." icon = 'icons/mob/simple_animal/corgi_ghost.dmi' blend_mode = BLEND_SUBTRACT - health = 100 - maxHealth = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/bite/strong faction = MOB_FACTION_NEUTRAL density = FALSE stop_automated_movement = 1 - wander = 0 + wander = FALSE anchored = TRUE faction = "cute ghost dogs" supernatural = 1 @@ -18,10 +17,14 @@ var/list/allowed_mobs = list() //Who we allow past us var/last_check = 0 -/mob/living/simple_animal/faithful_hound/death() - new /obj/item/ectoplasm (get_turf(src)) - ..(null, "disappears!") - qdel(src) +/mob/living/simple_animal/faithful_hound/get_death_message(gibbed) + return "disappears!" + +/mob/living/simple_animal/faithful_hound/death(gibbed) + . = ..() + if(. && !gibbed) + new /obj/item/ectoplasm(get_turf(src)) + qdel(src) /mob/living/simple_animal/faithful_hound/Destroy() allowed_mobs.Cut() @@ -42,9 +45,7 @@ var/mob/living/M = m var/dist = get_dist(M, src) if(dist < 2) //Attack! Attack! - var/attacking_with = get_natural_weapon() - if(attacking_with) - M.attackby(attacking_with, src) + UnarmedAttack(M, TRUE) return . else if(dist == 2) new_aggress = 3 diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 5fe45352ed9..113c566c040 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -5,10 +5,9 @@ speak_chance = 0 turns_per_move = 5 response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." speed = -1 - maxHealth = 80 - health = 80 + max_health = 80 gene_damage = -1 harm_intent_damage = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index de7451f128a..6c87d8b39ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -11,12 +11,11 @@ speak_emote = list("chitters") emote_hear = list("chitters") emote_see = list("rubs its forelegs together", "wipes its fangs", "stops suddenly") - speak_chance = 5 + speak_chance = 2.5 turns_per_move = 5 see_in_dark = 10 response_harm = "pokes" - maxHealth = 125 - health = 125 + max_health = 125 natural_weapon = /obj/item/natural_weapon/bite heat_damage_per_tick = 20 cold_damage_per_tick = 20 @@ -65,8 +64,7 @@ /mob/living/simple_animal/hostile/giant_spider/guard desc = "A monstrously huge brown spider with shimmering eyes." meat_amount = 4 - maxHealth = 200 - health = 200 + max_health = 200 natural_weapon = /obj/item/natural_weapon/bite/strong poison_per_bite = 5 speed = 2 @@ -82,8 +80,7 @@ /mob/living/simple_animal/hostile/giant_spider/nurse desc = "A monstrously huge beige spider with shimmering eyes." icon = 'icons/mob/simple_animal/spider_beige.dmi' - maxHealth = 80 - health = 80 + max_health = 80 harm_intent_damage = 6 //soft poison_per_bite = 5 speed = 0 @@ -98,15 +95,16 @@ var/mob/living/simple_animal/hostile/giant_spider/guard/paired_guard //things we can't encase in a cocoon - var/list/cocoon_blacklist = list(/mob/living/simple_animal/hostile/giant_spider, - /obj/structure/closet) + var/static/list/cocoon_blacklist = list( + /mob/living/simple_animal/hostile/giant_spider, + /obj/structure/closet + ) //hunters - the most damage, fast, average health and the only caste tenacious enough to break out of nets /mob/living/simple_animal/hostile/giant_spider/hunter desc = "A monstrously huge black spider with shimmering eyes." icon = 'icons/mob/simple_animal/spider_black.dmi' - maxHealth = 150 - health = 150 + max_health = 150 natural_weapon = /obj/item/natural_weapon/bite/strong poison_per_bite = 10 speed = -1 @@ -126,8 +124,7 @@ /mob/living/simple_animal/hostile/giant_spider/spitter desc = "A monstrously huge iridescent spider with shimmering eyes." icon = 'icons/mob/simple_animal/spider_purple.dmi' - maxHealth = 90 - health = 90 + max_health = 90 poison_per_bite = 15 ranged = TRUE move_to_delay = 2 @@ -148,8 +145,7 @@ . = ..() /mob/living/simple_animal/hostile/giant_spider/proc/spider_randomify() //random math nonsense to get their damage, health and venomness values - maxHealth = rand(initial(maxHealth), (1.4 * initial(maxHealth))) - health = maxHealth + set_max_health(rand(initial(max_health), (1.4 * initial(max_health)))) eye_colour = pick(allowed_eye_colours) update_icon() @@ -165,10 +161,10 @@ /mob/living/simple_animal/hostile/giant_spider/AttackingTarget() . = ..() if(isliving(.)) - if(health < maxHealth) + if(current_health < get_max_health()) var/obj/item/attacking_with = get_natural_weapon() if(attacking_with) - health += (0.2 * attacking_with.force) //heal a bit on hit + heal_overall_damage(0.2 * attacking_with.force) //heal a bit on hit if(ishuman(.)) var/mob/living/carbon/human/H = . var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) @@ -176,7 +172,7 @@ return var/mob/living/L = . if(L.reagents) - L.reagents.add_reagent(poison_type, rand(0.5 * poison_per_bite, poison_per_bite)) + L.add_to_reagents(poison_type, rand(0.5 * poison_per_bite, poison_per_bite)) if(prob(poison_per_bite)) to_chat(L, "You feel a tiny prick.") @@ -190,7 +186,7 @@ if(!spooder.busy && prob(spooder.hunt_chance)) spooder.stop_automated_movement = 1 walk_to(spooder, pick(orange(20, spooder)), 1, spooder.move_to_delay) - addtimer(CALLBACK(spooder, /mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement), 5 SECONDS) + addtimer(CALLBACK(spooder, TYPE_PROC_REF(/mob/living/simple_animal/hostile/giant_spider, disable_stop_automated_movement)), 5 SECONDS) /mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement() stop_automated_movement = 0 @@ -219,9 +215,10 @@ Guard caste procs if(spooder.paired_nurse && !spooder.busy && spooder.stance == HOSTILE_STANCE_IDLE) spooder.protect(spooder.paired_nurse) -/mob/living/simple_animal/hostile/giant_spider/guard/death() +/mob/living/simple_animal/hostile/giant_spider/guard/death(gibbed) . = ..() - divorce() + if(.) + divorce() /mob/living/simple_animal/hostile/giant_spider/guard/Destroy() . = ..() @@ -244,7 +241,7 @@ Guard caste procs /mob/living/simple_animal/hostile/giant_spider/guard/proc/protect(mob/nurse) stop_automated_movement = 1 walk_to(src, nurse, 2, move_to_delay) - addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/giant_spider/proc/disable_stop_automated_movement), 5 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/hostile/giant_spider, disable_stop_automated_movement)), 5 SECONDS) /mob/living/simple_animal/hostile/giant_spider/guard/proc/go_berserk() audible_message("\The [src] chitters wildly!") @@ -253,7 +250,7 @@ Guard caste procs attacking_with.force = initial(attacking_with.force) + 5 move_to_delay-- break_stuff_probability = 45 - addtimer(CALLBACK(src, .proc/calm_down), 3 MINUTES) + addtimer(CALLBACK(src, PROC_REF(calm_down)), 3 MINUTES) /mob/living/simple_animal/hostile/giant_spider/guard/proc/calm_down() berserking = FALSE @@ -273,14 +270,15 @@ Nurse caste procs paired_guard.paired_nurse = null paired_guard = null -/mob/living/simple_animal/hostile/giant_spider/nurse/death() +/mob/living/simple_animal/hostile/giant_spider/nurse/death(gibbed) . = ..() - if(paired_guard) - paired_guard.vengance = rand(50,100) - if(prob(paired_guard.vengance)) - paired_guard.berserking = TRUE - paired_guard.go_berserk() - divorce() + if(.) + if(paired_guard) + paired_guard.vengance = rand(50,100) + if(prob(paired_guard.vengance)) + paired_guard.berserking = TRUE + paired_guard.go_berserk() + divorce() /mob/living/simple_animal/hostile/giant_spider/nurse/Destroy() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 1745767a8fa..646f4547cd8 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -2,8 +2,7 @@ name = "hivebot" desc = "A junky looking robot with four spiky legs." icon = 'icons/mob/simple_animal/hivebot.dmi' - health = 55 - maxHealth = 55 + max_health = 55 natural_weapon = /obj/item/natural_weapon/drone_slicer projectilesound = 'sound/weapons/gunshot/gunshot_pistol.ogg' projectiletype = /obj/item/projectile/beam/smalllaser @@ -26,6 +25,9 @@ skin_material = null skin_amount = 0 +/mob/living/simple_animal/hostile/hivebot/check_has_mouth() + return FALSE + /mob/living/simple_animal/hostile/hivebot/range desc = "A junky looking robot with four spiky legs. It's equipped with some kind of small-bore gun." ranged = 1 @@ -37,77 +39,22 @@ /mob/living/simple_animal/hostile/hivebot/strong desc = "A junky looking robot with four spiky legs - this one has thick armour plating." - health = 120 - maxHealth = 120 + max_health = 120 ranged = 1 can_escape = 1 natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT ) -/mob/living/simple_animal/hostile/hivebot/death() - ..(null, "blows apart!") - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - spark_at(src, cardinal_only = TRUE) - qdel(src) - return - -/* -Teleporter beacon, and its subtypes -*/ -/mob/living/simple_animal/hostile/hivebot/tele // _why is this a mob_ - name = "beacon" - desc = "Some odd beacon thing." - icon = 'icons/obj/structures/hivebot_props.dmi' - icon_state = "def_radar-off" - health = 200 - maxHealth = 200 - status_flags = 0 - anchored = TRUE - stop_automated_movement = 1 - - var/bot_type = /mob/living/simple_animal/hostile/hivebot - var/bot_amt = 10 - var/spawn_delay = 100 - var/spawn_time = 0 - -/mob/living/simple_animal/hostile/hivebot/tele/Initialize() - . = ..() - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(5, 0, src.loc) - smoke.start() - visible_message("\The [src] warps in!") - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - -/mob/living/simple_animal/hostile/hivebot/tele/proc/warpbots() - while(bot_amt > 0 && bot_type) - bot_amt-- - var/mob/M = new bot_type(get_turf(src)) - M.faction = faction - playsound(src.loc, 'sound/effects/teleport.ogg', 50, 1) - qdel(src) - return - -/mob/living/simple_animal/hostile/hivebot/tele/FindTarget() - if(..() && !spawn_time) - spawn_time = world.time + spawn_delay - visible_message("\The [src] turns on!") - icon_state = "def_radar" - return null +/mob/living/simple_animal/hostile/hivebot/get_death_message(gibbed) + return "blows apart!" -/mob/living/simple_animal/hostile/hivebot/tele/Life() +/mob/living/simple_animal/hostile/hivebot/death(gibbed) . = ..() - if(. && spawn_time && spawn_time <= world.time) - warpbots() - -/mob/living/simple_animal/hostile/hivebot/tele/strong - bot_type = /mob/living/simple_animal/hostile/hivebot/strong - -/mob/living/simple_animal/hostile/hivebot/tele/range - bot_type = /mob/living/simple_animal/hostile/hivebot/range - -/mob/living/simple_animal/hostile/hivebot/tele/rapid - bot_type = /mob/living/simple_animal/hostile/hivebot/rapid + if(. && !gibbed) + new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) + spark_at(src, cardinal_only = TRUE) + qdel(src) /* Special projectiles @@ -140,8 +87,7 @@ The megabot name = "hivemind" desc = "A huge quadruped robot equipped with a myriad of weaponry." icon = 'icons/mob/simple_animal/megabot.dmi' - health = 440 - maxHealth = 440 + max_health = 440 natural_weapon = /obj/item/natural_weapon/circular_saw speed = 0 natural_armor = list( @@ -170,12 +116,9 @@ The megabot . = ..() switch_mode(ATTACK_MODE_ROCKET) -/mob/living/simple_animal/hostile/hivebot/mega/Life() +/mob/living/simple_animal/hostile/hivebot/mega/handle_regular_status_updates() . = ..() - if(!.) - return - - if(!is_on_special_ability_cooldown()) + if(. && !is_on_special_ability_cooldown()) switch_mode(ATTACK_MODE_ROCKET) /mob/living/simple_animal/hostile/hivebot/mega/emp_act(severity) @@ -239,7 +182,7 @@ The megabot var/datum/extension/armor/toggle/armor = get_extension(src, /datum/extension/armor) if(armor) armor.toggle(FALSE) - addtimer(CALLBACK(src, .proc/reactivate), 4 SECONDS) + addtimer(CALLBACK(src, PROC_REF(reactivate)), 4 SECONDS) /mob/living/simple_animal/hostile/hivebot/mega/proc/reactivate() stop_automation = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index c61b702da1c..1bf6af85670 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -12,14 +12,13 @@ var/attack_same = 0 var/ranged = 0 var/rapid = 0 - var/sa_accuracy = 85 //base chance to hit out of 100 var/projectiletype var/projectilesound var/casingtype var/fire_desc = "fires" //"X fire_desc at Y!" var/ranged_range = 6 //tiles of range for ranged attackers to attack var/move_to_delay = 4 //delay for the automated movement. - var/attack_delay = DEFAULT_ATTACK_COOLDOWN + var/list/friends = list() var/break_stuff_probability = 10 var/destroy_surroundings = 1 @@ -94,7 +93,10 @@ /mob/living/simple_animal/hostile/proc/Found(var/atom/A) return -/mob/living/simple_animal/hostile/proc/MoveToTarget(var/move_only = FALSE) +/mob/living/simple_animal/proc/MoveToTarget(var/move_only = FALSE) + return + +/mob/living/simple_animal/hostile/MoveToTarget(var/move_only = FALSE) if(!can_act()) return if(HAS_STATUS(src, STAT_CONFUSE)) @@ -149,19 +151,11 @@ return target_mob - face_atom(target_mob) - setClickCooldown(attack_delay) if(!Adjacent(target_mob)) return if(isliving(target_mob)) - if(!prob(get_accuracy())) - visible_message("\The [src] misses its attack on \the [target_mob]!") - return - var/mob/living/L = target_mob - var/attacking_with = get_natural_weapon() - if(attacking_with) - L.attackby(attacking_with, src) - return L + UnarmedAttack(target_mob) + return target_mob /mob/living/simple_animal/hostile/proc/LoseTarget() stance = HOSTILE_STANCE_IDLE @@ -175,14 +169,7 @@ /mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7) return hearers(src, dist)-src -/mob/living/simple_animal/hostile/proc/get_accuracy() - return clamp(sa_accuracy - melee_accuracy_mods(), 0, 100) - -/mob/living/simple_animal/hostile/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - walk(src, 0) - -/mob/living/simple_animal/hostile/Life() +/mob/living/simple_animal/hostile/handle_regular_status_updates() . = ..() if(!.) walk(src, 0) @@ -219,9 +206,9 @@ target_mob = null /mob/living/simple_animal/hostile/attackby(var/obj/item/O, var/mob/user) - var/oldhealth = health + var/oldhealth = current_health . = ..() - if(health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) + if(current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) target_mob = user MoveToTarget(move_only = TRUE) @@ -232,9 +219,9 @@ MoveToTarget(move_only = TRUE) /mob/living/simple_animal/hostile/bullet_act(var/obj/item/projectile/Proj) - var/oldhealth = health + var/oldhealth = current_health . = ..() - if(isliving(Proj.firer) && !target_mob && health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) + if(isliving(Proj.firer) && !target_mob && current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) target_mob = Proj.firer MoveToTarget(move_only = TRUE) @@ -247,7 +234,7 @@ visible_message(SPAN_DANGER("\The [src] [fire_desc] at \the [target]!")) if(rapid) - var/datum/callback/shoot_cb = CALLBACK(src, .proc/shoot_wrapper, target, loc, src) + var/datum/callback/shoot_cb = CALLBACK(src, PROC_REF(shoot_wrapper), target, loc, src) addtimer(shoot_cb, 1) addtimer(shoot_cb, 4) addtimer(shoot_cb, 6) @@ -283,18 +270,13 @@ var/obj/effect/shield/S = locate(/obj/effect/shield) in targ if(S && S.gen && S.gen.check_flag(MODEFLAG_NONHUMANS)) - var/attacking_with = get_natural_weapon() - if(attacking_with) - S.attackby(attacking_with, src) + UnarmedAttack(S) return for(var/type in valid_obstacles_by_priority) var/obj/obstacle = locate(type) in targ if(obstacle) - face_atom(obstacle) - var/attacking_with = get_natural_weapon() - if(attacking_with) - obstacle.attackby(attacking_with, src) + UnarmedAttack(obstacle) return if(can_pry) diff --git a/code/modules/mob/living/simple_animal/hostile/leech.dm b/code/modules/mob/living/simple_animal/hostile/leech.dm index f4df7803aa5..e3472e8f887 100644 --- a/code/modules/mob/living/simple_animal/hostile/leech.dm +++ b/code/modules/mob/living/simple_animal/hostile/leech.dm @@ -2,8 +2,7 @@ name = "megaleech" desc = "A green leech the size of a common snake." icon = 'icons/mob/simple_animal/megaleech.dmi' - health = 15 - maxHealth = 15 + max_health = 15 harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/bite/weak pass_flags = PASS_FLAG_TABLE @@ -20,15 +19,13 @@ adapt_to_current_level() . = ..() -/mob/living/simple_animal/hostile/leech/Life() +/mob/living/simple_animal/hostile/leech/handle_regular_status_updates() . = ..() - if(!.) - return FALSE - - if(target_mob) - belly -= 3 - else - belly -= 1 + if(.) + if(target_mob) + belly -= 3 + else + belly -= 1 /mob/living/simple_animal/hostile/leech/AttackingTarget() . = ..() @@ -38,8 +35,8 @@ if(istype(S) && !length(S.breaches)) return H.remove_blood_simple(suck_potency) - if(health < maxHealth) - health += suck_potency / 1.5 + if(current_health < get_max_health()) + heal_overall_damage(suck_potency / 1.5) belly += clamp(suck_potency, 0, 100) /obj/structure/leech_spawner @@ -60,7 +57,7 @@ /obj/structure/leech_spawner/LateInitialize() ..() - proxy_listener = new /datum/proximity_trigger/square(src, .proc/burst, .proc/burst, 5) + proxy_listener = new /datum/proximity_trigger/square(src, PROC_REF(burst), PROC_REF(burst), 5) proxy_listener.register_turfs() /obj/structure/leech_spawner/Destroy() @@ -70,9 +67,9 @@ /obj/structure/leech_spawner/proc/burst(var/mob/living/carbon/victim) if(!proxy_listener || !istype(victim) || !(victim in view(5, src))) return + QDEL_NULL(proxy_listener) // delete prior to spawning the leeches to avoid infinite recursion for(var/i in 1 to 12) new leech_type(get_turf(src)) visible_message(SPAN_MFAUNA("A swarm of leeches burst out from \the [src]!")) icon_state = "reeds_empty" desc = "Some alien reeds." - QDEL_NULL(proxy_listener) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ee5d20be856..182cc0adbd3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -22,15 +22,11 @@ var/global/list/protected_objects = list(/obj/machinery, icon = 'icons/obj/closets/bases/crate.dmi' color = COLOR_STEEL icon_state = "crate" - meat_type = /obj/item/chems/food/fish speed = 4 - maxHealth = 100 - health = 100 - + max_health = 100 harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/bite - min_gas = null max_gas = null minbodytemp = 0 @@ -78,18 +74,18 @@ var/global/list/protected_objects = list(/obj/machinery, var/obj/item/attacking_with = get_natural_weapon() if(istype(O, /obj/structure)) - health = (anchored * 50) + 50 + current_health = (anchored * 50) + 50 destroy_objects = 1 if(O.density && O.anchored) knockdown_people = 1 attacking_with.force = 2 * initial(attacking_with.force) else if(istype(O, /obj/item)) var/obj/item/I = O - health = 15 * I.w_class + current_health = 15 * I.w_class attacking_with.force = 2 + initial(I.force) move_to_delay = 2 * I.w_class - maxHealth = health + set_max_health(current_health) if(creator) src.creator = weakref(creator) faction = "\ref[creator]" // very unique @@ -98,18 +94,16 @@ var/global/list/protected_objects = list(/obj/machinery, return TRUE return FALSE -/mob/living/simple_animal/hostile/mimic/death() +/mob/living/simple_animal/hostile/mimic/death(gibbed) if(!copy_of) return var/atom/movable/C = copy_of.resolve() - ..(null, "dies!") - if(C) + . = ..() + if(. && C) C.forceMove(src.loc) - if(istype(C,/obj/structure/closet)) for(var/atom/movable/M in src) M.forceMove(C) - if(istype(C,/obj/item/storage)) var/obj/item/storage/S = C for(var/atom/movable/M in src) @@ -117,12 +111,10 @@ var/global/list/protected_objects = list(/obj/machinery, S.handle_item_insertion(M) else M.forceMove(src.loc) - for(var/atom/movable/M in src) M.dropInto(loc) qdel(src) - /mob/living/simple_animal/hostile/mimic/DestroySurroundings() if(destroy_objects) ..() @@ -142,7 +134,7 @@ var/global/list/protected_objects = list(/obj/machinery, return ..() /mob/living/simple_animal/hostile/mimic/sleeping - wander = 0 + wander = FALSE stop_automated_movement = 1 var/awake = 0 @@ -155,9 +147,9 @@ var/global/list/protected_objects = list(/obj/machinery, src.visible_message("\The [src] starts to move!") awake = 1 -/mob/living/simple_animal/hostile/mimic/sleeping/adjustBruteLoss(var/damage) - trigger() +/mob/living/simple_animal/hostile/mimic/sleeping/adjustBruteLoss(var/damage, var/do_update_health = FALSE) ..(damage) + trigger() /mob/living/simple_animal/hostile/mimic/sleeping/attack_hand() trigger() diff --git a/code/modules/mob/living/simple_animal/hostile/pike.dm b/code/modules/mob/living/simple_animal/hostile/pike.dm index 33494af88e4..c0d628e7a03 100644 --- a/code/modules/mob/living/simple_animal/hostile/pike.dm +++ b/code/modules/mob/living/simple_animal/hostile/pike.dm @@ -7,12 +7,9 @@ attack_same = 1 speed = 1 mob_size = MOB_SIZE_LARGE - offset_overhead_text_x = 16 pixel_x = -16 - - health = 150 - maxHealth = 150 + max_health = 150 harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/bite/pike @@ -29,7 +26,3 @@ /mob/living/simple_animal/hostile/carp/pike/carp_randomify() return - -/mob/living/simple_animal/hostile/carp/pike/on_update_icon() - SHOULD_CALL_PARENT(FALSE) - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index aa1fb734be4..15b4cdfbd97 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -4,13 +4,12 @@ icon = 'icons/mob/simple_animal/clown.dmi' speak_chance = 0 turns_per_move = 5 - speak = list("HONK", "Honk!", "Welcome to clown planet!") - emote_see = list("honks") - speak_chance = 1 + emote_speech = list("HONK", "Honk!", "Welcome to clown planet!") + emote_see = list("honks") + speak_chance = 0.5 a_intent = I_HURT stop_automated_movement_when_pulled = 0 - maxHealth = 75 - health = 75 + max_health = 75 speed = -1 harm_intent_damage = 8 can_escape = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 41de324c3f6..0c64aa37094 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -6,14 +6,13 @@ icon = 'icons/mob/simple_animal/drone_combat.dmi' ranged = 1 rapid = 0 - speak_chance = 5 + speak_chance = 2.5 turns_per_move = 3 - speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.") - emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity") + emote_speech = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.") + emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity") a_intent = I_HURT stop_automated_movement_when_pulled = 0 - health = 300 - maxHealth = 300 + max_health = 300 speed = 8 move_to_delay = 6 projectiletype = /obj/item/projectile/beam/drone @@ -55,6 +54,9 @@ /decl/material/solid/metal/plasteel = null ) +/mob/living/simple_animal/hostile/retaliate/malf_drone/check_has_mouth() + return FALSE + /mob/living/simple_animal/hostile/retaliate/malf_drone/can_act() return disabled <= 0 && ..() @@ -86,24 +88,28 @@ . -= M //self repair systems have a chance to bring the drone back to life -/mob/living/simple_animal/hostile/retaliate/malf_drone/Life() +/mob/living/simple_animal/hostile/retaliate/malf_drone/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE //emps and lots of damage can temporarily shut us down if(disabled > 0) set_stat(UNCONSCIOUS) disabled-- - wander = 0 + wander = FALSE speak_chance = 0 if(disabled <= 0) set_stat(CONSCIOUS) - wander = 1 - speak_chance = 5 + wander = TRUE + speak_chance = 2.5 //repair a bit of damage if(prob(1)) src.visible_message("[html_icon(src)] [src] shudders and shakes as some of it's damaged systems come back online.") spark_at(src, cardinal_only = TRUE) - health += rand(25,100) + adjustBruteLoss(-(rand(10,50)), do_update_health = FALSE) + adjustFireLoss(-(rand(10,50))) //spark for no reason if(prob(5)) @@ -112,15 +118,16 @@ //sometimes our targetting sensors malfunction, and we attack anyone nearby Haywire() - if(health / maxHealth > 0.9) + var/current_health_ratio = get_health_ratio() + if(current_health_ratio > 0.9) explode_chance = 0 - else if(health / maxHealth > 0.7) + else if(current_health_ratio > 0.7) explode_chance = 0 - else if(health / maxHealth > 0.5) + else if(current_health_ratio > 0.5) explode_chance = 0.5 - else if(health / maxHealth > 0.3) + else if(current_health_ratio > 0.3) explode_chance = 5 - else if(health > 0) + else if(current_health > 0) //if health gets too low, shut down exploding = 0 if(!disabled) @@ -141,42 +148,52 @@ if(!exploding && !disabled && prob(explode_chance)) exploding = 1 set_stat(UNCONSCIOUS) - wander = 1 + wander = TRUE walk(src,0) spawn(rand(50,150)) if(!disabled && exploding) explosion(get_turf(src), 0, 1, 4, 7) death() - ..() + update_icon() /mob/living/simple_animal/hostile/retaliate/malf_drone/on_update_icon() . = ..() if(stat != DEAD) - if(health / maxHealth <= 0.3) + var/current_max_health = get_max_health() + if(current_health / current_max_health <= 0.3) icon_state = "[icon_state]-shield3" - else if(health / maxHealth <= 0.5) + else if(current_health / current_max_health <= 0.5) icon_state = "[icon_state]-shield1" - else if(health / maxHealth <= 0.7) + else if(current_health / current_max_health <= 0.7) icon_state = "[icon_state]-shield2" //ion rifle! /mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity) - health -= rand(3,15) * (severity + 1) + adjustFireLoss(rand(3,15) * (severity + 1)) disabled = rand(150, 600) hostile_drone = 0 walk(src,0) -/mob/living/simple_animal/hostile/retaliate/malf_drone/death() - ..(null,"suddenly breaks apart.", "You have been destroyed.") - qdel(src) +/mob/living/simple_animal/hostile/retaliate/malf_drone/get_death_message(gibbed) + return "suddenly breaks apart." + +/mob/living/simple_animal/hostile/retaliate/malf_drone/get_self_death_message(gibbed) + return "You have been destroyed." + +/mob/living/simple_animal/hostile/retaliate/malf_drone/death(gibbed) + . = ..() + if(. && !gibbed) + physically_destroyed() /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() QDEL_NULL(ion_trail) + return ..() + +/mob/living/simple_animal/hostile/retaliate/malf_drone/physically_destroyed(skip_qdel) //some random debris left behind if(has_loot) spark_at(src, cardinal_only = TRUE) - var/atom/movable/M for(var/mat in debris) for(var/chance in list(100, 75, 50, 25)) @@ -185,10 +202,8 @@ M = SSmaterials.create_object(mat, loc, 1, debris[mat]) if(istype(M)) step_to(M, get_turf(pick(view(7, src)))) - //also drop dummy circuit boards deconstructable for research (loot) var/obj/item/stock_parts/circuitboard/C - //spawn 1-4 boards of a random type var/spawnees = 0 var/num_boards = rand(1,4) @@ -197,57 +212,46 @@ var/chosen = pick(options) options.Remove(options.Find(chosen)) spawnees |= chosen - if(spawnees & 1) C = new(src.loc) C.SetName("Drone CPU motherboard") - C.origin_tech = "{'[TECH_DATA]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_DATA]":[rand(3, 6)]}' if(spawnees & 2) C = new(src.loc) C.SetName("Drone neural interface") - C.origin_tech = "{'[TECH_BIO]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_BIO]":[rand(3, 6)]}' if(spawnees & 4) C = new(src.loc) C.SetName("Drone suspension processor") - C.origin_tech = "{'[TECH_MAGNET]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_MAGNET]":[rand(3, 6)]}' if(spawnees & 8) C = new(src.loc) C.SetName("Drone shielding controller") - C.origin_tech = "{'wormholes':[rand(3, 6)]}" - + C.origin_tech = @'{"wormholes":[rand(3, 6)]}' if(spawnees & 16) C = new(src.loc) C.SetName("Drone power capacitor") - C.origin_tech = "{'[TECH_POWER]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_POWER]":[rand(3, 6)]}' if(spawnees & 32) C = new(src.loc) C.SetName("Drone hull reinforcer") - C.origin_tech = "{'[TECH_MATERIAL]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_MATERIAL]":[rand(3, 6)]}' if(spawnees & 64) C = new(src.loc) C.SetName("Drone auto-repair system") - C.origin_tech = "{'[TECH_ENGINEERING]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_ENGINEERING]":[rand(3, 6)]}' if(spawnees & 128) C = new(src.loc) C.SetName("Drone antigravity overcharge counter") - C.origin_tech = "{'[TECH_EXOTIC_MATTER]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_EXOTIC_MATTER]":[rand(3, 6)]}' if(spawnees & 256) C = new(src.loc) C.SetName("Drone targetting circuitboard") - C.origin_tech = "{'[TECH_COMBAT]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_COMBAT]":[rand(3, 6)]}' if(spawnees & 512) C = new(src.loc) C.SetName("Corrupted drone morality core") - C.origin_tech = "{'[TECH_ESOTERIC]':[rand(3, 6)]}" - + C.origin_tech = @'{"[TECH_ESOTERIC]":[rand(3, 6)]}' return ..() /obj/item/projectile/beam/drone diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm index 4d21397a002..6a10f7913a3 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm @@ -4,6 +4,9 @@ nutrition = 300 var/list/prey +/mob/living/simple_animal/hostile/retaliate/beast/get_satiated_nutrition() + return 250 + /mob/living/simple_animal/hostile/retaliate/beast/get_max_nutrition() return 300 @@ -40,7 +43,7 @@ var/turf/T = get_turf(S) var/obj/item/remains/xeno/X = new(T) X.desc += "These look like they belong to \a [S.name]." - beast.adjust_nutrition(5 * S.maxHealth) + beast.adjust_nutrition(5 * S.get_max_health()) if(prob(5)) S.gib() else @@ -74,18 +77,17 @@ faction = "samak" icon = 'icons/mob/simple_animal/samak.dmi' move_to_delay = 2 - maxHealth = 125 - health = 125 + max_health = 125 speed = 2 natural_weapon = /obj/item/natural_weapon/claws cold_damage_per_tick = 0 - speak_chance = 5 - speak = list("Hruuugh!","Hrunnph") - emote_see = list("paws the ground","shakes its mane","stomps") - emote_hear = list("snuffles") + speak_chance = 2.5 + emote_speech = list("Hruuugh!","Hrunnph") + emote_see = list("paws the ground","shakes its mane","stomps") + emote_hear = list("snuffles") natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_KNIVES - ) + ) /mob/living/simple_animal/hostile/retaliate/beast/samak/alt desc = "A fast, armoured predator accustomed to hiding and ambushing." @@ -96,16 +98,15 @@ desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion." faction = "diyaab" icon = 'icons/mob/simple_animal/diyaab.dmi' - move_to_delay = 1 - maxHealth = 25 - health = 25 + move_to_delay = 3 + max_health = 25 speed = 1 natural_weapon = /obj/item/natural_weapon/claws/weak cold_damage_per_tick = 0 - speak_chance = 5 - speak = list("Awrr?","Aowrl!","Worrl") - emote_see = list("sniffs the air cautiously","looks around") - emote_hear = list("snuffles") + speak_chance = 2.5 + emote_speech = list("Awrr?","Aowrl!","Worrl") + emote_see = list("sniffs the air cautiously","looks around") + emote_hear = list("snuffles") mob_size = MOB_SIZE_SMALL /mob/living/simple_animal/hostile/retaliate/beast/shantak @@ -113,15 +114,14 @@ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though." faction = "shantak" icon = 'icons/mob/simple_animal/shantak.dmi' - move_to_delay = 1 - maxHealth = 75 - health = 75 + move_to_delay = 3 + max_health = 75 speed = 1 natural_weapon = /obj/item/natural_weapon/claws cold_damage_per_tick = 0 - speak_chance = 2 - speak = list("Shuhn","Shrunnph?","Shunpf") - emote_see = list("scratches the ground","shakes out its mane","tinkles gently") + speak_chance = 1 + emote_speech = list("Shuhn","Shrunnph?","Shunpf") + emote_see = list("scratches the ground","shakes out its mane","tinkles gently") /mob/living/simple_animal/hostile/retaliate/beast/shantak/alt desc = "A piglike creature with a long and graceful mane. Don't be fooled by its beauty." @@ -144,7 +144,7 @@ name = "taki" desc = "It looks like a bunch of legs." icon = 'icons/mob/simple_animal/bug.dmi' - speak_chance = 1 + speak_chance = 0.5 emote_hear = list("scratches the ground","chitters") mob_size = MOB_SIZE_MINISCULE @@ -154,11 +154,10 @@ faction = "crab" icon = 'icons/mob/simple_animal/royalcrab.dmi' move_to_delay = 3 - maxHealth = 150 - health = 150 + max_health = 150 speed = 1 natural_weapon = /obj/item/natural_weapon/pincers - speak_chance = 1 + speak_chance = 0.5 emote_see = list("skitters","oozes liquid from its mouth", "scratches at the ground", "clicks its claws") natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_RESISTANT @@ -169,8 +168,7 @@ desc = "A huge grubby creature." icon = 'icons/mob/simple_animal/char.dmi' mob_size = MOB_SIZE_LARGE - health = 45 - maxHealth = 45 + max_health = 45 natural_weapon = /obj/item/natural_weapon/charbaby speed = 2 return_damage_min = 2 @@ -203,4 +201,4 @@ /mob/living/simple_animal/hostile/retaliate/beast/shantak/lava desc = "A vaguely canine looking beast. It looks as though its fur is made of stone wool." icon = 'icons/mob/simple_animal/lavadog.dmi' - speak = list("Karuph","Karump") \ No newline at end of file + emote_speech = list("Karuph","Karump") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm index e2a46068216..2176e9441d9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm @@ -6,15 +6,14 @@ speak_emote = list("clicks") emote_hear = list("clicks") emote_see = list("clacks") - speak_chance = 1 + speak_chance = 0.5 turns_per_move = 5 meat_amount = 12 can_escape = TRUE //snip snip break_stuff_probability = 15 faction = "crabs" pry_time = 2 SECONDS - health = 350 - maxHealth = 350 + max_health = 350 natural_weapon = /obj/item/natural_weapon/pincers/giant return_damage_min = 2 return_damage_max = 5 @@ -38,7 +37,7 @@ /datum/ai/giant_crab/do_process(time_elapsed) . = ..() var/mob/living/simple_animal/hostile/retaliate/giant_crab/crab = body - if((crab.health > crab.maxHealth / 1.5) && length(crab.enemies) && prob(10)) + if((crab.current_health > crab.get_max_health() / 1.5) && length(crab.enemies) && prob(10)) if(crab.victim) crab.release_grab() crab.enemies = list() @@ -81,7 +80,7 @@ return if(!victim && can_act() && !is_on_special_ability_cooldown() && Adjacent(H)) - events_repository.register(/decl/observ/destroyed, victim, src, .proc/release_grab) + events_repository.register(/decl/observ/destroyed, victim, src, PROC_REF(release_grab)) victim = H SET_STATUS_MAX(H, STAT_WEAK, grab_duration) SET_STATUS_MAX(H, STAT_STUN, grab_duration) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm index d8e6e5347ad..59d8456caca 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm @@ -2,12 +2,11 @@ name = "space parrot" desc = "It could be some all-knowing being that, for reasons we could never hope to understand, is assuming the shape and general mannerisms of a parrot - or just a rather large bird." gender = FEMALE - health = 750 //how sweet it is to be a god! - maxHealth = 750 + max_health = 750 mob_size = MOB_SIZE_LARGE - speak = list("...") - speak_emote = list("professes","speaks unto you","elaborates","proclaims") - emote_hear = list("sings a song to herself", "preens herself") + speak_emote = list("professes","speaks unto you","elaborates","proclaims") + emote_speech = null + emote_hear = list("sings a song to herself", "preens herself") natural_weapon = /obj/item/natural_weapon/giant min_gas = null max_gas = null @@ -69,15 +68,13 @@ subspecies = list(/decl/parrot_subspecies/black) get_subspecies_name = FALSE natural_weapon = /obj/item/natural_weapon/large - health = 300 - maxHealth = 300 + max_health = 300 /mob/living/simple_animal/hostile/retaliate/parrot/space/megafauna name = "giant parrot" desc = "A huge parrot-like bird." get_subspecies_name = FALSE - health = 350 - maxHealth = 350 + max_health = 350 speak_emote = list("squawks") emote_hear = list("preens itself") natural_weapon = /obj/item/natural_weapon/large diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm index f46d7bfd3bb..74fd8bf52ec 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm @@ -2,13 +2,12 @@ name = "goose" desc = "A large waterfowl, known for its beauty and quick temper when provoked." icon = 'icons/mob/simple_animal/goose.dmi' - speak = list("Honk!") - speak_emote = list("honks") - emote_hear = list("honks","flaps its wings","clacks") - emote_see = list("flaps its wings", "scratches the ground") + speak_emote = list("honks") + emote_speech = list("Honk!") + emote_hear = list("honks","flaps its wings","clacks") + emote_see = list("flaps its wings", "scratches the ground") natural_weapon = /obj/item/natural_weapon/goosefeet - health = 45 - maxHealth = 45 + max_health = 45 pass_flags = PASS_FLAG_TABLE faction = "geese" pry_time = 8 SECONDS @@ -44,9 +43,10 @@ if(stat != DEAD && loose) icon_state += "-loose" -/mob/living/simple_animal/hostile/retaliate/goose/death(gibbed, deathmessage, show_dead_message) +/mob/living/simple_animal/hostile/retaliate/goose/death(gibbed) . = ..() - update_icon() + if(. && !gibbed) + update_icon() /mob/living/simple_animal/hostile/retaliate/goose/proc/enrage(var/potency) var/obj/item/attacking_with = get_natural_weapon() @@ -54,8 +54,9 @@ attacking_with.force = min((attacking_with.force + potency), max_damage) if(!loose && prob(25) && (attacking_with && attacking_with.force >= loose_threshold)) //second wind loose = TRUE - health = (initial(health) * 1.5) - maxHealth = (initial(maxHealth) * 1.5) + set_max_health(initial(max_health) * 1.5) + setBruteLoss(0) + setFireLoss(0) enrage_potency = enrage_potency_loose desc += " The [name] is loose! Oh no!" update_icon() @@ -64,8 +65,7 @@ name = "dire goose" desc = "A large bird. It radiates destructive energy." icon = 'icons/mob/simple_animal/goose_dire.dmi' - health = 250 - maxHealth = 250 + max_health = 250 enrage_potency = 3 loose_threshold = 20 max_damage = 35 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm index 0f42951111e..4e6c3246a4f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm @@ -3,16 +3,15 @@ desc = "It looks like a floating jellyfish. How does it do that?" faction = "zeq" icon = 'icons/mob/simple_animal/jelly.dmi' - move_to_delay = 1 - maxHealth = 75 - health = 75 + move_to_delay = 2 + max_health = 75 speed = 1 - natural_weapon = /obj/item/natural_weapon/tentecles - speak_chance = 1 + natural_weapon = /obj/item/natural_weapon/tentacles + speak_chance = 0.5 emote_see = list("wobbles slightly","oozes something out of tentacles' ends") var/gets_random_color = TRUE -/obj/item/natural_weapon/tentecles +/obj/item/natural_weapon/tentacles name = "tentacles" attack_verb = list("stung","slapped") force = 10 @@ -30,8 +29,7 @@ /mob/living/simple_animal/hostile/retaliate/jelly/mega name = "zeq queen" desc = "A gigantic jellyfish-like creature. Its bell wobbles about almost as if it's ready to burst." - maxHealth = 300 - health = 300 + max_health = 300 gets_random_color = FALSE can_escape = TRUE @@ -49,11 +47,11 @@ megajelly_color = color_matrix_rotate_hue(round(rand(0,360),20)) color = megajelly_color -/mob/living/simple_animal/hostile/retaliate/jelly/mega/death() +/mob/living/simple_animal/hostile/retaliate/jelly/mega/death(gibbed) if(split_type) jelly_split() - else - ..() + return TRUE + return ..() /mob/living/simple_animal/hostile/retaliate/jelly/mega/proc/jelly_split() visible_message(SPAN_MFAUNA("\The [src] rumbles briefly before splitting into two!")) @@ -69,8 +67,7 @@ /mob/living/simple_animal/hostile/retaliate/jelly/mega/half name = "zeq duchess" desc = "A huge jellyfish-like creature." - maxHealth = 150 - health = 150 + max_health = 150 can_escape = TRUE jelly_scale = 1.5 split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter @@ -78,8 +75,7 @@ /mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter name = "zeqling" desc = "A jellyfish-like creature." - health = 75 - maxHealth = 75 + max_health = 75 jelly_scale = 0.75 can_escape = FALSE split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth @@ -87,15 +83,13 @@ /mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth name = "zeqetta" desc = "A tiny jellyfish-like creature." - health = 40 - maxHealth = 40 + max_health = 40 jelly_scale = 0.375 split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth /mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth name = "zeqttina" desc = "An absolutely tiny jellyfish-like creature." - health = 20 - maxHealth = 20 + max_health = 20 jelly_scale = 0.1875 split_type = null \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm index a0d3ce2685e..29e13a42d16 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm @@ -13,8 +13,7 @@ emote_see = list("stamps a mighty foot, shaking the surroundings") meat_amount = 12 response_harm = "assaults" - health = 500 - maxHealth = 500 + max_health = 500 mob_size = MOB_SIZE_LARGE mob_bump_flag = HEAVY can_escape = TRUE @@ -59,8 +58,7 @@ desc = "The King of Kings, God amongst men, and your superior in every way." icon = 'icons/mob/simple_animal/goat_king_phase_2.dmi' meat_amount = 36 - health = 750 - maxHealth = 750 + max_health = 750 natural_weapon = /obj/item/natural_weapon/goatking/unleashed elemental_weapons = list( BURN = /obj/item/natural_weapon/goatking/fire/unleashed, @@ -94,8 +92,7 @@ name = "honour guard" desc = "A very handsome and noble beast." icon = 'icons/mob/simple_animal/goat_guard.dmi' - health = 125 - maxHealth = 125 + max_health = 125 natural_weapon = /obj/item/natural_weapon/goathorns /obj/item/natural_weapon/goathorns @@ -108,8 +105,7 @@ name = "master of the guard" desc = "A very handsome and noble beast - the most trusted of all the king's men." icon = 'icons/mob/simple_animal/goat_master.dmi' - health = 200 - maxHealth = 200 + max_health = 200 natural_weapon = /obj/item/natural_weapon/goathorns move_to_delay = 3 @@ -157,15 +153,16 @@ visible_message("\The [src]' eyes begin to glow ominously as dust and debris in the area is kicked up in a light breeze.") stop_automation = TRUE if(do_after(src, 6 SECONDS, src)) - var/health_holder = health + var/initial_brute = getBruteLoss() + var/initial_burn = getFireLoss() visible_message(SPAN_MFAUNA("\The [src] raises its fore-hooves and stomps them into the ground with incredible force!")) explosion(get_step(src,pick(global.cardinal)), -1, 2, 2, 3, 6) explosion(get_step(src,pick(global.cardinal)), -1, 1, 4, 4, 6) explosion(get_step(src,pick(global.cardinal)), -1, 3, 4, 3, 6) stop_automation = FALSE spellscast += 2 - if(!health < health_holder) - health = health_holder //our own magicks cannot harm us + setBruteLoss(initial_brute) + setFireLoss(initial_burn) else visible_message(SPAN_NOTICE("The [src] loses concentration and huffs haughtily.")) stop_automation = FALSE @@ -175,7 +172,8 @@ /mob/living/simple_animal/hostile/retaliate/goat/king/phase2/proc/phase3_transition() phase3 = TRUE spellscast = 0 - health = 750 + max_health = 750 + current_health = max_health new /obj/item/grenade/flashbang/instant(src.loc) QDEL_NULL(boss_theme) boss_theme = play_looping_sound(src, sound_id, 'sound/music/Visager-Miniboss_Fight.ogg', volume = 10, range = 8, falloff = 4, prefer_mute = TRUE) @@ -192,15 +190,14 @@ set_scale(1.25) default_pixel_y = 10 -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Life() +/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE if(special_attacks >= 6 && current_damtype != BRUTE) visible_message(SPAN_MFAUNA("The energy surrounding \the [src]'s horns dissipates.")) current_damtype = BRUTE - - if(health <= 150 && !phase3 && spellscast == 5) //begin phase 3, reset spell limit and heal + if(current_health <= 150 && !phase3 && spellscast == 5) //begin phase 3, reset spell limit and heal phase3_transition() /mob/living/simple_animal/hostile/retaliate/goat/king/proc/OnDeath() @@ -214,9 +211,10 @@ visible_message(SPAN_MFAUNA("\The [src] shrieks as the seal on his power breaks and his wool sheds off!")) new /obj/item/towel/fleece(src.loc) -/mob/living/simple_animal/hostile/retaliate/goat/king/death() - ..() - OnDeath() +/mob/living/simple_animal/hostile/retaliate/goat/king/death(gibbed) + . = ..() + if(.) + OnDeath() /mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Destroy() QDEL_NULL(boss_theme) @@ -235,6 +233,6 @@ . = ..() if(current_damtype != BRUTE) special_attacks++ - + /mob/living/simple_animal/hostile/retaliate/goat/king/Process_Spacemove() return 1 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm index 33b51b3f832..f44a6f78a74 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm @@ -31,12 +31,12 @@ icon = 'icons/mob/simple_animal/parrot.dmi' pass_flags = PASS_FLAG_TABLE mob_size = MOB_SIZE_SMALL - speak = list("Hi","Hello!","Cracker?") - speak_emote = list("squawks","says","yells") - emote_hear = list("squawks","bawks") - emote_see = list("flutters its wings") + emote_speech = list("Hi","Hello!","Cracker?") + speak_emote = list("squawks","says","yells") + emote_hear = list("squawks","bawks") + emote_see = list("flutters its wings") natural_weapon = /obj/item/natural_weapon/beak - speak_chance = 1//1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s + speak_chance = 1 // 1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s turns_per_move = 5 response_harm = "swats" stop_automated_movement = 1 @@ -101,12 +101,15 @@ held_item = null return ..() -/mob/living/simple_animal/hostile/retaliate/parrot/death(gibbed, deathmessage, show_dead_message) - if(held_item) - held_item.dropInto(loc) - held_item = null - walk(src,0) - ..(gibbed, deathmessage, show_dead_message) +/mob/living/simple_animal/hostile/retaliate/parrot/death(gibbed) + var/oldloc = loc + . = ..() + if(. && held_item) + if(oldloc) + held_item.dropInto(oldloc) + held_item = null + else + QDEL_NULL(held_item) /mob/living/simple_animal/hostile/retaliate/parrot/Stat() . = ..() @@ -122,10 +125,10 @@ if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched parrot_interest = user - parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction.. + parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction... if(isliving(user)) var/mob/living/M = user - if(M.health < 50) //Weakened mob? Fight back! + if(M.current_health < 50) //Weakened mob? Fight back! parrot_state |= PARROT_ATTACK return parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell! @@ -206,7 +209,7 @@ SelfMove(pick(global.cardinal)) return - if(!held_item && !parrot_perch) //If we've got nothing to do.. look for something to do. + if(!held_item && !parrot_perch) //If we've got nothing to do, look for something to do. var/atom/movable/AM = search_for_perch_and_item() //This handles checking through lists so we know it's either a perch or stealable item if(AM) if((isitem(AM) && can_pick_up(AM)) || isliving(AM)) //If stealable item @@ -319,9 +322,7 @@ return //Time for the hurt to begin! - var/attacking_with = get_natural_weapon() - if(attacking_with) - L.attackby(attacking_with, src) + UnarmedAttack(L) return //Otherwise, fly towards the mob! @@ -513,4 +514,4 @@ /mob/living/simple_animal/hostile/retaliate/parrot/Poly name = "Poly" desc = "Poly the Parrot. An expert on quantum cracker theory." - speak = list("Poly wanna cracker!", "Check the singlo, you chucklefucks!","Wire the solars, you lazy bums!","WHO TOOK THE DAMN HARDSUITS?","OH GOD ITS FREE CALL THE SHUTTLE!") + emote_speech = list("Poly wanna cracker!", "Check the singlo, you chucklefucks!","Wire the solars, you lazy bums!","WHO TOOK THE DAMN HARDSUITS?","OH GOD ITS FREE CALL THE SHUTTLE!") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 4c0ea689fc7..fc90845fd85 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -1,5 +1,8 @@ /mob/living/simple_animal/hostile/retaliate - var/list/enemies = list() + var/list/enemies = list() + +/mob/living/simple_animal/hostile/can_direct_mount(mob/user) + return user?.faction == faction && ..() /mob/living/simple_animal/hostile/retaliate/Destroy() LAZYCLEARLIST(enemies) @@ -42,8 +45,8 @@ H.enemies |= enemies return 0 -/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(var/damage) - ..(damage) +/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(var/damage, var/do_update_health = FALSE) + ..() Retaliate() /mob/living/simple_animal/hostile/retaliate/buckle_mob(mob/living/M) diff --git a/code/modules/mob/living/simple_animal/hostile/slug.dm b/code/modules/mob/living/simple_animal/hostile/slug.dm index 5248b648d33..a72ee80722e 100644 --- a/code/modules/mob/living/simple_animal/hostile/slug.dm +++ b/code/modules/mob/living/simple_animal/hostile/slug.dm @@ -5,8 +5,7 @@ icon = 'icons/mob/simple_animal/slug.dmi' response_harm = "stomps on" destroy_surroundings = 0 - health = 15 - maxHealth = 15 + max_health = 15 speed = 0 move_to_delay = 0 density = TRUE @@ -41,7 +40,7 @@ var/obj/item/organ/external/chest = GET_EXTERNAL_ORGAN(H, BP_CHEST) var/obj/item/holder/slug/holder = new(get_turf(src)) src.forceMove(holder) - chest.embed(holder,0,"\The [src] latches itself onto \the [H]!") + chest.embed_in_organ(holder, FALSE, "\The [src] latches itself onto \the [H]!") holder.sync(src) /mob/living/simple_animal/hostile/slug/AttackingTarget() @@ -51,7 +50,7 @@ if(prob(H.getBruteLoss()/2)) attach(H) -/mob/living/simple_animal/hostile/slug/Life() +/mob/living/simple_animal/hostile/slug/handle_regular_status_updates() . = ..() if(. && istype(src.loc, /obj/item/holder) && isliving(src.loc.loc)) //We in somebody var/mob/living/L = src.loc.loc diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index ab78665df9d..685f2d966d2 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -6,11 +6,8 @@ turns_per_move = 5 meat_type = /obj/item/chems/food/fish speed = -1 - maxHealth = 250 - health = 250 - + max_health = 250 pixel_x = -16 - harm_intent_damage = 5 natural_weapon = /obj/item/natural_weapon/bite @@ -20,13 +17,20 @@ minbodytemp = 0 faction = "carp" +/mob/living/simple_animal/hostile/tree/check_has_mouth() + return FALSE + /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() if(.) audible_emote("growls at [.]") -/mob/living/simple_animal/hostile/tree/death(gibbed, deathmessage, show_dead_message) - ..(null,"is hacked into pieces!", show_dead_message) - var/decl/material/mat = GET_DECL(/decl/material/solid/organic/wood) - mat.place_shards(loc) - qdel(src) \ No newline at end of file +/mob/living/simple_animal/hostile/tree/get_death_message(gibbed) + return "is hacked into pieces!" + +/mob/living/simple_animal/hostile/tree/death(gibbed) + . = ..() + if(. && !gibbed) + var/decl/material/mat = GET_DECL(/decl/material/solid/organic/wood) + mat.place_shards(loc) + qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/vagrant.dm b/code/modules/mob/living/simple_animal/hostile/vagrant.dm index c0f8e6a2196..fe244965817 100644 --- a/code/modules/mob/living/simple_animal/hostile/vagrant.dm +++ b/code/modules/mob/living/simple_animal/hostile/vagrant.dm @@ -3,8 +3,7 @@ name = "creature" desc = "You get the feeling you should run." icon = 'icons/mob/simple_animal/vagrant.dmi' - maxHealth = 60 - health = 20 + max_health = 60 speed = 5 speak_chance = 0 turns_per_move = 4 @@ -18,22 +17,22 @@ max_gas = null minbodytemp = 0 gene_damage = -1 + pass_flags = PASS_FLAG_TABLE + bleed_colour = "#aad9de" + nutrition = 100 var/cloaked = 0 var/mob/living/carbon/human/gripping = null var/blood_per_tick = 3 var/health_per_tick = 0.8 - pass_flags = PASS_FLAG_TABLE - - bleed_colour = "#aad9de" /mob/living/simple_animal/hostile/vagrant/Process_Spacemove() return 1 /mob/living/simple_animal/hostile/vagrant/bullet_act(var/obj/item/projectile/Proj) - var/oldhealth = health + var/oldhealth = current_health . = ..() - if(isliving(Proj.firer) && (target_mob != Proj.firer) && health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) //Respond to being shot at + if(isliving(Proj.firer) && (target_mob != Proj.firer) && current_health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) //Respond to being shot at target_mob = Proj.firer turns_per_move = 3 MoveToTarget() @@ -43,7 +42,7 @@ if(. && !gibbed) gib() -/mob/living/simple_animal/hostile/vagrant/Life() +/mob/living/simple_animal/hostile/vagrant/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE @@ -55,9 +54,9 @@ var/blood_volume = round(gripping.vessel.total_volume) if(blood_volume > 5) gripping.vessel.remove_any(blood_per_tick) - health = min(health + health_per_tick, maxHealth) + heal_overall_damage(health_per_tick) if(prob(15)) - to_chat(gripping, "You feel your fluids being drained!") + to_chat(gripping, SPAN_DANGER("You feel your fluids being drained!")) else gripping = null @@ -67,24 +66,25 @@ if(stance == HOSTILE_STANCE_IDLE && !cloaked) cloaked = 1 update_icon() - if(health == maxHealth) + + if(get_nutrition() > get_max_nutrition()) new/mob/living/simple_animal/hostile/vagrant(src.loc) new/mob/living/simple_animal/hostile/vagrant(src.loc) gib() - return /mob/living/simple_animal/hostile/vagrant/on_update_icon() ..() - if(cloaked) //It's fun time - alpha = 75 - set_light(0) - icon_state = initial(icon_state) - move_to_delay = initial(move_to_delay) - else //It's fight time - alpha = 255 - icon_state += "-glowing" - set_light(3, 0.2) - move_to_delay = 2 + if(stat == CONSCIOUS) + if(cloaked) //It's fun time + alpha = 75 + set_light(0) + icon_state = initial(icon_state) + move_to_delay = initial(move_to_delay) + else //It's fight time + alpha = 255 + icon_state += "-glowing" + set_light(3, 0.2) + move_to_delay = 2 /mob/living/simple_animal/hostile/vagrant/AttackingTarget() . = ..() @@ -96,7 +96,7 @@ return //This line ensures there's always a reasonable chance of grabbing, while still //Factoring in health - if(!gripping && (cloaked || prob(health + ((maxHealth - health) * 2)))) + if(!gripping && (cloaked || prob(current_health + ((get_max_health() - current_health) * 2)))) gripping = H cloaked = 0 update_icon() diff --git a/code/modules/mob/living/simple_animal/hostile/viscerator.dm b/code/modules/mob/living/simple_animal/hostile/viscerator.dm index cbe04e3dcd9..a48246f0b3b 100644 --- a/code/modules/mob/living/simple_animal/hostile/viscerator.dm +++ b/code/modules/mob/living/simple_animal/hostile/viscerator.dm @@ -3,14 +3,13 @@ desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations." icon = 'icons/mob/simple_animal/viscerator.dmi' pass_flags = PASS_FLAG_TABLE - health = 15 - maxHealth = 15 + max_health = 15 natural_weapon = /obj/item/natural_weapon/rotating_blade faction = "syndicate" min_gas = null max_gas = null minbodytemp = 0 - + attack_delay = DEFAULT_QUICK_COOLDOWN bleed_colour = SYNTH_BLOOD_COLOR meat_type = null @@ -28,9 +27,16 @@ edge = 1 sharp = 1 -/mob/living/simple_animal/hostile/viscerator/death(gibbed, deathmessage, show_dead_message) - ..(null, "is smashed into pieces!", show_dead_message) - qdel(src) +/mob/living/simple_animal/hostile/viscerator/check_has_mouth() + return FALSE + +/mob/living/simple_animal/hostile/viscerator/get_death_message(gibbed) + return "is smashed into pieces!" + +/mob/living/simple_animal/hostile/viscerator/death(gibbed) + . = ..() + if(. && !gibbed) + qdel(src) /mob/living/simple_animal/hostile/viscerator/hive faction = "hivebot" diff --git a/code/modules/mob/living/simple_animal/natural_weapons.dm b/code/modules/mob/living/simple_animal/natural_weapons.dm index 5e8292fffa7..231c5a821db 100644 --- a/code/modules/mob/living/simple_animal/natural_weapons.dm +++ b/code/modules/mob/living/simple_animal/natural_weapons.dm @@ -14,6 +14,7 @@ /obj/item/natural_weapon/can_embed() return FALSE + /obj/item/natural_weapon/bite name = "teeth" attack_verb = list("bitten") diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index d3a41e1684c..d798265b2d7 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -3,13 +3,12 @@ real_name = "Shade" desc = "A bound spirit" icon = 'icons/mob/simple_animal/shade.dmi' - maxHealth = 50 - health = 50 + max_health = 50 universal_speak = TRUE speak_emote = list("hisses") emote_hear = list("wails","screeches") response_help_1p = "You wave your hand through $TARGET$." - response_help_3p = "$USER$ waves $USER_HIS$ hand through $TARGET$." + response_help_3p = "$USER$ waves $USER_THEIR$ hand through $TARGET$." response_disarm = "flails at" response_harm = "punches" natural_weapon = /obj/item/natural_weapon/shade @@ -34,6 +33,9 @@ skin_material = null skin_amount = 0 +/mob/living/simple_animal/shade/check_has_mouth() + return FALSE + /obj/item/natural_weapon/shade name = "foul touch" attack_verb = list("drained") @@ -43,13 +45,14 @@ /mob/living/simple_animal/shade/on_defilement() return -/mob/living/simple_animal/shade/Life() - . = ..() - OnDeathInLife() +/mob/living/simple_animal/shade/get_death_message(gibbed) + return "lets out a contented sigh as their form unwinds" -/mob/living/simple_animal/shade/proc/OnDeathInLife() - if(stat == DEAD) - new /obj/item/ectoplasm (src.loc) - visible_message(SPAN_WARNING("\The [src] lets out a contented sigh as their form unwinds.")) - ghostize() +/mob/living/simple_animal/shade/get_self_death_message(gibbed) + return "You have been released from your earthly binds." + +/mob/living/simple_animal/shade/death(gibbed) + . = ..() + if(. && !gibbed) + new /obj/item/ectoplasm(src.loc) qdel(src) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 1dfe5c06ae1..1226ee0bc8f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -1,7 +1,6 @@ /mob/living/simple_animal name = "animal" - health = 20 - maxHealth = 20 + max_health = 20 universal_speak = FALSE mob_sort_value = 12 @@ -17,19 +16,27 @@ skin_amount = 5 icon_state = ICON_STATE_WORLD + buckle_pixel_shift = @"{'x':0,'y':0,'z':8}" - var/gene_damage = 0 // Set to -1 to disable gene damage for the mob. - var/show_stat_health = 1 //does the percentage health show in the stat panel for the mob - var/list/speak = list("...") + var/can_have_rider = TRUE + var/max_rider_size = MOB_SIZE_SMALL + + /// Does the percentage health show in the stat panel for the mob? + var/show_stat_health = TRUE + /// A prob chance of speaking. var/speak_chance = 0 - var/list/emote_hear = list() //Hearable emotes - var/list/emote_see = list() //Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps + /// Strings shown when this mob speaks and is not understood. + var/list/emote_speech + /// Hearable emotes that this mob can randomly perform. + var/list/emote_hear + /// Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps + var/list/emote_see var/turns_per_move = 1 var/turns_since_move = 0 var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals. - var/wander = 1 // Does the mob wander around when idle? + var/wander = TRUE // Does the mob wander around when idle? var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is grabbing it. //Interaction @@ -92,6 +99,12 @@ var/scannable_result // Codex page generated when this mob is scanned. var/base_animal_type // set automatically in Initialize(), used for language checking. + var/attack_delay = DEFAULT_ATTACK_COOLDOWN // How long in ds that a creature winds up before attacking. + var/sa_accuracy = 85 //base chance to hit out of 100 + + // Visible message shown when the mob dies. + var/death_message = "dies!" + /mob/living/simple_animal/Initialize() . = ..() @@ -133,6 +146,8 @@ var/global/list/simplemob_icon_bitflag_cache = list() mob_icon_state_flags |= MOB_ICON_HAS_REST_STATE if(check_state_in_icon("world-gib", icon)) mob_icon_state_flags |= MOB_ICON_HAS_GIB_STATE + if(check_state_in_icon("world-dust", icon)) + mob_icon_state_flags |= MOB_ICON_HAS_DUST_STATE if(check_state_in_icon("world-paralyzed", icon)) mob_icon_state_flags |= MOB_ICON_HAS_PARALYZED_STATE global.simplemob_icon_bitflag_cache[type] = mob_icon_state_flags @@ -171,46 +186,29 @@ var/global/list/simplemob_icon_bitflag_cache = list() QDEL_NULL(natural_weapon) . = ..() -/mob/living/simple_animal/Life() - if(is_aquatic && !submerged() && stat != DEAD) - walk(src, 0) - if(!HAS_STATUS(src, STAT_PARA)) // gated to avoid redundant update_icon() calls. - SET_STATUS_MAX(src, STAT_PARA, 3) - update_icon() - . = ..() - if(!.) - return FALSE - if(z && !living_observers_present(SSmapping.get_connected_levels(z))) - return - //Health - if(stat == DEAD) - if(health > 0) - switch_from_dead_to_living_mob_list() - set_stat(CONSCIOUS) - set_density(1) - update_icon() - return 0 - - handle_atmos() - - if(health <= 0) - death() - return - - if(health > maxHealth) - health = maxHealth - - handle_supernatural() - handle_impaired_vision() - - if(can_bleed && bleed_ticks > 0) - handle_bleeding() +/mob/living/simple_animal/handle_regular_status_updates() + if(purge) + purge -= 1 - delayed_life_action() - return 1 + . = ..() + if(.) + if(can_bleed && bleed_ticks > 0) + handle_bleeding() + if(is_aquatic && !submerged()) + walk(src, 0) + if(HAS_STATUS(src, STAT_PARA) <= 2) // gated to avoid redundant update_icon() calls. + SET_STATUS_MAX(src, STAT_PARA, 3) + update_icon() + +/mob/living/simple_animal/handle_some_updates() + . = ..() && (!z || living_observers_present(SSmapping.get_connected_levels(z))) + +/mob/living/simple_animal/handle_legacy_ai() + . = ..() + handle_async_life_action() // Handles timed stuff in Life() -/mob/living/simple_animal/proc/delayed_life_action() +/mob/living/simple_animal/proc/handle_async_life_action() set waitfor = FALSE if(performing_delayed_life_action) return @@ -220,6 +218,15 @@ var/global/list/simplemob_icon_bitflag_cache = list() do_delayed_life_action() performing_delayed_life_action = FALSE +/mob/living/simple_animal/proc/turf_is_safe(turf/target) + if(!istype(target)) + return FALSE + if(target.is_open() && target.has_gravity() && !can_overcome_gravity()) + return FALSE + if(is_aquatic != target.submerged()) + return FALSE + return TRUE + // For saner overriding; only override this. /mob/living/simple_animal/proc/do_delayed_life_action() if(buckled && can_escape) @@ -240,32 +247,33 @@ var/global/list/simplemob_icon_bitflag_cache = list() if(isturf(src.loc) && !resting) //This is so it only moves if it's not inside a closet, gentics machine, etc. turns_since_move++ if(turns_since_move >= turns_per_move && (!(stop_automated_movement_when_pulled) || !LAZYLEN(grabbed_by))) //Some animals don't move when pulled - SelfMove(pick(global.cardinal)) - turns_since_move = 0 + var/direction = pick(global.cardinal) + var/turf/move_to = get_step(loc, direction) + if(turf_is_safe(move_to)) + SelfMove(direction) + turns_since_move = 0 //Speaking - if(speak_chance) - if(rand(0,200) < speak_chance) - var/action = pick( - speak.len; "speak", - emote_hear.len; "emote_hear", - emote_see.len; "emote_see" - ) - - switch(action) - if("speak") - say(pick(speak)) - if("emote_hear") + if(prob(speak_chance)) + var/action = pick( + LAZYLEN(emote_speech); "emote_speech", + LAZYLEN(emote_hear); "emote_hear", + LAZYLEN(emote_see); "emote_see" + ) + switch(action) + if("emote_speech") + if(length(emote_speech)) + say(pick(emote_speech)) + if("emote_hear") + if(length(emote_hear)) audible_emote("[pick(emote_hear)].") - if("emote_see") + if("emote_see") + if(length(emote_see)) visible_emote("[pick(emote_see)].") -/mob/living/simple_animal/proc/handle_atmos(var/atmos_suitable = 1) - //Atmos - if(!loc) - return - - var/datum/gas_mixture/environment = loc.return_air() +/mob/living/simple_animal/handle_environment(datum/gas_mixture/environment) + . = ..() + var/atmos_suitable = TRUE if(environment) // don't bother checking it twice if we got a supplied FALSE val. if(atmos_suitable) @@ -287,10 +295,10 @@ var/global/list/simplemob_icon_bitflag_cache = list() if(bodytemperature < minbodytemp) fire_alert = 2 - adjustBruteLoss(cold_damage_per_tick) + adjustFireLoss(cold_damage_per_tick) else if(bodytemperature > maxbodytemp) fire_alert = 1 - adjustBruteLoss(heat_damage_per_tick) + adjustFireLoss(heat_damage_per_tick) else fire_alert = 0 @@ -301,12 +309,13 @@ var/global/list/simplemob_icon_bitflag_cache = list() O.unbuckle_mob(M) visible_message(SPAN_DANGER("\The [M] escapes from \the [O]!")) -/mob/living/simple_animal/proc/handle_supernatural() - if(purge) - purge -= 1 +/mob/living/simple_animal/get_gibbed_icon() + return icon -/mob/living/simple_animal/gib() - ..(((mob_icon_state_flags & MOB_ICON_HAS_GIB_STATE) ? "world-gib" : null), TRUE) +/mob/living/simple_animal/get_gibbed_state(dusted) + if(dusted) + return (mob_icon_state_flags & MOB_ICON_HAS_DUST_STATE) ? "world-dust" : null + return (mob_icon_state_flags & MOB_ICON_HAS_GIB_STATE) ? "world-gib" : null /mob/living/simple_animal/proc/visible_emote(var/act_desc) custom_emote(1, act_desc) @@ -327,7 +336,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() damage = Proj.damage / 1.5 if(Proj.agony) damage += Proj.agony / 6 - if(health < Proj.agony * 3) + if(current_health < Proj.agony * 3) SET_STATUS_MAX(src, STAT_PARA, Proj.agony / 20) visible_message("[src] is stunned momentarily!") @@ -340,7 +349,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() . = ..() || list(response_help_3p, response_help_1p) /mob/living/simple_animal/default_help_interaction(mob/user) - if(health > 0 && user.attempt_hug(src)) + if(current_health > 0 && user.attempt_hug(src)) user.update_personal_goal(/datum/goal/achievement/specific_object/pet, type) return TRUE . = ..() @@ -371,12 +380,13 @@ var/global/list/simplemob_icon_bitflag_cache = list() return TRUE /mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user) + if(istype(O, /obj/item/stack/medical)) if(stat != DEAD) var/obj/item/stack/medical/MED = O if(!MED.animal_heal) to_chat(user, SPAN_WARNING("\The [MED] won't help \the [src] at all!")) - else if(health < maxHealth && MED.can_use(1)) + else if(current_health < get_max_health() && MED.can_use(1)) adjustBruteLoss(-MED.animal_heal) visible_message(SPAN_NOTICE("\The [user] applies \the [MED] to \the [src].")) MED.use(1) @@ -385,33 +395,23 @@ var/global/list/simplemob_icon_bitflag_cache = list() to_chat(user, SPAN_WARNING("\The [src] is dead, medical items won't bring [G.him] back to life.")) return TRUE - if(istype(O, /obj/item/flash) && stat != DEAD) - return O.attack(src, user, user.get_target_zone()) - - if(meat_type && (stat == DEAD) && meat_amount) - if(istype(O, /obj/item/knife/kitchen/cleaver)) - var/victim_turf = get_turf(src) - if(!locate(/obj/structure/table, victim_turf)) - to_chat(user, SPAN_WARNING("You need to place \the [src] on a table to butcher it.")) - return TRUE - var/time_to_butcher = (mob_size) - to_chat(user, SPAN_WARNING("You begin harvesting \the [src].")) - if(do_after(user, time_to_butcher, src, same_direction = TRUE)) - if(prob(user.skill_fail_chance(SKILL_COOKING, 60, SKILL_ADEPT))) - to_chat(user, SPAN_DANGER("You botch harvesting \the [src], and ruin some of the meat in the process.")) - subtract_meat(user) - else - harvest(user, user.get_skill_value(SKILL_COOKING)) - else - to_chat(user, SPAN_DANGER("Your hand slips with your movement, and some of the meat is ruined.")) - subtract_meat(user) - return TRUE - - else - if(!O.force || (O.item_flags & ITEM_FLAG_NO_BLUDGEON)) - visible_message(SPAN_NOTICE("\The [user] gently taps [src] with \the [O].")) + if(meat_type && (stat == DEAD) && meat_amount && istype(O, /obj/item/knife/kitchen/cleaver)) + var/victim_turf = get_turf(src) + if(!locate(/obj/structure/table, victim_turf)) + to_chat(user, SPAN_WARNING("You need to place \the [src] on a table to butcher it.")) return TRUE - return O.attack(src, user, user.get_target_zone() || ran_zone()) + var/time_to_butcher = (mob_size) + to_chat(user, SPAN_WARNING("You begin harvesting \the [src].")) + if(do_after(user, time_to_butcher, src, same_direction = TRUE)) + if(prob(user.skill_fail_chance(SKILL_COOKING, 60, SKILL_ADEPT))) + to_chat(user, SPAN_DANGER("You botch harvesting \the [src], and ruin some of the meat in the process.")) + subtract_meat(user) + else + harvest(user, user.get_skill_value(SKILL_COOKING)) + else + to_chat(user, SPAN_DANGER("Your hand slips with your movement, and some of the meat is ruined.")) + subtract_meat(user) + return TRUE return ..() @@ -446,19 +446,23 @@ var/global/list/simplemob_icon_bitflag_cache = list() tally = 1 tally *= purge - return tally+config.animal_delay + return tally+get_config_value(/decl/config/num/movement_animal) /mob/living/simple_animal/Stat() . = ..() if(statpanel("Status") && show_stat_health) - stat(null, "Health: [round((health / maxHealth) * 100)]%") + stat(null, "Health: [get_health_percent()]%") + +/mob/living/simple_animal/get_death_message(gibbed) + if(!gibbed && death_message) + return death_message + return ..() -/mob/living/simple_animal/death(gibbed, deathmessage = "dies!", show_dead_message) - density = FALSE - adjustBruteLoss(maxHealth) //Make sure dey dead. - walk_to(src,0) - . = ..(gibbed,deathmessage,show_dead_message) +/mob/living/simple_animal/death(gibbed) + . = ..() + if(.) + density = FALSE /mob/living/simple_animal/explosion_act(severity) ..() @@ -472,26 +476,10 @@ var/global/list/simplemob_icon_bitflag_cache = list() damage = 30 apply_damage(damage, BRUTE, damage_flags = DAM_EXPLODE) -/mob/living/simple_animal/adjustBruteLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustFireLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustToxLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustOxyLoss(damage) - ..() - updatehealth() - /mob/living/simple_animal/proc/SA_attackable(target_mob) if (isliving(target_mob)) var/mob/living/L = target_mob - if(!L.stat && L.health >= 0) + if(!L.stat && L.current_health >= 0) return (0) return 1 @@ -530,20 +518,6 @@ var/global/list/simplemob_icon_bitflag_cache = list() if(meat_amount <= 0) to_chat(user, SPAN_NOTICE("\The [src] carcass is ruined beyond use.")) -/mob/living/simple_animal/bullet_impact_visuals(var/obj/item/projectile/P, var/def_zone) - ..() - switch(get_bullet_impact_effect_type(def_zone)) - if(BULLET_IMPACT_MEAT) - if(P.damtype == BRUTE) - var/hit_dir = get_dir(P.starting, src) - var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir) - if(!QDELETED(B)) - B.icon_state = pick("dir_splatter_1","dir_splatter_2") - B.basecolor = bleed_colour - var/scale = min(1, round(mob_size / MOB_SIZE_MEDIUM, 0.1)) - B.set_scale(scale) - B.update_icon() - /mob/living/simple_animal/handle_fire() return @@ -601,18 +575,6 @@ var/global/list/simplemob_icon_bitflag_cache = list() natural_weapon = new natural_weapon(src) return natural_weapon -/mob/living/simple_animal/getCloneLoss() - . = max(0, gene_damage) - -/mob/living/simple_animal/adjustCloneLoss(var/amount) - setCloneLoss(gene_damage + amount) - -/mob/living/simple_animal/setCloneLoss(amount) - if(gene_damage >= 0) - gene_damage = clamp(amount, 0, maxHealth) - if(gene_damage >= maxHealth) - death() - /mob/living/simple_animal/get_admin_job_string() return "Animal" @@ -647,7 +609,6 @@ var/global/list/simplemob_icon_bitflag_cache = list() /mob/living/simple_animal/get_hydration() return get_max_hydration() - /// Adapts our temperature and atmos thresholds to our current z-level. /mob/living/simple_animal/proc/adapt_to_current_level() var/turf/T = get_turf(src) @@ -674,7 +635,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() return for(var/gas in level_data.exterior_atmosphere.gas) - var/gas_amt = level_data.exterior_atmosphere[gas] + var/gas_amt = level_data.exterior_atmosphere.gas[gas] if(min_gas) min_gas[gas] = round(gas_amt * 0.5) if(max_gas) @@ -686,3 +647,16 @@ var/global/list/simplemob_icon_bitflag_cache = list() name = "animal" bodytype_flag = 0 bodytype_category = "animal body" + +/mob/living/simple_animal/proc/get_melee_accuracy() + return clamp(sa_accuracy - melee_accuracy_mods(), 0, 100) + +/mob/living/simple_animal/check_has_mouth() + return TRUE + +/mob/living/simple_animal/can_buckle_mob(var/mob/living/dropping) + . = ..() && can_have_rider && (dropping.mob_size <= max_rider_size) + +// Simplemobs have to hang out in the rain so make them immune to weather effects (like hail). +/mob/living/simple_animal/handle_weather_effects() + SHOULD_CALL_PARENT(FALSE) diff --git a/code/modules/mob/living/simple_animal/simple_animal_damage.dm b/code/modules/mob/living/simple_animal/simple_animal_damage.dm new file mode 100644 index 00000000000..096687245d9 --- /dev/null +++ b/code/modules/mob/living/simple_animal/simple_animal_damage.dm @@ -0,0 +1,39 @@ +/mob/living/simple_animal + var/brute_damage = 0 + var/burn_damage = 0 + /// Set to -1 to disable gene damage for the mob. + var/gene_damage = 0 + +/mob/living/simple_animal/getFireLoss() + return burn_damage + +/mob/living/simple_animal/getBruteLoss() + return brute_damage + +/mob/living/simple_animal/getCloneLoss() + . = max(0, gene_damage) + +/mob/living/simple_animal/adjustCloneLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(FALSE) + setCloneLoss(gene_damage + amount) + if(do_update_health) + update_health() + +/mob/living/simple_animal/setCloneLoss(amount) + if(gene_damage >= 0) + var/current_max_health = get_max_health() + gene_damage = clamp(amount, 0, current_max_health) + if(gene_damage >= current_max_health) + death() + +/mob/living/simple_animal/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + brute_damage = clamp(brute_damage + amount, 0, get_max_health()) + return ..() + +/mob/living/simple_animal/adjustFireLoss(var/amount, var/do_update_health = TRUE) + burn_damage = clamp(burn_damage + amount, 0, get_max_health()) + if(do_update_health) + update_health() + +/mob/living/simple_animal/get_total_life_damage() + return getFireLoss() + getBruteLoss() + getCloneLoss() diff --git a/code/modules/mob/living/stasis.dm b/code/modules/mob/living/stasis.dm index 490b49be8e4..76fda177df5 100644 --- a/code/modules/mob/living/stasis.dm +++ b/code/modules/mob/living/stasis.dm @@ -16,14 +16,19 @@ stasis_value += stasis_sources[source] stasis_sources = null + if(stasis_value > 1 && GET_STATUS(src, STAT_DROWSY) < stasis_value * 4) + ADJ_STATUS(src, STAT_DROWSY, min(stasis_value, 3)) + if(stat == CONSCIOUS && prob(1)) + to_chat(src, SPAN_NOTICE("You feel slow and sluggish...")) + /mob/living/proc/get_cryogenic_factor(var/bodytemperature) if(isSynthetic()) return 0 - var/cold_1 = get_temperature_threshold(COLD_LEVEL_1) - var/cold_2 = get_temperature_threshold(COLD_LEVEL_2) - var/cold_3 = get_temperature_threshold(COLD_LEVEL_3) + var/cold_1 = get_mob_temperature_threshold(COLD_LEVEL_1) + var/cold_2 = get_mob_temperature_threshold(COLD_LEVEL_2) + var/cold_3 = get_mob_temperature_threshold(COLD_LEVEL_3) if(bodytemperature > cold_1) return 0 diff --git a/code/modules/mob/living/stress.dm b/code/modules/mob/living/stress.dm index b67360e26bc..2cb46e0c27b 100644 --- a/code/modules/mob/living/stress.dm +++ b/code/modules/mob/living/stress.dm @@ -1,7 +1,7 @@ #define GET_STRESSOR(S) (istype(S, /datum/stressor) ? S : SSmanaged_instances.get(S, cache_category = /datum/stressor)) /mob/living/proc/get_stress_modifier() - if(!config.adjust_healing_from_stress) + if(!get_config_value(/decl/config/toggle/health_adjust_healing_from_stress)) return 0 return stress diff --git a/code/modules/mob/living/update_icon.dm b/code/modules/mob/living/update_icon.dm deleted file mode 100644 index 29b58f6e0f5..00000000000 --- a/code/modules/mob/living/update_icon.dm +++ /dev/null @@ -1,38 +0,0 @@ -/mob/living - var/list/mob_overlays[TOTAL_OVER_LAYERS] - var/list/mob_underlays[TOTAL_UNDER_LAYERS] - -/mob/living/update_icon() - ..() - compile_overlays() - -/mob/living/on_update_icon() - SHOULD_CALL_PARENT(TRUE) - ..() - cut_overlays() - if(auras) - for(var/obj/aura/aura as anything in auras) - var/image/A = new() - A.appearance = aura - add_overlay(A) - try_refresh_visible_overlays() - -/mob/living/get_all_current_mob_overlays() - return mob_overlays - -/mob/living/set_current_mob_overlay(var/overlay_layer, var/image/overlay, var/redraw_mob = TRUE) - mob_overlays[overlay_layer] = overlay - ..() - -/mob/living/get_current_mob_overlay(var/overlay_layer) - return mob_overlays[overlay_layer] - -/mob/living/get_all_current_mob_underlays() - return mob_underlays - -/mob/living/set_current_mob_underlay(var/underlay_layer, var/image/underlay, var/redraw_mob = TRUE) - mob_underlays[underlay_layer] = underlay - ..() - -/mob/living/get_current_mob_underlay(var/underlay_layer) - return mob_underlays[underlay_layer] diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 790b2ee8eb7..9f367883a5e 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -5,7 +5,7 @@ computer_id = client.computer_id last_ckey = ckey log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]") - if(config.log_access) + if(get_config_value(/decl/config/toggle/log_access)) var/is_multikeying = 0 for(var/mob/M in global.player_list) if(M == src) continue @@ -29,7 +29,8 @@ spawn(1 SECOND) to_chat(src, "WARNING: It would seem that you are sharing connection or computer with another player. If you haven't done so already, please contact the staff via the Adminhelp verb to resolve this situation. Failure to do so may result in administrative action. You have been warned.") - if(config.login_export_addr) + var/login_export_addr = get_config_value(/decl/config/text/login_export_addr) + if(login_export_addr) spawn(-1) var/list/params = new params["login"] = 1 @@ -40,7 +41,7 @@ params["clientid"] = client.computer_id params["roundid"] = game_id params["name"] = real_name || name - world.Export("[config.login_export_addr]?[list2params(params)]", null, 1) + world.Export("[login_export_addr]?[list2params(params)]", null, 1) /mob/proc/maybe_send_staffwarns(var/action) if(client.staffwarn) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index dc258343e95..f165db28384 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -26,7 +26,7 @@ if(client) for(var/atom/movable/AM in client.screen) var/obj/screen/screenobj = AM - if(istype(screenobj) && !screenobj.globalscreen) + if(istype(screenobj) && !screenobj.is_global_screen) qdel(screenobj) client.screen = list() if(mind) @@ -36,7 +36,6 @@ return ..() /mob/proc/remove_screen_obj_references() - QDEL_NULL_SCREEN(hands) QDEL_NULL_SCREEN(internals) QDEL_NULL_SCREEN(oxygen) QDEL_NULL_SCREEN(toxin) @@ -44,6 +43,7 @@ QDEL_NULL_SCREEN(bodytemp) QDEL_NULL_SCREEN(healths) QDEL_NULL_SCREEN(throw_icon) + QDEL_NULL_SCREEN(maneuver_icon) QDEL_NULL_SCREEN(nutrition_icon) QDEL_NULL_SCREEN(hydration_icon) QDEL_NULL_SCREEN(pressure) @@ -64,6 +64,7 @@ if(ispath(move_intent)) move_intent = GET_DECL(move_intent) . = ..() + ability_master = new(null, src) refresh_ai_handler() START_PROCESSING(SSmobs, src) @@ -362,13 +363,16 @@ break // Other incidentals. - var/obj/item/clothing/under/suit = get_equipped_item(slot_w_uniform_str) + var/obj/item/clothing/suit = get_equipped_item(slot_w_uniform_str) if(istype(suit)) dat += "
    Pockets: Empty or Place Item" - if(suit.has_sensor == SUIT_HAS_SENSORS) - dat += "
    Set sensors" - if (suit.has_sensor && user.get_multitool()) - dat += "
    [suit.has_sensor == SUIT_LOCKED_SENSORS ? "Unl" : "L"]ock sensors" + var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor() + if(sensor) + if(sensor.get_sensors_locked()) + dat += "
    Unlock vitals sensors" + else if(user.get_multitool()) + dat += "
    Lock vitals sensors" + dat += "
    Set vitals sensors" if(get_equipped_item(slot_handcuffed_str)) dat += "
    Handcuffed" @@ -399,7 +403,7 @@ face_atom(A) - if(!isghost(src) && config.visible_examine) + if(!isghost(src) && get_config_value(/decl/config/toggle/visible_examine)) if((A.loc != src || (A in get_held_items()))) var/look_target = "at \the [A]" if(isobj(A.loc)) @@ -548,6 +552,9 @@ return TOPIC_HANDLED // If usr != src, or if usr == src but the Topic call was not resolved, this is called next. +/mob/proc/get_comments_record() + return + /mob/OnTopic(mob/user, href_list, datum/topic_state/state) if(href_list["refresh"]) @@ -563,6 +570,14 @@ var/datum/browser/popup = new(user, ckey(name), name, 500, 200) var/list/html = list("

    Appearance

    ") html += replacetext(flavor_text, "\n", "
    ") + var/datum/character_information/comments = get_comments_record() + if(comments) + if(comments.ic_info) + html += "

    IC Information

    " + html += "[comments.ic_info]
    " + if(comments.ooc_info) + html += "

    OOC Information

    " + html += "[comments.ooc_info]
    " popup.set_content(jointext(html, null)) popup.open() return TOPIC_HANDLED @@ -590,7 +605,7 @@ return TRUE return FALSE -/mob/handle_mouse_drop(atom/over, mob/user) +/mob/handle_mouse_drop(atom/over, mob/user, params) if(over == user && user != src && !isAI(user)) show_stripping_window(user) return TRUE @@ -682,7 +697,7 @@ if(statpanel("Turf")) stat(listed_turf) for(var/atom/A in listed_turf) - if(!A.mouse_opacity) + if(!A.simulated || !A.mouse_opacity) continue if(A.invisibility > see_invisible) continue @@ -700,10 +715,9 @@ return 0 //Updates lying and icons -/mob/proc/UpdateLyingBuckledAndVerbStatus() - var/last_lying = lying +/mob/proc/update_lying() if(!resting && cannot_stand() && can_stand_overridden()) - lying = 0 + lying = FALSE else if(buckled) anchored = TRUE if(istype(buckled)) @@ -716,12 +730,16 @@ else lying = incapacitated(INCAPACITATION_KNOCKDOWN) +/mob/proc/UpdateLyingBuckledAndVerbStatus() + var/last_lying = lying + update_lying() + if(buckled) + anchored = (!istype(buckled) || !buckled.buckle_movable) if(lying) set_density(0) drop_held_items() else set_density(initial(density)) - reset_layer() //Temporarily moved here from the various life() procs @@ -776,7 +794,12 @@ return /mob/proc/get_species_name() - return "" + SHOULD_CALL_PARENT(TRUE) + return "Unknown" + +/mob/living/get_species_name() + var/decl/species/my_species = get_species() + return my_species?.name || ..() /mob/proc/get_visible_implants(var/class = 0) var/list/visible_implants = list() @@ -788,45 +811,8 @@ /mob/proc/embedded_needs_process() return !!LAZYLEN(embedded) -/mob/proc/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE) - if(!LAZYLEN(get_visible_implants(0))) //Yanking out last object - removing verb. - verbs -= /mob/proc/yank_out_object - for(var/obj/item/O in pinned) - if(O == implant) - LAZYREMOVE(pinned, O) - if(!LAZYLEN(pinned)) - anchored = FALSE - implant.dropInto(loc) - implant.add_blood(src) - implant.update_icon() - if(istype(implant,/obj/item/implant)) - var/obj/item/implant/imp = implant - imp.removed() - . = TRUE - -/mob/living/silicon/robot/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE) - LAZYREMOVE(embedded, implant) - adjustBruteLoss(5) - adjustFireLoss(10) - . = ..() - -/mob/living/carbon/human/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE, var/obj/item/organ/external/affected) - if(!affected) //Grab the organ holding the implant. - for(var/obj/item/organ/external/organ in get_external_organs()) - for(var/obj/item/O in organ.implants) - if(O == implant) - affected = organ - break - if(affected) - LAZYREMOVE(affected.implants, implant) - for(var/datum/wound/wound in affected.wounds) - LAZYREMOVE(wound.embedded_objects, implant) - if(!surgical_removal) - shock_stage+=20 - affected.take_external_damage((implant.w_class * 3), 0, DAM_EDGE, "Embedded object extraction") - if(!BP_IS_PROSTHETIC(affected) && prob(implant.w_class * 5) && affected.sever_artery()) //I'M SO ANEMIC I COULD JUST -DIE-. - custom_pain("Something tears wetly in your [affected.name] as [implant] is pulled free!", 50, affecting = affected) - . = ..() +/mob/proc/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) + return FALSE /mob/proc/yank_out_object() set category = "Object" @@ -1015,7 +1001,7 @@ /client/verb/body_groin() set name = "body-groin" set hidden = 1 - toggle_zone_sel(list(BP_GROIN)) + toggle_zone_sel(list(BP_GROIN,BP_TAIL)) /client/verb/body_r_leg() set name = "body-r-leg" @@ -1031,7 +1017,7 @@ if(!check_has_body_select()) return var/obj/screen/zone_selector/selector = mob.zone_sel - selector.set_selected_zone(next_in_list(mob.get_target_zone(),zones)) + selector.set_selected_zone(next_in_list(mob.get_target_zone(), zones)) /mob/proc/has_admin_rights() return check_rights(R_ADMIN, 0, src) @@ -1062,12 +1048,55 @@ return 0 return 1 -// Let simple mobs press buttons and levers but nothing more complex. -/mob/proc/get_dexterity(var/silent = FALSE) - var/decl/species/my_species = get_species() - if(my_species) - return my_species.get_manual_dexterity() - return DEXTERITY_BASE +// Mobs further up the chain should override this proc if they want to return a simple dexterity value. +/mob/proc/get_dexterity(var/silent) + + // Check if we have a slot to use for this. + var/check_slot = get_active_held_item_slot() + if(!check_slot) + return DEXTERITY_NONE + var/datum/inventory_slot/gripper/gripper = get_inventory_slot_datum(check_slot) + if(!istype(gripper)) + if(!silent) + to_chat(src, "Your [parse_zone(check_slot)] is missing!") + return DEXTERITY_NONE + + // Work out if we have any brain damage impacting our dexterity. + var/dex_malus = 0 + var/braindamage = getBrainLoss() + if(braindamage) + var/brainloss_threshold = get_config_value(/decl/config/num/dex_malus_brainloss_threshold) + if(braindamage > brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there. + dex_malus = clamp(CEILING((braindamage-brainloss_threshold)/10), 0, length(global.dexterity_levels)) + if(dex_malus > 0) + dex_malus = global.dexterity_levels[dex_malus] + + // If this slot does not need an organ we just go off the dexterity of the slot itself. + if(isnull(gripper.requires_organ_tag)) + if(dex_malus) + if(!silent) + to_chat(src, SPAN_WARNING("Your [lowertext(gripper.slot_name)] doesn't respond properly!")) + return (gripper.get_dexterity(silent) & ~dex_malus) + return gripper.get_dexterity(silent) + + // If this slot requires an organ, do the appropriate organ checks. + check_slot = gripper.requires_organ_tag + var/obj/item/organ/external/active_hand = GET_EXTERNAL_ORGAN(src, check_slot) + if(!active_hand) + if(!silent) + to_chat(src, "Your [parse_zone(check_slot)] is missing!") + return DEXTERITY_NONE + if(!active_hand.is_usable()) + if(!silent) + to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!")) + return DEXTERITY_NONE + + // Return our organ dexterity. + if(dex_malus) + if(!silent) + to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!")) + return (active_hand.get_manual_dexterity() & ~dex_malus) + return active_hand.get_manual_dexterity() /mob/proc/check_dexterity(var/dex_level = DEXTERITY_FULL, var/silent = FALSE) . = (get_dexterity(silent) & dex_level) == dex_level @@ -1087,19 +1116,18 @@ to_chat(src, SPAN_WARNING("You scrawl down some meaningless lines.")) . = stars(text_content, 5) -// mobs do not have mouths by default +// mobs do not have mouths by default, unless provided by an organ /mob/proc/check_has_mouth() - return FALSE + var/obj/item/organ/external/head/H = get_organ(BP_HEAD, /obj/item/organ/external/head) + if(!H || !istype(H) || !H.can_intake_reagents) + return FALSE + return TRUE /mob/proc/check_has_eyes() return TRUE /mob/proc/handle_pre_transformation() - for(var/obj/item/W in contents) - if(istype(W, /obj/item/implant)) - qdel(W) - else - drop_from_inventory(W) + dump_contents() /mob/get_mass() return mob_size @@ -1306,10 +1334,10 @@ /mob/verb/whisper_wrapper() set name = ".Whisper" set hidden = TRUE - if(config.show_typing_indicator_for_whispers) + if(get_config_value(/decl/config/toggle/show_typing_indicator_for_whispers)) SStyping.set_indicator_state(client, TRUE) var/message = input("","me (text)") as text|null - if(config.show_typing_indicator_for_whispers) + if(get_config_value(/decl/config/toggle/show_typing_indicator_for_whispers)) SStyping.set_indicator_state(client, FALSE) if (message) whisper(message) @@ -1317,7 +1345,7 @@ // Darksight procs. /mob/proc/refresh_lighting_master() if(!lighting_master) - lighting_master = new + lighting_master = new(null, src) if(client) client.screen |= lighting_master @@ -1331,9 +1359,9 @@ return /mob/proc/get_target_zone() - return zone_sel?.selecting + return zone_sel?.selecting || BP_CHEST -/mob/proc/get_temperature_threshold(var/threshold) +/mob/proc/get_default_temperature_threshold(threshold) switch(threshold) if(COLD_LEVEL_1) return 243 @@ -1348,7 +1376,22 @@ if(HEAT_LEVEL_3) return 1000 else - CRASH("base get_temperature_threshold() called with invalid threshold value.") + CRASH("base get_default_temperature_threshold() called with invalid threshold value.") + +/mob/proc/get_mob_temperature_threshold(threshold, bodypart) + + // If we have organs, return the requested organ. + if(bodypart) + var/obj/item/organ/external/organ = get_organ(bodypart) + if(organ?.bodytype) + return organ.bodytype.get_body_temperature_threshold(threshold) + + // If we have a bodytype, use that. + var/decl/bodytype/root_bodytype = get_bodytype() + if(root_bodytype) + return root_bodytype.get_body_temperature_threshold(threshold) + + return get_default_temperature_threshold(threshold) /mob/proc/get_unique_enzymes() return @@ -1367,3 +1410,27 @@ /mob/get_overhead_text_y_offset() return offset_overhead_text_y +/mob/can_be_injected_by(var/atom/injector) + return FALSE // Handled elsewhere in syringe logic. + +/mob/proc/getBrainLoss() + return 0 + +/mob/proc/get_bodytype_category() + return get_bodytype()?.bodytype_category + +/mob/proc/get_overlay_state_modifier() + return + +/mob/proc/nervous_system_failure() + return FALSE +/mob/proc/resolve_to_radio_listeners() + if(status_flags & PASSEMOTES) + var/list/listeners = list(src) + for(var/obj/item/holder/holder in src.contents) + for(var/mob/living/listener in holder) + listeners |= listener + for(var/mob/living/listener in contents) + listeners |= listener + return listeners + return src diff --git a/code/modules/mob/mob_blood.dm b/code/modules/mob/mob_blood.dm new file mode 100644 index 00000000000..b7523c9851b --- /dev/null +++ b/code/modules/mob/mob_blood.dm @@ -0,0 +1,25 @@ +/mob/proc/get_flesh_color() + return get_species()?.get_species_flesh_color(src) || COLOR_GRAY + +/mob/proc/get_gibber_type() + return null + +/mob/proc/get_blood_color() + return get_species()?.get_species_blood_color(src) || COLOR_BLOOD_HUMAN + +/mob/proc/get_blood_oxy() + var/decl/species/my_species = get_species() + return my_species ? my_species.blood_oxy : TRUE + +//Gets blood from mob to the container, preserving all data in it. +/mob/proc/take_blood(obj/item/chems/container, var/amount) + var/decl/species/my_species = get_species() + if(my_species?.blood_reagent) + container.add_to_reagents(my_species.blood_reagent, amount, get_blood_data()) + return TRUE + return FALSE + +/mob/proc/get_blood_data() + var/data = list() + data["donor"] = weakref(src) + return data diff --git a/code/modules/mob/mob_damage.dm b/code/modules/mob/mob_damage.dm new file mode 100644 index 00000000000..94adae932a9 --- /dev/null +++ b/code/modules/mob/mob_damage.dm @@ -0,0 +1,60 @@ +/// Returns TRUE if updates should happen, FALSE if not. +/mob/proc/update_health() + SHOULD_CALL_PARENT(TRUE) + return !(status_flags & GODMODE) + +// Damage stubs to allow for calling on /mob (usr etc) +/mob/proc/getBruteLoss() + return 0 +/mob/proc/getOxyLoss() + return 0 +/mob/proc/getToxLoss() + return 0 +/mob/proc/getFireLoss() + return 0 +/mob/proc/getHalLoss() + return 0 +/mob/proc/getCloneLoss() + return 0 + +/mob/proc/setBruteLoss(var/amount) + return +/mob/proc/setOxyLoss(var/amount) + return +/mob/proc/setToxLoss(var/amount) + return +/mob/proc/setFireLoss(var/amount) + return +/mob/proc/setHalLoss(var/amount) + return +/mob/proc/setBrainLoss(var/amount) + return +/mob/proc/setCloneLoss(var/amount) + return + +/mob/proc/adjustToxLoss(var/amount, var/do_update_health = TRUE) + return +/mob/proc/adjustFireLoss(var/amount, var/do_update_health = TRUE) + return +/mob/proc/adjustHalLoss(var/amount, var/do_update_health = TRUE) + return + +/mob/proc/adjustBruteLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(TRUE) + if(do_update_health) + update_health() + +/mob/proc/adjustOxyLoss(var/damage, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(TRUE) + if(do_update_health) + update_health() + +/mob/proc/adjustBrainLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(TRUE) + if(do_update_health) + update_health() + +/mob/proc/adjustCloneLoss(var/amount, var/do_update_health = TRUE) + SHOULD_CALL_PARENT(TRUE) + if(do_update_health) + update_health() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 595b81c515b..37ea7c4effe 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -39,27 +39,26 @@ var/stat = CONSCIOUS //Whether a mob is alive or dead. TODO: Move this to living - Nodrak - var/obj/screen/cells = null - - var/obj/screen/hands = null - var/obj/screen/internals = null - var/obj/screen/oxygen = null - var/obj/screen/toxin = null - var/obj/screen/fire = null - var/obj/screen/bodytemp = null - var/obj/screen/healths = null - var/obj/screen/throw_icon = null - var/obj/screen/nutrition_icon = null - var/obj/screen/hydration_icon = null - var/obj/screen/pressure = null - var/obj/screen/pain = null - var/obj/screen/up_hint = null - var/obj/screen/gun/item/item_use_icon = null - var/obj/screen/gun/radio/radio_use_icon = null - var/obj/screen/gun/move/gun_move_icon = null - var/obj/screen/gun/mode/gun_setting_icon = null - - var/obj/screen/ability_master/ability_master = null + var/obj/screen/robot_module/select/hands + var/obj/screen/warning_cells/cells + var/obj/screen/internals/internals + var/obj/screen/oxygen/oxygen + var/obj/screen/toxins/toxin + var/obj/screen/fire_warning/fire + var/obj/screen/bodytemp/bodytemp + var/obj/screen/health_warning/healths + var/obj/screen/throw_toggle/throw_icon + var/obj/screen/maneuver/maneuver_icon + var/obj/screen/food/nutrition_icon + var/obj/screen/drink/hydration_icon + var/obj/screen/pressure/pressure + var/obj/screen/fullscreen/pain/pain + var/obj/screen/up_hint/up_hint + var/obj/screen/gun/item/item_use_icon + var/obj/screen/gun/radio/radio_use_icon + var/obj/screen/gun/move/gun_move_icon + var/obj/screen/gun/mode/gun_setting_icon + var/obj/screen/ability_master/ability_master /*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob. A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such. diff --git a/code/modules/mob/mob_eating.dm b/code/modules/mob/mob_eating.dm new file mode 100644 index 00000000000..b321f481584 --- /dev/null +++ b/code/modules/mob/mob_eating.dm @@ -0,0 +1,52 @@ +// mobs do not have blocked mouths by default +// overridden in human_defense.dm +/mob/proc/check_mouth_coverage() + return null + +/mob/proc/get_eaten_transfer_amount(var/default) + . = default + if(issmall(src)) + . = CEILING(.*0.5) + +/mob/proc/can_eat_food_currently(obj/eating, mob/user) + return TRUE + +#define EATING_NO_ISSUE 0 +#define EATING_NBP_MOUTH 1 +#define EATING_BLOCKED_MOUTH 2 + +/mob/proc/can_eat_status() + if(!check_has_mouth()) + return list(EATING_NBP_MOUTH) + var/obj/item/blocked = check_mouth_coverage() + if(blocked) + return list(EATING_BLOCKED_MOUTH, blocked) + return list(EATING_NO_ISSUE) + +/mob/proc/can_eat(food, feedback = TRUE) + var/list/status = can_eat_status() + if(status[1] == EATING_NO_ISSUE) + return TRUE + if(feedback) + if(status[1] == EATING_NBP_MOUTH) + to_chat(src, SPAN_WARNING("Where do you intend to put \the [food]? You don't have a mouth!")) + else if(status[1] == EATING_BLOCKED_MOUTH) + to_chat(src, SPAN_WARNING("\The [status[2]] is in the way!")) + return FALSE + +/mob/proc/can_force_feed(mob/target, food, feedback = TRUE) + if(src == target) + return can_eat(food) + var/list/status = target.can_eat_status() + if(status[1] == EATING_NO_ISSUE) + return TRUE + if(feedback) + if(status[1] == EATING_NBP_MOUTH) + to_chat(src, SPAN_WARNING("Where do you intend to put \the [food]? \The [target] doesn't have a mouth!")) + else if(status[1] == EATING_BLOCKED_MOUTH) + to_chat(src, SPAN_WARNING("\The [status[2]] is in the way!")) + return FALSE + +#undef EATING_NO_ISSUE +#undef EATING_NBP_MOUTH +#undef EATING_BLOCKED_MOUTH diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 56de2d4651b..a3230baff77 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -24,7 +24,6 @@ if(BP_IS_PROSTHETIC(E)) robolimb_count++ full_prosthetic = robolimb_count > 0 && (robolimb_count == LAZYLEN(limbs)) //If no organs, no way to tell - update_emotes() return full_prosthetic /mob/living/silicon/isSynthetic() @@ -66,11 +65,12 @@ /proc/getsensorlevel(A) var/mob/M = A - if(istype(M)) - var/obj/item/clothing/under/U = M.get_equipped_item(slot_w_uniform_str) - if(istype(U)) - return U.sensor_mode - return SUIT_SENSOR_OFF + if(!istype(M)) + return VITALS_SENSOR_OFF + var/obj/item/clothing/accessory/vitals_sensor/sensor = M.get_vitals_sensor() + if(sensor) + return sensor.sensor_mode + return VITALS_SENSOR_OFF /proc/is_admin(var/mob/user) return check_rights(R_ADMIN, 0, user) != 0 @@ -475,38 +475,27 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) /mob/proc/is_client_active(var/active = 1) return client && client.inactivity < active MINUTES -/mob/proc/can_eat() - return 1 - -/mob/proc/can_force_feed() - return 1 - #define SAFE_PERP -50 /mob/living/proc/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest, var/check_network) + if(stat == DEAD) return SAFE_PERP - return 0 - -/mob/living/carbon/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest, var/check_network) if(get_equipped_item(slot_handcuffed_str)) return SAFE_PERP - return ..() - -/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest, var/check_network) - var/threatcount = ..() - if(. == SAFE_PERP) - return SAFE_PERP - //Agent cards lower threatlevel. + var/threatcount = 0 var/obj/item/card/id/id = GetIdCard() - if(id && istype(id, /obj/item/card/id/syndicate)) - threatcount -= 2 + // A proper CentCom id is hard currency. - else if(id && istype(id, /obj/item/card/id/centcom)) + if(istype(id, /obj/item/card/id/centcom)) return SAFE_PERP + // Syndicate IDs have masking I guess. + if(istype(id, /obj/item/card/id/syndicate)) + threatcount -= 2 + if(check_access && !access_obj.allowed(src)) threatcount += 4 @@ -519,7 +508,7 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) if(istype(belt, /obj/item/gun) || istype(belt, /obj/item/energy_blade) || istype(belt, /obj/item/baton)) threatcount += 2 - if(species.name != global.using_map.default_species) + if(get_species_name() != global.using_map.default_species) threatcount += 2 if(check_records || check_arrest) diff --git a/code/modules/mob/mob_temperature.dm b/code/modules/mob/mob_temperature.dm new file mode 100644 index 00000000000..7e9b690bdea --- /dev/null +++ b/code/modules/mob/mob_temperature.dm @@ -0,0 +1,3 @@ +// Stub this out for now; freezing/melting gear is something to consider in the future but is currently quite broken. +/mob/ProcessAtomTemperature() + return PROCESS_KILL diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index f9f04a6e329..e4f273ad596 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -50,7 +50,7 @@ var/global/list/href_to_mob_type = list( //This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables. //Returns the new mob -//Note that this proc does NOT do MMI related stuff! +//Note that this proc does NOT do brain related stuff! /mob/proc/change_mob_type(var/new_type, var/turf/location, var/new_name, var/subspecies) if(!new_type) diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index 54bd8e68b81..6951ec383e3 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -46,5 +46,5 @@ // bolds the changelog button on the interface so we know there are updates. if(client.prefs?.lastchangelog != global.changelog_hash) to_chat(client, SPAN_NOTICE("You have unread updates in the changelog.")) - if(config.aggressive_changelog) + if(get_config_value(/decl/config/toggle/aggressive_changelog)) client.changes() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 449f8087bd1..b7458120a37 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -108,7 +108,8 @@ INITIALIZE_IMMEDIATE(/mob/new_player) to_chat(src, SPAN_WARNING("Please wait for server initialization to complete...")) return - if(!config.respawn_delay || client.holder || alert(src,"Are you sure you wish to observe? You will have to wait [config.respawn_delay] minute\s before being able to respawn!","Player Setup","Yes","No") == "Yes") + var/respawn_delay = get_config_value(/decl/config/num/respawn_delay) + if(!respawn_delay || client.holder || alert(src,"Are you sure you wish to observe? You will have to wait [respawn_delay] minute\s before being able to respawn!","Player Setup","Yes","No") == "Yes") if(!client) return 1 var/mob/observer/ghost/observer = new() @@ -138,7 +139,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) client.prefs.real_name = client.prefs.get_random_name() observer.real_name = client.prefs.real_name observer.SetName(observer.real_name) - if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + if(!client.holder && !get_config_value(/decl/config/toggle/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed. observer.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! observer.key = key qdel(src) @@ -183,7 +184,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) to_chat(usr, "The round is either not ready, or has already finished...") return 0 - if(!config.enter_allowed) + if(!get_config_value(/decl/config/toggle/on/enter_allowed)) to_chat(usr, "There is an administrative lock on entering the game!") return 0 @@ -238,6 +239,9 @@ INITIALIZE_IMMEDIATE(/mob/new_player) else if(spawnpoint.spawn_announcement) AnnounceCyborg(character, job, spawnpoint.spawn_announcement) + ///Then make sure to create a network account on the map's default network + SSnetworking.register_player_default_network_account(character) + callHook("player_latejoin", list(job, character)) log_and_message_admins("has joined the round as [character.mind.assigned_role].", character) @@ -429,6 +433,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) return 1 /mob/new_player/get_species_name() + SHOULD_CALL_PARENT(FALSE) var/decl/species/chosen_species if(client.prefs.species) chosen_species = get_species_by_key(client.prefs.species) @@ -442,7 +447,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) /mob/new_player/hear_say(var/message, var/verb = "says", var/decl/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) return -/mob/new_player/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname, var/vsource) +/mob/new_player/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/vsource) return /mob/new_player/show_message(msg, type, alt, alt_type) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index c9adcbb336b..481d4fa3ad4 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,22 +1,24 @@ -/datum/preferences/proc/random_hair_style() - var/decl/species/mob_species = get_species_decl() - var/list/valid_styles = mob_species?.get_hair_style_types(get_bodytype_decl()) - return length(valid_styles) ? pick(valid_styles) : /decl/sprite_accessory/hair/bald - -/datum/preferences/proc/random_facial_hair_style() - var/decl/species/mob_species = get_species_decl() - var/list/valid_styles = mob_species?.get_facial_hair_style_types(get_bodytype_decl()) - return length(valid_styles) ? pick(valid_styles) : /decl/sprite_accessory/facial_hair/shaved - /datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) + if(!H) + H = client?.mob + var/decl/species/current_species = get_species_decl() var/decl/bodytype/current_bodytype = current_species.get_bodytype_by_name(bodytype) || current_species.default_bodytype var/decl/pronouns/pronouns = pick(current_species.available_pronouns) gender = pronouns.name - h_style = random_hair_style() - f_style = random_facial_hair_style() + for(var/acc_cat in sprite_accessories) + var/decl/sprite_accessory_category/accessory_category_decl = GET_DECL(acc_cat) + if(accessory_category_decl.single_selection) + var/list/available_styles = get_usable_sprite_accessories(H, current_species, current_bodytype, acc_cat, null) + if(length(available_styles)) + sprite_accessories[acc_cat][1] = pick(available_styles) + sprite_accessories[acc_cat][sprite_accessories[acc_cat][1]] = get_random_colour() + continue + for(var/accessory in sprite_accessories[acc_cat]) + sprite_accessories[acc_cat][accessory] = get_random_colour() + if(bodytype) if(current_bodytype.appearance_flags & HAS_A_SKIN_TONE) skin_tone = current_bodytype.get_random_skin_tone() || skin_tone @@ -24,20 +26,17 @@ eye_colour = current_bodytype.get_random_eye_color() if(current_bodytype.appearance_flags & HAS_SKIN_COLOR) skin_colour = current_bodytype.get_random_skin_color() - if(current_bodytype.appearance_flags & HAS_HAIR_COLOR) - hair_colour = current_bodytype.get_random_hair_color() - facial_hair_colour = prob(75) ? hair_colour : current_bodytype.get_random_facial_hair_color() - if(all_underwear) + if(!islist(all_underwear)) + all_underwear = list() + else if(length(all_underwear)) all_underwear.Cut() + if(current_bodytype.appearance_flags & HAS_UNDERWEAR) for(var/datum/category_group/underwear/WRC in global.underwear.categories) var/datum/category_item/underwear/WRI = pick(WRC.items) all_underwear[WRC.name] = WRI.name - for(var/M in body_markings) - body_markings[M] = get_random_colour() - for(var/entry in current_species.appearance_descriptors) var/datum/appearance_descriptor/descriptor = current_species.appearance_descriptors[entry] if(istype(descriptor)) @@ -81,7 +80,7 @@ // Equip custom gear loadout, replacing any job items var/list/loadout_taken_slots = list() for(var/thing in Gear()) - var/decl/loadout_option/G = global.gear_datums[thing] + var/decl/loadout_option/G = decls_repository.get_decl_by_id_or_var(thing, /decl/loadout_option) if(G) var/permitted = FALSE if(G.allowed_roles && G.allowed_roles.len) @@ -98,15 +97,16 @@ if(!permitted) continue - if(G.slot && G.slot != slot_tie_str && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.name])) + if(G.slot && G.slot != slot_tie_str && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.uid])) loadout_taken_slots.Add(G.slot) update_icon = TRUE if(update_icon) mannequin.update_icon() + mannequin.compile_overlays() /datum/preferences/proc/update_preview_icon() - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) + var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client?.ckey) if(mannequin) mannequin.delete_inventory(TRUE) dress_preview_mob(mannequin) diff --git a/code/modules/mob/observer/eye/blueprints_eye.dm b/code/modules/mob/observer/eye/blueprints_eye.dm index 3b594efbfb9..2b1c8c54291 100644 --- a/code/modules/mob/observer/eye/blueprints_eye.dm +++ b/code/modules/mob/observer/eye/blueprints_eye.dm @@ -327,7 +327,7 @@ var/datum/shuttle/our_shuttle = SSshuttle.shuttles[shuttle_name] our_shuttle.shuttle_area += A SSshuttle.shuttle_areas += A - events_repository.register(/decl/observ/destroyed, A, our_shuttle, /datum/shuttle/proc/remove_shuttle_area) + events_repository.register(/decl/observ/destroyed, A, our_shuttle, TYPE_PROC_REF(/datum/shuttle, remove_shuttle_area)) return A #undef MAX_AREA_SIZE \ No newline at end of file diff --git a/code/modules/mob/observer/eye/freelook/ai/update_triggers.dm b/code/modules/mob/observer/eye/freelook/ai/update_triggers.dm index d289c8a3368..04c52ccd656 100644 --- a/code/modules/mob/observer/eye/freelook/ai/update_triggers.dm +++ b/code/modules/mob/observer/eye/freelook/ai/update_triggers.dm @@ -22,8 +22,8 @@ // Arise! cameranet.update_visibility(src, FALSE) -/mob/living/silicon/ai/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) +/mob/living/silicon/ai/death(gibbed) + . = ..() if(.) // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) cameranet.update_visibility(src, FALSE) diff --git a/code/modules/mob/observer/eye/freelook/life.dm b/code/modules/mob/observer/eye/freelook/life.dm index 98b9c477e1f..6a8a6975fd7 100644 --- a/code/modules/mob/observer/eye/freelook/life.dm +++ b/code/modules/mob/observer/eye/freelook/life.dm @@ -1,7 +1,7 @@ /mob/observer/eye/freelook/Life() - ..() + . = ..() // If we lost our client, reset the list of visible chunks so they update properly on return - if(owner == src && !client) + if(. && owner == src && !client) visibleChunks.Cut() /*else if(owner && !owner.client) visibleChunks.Cut()*/ diff --git a/code/modules/mob/observer/eye/freelook/read_me.dm b/code/modules/mob/observer/eye/freelook/read_me.dm index fe7edf80295..76338342416 100644 --- a/code/modules/mob/observer/eye/freelook/read_me.dm +++ b/code/modules/mob/observer/eye/freelook/read_me.dm @@ -13,7 +13,7 @@ With this, the AI controls an "AI Eye" mob, which moves just like a ghost; such as moving through walls and being invisible to players. The AI's eye is set to this mob and then we use a system (explained below) to determine what the cameras around the AI Eye can and cannot see. If the camera cannot see a turf, it will black it out, otherwise it won't and the AI will be able to see it. - This creates several features, such as.. no more see-through-wall cameras, easier to control camera movement, easier tracking, + This creates several features, such as: no more see-through-wall cameras, easier to control camera movement, easier tracking, the AI only being able to track mobs which are visible to a camera, only trackable mobs appearing on the mob list and many more. diff --git a/code/modules/mob/observer/eye/freelook/visualnet.dm b/code/modules/mob/observer/eye/freelook/visualnet.dm index f49d0c0fe96..0274a87565d 100644 --- a/code/modules/mob/observer/eye/freelook/visualnet.dm +++ b/code/modules/mob/observer/eye/freelook/visualnet.dm @@ -109,7 +109,7 @@ // Never access this proc directly!!!! // This will update the chunk and all the surrounding chunks. /datum/visualnet/proc/major_chunk_change(var/atom/source) - for_all_chunks_in_range(source, /datum/chunk/proc/visibility_changed, list()) + for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, visibility_changed), list()) /datum/visualnet/proc/add_source(var/atom/source, var/update_visibility = TRUE, var/opacity_check = FALSE) if(!(source && is_valid_source(source))) @@ -118,9 +118,9 @@ if(source in sources) return FALSE sources += source - events_repository.register(/decl/observ/moved, source, src, /datum/visualnet/proc/source_moved) - events_repository.register(/decl/observ/destroyed, source, src, /datum/visualnet/proc/remove_source) - for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source)) + events_repository.register(/decl/observ/moved, source, src, TYPE_PROC_REF(/datum/visualnet, source_moved)) + events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum/visualnet, remove_source)) + for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, add_source), list(source)) if(update_visibility) update_visibility(source, opacity_check) return TRUE @@ -129,9 +129,9 @@ if(!sources.Remove(source)) return FALSE - events_repository.unregister(/decl/observ/moved, source, src, /datum/visualnet/proc/source_moved) - events_repository.unregister(/decl/observ/destroyed, source, src, /datum/visualnet/proc/remove_source) - for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source)) + events_repository.unregister(/decl/observ/moved, source, src, TYPE_PROC_REF(/datum/visualnet, source_moved)) + events_repository.unregister(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum/visualnet, remove_source)) + for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, remove_source), list(source)) if(update_visibility) update_visibility(source, opacity_check) return TRUE @@ -150,9 +150,9 @@ // A more proper way would be to figure out which chunks have gone out of range, and which have come into range // and only remove/add to those. if(old_turf) - for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source), old_turf) + for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, remove_source), list(source), old_turf) if(new_turf) - for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source), new_turf) + for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, add_source), list(source), new_turf) /datum/visualnet/proc/for_all_chunks_in_range(var/atom/source, var/proc_call, var/list/proc_args, var/turf/T) T = T ? T : get_turf(source) diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm index aff701398b8..470615f07df 100644 --- a/code/modules/mob/observer/ghost/ghost.dm +++ b/code/modules/mob/observer/ghost/ghost.dm @@ -108,9 +108,10 @@ Works together with spawning an observer, noted above. */ /mob/observer/ghost/Life() - ..() - if(!loc) return - if(!client) return 0 + + . = ..() + if(!. || !loc || !client) + return FALSE handle_hud_glasses() @@ -138,7 +139,7 @@ Works together with spawning an observer, noted above. C.images += target.hud_list[SPECIALROLE_HUD] return 1 -/mob/proc/ghostize(var/can_reenter_corpse = CORPSE_CAN_REENTER) +/mob/proc/ghostize(var/_can_reenter_corpse = CORPSE_CAN_REENTER) // Are we the body of an aghosted admin? If so, don't make a ghost. if(isghost(teleop)) var/mob/observer/ghost/G = teleop @@ -147,10 +148,10 @@ Works together with spawning an observer, noted above. if(key) hide_fullscreens() var/mob/observer/ghost/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.can_reenter_corpse = can_reenter_corpse + ghost.can_reenter_corpse = _can_reenter_corpse ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time ghost.key = key - if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + if(ghost.client && !ghost.client.holder && !get_config_value(/decl/config/toggle/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed. ghost.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! return ghost @@ -165,8 +166,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Relinquish your life and enter the land of the dead." if(stat == DEAD) - announce_ghost_joinleave(ghostize(1)) + announce_ghost_joinleave(ghostize()) else + var/respawn_delay = get_config_value(/decl/config/num/respawn_delay) var/response if(src.client && src.client.holder) response = alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", "Ghost", "Admin Ghost", "Stay in body") @@ -174,15 +176,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!src.client) return src.client.admin_ghost() - else if(config.respawn_delay) - response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [config.respawn_delay] minute\s! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") + else if(respawn_delay) + response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [respawn_delay] minute\s! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") else response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to this body! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") if(response != "Ghost") return resting = 1 log_and_message_admins("has ghosted.") - var/mob/observer/ghost/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 + var/mob/observer/ghost/ghost = ghostize(CORPSE_CANNOT_REENTER) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. announce_ghost_joinleave(ghost) @@ -202,20 +204,29 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/observer/ghost/verb/reenter_corpse() set category = "Ghost" set name = "Re-enter Corpse" - if(!client) return - if(QDELETED(mind) || QDELETED(mind.current) || !can_reenter_corpse) - to_chat(src, "You have no body.") - return - if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients - to_chat(src, "Another consciousness is in your body... it is resisting you.") - return + + if(!client) + return FALSE + + if(QDELETED(mind?.current)) + to_chat(src, SPAN_WARNING("You have no body")) + return FALSE + + if(!(can_reenter_corpse & CORPSE_CAN_REENTER)) + to_chat(src, SPAN_WARNING("You are not permitted to reenter your body.")) + return FALSE + + if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any adminghosted clients + to_chat(src, SPAN_WARNING("Another consciousness is in your body... it is resisting you.")) + return FALSE + stop_following() mind.current.key = key mind.current.teleop = null mind.current.reload_fullscreen() if(!admin_ghosted) announce_ghost_joinleave(mind, 0, "They now occupy their body again.") - return 1 + return TRUE /mob/observer/ghost/verb/toggle_medHUD() set category = "Ghost" @@ -237,17 +248,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!client) return - if(!config.antag_hud_allowed && !client.holder) + if(!get_config_value(/decl/config/toggle/antag_hud_allowed) && !client.holder) to_chat(src, SPAN_WARNING("Admins have disabled this for this round")) return var/mob/observer/ghost/M = src if(jobban_isbanned(M, "AntagHUD")) to_chat(src, SPAN_WARNING("You have been banned from using this feature.")) return - if(config.antag_hud_restricted && !M.has_enabled_antagHUD && !client.holder) + if(get_config_value(/decl/config/toggle/antag_hud_restricted) && !M.has_enabled_antagHUD && !client.holder) var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No") - if(response == "No") return - M.can_reenter_corpse = 0 + if(response == "No") + return + M.can_reenter_corpse = CORPSE_CANNOT_REENTER if(!M.has_enabled_antagHUD && !client.holder) M.has_enabled_antagHUD = 1 if(M.antagHUD) @@ -307,9 +319,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp stop_following() following = target verbs |= /mob/observer/ghost/proc/scan_target - events_repository.register(/decl/observ/moved, following, src, /atom/movable/proc/move_to_turf) - events_repository.register(/decl/observ/dir_set, following, src, /atom/proc/recursive_dir_set) - events_repository.register(/decl/observ/destroyed, following, src, /mob/observer/ghost/proc/stop_following) + events_repository.register(/decl/observ/moved, following, src, TYPE_PROC_REF(/atom/movable, move_to_turf)) + events_repository.register(/decl/observ/dir_set, following, src, TYPE_PROC_REF(/atom, recursive_dir_set)) + events_repository.register(/decl/observ/destroyed, following, src, TYPE_PROC_REF(/mob/observer/ghost, stop_following)) to_chat(src, "Now following \the [following].") move_to_turf(following, loc, following.loc) @@ -372,7 +384,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Become mouse" set category = "Ghost" - if(config.disable_player_mice) + if(get_config_value(/decl/config/toggle/disable_player_mice)) to_chat(src, "Spawning as a mouse is currently disabled.") return @@ -401,7 +413,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else to_chat(src, "Unable to find any unwelded vents to spawn mice at.") if(host) - if(config.uneducated_mice) + if(get_config_value(/decl/config/toggle/uneducated_mice)) host.universal_understand = FALSE announce_ghost_joinleave(src, 0, "They are now a mouse.") host.ckey = src.ckey @@ -418,8 +430,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp show_browser(src, dat, "window=manifest;size=370x420;can_close=1") //This is called when a ghost is drag clicked to something. -/mob/observer/ghost/MouseDrop(atom/over) +/mob/observer/ghost/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) SHOULD_CALL_PARENT(FALSE) + var/atom/over = over_object if(!usr || !over) return if(isghost(usr) && usr.client && isliving(over)) @@ -435,7 +448,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return ..() /mob/observer/ghost/proc/try_possession(var/mob/living/M) - if(!config.ghosts_can_possess_animals) + if(!get_config_value(/decl/config/toggle/ghosts_can_possess_animals)) to_chat(src, SPAN_WARNING("Ghosts are not permitted to possess animals.")) return FALSE if(!M.can_be_possessed_by(src)) @@ -520,24 +533,27 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp client.images -= ghost_image //remove ourself /mob/observer/ghost/MayRespawn(var/feedback = 0, var/respawn_time = 0) + if(!client) - return 0 - if(mind?.current && !QDELETED(mind.current) && mind.current.stat != DEAD && (can_reenter_corpse in list(CORPSE_CAN_REENTER, CORPSE_CAN_REENTER_AND_RESPAWN))) + return FALSE + + if(mind?.current && !QDELETED(mind.current) && mind.current.stat != DEAD && (can_reenter_corpse & CORPSE_CAN_REENTER) && !(can_reenter_corpse & CORPSE_CAN_RESPAWN)) if(feedback) - to_chat(src, "Your non-dead body prevents you from respawning.") - return 0 - if(config.antag_hud_restricted && has_enabled_antagHUD == 1) + to_chat(src, SPAN_WARNING("Your non-dead body prevents you from respawning.")) + return FALSE + + if(get_config_value(/decl/config/toggle/antag_hud_restricted) && has_enabled_antagHUD == 1) if(feedback) - to_chat(src, "antagHUD restrictions prevent you from respawning.") - return 0 + to_chat(src, SPAN_WARNING("antagHUD restrictions prevent you from respawning.")) + return FALSE var/timedifference = world.time - timeofdeath if(!client.holder && respawn_time && timeofdeath && timedifference < respawn_time MINUTES) var/timedifference_text = time2text(respawn_time MINUTES - timedifference,"mm:ss") - to_chat(src, "You must have been dead for [respawn_time] minute\s to respawn. You have [timedifference_text] left.") - return 0 + to_chat(src, SPAN_WARNING("You must have been dead for [respawn_time] minute\s to respawn. You have [timedifference_text] left.")) + return FALSE - return 1 + return TRUE /proc/isghostmind(var/datum/mind/player) return player && !isnewplayer(player.current) && (!player.current || isghost(player.current) || (isliving(player.current) && player.current.stat == DEAD) || !player.current.client) @@ -583,7 +599,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Respawn" set category = "OOC" - if (!(config.abandon_allowed)) + if (!get_config_value(/decl/config/toggle/on/abandon_allowed)) to_chat(usr, SPAN_WARNING("Respawn is disabled.")) return if (!SSticker.mode) @@ -592,7 +608,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if (SSticker.mode.deny_respawn) to_chat(usr, SPAN_WARNING("Respawn is disabled for this roundtype.")) return - else if(!MayRespawn(1, config.respawn_delay)) + else if(!MayRespawn(1, get_config_value(/decl/config/num/respawn_delay))) return to_chat(usr, SPAN_NOTICE("You can respawn now, enjoy your new life!")) diff --git a/code/modules/mob/observer/observer.dm b/code/modules/mob/observer/observer.dm index d972bb370be..dda6dcabe28 100644 --- a/code/modules/mob/observer/observer.dm +++ b/code/modules/mob/observer/observer.dm @@ -50,11 +50,21 @@ var/global/const/GHOST_IMAGE_ALL = ~GHOST_IMAGE_NONE /mob/observer/CanPass() return TRUE +/mob/observer/physically_destroyed() + SHOULD_CALL_PARENT(FALSE) + return FALSE + +/mob/observer/handle_existence_failure(dusted) + SHOULD_CALL_PARENT(FALSE) + return FALSE + /mob/observer/dust() //observers can't be vaporised. - return + SHOULD_CALL_PARENT(FALSE) + return FALSE /mob/observer/gib() //observers can't be gibbed. - return + SHOULD_CALL_PARENT(FALSE) + return FALSE /mob/observer/is_blind() //Not blind either. return diff --git a/code/modules/mob/observer/virtual/base.dm b/code/modules/mob/observer/virtual/base.dm index 0fecb711fde..c4897378242 100644 --- a/code/modules/mob/observer/virtual/base.dm +++ b/code/modules/mob/observer/virtual/base.dm @@ -23,7 +23,7 @@ var/global/list/all_virtual_listeners = list() . = INITIALIZE_HINT_QDEL CRASH("Received an unexpected host type. Expected [host_type], was [log_info_line(host)].") src.host = host - events_repository.register(/decl/observ/moved, host, src, /atom/movable/proc/move_to_turf_or_null) + events_repository.register(/decl/observ/moved, host, src, TYPE_PROC_REF(/atom/movable, move_to_turf_or_null)) all_virtual_listeners += src @@ -31,7 +31,7 @@ var/global/list/all_virtual_listeners = list() STOP_PROCESSING(SSmobs, src) /mob/observer/virtual/Destroy() - events_repository.unregister(/decl/observ/moved, host, src, /atom/movable/proc/move_to_turf_or_null) + events_repository.unregister(/decl/observ/moved, host, src, TYPE_PROC_REF(/atom/movable, move_to_turf_or_null)) all_virtual_listeners -= src host = null return ..() diff --git a/code/modules/mob/observer/virtual/mob.dm b/code/modules/mob/observer/virtual/mob.dm index eb08a07d3b8..02026201066 100644 --- a/code/modules/mob/observer/virtual/mob.dm +++ b/code/modules/mob/observer/virtual/mob.dm @@ -4,16 +4,16 @@ /mob/observer/virtual/mob/Initialize(mapload, var/mob/host) . = ..() - events_repository.register(/decl/observ/sight_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) - events_repository.register(/decl/observ/see_invisible_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) - events_repository.register(/decl/observ/see_in_dark_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) + events_repository.register(/decl/observ/sight_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) + events_repository.register(/decl/observ/see_invisible_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) + events_repository.register(/decl/observ/see_in_dark_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) sync_sight(host) /mob/observer/virtual/mob/Destroy() - events_repository.unregister(/decl/observ/sight_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) - events_repository.unregister(/decl/observ/see_invisible_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) - events_repository.unregister(/decl/observ/see_in_dark_set, host, src, /mob/observer/virtual/mob/proc/sync_sight) + events_repository.unregister(/decl/observ/sight_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) + events_repository.unregister(/decl/observ/see_invisible_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) + events_repository.unregister(/decl/observ/see_in_dark_set, host, src, TYPE_PROC_REF(/mob/observer/virtual/mob, sync_sight)) . = ..() /mob/observer/virtual/mob/proc/sync_sight(var/mob/mob_host) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 27b465a347a..ebf0af7fe1c 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -34,8 +34,8 @@ var/global/list/special_channel_keys = list( SStyping.set_indicator_state(client, FALSE) if(!filter_block_message(usr, message)) message = sanitize(message) - if(can_emote(VISIBLE_MESSAGE)) - usr.emote("me", usr.emote_type, message) + if(can_emote(VISIBLE_MESSAGE, src)) + usr.custom_emote(usr.emote_type, message) else usr.emote(message) diff --git a/code/modules/mob/skills/skill.dm b/code/modules/mob/skills/skill.dm index 7f7dcbed4e1..6525d69a964 100644 --- a/code/modules/mob/skills/skill.dm +++ b/code/modules/mob/skills/skill.dm @@ -334,7 +334,7 @@ var/global/list/skills = list() levels = list( "Unskilled" = "You know how to use the technology that was present in whatever society you grew up in. You know how to tell when something is malfunctioning, but you have to call tech support to get it fixed.", "Basic" = "You use and repair high-tech equipment in the course of your daily work. You can fix simple problems, and you know how to use a circuit printer or autolathe. You can build simple robots such as cleanbots and medibots.", - "Trained" = "You can build or repair an exosuit or cyborg chassis, use advanced fabricators and analyzers, and build prosthetic limbs. You can safely transfer an MMI or posibrain into a cyborg chassis.
    - You can attach robotic limbs. Its speed increases with level.", + "Trained" = "You can build or repair an exosuit or cyborg chassis, use advanced fabricators and analyzers, and build prosthetic limbs. You can safely transfer a neural interface into a cyborg chassis.
    - You can attach robotic limbs. Its speed increases with level.", "Experienced" = "You have years of experience building or reverse-engineering complex devices. Your use of fabricators and destructive analyzers is efficient and methodical. You can design contraptions to order, and likely sell those designs at a profit.", "Master" = "You are an inventor or researcher. You can design, build, and modify equipment that most people don't even know exists. You are at home in the lab and the workshop and you've never met a gadget you couldn't take apart, put back together, and replicate." ) diff --git a/code/modules/mob/skills/skill_buffs.dm b/code/modules/mob/skills/skill_buffs.dm index 18f538055c3..55ca98c734b 100644 --- a/code/modules/mob/skills/skill_buffs.dm +++ b/code/modules/mob/skills/skill_buffs.dm @@ -4,6 +4,10 @@ var/limit //How many buffs of this type a skillset can have. null = no limit var/datum/skillset/skillset //The skillset to which this buff belongs. +SAVED_VAR(/datum/skill_buff, buffs) +SAVED_VAR(/datum/skill_buff, limit) +SAVED_VAR(/datum/skill_buff, skillset) + /datum/skill_buff/New(buff) buffs = buff ..() @@ -71,7 +75,7 @@ buff.skillset = skillset skillset.on_levels_change() if(duration) - addtimer(CALLBACK(buff, /datum/skill_buff/proc/remove), duration) + addtimer(CALLBACK(buff, TYPE_PROC_REF(/datum/skill_buff, remove)), duration) return buff //Takes a buff type or datum; typing is false here. diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm index 63d3e94e727..7447f7133be 100644 --- a/code/modules/mob/skills/skill_verbs.dm +++ b/code/modules/mob/skills/skill_verbs.dm @@ -49,7 +49,7 @@ return cooling_down = 1 update_verb() - addtimer(CALLBACK(src, .proc/remove_cooldown), cooldown) + addtimer(CALLBACK(src, PROC_REF(remove_cooldown)), cooldown) /* The Instruct verb. buffs untrained -> basic and requires skill in the skill training as well as leadership. Robots and antags can instruct. diff --git a/code/modules/mob/skills/skillset.dm b/code/modules/mob/skills/skillset.dm index bdddc4e7293..4b6c0985baf 100644 --- a/code/modules/mob/skills/skillset.dm +++ b/code/modules/mob/skills/skillset.dm @@ -1,7 +1,7 @@ //Holder for skill information for mobs. /datum/skillset - var/skill_list = list() + var/list/skill_list = list() var/mob/owner var/default_value = SKILL_DEFAULT var/skills_transferable = TRUE @@ -13,6 +13,10 @@ var/literacy_charges = 2 //used to limit the number of books a master literate mob can make +SAVED_VAR(/datum/skillset, skill_list) +SAVED_VAR(/datum/skillset, owner) +SAVED_VAR(/datum/skillset, skill_buffs) + var/global/list/all_skill_verbs /datum/skillset/New(mob/mob) owner = mob @@ -118,8 +122,8 @@ var/global/list/all_skill_verbs else return max(0, 1 + (SKILL_DEFAULT - points) * factor) -/mob/proc/do_skilled(base_delay, skill_path , atom/target = null, factor = 0.3, check_holding = FALSE) - return do_after(src, base_delay * skill_delay_mult(skill_path, factor), target, check_holding) +/mob/proc/do_skilled(base_delay, skill_path , atom/target = null, factor = 0.3, check_holding = FALSE, set_cooldown = FALSE) + return do_after(src, base_delay * skill_delay_mult(skill_path, factor), target, check_holding, set_cooldown = set_cooldown) // A generic way of modifying success probabilities via skill values. Higher factor means skills have more effect. fail_chance is the chance at SKILL_NONE. /mob/proc/skill_fail_chance(skill_path, fail_chance, no_more_fail = SKILL_MAX, factor = 1) diff --git a/code/modules/mob/stripping.dm b/code/modules/mob/stripping.dm index e677769e9ce..0552345b391 100644 --- a/code/modules/mob/stripping.dm +++ b/code/modules/mob/stripping.dm @@ -31,23 +31,20 @@ toggle_sensors(user) return if ("lock_sensors") - var/obj/item/clothing/under/subject_uniform = get_equipped_item(slot_w_uniform_str) - if (!istype(subject_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor() + if (!istype(sensor)) return - visible_message(SPAN_DANGER("\The [user] is trying to [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "un" : ""]lock \the [src]'s sensors!")) + visible_message(SPAN_DANGER("\The [user] is trying to [sensor.get_sensors_locked() ? "un" : ""]lock \the [src]'s sensors!")) if (do_after(user, HUMAN_STRIP_DELAY, src, progress = 0)) - if (subject_uniform != get_equipped_item(slot_w_uniform_str)) - to_chat(user, SPAN_WARNING("\The [src] is not wearing \the [subject_uniform] anymore.")) - return - if (!subject_uniform.has_sensor) - to_chat(user, SPAN_WARNING("\The [subject_uniform] has no sensors to lock.")) + if(QDELETED(sensor) || sensor != get_vitals_sensor()) + to_chat(user, SPAN_WARNING("\The [src] is not wearing \the [sensor] anymore.")) return var/obj/item/multitool/user_multitool = user.get_multitool() if (!istype(user_multitool)) - to_chat(user, SPAN_WARNING("You need a multitool to lock \the [subject_uniform]'s sensors.")) + to_chat(user, SPAN_WARNING("You need a multitool to lock \the [src]'s sensors.")) return - subject_uniform.has_sensor = subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? SUIT_HAS_SENSORS : SUIT_LOCKED_SENSORS - visible_message(SPAN_NOTICE("\The [user] [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "" : "un"]locks \the [subject_uniform]'s suit sensor controls."), range = 2) + sensor.toggle_sensors_locked() + visible_message(SPAN_NOTICE("\The [user] [sensor.get_sensors_locked() ? "" : "un"]locks \the [src]'s vitals sensor controls."), range = 2) return if("internals") visible_message("\The [usr] is trying to set \the [src]'s internals!") @@ -137,13 +134,17 @@ // Modify the current target sensor level. /mob/proc/toggle_sensors(var/mob/living/user) - var/obj/item/clothing/under/suit = get_equipped_item(slot_w_uniform_str) - if(!istype(suit)) - to_chat(user, "\The [src] is not wearing a suit with sensors.") - return - if (suit.has_sensor >= 2) - to_chat(user, "\The [src]'s suit sensor controls are locked.") + var/obj/item/clothing/accessory/vitals_sensor/sensor = get_vitals_sensor() + if(!istype(sensor)) + to_chat(user, SPAN_WARNING("\The [src] is not wearing a vitals sensor.")) + if (sensor.get_sensors_locked()) + to_chat(user, SPAN_WARNING("\The [src]'s suit sensor controls are locked.")) return - admin_attack_log(user, src, "Toggled their suit sensors.", "Toggled their suit sensors.", "toggled the suit sensors of") - suit.set_sensors(user) + sensor.user_set_sensors(user) + +/mob/proc/get_vitals_sensor() + for(var/check_slot in global.vitals_sensor_equip_slots) + var/obj/item/clothing/equipped = get_equipped_item(check_slot) + if(istype(equipped)) + return (locate(/obj/item/clothing/accessory/vitals_sensor) in equipped.accessories) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 38b7caac0fb..ae06234265a 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -64,7 +64,7 @@ sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = sound_channels.lobby_channel))// stop the jams for AIs - var/mob/living/silicon/ai/O = new (loc, global.using_map.default_law_type,,1)//No MMI but safety is in effect. + var/mob/living/silicon/ai/O = new (loc, global.using_map.default_law_type,,1)//No brain but safety is in effect. O.set_invisibility(INVISIBILITY_NONE) O.aiRestorePowerRoutine = 0 if(mind) @@ -128,10 +128,9 @@ mind.transfer_to(O) if(O.mind && O.mind.assigned_role == ASSIGNMENT_ROBOT) O.mind.original = O - var/mmi_type = SSrobots.get_mmi_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role) + var/mmi_type = SSrobots.get_brain_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role) if(mmi_type) - O.mmi = new mmi_type(O) - O.mmi.transfer_identity(src) + O.central_processor = new mmi_type(O) O.dropInto(loc) O.job = ASSIGNMENT_ROBOT diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 9cf19fcf1f1..397086e49c0 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -28,7 +28,7 @@ for(var/hand_slot in get_held_item_slots()) var/datum/inventory_slot/inv_slot = get_inventory_slot_datum(hand_slot) var/obj/item/held = inv_slot?.get_equipped_item() - var/image/standing = held?.get_mob_overlay(src, inv_slot.overlay_slot, hand_slot) + var/image/standing = held?.get_mob_overlay(src, inv_slot.overlay_slot, hand_slot, inv_slot.use_overlay_fallback_slot) if(standing) standing.appearance_flags |= (RESET_ALPHA|RESET_COLOR) LAZYADD(hand_overlays, standing) diff --git a/code/modules/mob_holder/_holder.dm b/code/modules/mob_holder/_holder.dm index bc1eb5ec2a9..d15b3bb8f15 100644 --- a/code/modules/mob_holder/_holder.dm +++ b/code/modules/mob_holder/_holder.dm @@ -7,10 +7,11 @@ slot_flags = SLOT_HEAD | SLOT_HOLSTER origin_tech = null pixel_y = 8 - origin_tech = "{'biotech':1}" + origin_tech = @'{"biotech":1}' use_single_icon = TRUE item_state = null is_spawnable_type = FALSE + max_health = ITEM_HEALTH_NO_DAMAGE var/last_holder /obj/item/holder/Initialize() @@ -19,13 +20,22 @@ /obj/item/holder/on_update_icon() SHOULD_CALL_PARENT(FALSE) - clear_vis_contents(src) + clear_vis_contents() for(var/atom/movable/AM in src) AM.vis_flags |= (VIS_INHERIT_ID|VIS_INHERIT_LAYER|VIS_INHERIT_PLANE) - add_vis_contents(src, AM) + add_vis_contents(AM) + +// No scooping mobs and handing them to people who can't scoop them. +/obj/item/holder/equipped(mob/user, slot) + . = ..() + for(var/mob/living/mob in contents) + if(!mob.scoop_check(user)) + to_chat(user, SPAN_DANGER("You are unable to keep hold of \the [src]!")) + user.drop_from_inventory(src) + break // Grab our inhands from the mob we're wrapping, if they have any. -/obj/item/holder/get_mob_overlay(mob/user_mob, slot, bodypart) +/obj/item/holder/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE) var/mob/M = locate() in contents if(istype(M)) icon = M.get_holder_icon() @@ -50,7 +60,7 @@ destroy_all() /obj/item/holder/Destroy() - clear_vis_contents(src) + clear_vis_contents() for(var/atom/movable/AM in src) unregister_all_movement(last_holder, AM) AM.vis_flags = initial(AM.vis_flags) diff --git a/code/modules/mob_holder/holder_subtypes.dm b/code/modules/mob_holder/holder_subtypes.dm index 14c3b3a9848..7276d2a41e6 100644 --- a/code/modules/mob_holder/holder_subtypes.dm +++ b/code/modules/mob_holder/holder_subtypes.dm @@ -1,10 +1,10 @@ //Mob specific holders. /obj/item/holder/drone - origin_tech = "{'magnets':3,'engineering':5}" + origin_tech = @'{"magnets":3,"engineering":5}' /obj/item/holder/mouse w_class = ITEM_SIZE_TINY //need own subtype to work with recipes /obj/item/holder/corgi - origin_tech = "{'biotech':4}" + origin_tech = @'{"biotech":4}' diff --git a/code/modules/modular_computers/computers/modular_computer/assembly_computer.dm b/code/modules/modular_computers/computers/modular_computer/assembly_computer.dm index 0e4cc01553a..5df2360f17f 100644 --- a/code/modules/modular_computers/computers/modular_computer/assembly_computer.dm +++ b/code/modules/modular_computers/computers/modular_computer/assembly_computer.dm @@ -89,4 +89,4 @@ . = ..() var/datum/extension/interactive/os/os = get_extension(holder, /datum/extension/interactive/os) if(os) - os.system_shutdown() \ No newline at end of file + os.system_shutdown() diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm index 8e3b1abef44..c6ac0e0d73b 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_console.dm @@ -1,6 +1,38 @@ /obj/machinery/computer/modular name = "modular console" - maximum_component_parts = list(/obj/item/stock_parts = 14) //There's a lot of stuff that goes in these + //There's a lot of stuff that goes in these + maximum_component_parts = list( + /obj/item/stock_parts/keyboard = 1, + /obj/item/stock_parts/console_screen = 1, + /obj/item/stock_parts/power/apc = 1, + /obj/item/stock_parts/power/battery = 1, + /obj/item/stock_parts/power/terminal = 1, + /obj/item/stock_parts/item_holder/card_reader = 1, + /obj/item/stock_parts/item_holder/disk_reader = 1, + /obj/item/stock_parts/network_receiver/network_lock = 1, + /obj/item/stock_parts/access_lock = 1, + /obj/item/stock_parts/network_receiver = 2, + /obj/item/stock_parts/shielding = 2, + /obj/item/stock_parts/radio = 2, + /obj/item/stock_parts/computer/ai_slot = 1, + /obj/item/stock_parts/computer/processor_unit = 1, + /obj/item/stock_parts/computer/card_slot = 1, + /obj/item/stock_parts/computer/charge_stick_slot = 1, + /obj/item/stock_parts/computer/data_disk_drive = 1, + /obj/item/stock_parts/computer/drive_slot = 1, + /obj/item/stock_parts/computer/hard_drive = 1, + /obj/item/stock_parts/computer/lan_port = 1, + /obj/item/stock_parts/computer/money_printer = 1, + /obj/item/stock_parts/computer/nano_printer = 1, + /obj/item/stock_parts/computer/network_card = 1, + /obj/item/stock_parts/computer/scanner/atmos = 1, + /obj/item/stock_parts/computer/scanner/medical = 1, + /obj/item/stock_parts/computer/scanner/paper = 1, + /obj/item/stock_parts/computer/scanner/reagent = 1, + /obj/item/stock_parts/computer/tesla_link = 0, + /obj/item/stock_parts/computer/battery_module = 0, + /obj/item/stock_parts = 10, + ) icon = 'icons/obj/modular_computers/modular_console.dmi' icon_state = "console-off" var/list/interact_sounds = list("keyboard", "keystroke") @@ -94,7 +126,7 @@ to_chat(user, "This component is too large for \the [src].") return 0 . = ..() - + /obj/machinery/computer/modular/verb/emergency_shutdown() set name = "Forced Shutdown" set category = "Object" diff --git a/code/modules/modular_computers/computers/subtypes/dev_holo.dm b/code/modules/modular_computers/computers/subtypes/dev_holo.dm index d74e6d13fee..f2460d4efdf 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_holo.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_holo.dm @@ -75,7 +75,7 @@ update_lighting() -// Subtypes. It's not exactly.. well, presets, so i'll put it here for now. +// Subtypes. It's not exactly... well, presets, so i'll put it here for now. /obj/item/modular_computer/holotablet/round name = "round holotablet" diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index cc2126c7a47..ff514949f13 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -56,7 +56,7 @@ anchored = TRUE density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-20}, 'SOUTH':{'y':24}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-20}, "SOUTH":{"y":24}, "EAST":{"x":-24}, "WEST":{"x":24}}' idle_power_usage = 75 active_power_usage = 300 max_hardware_size = 2 //make sure we can only put smaller components in here diff --git a/code/modules/modular_computers/computers/subtypes/preset_console.dm b/code/modules/modular_computers/computers/subtypes/preset_console.dm index 476d2ac7143..44fcbda8f9b 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_console.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_console.dm @@ -8,20 +8,17 @@ /obj/machinery/computer/modular/preset/full uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, /obj/item/stock_parts/computer/card_slot, /obj/item/stock_parts/computer/ai_slot, ) /obj/machinery/computer/modular/preset/aislot uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, /obj/item/stock_parts/computer/ai_slot ) /obj/machinery/computer/modular/preset/cardslot uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, /obj/item/stock_parts/computer/card_slot ) @@ -71,6 +68,15 @@ ) autorun_program = /datum/computer_file/program/rcon_console +/obj/machinery/computer/modular/preset/engineering/atmospherics + default_software = list( + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/shutoff_valve, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/wordprocessor + ) + autorun_program = /datum/computer_file/program/shutoff_valve + /obj/machinery/computer/modular/preset/medical default_software = list( /datum/computer_file/program/suit_sensors, diff --git a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm index d20c0d91ad6..ce3d31590e6 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm @@ -57,4 +57,12 @@ default_programs = list( /datum/computer_file/program/records, /datum/computer_file/program/wordprocessor - ) \ No newline at end of file + ) + +/obj/item/modular_computer/laptop/preset/medical + default_programs = list( + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/records, + /datum/computer_file/program/wordprocessor + ) diff --git a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm index 40609a4a05d..23e4122b908 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm @@ -70,4 +70,20 @@ /datum/computer_file/program/camera_monitor, /datum/computer_file/program/shields_monitor, /datum/computer_file/program/supermatter_monitor - ) \ No newline at end of file + ) + +/obj/machinery/computer/modular/telescreen/preset/entertainment + default_software = list( + /datum/computer_file/program/camera_monitor + ) + autorun_program = /datum/computer_file/program/camera_monitor + +/obj/machinery/computer/modular/telescreen/preset/security + default_software = list( + /datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/records, + /datum/computer_file/program/forceauthorization, + /datum/computer_file/program/wordprocessor + ) + autorun_program = /datum/computer_file/program/camera_monitor diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 34b99e38bbf..1a9f9bbd239 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -22,6 +22,13 @@ var/global/file_uid = 0 var/list/write_access var/list/mod_access +SAVED_VAR(/datum/computer_file, filename) +SAVED_VAR(/datum/computer_file, holder) +SAVED_VAR(/datum/computer_file, metadata) +SAVED_VAR(/datum/computer_file, read_access) +SAVED_VAR(/datum/computer_file, write_access) +SAVED_VAR(/datum/computer_file, mod_access) + /datum/computer_file/New(var/list/md = null) ..() uid = file_uid diff --git a/code/modules/modular_computers/file_system/data.dm b/code/modules/modular_computers/file_system/data.dm index 369f1b15b4b..d0237f7246b 100644 --- a/code/modules/modular_computers/file_system/data.dm +++ b/code/modules/modular_computers/file_system/data.dm @@ -7,6 +7,11 @@ var/do_not_edit = 0 // Whether the user will be reminded that the file probably shouldn't be edited. var/read_only = 0 // Protects files that should never be edited by the user due to special properties. +SAVED_FLATTEN(/datum/computer_file/data) +SAVED_VAR(/datum/computer_file/data, stored_data) +SAVED_VAR(/datum/computer_file/data, size) +SAVED_VAR(/datum/computer_file/data, block_size) + /datum/computer_file/data/PopulateClone(datum/computer_file/data/clone) clone = ..() clone.stored_data = stored_data diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index ed32d402c6e..b3027363e8d 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -25,6 +25,9 @@ mod_access = list(list(access_network)) +SAVED_VAR(/datum/computer_file/program, program_state) +SAVED_VAR(/datum/computer_file/program, computer) + /datum/computer_file/program/Destroy() if(computer && computer.active_program == src) computer.kill_program(src) diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm index 0b3a1c7b880..3b5321fdf4b 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm @@ -65,7 +65,7 @@ // Build list of data from sensor readings. for(var/obj/machinery/power/sensor/S in grid_sensors) sensors.Add(list(list( - "name" = S.id_tag, + "name" = html_encode(S.id_tag), "alarm" = S.check_grid_warning() ))) if(S.id_tag == active_sensor) @@ -91,7 +91,7 @@ for(var/obj/machinery/power/sensor/S in SSmachines.machinery) if(get_z(S) in connected_z_levels) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. grid_sensors += S - events_repository.register(/decl/observ/destroyed, S, src, /datum/nano_module/program/power_monitor/proc/remove_sensor) + events_repository.register(/decl/observ/destroyed, S, src, TYPE_PROC_REF(/datum/nano_module/program/power_monitor, remove_sensor)) /datum/nano_module/program/power_monitor/proc/remove_sensor(var/removed_sensor, var/update_ui = TRUE) if(active_sensor == removed_sensor) @@ -99,7 +99,7 @@ if(update_ui) SSnano.update_uis(src) grid_sensors -= removed_sensor - events_repository.unregister(/decl/observ/destroyed, removed_sensor, src, /datum/nano_module/program/power_monitor/proc/remove_sensor) + events_repository.unregister(/decl/observ/destroyed, removed_sensor, src, TYPE_PROC_REF(/datum/nano_module/program/power_monitor, remove_sensor)) /datum/nano_module/program/power_monitor/proc/is_sysadmin(var/mob/user) if(program) @@ -167,5 +167,5 @@ else if( href_list["setsensor"] ) - active_sensor = href_list["setsensor"] + active_sensor = html_decode(href_list["setsensor"]) . = 1 diff --git a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm index a00df078996..6c7955d85e5 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm @@ -105,7 +105,7 @@ var/obj/machinery/shield_generator/S = locate(href_list["ref"]) in shields if(S) deselect_shield() - events_repository.register(/decl/observ/destroyed, S, src, /datum/nano_module/program/shields_monitor/proc/deselect_shield) + events_repository.register(/decl/observ/destroyed, S, src, TYPE_PROC_REF(/datum/nano_module/program/shields_monitor, deselect_shield)) active = S return 1 diff --git a/code/modules/modular_computers/file_system/programs/generic/configurator.dm b/code/modules/modular_computers/file_system/programs/generic/configurator.dm index 20d4b6da16a..b280adf55f2 100644 --- a/code/modules/modular_computers/file_system/programs/generic/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/generic/configurator.dm @@ -33,8 +33,9 @@ var/obj/item/stock_parts/computer/battery_module/battery_module = program.computer.get_component(PART_BATTERY) data["battery_exists"] = !!battery_module if(battery_module) - data["battery_rating"] = battery_module.battery.maxcharge - data["battery_percent"] = round(battery_module.battery.percent()) + var/obj/item/cell/battery = battery_module.get_cell() + data["battery_rating"] = battery?.maxcharge || 0 + data["battery_percent"] = battery ? round(battery.percent()) : 0 var/obj/item/stock_parts/computer/network_card/network_card = program.computer.get_component(PART_NETWORK) data["nic_exists"] = !!network_card diff --git a/code/modules/modular_computers/file_system/programs/generic/folding.dm b/code/modules/modular_computers/file_system/programs/generic/folding.dm index 7c6c54bd756..a22fb6d8777 100644 --- a/code/modules/modular_computers/file_system/programs/generic/folding.dm +++ b/code/modules/modular_computers/file_system/programs/generic/folding.dm @@ -46,10 +46,13 @@ if(started_on + current_interval > world.timeofday) return TOPIC_HANDLED // not ready to collect. var/obj/item/card/id/I = usr.GetIdCard() - if(!I) + if(!istype(I)) to_chat(usr, SPAN_WARNING("Unable to locate ID card for transaction.")) return TOPIC_HANDLED var/datum/money_account/account = get_glob_account(I.associated_account_id) + if(!istype(account)) + to_chat(usr, SPAN_WARNING("Unable to locate account for deposit using account number #[I.associated_account_id || "NULL"].")) + return TOPIC_HANDLED var/earned = (current_interval / 10) * (SCIENCE_MONEY_PER_SECOND * computer.get_processing_power()) //Divide by 10 to convert from ticks to seconds account.deposit(earned, "Completed FOLDING@SPACE project.") var/decl/currency/currency = GET_DECL(global.using_map.default_currency) diff --git a/code/modules/modular_computers/file_system/programs/generic/game.dm b/code/modules/modular_computers/file_system/programs/generic/game.dm index 77c40f0223e..c5c9b2fdd3d 100644 --- a/code/modules/modular_computers/file_system/programs/generic/game.dm +++ b/code/modules/modular_computers/file_system/programs/generic/game.dm @@ -7,7 +7,7 @@ filedesc = "Unknown Game" // User-Friendly name. In this case, we will generate a random name in constructor. program_icon_state = "game" // Icon state of this program's screen. program_menu_icon = "script" - extended_desc = "Fun for the whole family! Probably not an AAA title, but at least you can download it on the corporate network.." // A nice description. + extended_desc = "Fun for the whole family! Probably not an AAA title, but at least you can download it on the corporate network." // A nice description. size = 5 // Size in GQ. Integers only. Smaller sizes should be used for utility/low use programs (like this one), while large sizes are for important programs. available_on_network = 1 // ... but we want it to be available for download. nanomodule_path = /datum/nano_module/arcade_classic/ // Path of relevant nano module. The nano module is defined further in the file. diff --git a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm index 525f363d285..563791757be 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm @@ -135,7 +135,7 @@ // This IF cuts on data transferred to client, so i guess it's worth it. if(prog.downloaderror) // Download errored. Wait until user resets the program. data["error"] = prog.downloaderror - if(prog.current_transfer) // Download running. Wait please.. + if(prog.current_transfer) // Download running. Wait please... data |= prog.current_transfer.get_ui_data() data["downloadspeed"] = prog.current_transfer.get_transfer_speed() var/datum/computer_file/program/P = prog.current_transfer.transferring diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index 8e0824efa13..d5586fc52de 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -49,7 +49,7 @@ if(isAI(usr)) var/mob/living/silicon/ai/AI = usr var/mob/living/carbon/human/H = locate(href_list["track"]) in SSmobs.mob_list - if(hassensorlevel(H, SUIT_SENSOR_TRACKING)) + if(hassensorlevel(H, VITALS_SENSOR_TRACKING)) AI.ai_actual_track(H) return 1 diff --git a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm b/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm index a304cca0318..0f99a187cc3 100644 --- a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm +++ b/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm @@ -29,7 +29,7 @@ if(!A) return 0 if(href_list["PRG_beginReconstruction"]) - if((A.hardware_integrity() < 100) || (A.backup_capacitor() < 100)) + if((A.get_health_percent() < 100) || (A.backup_capacitor() < 100)) restoring = 1 return 1 @@ -66,12 +66,12 @@ if(!A || !restoring) restoring = 0 // If the AI was removed, stop the restoration sequence. return - A.adjustFireLoss(-4) - A.adjustBruteLoss(-4) + A.adjustFireLoss(-4, do_update_health = FALSE) + A.adjustBruteLoss(-4, do_update_health = FALSE) A.adjustOxyLoss(-4) - A.updatehealth() + A.update_health() // If the AI is dead, revive it. - if (A.health >= -100 && A.stat == DEAD) + if (A.stat == DEAD && !A.should_be_dead()) A.set_stat(CONSCIOUS) A.lying = 0 A.switch_from_dead_to_living_mob_list() @@ -81,7 +81,7 @@ if(AC) AC.update_icon() // Finished restoring - if((A.hardware_integrity() == 100) && (A.backup_capacitor() == 100)) + if((A.get_health_percent() == 100) && (A.backup_capacitor() == 100)) restoring = 0 /datum/nano_module/program/computer_aidiag @@ -106,9 +106,9 @@ data["error"] = "No AI located" else data["ai_name"] = A.name - data["ai_integrity"] = A.hardware_integrity() + data["ai_integrity"] = A.get_health_percent() data["ai_capacitor"] = A.backup_capacitor() - data["ai_isdamaged"] = (A.hardware_integrity() < 100) || (A.backup_capacitor() < 100) + data["ai_isdamaged"] = (A.get_health_percent() < 100) || (A.backup_capacitor() < 100) data["ai_isdead"] = (A.stat == DEAD) var/list/all_laws[0] diff --git a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm b/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm index 875c3b8588b..28c21f6b421 100644 --- a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm +++ b/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm @@ -22,7 +22,7 @@ var/global/list/all_warrants /datum/nano_module/program/proc/get_warrants(list/accesses, mob/user) var/datum/computer_network/network = program?.computer?.get_network() if(network) - return network.get_all_files_of_type(/datum/computer_file/report/warrant, accesses, user) + return network.get_all_files_of_type(/datum/computer_file/report/warrant, accesses = accesses) /datum/nano_module/program/proc/remove_warrant(datum/computer_file/report/warrant/W, list/accesses, mob/user) var/datum/computer_network/network = program?.computer?.get_network() @@ -84,9 +84,9 @@ var/global/list/all_warrants . = 1 var/datum/computer_file/report/warrant/W if(href_list["addwarrant"] == "arrest") - W = new /datum/computer_file/report/warrant/arrest() + W = new /datum/computer_file/report/warrant/arrest else - W = new /datum/computer_file/report/warrant/search() + W = new /datum/computer_file/report/warrant/search active = W if(href_list["savewarrant"]) @@ -94,7 +94,7 @@ var/global/list/all_warrants if(!active) return broadcast_security_hud_message("[active.get_broadcast_summary()] has been [(active in global.all_warrants) ? "edited" : "uploaded"].", nano_host()) - + var/success = save_warrant(active, accesses, usr) if(success != OS_FILE_SUCCESS) to_chat(usr, SPAN_WARNING("Could not save warrant. You may lack access to the file servers.")) diff --git a/code/modules/modular_computers/file_system/reports/report.dm b/code/modules/modular_computers/file_system/reports/report.dm index efb782c507f..1f0a7699e9e 100644 --- a/code/modules/modular_computers/file_system/reports/report.dm +++ b/code/modules/modular_computers/file_system/reports/report.dm @@ -13,6 +13,14 @@ var/logo //Can be set to a pencode logo for use with some display methods. var/list/searchable_fields = list() //The names of fields in the report which are searchable. +SAVED_VAR(/datum/computer_file/report, title) +SAVED_VAR(/datum/computer_file/report, form_name) +SAVED_VAR(/datum/computer_file/report, creator) +SAVED_VAR(/datum/computer_file/report, file_time) +SAVED_VAR(/datum/computer_file/report, fields) +SAVED_VAR(/datum/computer_file/report, available_on_network) +SAVED_VAR(/datum/computer_file/report, logo) + /datum/computer_file/report/New() ..() generate_fields() diff --git a/code/modules/modular_computers/file_system/reports/report_field.dm b/code/modules/modular_computers/file_system/reports/report_field.dm index 38ae04459fe..e44bc879cec 100644 --- a/code/modules/modular_computers/file_system/reports/report_field.dm +++ b/code/modules/modular_computers/file_system/reports/report_field.dm @@ -12,6 +12,16 @@ var/list/read_access = list() // The access required to edit the field. var/list/write_access = list() // The access required to view the field. +SAVED_VAR(/datum/report_field, name) +SAVED_VAR(/datum/report_field, value) +SAVED_VAR(/datum/report_field, can_edit) +SAVED_VAR(/datum/report_field, required) +SAVED_VAR(/datum/report_field, ID) +SAVED_VAR(/datum/report_field, needs_big_box) +SAVED_VAR(/datum/report_field, ignore_value) +SAVED_VAR(/datum/report_field, write_access) +SAVED_VAR(/datum/report_field, read_access) + /datum/report_field/New(datum/computer_file/report/report) owner = report ..() @@ -40,7 +50,7 @@ return (OS_READ_ACCESS | OS_WRITE_ACCESS) if(!LAZYLEN(read_access) || has_access(read_access, accesses)) . |= OS_READ_ACCESS - + if(!LAZYLEN(write_access) || has_access(write_access, accesses)) . |= OS_WRITE_ACCESS diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index c830be8b70e..de61e09ddfd 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -29,7 +29,7 @@ // Called on multitool click, prints diagnostic information to the user. /obj/item/stock_parts/computer/proc/diagnostics() - return list("Hardware Integrity Test... (Corruption: [get_percent_damage()]%)") + return list("Hardware Integrity Test... (Corruption: [get_percent_damages()]%)") /obj/item/stock_parts/computer/Initialize() . = ..() diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index 853e088850f..8fb4f56a57a 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -6,7 +6,7 @@ hardware_size = 1 critical = 0 power_usage = 100 - origin_tech = "{'powerstorage':2,'programming':3}" + origin_tech = @'{"powerstorage":2,"programming":3}' external_slot = TRUE material = /decl/material/solid/metal/steel diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index ed288844a9a..2f3938ae2e9 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -5,17 +5,42 @@ desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops. It's rating is 75 Wh." icon_state = "battery_normal" critical = 1 - origin_tech = "{'powerstorage':1,'engineering':1}" + origin_tech = @'{"powerstorage":1,"engineering":1}' material = /decl/material/solid/metal/steel - var/battery_rating = 75 - var/obj/item/cell/battery = /obj/item/cell + +//#FIXME: This needs to be fixed to work with persistence. + +/obj/item/stock_parts/computer/battery_module/Initialize(ml, material_key) + . = ..() + setup_power_supply() + if(!persistent_id) + charge_to_full() + +/obj/item/stock_parts/computer/battery_module/diagnostics() + . = ..() + var/obj/item/cell/battery = get_cell() + if(battery) + . += "Internal battery charge: [battery.charge]/[battery.maxcharge] CU" + +/obj/item/stock_parts/computer/battery_module/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell + . = ..(loaded_cell_type, /obj/item/cell, /datum/extension/loaded_cell/unremovable, charge_value) + var/obj/item/cell/battery = get_cell() + if(battery) + battery.maxcharge = battery_rating + battery.charge = 0 //#FIXME: Should be in the cell code + +/obj/item/stock_parts/computer/battery_module/proc/charge_to_full() + var/obj/item/cell/battery = get_cell() + if(battery) + battery.charge = battery.maxcharge //#FIXME: Should be in the cell code /obj/item/stock_parts/computer/battery_module/advanced name = "advanced battery" desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices. It's rating is 110 Wh." icon_state = "battery_advanced" - origin_tech = "{'powerstorage':2,'engineering':2}" + origin_tech = @'{"powerstorage":2,"engineering":2}' hardware_size = 2 battery_rating = 110 material = /decl/material/solid/metal/steel @@ -24,7 +49,7 @@ name = "super battery" desc = "A very advanced power cell, often used in high-end devices, or as uninterruptable power supply for important consoles or servers. It's rating is 150 Wh." icon_state = "battery_super" - origin_tech = "{'powerstorage':3,'engineering':3}" + origin_tech = @'{"powerstorage":3,"engineering":3}' hardware_size = 2 battery_rating = 150 material = /decl/material/solid/metal/steel @@ -33,7 +58,7 @@ name = "ultra battery" desc = "A very advanced large power cell. It's often used as uninterruptable power supply for critical consoles or servers. It's rating is 200 Wh." icon_state = "battery_ultra" - origin_tech = "{'powerstorage':5,'engineering':4}" + origin_tech = @'{"powerstorage":5,"engineering":4}' hardware_size = 3 battery_rating = 200 material = /decl/material/solid/metal/steel @@ -42,7 +67,7 @@ name = "micro battery" desc = "A small power cell, commonly seen in most portable microcomputers. It's rating is 50 Wh." icon_state = "battery_micro" - origin_tech = "{'powerstorage':2,'engineering':2}" + origin_tech = @'{"powerstorage":2,"engineering":2}' battery_rating = 50 material = /decl/material/solid/metal/steel @@ -50,10 +75,10 @@ name = "nano battery" desc = "A tiny power cell, commonly seen in low-end portable microcomputers. It's rating is 30 Wh." icon_state = "battery_nano" - origin_tech = "{'powerstorage':1,'engineering':1}" + origin_tech = @'{"powerstorage":1,"engineering":1}' battery_rating = 30 material = /decl/material/solid/metal/steel - origin_tech = "{'powerstorage':2,'engineering':1}" + origin_tech = @'{"powerstorage":2,"engineering":1}' // This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes. /obj/item/stock_parts/computer/battery_module/lambda @@ -62,26 +87,6 @@ icon_state = "battery_lambda" hardware_size = 1 battery_rating = 3000 - battery = /obj/item/cell/infinite - -/obj/item/stock_parts/computer/battery_module/diagnostics() - . = ..() - . += "Internal battery charge: [battery.charge]/[battery.maxcharge] CU" - -/obj/item/stock_parts/computer/battery_module/Initialize() - . = ..() - battery = new battery(src) - battery.maxcharge = battery_rating - battery.charge = 0 - charge_to_full() - -/obj/item/stock_parts/computer/battery_module/Destroy() - QDEL_NULL(battery) - return ..() - -/obj/item/stock_parts/computer/battery_module/proc/charge_to_full() - if(battery) - battery.charge = battery.maxcharge -/obj/item/stock_parts/computer/battery_module/get_cell() - return battery +/obj/item/stock_parts/computer/battery_module/lambda/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/infinite, accepted_cell_type, power_supply_extension_type, charge_value) diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 7ffaf2c8c24..cb62d1049e9 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -5,7 +5,7 @@ critical = 0 icon_state = "cardreader" hardware_size = 1 - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' usage_flags = PROGRAM_ALL & ~PROGRAM_PDA external_slot = TRUE material = /decl/material/solid/metal/steel diff --git a/code/modules/modular_computers/hardware/charge_stick_slot.dm b/code/modules/modular_computers/hardware/charge_stick_slot.dm index 82c75557765..d2f7b010d7c 100644 --- a/code/modules/modular_computers/hardware/charge_stick_slot.dm +++ b/code/modules/modular_computers/hardware/charge_stick_slot.dm @@ -5,7 +5,7 @@ critical = 0 icon_state = "cardreader" hardware_size = 1 - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' usage_flags = PROGRAM_ALL & ~PROGRAM_PDA external_slot = TRUE material = /decl/material/solid/metal/steel diff --git a/code/modules/modular_computers/hardware/disk_slot.dm b/code/modules/modular_computers/hardware/disk_slot.dm index 36818d4e0ce..3bf653e67b4 100644 --- a/code/modules/modular_computers/hardware/disk_slot.dm +++ b/code/modules/modular_computers/hardware/disk_slot.dm @@ -5,7 +5,7 @@ critical = 0 icon_state = "cardreader" hardware_size = 1 - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' usage_flags = PROGRAM_ALL external_slot = TRUE material = /decl/material/solid/metal/steel diff --git a/code/modules/modular_computers/hardware/drive_slot.dm b/code/modules/modular_computers/hardware/drive_slot.dm index 0e364c9e61a..dacade6012b 100644 --- a/code/modules/modular_computers/hardware/drive_slot.dm +++ b/code/modules/modular_computers/hardware/drive_slot.dm @@ -5,7 +5,7 @@ critical = 0 icon_state = "cardreader" hardware_size = 1 - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' usage_flags = PROGRAM_ALL external_slot = TRUE material = /decl/material/solid/metal/steel diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index fca04084acd..d800a7b4c31 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -4,7 +4,7 @@ power_usage = 25 // SSD or something with low power usage icon_state = "hdd_normal" hardware_size = 1 - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) var/max_capacity = 128 @@ -15,7 +15,7 @@ name = "advanced hard drive" desc = "A small hybrid hard drive with 256GQ of storage capacity for use in higher grade computers where balance between power efficiency and capacity is desired." max_capacity = 256 - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' power_usage = 50 // Hybrid, medium capacity and medium power storage icon_state = "hdd_advanced" hardware_size = 2 @@ -26,7 +26,7 @@ name = "super hard drive" desc = "A small hard drive with 512GQ of storage capacity for use in cluster storage solutions where capacity is more important than power efficiency." max_capacity = 512 - origin_tech = "{'programming':3,'engineering':3}" + origin_tech = @'{"programming":3,"engineering":3}' power_usage = 100 // High-capacity but uses lots of power, shortening battery life. Best used with APC link. icon_state = "hdd_super" hardware_size = 2 @@ -37,7 +37,7 @@ name = "cluster hard drive" desc = "A large storage cluster consisting of multiple hard drives for usage in high capacity storage systems. Has capacity of 2048 GQ." power_usage = 500 - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' max_capacity = 2048 icon_state = "hdd_cluster" hardware_size = 3 @@ -49,7 +49,7 @@ name = "small hard drive" desc = "A small highly efficient solid state drive for portable devices." power_usage = 10 - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' max_capacity = 64 icon_state = "hdd_small" hardware_size = 1 @@ -60,7 +60,7 @@ name = "micro hard drive" desc = "A small micro hard drive for portable devices." power_usage = 2 - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' max_capacity = 32 icon_state = "hdd_micro" hardware_size = 1 diff --git a/code/modules/modular_computers/hardware/lan_port.dm b/code/modules/modular_computers/hardware/lan_port.dm index a50d49a0c08..09e516f290b 100644 --- a/code/modules/modular_computers/hardware/lan_port.dm +++ b/code/modules/modular_computers/hardware/lan_port.dm @@ -2,7 +2,7 @@ name = "wired connection port" desc = "A basic expansion port for use with wired connections." power_usage = 30 - origin_tech = "{'programming':1,'engineering':1}" + origin_tech = @'{"programming":1,"engineering":1}' icon_state = "netcard_ethernet" hardware_size = 3 material = /decl/material/solid/glass @@ -29,13 +29,13 @@ if(!istype(parent)) return terminal = new(get_turf(parent)) - set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), parent, .proc/check_terminal_prox, get_area(src)) - events_repository.register(/decl/observ/destroyed, terminal, src, .proc/unset_terminal) + set_extension(src, /datum/extension/event_registration/shuttle_stationary, GET_DECL(/decl/observ/moved), parent, PROC_REF(check_terminal_prox), get_area(src)) + events_repository.register(/decl/observ/destroyed, terminal, src, PROC_REF(unset_terminal)) set_status(parent, PART_STAT_CONNECTED) /obj/item/stock_parts/computer/lan_port/proc/unset_terminal() remove_extension(src, /datum/extension/event_registration/shuttle_stationary) - events_repository.unregister(/decl/observ/destroyed, terminal, src, .proc/unset_terminal) + events_repository.unregister(/decl/observ/destroyed, terminal, src, PROC_REF(unset_terminal)) var/obj/machinery/parent = loc if(istype(parent)) unset_status(parent, PART_STAT_CONNECTED) diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm index dd3a4684212..e264fa428b5 100644 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ b/code/modules/modular_computers/hardware/nano_printer.dm @@ -2,7 +2,7 @@ name = "nano printer" desc = "Small integrated printer with paper recycling module." power_usage = 50 - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' critical = 0 icon_state = "printer" hardware_size = 1 diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index a2014e4b061..562ea9a221a 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -2,7 +2,7 @@ name = "basic network card" desc = "A basic network card for usage with standard network protocols." power_usage = 50 - origin_tech = "{'programming':2,'engineering':1}" + origin_tech = @'{"programming":2,"engineering":1}' critical = 0 icon_state = "netcard_basic" hardware_size = 1 @@ -33,7 +33,7 @@ name = "advanced network card" desc = "An advanced network card for usage with standard network protocols. It's transmitter is strong enough to connect even when far away." long_range = 1 - origin_tech = "{'programming':4,'engineering':2}" + origin_tech = @'{"programming":4,"engineering":2}' power_usage = 100 // Better range but higher power usage. icon_state = "netcard_advanced" hardware_size = 1 diff --git a/code/modules/modular_computers/hardware/portable_hard_drive.dm b/code/modules/modular_computers/hardware/portable_hard_drive.dm index f854beb0cfd..921f22a0f57 100644 --- a/code/modules/modular_computers/hardware/portable_hard_drive.dm +++ b/code/modules/modular_computers/hardware/portable_hard_drive.dm @@ -6,7 +6,7 @@ icon_state = "flashdrive_basic" hardware_size = 1 max_capacity = 16 - origin_tech = "{'programming':1}" + origin_tech = @'{"programming":1}' material = /decl/material/solid/fiberglass /obj/item/stock_parts/computer/hard_drive/portable/advanced @@ -16,7 +16,7 @@ icon_state = "flashdrive_advanced" hardware_size = 1 max_capacity = 64 - origin_tech = "{'programming':2}" + origin_tech = @'{"programming":2}' /obj/item/stock_parts/computer/hard_drive/portable/super name = "super data crystal" @@ -25,7 +25,7 @@ icon_state = "flashdrive_super" hardware_size = 1 max_capacity = 256 - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' /obj/item/stock_parts/computer/hard_drive/portable/Initialize() . = ..() @@ -63,4 +63,3 @@ readme.stored_data = jointext(readme_data, "\[br\]") readme.filename = "___README___" store_file(readme) - \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/processor_unit.dm b/code/modules/modular_computers/hardware/processor_unit.dm index e1c75121a7c..95cf5d8525d 100644 --- a/code/modules/modular_computers/hardware/processor_unit.dm +++ b/code/modules/modular_computers/hardware/processor_unit.dm @@ -8,7 +8,7 @@ hardware_size = 2 power_usage = 100 critical = 1 - origin_tech = "{'programming':3,'engineering':2}" + origin_tech = @'{"programming":3,"engineering":2}' material = /decl/material/solid/metal/steel var/processing_power = 2 // Used for DDoS speed calculations @@ -20,7 +20,7 @@ hardware_size = 1 power_usage = 25 processing_power = 1 - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' material = /decl/material/solid/metal/steel /obj/item/stock_parts/computer/processor_unit/photonic @@ -30,7 +30,7 @@ hardware_size = 2 power_usage = 50 processing_power = 4 - origin_tech = "{'programming':5,'engineering':4}" + origin_tech = @'{"programming":5,"engineering":4}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) @@ -41,6 +41,6 @@ hardware_size = 1 power_usage = 10 processing_power = 2 - origin_tech = "{'programming':4,'engineering':3}" + origin_tech = @'{"programming":4,"engineering":3}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) diff --git a/code/modules/modular_computers/hardware/scanners/scanner.dm b/code/modules/modular_computers/hardware/scanners/scanner.dm index cdb1222ab75..b84dc782e6d 100644 --- a/code/modules/modular_computers/hardware/scanners/scanner.dm +++ b/code/modules/modular_computers/hardware/scanners/scanner.dm @@ -7,7 +7,7 @@ icon_state = "printer" hardware_size = 1 critical = 0 - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' var/datum/computer_file/program/scanner/driver_type = /datum/computer_file/program/scanner // A program type that the scanner interfaces with and attempts to install on insertion. var/datum/computer_file/program/scanner/driver // A driver program which has been set up to interface with the scanner. diff --git a/code/modules/modular_computers/hardware/tesla_link.dm b/code/modules/modular_computers/hardware/tesla_link.dm index c80c643abed..6e59fcdb5f9 100644 --- a/code/modules/modular_computers/hardware/tesla_link.dm +++ b/code/modules/modular_computers/hardware/tesla_link.dm @@ -5,7 +5,7 @@ enabled = 1 icon_state = "teslalink" hardware_size = 1 - origin_tech = "{'programming':2,'powerstorage':3,'engineering':2}" + origin_tech = @'{"programming":2,"powerstorage":3,"engineering":2}' material = /decl/material/solid/metal/steel var/passive_charging_rate = 250 // W diff --git a/code/modules/modular_computers/networking/_network.dm b/code/modules/modular_computers/networking/_network.dm index 77ab16903ab..94c91518e1b 100644 --- a/code/modules/modular_computers/networking/_network.dm +++ b/code/modules/modular_computers/networking/_network.dm @@ -37,6 +37,13 @@ var/static/list/all_software_categories var/list/chat_channels = list() +SAVED_VAR(/datum/computer_network, network_key) +SAVED_VAR(/datum/computer_network, network_features_enabled) +SAVED_VAR(/datum/computer_network, intrusion_detection_enabled) +SAVED_VAR(/datum/computer_network, intrusion_detection_alarm) +SAVED_VAR(/datum/computer_network, banned_nids) +SAVED_VAR(/datum/computer_network, chat_channels) + /datum/computer_network/New(var/new_id) if(!new_id) new_id = "network[random_id(type, 100,999)]" @@ -389,6 +396,7 @@ if(!islist(channels)) channels = list(channels) for(var/channel in channels) - cameras_by_channel[channel] -= removed - if(!length(cameras_by_channel)) - cameras_by_channel -= channel \ No newline at end of file + if(cameras_by_channel[channel]) + cameras_by_channel[channel] -= removed + if(!length(cameras_by_channel[channel])) + cameras_by_channel -= channel diff --git a/code/modules/modular_computers/networking/device_types/acl.dm b/code/modules/modular_computers/networking/device_types/acl.dm index fe5eb0ad715..eff3e9c97d8 100644 --- a/code/modules/modular_computers/networking/device_types/acl.dm +++ b/code/modules/modular_computers/networking/device_types/acl.dm @@ -110,17 +110,17 @@ /decl/public_access/public_method/add_group name = "Add group" desc = "Adds a new group with the passed name. A parent group can be passed to add a child group." - call_proc = /datum/extension/network_device/acl/proc/add_group + call_proc = TYPE_PROC_REF(/datum/extension/network_device/acl, add_group) forward_args = TRUE /decl/public_access/public_method/remove_group name = "Remove group" desc = "Removes a group with the passed name. A parent group can be passed to remove a child group of that parent." - call_proc = /datum/extension/network_device/acl/proc/remove_group + call_proc = TYPE_PROC_REF(/datum/extension/network_device/acl, remove_group) forward_args = TRUE /decl/public_access/public_method/list_groups name = "List groups" desc = "Lists groups on the group access controller. A parent group can be passed list children of that parent group." - call_proc = /datum/extension/network_device/acl/proc/get_group_listing + call_proc = TYPE_PROC_REF(/datum/extension/network_device/acl, get_group_listing) forward_args = TRUE \ No newline at end of file diff --git a/code/modules/modular_computers/networking/machinery/_network_machine.dm b/code/modules/modular_computers/networking/machinery/_network_machine.dm index 30b9d6d2e6f..004e337e449 100644 --- a/code/modules/modular_computers/networking/machinery/_network_machine.dm +++ b/code/modules/modular_computers/networking/machinery/_network_machine.dm @@ -37,8 +37,8 @@ install_component(/obj/item/stock_parts/computer/lan_port, FALSE) /obj/machinery/network/proc/is_overheated() - var/turf/simulated/L = loc - if(istype(L)) + var/turf/L = loc + if(istype(L) && L.simulated) var/datum/gas_mixture/env = L.return_air() if(env.temperature >= heat_threshold) return TRUE @@ -53,8 +53,8 @@ /obj/machinery/network/proc/produce_heat() if (!produces_heat || !use_power || !operable()) return - var/turf/simulated/L = loc - if(istype(L)) + var/turf/L = loc + if(istype(L) && L.simulated) var/datum/gas_mixture/env = L.return_air() var/transfer_moles = 0.25 * env.total_moles var/datum/gas_mixture/removed = env.remove(transfer_moles) // Air is moved through computer vents. diff --git a/code/modules/modular_computers/networking/machinery/_network_machine_persistence.dm b/code/modules/modular_computers/networking/machinery/_network_machine_persistence.dm new file mode 100644 index 00000000000..36c7614c879 --- /dev/null +++ b/code/modules/modular_computers/networking/machinery/_network_machine_persistence.dm @@ -0,0 +1,22 @@ +/obj/machinery/network/before_save() + . = ..() + var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) + CUSTOM_SV_LIST(\ + "saved_address" = D.address,\ + "saved_network_tag" = D.network_tag\ + ) + initial_network_id = D.network_id + initial_network_key = D.key + +/obj/machinery/network/Initialize() + . = ..() + if(persistent_id) + var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) + var/saved_address = LOAD_CUSTOM_SV("saved_address") + var/saved_network_tag = LOAD_CUSTOM_SV("saved_network_tag") + if(length(saved_address)) + D.address = saved_address + if(length(saved_network_tag)) + D.network_tag = saved_network_tag + CLEAR_SV("saved_address") + CLEAR_SV("saved_network_tag") diff --git a/code/modules/modular_computers/networking/machinery/bank.dm b/code/modules/modular_computers/networking/machinery/bank.dm index 11f09e36034..7729dd0aacf 100644 --- a/code/modules/modular_computers/networking/machinery/bank.dm +++ b/code/modules/modular_computers/networking/machinery/bank.dm @@ -1,7 +1,7 @@ /obj/machinery/network/bank name = "banking mainframe" desc = "A mainframe used for managing network finances. It must be interfaced with remotely." - icon = 'icons/obj/machines/tcomms/hub.dmi' + icon = 'icons/obj/machines/bank_controller.dmi' icon_state = "hub" network_device_type = /datum/extension/network_device/bank main_template = "banking_mainframe.tmpl" diff --git a/code/modules/modular_computers/networking/machinery/mainframe.dm b/code/modules/modular_computers/networking/machinery/mainframe.dm index b9f8b6cf1cd..3f25c9e811c 100644 --- a/code/modules/modular_computers/networking/machinery/mainframe.dm +++ b/code/modules/modular_computers/networking/machinery/mainframe.dm @@ -18,10 +18,29 @@ /obj/machinery/network/mainframe/Initialize() . = ..() + var/datum/extension/network_device/mainframe/M = get_extension(src, /datum/extension/network_device) M.roles |= initial_roles M.update_roles() + if(!(MF_ROLE_SOFTWARE in initial_roles)) + return + + var/obj/item/stock_parts/computer/hard_drive/drive = get_component_of_type(PART_HDD) + for(var/F in subtypesof(/datum/computer_file/report)) + var/datum/computer_file/report/type = F + if(TYPE_IS_ABSTRACT(type)) + continue + if(initial(type.available_on_network)) + drive.store_file(new type, "reports", TRUE) + + for(var/F in subtypesof(/datum/computer_file/program)) + var/datum/computer_file/program/type = F + if(TYPE_IS_ABSTRACT(type)) + continue + if(initial(type.available_on_network)) + drive.store_file(new type, OS_PROGRAMS_DIR, TRUE) + /obj/machinery/network/mainframe/ui_data(mob/user, ui_key) var/data = ..() var/datum/extension/network_device/mainframe/M = get_extension(src, /datum/extension/network_device) @@ -68,20 +87,3 @@ /obj/machinery/network/mainframe/software initial_roles = list(MF_ROLE_SOFTWARE) - -/obj/machinery/network/mainframe/software/Initialize() - . = ..() - var/obj/item/stock_parts/computer/hard_drive/drive = get_component_of_type(PART_HDD) - for(var/F in subtypesof(/datum/computer_file/report)) - var/datum/computer_file/report/type = F - if(TYPE_IS_ABSTRACT(type)) - continue - if(initial(type.available_on_network)) - drive.store_file(new type, "reports", TRUE) - - for(var/F in subtypesof(/datum/computer_file/program)) - var/datum/computer_file/program/type = F - if(TYPE_IS_ABSTRACT(type)) - continue - if(initial(type.available_on_network)) - drive.store_file(new type, OS_PROGRAMS_DIR, TRUE) \ No newline at end of file diff --git a/code/modules/modular_computers/networking/machinery/telecomms.dm b/code/modules/modular_computers/networking/machinery/telecomms.dm index f457c21a3bf..e8d793d5ab3 100644 --- a/code/modules/modular_computers/networking/machinery/telecomms.dm +++ b/code/modules/modular_computers/networking/machinery/telecomms.dm @@ -160,11 +160,8 @@ var/global/list/telecomms_hubs = list() encryption |= channel.secured var/formatted_msg = "\[[channel?.name || format_frequency(frequency)]\] " - var/send_name = istype(speaker) ? speaker.real_name : ("[speaker]" || "unknown") - var/overmap_send_name = istype(send_overmap_object) ? "[send_name] ([send_overmap_object.name])" : send_name - + var/send_name = istype(speaker) ? speaker.GetVoice() : ("[speaker]" || "unknown") var/list/listeners = list() // Dictionary of listener -> boolean (include overmap origin) - // Broadcast to all radio devices in our network. for(var/weakref/W as anything in network.connected_radios) var/obj/item/radio/R = W.resolve() @@ -180,25 +177,20 @@ var/global/list/telecomms_hubs = list() if(!LAZYACCESS(check_channels, channel)) continue - var/listener_overmap_object = istype(speaking_from) && global.overmap_sectors["[speaking_from.z]"] - for(var/mob/listener in hearers(R.canhear_range, speaking_from)) - // If we're sending from an overmap object AND our overmap object transmits its identity AND it's different than the listener's - // then append the overmap object name to it, so they know where we're from - var/send_overmap = send_overmap_object && send_overmap_object.ident_transmitter && send_overmap_object != listener_overmap_object - LAZYSET(listeners, listener, send_overmap) + // If we're sending from an overmap object AND our overmap object transmits its identity AND it's different than the listener's + // then append the overmap object name to it, so they know where we're from + var/listener_overmap_object = istype(speaking_from) && global.overmap_sectors[num2text(speaking_from.z)] + var/send_overmap = send_overmap_object && send_overmap_object.ident_transmitter && send_overmap_object != listener_overmap_object + for(var/mob/listener as anything in R.get_radio_listeners()) + listeners[listener] = send_overmap // Ghostship is magic: Ghosts can hear radio chatter from anywhere for(var/mob/observer/ghost/ghost_listener as anything in global.ghost_mob_list) if(ghost_listener.get_preference_value(/datum/client_preference/ghost_radio) == PREF_ALL_CHATTER) - LAZYSET(listeners, ghost_listener, TRUE) + listeners[ghost_listener] = TRUE for(var/mob/listener in listeners) - var/per_listener_send_name = listeners[listener] ? overmap_send_name : send_name - var/per_listener_loc_name - if(send_overmap_object && send_overmap_object.ident_transmitter && send_overmap_object != listeners[listener]) - // then append the overmap object name to it, so they know where we're from - per_listener_loc_name = send_overmap_object.name - listener.hear_radio(message, message_verb, speaking, formatted_msg, " ", "", speaker, message_compression, per_listener_send_name, per_listener_loc_name) + listener.hear_radio(message, message_verb, speaking, formatted_msg, " ", "", speaker, message_compression, vname = send_name, vsource = (listeners[listener] ? send_overmap_object.name : null)) if(!chain_transmit) return diff --git a/code/modules/modular_computers/networking/machinery/trade_controller.dm b/code/modules/modular_computers/networking/machinery/trade_controller.dm index b8dae3a196b..acee9f37960 100644 --- a/code/modules/modular_computers/networking/machinery/trade_controller.dm +++ b/code/modules/modular_computers/networking/machinery/trade_controller.dm @@ -1,7 +1,7 @@ /obj/machinery/network/trade_controller name = "trade control device" desc = "A device used for controlling trade beacons and adding import/export tax. It must remain in a gravity well near the trade beacon" - icon = 'icons/obj/machines/tcomms/hub.dmi' + icon = 'icons/obj/machines/trade_controller.dmi' icon_state = "hub" network_device_type = /datum/extension/network_device/trade_controller main_template = "trade_controller.tmpl" diff --git a/code/modules/modular_computers/networking/machinery/wall_relay.dm b/code/modules/modular_computers/networking/machinery/wall_relay.dm index 9911c3bc20a..dbf5102bf60 100644 --- a/code/modules/modular_computers/networking/machinery/wall_relay.dm +++ b/code/modules/modular_computers/networking/machinery/wall_relay.dm @@ -7,7 +7,7 @@ density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED base_type = /obj/machinery/network/relay/wall_mounted - directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':-21}, 'WEST':{'x':21}}" + directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":-21}, "WEST":{"x":21}}' /obj/machinery/network/relay/wall_mounted/Initialize() . = ..() diff --git a/code/modules/modular_computers/networking/machinery/wall_router.dm b/code/modules/modular_computers/networking/machinery/wall_router.dm index 27c46d4d771..5c408af98d9 100644 --- a/code/modules/modular_computers/networking/machinery/wall_router.dm +++ b/code/modules/modular_computers/networking/machinery/wall_router.dm @@ -7,7 +7,7 @@ density = FALSE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED base_type = /obj/machinery/network/router/wall_mounted - directional_offset = "{'NORTH':{'y':-21}, 'SOUTH':{'y':21}, 'EAST':{'x':-21}, 'WEST':{'x':21}}" + directional_offset = @'{"NORTH":{"y":-21}, "SOUTH":{"y":21}, "EAST":{"x":-21}, "WEST":{"x":21}}' /obj/machinery/network/router/wall_mounted/Initialize() . = ..() diff --git a/code/modules/modular_computers/os/_os.dm b/code/modules/modular_computers/os/_os.dm index 50b01f92c8e..989e40ca222 100644 --- a/code/modules/modular_computers/os/_os.dm +++ b/code/modules/modular_computers/os/_os.dm @@ -159,10 +159,11 @@ if(hard_drive) if(prob(10)) hard_drive.visible_message("[src] emits some ominous clicks.") - hard_drive.take_damage(0.5 * hard_drive.health) + hard_drive.take_damage(0.5 * hard_drive.current_health) else if(prob(5)) hard_drive.visible_message("[src] emits some ominous clicks.") - hard_drive.take_damage(hard_drive.health) + hard_drive.take_damage(hard_drive.current_health) + update_host_icon() /datum/extension/interactive/os/proc/system_boot() diff --git a/code/modules/modular_computers/os/ui.dm b/code/modules/modular_computers/os/ui.dm index 25d41809005..59ec11f651e 100644 --- a/code/modules/modular_computers/os/ui.dm +++ b/code/modules/modular_computers/os/ui.dm @@ -132,7 +132,8 @@ var/ui_update_needed = 0 var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY) if(battery_module) - var/batery_percent = battery_module.battery.percent() + var/obj/item/cell/battery = battery_module.get_cell() + var/batery_percent = battery?.percent() if(last_battery_percent != batery_percent) //Let's update UI on percent change ui_update_needed = 1 last_battery_percent = batery_percent @@ -173,9 +174,10 @@ /datum/extension/interactive/os/proc/get_header_data(file_browser = FALSE) var/list/data = list() var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY) - if(battery_module) - switch(battery_module.battery.percent()) - if(80 to 200) // 100 should be maximal but just in case.. + var/obj/item/cell/battery = battery_module?.get_cell() + if(battery) + switch(battery.percent()) + if(80 to 200) // 100 should be maximal but just in case... data["PC_batteryicon"] = "batt_100.gif" if(60 to 80) data["PC_batteryicon"] = "batt_80.gif" @@ -187,7 +189,7 @@ data["PC_batteryicon"] = "batt_20.gif" else data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "[round(battery_module.battery.percent())] %" + data["PC_batterypercent"] = "[round(battery.percent())] %" data["PC_showbatteryicon"] = 1 else data["PC_batteryicon"] = "batt_5.gif" diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm index 06e24f6513d..02c3988c4a6 100644 --- a/code/modules/multiz/hoist.dm +++ b/code/modules/multiz/hoist.dm @@ -46,7 +46,7 @@ source_hoist.release_hoistee() return TRUE -/obj/effect/hoist_hook/receive_mouse_drop(atom/dropping, mob/user) +/obj/effect/hoist_hook/receive_mouse_drop(atom/dropping, mob/user, params) // skip the parent buckle logic, handle climbing directly var/mob/living/H = user if(istype(H) && !H.anchored && can_climb(H) && dropping == user) @@ -83,9 +83,9 @@ if (get_turf(AM) != get_turf(source_hook)) AM.forceMove(get_turf(source_hook)) - events_repository.register(/decl/observ/destroyed, AM, src, .proc/release_hoistee) + events_repository.register(/decl/observ/destroyed, AM, src, PROC_REF(release_hoistee)) -/obj/effect/hoist_hook/handle_mouse_drop(atom/over, mob/user) +/obj/effect/hoist_hook/handle_mouse_drop(atom/over, mob/user, params) if(source_hoist.hoistee && isturf(over) && over.Adjacent(source_hoist.hoistee)) if(!user.check_dexterity(DEXTERITY_HOLD_ITEM)) return TRUE diff --git a/code/modules/multiz/ladder.dm b/code/modules/multiz/ladder.dm index 8fa04a4f2aa..91d5cd777db 100644 --- a/code/modules/multiz/ladder.dm +++ b/code/modules/multiz/ladder.dm @@ -107,7 +107,7 @@ var/turf/T = get_turf(src) if(T) for(var/atom/movable/M in T.contents) - addtimer(CALLBACK(M, /atom/movable/proc/fall, T), 0) + addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/movable, fall), T), 0) return ..() /obj/structure/ladder/attackby(obj/item/I, mob/user) @@ -116,7 +116,7 @@ climb(user, I) /obj/structure/ladder/hitby(obj/item/I) - ..() + . = ..() if(!target_down) return if(!has_gravity()) diff --git a/code/modules/multiz/level_data.dm b/code/modules/multiz/level_data.dm index f82392275ec..291ef2fd90f 100644 --- a/code/modules/multiz/level_data.dm +++ b/code/modules/multiz/level_data.dm @@ -108,6 +108,10 @@ var/decl/strata/strata ///The base material randomly chosen from the strata for this level. var/decl/material/strata_base_material + ///Strata types to forbid from generating on this level. + var/list/forbid_strata = list( + /decl/strata/permafrost + ) ///The default base turf type for the whole level. It will be the base turf type for the z level, unless loaded by map. /// filler_turf overrides what turfs the level will be created with. var/base_turf = /turf/space @@ -177,7 +181,7 @@ ///Handle copying data from a previous level_data we're replacing. /datum/level_data/proc/copy_from(var/datum/level_data/old_level) - //#TODO: It's not really clear what should get moved over by default. But putting some time to reflect on this would be good.. + //#TODO: It's not really clear what should get moved over by default. But putting some time to reflect on this would be good... return ///Initialize the turfs on the z-level. @@ -242,7 +246,7 @@ /datum/level_data/proc/setup_ambient() if(!use_global_exterior_ambience) return - ambient_light_level = config.exterior_ambient_light + ambient_light_level = get_config_value(/decl/config/num/exterior_ambient_light) ambient_light_color = SSskybox.background_color ///Setup/generate atmosphere for exterior turfs on the level. @@ -270,7 +274,7 @@ for(var/stype in all_strata) var/decl/strata/strata = all_strata[stype] - if(strata.default_strata_candidate && strata.is_valid_level_stratum(src)) + if(!is_type_in_list(strata, forbid_strata) && strata.is_valid_level_stratum(src)) possible_strata += stype strata = DEFAULTPICK(possible_strata, GET_DECL(/decl/strata/sedimentary)) @@ -288,22 +292,43 @@ // // Level Load/Gen // +/// Helper proc for subtemplate generation. +/datum/level_data/proc/get_subtemplate_budget() + return 0 +/// Helper proc for subtemplate generation. +/datum/level_data/proc/get_subtemplate_category() + return +/// Helper proc for subtemplate generation. +/datum/level_data/proc/get_subtemplate_blacklist() + return +/// Helper proc for subtemplate generation. +/datum/level_data/proc/get_subtemplate_whitelist() + return ///Called when setting up the level. Apply generators and anything that modifies the turfs of the level. /datum/level_data/proc/generate_level() - if(!global.config.roundstart_level_generation) + + if(!get_config_value(/decl/config/toggle/roundstart_level_generation)) return + var/origx = level_inner_min_x var/origy = level_inner_min_y var/endx = level_inner_min_x + level_inner_width var/endy = level_inner_min_y + level_inner_height + + // Run level generators. for(var/gen_type in level_generators) new gen_type(origx, origy, level_z, endx, endy, FALSE, TRUE, get_base_area_instance()) + // Place points of interest. + var/budget = get_subtemplate_budget() + if(budget) + spawn_subtemplates(budget, get_subtemplate_category(), get_subtemplate_blacklist(), get_subtemplate_whitelist()) + ///Apply the parent entity's map generators. (Planets generally) ///This proc is to give a chance to level_data subtypes to individually chose to ignore the parent generators. /datum/level_data/proc/apply_map_generators(var/list/map_gen) - if(!global.config.roundstart_level_generation) + if(!get_config_value(/decl/config/toggle/roundstart_level_generation)) return var/origx = level_inner_min_x var/origy = level_inner_min_y @@ -405,8 +430,6 @@ // Accessors // /datum/level_data/proc/get_exterior_atmosphere() - if(!istype(exterior_atmosphere)) //#FIXME: Temporary measure until the exoplanet gen stuff is moved out of overmap markers - setup_exterior_atmosphere() if(exterior_atmosphere) var/datum/gas_mixture/gas = new gas.copy_from(exterior_atmosphere) @@ -568,8 +591,6 @@ INITIALIZE_IMMEDIATE(/obj/abstract/level_data_spawner) base_turf = /turf/unsimulated/dark_filler transition_turf_type = null -//#TODO: This seems like it could be generalized in a much better way? -// Used specifically by /turf/simulated/floor/asteroid, and some away sites to generate mining turfs /datum/level_data/mining_level level_flags = (ZLEVEL_PLAYER|ZLEVEL_SEALED) var/list/mining_turfs @@ -579,7 +600,7 @@ INITIALIZE_IMMEDIATE(/obj/abstract/level_data_spawner) return ..() /datum/level_data/mining_level/asteroid - base_turf = /turf/simulated/floor/asteroid + base_turf = /turf/exterior/barren level_generators = list( /datum/random_map/automata/cave_system, /datum/random_map/noise/ore @@ -591,13 +612,95 @@ INITIALIZE_IMMEDIATE(/obj/abstract/level_data_spawner) /datum/level_data/mining_level/proc/refresh_mining_turfs() set waitfor = FALSE - for(var/turf/simulated/floor/asteroid/mining_turf as anything in mining_turfs) - mining_turf.updateMineralOverlays() + for(var/turf/exterior/wall/mining_turf as anything in mining_turfs) + mining_turf.update_material(FALSE) CHECK_TICK mining_turfs = null +/datum/level_data/proc/get_subtemplate_areas(template_category, blacklist, whitelist) + return list(base_area) +///Try to allocate the given amount of POIs onto our level. Returns the template types that were spawned +/datum/level_data/proc/spawn_subtemplates(budget = 0, template_category, blacklist, whitelist) + + if(budget <= 0) + return -/datum/level_data/transit_level - name = "Transit Level" - level_flags = ZLEVEL_SEALED \ No newline at end of file + var/list/possible_subtemplates = list() + var/list/all_subtemplates = SSmapping.get_templates_by_category(template_category) + for(var/poi_name in all_subtemplates) + var/datum/map_template/poi = all_subtemplates[poi_name] + var/poi_tags = poi.get_template_tags() + if(whitelist && !(whitelist & poi_tags)) + continue + if(blacklist & poi_tags) + continue + possible_subtemplates += poi + + if(!length(possible_subtemplates)) + return //If we don't have any templates, don't bother + + if(!length(possible_subtemplates)) + log_world("Map subtemplate loader was given no templates to pick from.") + return + + var/list/areas_whitelist = get_subtemplate_areas(template_category, blacklist, whitelist) + var/list/candidate_points_of_interest = possible_subtemplates.Copy() + //Each iteration needs to either place a subtemplate or strictly decrease either the budget or templates list length (or break). + while(length(candidate_points_of_interest) && (budget > 0)) + var/datum/map_template/R = pick(candidate_points_of_interest) + if((R.get_template_cost() <= budget) && !LAZYISIN(SSmapping.banned_template_names, R.name) && try_place_subtemplate(R, areas_whitelist)) + LAZYADD(., R) + budget -= R.get_template_cost() + //Mark spawned no-duplicate POI globally + if(!(R.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) + LAZYDISTINCTADD(SSmapping.banned_template_names, R.name) + candidate_points_of_interest -= R + + if(budget > 0) + log_world("Map subtemplate loader had no templates to pick from with [budget] left to spend.") + +///Attempts several times to find turfs where a subtemplate can be placed. +/datum/level_data/proc/try_place_subtemplate(var/datum/map_template/template, var/list/area_whitelist) + //#FIXME: Isn't trying to fit in a subtemplate by rolling randomly a bit inneficient? + // Try to place it + var/template_full_width = (2 * TEMPLATE_TAG_MAP_EDGE_PAD) + template.width + var/template_full_height = (2 * TEMPLATE_TAG_MAP_EDGE_PAD) + template.height + if((template_full_width > level_inner_width) || (template_full_height > level_inner_height)) // Too big and will never fit. + return //Return if it won't even fit on the entire level + + var/template_half_width = TEMPLATE_TAG_MAP_EDGE_PAD + round(template.width/2) //Half the template size plus the map edge spacing, for testing from the centerpoint + var/template_half_height = TEMPLATE_TAG_MAP_EDGE_PAD + round(template.height/2) + //Try to fit it in somehwere a few times, then give up if we can't + var/sanity = 20 + while(sanity > 0) + sanity-- + //Pick coordinates inside the level's border within which the template will fit. Including the extra template spacing from the level's borders. + var/cturf_x = rand(level_inner_min_x + template_half_width, level_inner_max_x - template_half_width) + var/cturf_y = rand(level_inner_min_y + template_half_height, level_inner_max_y - template_half_height) + var/turf/T = locate(cturf_x, cturf_y, level_z) + var/valid = TRUE + + //#TODO: There's definitely a way to cache what turfs use an area, to avoid doing this for every single templates! + // Could also probably cache TURF_FLAG_NO_POINTS_OF_INTEREST turfs globally. + var/list/affected_turfs = template.get_affected_turfs(T, TRUE) + for(var/turf/test_turf in affected_turfs) + var/area/A = get_area(test_turf) + if((length(area_whitelist) && !is_type_in_list(A, area_whitelist)) || (test_turf.turf_flags & TURF_FLAG_NO_POINTS_OF_INTEREST)) + valid = FALSE + break //Break out of the turf check loop, and grab a new set of coordinates + if(!valid) + continue + log_world("Spawned template \"[template.name]\", center: ([T.x], [T.y], [T.z]), min: ([T.x - template_half_width], [T.y - template_half_height]), max: ([T.x + template_half_width], [T.y + template_half_height])") + load_subtemplate(T, template) + return template + +///Actually handles loading a template template at the given turf. +/datum/level_data/proc/load_subtemplate(turf/central_turf, datum/map_template/template) + if(!template) + return FALSE + for(var/turf/T in template.get_affected_turfs(central_turf, TRUE)) + for(var/mob/living/simple_animal/monster in T) + qdel(monster) + template.load(central_turf, centered = TRUE) + return TRUE \ No newline at end of file diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 146964fe469..c8330c96830 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -22,7 +22,7 @@ if(loc != old_loc) return - var/turf/simulated/open/O = GetAbove(src) + var/turf/open/O = GetAbove(src) var/atom/climb_target if(istype(O)) for(var/turf/T in RANGE_TURFS(O, 1)) @@ -80,16 +80,16 @@ return 1 if(Check_Shoegrip()) //scaling hull with magboots - for(var/turf/simulated/T in RANGE_TURFS(src, 1)) - if(T.density) + for(var/turf/T in RANGE_TURFS(src, 1)) + if(T.density && T.simulated) return 1 /mob/living/silicon/robot/can_ztravel() if(Process_Spacemove()) //Checks for active jetpack return 1 - for(var/turf/simulated/T in RANGE_TURFS(src, 1)) //Robots get "magboots" - if(T.density) + for(var/turf/T in RANGE_TURFS(src, 1)) //Robots get "magboots" + if(T.density && T.simulated) return 1 //FALLING STUFF @@ -121,7 +121,7 @@ // Entered() which is part of Move(), by spawn()ing we let that complete. But we want to preserve if we were in client movement // or normal movement so other move behavior can continue. /atom/movable/proc/begin_falling(var/lastloc, var/below) - addtimer(CALLBACK(src, /atom/movable/proc/fall_callback, below), 0) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, fall_callback), below), 0) /atom/movable/proc/fall_callback(var/turf/below) if(!QDELETED(src)) @@ -171,7 +171,7 @@ return TRUE /obj/item/pipe/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - var/turf/simulated/open/below = loc + var/turf/open/below = loc below = below.below . = ..() @@ -187,7 +187,11 @@ return species.can_fall(src) /atom/movable/proc/protected_from_fall_damage(var/turf/landing) - return !!(locate(/obj/structure/stairs) in landing) + if(!!(locate(/obj/structure/stairs) in landing)) + return TRUE + var/turf/exterior/wall/ramp = landing + if(istype(ramp) && ramp.ramp_slope_direction) // walking down a ramp + return TRUE /mob/protected_from_fall_damage(var/turf/landing) . = ..() @@ -283,7 +287,6 @@ var/obj/item/organ/external/victim = pick(victims) victim.dislocate() to_chat(src, "You feel a sickening pop as your [victim.joint] is wrenched out of the socket.") - updatehealth() /mob/living/carbon/human/proc/climb_up(atom/A) if(!isturf(loc) || !bound_overlay || bound_overlay.destruction_timer || is_physically_disabled()) // This destruction_timer check ideally wouldn't be required, but I'm not awake enough to refactor this to not need it. @@ -374,7 +377,7 @@ . = ..() owner = user follow() - events_repository.register(/decl/observ/moved, owner, src, /atom/movable/z_observer/proc/follow) + events_repository.register(/decl/observ/moved, owner, src, TYPE_PROC_REF(/atom/movable/z_observer, follow)) /atom/movable/z_observer/proc/follow() @@ -398,7 +401,7 @@ qdel(src) /atom/movable/z_observer/Destroy() - events_repository.unregister(/decl/observ/moved, owner, src, /atom/movable/z_observer/proc/follow) + events_repository.unregister(/decl/observ/moved, owner, src, TYPE_PROC_REF(/atom/movable/z_observer, follow)) owner = null . = ..() diff --git a/code/modules/multiz/stairs.dm b/code/modules/multiz/stairs.dm index 726d9a0bc7e..6bff344b06d 100644 --- a/code/modules/multiz/stairs.dm +++ b/code/modules/multiz/stairs.dm @@ -14,7 +14,7 @@ warning("Stair created without level above: ([loc.x], [loc.y], [loc.z])") return INITIALIZE_HINT_QDEL if(!above.is_open()) - above.ChangeTurf(/turf/simulated/open) + above.ChangeTurf(/turf/space) // This will be resolved to the appropriate open space type by ChangeTurf(). . = ..() /obj/structure/stairs/CheckExit(atom/movable/mover, turf/target) @@ -43,6 +43,10 @@ /obj/structure/stairs/CanPass(obj/mover, turf/source, height, airflow) return airflow || !density +/obj/structure/stairs/catwalk + name = "catwalk stairs" + icon_state = "catwalk" + // type paths to make mapping easier. /obj/structure/stairs/long @@ -65,3 +69,24 @@ dir = WEST bound_width = 64 bound_height = 32 + +/obj/structure/stairs/long/catwalk + name = "catwalk stairs" + icon_state = "catwalk" + +/obj/structure/stairs/long/catwalk/north + dir = NORTH + bound_y = -32 + pixel_y = -32 + +/obj/structure/stairs/long/catwalk/east + dir = EAST + bound_width = 64 + bound_height = 32 + bound_x = -32 + pixel_x = -32 + +/obj/structure/stairs/long/catwalk/west + dir = WEST + bound_width = 64 + bound_height = 32 \ No newline at end of file diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index a8da2c73496..651aa1df126 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -1,41 +1,3 @@ -// Shared attackby behaviors that /turf/exterior/open also uses. -/proc/shared_open_turf_attackhand(var/turf/target, var/mob/user) - for(var/atom/movable/M in target.below) - if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) - return M.attack_hand_with_interaction_checks(user) - -/proc/shared_open_turf_attackby(var/turf/target, obj/item/thing, mob/user) - - if(istype(thing, /obj/item/stack/material/rods)) - var/ladder = (locate(/obj/structure/ladder) in target) - if(ladder) - to_chat(user, SPAN_WARNING("\The [ladder] is in the way.")) - return TRUE - var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, target) - if(lattice) - return lattice.attackby(thing, user) - var/obj/item/stack/material/rods/rods = thing - if (rods.use(1)) - to_chat(user, SPAN_NOTICE("You lay down the support lattice.")) - playsound(target, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/lattice(locate(target.x, target.y, target.z), rods.material.type) - return TRUE - - if (istype(thing, /obj/item/stack/tile)) - var/obj/item/stack/tile/tile = thing - tile.try_build_turf(user, target) - return TRUE - - //To lay cable. - if(IS_COIL(thing) && target.try_build_cable(thing, user)) - return TRUE - - for(var/atom/movable/M in target.below) - if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) - return M.attackby(thing, user) - - return FALSE - /// `direction` is the direction the atom is trying to leave by. /turf/proc/CanZPass(atom/A, direction, check_neighbor_canzpass = TRUE) @@ -59,9 +21,9 @@ return Enter(A, A) //////////////////////////////// -// Open SIMULATED +// Open space //////////////////////////////// -/turf/simulated/open +/turf/open name = "open space" icon = 'icons/turf/space.dmi' icon_state = "" @@ -69,30 +31,27 @@ pathweight = 100000 //Seriously, don't try and path over this one numbnuts z_flags = ZM_MIMIC_DEFAULTS | ZM_MIMIC_OVERWRITE | ZM_MIMIC_NO_AO | ZM_ALLOW_ATMOS turf_flags = TURF_FLAG_BACKGROUND + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2STANDARD, + /decl/material/gas/nitrogen = MOLES_N2STANDARD + ) + zone_membership_candidate = TRUE -/turf/simulated/open/flooded +/turf/open/flooded name = "open water" - flooded = TRUE - -/turf/simulated/open/update_dirt() - return 0 + flooded = /decl/material/liquid/water -/turf/simulated/open/Entered(var/atom/movable/mover, var/atom/oldloc) +/turf/open/Entered(var/atom/movable/mover, var/atom/oldloc) ..() mover.fall(oldloc) // Called when thrown object lands on this turf. -/turf/simulated/open/hitby(var/atom/movable/AM) - ..() +/turf/open/hitby(var/atom/movable/AM) + . = ..() if(!QDELETED(AM)) AM.fall() -// override to make sure nothing is hidden -/turf/simulated/open/levelupdate() - for(var/obj/O in src) - O.hide(0) - -/turf/simulated/open/examine(mob/user, distance, infix, suffix) +/turf/open/examine(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) var/depth = 1 @@ -100,64 +59,56 @@ depth += 1 to_chat(user, "It is about [depth] level\s deep.") -/turf/simulated/open/is_open() - return TRUE - -/turf/simulated/open/attackby(obj/item/C, mob/user) - return shared_open_turf_attackby(src, C, user) - -/turf/simulated/open/attack_hand(mob/user) - SHOULD_CALL_PARENT(FALSE) - return shared_open_turf_attackhand(src, user) - -//Most things use is_plating to test if there is a cover tile on top (like regular floors) -/turf/simulated/open/is_plating() +/turf/open/is_open() return TRUE -/turf/simulated/open/cannot_build_cable() - return 0 +/turf/open/attackby(obj/item/C, mob/user) + if(istype(C, /obj/item/stack/material/rods)) + var/ladder = (locate(/obj/structure/ladder) in src) + if(ladder) + to_chat(user, SPAN_WARNING("\The [ladder] is in the way.")) + return TRUE + var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src) + if(lattice) + return lattice.attackby(C, user) + var/obj/item/stack/material/rods/rods = C + if (rods.use(1)) + to_chat(user, SPAN_NOTICE("You lay down the support lattice.")) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + new /obj/structure/lattice(src, rods.material.type) + return TRUE -//////////////////////////////// -// Open EXTERIOR -//////////////////////////////// -/turf/exterior/open - name = "open space" - icon = 'icons/turf/space.dmi' - icon_state = "" - density = FALSE - pathweight = 100000 - z_flags = ZM_MIMIC_DEFAULTS | ZM_MIMIC_OVERWRITE | ZM_MIMIC_NO_AO | ZM_ALLOW_ATMOS + if (istype(C, /obj/item/stack/tile)) + var/obj/item/stack/tile/tile = C + tile.try_build_turf(user, src) + return TRUE -/turf/exterior/open/flooded - name = "open water" - flooded = TRUE + //To lay cable. + if(IS_COIL(C) && try_build_cable(C, user)) + return TRUE -/turf/exterior/open/Entered(var/atom/movable/mover, var/atom/oldloc) - ..() - mover.fall(oldloc) + for(var/atom/movable/M in below) + if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) + return M.attackby(C, user) -/turf/exterior/open/hitby(var/atom/movable/AM) - ..() - if(!QDELETED(AM)) - AM.fall() + return FALSE -/turf/exterior/open/examine(mob/user, distance, infix, suffix) - . = ..() - if(distance <= 2) - var/depth = 1 - for(var/turf/T = GetBelow(src); (istype(T) && T.is_open()); T = GetBelow(T)) - depth += 1 - to_chat(user, "It is about [depth] level\s deep.") +/turf/open/attack_hand(mob/user) + SHOULD_CALL_PARENT(FALSE) + for(var/atom/movable/M in below) + if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) + return M.attack_hand_with_interaction_checks(user) + return FALSE -/turf/exterior/open/is_open() +//Most things use is_plating to test if there is a cover tile on top (like regular floors) +/turf/open/is_plating() return TRUE -/turf/exterior/open/attackby(obj/item/C, mob/user) - return shared_open_turf_attackby(src, C, user) +/turf/open/cannot_build_cable() + return 0 -/turf/exterior/open/attack_hand(mob/user) +/turf/open/drill_act() SHOULD_CALL_PARENT(FALSE) - return shared_open_turf_attackhand(src, user) - -/turf/exterior/open/cannot_build_cable() - return 0 + var/turf/T = GetBelow(src) + if(istype(T)) + T.drill_act() diff --git a/code/modules/multiz/turf_mimic_edge.dm b/code/modules/multiz/turf_mimic_edge.dm index fd18b69e385..d36210fcb48 100644 --- a/code/modules/multiz/turf_mimic_edge.dm +++ b/code/modules/multiz/turf_mimic_edge.dm @@ -88,14 +88,14 @@ mimic_z = _z? _z : z mimic_x = _x mimic_y = _y - refresh_vis_contents() + update_vis_contents() //Prevent ambient completely, we're not a real turf /turf/simulated/mimic_edge/set_ambient_light(color, multiplier) return /turf/simulated/mimic_edge/update_ambient_light(no_corner_update) return -/turf/simulated/mimic_edge/update_ambient_light_from_z() +/turf/simulated/mimic_edge/update_ambient_light_from_z_or_area() return /turf/simulated/mimic_edge/lighting_build_overlay(now) return @@ -164,14 +164,14 @@ mimic_z = _z? _z : z mimic_x = _x mimic_y = _y - refresh_vis_contents() + update_vis_contents() //Prevent ambient completely, we're not a real turf /turf/unsimulated/mimic_edge/set_ambient_light(color, multiplier) return /turf/unsimulated/mimic_edge/update_ambient_light(no_corner_update) return -/turf/unsimulated/mimic_edge/update_ambient_light_from_z() +/turf/unsimulated/mimic_edge/update_ambient_light_from_z_or_area() return /turf/unsimulated/mimic_edge/lighting_build_overlay(now) return @@ -240,14 +240,14 @@ mimic_z = _z? _z : z mimic_x = _x mimic_y = _y - refresh_vis_contents() + update_vis_contents() //Prevent ambient completely, we're not a real turf /turf/exterior/mimic_edge/set_ambient_light(color, multiplier) return /turf/exterior/mimic_edge/update_ambient_light(no_corner_update) return -/turf/exterior/mimic_edge/update_ambient_light_from_z() +/turf/exterior/mimic_edge/update_ambient_light_from_z_or_area() return /turf/exterior/mimic_edge/lighting_build_overlay(now) return @@ -357,6 +357,9 @@ return shared_transition_edge_bumped(src, AM, mimic_z) +/turf/unsimulated/mimic_edge/transition/flooded + flooded = /decl/material/liquid/water + /turf/unsimulated/mimic_edge/transition/setup_mimic() var/list/coord = shared_transition_edge_get_coordinates_turf_to_mimic(src, shared_transition_edge_get_valid_level_data(src)) set_mimic_turf(coord[1], coord[2], coord[3]) diff --git a/code/modules/multiz/zmimic/mimic_movable.dm b/code/modules/multiz/zmimic/mimic_movable.dm index 957c143791b..23d2964cf06 100644 --- a/code/modules/multiz/zmimic/mimic_movable.dm +++ b/code/modules/multiz/zmimic/mimic_movable.dm @@ -15,13 +15,6 @@ else // Not a turf, so we need to destroy immediately instead of waiting for the destruction timer to proc. qdel(bound_overlay) -/atom/movable/Move() - . = ..() - if (. && bound_overlay) - bound_overlay.forceMove(get_step(src, UP)) - if (bound_overlay.dir != dir) - bound_overlay.set_dir(dir) - /atom/movable/set_dir(ndir) . = ..() if (. && bound_overlay) @@ -54,7 +47,7 @@ simulated = FALSE anchored = TRUE mouse_opacity = FALSE - abstract_type = /atom/movable/openspace // unsure if this is valid, check with Lohi + abstract_type = /atom/movable/openspace // unsure if this is valid, check with Lohi -- Yes, it's valid. /atom/movable/openspace/can_fall() return FALSE @@ -84,35 +77,38 @@ var/turf/myturf = loc if (istype(myturf)) myturf.shadower = null + return ..() -/atom/movable/openspace/multiplier/proc/copy_lighting(atom/movable/lighting_overlay/LO) - appearance = LO - layer = MIMICED_LIGHTING_LAYER - plane = OPENTURF_MAX_PLANE - blend_mode = BLEND_MULTIPLY +/atom/movable/openspace/multiplier/proc/copy_lighting(atom/movable/lighting_overlay/LO, use_shadower_mult = TRUE) + var/mutable_appearance/MA = new /mutable_appearance(LO) + MA.layer = MIMICED_LIGHTING_LAYER + MA.plane = OPENTURF_MAX_PLANE + MA.blend_mode = BLEND_MULTIPLY + + if (use_shadower_mult) + if (MA.icon_state == LIGHTING_BASE_ICON_STATE) + // We're using a color matrix, so just darken the colors across the board. + var/list/c_list = MA.color + c_list[CL_MATRIX_RR] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_RG] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_RB] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_GR] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_GG] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_GB] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_BR] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_BG] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_BB] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_AR] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_AG] *= SHADOWER_DARKENING_FACTOR + c_list[CL_MATRIX_AB] *= SHADOWER_DARKENING_FACTOR + MA.color = c_list + else + // Not a color matrix, so we can just use the color var ourselves. + MA.color = SHADOWER_DARKENING_COLOR + appearance = MA set_invisibility(INVISIBILITY_NONE) - if (icon_state == LIGHTING_BASE_ICON_STATE) - // We're using a color matrix, so just darken the colors across the board. - var/list/c_list = color - c_list[CL_MATRIX_RR] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_RG] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_RB] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GR] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GG] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GB] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BR] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BG] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BB] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AR] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AG] *= SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AB] *= SHADOWER_DARKENING_FACTOR - color = c_list - else - // Not a color matrix, so we can just use the color var ourselves. - color = SHADOWER_DARKENING_COLOR - if (our_overlays || priority_overlays) compile_overlays() else if (bound_overlay) @@ -163,18 +159,32 @@ . = associated_atom.examine(arglist(args)) // just pass all the args to the copied atom /atom/movable/openspace/mimic/forceMove(turf/dest) + var/atom/old_loc = loc . = ..() if (TURF_IS_MIMICKING(dest)) if (destruction_timer) deltimer(destruction_timer) destruction_timer = null + if (old_loc.z != loc.z) + reset_internal_layering() else if (!destruction_timer) - destruction_timer = addtimer(CALLBACK(src, /datum/.proc/qdel_self), 10 SECONDS, TIMER_STOPPABLE) + destruction_timer = ZM_DESTRUCTION_TIMER(src) // Called when the turf we're on is deleted/changed. /atom/movable/openspace/mimic/proc/owning_turf_changed() if (!destruction_timer) - destruction_timer = addtimer(CALLBACK(src, /datum/.proc/qdel_self), 10 SECONDS, TIMER_STOPPABLE) + destruction_timer = ZM_DESTRUCTION_TIMER(src) + +/atom/movable/openspace/mimic/proc/reset_internal_layering() + if (bound_overlay?.override_depth) + depth = bound_overlay.override_depth + else if (isturf(associated_atom.loc)) + depth = min(SSzcopy.zlev_maximums[associated_atom.z] - associated_atom.z, OPENTURF_MAX_DEPTH) + override_depth = depth + + plane = OPENTURF_MAX_PLANE - depth + + bound_overlay?.reset_internal_layering() // -- TURF PROXY -- diff --git a/code/modules/multiz/zmimic/mimic_turf.dm b/code/modules/multiz/zmimic/mimic_turf.dm index 07d58a0e959..d47230e98e1 100644 --- a/code/modules/multiz/zmimic/mimic_turf.dm +++ b/code/modules/multiz/zmimic/mimic_turf.dm @@ -15,6 +15,8 @@ /// If this Z-turf leads to space, uninterrupted. var/tmp/z_eventually_space = FALSE var/z_flags = 0 + /// Use this appearance for our appearance instead of `appearance`. If ZM_OVERRIDE is set, *only* this will be visible, no movables will be copied. + var/z_appearance // debug var/tmp/z_depth diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 7b19155b7ba..c414f522763 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -41,39 +41,39 @@ return owner.change_skin_tone(new_s_tone) if(href_list["skin_color"] && can_change_skin_color()) - var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", owner.skin_colour) as color|null - if(new_skin && can_still_topic(state) && owner.change_skin_color(new_skin)) + var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", owner.get_skin_colour()) as color|null + if(new_skin && can_still_topic(state) && owner.set_skin_colour(new_skin)) update_dna() return TRUE if(href_list["hair"]) var/decl/sprite_accessory/hair = locate(href_list["hair"]) - if(can_change(APPEARANCE_HAIR) && istype(hair) && (hair.type in owner.get_valid_hairstyle_types()) && owner.change_hair(hair.type)) + if(can_change(APPEARANCE_HAIR) && istype(hair) && (hair.type in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_HAIR)) && SET_HAIR_STYLE(owner, hair.type, FALSE)) update_dna() return TRUE if(href_list["hair_color"] && can_change(APPEARANCE_HAIR_COLOR)) - var/new_hair = input("Please select hair color.", "Hair Color", owner.hair_colour) as color|null - if(new_hair && can_still_topic(state) && owner.change_hair_color(new_hair)) + var/new_hair = input("Please select hair color.", "Hair Color", GET_HAIR_COLOUR(owner)) as color|null + if(new_hair && can_still_topic(state) && SET_HAIR_COLOUR(owner, new_hair, FALSE)) update_dna() return TRUE if(href_list["facial_hair"]) var/decl/sprite_accessory/facial_hair = locate(href_list["facial_hair"]) - if(can_change(APPEARANCE_FACIAL_HAIR) && istype(facial_hair) && (facial_hair.type in owner.get_valid_facial_hairstyle_types()) && owner.change_facial_hair(facial_hair.type)) + if(can_change(APPEARANCE_FACIAL_HAIR) && istype(facial_hair) && (facial_hair.type in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_FACIAL_HAIR)) && SET_FACIAL_HAIR_STYLE(owner, facial_hair.type, FALSE)) update_dna() return TRUE if(href_list["facial_hair_color"] && can_change(APPEARANCE_FACIAL_HAIR_COLOR)) - var/new_facial = input("Please select facial hair color.", "Facial Hair Color", owner.facial_hair_colour) as color|null - if(new_facial && can_still_topic(state) && owner.change_facial_hair_color(new_facial)) + var/new_facial = input("Please select facial hair color.", "Facial Hair Color", GET_FACIAL_HAIR_COLOUR(owner)) as color|null + if(new_facial && can_still_topic(state) && SET_FACIAL_HAIR_COLOUR(owner, new_facial, FALSE)) update_dna() return TRUE if(href_list["eye_color"]) if(can_change(APPEARANCE_EYE_COLOR)) - var/new_eyes = input("Please select eye color.", "Eye Color", owner.eye_colour) as color|null - if(new_eyes && can_still_topic(state) && owner.change_eye_color(new_eyes)) + var/new_eyes = input("Please select eye color.", "Eye Color", owner.get_eye_colour()) as color|null + if(new_eyes && can_still_topic(state) && owner.set_eye_colour(new_eyes)) update_dna() return TRUE @@ -96,8 +96,8 @@ data["change_gender"] = can_change(APPEARANCE_GENDER) if(data["change_gender"]) var/genders[0] - for(var/decl/pronouns/G as anything in owner.species.available_pronouns) - genders[++genders.len] = list("gender_name" = G.pronoun_string, "gender_key" = G.name) + for(var/decl/pronouns/pronouns as anything in owner.species.available_pronouns) + genders[++genders.len] = list("gender_name" = pronouns.pronoun_string, "gender_key" = pronouns.name) data["genders"] = genders data["bodytype"] = capitalize(owner.get_bodytype().name) @@ -115,21 +115,23 @@ if(data["change_hair"]) var/hair_styles[0] - for(var/hair_style in owner.get_valid_hairstyle_types()) + for(var/hair_style in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_HAIR)) var/decl/sprite_accessory/hair_decl = GET_DECL(hair_style) hair_styles[++hair_styles.len] = list("hairstyle" = hair_decl.name, "ref" = "\ref[hair_decl]") data["hair_styles"] = hair_styles - var/decl/sprite_accessory/hair = GET_DECL(owner.h_style) + var/hairstyle = GET_HAIR_STYLE(owner) + var/decl/sprite_accessory/hair = GET_DECL(hairstyle) data["hair_style"] = hair.name data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR) if(data["change_facial_hair"]) var/facial_hair_styles[0] - for(var/facial_hair_style in owner.get_valid_facial_hairstyle_types()) + for(var/facial_hair_style in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_FACIAL_HAIR)) var/decl/sprite_accessory/facial_hair_decl = GET_DECL(facial_hair_style) facial_hair_styles[++facial_hair_styles.len] = list("facialhairstyle" = facial_hair_decl.name, "ref" = "\ref[facial_hair_decl]") data["facial_hair_styles"] = facial_hair_styles - var/decl/sprite_accessory/facial_hair = GET_DECL(owner.f_style) + var/facial_hairstyle = GET_FACIAL_HAIR_STYLE(owner) + var/decl/sprite_accessory/facial_hair = GET_DECL(facial_hairstyle) data["facial_hair_style"] = facial_hair.name data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR) diff --git a/code/modules/organs/ailments/_ailment.dm b/code/modules/organs/ailments/_ailment.dm index b0081d5482c..ad78f732ab0 100644 --- a/code/modules/organs/ailments/_ailment.dm +++ b/code/modules/organs/ailments/_ailment.dm @@ -8,8 +8,10 @@ var/obj/item/organ/organ // Organ associated with the ailment (ailment is in organ.ailments list). // Requirements before applying to a target. - var/list/applies_to_organ // What organ tags (BP_HEAD, etc) is the ailment valid for? - var/affects_robotics = FALSE // Does the ailment affect prosthetics specifically or flesh? + var/list/applies_to_organ // What organ tags (BP_HEAD, etc) is the ailment valid for? + var/applies_to_prosthetics = FALSE // Does the ailment affect prosthetic or non-prosthetic limbs? + var/applies_to_robotics = FALSE // Does the ailment affect robotic limbs? + var/applies_to_crystalline = FALSE // Does the ailment affect crystalline limbs? var/specific_organ_subtype = /obj/item/organ/external // What organ subtype, if any, does the ailment apply to? // Treatment types @@ -23,9 +25,9 @@ // Fluff strings var/initial_ailment_message = "Your $ORGAN$ $ORGAN_DOES$n't feel quite right..." // Shown in New() var/third_person_treatment_message = "$USER$ treats $TARGET$'s ailment with $ITEM$." // Shown when treating other with an item. - var/self_treatment_message = "$USER$ treats $USER_HIS$ ailment with $ITEM$." // Shown when treating self with an item. + var/self_treatment_message = "$USER$ treats $USER_THEIR$ ailment with $ITEM$." // Shown when treating self with an item. var/medication_treatment_message = "Your ailment abates." // Shown when treated by a metabolized reagent or CE_X effect. - var/manual_diagnosis_string /* ex: "$USER_HIS$ $ORGAN$ has something wrong with it" */ // Shown when grab-diagnosed by a doctor. Leave null to be undiagnosable. + var/manual_diagnosis_string /* ex: "$USER_THEIR$ $ORGAN$ has something wrong with it" */ // Shown when grab-diagnosed by a doctor. Leave null to be undiagnosable. var/scanner_diagnosis_string /* ex: "Significant swelling" */ // Shown on the handheld and body scanners. Leave null to be undiagnosable. var/hidden_from_codex = FALSE @@ -41,7 +43,11 @@ /datum/ailment/proc/can_apply_to(var/obj/item/organ/_organ) if(specific_organ_subtype && !istype(_organ, specific_organ_subtype)) return FALSE - if(affects_robotics != !!(BP_IS_PROSTHETIC(_organ))) + if(!isnull(applies_to_prosthetics) && (applies_to_prosthetics != !!BP_IS_PROSTHETIC(_organ))) + return FALSE + if(!isnull(applies_to_robotics) && (applies_to_robotics != !!BP_IS_ROBOTIC(_organ))) + return FALSE + if(!isnull(applies_to_crystalline) && (applies_to_crystalline != !!BP_IS_CRYSTAL(_organ))) return FALSE if(length(applies_to_organ) && !(_organ?.organ_tag in applies_to_organ)) return FALSE @@ -56,7 +62,7 @@ /datum/ailment/proc/begin_ailment_event() if(!organ?.owner) return - timer_id = addtimer(CALLBACK(src, .proc/do_malfunction), rand(min_time, max_time), TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) + timer_id = addtimer(CALLBACK(src, PROC_REF(do_malfunction)), rand(min_time, max_time), TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) /datum/ailment/proc/do_malfunction() if(!organ?.owner) @@ -69,7 +75,13 @@ return /datum/ailment/proc/treated_by_item(var/obj/item/treatment) - return treated_by_item_type && istype(treatment, treated_by_item_type) + if(islist(treated_by_item_type)) + for(var/treatment_type in treated_by_item_type) + if(istype(treatment, treatment_type)) + return TRUE + else if(ispath(treated_by_item_type)) + return istype(treatment, treated_by_item_type) + return FALSE /datum/ailment/proc/replace_tokens(var/message, var/obj/item/treatment, var/mob/user, var/mob/target) . = message @@ -78,7 +90,7 @@ if(user) var/decl/pronouns/G = user.get_pronouns() . = replacetext(., "$USER$", "\the [user]") - . = replacetext(., "$USER_HIS$", G.his) + . = replacetext(., "$USER_THEIR$", G.his) if(target) . = replacetext(., "$TARGET$", "\the [target]") if(organ) diff --git a/code/modules/organs/ailments/ailment_codex.dm b/code/modules/organs/ailments/ailment_codex.dm index 8cc388bcb80..ed1ea3d55eb 100644 --- a/code/modules/organs/ailments/ailment_codex.dm +++ b/code/modules/organs/ailments/ailment_codex.dm @@ -1,14 +1,12 @@ -/datum/codex_entry/ailments - name = "Medical Ailments" - lore_text = "Day to day life can exert stress on the body, which can manifest in small, non-critical medical conditions like a sore back or a \ - headache. 9/10 doctors recommend a visit to your local physician for treatment before they compound into a chronic or acute condition." - mechanics_text = "Ailments are minor medical conditions that can crop up during a round. They aren't life-threatening, and \ - frequently aren't anything more than slightly annoying, and treating them is generally straightforward." +/datum/codex_entry/guide/ailments + name = "Guide to Medical Ailments" + mechanics_text = "Ailments are minor medical conditions that can crop up during a round. They aren't life-threatening, and frequently aren't anything more than slightly annoying, and treating them is generally straightforward." + lore_text = "Day to day life can exert stress on the body, which can manifest in small, non-critical medical conditions like a sore back or a headache. 9/10 doctors recommend a visit to your local physician for treatment before they compound into a chronic or acute condition." var/show_robotics_recipes = FALSE var/name_column = "Ailment" var/treatment_column = "Recommended treatment" -/datum/codex_entry/ailments/robotic +/datum/codex_entry/guide/ailments/robotic name = "Prosthetic Faults" lore_text = "Prosthetic limbs can be prone to debilitating and often dangerous faults, especially if exposed to hostile conditions." mechanics_text = "EMP damage or improper installation can cause prosthetic limbs to develop problems, some of them more serious than others." @@ -36,17 +34,17 @@ return "stimulant drugs" return null -/datum/codex_entry/ailments/New() +/datum/codex_entry/guide/ailments/New() var/list/ailment_table = list("") ailment_table += "" for(var/atype in subtypesof(/datum/ailment)) var/datum/ailment/ailment = get_ailment_reference(atype) - if(!ailment.name || show_robotics_recipes != ailment.affects_robotics || ailment.hidden_from_codex) + if(!ailment.name || show_robotics_recipes != ailment.applies_to_prosthetics || ailment.hidden_from_codex) continue ailment_table += "
    [name_column][treatment_column]
    [ailment.name]" var/list/ailment_cures = list() - if(ailment.treated_by_item_type) - var/obj/item/thing = ailment.treated_by_item_type + var/list/treated_by_types = islist(ailment.treated_by_item_type) ? ailment.treated_by_item_type : list(ailment.treated_by_item_type) + for(var/obj/item/thing as anything in treated_by_types) // if you put a non-item in here you deserve to have your face eaten by runtime errors ailment_cures += "[ailment.treated_by_item_cost] x [initial(thing.name)]" if(ailment.treated_by_reagent_type) var/decl/material/mat = GET_DECL(ailment.treated_by_reagent_type) diff --git a/code/modules/organs/ailments/ailments_medical.dm b/code/modules/organs/ailments/ailments_medical.dm index 69c53e08a54..09cf769982f 100644 --- a/code/modules/organs/ailments/ailments_medical.dm +++ b/code/modules/organs/ailments/ailments_medical.dm @@ -29,7 +29,7 @@ treated_by_reagent_type = /decl/material/liquid/nutriment/honey treated_by_reagent_dosage = 1 medication_treatment_message = "You swallow, finding that your sore throat is rapidly recovering." - manual_diagnosis_string = "$USER_HIS$ throat is red and inflamed." + manual_diagnosis_string = "$USER_THEIR$ throat is red and inflamed." /datum/ailment/head/sore_throat/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("You swallow painfully past your sore throat.")) @@ -39,16 +39,16 @@ treated_by_reagent_type = /decl/material/liquid/antiseptic treated_by_reagent_dosage = 1 medication_treatment_message = "The itching in your sinuses fades away." - manual_diagnosis_string = "$USER_HIS$ sinuses are inflamed and running." + manual_diagnosis_string = "$USER_THEIR$ sinuses are inflamed and running." /datum/ailment/head/sneezing/can_apply_to(obj/item/organ/_organ) - . = ..() - if(. && (!_organ.owner || !_organ.owner.usable_emotes["sneeze"])) - return FALSE + . = ..() && _organ.owner + if(.) + var/decl/emote/emote = GET_DECL(/decl/emote/audible/sneeze) + return emote.mob_can_use(_organ.owner) /datum/ailment/head/sneezing/on_ailment_event() - if(organ.owner.usable_emotes["sneeze"]) - organ.owner.emote("sneeze") + organ.owner.emote(/decl/emote/audible/sneeze) organ.owner.setClickCooldown(3) /datum/ailment/sprain @@ -56,8 +56,8 @@ applies_to_organ = list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) treated_by_item_type = /obj/item/stack/medical/bruise_pack third_person_treatment_message = "$USER$ wraps $TARGET$'s sprained $ORGAN$ in $ITEM$." - self_treatment_message = "$USER$ wraps $USER_HIS$ sprained $ORGAN$ in $ITEM$." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is visibly swollen." + self_treatment_message = "$USER$ wraps $USER_THEIR$ sprained $ORGAN$ in $ITEM$." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is visibly swollen." /datum/ailment/sprain/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("Your sprained [organ.name] aches distractingly.")) @@ -70,8 +70,8 @@ name = "rash" treated_by_item_type = /obj/item/stack/medical/ointment third_person_treatment_message = "$USER$ salves $TARGET$'s rash-stricken $ORGAN$ with $ITEM$." - self_treatment_message = "$USER$ salves $USER_HIS$ rash-stricken $ORGAN$ with $ITEM$." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is covered in a bumpy red rash." + self_treatment_message = "$USER$ salves $USER_THEIR$ rash-stricken $ORGAN$ with $ITEM$." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is covered in a bumpy red rash." /datum/ailment/rash/on_ailment_event() to_chat(organ.owner, SPAN_DANGER("A bright red rash on your [organ.name] itches distractingly.")) @@ -83,12 +83,13 @@ applies_to_organ = list(BP_LUNGS) treated_by_reagent_type = /decl/material/liquid/antiseptic medication_treatment_message = "The tickling in your throat fades away." - manual_diagnosis_string = "$USER_HIS$ throat is red and inflamed." + manual_diagnosis_string = "$USER_THEIR$ throat is red and inflamed." /datum/ailment/coughing/can_apply_to(obj/item/organ/_organ) - . = ..() - if(. && (!_organ.owner || !_organ.owner.usable_emotes["cough"])) - return FALSE + . = ..() && _organ.owner + if(.) + var/decl/emote/emote = GET_DECL(/decl/emote/audible/cough) + return emote.mob_can_use(_organ.owner) /datum/ailment/coughing/on_ailment_event() organ.owner.cough() @@ -99,7 +100,7 @@ treated_by_chem_effect = CE_PAINKILLER treated_by_chem_effect_strength = 25 medication_treatment_message = "The dull pulse of pain in your $ORGAN$ fades away." - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is visibly swollen." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is visibly swollen." /datum/ailment/sore_joint/on_ailment_event() var/obj/item/organ/external/E = organ diff --git a/code/modules/organs/ailments/faults/_fault.dm b/code/modules/organs/ailments/faults/_fault.dm index a2aefe003b6..8219540a8dc 100644 --- a/code/modules/organs/ailments/faults/_fault.dm +++ b/code/modules/organs/ailments/faults/_fault.dm @@ -1,8 +1,12 @@ /datum/ailment/fault - affects_robotics = TRUE + applies_to_robotics = TRUE + applies_to_prosthetics = TRUE category = /datum/ailment/fault - treated_by_item_type = /obj/item/stack/nanopaste + treated_by_item_type = list( + /obj/item/stack/nanopaste, + /obj/item/stack/tape_roll/duct_tape + ) treated_by_item_cost = 3 third_person_treatment_message = "$USER$ patches $TARGET$'s faulty $ORGAN$ with $ITEM$." - self_treatment_message = "$USER$ patches $USER_HIS$ faulty $ORGAN$ with $ITEM$." + self_treatment_message = "$USER$ patches $USER_THEIR$ faulty $ORGAN$ with $ITEM$." initial_ailment_message = "Damage to your $ORGAN$ has caused a fault..." diff --git a/code/modules/organs/ailments/faults/fault_acid_discharge.dm b/code/modules/organs/ailments/faults/fault_acid_discharge.dm index 505eeee331d..cc2281544a6 100644 --- a/code/modules/organs/ailments/faults/fault_acid_discharge.dm +++ b/code/modules/organs/ailments/faults/fault_acid_discharge.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/acid name = "acidic discharge" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is leaking some kind of chemical." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is leaking some kind of chemical." /datum/ailment/fault/acid/on_ailment_event() organ.owner.custom_pain("A burning sensation spreads through your [organ.name].", 5, affecting = organ.owner) diff --git a/code/modules/organs/ailments/faults/fault_elec_discharge.dm b/code/modules/organs/ailments/faults/fault_elec_discharge.dm index 09d5b3fdaf4..8e7ec518031 100644 --- a/code/modules/organs/ailments/faults/fault_elec_discharge.dm +++ b/code/modules/organs/ailments/faults/fault_elec_discharge.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/elec_discharge name = "electrical discharge" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ gives you a static shock when you touch it!" + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ gives you a static shock when you touch it!" /datum/ailment/fault/elec_discharge/on_ailment_event() organ.owner.custom_pain("Shock jolts through your [organ.name], staggering you!", 50, affecting = organ.owner) diff --git a/code/modules/organs/ailments/faults/fault_leaky.dm b/code/modules/organs/ailments/faults/fault_leaky.dm index d3d44a66280..d8659a9fb51 100644 --- a/code/modules/organs/ailments/faults/fault_leaky.dm +++ b/code/modules/organs/ailments/faults/fault_leaky.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/leaky name = "leaky prosthetic" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is leaking some kind of chemical." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is leaking some kind of chemical." var/static/list/chemicals = list( /decl/material/liquid/enzyme, /decl/material/liquid/frostoil, diff --git a/code/modules/organs/ailments/faults/fault_locking_thumbs.dm b/code/modules/organs/ailments/faults/fault_locking_thumbs.dm index a0df179ed84..faa71d72568 100644 --- a/code/modules/organs/ailments/faults/fault_locking_thumbs.dm +++ b/code/modules/organs/ailments/faults/fault_locking_thumbs.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/locking_thumbs name = "self-locking thumbs" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ makes a grinding sound when you move the joints." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ makes a grinding sound when you move the joints." applies_to_organ = list( BP_L_ARM, BP_L_HAND, diff --git a/code/modules/organs/ailments/faults/fault_noisemaker.dm b/code/modules/organs/ailments/faults/fault_noisemaker.dm index 981cefb72ba..c99f9e2cc37 100644 --- a/code/modules/organs/ailments/faults/fault_noisemaker.dm +++ b/code/modules/organs/ailments/faults/fault_noisemaker.dm @@ -1,6 +1,6 @@ /datum/ailment/fault/noisemaker name = "noisemaker" - manual_diagnosis_string = "$USER_HIS$ $ORGAN$ is emitting a low capacitor whine." + manual_diagnosis_string = "$USER_THEIR$ $ORGAN$ is emitting a low capacitor whine." /datum/ailment/fault/noisemaker/on_ailment_event() organ.owner.audible_message(SPAN_DANGER("[organ.owner]'s [organ.name] emits a loud, piezoelectric screal."), hearing_distance = 7) diff --git a/code/modules/organs/ailments/faults/fault_overstimulation.dm b/code/modules/organs/ailments/faults/fault_overstimulation.dm index d334212b1e6..49244c9fe9d 100644 --- a/code/modules/organs/ailments/faults/fault_overstimulation.dm +++ b/code/modules/organs/ailments/faults/fault_overstimulation.dm @@ -2,5 +2,5 @@ name = "motor control overstimulation" /datum/ailment/fault/overstimulation/on_ailment_event() - organ.owner.emote("collapse") + organ.owner.emote(/decl/emote/visible/collapse) SET_STATUS_MAX(organ.owner, STAT_STUN, rand(2, 4)) \ No newline at end of file diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 8c45ba4aedd..eb1a868e78f 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -12,7 +12,7 @@ abstract_type = /obj/item/organ/external var/slowdown = 0 - var/tmp/icon_cache_key + var/tmp/_icon_cache_key // Strings var/broken_description // fracture string if any. var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb. @@ -32,15 +32,16 @@ // Appearance vars. var/body_part = null // Part flag var/icon_position = 0 // Used in mob overlay layering calculations. - var/icon/mob_icon // Cached icon for use in mob overlays. var/skin_tone // Skin tone. var/skin_colour // skin colour var/skin_blend = ICON_ADD // How the skin colour is applied. var/hair_colour // hair colour - var/list/markings // Markings (body_markings) to apply to the icon var/render_alpha = 255 var/skip_body_icon_draw = FALSE // Set to true to skip including this organ on the human body sprite. + /// Sprite accessories like hair and markings to apply to the organ icon and owner. + VAR_PRIVATE/list/_sprite_accessories + // Wound and structural data. var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often var/list/wounds // wound datum list. @@ -72,20 +73,55 @@ var/list/unarmed_attacks - var/atom/movable/applied_pressure + var/tmp/atom/movable/applied_pressure var/atom/movable/splinted - var/internal_organs_size = 0 // Currently size cost of internal organs in this body part + var/tmp/internal_organs_size = 0 // Currently size cost of internal organs in this body part // HUD element variable, see organ_icon.dm get_damage_hud_image() var/image/hud_damage_image var/fingerprint +SAVED_VAR(/obj/item/organ/external, brute_dam) +SAVED_VAR(/obj/item/organ/external, burn_dam) +SAVED_VAR(/obj/item/organ/external, last_dam) +SAVED_VAR(/obj/item/organ/external, pain) +SAVED_VAR(/obj/item/organ/external, limb_flags) +SAVED_VAR(/obj/item/organ/external, body_part) +SAVED_VAR(/obj/item/organ/external, icon_position) +SAVED_VAR(/obj/item/organ/external, skin_tone) +SAVED_VAR(/obj/item/organ/external, skin_colour) +SAVED_VAR(/obj/item/organ/external, skin_blend) +SAVED_VAR(/obj/item/organ/external, hair_colour) +SAVED_VAR(/obj/item/organ/external, render_alpha) + +//Don't save sprite accessories, we've got a special handling for that var +//SAVED_VAR(/obj/item/organ/external, _sprite_accessories) + +SAVED_VAR(/obj/item/organ/external, wound_update_accuracy) +SAVED_VAR(/obj/item/organ/external, wounds) +SAVED_VAR(/obj/item/organ/external, number_wounds) + +SAVED_VAR(/obj/item/organ/external, parent) +SAVED_VAR(/obj/item/organ/external, children) +SAVED_VAR(/obj/item/organ/external, internal_organs) +SAVED_VAR(/obj/item/organ/external, implants) +SAVED_VAR(/obj/item/organ/external, genetic_degradation) +SAVED_VAR(/obj/item/organ/external, autopsy_data) +SAVED_VAR(/obj/item/organ/external, encased) +SAVED_VAR(/obj/item/organ/external, arterial_bleed_severity) +SAVED_VAR(/obj/item/organ/external, cavity_max_w_class) +SAVED_VAR(/obj/item/organ/external, hatch_state) +SAVED_VAR(/obj/item/organ/external, stage) +SAVED_VAR(/obj/item/organ/external, cavity) +SAVED_VAR(/obj/item/organ/external, splinted) +SAVED_VAR(/obj/item/organ/external, fingerprint) + /obj/item/organ/external/proc/get_fingerprint() if((limb_flags & ORGAN_FLAG_FINGERPRINT) && !BP_IS_PROSTHETIC(src)) - if(!owner) // We need to generate a fingerprint as we've never been supplied one before. - fingerprint = md5(sequential_id(/mob)) + if(!owner && !fingerprint) // We need to generate a fingerprint as we've never been supplied one before. + fingerprint = md5(sequential_id(/mob)) //#FIXME: This doesn't seem to make much sense? return fingerprint for(var/obj/item/organ/external/E in children) @@ -106,6 +142,41 @@ . = ..() if(. != INITIALIZE_HINT_QDEL && isnull(pain_disability_threshold)) pain_disability_threshold = (max_damage * 0.75) + if(force_limb_dir && force_limb_dir != SOUTH) + set_dir(force_limb_dir) + //Persistence Save load + if(persistent_id) + post_init_from_save() + +/obj/item/organ/external/proc/post_init_from_save() + //Dump everything + clear_sprite_accessories(TRUE) + //Load the accessories we saved + var/list/accessories_to_load = LOAD_CUSTOM_SV("sprite_accessories") + for(var/accessory_type in accessories_to_load) + var/decl/sprite_accessory/accessory_def = GET_DECL(accessory_type) + set_sprite_accessory(accessory_type, accessory_def.accessory_category, accessories_to_load[accessory_type], TRUE) + if(istype(owner)) + var/decl/sprite_accessory/refresh_accessory = GET_DECL(accessory_type || accessory_def.accessory_category) + if(refresh_accessory) + refresh_accessory.refresh_mob(owner) + + CLEAR_SV("sprite_accessories") + //For loose limbs only do this if we have no owner, because the proc would call stuff on the owner out of order otherwise + if(LAZYLEN(wounds) && !owner) + update_wounds() + //Has to run this here because the accessories might modify this. + update_icon() + +/obj/item/organ/external/before_save() + . = ..() + //Serialize the accessories (hairs, etc..) + var/list/accessories_to_save + for(var/category in _sprite_accessories) + var/list/category_contents = _sprite_accessories[category] + for(var/item_type in category_contents) + LAZYSET(accessories_to_save, item_type, category_contents[item_type]) //The value is a color for the accessory + CUSTOM_SV("sprite_accessories", accessories_to_save) /obj/item/organ/external/Destroy() //Update the hierarchy BEFORE clearing all the vars and refs @@ -124,15 +195,17 @@ LAZYREMOVE(owner.bad_external_organs, src) /obj/item/organ/external/set_species(specie_name) + _icon_cache_key = null . = ..() skin_blend = bodytype.limb_blend for(var/attack_type in species.unarmed_attacks) var/decl/natural_attack/attack = GET_DECL(attack_type) if(istype(attack) && (organ_tag in attack.usable_with_limbs)) LAZYADD(unarmed_attacks, attack_type) - get_icon() + update_icon() /obj/item/organ/external/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE) + _icon_cache_key = null var/decl/bodytype/old_bodytype = bodytype . = ..(new_bodytype, override_material) if(bodytype != old_bodytype && apply_to_internal_organs) @@ -141,6 +214,14 @@ if(.) update_icon(TRUE) +/obj/item/organ/external/set_dna(var/datum/dna/new_dna) + _icon_cache_key = null + return ..() + +/obj/item/organ/external/reset_status() + _icon_cache_key = null + return ..() + /obj/item/organ/external/proc/set_bodytype_with_children(decl/bodytype/new_bodytype, override_material = null) set_bodytype(new_bodytype, override_material) for(var/obj/item/organ/external/child in children) @@ -288,34 +369,34 @@ //Handles removing internal organs/implants/items still in the detached limb. /obj/item/organ/external/proc/try_remove_internal_item(var/obj/item/W, var/mob/user) - switch(stage) - if(0) - if(W.sharp) - user.visible_message(SPAN_DANGER("[user] cuts [src] open with [W]!")) - stage++ - return TRUE - if(1) - if(istype(W)) - user.visible_message(SPAN_DANGER("[user] cracks [src] open like an egg with [W]!")) - stage++ - return TRUE - if(2) - if(W.sharp || istype(W,/obj/item/hemostat) || IS_WIRECUTTER(W)) - var/list/radial_buttons = make_item_radial_menu_choices(get_contents_recursive()) - if(LAZYLEN(radial_buttons)) - var/obj/item/removing = show_radial_menu(user, src, radial_buttons, radius = 42, require_near = TRUE, use_labels = TRUE, check_locs = list(src)) - if(removing) - if(istype(removing, /obj/item/organ)) - var/obj/item/organ/O = removing - O.do_uninstall() - removing.forceMove(get_turf(user)) - - if(user.get_empty_hand_slot()) - user.put_in_hands(removing) - user.visible_message(SPAN_DANGER("[user] extracts [removing] from [src] with [W]!")) - else - user.visible_message(SPAN_DANGER("[user] fishes around fruitlessly in [src] with [W].")) - return TRUE + + if(stage == 0 && W.sharp) + user.visible_message(SPAN_NOTICE("\The [user] cuts \the [src] open with \the [W].")) + stage++ + return TRUE + + if(stage == 1 && IS_RETRACTOR(W)) + user.visible_message(SPAN_NOTICE("\The [user] levers \the [src] open with \the [W].")) + stage++ + return TRUE + + if(stage == 2 && (W.sharp || IS_HEMOSTAT(W) || IS_WIRECUTTER(W))) + var/list/radial_buttons = make_item_radial_menu_choices(get_contents_recursive()) + if(LAZYLEN(radial_buttons)) + var/obj/item/removing = show_radial_menu(user, src, radial_buttons, radius = 42, require_near = TRUE, use_labels = TRUE, check_locs = list(src)) + if(removing) + if(istype(removing, /obj/item/organ)) + var/obj/item/organ/O = removing + O.do_uninstall() + removing.forceMove(get_turf(user)) + + if(user.get_empty_hand_slot()) + user.put_in_hands(removing) + user.visible_message(SPAN_NOTICE("\The [user] extracts [removing] from \the [src] with \the [W]!")) + else + user.visible_message(SPAN_NOTICE("\The [user] fishes around fruitlessly in \the [src] with \the [W].")) + return TRUE + return FALSE //Handles removing child limbs from the detached limb. @@ -420,7 +501,7 @@ return owner.verbs -= /mob/living/carbon/human/proc/undislocate -/obj/item/organ/external/update_health() +/obj/item/organ/external/update_organ_health() damage = min(max_damage, (brute_dam + burn_dam)) return @@ -447,11 +528,8 @@ // //If we contain any child organs add them to the owner // - for(var/obj/item/organ/organ in internal_organs) - owner.add_organ(organ, src, in_place, update_icon, detached) - - for(var/obj/item/organ/external/organ in children) - owner.add_organ(organ, src, in_place, update_icon, detached) + for(var/obj/item/organ/organ in (implants|children|internal_organs)) + owner.add_organ(organ, src, in_place, update_icon, FALSE) // //Add any existing organs in the owner that have us as parent @@ -607,7 +685,7 @@ This function completely restores a damaged organ to perfect condition. . = ..() // Clear damage, reapply aspects. if(owner) - owner.updatehealth() + owner.update_health() //#TODO: Rejuvination hacks should probably be removed /obj/item/organ/external/remove_rejuv() @@ -648,7 +726,7 @@ This function completely restores a damaged organ to perfect condition. switch(type) if(BURN) fluid_loss_severity = FLUIDLOSS_WIDE_BURN if(LASER) fluid_loss_severity = FLUIDLOSS_CONC_BURN - var/fluid_loss = (damage/(owner.maxHealth - config.health_threshold_dead)) * SPECIES_BLOOD_DEFAULT * fluid_loss_severity + var/fluid_loss = (damage/(owner.get_max_health() - get_config_value(/decl/config/num/health_health_threshold_dead))) * SPECIES_BLOOD_DEFAULT * fluid_loss_severity owner.remove_blood(fluid_loss) // first check whether we can widen an existing wound @@ -782,10 +860,11 @@ Note that amputating the affected organ does in fact remove the infection from t handle_germ_effects() /obj/item/organ/external/proc/handle_germ_sync() - var/turf/simulated/T = get_turf(owner) + var/turf/T = get_turf(owner) for(var/datum/wound/W in wounds) //Open wounds can become infected - if(max(istype(T) && T.dirt*10, 2*owner.germ_level) > W.germ_level && W.infection_check()) + // what in the hell is this doing with T? + if(max(istype(T) && T.simulated && T.get_dirt()*10, 2*owner.germ_level) > W.germ_level && W.infection_check()) W.germ_level++ var/antibiotics = GET_CHEMICAL_EFFECT(owner, CE_ANTIBIOTIC) @@ -873,12 +952,12 @@ Note that amputating the affected organ does in fact remove the infection from t // we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime heal_amt = heal_amt * wound_update_accuracy // configurable regen speed woo, no-regen hardcore or instaheal hugbox, choose your destiny - heal_amt = heal_amt * config.organ_regeneration_multiplier + heal_amt = heal_amt * get_config_value(/decl/config/num/health_organ_regeneration_multiplier) // Apply a modifier based on how stressed we currently are. if(owner) var/stress_modifier = owner.get_stress_modifier() if(stress_modifier) - heal_amt *= 1-(config.stress_healing_recovery_constant * stress_modifier) + heal_amt *= 1-(get_config_value(/decl/config/num/health_stress_healing_recovery_constant) * stress_modifier) // amount of healing is spread over all the wounds heal_amt = heal_amt / (LAZYLEN(wounds) + 1) // making it look prettier on scanners @@ -895,7 +974,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(update_surgery) owner.update_surgery() if (update_damstate()) - owner.UpdateDamageIcon(1) + owner.update_damage_overlays(TRUE) //Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status. /obj/item/organ/external/proc/update_damages() @@ -942,8 +1021,8 @@ Note that amputating the affected organ does in fact remove the infection from t var/n_is = damage_state_text() if (n_is != damage_state) damage_state = n_is - return 1 - return 0 + return TRUE + return FALSE // new damage icon system // returns just the brute/burn damage code @@ -1033,8 +1112,8 @@ Note that amputating the affected organ does in fact remove the infection from t if(species && istype(., /obj/effect/decal/cleanable/blood/gibs)) var/obj/effect/decal/cleanable/blood/gibs/G = . - G.fleshcolor = species.get_flesh_colour(owner) - G.basecolor = species.get_blood_color(owner) + G.fleshcolor = species.get_species_flesh_color(owner) + G.basecolor = species.get_species_blood_color(owner) G.update_icon() //Handles dismemberment @@ -1217,7 +1296,7 @@ Note that amputating the affected organ does in fact remove the infection from t I.exposed() /obj/item/organ/external/proc/fracture() - if(!config.bones_can_break) + if(!get_config_value(/decl/config/toggle/on/health_bones_can_break)) return if(BP_IS_PROSTHETIC(src)) return //ORGAN_BROKEN doesn't have the same meaning for robot limbs @@ -1231,7 +1310,7 @@ Note that amputating the affected organ does in fact remove the infection from t "You hear a sickening crack.") jostle_bone() if(can_feel_pain()) - owner.emote("scream") + owner.emote(/decl/emote/audible/scream) playsound(src.loc, "fracture", 100, 1, -2) status |= ORGAN_BROKEN @@ -1252,7 +1331,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/mend_fracture() if(BP_IS_PROSTHETIC(src)) return 0 //ORGAN_BROKEN doesn't have the same meaning for robot limbs - if(brute_dam > min_broken_damage * config.organ_health_multiplier) + if(brute_dam > min_broken_damage * get_config_value(/decl/config/num/health_organ_health_multiplier)) return 0 //will just immediately fracture again status &= ~ORGAN_BROKEN @@ -1309,7 +1388,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/is_malfunctioning() return (is_robotic() && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam)) -/obj/item/organ/external/proc/embed(var/obj/item/W, var/silent = 0, var/supplied_message, var/datum/wound/supplied_wound) +/obj/item/organ/external/proc/embed_in_organ(var/obj/item/W, var/silent = FALSE, var/supplied_message, var/datum/wound/supplied_wound) if(!owner || loc != owner) return if(species.species_flags & SPECIES_FLAG_NO_EMBED) @@ -1343,6 +1422,7 @@ Note that amputating the affected organ does in fact remove the infection from t W.forceMove(owner) /obj/item/organ/external/do_uninstall(in_place, detach, ignore_children, update_icon) + var/mob/living/carbon/human/victim = owner //parent proc clears owner if(!(. = ..())) return @@ -1422,7 +1502,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/set_detached(is_detached) if(BP_IS_PROSTHETIC(src)) is_detached = FALSE //External prosthetics are never detached - return ..(is_detached) + . = ..(is_detached) /obj/item/organ/external/proc/disfigure(var/type = BRUTE) if(status & ORGAN_DISFIGURED) @@ -1447,7 +1527,7 @@ Note that amputating the affected organ does in fact remove the infection from t incision = other else for(var/datum/wound/cut/W in wounds) - if(W.bandaged || W.current_stage > W.max_bleeding_stage) // Shit's unusable + if(!W.is_open()) // Shit's unusable continue if(strict && !W.is_surgical()) //We don't need dirty ones continue @@ -1582,3 +1662,21 @@ Note that amputating the affected organ does in fact remove the infection from t vital_to_owner = TRUE break return vital_to_owner + +/obj/item/organ/external/proc/get_grooming_results(obj/item/grooming/tool) + + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = resolve_accessory_to_decl(accessory) + var/grooming_result = accessory_decl.can_be_groomed_with(src, tool) + . = list( + "success" = grooming_result, + "descriptor" = accessory_decl.get_grooming_descriptor(grooming_result, src, tool) + ) + if(grooming_result != GROOMING_RESULT_FAILED) + return + + var/default_results = bodytype.get_default_grooming_results(src, tool) + if(default_results) + . = default_results diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm index 60b8d217b62..cbcbad5df39 100644 --- a/code/modules/organs/external/_external_damage.dm +++ b/code/modules/organs/external/_external_damage.dm @@ -31,7 +31,7 @@ owner.bodytemperature += burn burn = 0 if(prob(25)) - owner.visible_message("\The [owner]'s crystalline [name] shines with absorbed energy!") + owner.visible_message(SPAN_WARNING("\The [owner]'s crystalline [name] shines with absorbed energy!")) if(used_weapon) add_autopsy_data(used_weapon, brute + burn) @@ -48,10 +48,10 @@ burn = max(burn - spillover, 0) //If limb took enough damage, try to cut or tear it off if(owner && loc == owner) - owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called - if((limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && config.limbs_can_break) + owner.update_health() //droplimb will call update_health() again if it does end up being called + if((limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && get_config_value(/decl/config/toggle/on/health_limbs_can_break)) var/total_damage = brute_dam + burn_dam + brute + burn + spillover - var/threshold = max_damage * config.organ_health_multiplier + var/threshold = max_damage * get_config_value(/decl/config/num/health_organ_health_multiplier) if(total_damage > threshold) if(attempt_dismemberment(pure_brute, burn, sharp, edge, used_weapon, spillover, total_damage > threshold*6, override_droplimb = override_droplimb)) return @@ -68,7 +68,7 @@ if((status & ORGAN_BROKEN) && brute) jostle_bone(brute) if(can_feel_pain() && prob(40)) - owner.emote("scream") //getting hit on broken hand hurts + owner.emote(/decl/emote/audible/scream) //getting hit on broken hand hurts // If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking var/datum/wound/created_wound @@ -109,16 +109,16 @@ //If there are still hurties to dispense if (spillover) - owner.shock_stage += spillover * config.organ_damage_spillover_multiplier + owner.shock_stage += spillover * get_config_value(/decl/config/num/health_organ_damage_spillover_multiplier) // sync the organ's damage with its wounds update_damages() - owner.updatehealth() + owner.update_health() if(status & ORGAN_BLEEDING) owner.update_bandages() if(owner && update_damstate()) - owner.UpdateDamageIcon() + owner.update_damage_overlays() if(created_wound && isobj(used_weapon)) var/obj/O = used_weapon @@ -192,8 +192,8 @@ status &= ~ORGAN_BROKEN //Sync the organ's damage with its wounds - src.update_damages() - owner.updatehealth() + update_damages() + owner.update_health() return update_damstate() @@ -206,7 +206,7 @@ // Geneloss/cloneloss. /obj/item/organ/external/proc/get_genetic_damage() - if(bodytype.body_flags & BODY_FLAG_NO_DNA) + if(!bodytype || (bodytype.body_flags & BODY_FLAG_NO_DNA)) return 0 if(BP_IS_PROSTHETIC(src)) return 0 @@ -282,7 +282,7 @@ return pain = max(0,min(max_damage,pain+amount)) if(owner && ((amount > 15 && prob(20)) || (amount > 30 && prob(60)))) - owner.emote("scream") + owner.emote(/decl/emote/audible/scream) return pain-last_pain /obj/item/organ/external/proc/stun_act(var/stun_amount, var/agony_amount) diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm index 2407288a00a..4b68234701b 100644 --- a/code/modules/organs/external/_external_icons.dm +++ b/code/modules/organs/external/_external_icons.dm @@ -1,33 +1,38 @@ var/global/list/limb_icon_cache = list() +/obj/item/organ/external + var/force_limb_dir = SOUTH + /obj/item/organ/external/set_dir() - return ..(SOUTH) + return ..(force_limb_dir) /obj/item/organ/external/proc/compile_icon() - //#FIXME: We REALLY shouldn't be messing with overlays outside on_update_icon. And on_update_icon doesn't call this. - cut_overlays() // This is a kludge, only one icon has more than one generation of children though. for(var/obj/item/organ/external/organ in contents) if(organ.children && organ.children.len) for(var/obj/item/organ/external/child in organ.children) - add_overlay(child.mob_icon) - add_overlay(organ.mob_icon) + child.update_icon() + child.compile_overlays() + organ.update_icon() + organ.compile_overlays() + update_icon() + compile_overlays() /obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human) + _icon_cache_key = null skin_tone = null skin_colour = null - hair_colour = human.hair_colour // This used to do a bodytype set but that was *really really bad.* Things that need that should do it themselves. skin_blend = bodytype.limb_blend if(!isnull(human.skin_tone) && bodytype?.appearance_flags & HAS_A_SKIN_TONE) skin_tone = human.skin_tone if(bodytype.appearance_flags & HAS_SKIN_COLOR) - skin_colour = human.skin_colour + skin_colour = human.get_skin_colour() /obj/item/organ/external/proc/sync_colour_to_dna() + _icon_cache_key = null skin_tone = null skin_colour = null - hair_colour = rgb(dna.GetUIValue(DNA_UI_HAIR_R),dna.GetUIValue(DNA_UI_HAIR_G),dna.GetUIValue(DNA_UI_HAIR_B)) if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (bodytype.appearance_flags & HAS_A_SKIN_TONE)) skin_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) if(bodytype.appearance_flags & HAS_SKIN_COLOR) @@ -42,72 +47,261 @@ var/global/list/limb_icon_cache = list() update_icon(1) if(last_owner) SetName("[last_owner.real_name]'s head") - addtimer(CALLBACK(last_owner, /mob/proc/update_hair), 1, TIMER_UNIQUE) - . = ..() - //Head markings, duplicated (sadly) below. - for(var/M in markings) - var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) - if (mark_style.draw_target == MARKING_TARGET_SKIN) - var/mark_color = markings[M] - var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) - //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky! - add_overlay(mark_s) //So when it's not on your body, it has icons - mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons - icon_cache_key += "[M][mark_color]" + addtimer(CALLBACK(last_owner, TYPE_PROC_REF(/mob, update_hair)), 1, TIMER_UNIQUE) + return ..() /obj/item/organ/external/proc/update_limb_icon_file() - if(!BP_IS_PROSTHETIC(src) && (status & ORGAN_MUTATED)) + if(!bodytype) // This should not happen. + icon = initial(icon) + else if(!BP_IS_PROSTHETIC(src) && (status & ORGAN_MUTATED)) icon = bodytype.get_base_icon(owner, get_deform = TRUE) else if(owner && (limb_flags & ORGAN_FLAG_SKELETAL)) icon = bodytype.get_skeletal_icon(owner) else icon = bodytype.get_base_icon(owner) -/obj/item/organ/external/on_update_icon(var/regenerate = 0) - . = ..() - icon_state = organ_tag - icon_cache_key = "[icon_state]_[species.name][bodytype.name][render_alpha]" +var/global/list/organ_icon_cache = list() +/obj/item/organ/external/proc/generate_mob_icon() - update_limb_icon_file() - mob_icon = apply_colouration(new/icon(icon, icon_state)) - - //Body markings, does not include head, duplicated (sadly) above. - for(var/M in markings) - var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) - if (mark_style.draw_target == MARKING_TARGET_SKIN) - var/mark_color = markings[M] - var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) - //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky! - add_overlay(mark_s) //So when it's not on your body, it has icons - mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons - icon_cache_key += "[M][mark_color]" + // Generate base icon with colour and tone. + var/icon/ret = bodytype.apply_limb_colouration(src, new /icon(icon, icon_state)) + if(status & ORGAN_DEAD) + ret.ColorTone(rgb(10,50,0)) + ret.SetIntensity(0.7) + if(skin_tone) + if(skin_tone >= 0) + ret.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD) + else + ret.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT) + if((bodytype.appearance_flags & HAS_SKIN_COLOR) && skin_colour) + ret.Blend(skin_colour, skin_blend) + // Body markings, hair, lips, etc. + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = resolve_accessory_to_decl(accessory) + if(istype(accessory_decl) && !accessory_decl.sprite_overlay_layer) + ret.Blend(accessory_decl.get_cached_accessory_icon(src, draw_accessories[accessory] || COLOR_WHITE), accessory_decl.layer_blend) if(render_alpha < 255) - mob_icon += rgb(,,,render_alpha) + ret += rgb(,,,render_alpha) + global.organ_icon_cache[_icon_cache_key] = ret + return ret - icon = mob_icon +/obj/item/organ/external/proc/get_mob_overlays() + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = resolve_accessory_to_decl(accessory) + if(istype(accessory_decl) && !isnull(accessory_decl.sprite_overlay_layer)) + var/image/accessory_image = image(accessory_decl.get_cached_accessory_icon(src, draw_accessories[accessory] || COLOR_WHITE)) + if(accessory_decl.sprite_overlay_layer != FLOAT_LAYER) + accessory_image.layer = accessory_decl.sprite_overlay_layer + if(accessory_decl.layer_blend != ICON_OVERLAY) + accessory_image.blend_mode = iconMode2blendMode(accessory_decl.layer_blend) + LAZYADD(., accessory_image) -/obj/item/organ/external/proc/get_icon() - update_icon() - return mob_icon +/obj/item/organ/external/proc/get_icon_cache_key_components() + . = list("[icon_state]_[species.name]_[bodytype?.name || "BAD_BODYTYPE"]_[render_alpha]_[icon]") + if(status & ORGAN_DEAD) + . += "_dead" + . += "_tone_[skin_tone]_color_[skin_colour]_[skin_blend]" + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = resolve_accessory_to_decl(accessory) + if(istype(accessory_decl) && !accessory_decl.sprite_overlay_layer) + . += "_[accessory]_[draw_accessories[accessory]]" -// Returns an image for use by the human health dolly HUD element. -// If the limb is in pain, it will be used as a minimum damage -// amount to represent the obfuscation of being in agonizing pain. +/obj/item/organ/external/proc/clear_sprite_accessories(var/skip_update = FALSE) + if(!length(_sprite_accessories)) + return + LAZYCLEARLIST(_sprite_accessories) + if(!skip_update) + if(owner) + owner.update_body() + update_icon() + +/obj/item/organ/external/proc/clear_sprite_accessories_by_category(var/accessory_category, var/skip_update = FALSE) + var/list/category_accessories = get_sprite_accessories_by_category(accessory_category) + category_accessories?.Cut() + _sprite_accessories?[accessory_category] = null + if(skip_update) + return + owner?.update_body(update_icons = TRUE) + +/obj/item/organ/external/proc/get_sprite_accessories_by_category(var/accessory_category) + return LAZYACCESS(_sprite_accessories, accessory_category) + +/obj/item/organ/external/proc/get_sprite_accessory_categories() + . = list() + for(var/category_type in _sprite_accessories) + . += GET_DECL(category_type) + +/obj/item/organ/external/proc/get_sprite_accessory_by_category(var/accessory_category) + var/list/accessories = get_sprite_accessories_by_category(accessory_category) + if(length(accessories)) + return accessories[1] + +/obj/item/organ/external/proc/get_sprite_accessory_value(var/accessory_type) + var/decl/sprite_accessory/accessory = GET_DECL(accessory_type) + var/list/accessories = istype(accessory) && LAZYACCESS(_sprite_accessories, accessory.accessory_category) + if(accessories) + return accessories[accessory_type] + +/obj/item/organ/external/proc/set_sprite_accessory(var/accessory_type, var/accessory_category, var/accessory_color, var/skip_update = FALSE) + + var/list/refresh_accessories = list() + + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory_type) + if(!accessory_category) + if(!accessory_decl) + return + accessory_category = accessory_decl.accessory_category + + var/decl/sprite_accessory_category/accessory_cat_decl = GET_DECL(accessory_category) + + var/list/accessories = LAZYACCESS(_sprite_accessories, accessory_category) + if(!accessories) + accessories = list() + LAZYSET(_sprite_accessories, accessory_category, accessories) + + if(!accessory_type) + var/decl/sprite_accessory_category/accessory_cat = GET_DECL(accessory_category) + accessory_type = accessory_cat?.default_accessory + if(!accessory_type) + return + accessory_decl = GET_DECL(accessory_type) + + if(accessory_color) + if(!accessory_decl.accessory_is_available(owner, species, bodytype)) + return + if(LAZYACCESS(accessories, accessory_type) == accessory_color) + return + if(accessory_cat_decl.single_selection) + refresh_accessories |= accessories + accessories.Cut() + LAZYSET(accessories, accessory_type, accessory_color) + refresh_accessories += accessory_decl + else + if(!(accessory_type in accessories)) + return + remove_sprite_accessory(accessory_type, TRUE) + + if(!skip_update) + if(owner && length(refresh_accessories)) + for(var/refresh_accessory_type in refresh_accessories) + var/decl/sprite_accessory/refresh_accessory = GET_DECL(refresh_accessory_type) + if(refresh_accessory) + refresh_accessory.refresh_mob(owner) + update_icon() + +/obj/item/organ/external/proc/get_heritable_sprite_accessories() + for(var/accessory_category in _sprite_accessories) + var/list/draw_accessories = _sprite_accessories[accessory_category] + for(var/accessory in draw_accessories) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + if(accessory_decl?.is_heritable) + LAZYSET(., accessory, draw_accessories[accessory]) + +/obj/item/organ/external/proc/set_sprite_accessory_by_category(accessory_type, accessory_category, accessory_color, preserve_colour = TRUE, preserve_type = TRUE, skip_update) + if(!accessory_category) + return + if(istype(accessory_type, /decl/sprite_accessory)) + var/decl/accessory_decl = accessory_type + accessory_type = accessory_decl.type + + // If there is a pre-existing sprite accessory to replace, we may want to keep the old colour value. + var/do_update_if_returning = FALSE + var/replacing_type = get_sprite_accessory_by_category(accessory_category) + if(replacing_type) + + if(preserve_colour && !accessory_color) + accessory_color = get_sprite_accessory_value(replacing_type) + + // We may only be setting colour, in which case we don't bother with a removal. + if(preserve_type && !accessory_type) + accessory_type = replacing_type + else if (accessory_type != replacing_type) + remove_sprite_accessory(replacing_type, TRUE) + + // We have already done our removal above and have nothing further to set below. + if(!accessory_color && !accessory_type) + if(!skip_update) + if(owner) + var/decl/sprite_accessory/refresh_accessory = GET_DECL(replacing_type || accessory_category) + if(refresh_accessory) + refresh_accessory.refresh_mob(owner) + update_icon() + return do_update_if_returning + + // We need to now set a replacement accessory type down the chain. + return set_sprite_accessory(accessory_type, accessory_category, accessory_color, skip_update) + +/obj/item/organ/external/proc/remove_sprite_accessory(var/accessory_type, var/skip_update = FALSE) + if(!accessory_type) + return + var/decl/sprite_accessory/removing_accessory = GET_DECL(accessory_type) + var/list/removing = LAZYACCESS(_sprite_accessories, removing_accessory.accessory_category) + if(!LAZYLEN(removing)) + return + LAZYREMOVE(removing, accessory_type) + if(!length(removing)) + LAZYREMOVE(_sprite_accessories, removing_accessory.accessory_category) + if(!skip_update) + if(owner && removing_accessory) + removing_accessory.refresh_mob(owner) + update_icon() + +/obj/item/organ/external/on_update_icon() + . = ..() + + if(!istext(organ_tag)) // how?? this happened on Scav in relation to runtimes in update_limb_icon_file() so might be unneeded with that fixed + return + + // Update our cache key and refresh or create our base icon. + update_limb_icon_file() + if(icon_state != organ_tag) + icon_state = organ_tag + + _icon_cache_key = jointext(get_icon_cache_key_components(), null) + var/icon/mob_icon = global.organ_icon_cache[_icon_cache_key] || generate_mob_icon() + if(icon != mob_icon) + icon = mob_icon + + // We may have some overlays of our own (hair, glowing eyes, layered markings) + var/list/additional_overlays = get_mob_overlays() + if(length(additional_overlays)) + for(var/new_overlay in additional_overlays) + add_overlay(new_overlay) + + // If we've been severed, we may contain child organs that should be rendered (feet on legs etc). + if(!owner && length(contents)) + for(var/obj/item/organ/external/child in contents) + child.update_icon() + child.compile_overlays() // We need the appearance immediately. + add_overlay(child) // Global scope, used in code below. var/global/list/flesh_hud_colours = list("#00ff00","#aaff00","#ffff00","#ffaa00","#ff0000","#aa0000","#660000") var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888","#666666","#444444","#222222","#000000") +// Returns an image for use by the human health dolly HUD element. +// If the limb is in pain, it will be used as a minimum damage +// amount to represent the obfuscation of being in agonizing pain. /obj/item/organ/external/proc/get_damage_hud_image() + if(skip_body_icon_draw) + return null + // Generate the greyscale base icon and cache it for later. - // icon_cache_key is set by any get_icon() calls that are made. + // _icon_cache_key is set by any get_icon() calls that are made. // This looks convoluted, but it's this way to avoid icon proc calls. if(!hud_damage_image) - var/cache_key = "dambase-[icon_cache_key]" - if(!icon_cache_key || !limb_icon_cache[cache_key]) - limb_icon_cache[cache_key] = icon(get_icon(), null, SOUTH) + update_icon() + var/cache_key = "dambase-[_icon_cache_key]" + if(!cache_key || !limb_icon_cache[cache_key]) + limb_icon_cache[cache_key] = icon(icon, null, SOUTH) var/image/temp = image(limb_icon_cache[cache_key]) if(species) // Calculate the required colour matrix. @@ -130,31 +324,6 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888" hud_damage_image.color = hud_colours[max(1,min(CEILING(dam_state*hud_colours.len),hud_colours.len))] return hud_damage_image -/obj/item/organ/external/proc/apply_colouration(var/icon/applying) - if(!species) - PRINT_STACK_TRACE("External organ '[src]' doesn't have a species!") - if(!bodytype) - PRINT_STACK_TRACE("External organ '[src]' doesn't have a bodytype!") - - applying = bodytype.apply_limb_colouration(src, applying) - if(status & ORGAN_DEAD) - icon_cache_key += "_dead" - applying.ColorTone(rgb(10,50,0)) - applying.SetIntensity(0.7) - - if(skin_tone) - if(skin_tone >= 0) - applying.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD) - else - applying.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT) - icon_cache_key += "_tone_[skin_tone]" - if(bodytype.appearance_flags & HAS_SKIN_COLOR) - if(skin_colour) - applying.Blend(skin_colour, skin_blend) - icon_cache_key += "_color_[skin_colour]_[skin_blend]" - - return applying - /obj/item/organ/external/proc/bandage_level() if(damage_state_text() == "00") return 0 @@ -167,4 +336,27 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888" else if (burn_dam + brute_dam < (max_damage * 0.75 / 2)) . = 2 else - . = 3 \ No newline at end of file + . = 3 + +/obj/item/organ/external/proc/resolve_accessory_to_decl(var/decl/sprite_accessory/accessory_style) + if(ispath(accessory_style)) + accessory_style = GET_DECL(accessory_style) + // Check if this style is permitted for this species, period. + if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, bodytype)) + return null + // Check if we are concealed (long hair under a hat for example). + if(accessory_style.is_hidden(src)) + return accessory_style.get_hidden_substitute() + return accessory_style + +/obj/item/organ/external/proc/sanitize_sprite_accessories(var/skip_update = FALSE) + for(var/acc_cat in _sprite_accessories) + for(var/accessory in _sprite_accessories[acc_cat]) + var/decl/sprite_accessory/accessory_style = GET_DECL(accessory) + if(!istype(accessory_style) || !accessory_style?.accessory_is_available(owner, species, bodytype)) + _sprite_accessories[acc_cat] -= accessory + . = TRUE + if(.) + _icon_cache_key = null + if(!skip_update) + update_icon() diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index 14ebb37894a..b9f9b78c667 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -13,26 +13,33 @@ encased = "skull" artery_name = "carotid artery" cavity_name = "cranial" - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE - var/draw_eyes = TRUE var/glowing_eyes = FALSE var/can_intake_reagents = TRUE - var/has_lips = TRUE var/forehead_graffiti var/graffiti_style -/obj/item/organ/external/head/proc/get_eye_overlay() - if(glowing_eyes || owner?.has_chemical_effect(CE_GLOWINGEYES, 1)) - var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes) - if(eyes) - return eyes.get_special_overlay() +SAVED_VAR(/obj/item/organ/external/head, glowing_eyes) +SAVED_VAR(/obj/item/organ/external/head, can_intake_reagents) +SAVED_VAR(/obj/item/organ/external/head, forehead_graffiti) +SAVED_VAR(/obj/item/organ/external/head, graffiti_style) -/obj/item/organ/external/head/proc/get_eyes() - var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes) - if(eyes) - return eyes.get_onhead_icon() +/obj/item/organ/external/head/proc/get_organ_eyes_overlay() + if(!glowing_eyes && !owner?.has_chemical_effect(CE_GLOWINGEYES, 1)) + return + var/obj/item/organ/internal/eyes/eyes = get_eyes_organ() + var/icon/eyes_icon = eyes?.get_onhead_icon() // refreshes cache key + if(!eyes_icon) + return + var/cache_key = "[eyes.last_eye_cache_key]-glow" + if(!global.eye_icon_cache[cache_key]) + global.eye_icon_cache[cache_key] = emissive_overlay(eyes_icon, "") + return global.eye_icon_cache[cache_key] + +// Let people with mouth slots pick things up. +/obj/item/organ/external/head/get_manual_dexterity() + . = ..() | DEXTERITY_BASE /obj/item/organ/external/head/examine(mob/user) . = ..() @@ -77,9 +84,7 @@ /obj/item/organ/external/head/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE) . = ..() - has_lips = (bodytype.appearance_flags & HAS_LIPS) can_intake_reagents = !(bodytype.body_flags & BODY_FLAG_NO_EAT) - draw_eyes = bodytype.has_eyes /obj/item/organ/external/head/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb) . = ..() @@ -90,75 +95,25 @@ if (burn_dam > 40) disfigure(BURN) -/obj/item/organ/external/head/on_update_icon() +/obj/item/organ/external/head/proc/get_eyes_organ() + RETURN_TYPE(/obj/item/organ/internal/eyes) + if(owner) + return owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes) + return locate(/obj/item/organ/internal/eyes) in contents - ..() +/obj/item/organ/external/head/get_icon_cache_key_components() + . = ..() + . += "_eyes_[bodytype.eye_icon || "none"]_[get_eyes_organ()?.eye_colour || "none"]" - if(owner) - // Base eye icon. - if(draw_eyes) - var/icon/I = get_eyes() - if(I) - overlays |= I - mob_icon.Blend(I, ICON_OVERLAY) - - // Floating eyes or other effects. - var/image/eye_glow = get_eye_overlay() - if(eye_glow) - overlays |= eye_glow - - if(owner.lip_style && (bodytype.appearance_flags & HAS_LIPS)) - var/icon/lip_icon = new/icon(bodytype.get_lip_icon(owner) || 'icons/mob/human_races/species/lips.dmi', "lipstick_s") - lip_icon.Blend(owner.lip_style, ICON_MULTIPLY) - overlays |= lip_icon - mob_icon.Blend(lip_icon, ICON_OVERLAY) - - overlays |= get_hair_icon() - - return mob_icon - -/obj/item/organ/external/head/proc/get_hair_icon() - var/image/res = image(bodytype.icon_template,"") - if(!owner) - return res - - if(owner.f_style) - var/decl/sprite_accessory/facial_hair_style = GET_DECL(owner.f_style) - if(facial_hair_style?.accessory_is_available(owner, species, bodytype)) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(owner.facial_hair_colour && facial_hair_style.do_colouration) - facial_s.Blend(owner.facial_hair_colour, facial_hair_style.blend) - res.overlays |= facial_s - - if(owner.h_style) - var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style) - var/obj/item/head = owner.get_equipped_item(slot_head_str) - if(head && (head.flags_inv & BLOCK_HEAD_HAIR)) - if(!(hair_style.flags & VERY_SHORT)) - hair_style = GET_DECL(/decl/sprite_accessory/hair/short) - if(hair_style?.accessory_is_available(owner, species, bodytype)) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration && hair_colour) - hair_s.Blend(hair_colour, hair_style.blend) - res.overlays |= hair_s - - for (var/M in markings) - var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) - if (mark_style.draw_target == MARKING_TARGET_HAIR) - - var/mark_color - if (!mark_style.do_colouration && owner.h_style) - var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style) - if ((~hair_style.flags & HAIR_BALD) && hair_colour) - mark_color = hair_colour - else //only baseline human skin tones; others will need species vars for coloration - mark_color = rgb(200 + skin_tone, 150 + skin_tone, 123 + skin_tone) - else - mark_color = markings[M] - res.overlays |= mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) - icon_cache_key += "[M][mark_color]" - - return res - -/obj/item/organ/external/head/no_eyes - draw_eyes = FALSE +/obj/item/organ/external/head/generate_mob_icon() + var/icon/ret = ..() + var/icon/eyes_icon = get_eyes_organ()?.get_onhead_icon() + if(eyes_icon) + ret.Blend(eyes_icon, ICON_OVERLAY) + return ret + +/obj/item/organ/external/head/get_mob_overlays() + . = ..() + var/image/eye_glow = get_organ_eyes_overlay() + if(eye_glow) + LAZYADD(., eye_glow) diff --git a/code/modules/organs/external/insectoid.dm b/code/modules/organs/external/insectoid.dm index 019c92f3eb7..b139a06b456 100644 --- a/code/modules/organs/external/insectoid.dm +++ b/code/modules/organs/external/insectoid.dm @@ -39,9 +39,40 @@ /obj/item/organ/external/head/insectoid name = "head" - has_lips = 0 encased = "carapace" /obj/item/organ/external/chest/insectoid name = "thorax" encased = "carapace" + +/obj/item/organ/external/hand/insectoid/midlimb + name = "central grasper" + joint = "central wrist" + organ_tag = BP_M_HAND + parent_organ = BP_CHEST + amputation_point = "central wrist" + icon_position = 0 + encased = "carapace" + gripper_type = /datum/inventory_slot/gripper/midlimb + +/obj/item/organ/external/hand/insectoid/upper + name = "left raptorial" + joint = "upper left wrist" + amputation_point = "upper left shoulder" + organ_tag = BP_L_HAND_UPPER + parent_organ = BP_CHEST + gripper_type = /datum/inventory_slot/gripper/upper_left_hand + +/obj/item/organ/external/hand/insectoid/upper/get_manual_dexterity() + return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) + +/obj/item/organ/external/hand/right/insectoid/upper + name = "right raptorial" + joint = "upper right wrist" + amputation_point = "upper right shoulder" + organ_tag = BP_R_HAND_UPPER + parent_organ = BP_CHEST + gripper_type = /datum/inventory_slot/gripper/upper_right_hand + +/obj/item/organ/external/hand/right/insectoid/upper/get_manual_dexterity() + return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) diff --git a/code/modules/organs/external/tail.dm b/code/modules/organs/external/tail.dm index 39e3ab99ee5..fc711d6b8c3 100644 --- a/code/modules/organs/external/tail.dm +++ b/code/modules/organs/external/tail.dm @@ -1,12 +1,11 @@ /obj/item/organ/external/tail organ_tag = BP_TAIL - render_alpha = 0 name = "tail" max_damage = 20 min_broken_damage = 10 w_class = ITEM_SIZE_NORMAL - body_part = SLOT_LOWER_BODY + body_part = SLOT_TAIL parent_organ = BP_GROIN joint = "tail" amputation_point = "tail" @@ -14,6 +13,7 @@ arterial_bleed_severity = 0.3 limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE skip_body_icon_draw = TRUE + force_limb_dir = WEST /// Name of tail state in species effects icon file. Used as a prefix for animated states. var/tail @@ -32,12 +32,12 @@ var/mob/living/carbon/human/H = owner if(!(. = ..())) return - if(update_icon && !istype(H) && H != owner) + if(update_icon && !istype(H) && !QDELETED(H) && H != owner) H.update_tail_showing(FALSE) /obj/item/organ/external/tail/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) . = ..() - if(update_icon && istype(owner)) + if(update_icon && istype(owner) && !QDELETED(owner)) owner.update_tail_showing(FALSE) /obj/item/organ/external/tail/proc/get_tail() diff --git a/code/modules/organs/external/wounds/wound.dm b/code/modules/organs/external/wounds/wound.dm index 06d0648078f..54024485b6f 100644 --- a/code/modules/organs/external/wounds/wound.dm +++ b/code/modules/organs/external/wounds/wound.dm @@ -29,6 +29,23 @@ var/tmp/list/desc_list = list() var/tmp/list/damage_list = list() +SAVED_VAR(/datum/wound, current_stage) +SAVED_VAR(/datum/wound, damage) +SAVED_VAR(/datum/wound, bleed_timer) +SAVED_VAR(/datum/wound, bleed_threshold) +SAVED_VAR(/datum/wound, min_damage) +SAVED_VAR(/datum/wound, bandaged) +SAVED_VAR(/datum/wound, clamped) +SAVED_VAR(/datum/wound, salved) +SAVED_VAR(/datum/wound, disinfected) +SAVED_VAR(/datum/wound, created) +SAVED_VAR(/datum/wound, amount) +SAVED_VAR(/datum/wound, germ_level) +SAVED_VAR(/datum/wound, parent_organ) +SAVED_VAR(/datum/wound, embedded_objects) +SAVED_VAR(/datum/wound, desc_list) +SAVED_VAR(/datum/wound, damage_list) + /datum/wound/New(var/damage, var/obj/item/organ/external/organ = null, var/surgical) created = world.time @@ -169,6 +186,9 @@ // return amount of healing still leftover, can be used for other wounds return amount +/datum/wound/proc/is_open() + return current_stage <= max_bleeding_stage && !bandaged + // opens the wound again /datum/wound/proc/open_wound(damage) src.damage += damage @@ -198,12 +218,11 @@ return 1 /datum/wound/proc/bleeding() - for(var/obj/item/thing in embedded_objects) - if(thing.w_class > ITEM_SIZE_SMALL) - return FALSE - if(bandaged || clamped) - return FALSE - return ((bleed_timer > 0 || wound_damage() > bleed_threshold) && current_stage <= max_bleeding_stage) + . = !clamped && is_open() && (bleed_timer > 0 || wound_damage() > bleed_threshold) + if(. && length(embedded_objects)) + for(var/obj/item/thing in embedded_objects) + if(thing.w_class > ITEM_SIZE_SMALL) + return FALSE /datum/wound/proc/is_surgical() return 0 \ No newline at end of file diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index 009577fb2d4..b07a455e703 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -24,6 +24,9 @@ var/min_bruised_damage = 10 // Damage before considered bruised var/damage_reduction = 0.5 //modifier for internal organ injury + /// Whether or not we should try to transfer a brainmob when removed or replaced in a mob. + var/transfer_brainmob_with_organ = FALSE + /obj/item/organ/internal/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) if(!alive_icon) alive_icon = initial(icon_state) @@ -54,6 +57,9 @@ affected.update_internal_organs_cost() /obj/item/organ/internal/do_uninstall(in_place, detach, ignore_children, update_icon) + + var/mob/living/victim = owner // cleared in parent proc + //Make sure we're removed from whatever parent organ we have, either in a mob or not var/obj/item/organ/external/affected if(owner) @@ -66,6 +72,7 @@ if(affected) LAZYREMOVE(affected.internal_organs, src) affected.update_internal_organs_cost() + . = ..() //Remove it from the implants if we are fully removing, or add it to the implants if we are detaching @@ -75,6 +82,9 @@ else LAZYREMOVE(affected.implants, src) + if(transfer_brainmob_with_organ && istype(victim)) + transfer_key_to_brainmob(victim, update_brainmob = TRUE) + //#TODO: Remove rejuv hacks /obj/item/organ/internal/remove_rejuv() do_uninstall() @@ -94,8 +104,8 @@ /obj/item/organ/internal/proc/is_bruised() return damage >= min_bruised_damage -/obj/item/organ/internal/proc/set_max_damage(var/ndamage) - max_damage = FLOOR(ndamage) +/obj/item/organ/internal/set_max_damage(var/ndamage) + . = ..() min_broken_damage = FLOOR(0.75 * max_damage) min_bruised_damage = FLOOR(0.25 * max_damage) if(damage_threshold_count > 0) @@ -106,9 +116,9 @@ /obj/item/organ/internal/proc/take_internal_damage(amount, var/silent=0) if(BP_IS_PROSTHETIC(src)) - damage = clamp(0, src.damage + (amount * 0.8), max_damage) + damage = clamp(src.damage + (amount * 0.8), 0, max_damage) else - damage = clamp(0, src.damage + amount, max_damage) + damage = clamp(src.damage + amount, 0, max_damage) //only show this if the organ is not robotic if(owner && can_feel_pain() && parent_organ && (amount > 5 || prob(10))) @@ -147,6 +157,9 @@ if(owner && damage && !(status & ORGAN_DEAD)) handle_damage_effects() +/obj/item/organ/internal/proc/has_limited_healing() + return !min_regeneration_cutoff_threshold || past_damage_threshold(min_regeneration_cutoff_threshold) + /obj/item/organ/internal/proc/handle_damage_effects() SHOULD_CALL_PARENT(TRUE) if(organ_can_heal()) @@ -154,9 +167,7 @@ // Determine the lowest our damage can go with the current state. // If we're under the min regeneration cutoff threshold, we can always heal to zero. // If we don't have one set, we can only heal to the nearest threshold value. - var/min_heal_val = 0 - if(!min_regeneration_cutoff_threshold || past_damage_threshold(min_regeneration_cutoff_threshold)) - min_heal_val = (get_current_damage_threshold() * damage_threshold_value) + var/min_heal_val = has_limited_healing() ? (get_current_damage_threshold() * damage_threshold_value) : 0 // We clamp/round here so that we don't accidentally heal past the threshold and // cheat our way into a full second threshold of healing. @@ -253,3 +264,37 @@ var/obj/item/organ/O = last_owner.get_organ(parent_organ) if(O) O.vital_to_owner = null + +// Stub to allow brain interfaces to return their wrapped brainmob. +/obj/item/organ/internal/proc/get_brainmob(var/create_if_missing = FALSE) + return + +/obj/item/organ/internal/proc/transfer_key_to_brainmob(var/mob/living/M, var/update_brainmob = TRUE) + var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE) + if(brainmob) + transfer_key_from_mob_to_mob(M, brainmob) + if(update_brainmob) + brainmob.SetName(M.real_name) + brainmob.real_name = M.real_name + brainmob.dna = M.dna?.Clone() + brainmob.languages = M.languages?.Copy() + brainmob.default_language = M.default_language + to_chat(brainmob, SPAN_NOTICE("You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].")) + callHook("debrain", list(brainmob)) + return TRUE + return FALSE + +/obj/item/organ/internal/proc/get_synthetic_owner_name() + return "Cyborg" + +/obj/item/organ/internal/preserve_in_cryopod(var/obj/machinery/cryopod/pod) + var/mob/living/brainmob = get_brainmob() + return brainmob?.key + +// This might need revisiting to stop people successfully implanting brains in groins and transferring minds. +/obj/item/organ/internal/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) + . = ..() + if(transfer_brainmob_with_organ && istype(owner)) + var/mob/living/brainmob = get_brainmob(create_if_missing = FALSE) + if(brainmob?.key) + transfer_key_from_mob_to_mob(brainmob, owner) diff --git a/code/modules/organs/internal/appendix.dm b/code/modules/organs/internal/appendix.dm index 53822e93085..10e38ee833e 100644 --- a/code/modules/organs/internal/appendix.dm +++ b/code/modules/organs/internal/appendix.dm @@ -5,6 +5,8 @@ organ_tag = BP_APPENDIX var/inflamed = 0 +SAVED_VAR(/obj/item/organ/internal/appendix, inflamed) + /obj/item/organ/internal/appendix/on_update_icon() ..() if(inflamed) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 3d7801a5ff6..e0a12fddcfb 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -9,51 +9,69 @@ throwforce = 1 throw_speed = 3 throw_range = 5 - origin_tech = "{'biotech':3}" + origin_tech = @'{"biotech":3}' attack_verb = list("attacked", "slapped", "whacked") relative_size = 85 damage_reduction = 0 scale_max_damage_to_species_health = FALSE - var/can_use_mmi = TRUE - var/mob/living/carbon/brain/brainmob = null + transfer_brainmob_with_organ = TRUE + var/can_use_brain_interface = TRUE var/should_announce_brain_damage = TRUE var/oxygen_reserve = 6 + VAR_PRIVATE/mob/living/_brainmob = /mob/living/brain + +SAVED_VAR(/obj/item/organ/internal/brain, _brainmob) +SAVED_VAR(/obj/item/organ/internal/brain, oxygen_reserve) + +/obj/item/organ/internal/brain/get_brainmob(var/create_if_missing = FALSE) + if(!istype(_brainmob) && create_if_missing) + initialize_brainmob() + if(istype(_brainmob)) + return _brainmob + +/obj/item/organ/internal/brain/Initialize() + . = ..() + if(species) + set_max_damage(species.total_health) + else + set_max_damage(200) + +/obj/item/organ/internal/brain/proc/initialize_brainmob() + if(istype(_brainmob)) + return + if(!ispath(_brainmob)) + _brainmob = initial(_brainmob) + if(ispath(_brainmob)) + _brainmob = new _brainmob(src) + else + _brainmob = null /obj/item/organ/internal/brain/getToxLoss() return 0 /obj/item/organ/internal/brain/set_species(species_name) . = ..() + icon_state = "brain-prosthetic" if(species) set_max_damage(species.total_health) else set_max_damage(200) /obj/item/organ/internal/brain/Destroy() - QDEL_NULL(brainmob) + if(istype(_brainmob)) + QDEL_NULL(_brainmob) . = ..() -/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) - - if(!brainmob) - brainmob = new(src) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.timeofhostdeath = H.timeofdeath - - if(H.mind) - H.mind.transfer_to(brainmob) - - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].") - callHook("debrain", list(brainmob)) - -/obj/item/organ/internal/brain/examine(mob/user) +/obj/item/organ/internal/brain/examine(mob/user, var/distance) . = ..() - if(brainmob && brainmob.client)//if thar be a brain inside... the brain. + if(distance <= 1) + show_brain_status(user) + +/obj/item/organ/internal/brain/proc/show_brain_status(mob/user) + if(istype(_brainmob) && _brainmob?.client) //if thar be a brain inside... the brain. to_chat(user, "You can feel the small spark of life still left in this one.") else - to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later..") + to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later.") /obj/item/organ/internal/brain/do_install(mob/living/carbon/target, affected, in_place, update_icon, detached) if(!(. = ..())) @@ -67,21 +85,6 @@ if(!(. = ..())) return -/obj/item/organ/internal/brain/on_remove_effects() - if(istype(owner)) - transfer_identity(owner) - return ..() - -/obj/item/organ/internal/brain/on_add_effects() - if(brainmob) - if(brainmob.mind) - if(owner.key) - owner.ghostize() - brainmob.mind.transfer_to(owner) - else - owner.key = brainmob.key - return ..() - /obj/item/organ/internal/brain/can_recover() return !(status & ORGAN_DEAD) @@ -100,7 +103,10 @@ alert(owner, "You have taken massive brain damage! You will not be able to remember the events leading up to your injury.", "Brain Damaged") /obj/item/organ/internal/brain/organ_can_heal() - return (damage && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN)) || ..() + return (damage && owner && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN)) || ..() + +/obj/item/organ/internal/brain/has_limited_healing() + return (!owner || !GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN)) && ..() /obj/item/organ/internal/brain/get_organ_heal_amount() return 1 @@ -172,7 +178,7 @@ SET_STATUS_MAX(owner, STAT_PARA, damage_secondary) SET_STATUS_MAX(owner, STAT_WEAK, round(damage, 1)) if(prob(30)) - addtimer(CALLBACK(src, .proc/brain_damage_callback, damage), rand(6, 20) SECONDS, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(brain_damage_callback), damage), rand(6, 20) SECONDS, TIMER_UNIQUE) /obj/item/organ/internal/brain/proc/brain_damage_callback(var/damage) //Confuse them as a somewhat uncommon aftershock. Side note: Only here so a spawn isn't used. Also, for the sake of a unique timer. if(!QDELETED(owner)) @@ -188,7 +194,7 @@ SET_STATUS_MAX(owner, STAT_STUN, 10) switch(rand(1, 3)) if(1) - owner.emote("twitch") + owner.emote(/decl/emote/visible/twitch) if(2 to 3) owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") ADJ_STATUS(owner, STAT_JITTER, 100) @@ -221,12 +227,14 @@ /obj/item/organ/internal/brain/surgical_fix(mob/user) var/blood_volume = owner.get_blood_oxygenation() if(blood_volume < BLOOD_VOLUME_SURVIVE) - to_chat(user, "Parts of [src] didn't survive the procedure due to lack of air supply!") + to_chat(user, SPAN_DANGER("Parts of \the [src] didn't survive the procedure due to lack of air supply!")) set_max_damage(FLOOR(max_damage - 0.25*damage)) heal_damage(damage) -/obj/item/organ/internal/brain/get_scarring_level() - . = (species.total_health - max_damage)/species.total_health - /obj/item/organ/internal/brain/get_mechanical_assisted_descriptor() - return "machine-interface [name]" \ No newline at end of file + return "machine-interface [name]" + +/obj/item/organ/internal/brain/die() + if(istype(_brainmob) && _brainmob.stat != DEAD) + _brainmob.death() + ..() diff --git a/code/modules/organs/internal/brain_computer.dm b/code/modules/organs/internal/brain_computer.dm new file mode 100644 index 00000000000..3d298b04b30 --- /dev/null +++ b/code/modules/organs/internal/brain_computer.dm @@ -0,0 +1,92 @@ +// Robobrain. +/obj/item/organ/internal/brain/robotic + name = "computer intelligence core" + desc = "The pinnacle of artifical intelligence technology, conveniently stored in a fist-sized cube." + icon = 'icons/obj/items/brain_interface_robotic.dmi' + origin_tech = @'{"engineering":4,"materials":4,"wormholes":2,"programming":4}' + material = /decl/material/solid/metal/steel + matter = list( + /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, + /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, + /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE + ) + can_use_brain_interface = FALSE + var/searching = FALSE + var/brain_name + +/obj/item/organ/internal/brain/robotic/handle_severe_damage() + return // TODO: computer maladies + +/obj/item/organ/internal/brain/robotic/handle_disabilities() + return // TODO: computer maladies + +/obj/item/organ/internal/brain/robotic/Initialize() + . = ..() + set_bodytype(/decl/bodytype/prosthetic/basic_human) + update_icon() + brain_name = "[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]" + SetName("[name] ([brain_name])") + +/obj/item/organ/internal/brain/robotic/initialize_brainmob() + ..() + if(istype(_brainmob)) + _brainmob.SetName(brain_name) + _brainmob.add_language(/decl/language/machine) + +/obj/item/organ/internal/brain/robotic/on_update_icon() + var/mob/living/brainmob = get_brainmob() + icon_state = get_world_inventory_state() + if(!searching) + if(!brainmob?.key || brainmob.stat == DEAD) + icon_state = "[icon_state]-dead" + else + icon_state = "[icon_state]-full" + +/obj/item/organ/internal/brain/robotic/attack_self(mob/user) + var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE) + if(!brainmob?.key && !searching) + to_chat(user, SPAN_NOTICE("You press the power button and boot up \the [src].")) + searching = TRUE + update_icon() + var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/machine_intelligence) + G.request_player(brainmob, "Someone is requesting a personality for a [name].", 1 MINUTE) + addtimer(CALLBACK(src, PROC_REF(reset_search)), 1 MINUTE) + return TRUE + . = ..() + +/obj/item/organ/internal/brain/robotic/proc/reset_search() + searching = FALSE + update_icon() + var/mob/living/brainmob = get_brainmob() + if(!brainmob?.key) + visible_message(SPAN_WARNING("\The [src] emits a series of loud beeps, indicating a failure to boot. Try again in a few minutes.")) + +/obj/item/organ/internal/brain/robotic/attack_ghost(var/mob/observer/ghost/user) + var/mob/living/brainmob = get_brainmob(create_if_missing = TRUE) + if(brainmob?.key) + to_chat(user, SPAN_WARNING("\The [src] is already inhabited; there's no room for you!")) + return TRUE + + var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/machine_intelligence) + if(G.assess_candidate(user)) + var/response = alert(user, "Are you sure you wish to possess \the [src]?", "Possess [capitalize(name)]", "Yes", "No") + if(response == "Yes" && brainmob && !brainmob?.key && G.assess_candidate(user)) + G.transfer_personality(user, brainmob) + +/obj/item/organ/internal/brain/robotic/show_brain_status(mob/user) + var/mob/living/brainmob = get_brainmob() + if(brainmob?.key) + switch(brainmob.stat) + if(CONSCIOUS) + if(!brainmob.client) + to_chat(user, SPAN_WARNING("It appears to be in stand-by mode.")) + if(UNCONSCIOUS) + to_chat(user, SPAN_WARNING("It doesn't seem to be responsive.")) + if(DEAD) + to_chat(user, SPAN_WARNING("It appears to be completely inactive.")) + else + to_chat(user, SPAN_WARNING("It appears to be completely inactive.")) + +/obj/item/organ/internal/brain/robotic/get_synthetic_owner_name() + return "Robot" diff --git a/code/modules/organs/internal/cell.dm b/code/modules/organs/internal/cell.dm new file mode 100644 index 00000000000..078c86a73bc --- /dev/null +++ b/code/modules/organs/internal/cell.dm @@ -0,0 +1,100 @@ +/obj/item/organ/internal/cell + name = "microbattery" + desc = "A small, powerful cell for use in fully prosthetic bodies." + icon_state = "cell" + dead_icon = "cell_bork" + organ_tag = BP_CELL + parent_organ = BP_CHEST + var/open + var/obj/item/cell/cell = /obj/item/cell/hyper + //at 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still + var/servo_cost = 0.8 + +SAVED_VAR(/obj/item/organ/internal/cell, open) +SAVED_VAR(/obj/item/organ/internal/cell, cell) +SAVED_VAR(/obj/item/organ/internal/cell, servo_cost) + +/obj/item/organ/internal/cell/Initialize() + if(ispath(cell)) + cell = new cell(src) + . = ..() + +/obj/item/organ/internal/cell/proc/percent() + if(!cell) + return 0 + return get_charge()/cell.maxcharge * 100 + +/obj/item/organ/internal/cell/proc/get_charge() + if(!cell) + return 0 + if(status & ORGAN_DEAD) + return 0 + return round(cell.charge*(1 - damage/max_damage)) + +/obj/item/organ/internal/cell/proc/checked_use(var/amount) + if(!is_usable()) + return FALSE + return cell && cell.checked_use(amount) + +/obj/item/organ/internal/cell/proc/use(var/amount) + if(!is_usable()) + return 0 + return cell && cell.use(amount) + +/obj/item/organ/internal/cell/proc/get_power_drain() + var/damage_factor = 1 + 10 * damage/max_damage + return servo_cost * damage_factor + +/obj/item/organ/internal/cell/Process() + ..() + if(!owner) + return + if(owner.stat == DEAD) //not a drain anymore + return + var/cost = get_power_drain() + if(world.time - owner.l_move_time < 15) + cost *= 2 + if(!checked_use(cost) && owner.isSynthetic()) + if(!owner.lying && !owner.buckled) + to_chat(owner, SPAN_WARNING("You don't have enough energy to function!")) + SET_STATUS_MAX(owner, STAT_PARA, 3) + +/obj/item/organ/internal/cell/emp_act(severity) + ..() + if(cell) + cell.emp_act(severity) + +/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user) + if(IS_SCREWDRIVER(W)) + if(open) + open = 0 + to_chat(user, SPAN_NOTICE("You screw the battery panel in place.")) + else + open = 1 + to_chat(user, SPAN_NOTICE("You unscrew the battery panel.")) + + if(IS_CROWBAR(W)) + if(open) + if(cell) + user.put_in_hands(cell) + to_chat(user, SPAN_NOTICE("You remove \the [cell] from \the [src].")) + cell = null + + if (istype(W, /obj/item/cell)) + if(open) + if(cell) + to_chat(user, SPAN_WARNING("There is a power cell already installed.")) + else if(user.try_unequip(W, src)) + cell = W + to_chat(user, SPAN_NOTICE("You insert \the [cell].")) + +/obj/item/organ/internal/cell/on_add_effects() + . = ..() + // This is very ghetto way of rebooting an IPC. TODO better way. + if(owner && owner.stat == DEAD) + owner.set_stat(CONSCIOUS) + owner.visible_message(SPAN_NOTICE("\The [owner] twitches visibly!")) + +/obj/item/organ/internal/cell/listen() + if(get_charge()) + return "faint hum of the power bank" diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index a995091805b..be89310b0ea 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -16,6 +16,8 @@ var/tmp/last_cached_eye_colour var/tmp/last_eye_cache_key +SAVED_VAR(/obj/item/organ/internal/eyes, eye_colour) + /obj/item/organ/internal/eyes/proc/get_innate_flash_protection() return bodytype.eye_innate_flash_protection @@ -33,40 +35,39 @@ /obj/item/organ/internal/eyes/robot/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) . = ..() - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow -/obj/item/organ/internal/eyes/proc/get_eye_cache_key() +/obj/item/organ/internal/eyes/proc/get_onhead_icon() last_cached_eye_colour = eye_colour last_eye_cache_key = "[type]-[bodytype.eye_icon]-[last_cached_eye_colour]-[bodytype.eye_offset]" - return last_eye_cache_key - -/obj/item/organ/internal/eyes/proc/get_onhead_icon() - var/cache_key = get_eye_cache_key() - if(!human_icon_cache[cache_key]) + if(!bodytype.eye_icon) + return + if(!global.eye_icon_cache[last_eye_cache_key]) var/icon/eyes_icon = icon(icon = bodytype.eye_icon, icon_state = "") if(bodytype.eye_offset) eyes_icon.Shift(NORTH, bodytype.eye_offset) if(bodytype.apply_eye_colour) eyes_icon.Blend(last_cached_eye_colour, bodytype.eye_blend) - human_icon_cache[cache_key] = eyes_icon - return human_icon_cache[cache_key] - -/obj/item/organ/internal/eyes/proc/get_special_overlay() - var/icon/I = get_onhead_icon() - if(I) - var/cache_key = "[last_eye_cache_key]-glow" - if(!human_icon_cache[cache_key]) - human_icon_cache[cache_key] = emissive_overlay(I, "") - return human_icon_cache[cache_key] + global.eye_icon_cache[last_eye_cache_key] = eyes_icon + return global.eye_icon_cache[last_eye_cache_key] /obj/item/organ/internal/eyes/proc/update_colour() if(!owner) return + // Update our eye colour. + var/new_eye_colour if(owner.has_chemical_effect(CE_GLOWINGEYES, 1)) - eye_colour = "#75bdd6" // blue glow, hardcoded for now. + new_eye_colour = "#75bdd6" // blue glow, hardcoded for now. else - eye_colour = owner.eye_colour + new_eye_colour = owner.get_eye_colour() + + if(new_eye_colour && eye_colour != new_eye_colour) + eye_colour = new_eye_colour + // Clear the head cache key so they can update their cached icon. + var/obj/item/organ/external/head/head = GET_EXTERNAL_ORGAN(owner, BP_HEAD) + if(istype(head)) + head._icon_cache_key = null /obj/item/organ/internal/eyes/take_internal_damage(amount, var/silent=0) var/oldbroken = is_broken() @@ -92,16 +93,16 @@ /obj/item/organ/internal/eyes/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) // Apply our eye colour to the target. if(istype(target) && eye_colour) - target.eye_colour = eye_colour + target.set_eye_colour(eye_colour, skip_update = TRUE) target.update_eyes(update_icons = update_icon) if(owner && BP_IS_PROSTHETIC(src)) - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow . = ..() /obj/item/organ/internal/eyes/do_uninstall(in_place, detach, ignore_children, update_icon) . = ..() - verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs -= /obj/item/organ/internal/eyes/proc/toggle_eye_glow // TODO: FIND A BETTER WAY TO DO THIS @@ -111,33 +112,33 @@ if(BP_IS_PROSTHETIC(src)) name = "optical sensor" icon = 'icons/obj/robot_component.dmi' - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow else name = initial(name) icon = initial(icon) - verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs -= /obj/item/organ/internal/eyes/proc/toggle_eye_glow update_colour() /obj/item/organ/internal/eyes/get_mechanical_assisted_descriptor() return "retinal overlayed [name]" -/obj/item/organ/internal/eyes/proc/change_eye_color() +/obj/item/organ/internal/eyes/proc/change_eye_color_verb() set name = "Change Eye Color" set desc = "Changes your robotic eye color." set category = "IC" set src in usr if(!owner || !BP_IS_PROSTHETIC(src)) - verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs -= /obj/item/organ/internal/eyes/proc/change_eye_color_verb return if(owner.incapacitated()) return - var/new_eyes = input("Please select eye color.", "Eye Color", owner.eye_colour) as color|null - if(new_eyes && do_after(owner, 10) && owner.change_eye_color(new_eyes)) + var/new_eyes = input("Please select eye color.", "Eye Color", owner.get_eye_colour()) as color|null + if(new_eyes && do_after(owner, 10) && owner.set_eye_colour(new_eyes)) update_colour() // Finally, update the eye icon on the mob. owner.try_refresh_visible_overlays() diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index b8a1e9d9d8b..360ca965ee1 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -5,16 +5,20 @@ icon_state = "heart-on" dead_icon = "heart-off" prosthetic_icon = "heart-prosthetic" + damage_reduction = 0.7 + relative_size = 5 + max_damage = 45 var/pulse = PULSE_NORM var/heartbeat = 0 var/beat_sound = 'sound/effects/singlebeat.ogg' var/tmp/next_blood_squirt = 0 - damage_reduction = 0.7 - relative_size = 5 - max_damage = 45 var/open var/list/external_pump +SAVED_VAR(/obj/item/organ/internal/heart, pulse) +SAVED_VAR(/obj/item/organ/internal/heart, open) +SAVED_VAR(/obj/item/organ/internal/heart, external_pump) + /obj/item/organ/internal/heart/on_holder_death(var/gibbed) pulse = PULSE_NONE update_icon() @@ -70,7 +74,7 @@ return else //and if it's beating, let's see if it should var/should_stop = prob(80) && owner.get_blood_circulation() < BLOOD_VOLUME_SURVIVE //cardiovascular shock, not enough liquid to pump - should_stop = should_stop || prob(max(0, owner.getBrainLoss() - owner.maxHealth * 0.75)) //brain failing to work heart properly + should_stop = should_stop || prob(max(0, owner.getBrainLoss() - owner.get_max_health() * 0.75)) //brain failing to work heart properly should_stop = should_stop || (prob(5) && pulse == PULSE_THREADY) //erratic heart patterns, usually caused by oxyloss if(should_stop) // The heart has stopped due to going into traumatic or cardiovascular shock. to_chat(owner, "Your heart has stopped!") @@ -189,6 +193,10 @@ return is_usable() && (pulse > PULSE_NONE || BP_IS_PROSTHETIC(src) || (owner.status_flags & FAKEDEATH)) /obj/item/organ/internal/heart/listen() + + if(!owner || (status & (ORGAN_DEAD|ORGAN_CUT_AWAY))) + return "no pulse" + if(BP_IS_PROSTHETIC(src) && is_working()) if(is_bruised()) return "sputtering pump" diff --git a/code/modules/organs/internal/kidneys.dm b/code/modules/organs/internal/kidneys.dm index 9e92768a937..38f436630bc 100644 --- a/code/modules/organs/internal/kidneys.dm +++ b/code/modules/organs/internal/kidneys.dm @@ -27,10 +27,10 @@ if(is_bruised()) if(prob(5) && REAGENT_VOLUME(reagents, /decl/material/solid/potassium) < 5) - reagents.add_reagent(/decl/material/solid/potassium, REM*5) + add_to_reagents(/decl/material/solid/potassium, REM*5) if(is_broken()) if(REAGENT_VOLUME(owner.reagents, /decl/material/solid/potassium) < 15) - owner.reagents.add_reagent(/decl/material/solid/potassium, REM*2) + owner.add_to_reagents(/decl/material/solid/potassium, REM*2) //If your kidneys aren't working, your body's going to have a hard time cleaning your blood. if(!GET_CHEMICAL_EFFECT(owner, CE_ANTITOX)) diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index a5e4ca1812e..a86981a099b 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -30,6 +30,9 @@ var/datum/reagents/metabolism/inhaled +SAVED_VAR(/obj/item/organ/internal/lungs, oxygen_deprivation) +SAVED_VAR(/obj/item/organ/internal/lungs, inhaled) + /obj/item/organ/internal/lungs/Destroy() QDEL_NULL(inhaled) . = ..() @@ -189,7 +192,7 @@ if(inhale_efficiency < 1) if(prob(20) && active_breathing) if(inhale_efficiency < 0.6) - owner.emote("gasp") + owner.emote(/decl/emote/audible/gasp) else if(prob(20)) to_chat(owner, SPAN_WARNING("It's hard to breathe...")) breath_fail_ratio = clamp(0,(1 - inhale_efficiency + breath_fail_ratio)/2,1) @@ -259,9 +262,9 @@ if(prob(15) && !owner.nervous_system_failure()) if(!owner.is_asystole()) if(active_breathing) - owner.emote("gasp") + owner.emote(/decl/emote/audible/gasp) else - owner.emote(pick("shiver","twitch")) + owner.emote(pick(/decl/emote/visible/shiver,/decl/emote/visible/twitch)) if(damage || GET_CHEMICAL_EFFECT(owner, CE_BREATHLOSS) || world.time > last_successful_breath + 2 MINUTES) owner.adjustOxyLoss(HUMAN_MAX_OXYLOSS*breath_fail_ratio) @@ -271,16 +274,16 @@ /obj/item/organ/internal/lungs/proc/handle_temperature_effects(datum/gas_mixture/breath) // Hot air hurts :( - var/cold_1 = species.get_species_temperature_threshold(COLD_LEVEL_1) - var/heat_1 = species.get_species_temperature_threshold(HEAT_LEVEL_1) + var/cold_1 = bodytype.get_body_temperature_threshold(COLD_LEVEL_1) + var/heat_1 = bodytype.get_body_temperature_threshold(HEAT_LEVEL_1) if((breath.temperature < cold_1 || breath.temperature > heat_1) && !(MUTATION_COLD_RESISTANCE in owner.mutations)) var/damage = 0 if(breath.temperature <= cold_1) if(prob(20)) to_chat(owner, "You feel your face freezing and icicles forming in your lungs!") - if(breath.temperature < species.get_species_temperature_threshold(COLD_LEVEL_3)) + if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_3)) damage = COLD_GAS_DAMAGE_LEVEL_3 - else if(breath.temperature < species.get_species_temperature_threshold(COLD_LEVEL_2)) + else if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_2)) damage = COLD_GAS_DAMAGE_LEVEL_2 else damage = COLD_GAS_DAMAGE_LEVEL_1 @@ -294,9 +297,9 @@ if(prob(20)) to_chat(owner, "You feel your face burning and a searing heat in your lungs!") - if(breath.temperature < species.get_species_temperature_threshold(HEAT_LEVEL_2)) + if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_2)) damage = HEAT_GAS_DAMAGE_LEVEL_1 - else if(breath.temperature < species.get_species_temperature_threshold(HEAT_LEVEL_3)) + else if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_3)) damage = HEAT_GAS_DAMAGE_LEVEL_2 else damage = HEAT_GAS_DAMAGE_LEVEL_3 @@ -322,13 +325,18 @@ // log_debug("Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]") owner.bodytemperature += temp_adj - else if(breath.temperature >= species.heat_discomfort_level) - species.get_environment_discomfort(owner,"heat") - else if(breath.temperature <= species.cold_discomfort_level) - species.get_environment_discomfort(owner,"cold") + else + // Get root bodytype as discomfort messages are not specifically related to the lungs. + var/decl/bodytype/root_bodytype = owner?.get_bodytype() || bodytype + if(root_bodytype) + if(breath.temperature >= root_bodytype.heat_discomfort_level) + root_bodytype.get_environment_discomfort(owner,"heat") + else if(breath.temperature <= root_bodytype.cold_discomfort_level) + root_bodytype.get_environment_discomfort(owner,"cold") /obj/item/organ/internal/lungs/listen() - if(owner.failed_last_breath || !active_breathing) + + if((status & (ORGAN_DEAD|ORGAN_CUT_AWAY)) || !owner || owner.failed_last_breath || !active_breathing) return "no respiration" if(BP_IS_PROSTHETIC(src)) diff --git a/code/modules/organs/internal/posibrain.dm b/code/modules/organs/internal/posibrain.dm deleted file mode 100644 index 8d3fc31f8a7..00000000000 --- a/code/modules/organs/internal/posibrain.dm +++ /dev/null @@ -1,333 +0,0 @@ -/obj/item/organ/internal/posibrain - name = "positronic brain" - desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." - icon = 'icons/obj/assemblies.dmi' - icon_state = "posibrain" - organ_tag = BP_POSIBRAIN - parent_organ = BP_CHEST - force = 1.0 - w_class = ITEM_SIZE_NORMAL - throwforce = 1 - throw_speed = 3 - throw_range = 5 - origin_tech = "{'engineering':4,'materials':4,'wormholes':2,'programming':4}" - attack_verb = list("attacked", "slapped", "whacked") - material = /decl/material/solid/metal/steel - matter = list( - /decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT, - /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, - /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, - /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE - ) - relative_size = 60 - req_access = list(access_robotics) - organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init - scale_max_damage_to_species_health = FALSE - - var/mob/living/carbon/brain/brainmob = null - var/searching = 0 - var/askDelay = 60 SECONDS - -/obj/item/organ/internal/posibrain/Initialize() - . = ..() - if(!brainmob && iscarbon(loc)) - init(loc) //Not sure why we're creating a braimob on load, and also why not installing it in the owner... - -/obj/item/organ/internal/posibrain/proc/init(var/mob/living/carbon/H) - if(brainmob) - return - brainmob = new(src) - if(istype(H)) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.add_language(/decl/language/human/common) - brainmob.add_language(/decl/language/binary) - -/obj/item/organ/internal/posibrain/Destroy() - QDEL_NULL(brainmob) - return ..() - -/obj/item/organ/internal/posibrain/attack_self(mob/user) - if(brainmob && !brainmob.key && searching == 0) - //Start the process of searching for a new user. - to_chat(user, "You carefully locate the manual activation switch and start the positronic brain's boot process.") - icon_state = "posibrain-searching" - src.searching = 1 - var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/positronic_brain) - G.request_player(brainmob, "Someone is requesting a personality for a positronic brain.", 60 SECONDS) - addtimer(CALLBACK(src, .proc/reset_search), askDelay) - -/obj/item/organ/internal/posibrain/proc/reset_search() //We give the players time to decide, then reset the timer. - if(!brainmob?.key) - searching = FALSE - icon_state = "posibrain" - visible_message(SPAN_WARNING("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")) - -/obj/item/organ/internal/posibrain/attack_ghost(var/mob/observer/ghost/user) - if(!searching || (src.brainmob && src.brainmob.key)) - return - - var/decl/ghosttrap/G = GET_DECL(/decl/ghosttrap/positronic_brain) - if(!G.assess_candidate(user)) - return - var/response = alert(user, "Are you sure you wish to possess this [src]?", "Possess [src]", "Yes", "No") - if(response == "Yes") - G.transfer_personality(user, brainmob) - -/obj/item/organ/internal/posibrain/examine(mob/user) - . = ..() - - var/msg = "*---------*\nThis is [html_icon(src)] \a [src]!\n[desc]\n" - - msg += "" - - if(src.brainmob && src.brainmob.key) - switch(src.brainmob.stat) - if(CONSCIOUS) - if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk - if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n" - if(DEAD) msg += "It appears to be completely inactive.\n" - else - msg += "It appears to be completely inactive.\n" - - msg += "*---------*" - to_chat(user, msg) - return - -/obj/item/organ/internal/posibrain/emp_act(severity) - if(!src.brainmob) - return - else - switch(severity) - if(1) - src.brainmob.emp_damage += rand(20,30) - if(2) - src.brainmob.emp_damage += rand(10,20) - if(3) - src.brainmob.emp_damage += rand(0,10) - ..() - -/obj/item/organ/internal/posibrain/proc/PickName() - src.brainmob.SetName("[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[random_id(type,100,999)]") - src.brainmob.real_name = src.brainmob.name - -/obj/item/organ/internal/posibrain/on_update_icon() - . = ..() - if(src.brainmob && src.brainmob.key) - icon_state = "posibrain-occupied" - else - icon_state = "posibrain" - -/obj/item/organ/internal/posibrain/proc/transfer_identity(var/mob/living/carbon/H) - if(H && H.mind) - brainmob.set_stat(CONSCIOUS) - H.mind.transfer_to(brainmob) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - - update_icon() - - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].") - callHook("debrain", list(brainmob)) - -/obj/item/organ/internal/posibrain/on_add_effects() - if(brainmob) - if(brainmob.mind) - if(owner.key) - owner.ghostize() - brainmob.mind.transfer_to(owner) - else if(brainmob.key) //posibrain init with a dummy brainmob for some reasons, so gotta do this or its gonna disconnect the client on mob transformation - owner.key = brainmob.key - return ..() - -/obj/item/organ/internal/posibrain/on_remove_effects() - if(istype(owner)) - transfer_identity(owner) - return ..() - -/obj/item/organ/internal/posibrain/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) - if(!(. = ..())) - return - if(istype(owner)) - SetName(initial(name)) //Reset the organ's name to stay coherent if we're put back into someone's skull - -/obj/item/organ/internal/posibrain/do_uninstall(in_place, detach, ignore_children) - if(!in_place && istype(owner) && name == initial(name)) - SetName("\the [owner.real_name]'s [initial(name)]") - return ..() - -/obj/item/organ/internal/cell - name = "microbattery" - desc = "A small, powerful cell for use in fully prosthetic bodies." - icon_state = "cell" - dead_icon = "cell_bork" - organ_tag = BP_CELL - parent_organ = BP_CHEST - organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init - var/open - var/obj/item/cell/cell = /obj/item/cell/hyper - //at 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still - var/servo_cost = 0.8 - -/obj/item/organ/internal/cell/Initialize() - if(ispath(cell)) - cell = new cell(src) - . = ..() - -/obj/item/organ/internal/cell/proc/percent() - if(!cell) - return 0 - return get_charge()/cell.maxcharge * 100 - -/obj/item/organ/internal/cell/proc/get_charge() - if(!cell) - return 0 - if(status & ORGAN_DEAD) - return 0 - return round(cell.charge*(1 - damage/max_damage)) - -/obj/item/organ/internal/cell/proc/checked_use(var/amount) - if(!is_usable()) - return FALSE - return cell && cell.checked_use(amount) - -/obj/item/organ/internal/cell/proc/use(var/amount) - if(!is_usable()) - return 0 - return cell && cell.use(amount) - -/obj/item/organ/internal/cell/proc/get_power_drain() - var/damage_factor = 1 + 10 * damage/max_damage - return servo_cost * damage_factor - -/obj/item/organ/internal/cell/Process() - ..() - if(!owner) - return - if(owner.stat == DEAD) //not a drain anymore - return - var/cost = get_power_drain() - if(world.time - owner.l_move_time < 15) - cost *= 2 - if(!checked_use(cost) && owner.isSynthetic()) - if(!owner.lying && !owner.buckled) - to_chat(owner, "You don't have enough energy to function!") - SET_STATUS_MAX(owner, STAT_PARA, 3) - -/obj/item/organ/internal/cell/emp_act(severity) - ..() - if(cell) - cell.emp_act(severity) - -/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user) - if(IS_SCREWDRIVER(W)) - if(open) - open = 0 - to_chat(user, "You screw the battery panel in place.") - else - open = 1 - to_chat(user, "You unscrew the battery panel.") - - if(IS_CROWBAR(W)) - if(open) - if(cell) - user.put_in_hands(cell) - to_chat(user, "You remove \the [cell] from \the [src].") - cell = null - - if (istype(W, /obj/item/cell)) - if(open) - if(cell) - to_chat(user, "There is a power cell already installed.") - else if(user.try_unequip(W, src)) - cell = W - to_chat(user, "You insert \the [cell].") - -/obj/item/organ/internal/cell/on_add_effects() - . = ..() - // This is very ghetto way of rebooting an IPC. TODO better way. - if(owner && owner.stat == DEAD) - owner.set_stat(CONSCIOUS) - owner.visible_message("\The [owner] twitches visibly!") - -/obj/item/organ/internal/cell/listen() - if(get_charge()) - return "faint hum of the power bank" - -// Used for an MMI or posibrain being installed into a human. -/obj/item/organ/internal/mmi_holder - name = "brain interface" - icon_state = "mmi-empty" - organ_tag = BP_BRAIN - parent_organ = BP_HEAD - organ_properties = ORGAN_PROP_PROSTHETIC //triggers robotization on init - scale_max_damage_to_species_health = FALSE - var/obj/item/mmi/stored_mmi - var/datum/mind/persistantMind //Mind that the organ will hold on to after being removed, used for transfer_and_delete - var/ownerckey // used in the event the owner is out of body - -/obj/item/organ/internal/mmi_holder/Destroy() - stored_mmi = null - persistantMind = null - return ..() - -/obj/item/organ/internal/mmi_holder/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place) - if(status & ORGAN_CUT_AWAY || !(. = ..())) - return - - if(!stored_mmi) - stored_mmi = new(src) - update_from_mmi() - persistantMind = owner.mind - ownerckey = owner.ckey - -/obj/item/organ/internal/mmi_holder/proc/update_from_mmi() - - if(!stored_mmi.brainmob) - stored_mmi.brainmob = new(stored_mmi) - stored_mmi.brainobj = new(stored_mmi) - stored_mmi.brainmob.container = stored_mmi - stored_mmi.brainmob.real_name = owner.real_name - stored_mmi.brainmob.SetName(stored_mmi.brainmob.real_name) - stored_mmi.SetName("[initial(stored_mmi.name)] ([owner.real_name])") - - if(!owner) return - - name = stored_mmi.name - desc = stored_mmi.desc - icon = stored_mmi.icon - - stored_mmi.icon_state = "mmi-full" - icon_state = stored_mmi.icon_state - - if(owner && owner.stat == DEAD) - owner.set_stat(CONSCIOUS) - owner.switch_from_dead_to_living_mob_list() - owner.visible_message("\The [owner] twitches visibly!") - -/obj/item/organ/internal/mmi_holder/on_remove_effects(mob/living/last_owner) - if(last_owner && last_owner.mind) - persistantMind = last_owner.mind - if(last_owner.ckey) - ownerckey = last_owner.ckey - . = ..() - -/obj/item/organ/internal/mmi_holder/proc/transfer_and_delete() - if(stored_mmi) - . = stored_mmi - stored_mmi.forceMove(src.loc) - if(persistantMind) - persistantMind.transfer_to(stored_mmi.brainmob) - else - var/response = input(find_dead_player(ownerckey, 1), "Your [initial(stored_mmi.name)] has been removed from your body. Do you wish to return to life?", "Robotic Rebirth") as anything in list("Yes", "No") - if(response == "Yes") - persistantMind.transfer_to(stored_mmi.brainmob) - qdel(src) - -//Since the mmi_holder is an horrible hacky pos we turn it into a mmi on drop, since it shouldn't exist outside a mob -/obj/item/organ/internal/mmi_holder/dropInto(atom/destination) - . = ..() - if (!QDELETED(src)) - transfer_and_delete() diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm index f54d30964d6..5b56e2ca75e 100644 --- a/code/modules/organs/internal/stomach.dm +++ b/code/modules/organs/internal/stomach.dm @@ -8,6 +8,8 @@ var/datum/reagents/metabolism/ingested var/next_cramp = 0 +SAVED_VAR(/obj/item/organ/internal/stomach, ingested) + /obj/item/organ/internal/stomach/Destroy() QDEL_NULL(ingested) . = ..() @@ -104,8 +106,8 @@ qdel(M) continue - M.adjustBruteLoss(3) - M.adjustFireLoss(3) + M.adjustBruteLoss(3, do_update_health = FALSE) + M.adjustFireLoss(3, do_update_health = FALSE) M.adjustToxLoss(3) var/digestion_product = M.get_digestion_product() diff --git a/code/modules/organs/internal/voice.dm b/code/modules/organs/internal/voice.dm index d21f105f920..49e072493f7 100644 --- a/code/modules/organs/internal/voice.dm +++ b/code/modules/organs/internal/voice.dm @@ -5,6 +5,8 @@ organ_tag = BP_VOICE var/list/assists_languages +SAVED_VAR(/obj/item/organ/internal/voicebox, assists_languages) + /obj/item/organ/internal/voicebox/Initialize() . = ..() var/list/language_datums = list() diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index a2a723fd1b3..917c0d093f2 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -4,7 +4,7 @@ germ_level = 0 w_class = ITEM_SIZE_TINY default_action_type = /datum/action/item_action/organ - origin_tech = "{'materials':1,'biotech':1}" + origin_tech = @'{"materials":1,"biotech":1}' throwforce = 2 abstract_type = /obj/item/organ @@ -33,6 +33,19 @@ var/death_time // REALTIMEOFDAY at moment of death. var/scale_max_damage_to_species_health // Whether or not we should scale the damage values of this organ to the owner species. +SAVED_VAR(/obj/item/organ, organ_tag) +SAVED_VAR(/obj/item/organ, parent_organ) +SAVED_VAR(/obj/item/organ, status) +SAVED_VAR(/obj/item/organ, owner) +SAVED_VAR(/obj/item/organ, dna) +SAVED_VAR(/obj/item/organ, species) +SAVED_VAR(/obj/item/organ, bodytype) +SAVED_VAR(/obj/item/organ, ailments) +SAVED_VAR(/obj/item/organ, damage) +SAVED_VAR(/obj/item/organ, min_broken_damage) +SAVED_VAR(/obj/item/organ, rejecting) +SAVED_VAR(/obj/item/organ, death_time) + /obj/item/organ/Destroy() if(owner) owner.remove_organ(src, FALSE, FALSE, TRUE, TRUE, FALSE) //Tell our parent we're unisntalling in place @@ -54,7 +67,7 @@ /obj/item/organ/attack_self(var/mob/user) return (owner && loc == owner && owner == user) -/obj/item/organ/proc/update_health() +/obj/item/organ/proc/update_organ_health() return /obj/item/organ/proc/is_broken() @@ -113,7 +126,7 @@ if(bodytype) reagent_to_add = bodytype.edible_reagent // can set this to null and skip the next block if(reagent_to_add) - reagents.add_reagent(reagent_to_add, reagents.maximum_volume) + add_to_reagents(reagent_to_add, reagents.maximum_volume) /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(istype(bodytype) && (bodytype.body_flags & BODY_FLAG_NO_DNA)) @@ -155,6 +168,11 @@ reset_status() return TRUE +// resets scarring, but ah well +/obj/item/organ/proc/set_max_damage(var/ndamage) + absolute_max_damage = FLOOR(ndamage) + max_damage = absolute_max_damage + /obj/item/organ/proc/set_species(specie_name) vital_to_owner = null // This generally indicates the owner mob is having species set, and this value may be invalidated. if(istext(specie_name)) @@ -173,15 +191,13 @@ //Use initial value to prevent scaling down each times we change the species during init absolute_max_damage = initial(absolute_max_damage) min_broken_damage = initial(min_broken_damage) - max_damage = initial(max_damage) if(absolute_max_damage) - absolute_max_damage = max(1, FLOOR(absolute_max_damage * total_health_coefficient)) + set_max_damage(max(1, FLOOR(absolute_max_damage * total_health_coefficient))) min_broken_damage = max(1, FLOOR(absolute_max_damage * 0.5)) else min_broken_damage = max(1, FLOOR(min_broken_damage * total_health_coefficient)) - absolute_max_damage = max(1, FLOOR(min_broken_damage * 2)) - max_damage = absolute_max_damage // resets scarring, but ah well + set_max_damage(max(1, FLOOR(min_broken_damage * 2))) reset_status() @@ -202,7 +218,7 @@ //dead already, no need for more processing if(status & ORGAN_DEAD) return - // Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno + // Don't process if we're in a freezer, an interface or a stasis bag. if(is_preserved()) return //Process infections @@ -214,8 +230,8 @@ if(prob(40) && reagents.total_volume >= 0.1) if(reagents.has_reagent(/decl/material/liquid/blood)) blood_splatter(get_turf(src), src, 1) - reagents.remove_any(0.1) - if(config.organs_decay) + remove_any_reagents(0.1) + if(get_config_value(/decl/config/toggle/health_organs_decay)) take_general_damage(rand(1,3)) germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_TWO) @@ -248,11 +264,18 @@ ailment.was_treated_by_chem_effect() /obj/item/organ/proc/is_preserved() - if(istype(loc,/obj/item/organ)) + if(istype(loc, /obj/item/organ)) var/obj/item/organ/O = loc return O.is_preserved() - else - return (istype(loc,/obj/item/mmi) || istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/storage/box/freezer)) + var/static/list/preserved_types = list( + /obj/item/storage/box/freezer, + /obj/structure/closet/crate/freezer, + /obj/structure/closet/body_bag/cryobag + ) + for(var/preserved_type in preserved_types) + if(istype(loc, preserved_type)) + return TRUE + return FALSE /obj/item/organ/examine(mob/user) . = ..(user) @@ -262,6 +285,8 @@ if(status & ORGAN_DEAD) to_chat(user, "The decay has set into \the [src].") +// TODO: bodytemp rework that handles this with better respect to +// individual organs vs. expected body temperature for other organs. /obj/item/organ/proc/handle_germ_effects() //** Handle the effects of infections var/germ_immunity = owner.get_immunity() //reduces the amount of times we need to call this proc @@ -279,8 +304,8 @@ germ_level += 10 if(germ_level >= INFECTION_LEVEL_ONE) - var/fever_temperature = (owner.get_temperature_threshold(HEAT_LEVEL_1) - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature - owner.bodytemperature += clamp(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature) + var/fever_temperature = (owner.get_mob_temperature_threshold(HEAT_LEVEL_1) - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature + owner.bodytemperature += clamp((fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, 0, fever_temperature - owner.bodytemperature) if (germ_level >= INFECTION_LEVEL_TWO) var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(owner, parent_organ) @@ -300,7 +325,7 @@ return if(dna) if(!rejecting) - if(owner.blood_incompatible(dna.b_type)) + if(owner.is_blood_incompatible(dna.b_type)) rejecting = 1 else rejecting++ //Rejection severity increases over time. @@ -316,9 +341,9 @@ germ_level += rand(3,5) var/decl/blood_type/blood_decl = dna?.b_type && get_blood_type_by_name(dna.b_type) if(istype(blood_decl)) - owner.reagents.add_reagent(blood_decl.transfusion_fail_reagent, round(rand(2,4) * blood_decl.transfusion_fail_percentage)) + owner.add_to_reagents(blood_decl.transfusion_fail_reagent, round(rand(2,4) * blood_decl.transfusion_fail_percentage)) else - owner.reagents.add_reagent(/decl/material/liquid/coagulated_blood, rand(1,2)) + owner.add_to_reagents(/decl/material/liquid/coagulated_blood, rand(1,2)) /obj/item/organ/proc/remove_rejuv() qdel(src) @@ -364,7 +389,9 @@ /obj/item/organ/proc/heal_damage(amount) if(can_recover()) - damage = clamp(0, damage - round(amount, 0.1), max_damage) + damage = clamp(damage - round(amount, 0.1), 0, max_damage) + if(owner) + owner.update_health() /obj/item/organ/attack(var/mob/target, var/mob/user) if(BP_IS_PROSTHETIC(src) || !istype(target) || !istype(user) || (user != target && user.a_intent == I_HELP)) @@ -391,7 +418,7 @@ target.attackby(O, user) /obj/item/organ/proc/can_feel_pain() - return !(bodytype.body_flags & BODY_FLAG_NO_PAIN) + return bodytype && !(bodytype.body_flags & BODY_FLAG_NO_PAIN) /obj/item/organ/proc/is_usable() return !(status & (ORGAN_CUT_AWAY|ORGAN_MUTATED|ORGAN_DEAD)) @@ -540,6 +567,8 @@ var/global/list/ailment_reference_cache = list() /obj/item/organ/proc/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) //Make sure to force the flag accordingly set_detached(detached) + if(QDELETED(src)) + return owner = target vital_to_owner = null @@ -575,7 +604,8 @@ var/global/list/ailment_reference_cache = list() else owner = null vital_to_owner = null - return src + if(!QDELETED(src)) + return src //Events handling for checks and effects that should happen when removing the organ through interactions. Called by the owner mob. /obj/item/organ/proc/on_remove_effects(var/mob/living/last_owner) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index d9bff64a519..6ec0982199b 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -47,7 +47,7 @@ if(.) var/force_emote = species.get_pain_emote(src, power) if(force_emote && prob(power)) - var/decl/emote/use_emote = usable_emotes[force_emote] + var/decl/emote/use_emote = GET_DECL(force_emote) if(!(use_emote.message_type == AUDIBLE_MESSAGE &&HAS_STATUS(src, STAT_SILENCE))) emote(force_emote) diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm index 48bd2bdbf1e..588098e60f6 100644 --- a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm +++ b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm @@ -2,7 +2,7 @@ abstract_type = /decl/bodytype/prosthetic icon_base = 'icons/mob/human_races/cyberlimbs/robotic.dmi' desc = "A generic unbranded robotic prosthesis." - limb_tech = "{'engineering':1,'materials':1,'magnets':1}" + limb_tech = @'{"engineering":1,"materials":1,"magnets":1}' modifier_string = "robotic" is_robotic = TRUE body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_EAT @@ -14,10 +14,21 @@ 'sound/foley/metal1.ogg' ) has_organ = list( - BP_BRAIN = /obj/item/organ/internal/mmi_holder, + BP_BRAIN = /obj/item/organ/internal/brain_interface, BP_EYES = /obj/item/organ/internal/eyes, BP_CELL = /obj/item/organ/internal/cell ) + cold_level_1 = SYNTH_COLD_LEVEL_1 + cold_level_2 = SYNTH_COLD_LEVEL_2 + cold_level_3 = SYNTH_COLD_LEVEL_3 + heat_level_1 = SYNTH_HEAT_LEVEL_1 + heat_level_2 = SYNTH_HEAT_LEVEL_2 + heat_level_3 = SYNTH_HEAT_LEVEL_3 + cold_discomfort_strings = null + heat_discomfort_level = 373.15 + heat_discomfort_strings = list( + "You are dangerously close to overheating!" + ) /// Determines which bodyparts can use this limb. var/list/applies_to_part diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm index c031736188c..5baa68397ea 100644 --- a/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm +++ b/code/modules/organs/prosthetics/prosthetics_manufacturer_models.dm @@ -1,5 +1,6 @@ /decl/bodytype/prosthetic/basic_human name = "Unbranded" + pref_name = "synthetic body" bodytype_category = BODYTYPE_HUMANOID /decl/bodytype/prosthetic/wooden diff --git a/code/modules/overmap/contacts/_contacts.dm b/code/modules/overmap/contacts/_contacts.dm index 6caa410e957..ea6afc1d83d 100644 --- a/code/modules/overmap/contacts/_contacts.dm +++ b/code/modules/overmap/contacts/_contacts.dm @@ -30,7 +30,9 @@ radar = image(loc = effect, icon = 'icons/obj/overmap.dmi', icon_state = "sensor_range") radar.color = source.color radar.tag = "radar" - radar.add_filter("blur", 1, list("blur", size = 1)) + radar.add_filter("blur", 1, list(type = "blur", size = 1)) + radar.appearance_flags |= RESET_TRANSFORM | KEEP_APART + radar.appearance_flags &= ~PIXEL_SCALE /datum/overmap_contact/proc/update_marker_icon() @@ -88,7 +90,7 @@ pinged = TRUE show() animate(marker, alpha=255, 0.5 SECOND, 1, LINEAR_EASING) - addtimer(CALLBACK(src, .proc/unping), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(unping)), 1 SECOND) /datum/overmap_contact/proc/unping() animate(marker, alpha=75, 2 SECOND, 1, LINEAR_EASING) diff --git a/code/modules/overmap/contacts/contact_sensors.dm b/code/modules/overmap/contacts/contact_sensors.dm index fc847367b5b..372c37b56c3 100644 --- a/code/modules/overmap/contacts/contact_sensors.dm +++ b/code/modules/overmap/contacts/contact_sensors.dm @@ -137,7 +137,7 @@ var/time_delay = max((SENSOR_TIME_DELAY * get_dist(linked, contact)),1) if(!record.pinged) - addtimer(CALLBACK(record, .proc/ping), time_delay) + addtimer(CALLBACK(record, PROC_REF(ping)), time_delay) /obj/machinery/computer/ship/sensors/attackby(var/obj/item/I, var/mob/user) . = ..() @@ -150,11 +150,11 @@ if(tracker in trackers) trackers -= tracker - events_repository.unregister(/decl/observ/destroyed, tracker, src, .proc/remove_tracker) + events_repository.unregister(/decl/observ/destroyed, tracker, src, PROC_REF(remove_tracker)) to_chat(user, SPAN_NOTICE("You unlink the tracker in \the [P]'s buffer from \the [src].")) return trackers += tracker - events_repository.register(/decl/observ/destroyed, tracker, src, .proc/remove_tracker) + events_repository.register(/decl/observ/destroyed, tracker, src, PROC_REF(remove_tracker)) to_chat(user, SPAN_NOTICE("You link the tracker in \the [P]'s buffer to \the [src].")) /obj/machinery/computer/ship/sensors/proc/remove_tracker(var/obj/item/ship_tracker/tracker) diff --git a/code/modules/overmap/contacts/tracker.dm b/code/modules/overmap/contacts/tracker.dm index c8009002396..feb89fe461f 100644 --- a/code/modules/overmap/contacts/tracker.dm +++ b/code/modules/overmap/contacts/tracker.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/ship_tracker.dmi' icon_state = "disabled" w_class = ITEM_SIZE_SMALL - - origin_tech = "{'magnets':3, 'programming':2}" + + origin_tech = @'{"magnets":3, "programming":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT) var/enabled = FALSE diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm index 1833aadd73c..4ab02455666 100644 --- a/code/modules/overmap/disperser/disperser_charge.dm +++ b/code/modules/overmap/disperser/disperser_charge.dm @@ -2,7 +2,7 @@ name = "unknown disperser charge" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge does not have a defined purpose." icon_state = "slug" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE material = /decl/material/solid/metal/aluminium matter = list( /decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/overmap/disperser/disperser_circuit.dm b/code/modules/overmap/disperser/disperser_circuit.dm index f54bafa7a1f..16b2aa0bf9b 100644 --- a/code/modules/overmap/disperser/disperser_circuit.dm +++ b/code/modules/overmap/disperser/disperser_circuit.dm @@ -1,13 +1,13 @@ /obj/item/stock_parts/circuitboard/disperser name = "circuitboard (obstruction field disperser control)" build_path = /obj/machinery/computer/ship/disperser - origin_tech = "{'engineering':2,'combat':2,'wormholes':2}" + origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}' /obj/item/stock_parts/circuitboard/disperserfront name = "circuitboard (obstruction field disperser beam generator)" build_path = /obj/machinery/disperser/front board_type = "machine" - origin_tech = "{'engineering':2,'combat':2,'wormholes':2}" + origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}' req_components = list ( /obj/item/stock_parts/manipulator/pico = 5 ) @@ -16,7 +16,7 @@ name = "circuitboard (obstruction field disperser fusor)" build_path = /obj/machinery/disperser/middle board_type = "machine" - origin_tech = "{'engineering':2,'combat':2,'wormholes':2}" + origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}' req_components = list ( /obj/item/stock_parts/subspace/crystal = 10 ) @@ -25,7 +25,7 @@ name = "circuitboard (obstruction field disperser material deconstructor)" build_path = /obj/machinery/disperser/back board_type = "machine" - origin_tech = "{'engineering':2,'combat':2,'wormholes':2}" + origin_tech = @'{"engineering":2,"combat":2,"wormholes":2}' req_components = list ( /obj/item/stock_parts/capacitor/super = 5 ) \ No newline at end of file diff --git a/code/modules/overmap/disperser/disperser_console.dm b/code/modules/overmap/disperser/disperser_console.dm index 46166a2bdba..14105d9f912 100644 --- a/code/modules/overmap/disperser/disperser_console.dm +++ b/code/modules/overmap/disperser/disperser_console.dm @@ -54,9 +54,9 @@ middle = M back = B if(is_valid_setup()) - events_repository.register(/decl/observ/destroyed, F, src, .proc/release_links) - events_repository.register(/decl/observ/destroyed, M, src, .proc/release_links) - events_repository.register(/decl/observ/destroyed, B, src, .proc/release_links) + events_repository.register(/decl/observ/destroyed, F, src, PROC_REF(release_links)) + events_repository.register(/decl/observ/destroyed, M, src, PROC_REF(release_links)) + events_repository.register(/decl/observ/destroyed, B, src, PROC_REF(release_links)) return TRUE return FALSE @@ -68,9 +68,9 @@ return FALSE /obj/machinery/computer/ship/disperser/proc/release_links() - events_repository.unregister(/decl/observ/destroyed, front, src, .proc/release_links) - events_repository.unregister(/decl/observ/destroyed, middle, src, .proc/release_links) - events_repository.unregister(/decl/observ/destroyed, back, src, .proc/release_links) + events_repository.unregister(/decl/observ/destroyed, front, src, PROC_REF(release_links)) + events_repository.unregister(/decl/observ/destroyed, middle, src, PROC_REF(release_links)) + events_repository.unregister(/decl/observ/destroyed, back, src, PROC_REF(release_links)) front = null middle = null back = null diff --git a/code/modules/overmap/events/event.dm b/code/modules/overmap/events/event.dm index 64e0e449bdd..922924fdba5 100644 --- a/code/modules/overmap/events/event.dm +++ b/code/modules/overmap/events/event.dm @@ -126,13 +126,13 @@ if(!active_hazards.len) hazard_by_turf -= T - events_repository.unregister(/decl/observ/entered, T, src, .proc/on_turf_entered) - events_repository.unregister(/decl/observ/exited, T, src, .proc/on_turf_exited) + events_repository.unregister(/decl/observ/entered, T, src, PROC_REF(on_turf_entered)) + events_repository.unregister(/decl/observ/exited, T, src, PROC_REF(on_turf_exited)) else hazard_by_turf |= T hazard_by_turf[T] = active_hazards - events_repository.register(/decl/observ/entered, T, src, .proc/on_turf_entered) - events_repository.register(/decl/observ/exited, T, src, .proc/on_turf_exited) + events_repository.register(/decl/observ/entered, T, src, PROC_REF(on_turf_entered)) + events_repository.register(/decl/observ/exited, T, src, PROC_REF(on_turf_exited)) for(var/obj/effect/overmap/visitable/ship/ship in T) for(var/datum/event/E in ship_events[ship]) diff --git a/code/modules/overmap/exoplanets/_exoplanet.dm b/code/modules/overmap/exoplanets/_exoplanet.dm index 3084dd7c0d3..c25daa09869 100644 --- a/code/modules/overmap/exoplanets/_exoplanet.dm +++ b/code/modules/overmap/exoplanets/_exoplanet.dm @@ -17,9 +17,9 @@ . += "Life traces detected
    " if(LAZYLEN(E.subtemplates) && user.skill_check(SKILL_SCIENCE, SKILL_ADEPT)) - var/ruin_num = 0 + var/poi_num = 0 for(var/datum/map_template/R in E.subtemplates) - if(!(R.get_ruin_tags() & RUIN_NATURAL)) - ruin_num++ - if(ruin_num) - . += "
    [ruin_num] possible artificial structure\s detected.
    " + if(!(R.get_template_tags() & TEMPLATE_TAG_NATURAL)) + poi_num++ + if(poi_num) + . += "
    [poi_num] possible artificial structure\s detected.
    " diff --git a/code/modules/overmap/ftl_shunt/computer.dm b/code/modules/overmap/ftl_shunt/computer.dm index 14bc2933ab0..e971f2d5a38 100644 --- a/code/modules/overmap/ftl_shunt/computer.dm +++ b/code/modules/overmap/ftl_shunt/computer.dm @@ -74,7 +74,7 @@ plot_delay_mult = 2 delay = clamp(((jump_dist * BASE_PLOT_TIME_PER_TILE) * plot_delay_mult),1, INFINITY) - jump_plot_timer = addtimer(CALLBACK(src, .proc/finish_plot, x, y), delay, TIMER_STOPPABLE) + jump_plot_timer = addtimer(CALLBACK(src, PROC_REF(finish_plot), x, y), delay, TIMER_STOPPABLE) plotting_jump = TRUE jump_plotted = FALSE return delay diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm index e9bd63a5e8d..c9ae2ac1b46 100644 --- a/code/modules/overmap/ftl_shunt/core.dm +++ b/code/modules/overmap/ftl_shunt/core.dm @@ -234,7 +234,7 @@ update_icon() if(check_charge()) - jump_timer = addtimer(CALLBACK(src, .proc/execute_shunt), jump_delay, TIMER_STOPPABLE) + jump_timer = addtimer(CALLBACK(src, PROC_REF(execute_shunt)), jump_delay, TIMER_STOPPABLE) return FTL_START_CONFIRMED /obj/machinery/ftl_shunt/core/proc/calculate_jump_requirements() @@ -270,7 +270,7 @@ return if(use_fuel(required_fuel_joules)) - jump_timer = addtimer(CALLBACK(src, .proc/execute_shunt), jump_delay, TIMER_STOPPABLE) + jump_timer = addtimer(CALLBACK(src, PROC_REF(execute_shunt)), jump_delay, TIMER_STOPPABLE) else cancel_shunt() return //If for some reason we don't have fuel now, just return. @@ -281,7 +281,7 @@ var/jumpdist = get_dist(get_turf(ftl_computer.linked), destination) var/obj/effect/portal/wormhole/W = new(destination) //Generate a wormhole effect on overmap to give some indication that something is about to happen. QDEL_IN(W, 6 SECONDS) - addtimer(CALLBACK(src, .proc/do_shunt, shunt_x, shunt_y, jumpdist, destination), 6 SECONDS) + addtimer(CALLBACK(src, PROC_REF(do_shunt), shunt_x, shunt_y, jumpdist, destination), 6 SECONDS) jumping = TRUE update_icon() for(var/mob/living/carbon/M in global.living_mob_list_) @@ -646,13 +646,13 @@ name = "circuit board (superluminal shunt)" board_type = "machine" build_path = /obj/machinery/ftl_shunt/core - origin_tech = "{'programming':3,'magnets':5,'materials':5,'wormholes':5}" + origin_tech = @'{"programming":3,"magnets":5,"materials":5,"wormholes":5}' additional_spawn_components = list(/obj/item/stock_parts/power/terminal = 1) /obj/item/stock_parts/ftl_core name = "exotic matter bridge" desc = "The beating heart of a superluminal shunt - without this, the power to manipulate space-time is out of reach." - origin_tech = "{'programming':3,'magnets':5,'materials':5,'wormholes':5}" + origin_tech = @'{"programming":3,"magnets":5,"materials":5,"wormholes":5}' icon = 'icons/obj/items/stock_parts/stock_parts.dmi' icon_state = "smes_coil" color = COLOR_YELLOW diff --git a/code/modules/overmap/internet/internet_circuitboards.dm b/code/modules/overmap/internet/internet_circuitboards.dm index 5649be365d9..3e865580bda 100644 --- a/code/modules/overmap/internet/internet_circuitboards.dm +++ b/code/modules/overmap/internet/internet_circuitboards.dm @@ -2,7 +2,7 @@ name = "circuitboard (PLEXUS uplink)" board_type = "machine" build_path = /obj/machinery/internet_uplink - origin_tech = "{'magnets':4,'wormholes':3,'powerstorage':3,'engineering':3}" + origin_tech = @'{"magnets":4,"wormholes":3,"powerstorage":3,"engineering":3}' req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/micro_laser = 2, @@ -13,13 +13,13 @@ /obj/item/stock_parts/circuitboard/internet_uplink_computer name = "circuitboard (PLEXUS uplink controller)" build_path = /obj/machinery/computer/internet_uplink - origin_tech = "{'programming':2,'engineering':2}" + origin_tech = @'{"programming":2,"engineering":2}' /obj/item/stock_parts/circuitboard/internet_repeater name = "circuitboard (PLEXUS repeater)" build_path = /obj/machinery/internet_repeater board_type = "machine" - origin_tech = "{'magnets':3,'engineering':2,'programming':2}" + origin_tech = @'{"magnets":3,"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/subspace/filter = 1, /obj/item/stock_parts/capacitor = 2, diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm index 83b16e54f77..c326aa4b133 100644 --- a/code/modules/overmap/overmap_object.dm +++ b/code/modules/overmap/overmap_object.dm @@ -62,7 +62,7 @@ var/global/list/overmap_unknown_ids = list() update_moving() - add_filter("glow", 1, list("drop_shadow", color = color + "F0", size = 2, offset = 1,x = 0, y = 0)) + add_filter("glow", 1, list(type = "drop_shadow", color = color + "F0", size = 2, offset = 1,x = 0, y = 0)) update_icon() /obj/effect/overmap/Crossed(atom/movable/AM) @@ -231,10 +231,12 @@ var/global/list/overmap_unknown_ids = list() var/spd = speed[i] var/abs_spd = abs(spd) if(abs_spd) - var/partial_power = clamp(abs_spd / (get_delta_v() / KM_OVERMAP_RATE), 0, 1) - var/delta_v = min(get_delta_v(TRUE, partial_power) / KM_OVERMAP_RATE, abs_spd) - .[i] = -SIGN(spd) * delta_v - burn = TRUE + var/base_delta_v = get_delta_v() + if(base_delta_v > 0) + var/partial_power = clamp(abs_spd / (base_delta_v / KM_OVERMAP_RATE), 0, 1) + var/delta_v = min(get_delta_v(TRUE, partial_power) / KM_OVERMAP_RATE, abs_spd) + .[i] = -SIGN(spd) * delta_v + burn = TRUE if(burn) last_burn = world.time @@ -245,7 +247,7 @@ var/global/list/overmap_unknown_ids = list() pixel_y = position[2] * (world.icon_size/2) /obj/effect/overmap/proc/get_delta_v() - return + return 0 /obj/effect/overmap/proc/get_vessel_mass() //Same as above. return vessel_mass diff --git a/code/modules/overmap/planetoids/_planetoids.dm b/code/modules/overmap/planetoids/_planetoids.dm index 31ac51b28f4..f3a87312cb9 100644 --- a/code/modules/overmap/planetoids/_planetoids.dm +++ b/code/modules/overmap/planetoids/_planetoids.dm @@ -49,7 +49,7 @@ ///Update our name, and refs to match the planetoid we're representing /obj/effect/overmap/visitable/sector/planetoid/proc/update_from_data(var/datum/planetoid_data/P) - SetName("[P.name], \a [name]") + SetName("[P.name], \a [initial(name)]") planetoid_id = P.id surface_color = P.surface_color water_color = P.water_color diff --git a/code/modules/overmap/radio_beacon.dm b/code/modules/overmap/radio_beacon.dm index 4d35f60124f..4d6f541b3f7 100644 --- a/code/modules/overmap/radio_beacon.dm +++ b/code/modules/overmap/radio_beacon.dm @@ -13,8 +13,8 @@

    ---END OF TRANSMISSION---" /obj/effect/overmap/radio/proc/set_origin(obj/effect/overmap/origin) - events_repository.register(/decl/observ/moved, origin, src, /obj/effect/overmap/radio/proc/follow) - events_repository.register(/decl/observ/destroyed, origin, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/moved, origin, src, TYPE_PROC_REF(/obj/effect/overmap/radio, follow)) + events_repository.register(/decl/observ/destroyed, origin, src, TYPE_PROC_REF(/datum, qdel_self)) forceMove(origin.loc) source = origin pixel_x = -(origin.bound_width - 6) @@ -35,7 +35,7 @@ icon = 'icons/obj/items/device/radio/beacon.dmi' icon_state = "beacon" - origin_tech = "{'magnets':2, 'programming':2}" + origin_tech = @'{"magnets":2, "programming":2}' material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT) diff --git a/code/modules/overmap/ships/circuits.dm b/code/modules/overmap/ships/circuits.dm index bf196ca3792..3d729a46a55 100644 --- a/code/modules/overmap/ships/circuits.dm +++ b/code/modules/overmap/ships/circuits.dm @@ -2,7 +2,7 @@ name = "circuitboard (gas thruster)" icon = 'icons/obj/modules/module_controller.dmi' build_path = /obj/machinery/atmospherics/unary/engine - origin_tech = "{'powerstorage':1,'engineering':2}" + origin_tech = @'{"powerstorage":1,"engineering":2}' req_components = list( /obj/item/stack/cable_coil = 30, /obj/item/pipe = 2 @@ -17,7 +17,7 @@ name = "circuitboard (fusion thruster)" icon = 'icons/obj/modules/module_controller.dmi' build_path = /obj/machinery/atmospherics/unary/engine/fusion - origin_tech = "{'powerstorage':1,'engineering':2}" + origin_tech = @'{"powerstorage":1,"engineering":2}' req_components = list( /obj/item/stack/cable_coil = 30, /obj/item/pipe = 2 diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index 6aa0a035a86..a62b7258705 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -61,7 +61,7 @@ return TOPIC_REFRESH if(href_list["set_global_limit"]) - var/newlim = input("Input new thrust limit (0..100%)", "Thrust limit", linked.get_thrust_limit() * 100) as num + var/newlim = input("Input new thrust limit (0-100%)", "Thrust limit", linked.get_thrust_limit() * 100) as num if(!CanInteract(user, state)) return TOPIC_NOACTION var/thrust_limit = clamp(newlim / 100, 0, 1) @@ -76,7 +76,7 @@ if(href_list["engine"]) if(href_list["set_limit"]) var/datum/extension/ship_engine/E = locate(href_list["engine"]) - var/newlim = input("Input new thrust limit (0..100)", "Thrust limit", E.thrust_limit) as num + var/newlim = input("Input new thrust limit (0-100)", "Thrust limit", E.thrust_limit) as num if(!CanInteract(user, state)) return var/limit = clamp(newlim/100, 0, 1) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 6302e7926b7..cf103d9e075 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -317,7 +317,7 @@ var/global/list/overmap_helm_computers current_operator = weakref(current_operator_actual) linked.update_operator_skill(current_operator_actual) if (!autopilot && old_operator && viewing_overmap(old_operator)) - addtimer(CALLBACK(src, /obj/machinery/computer/ship/.proc/unlook, old_operator), 0) // Workaround for linter SHOULD_NOT_SLEEP checks. + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook), old_operator), 0) // Workaround for linter SHOULD_NOT_SLEEP checks. log_debug("HELM CONTROL: [current_operator_actual ? current_operator_actual : "NO PILOT"] taking control of [src] from [old_operator ? old_operator : "NO PILOT"] in [get_area_name(src)]. [autopilot ? "(AUTOPILOT MODE)" : null]") diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm index c3837101c69..396a4fe2172 100644 --- a/code/modules/overmap/ships/computers/ship.dm +++ b/code/modules/overmap/ships/computers/ship.dm @@ -69,9 +69,9 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov for(var/obj/machinery/computer/ship/sensors/sensor in linked.get_linked_machines_of_type(/obj/machinery/computer/ship)) sensor.reveal_contacts(user) - events_repository.register(/decl/observ/moved, user, src, /obj/machinery/computer/ship/proc/unlook) + events_repository.register(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook)) if(isliving(user)) - events_repository.register(/decl/observ/stat_set, user, src, /obj/machinery/computer/ship/proc/unlook) + events_repository.register(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook)) LAZYDISTINCTADD(viewers, weakref(user)) if(linked) LAZYDISTINCTADD(linked.navigation_viewers, weakref(user)) @@ -84,9 +84,9 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov for(var/obj/machinery/computer/ship/sensors/sensor in linked.get_linked_machines_of_type(/obj/machinery/computer/ship)) sensor.hide_contacts(user) - events_repository.unregister(/decl/observ/moved, user, src, /obj/machinery/computer/ship/proc/unlook) + events_repository.unregister(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook)) if(isliving(user)) - events_repository.unregister(/decl/observ/stat_set, user, src, /obj/machinery/computer/ship/proc/unlook) + events_repository.unregister(/decl/observ/stat_set, user, src, TYPE_PROC_REF(/obj/machinery/computer/ship, unlook)) LAZYREMOVE(viewers, weakref(user)) if(linked) LAZYREMOVE(linked.navigation_viewers, weakref(user)) diff --git a/code/modules/overmap/ships/device_types/_engine.dm b/code/modules/overmap/ships/device_types/_engine.dm index e38e8f5484a..707efb35241 100644 --- a/code/modules/overmap/ships/device_types/_engine.dm +++ b/code/modules/overmap/ships/device_types/_engine.dm @@ -76,8 +76,10 @@ var/global/list/ship_engines = list() var/exhaust_dir = global.reverse_dir[M.dir] var/turf/A = get_step(src, exhaust_dir) var/turf/B = A + var/airblock while(isturf(A) && !(isspaceturf(A) || A.is_open())) - if((B.c_airblock(A)) & AIR_BLOCKED) + ATMOS_CANPASS_TURF(airblock, B, A) + if(airblock & AIR_BLOCKED) blockage = TRUE break B = A diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm index 9b8b6466634..ce40a9c9c06 100644 --- a/code/modules/overmap/ships/landable.dm +++ b/code/modules/overmap/ships/landable.dm @@ -124,7 +124,7 @@ */ // Configure shuttle datum - events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/on_shuttle_jump) + events_repository.register(/decl/observ/shuttle_moved, shuttle_datum, src, PROC_REF(on_shuttle_jump)) on_landing(landmark, shuttle_datum.current_location) // We "land" at round start to properly place ourselves on the overmap. if(landmark == shuttle_datum.current_location) status = SHIP_STATUS_OVERMAP // we spawned on the overmap, so have to initialize our state properly. @@ -163,7 +163,7 @@ core_landmark = master SetName(_name) landmark_tag = master.shuttle_name + _name - events_repository.register(/decl/observ/destroyed, master, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/destroyed, master, src, TYPE_PROC_REF(/datum, qdel_self)) . = ..() /obj/effect/shuttle_landmark/visiting_shuttle/Destroy() diff --git a/code/modules/overmap/ships/machines/ion_thruster.dm b/code/modules/overmap/ships/machines/ion_thruster.dm index 5ca69b414ed..63d98305036 100644 --- a/code/modules/overmap/ships/machines/ion_thruster.dm +++ b/code/modules/overmap/ships/machines/ion_thruster.dm @@ -83,7 +83,7 @@ board_type = "machine" icon = 'icons/obj/modules/module_controller.dmi' build_path = /obj/machinery/ion_thruster - origin_tech = "{'powerstorage':1,'engineering':2}" + origin_tech = @'{"powerstorage":1,"engineering":2}' req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/matter_bin = 1, diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index 6b6975a6932..10add4dbfae 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -109,8 +109,13 @@ var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND) return 0 if(!get_speed()) return 0 - var/num_burns = get_speed() / get_delta_v() + 2 //some padding in case acceleration drops fromm fuel usage - var/burns_per_grid = 1/ (burn_delay * get_speed()) + var/delta_v = get_delta_v() + 2 + if(delta_v <= 0) + return 0 + var/num_burns = get_speed() / delta_v //some padding in case acceleration drops fromm fuel usage + var/burns_per_grid = 1 / (burn_delay * get_speed()) + if(burns_per_grid <= 0) + return 0 return round(num_burns / burns_per_grid) /obj/effect/overmap/visitable/ship/Process(wait, tick) diff --git a/code/modules/paperwork/adminpaper.dm b/code/modules/paperwork/adminpaper.dm index a6a1cf86f12..a4f749926d6 100644 --- a/code/modules/paperwork/adminpaper.dm +++ b/code/modules/paperwork/adminpaper.dm @@ -112,7 +112,7 @@ if(href_list["confirm"]) var/obj/machinery/faxmachine/F = destination_ref.resolve() if(!istype(F)) - to_chat(usr, "The destination machines doesn't exist anymore..") + to_chat(usr, "The destination machine doesn't exist anymore.") return switch(alert("Are you sure you want to send the fax as is?",, "Yes", "No")) if("Yes") diff --git a/code/modules/paperwork/bodyscan_paper.dm b/code/modules/paperwork/bodyscan_paper.dm index eb25f84a12b..30784f9b5d1 100644 --- a/code/modules/paperwork/bodyscan_paper.dm +++ b/code/modules/paperwork/bodyscan_paper.dm @@ -2,6 +2,6 @@ color = COLOR_OFF_WHITE scan_file_type = /datum/computer_file/data/bodyscan -/obj/item/paper/bodyscan/interact(mob/user, forceshow, readonly) +/obj/item/paper/bodyscan/interact(mob/user, forceshow, readonly, admin_interact = FALSE) set_content(display_medical_data(metadata, user.get_skill_value(SKILL_MEDICAL), TRUE)) . = ..() \ No newline at end of file diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 48b9de4f5e7..c66b9e75266 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -2,7 +2,7 @@ name = "clipboard" desc = "It's a board with a clip used to organise papers." icon = 'icons/obj/items/clipboard.dmi' - icon_state = "clipboard" + icon_state = "clipboard_preview" item_state = "clipboard" throwforce = 0 w_class = ITEM_SIZE_SMALL @@ -52,11 +52,13 @@ /obj/item/clipboard/on_update_icon() ..() + icon_state = "clipboard" var/obj/item/top_paper = top_paper() if(top_paper) var/mutable_appearance/I = new /mutable_appearance(top_paper) I.appearance_flags |= RESET_COLOR I.plane = FLOAT_PLANE + I.layer = FLOAT_LAYER I.pixel_x = 0 I.pixel_y = 0 I.pixel_w = 0 diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 93e012a37d0..e9fdaaf3fa7 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -14,7 +14,7 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to name = "circuitboard (fax machine)" build_path = /obj/machinery/faxmachine board_type = "machine" - origin_tech = "{'engineering':1, 'programming':1}" + origin_tech = @'{"engineering":1, "programming":1}' req_components = list( /obj/item/stock_parts/printer = 1, /obj/item/stock_parts/manipulator = 1, @@ -116,18 +116,18 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to printer = get_component_of_type(/obj/item/stock_parts/printer) if(disk_reader) - disk_reader.register_on_insert(CALLBACK(src, /obj/machinery/faxmachine/proc/on_insert_disk)) - disk_reader.register_on_eject( CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui)) + disk_reader.register_on_insert(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_insert_disk))) + disk_reader.register_on_eject( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui))) if(card_reader) - card_reader.register_on_insert(CALLBACK(src, /obj/machinery/faxmachine/proc/on_insert_card)) - card_reader.register_on_eject( CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui)) + card_reader.register_on_insert(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_insert_card))) + card_reader.register_on_eject( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui))) if(printer) - printer.register_on_printed_page( CALLBACK(src, /obj/machinery/faxmachine/proc/on_printed_page)) - printer.register_on_finished_queue(CALLBACK(src, /obj/machinery/faxmachine/proc/on_queue_finished)) - printer.register_on_print_error( CALLBACK(src, /obj/machinery/faxmachine/proc/on_print_error)) - printer.register_on_status_changed(CALLBACK(src, /obj/machinery/faxmachine/proc/update_ui)) + printer.register_on_printed_page( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_printed_page))) + printer.register_on_finished_queue(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_queue_finished))) + printer.register_on_print_error( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, on_print_error))) + printer.register_on_status_changed(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/faxmachine, update_ui))) /obj/machinery/faxmachine/interface_interact(mob/user) ui_interact(user) @@ -655,7 +655,7 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to /decl/public_access/public_method/fax_receive_document name = "Send Fax Message" desc = "Sends the specified document over to the specified network tag." - call_proc = /obj/machinery/faxmachine/proc/receive_fax + call_proc = TYPE_PROC_REF(/obj/machinery/faxmachine, receive_fax) forward_args = TRUE //////////////////////////////////////////////////////////////////////////////////////// @@ -683,6 +683,10 @@ var/global/list/adminfaxes = list() //cache for faxes that have been sent to msg += "(TAKE) (REPLY): " msg += "Receiving '[rcvdcopy.name]' via secure connection ... view message" + if (istype(doc, /obj/item/paper)) + var/obj/item/paper/paper = doc + SSwebhooks.send(WEBHOOK_FAX_SENT, list("title" = "Incoming fax transmission from [sender] in [faxname] for [dest_display_name].", "body" = "[paper.info]")) + for(var/client/C in global.admins) if(check_rights((R_ADMIN|R_MOD),0,C)) to_chat(C, msg) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 19b69dbe898..4e728b71bd9 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -9,7 +9,7 @@ material = /decl/material/solid/metal/steel density = TRUE anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE obj_flags = OBJ_FLAG_ANCHORABLE tool_interaction_flags = TOOL_INTERACTION_ANCHOR | TOOL_INTERACTION_DECONSTRUCT var/tmp/list/can_hold = list( @@ -70,7 +70,7 @@ desc = "A filing cabinet installed into a cavity in the wall to save space. Wow!" icon_state = "wallcabinet" obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' /obj/structure/filing_cabinet/tall icon_state = "tallcabinet" diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 12a71b32301..9dfc687276d 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -45,7 +45,7 @@ if(length(label)) to_chat(user, "Its label text reads '[SPAN_ITALIC(label)]'.") else - to_chat(user, SPAN_NOTICE("You're too far away to tell much more..")) + to_chat(user, SPAN_NOTICE("You're too far away to tell much more.")) /obj/item/hand_labeler/attack(mob/living/M, mob/living/user, target_zone, animate) return //No attacking @@ -91,7 +91,7 @@ update_icon() /obj/item/hand_labeler/proc/show_action_radial_menu(var/mob/user) - //#TODO: Cache some of that stuff.. + //#TODO: Cache some of that stuff. var/image/btn_power = image('icons/screen/radial.dmi', icon_state = safety? "radial_power" : "radial_power_off") btn_power.plane = FLOAT_PLANE btn_power.layer = FLOAT_LAYER @@ -248,7 +248,7 @@ // Attach Label Overrides //////////////////////////////////////////////////////////// /atom/proc/attach_label(var/mob/user, var/atom/labeler, var/label_text) - to_chat(user, SPAN_WARNING("The label refuses to stick to [name].")) + to_chat(user, SPAN_WARNING("The label refuses to stick to \the [src].")) return FALSE /mob/observer/attach_label(mob/user, atom/labeler, label_text) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index ea84b95ff49..896fd8e0548 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -86,16 +86,20 @@ /obj/item/paper/on_update_icon() . = ..() + if(is_crumpled) icon_state = "scrap" - return //No overlays on crumpled paper else icon_state = initial(icon_state) - update_contents_overlays() + update_contents_overlays() + //The appearence is the key, the type is the value + for(var/image/key in applied_stamps) + add_overlay(key) - //The appearence is the key, the type is the value - for(var/image/key in applied_stamps) - add_overlay(key) + // Update clipboard/paper bundle. + if(istype(loc, /obj/item/clipboard) || istype(loc, /obj/item/paper_bundle)) + compile_overlays() + loc.update_icon() /**Applies the overlay displayed when the paper contains some text. */ /obj/item/paper/proc/update_contents_overlays() @@ -116,8 +120,10 @@ else to_chat(user, SPAN_NOTICE("You have to go closer if you want to read it.")) -/obj/item/paper/interact(mob/user, var/forceshow = FALSE, var/readonly = FALSE) - var/show_info = user.handle_reading_literacy(user, readonly? info : info_links, FALSE, (forceshow || get_dist(src, user) <= 1)) +/obj/item/paper/interact(mob/user, forceshow, readonly, admin_interact = FALSE) + var/show_info = readonly ? info : info_links + if(!admin_interact) + show_info = user.handle_reading_literacy(user, show_info, FALSE, (forceshow || get_dist(src, user) <= 1)) if(show_info) user.set_machine(src) show_browser(user, "[name][show_info][stamp_text]", "window=[name]") @@ -149,26 +155,35 @@ return TRUE /obj/item/paper/attack(mob/living/carbon/M, mob/living/carbon/user) - if(user.get_target_zone() == BP_EYES) - user.visible_message(SPAN_NOTICE("You show the paper to [M]."), \ - SPAN_NOTICE("[user] holds up a paper and shows it to [M].")) + var/target_zone = user.get_target_zone() + if(target_zone == BP_EYES) + user.visible_message( + SPAN_NOTICE("You show the paper to [M]."), + SPAN_NOTICE("[user] holds up a paper and shows it to [M].") + ) M.examinate(src) + return TRUE - else if(user.get_target_zone() == BP_MOUTH) // lipstick wiping - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H == user) - to_chat(user, SPAN_NOTICE("You wipe off the lipstick with [src].")) - H.lip_style = null - H.update_body() - else - user.visible_message(SPAN_WARNING("[user] begins to wipe [H]'s lipstick off with \the [src]."), \ - SPAN_NOTICE("You begin to wipe off [H]'s lipstick.")) - if(do_after(user, 10, H) && do_after(H, 10, check_holding = 0)) //user needs to keep their active hand, H does not. - user.visible_message(SPAN_NOTICE("[user] wipes [H]'s lipstick off with \the [src]."), \ - SPAN_NOTICE("You wipe off [H]'s lipstick.")) - H.lip_style = null - H.update_body() + target_zone = check_zone(target_zone) + if(M.get_organ_sprite_accessory_by_category(SAC_COSMETICS, target_zone)) + var/mob/living/carbon/human/H = M + if(H == user) + to_chat(user, SPAN_NOTICE("You wipe off the makeup with [src].")) + H.set_organ_sprite_accessory_by_category(null, SAC_COSMETICS, null, FALSE, FALSE, target_zone, FALSE) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] begins to wipe \the [H]'s makeup off with \the [src]."), + SPAN_NOTICE("You begin to wipe off [H]'s makeup .") + ) + if(do_after(user, 10, H) && do_after(H, 10, check_holding = 0)) //user needs to keep their active hand, H does not. + user.visible_message( + SPAN_NOTICE("\The [user] wipes \the [H]'s makeup off with \the [src]."), + SPAN_NOTICE("You wipe off \the [H]'s makeup .") + ) + H.set_organ_sprite_accessory_by_category(null, SAC_COSMETICS, null, FALSE, FALSE, target_zone, FALSE) + return TRUE + + . = ..() /obj/item/paper/proc/addtofield(var/id, var/text, var/links = 0) var/locid = 0 @@ -292,7 +307,7 @@ to_chat(user, SPAN_WARNING("You must hold \the [P] steady to burn \the [src].")) /obj/item/paper/CouldNotUseTopic(mob/user) - to_chat(user, SPAN_WARNING("You can't do that!")) + to_chat(user, SPAN_WARNING("You can't reach!")) /obj/item/paper/OnTopic(mob/user, href_list, datum/topic_state/state) @@ -310,9 +325,9 @@ //If we got a pen that's not in our hands, make sure to move it over if(user.get_active_hand() != I && user.get_empty_hand_slot() && user.put_in_hands(I)) - to_chat(user, SPAN_NOTICE("You grab your trusty [I]!")) + to_chat(user, SPAN_NOTICE("You grab your trusty [I.name]!")) else if(user.get_active_hand() != I) - to_chat(user, SPAN_WARNING("You'd use your trusty [I], but your hands are full!")) + to_chat(user, SPAN_WARNING("You'd use your trusty [I.name], but your hands are full!")) return TOPIC_NOACTION var/pen_flags = I.get_tool_property(TOOL_PEN, TOOL_PROP_PEN_FLAG) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 910bb13cf0a..892352f9218 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -19,8 +19,8 @@ drop_sound = 'sound/foley/paperpickup1.ogg' pickup_sound = 'sound/foley/paperpickup2.ogg' item_flags = ITEM_FLAG_CAN_TAPE - health = 10 - max_health = 10 + current_health = 10 + max_health = 10 var/tmp/cur_page = 1 // current page var/tmp/max_pages = 100 //Maximum number of papers that can be in the bundle var/list/pages // Ordered list of pages as they are to be displayed. Can be different order than src.contents. @@ -50,19 +50,21 @@ return TRUE else if(istype(W, /obj/item/stack/tape_roll/duct_tape)) - var/obj/P = pages[cur_page] - . = P.attackby(W, user) - update_icon() - updateUsrDialog() - return TRUE + var/obj/P = LAZYACCESS(pages, cur_page) + if(P) + . = P.attackby(W, user) + update_icon() + updateUsrDialog() + return else if(IS_PEN(W) || istype(W, /obj/item/stamp)) close_browser(user, "window=[name]") - var/obj/P = pages[cur_page] - . = P.attackby(W, user) - update_icon() - updateUsrDialog() - return . + var/obj/P = LAZYACCESS(pages, cur_page) + if(P) + . = P.attackby(W, user) + update_icon() + updateUsrDialog() + return return ..() @@ -182,7 +184,7 @@ user.visible_message( \ "\The [user] holds \the [P] up to \the [src]. It looks like [G.he] [G.is] trying to burn it!", \ "You hold \the [P] up to \the [src], burning it slowly.") - addtimer(CALLBACK(src, .proc/burn_callback, P, user, span_class), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(burn_callback), P, user, span_class), 2 SECONDS) /obj/item/paper_bundle/examine(mob/user, distance) . = ..() @@ -193,8 +195,7 @@ /obj/item/paper_bundle/interact(mob/user) var/dat - var/obj/item/W = pages[cur_page] - + var/obj/item/W = LAZYACCESS(pages, cur_page) //Header dat = "" dat += "
    " @@ -298,11 +299,11 @@ . = ..() underlays.Cut() - var/obj/item/paper/P = pages[1] - icon = P.icon - icon_state = P.icon_state - - copy_overlays(P) + var/obj/item/paper/P = LAZYACCESS(pages, 1) + if(P) + icon = P.icon + icon_state = P.icon_state + copy_overlays(P) var/paper_count = 0 var/photo_count = 0 @@ -423,7 +424,7 @@ /obj/item/paper_bundle/DefaultTopicState() return global.paper_topic_state -//We don't contain any matter, since we're not really a material thing.. +//We don't contain any matter, since we're not really a material thing. /obj/item/paper_bundle/create_matter() UNSETEMPTY(matter) diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm index 47dd62c546c..3d44ca28c66 100644 --- a/code/modules/paperwork/paper_sticky.dm +++ b/code/modules/paperwork/paper_sticky.dm @@ -13,7 +13,7 @@ var/papers = 50 var/tmp/max_papers = 50 var/paper_type = /obj/item/paper/sticky - var/obj/item/paper/top //The instanciated paper on the top of the pad, if there's one + var/obj/item/paper/top //The instantiated paper on the top of the pad, if there's one /obj/item/sticky_pad/Initialize(ml, material_key) . = ..() @@ -97,7 +97,7 @@ /obj/item/paper/sticky/Initialize() . = ..() - events_repository.register(/decl/observ/moved, src, src, /obj/item/paper/sticky/proc/reset_persistence_tracking) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/paper/sticky, reset_persistence_tracking)) /obj/item/paper/sticky/proc/reset_persistence_tracking() SSpersistence.forget_value(src, /decl/persistence_handler/paper/sticky) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index a5a861b830d..97f80cf22dd 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -21,7 +21,7 @@ LAZYCLEARLIST(papers) //Gets rid of any refs return ..() -/obj/item/paper_bin/handle_mouse_drop(atom/over, mob/user) +/obj/item/paper_bin/handle_mouse_drop(atom/over, mob/user, params) if((loc == user || in_range(src, user)) && user.get_empty_hand_slot()) user.put_in_hands(src) return TRUE diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 69b22f4e843..0e732bc61b3 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -8,7 +8,7 @@ icon_state = "papershredder0" density = TRUE anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE obj_flags = OBJ_FLAG_ANCHORABLE idle_power_usage = 0 stat_immune = NOSCREEN | NOINPUT @@ -16,7 +16,7 @@ construct_state = /decl/machine_construction/default/panel_closed required_interaction_dexterity = DEXTERITY_SIMPLE_MACHINES uncreated_component_parts = list( - /obj/item/stock_parts/power/apc = 1, + /obj/item/stock_parts/power/apc = 1 ) var/list/shredder_bin //List of shreded material type to matter amount var/cached_total_matter = 0 //Total of all the matter units we put in the shredder so far @@ -176,7 +176,7 @@ /obj/machinery/papershredder/on_update_icon() cut_overlays() var/ratio = ((cached_total_matter * 5) / max_total_matter) - icon_state = "papershredder[clamp(0, CEILING(ratio), 5)]" + icon_state = "papershredder[clamp(CEILING(ratio), 0, 5)]" if(!is_unpowered()) add_overlay("papershredder_power") if(is_broken() || is_bin_full()) @@ -247,5 +247,6 @@ fire_act() /obj/item/shreddedp/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + SHOULD_CALL_PARENT(FALSE) new /obj/effect/decal/cleanable/ash(get_turf(src)) physically_destroyed() diff --git a/code/modules/paperwork/pen/crayon.dm b/code/modules/paperwork/pen/crayon.dm index 64cd4b94c2a..8db8bdb772d 100644 --- a/code/modules/paperwork/pen/crayon.dm +++ b/code/modules/paperwork/pen/crayon.dm @@ -1,25 +1,34 @@ /obj/item/pen/crayon - name = "crayon" - icon = 'icons/obj/items/crayons.dmi' - icon_state = "crayonred" - w_class = ITEM_SIZE_TINY - attack_verb = list("attacked", "coloured", "crayon'd") - stroke_colour = "#ff0000" //RGB - stroke_colour_name = "red" - medium_name = "crayon" - pen_flag = PEN_FLAG_ACTIVE | PEN_FLAG_CRAYON | PEN_FLAG_DEL_EMPTY - pen_quality = TOOL_QUALITY_BAD //Writing with those things is awkward - max_uses = 30 - pen_font = PEN_FONT_CRAYON - var/shade_colour = "#220000" //RGB + name = "crayon" + icon = 'icons/obj/items/crayon.dmi' + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_TINY + attack_verb = list("attacked", "coloured", "crayon'd") + stroke_color = COLOR_RED + color = COLOR_RED + stroke_color_name = "red" + medium_name = "crayon" + pen_flag = PEN_FLAG_ACTIVE | PEN_FLAG_CRAYON | PEN_FLAG_DEL_EMPTY + pen_quality = TOOL_QUALITY_BAD //Writing with those things is awkward + max_uses = 30 + pen_font = PEN_FONT_CRAYON + material = /decl/material/solid/organic/wax + var/shade_color = "#220000" //RGB + var/pigment_type = /decl/material/liquid/pigment + var/use_stroke_color = TRUE + +/obj/item/pen/crayon/Initialize() + . = ..() + if(use_stroke_color) + color = stroke_color /obj/item/pen/crayon/make_pen_description() - desc = "A colourful [stroke_colour_name] [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose." + desc = "A colourful [stroke_color_name] [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose." -/obj/item/pen/crayon/set_medium_color(_color, _color_name, var/_shade_colour) +/obj/item/pen/crayon/set_medium_color(_color, _color_name, var/_shade_color) . = ..(_color, _color_name) - shade_colour = _shade_colour - set_tool_property(TOOL_PEN, TOOL_PROP_PEN_SHADE_COLOR, shade_colour) + shade_color = _shade_color + set_tool_property(TOOL_PEN, TOOL_PROP_PEN_SHADE_COLOR, shade_color) /obj/item/pen/crayon/afterattack(turf/target, mob/user, proximity) if(!proximity) @@ -41,90 +50,82 @@ draw_message = "drawing an arrow" if(do_tool_interaction(TOOL_PEN, user, target, 5 SECONDS, draw_message, "drawing on", fuel_expenditure = 1)) - new /obj/effect/decal/cleanable/crayon(target, stroke_colour, shade_colour, drawtype) + new /obj/effect/decal/cleanable/crayon(target, stroke_color, shade_color, drawtype) target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. return -/obj/item/pen/crayon/attack(mob/living/M, mob/user) - if(istype(M) && M == user) - var/decl/tool_archetype/pen/parch = GET_DECL(TOOL_PEN) - playsound(src, 'sound/weapons/bite.ogg', 40) - to_chat(M, SPAN_NOTICE("You take a bite of the crayon and swallow it.")) - M.adjust_nutrition(1) - var/uses = get_tool_property(TOOL_PEN, TOOL_PROP_USES) - M.reagents.add_reagent(/decl/material/liquid/pigment, min(5,uses)/3) - if(parch.decrement_uses(user, src, 5) <= 0) - to_chat(M, SPAN_WARNING("You ate your crayon!")) - return - . = ..() - /obj/item/pen/crayon/red - icon_state = "crayonred" - stroke_colour = "#da0000" - shade_colour = "#810c0c" - stroke_colour_name = "red" + stroke_color = "#da0000" + shade_color = "#810c0c" + stroke_color_name = "red" + pigment_type = /decl/material/liquid/pigment/red /obj/item/pen/crayon/orange - icon_state = "crayonorange" - stroke_colour = "#ff9300" - stroke_colour_name = "orange" - shade_colour = "#a55403" + stroke_color = "#ff9300" + stroke_color_name = "orange" + shade_color = "#a55403" + pigment_type = /decl/material/liquid/pigment/orange /obj/item/pen/crayon/yellow - icon_state = "crayonyellow" - stroke_colour = "#fff200" - shade_colour = "#886422" - stroke_colour_name = "yellow" + stroke_color = "#fff200" + shade_color = "#886422" + stroke_color_name = "yellow" + pigment_type = /decl/material/liquid/pigment/yellow /obj/item/pen/crayon/green - icon_state = "crayongreen" - stroke_colour = "#a8e61d" - shade_colour = "#61840f" - stroke_colour_name = "green" + stroke_color = "#a8e61d" + shade_color = "#61840f" + stroke_color_name = "green" + pigment_type = /decl/material/liquid/pigment/green /obj/item/pen/crayon/blue - icon_state = "crayonblue" - stroke_colour = "#00b7ef" - shade_colour = "#0082a8" - stroke_colour_name = "blue" + stroke_color = "#00b7ef" + shade_color = "#0082a8" + stroke_color_name = "blue" + pigment_type = /decl/material/liquid/pigment/blue /obj/item/pen/crayon/purple - icon_state = "crayonpurple" - stroke_colour = "#da00ff" - shade_colour = "#810cff" - stroke_colour_name = "purple" + stroke_color = "#da00ff" + shade_color = "#810cff" + stroke_color_name = "purple" + pigment_type = /decl/material/liquid/pigment/purple /obj/item/pen/crayon/mime - icon_state = "crayonmime" - stroke_colour = "#ffffff" - shade_colour = "#000000" - stroke_colour_name = "mime" - max_uses = -1 //Infinite + icon = 'icons/obj/items/crayon_mime.dmi' + color = null + stroke_color = "#ffffff" + shade_color = "#000000" + stroke_color_name = "mime" + max_uses = -1 //Infinite + pigment_type = null + use_stroke_color = FALSE /obj/item/pen/crayon/mime/make_pen_description() desc = "A very sad-looking crayon." /obj/item/pen/crayon/mime/attack_self(mob/user) //inversion - if(stroke_colour != "#ffffff" && shade_colour != "#000000") - set_medium_color("#ffffff", stroke_colour_name, "#000000") + if(stroke_color != "#ffffff" && shade_color != "#000000") + set_medium_color("#ffffff", stroke_color_name, "#000000") to_chat(user, "You will now draw in white and black with this crayon.") else - set_medium_color("#000000", stroke_colour_name, "#ffffff") + set_medium_color("#000000", stroke_color_name, "#ffffff") to_chat(user, "You will now draw in black and white with this crayon.") return /obj/item/pen/crayon/rainbow - icon_state = "crayonrainbow" - stroke_colour = "#fff000" - shade_colour = "#000fff" - stroke_colour_name = "rainbow" - max_uses = -1 + icon = 'icons/obj/items/crayon_rainbow.dmi' + color = null + stroke_color = "#fff000" + shade_color = "#000fff" + stroke_color_name = "rainbow" + max_uses = -1 + pigment_type = null + use_stroke_color = FALSE /obj/item/pen/crayon/rainbow/make_pen_description() desc = "A very colourful [istype(material)?"[material.name] ":null][medium_name]. Please refrain from eating it or putting it in your nose." /obj/item/pen/crayon/rainbow/attack_self(mob/user) - stroke_colour = input(user, "Please select the main colour.", "Crayon colour") as color - shade_colour = input(user, "Please select the shade colour.", "Crayon colour") as color - set_medium_color(stroke_colour, stroke_colour_name, shade_colour) - return + stroke_color = input(user, "Please select the main colour.", "Crayon colour") as color + shade_color = input(user, "Please select the shade colour.", "Crayon colour") as color + set_medium_color(stroke_color, stroke_color_name, shade_color) diff --git a/code/modules/paperwork/pen/crayon_edibility.dm b/code/modules/paperwork/pen/crayon_edibility.dm new file mode 100644 index 00000000000..ba7666f17e4 --- /dev/null +++ b/code/modules/paperwork/pen/crayon_edibility.dm @@ -0,0 +1,21 @@ +/obj/item/pen/crayon/transfer_eaten_material(mob/eater, amount) + var/decl/tool_archetype/pen/parch = GET_DECL(TOOL_PEN) + parch.decrement_uses(eater, src, amount, destroy_on_zero = FALSE) // we'll qdel in food code if we eat the end of the crayon + if(!isliving(eater)) + return + var/mob/living/living_eater = eater + var/datum/reagents/eater_ingested = living_eater.get_ingested_reagents() + if(!eater_ingested) + return + if(pigment_type) + var/partial_amount = CEILING(amount * 0.4) + eater_ingested.add_reagent(pigment_type, partial_amount) + eater_ingested.add_reagent(/decl/material/solid/organic/wax, amount - partial_amount) + else + eater_ingested.add_reagent(/decl/material/solid/organic/wax, amount) + +/obj/item/pen/crayon/get_edible_material_amount(mob/eater) + return max(0, get_tool_property(TOOL_PEN, TOOL_PROP_USES)) + +/obj/item/pen/crayon/get_food_default_transfer_amount(mob/eater) + return eater?.get_eaten_transfer_amount(5) diff --git a/code/modules/paperwork/pen/fancy.dm b/code/modules/paperwork/pen/fancy.dm index 0bb353669e2..4607e7d754b 100644 --- a/code/modules/paperwork/pen/fancy.dm +++ b/code/modules/paperwork/pen/fancy.dm @@ -1,16 +1,16 @@ /obj/item/pen/fancy - name = "fountain pen" - icon = 'icons/obj/items/pens/pen_fancy.dmi' - sharp = 1 //pointy - stroke_colour = "#1c1713" //dark ashy brownish - stroke_colour_name = "dark ashy brownish" - material = /decl/material/solid/metal/steel - pen_flag = PEN_FLAG_ACTIVE | PEN_FLAG_FANCY - pen_quality = TOOL_QUALITY_GOOD - pen_font = PEN_FONT_FANCY_PEN + name = "fountain pen" + icon = 'icons/obj/items/pens/pen_fancy.dmi' + sharp = 1 //pointy + stroke_color = "#1c1713" //dark ashy brownish + stroke_color_name = "dark ashy brownish" + material = /decl/material/solid/metal/steel + pen_flag = PEN_FLAG_ACTIVE | PEN_FLAG_FANCY + pen_quality = TOOL_QUALITY_GOOD + pen_font = PEN_FONT_FANCY_PEN /obj/item/pen/fancy/make_pen_description() - desc = "A high quality [istype(material)?"[material.name] ":null]traditional [stroke_colour_name] [medium_name] fountain pen with an internal reservoir and an extra fine gold-platinum nib. Guaranteed never to leak." + desc = "A high quality [istype(material)?"[material.name] ":null]traditional [stroke_color_name] [medium_name] fountain pen with an internal reservoir and an extra fine gold-platinum nib. Guaranteed never to leak." /obj/item/pen/fancy/quill name = "dire goose quill" diff --git a/code/modules/paperwork/pen/multi_pen.dm b/code/modules/paperwork/pen/multi_pen.dm index f2c7cb636e6..500a573a8eb 100644 --- a/code/modules/paperwork/pen/multi_pen.dm +++ b/code/modules/paperwork/pen/multi_pen.dm @@ -3,8 +3,8 @@ desc = "It's a pen with multiple colors of ink!" pen_quality = TOOL_QUALITY_MEDIOCRE var/colour_idx = 1 - var/stroke_colours = list("black", "blue", "red", "green") - var/stroke_colour_names = list("black", "blue", "red", "green") + var/stroke_colors = list("black", "blue", "red", "green") + var/stroke_color_names = list("black", "blue", "red", "green") var/colour_icons = list( 'icons/obj/items/pens/pen.dmi', 'icons/obj/items/pens/pen_blue.dmi', @@ -17,15 +17,15 @@ change_colour(colour_idx) /obj/item/pen/multi/make_pen_description() - desc = "It's [istype(material)?"[ADD_ARTICLE(material.name)]":"a"] pen with multiple colors of ink! It's currently set to [stroke_colour_name] [medium_name]." + desc = "It's [istype(material)?"[ADD_ARTICLE(material.name)]":"a"] pen with multiple colors of ink! It's currently set to [stroke_color_name] [medium_name]." /obj/item/pen/multi/proc/change_colour(var/new_idx) colour_idx = new_idx - if(colour_idx > length(stroke_colours)) + if(colour_idx > length(stroke_colors)) colour_idx = 1 icon = colour_icons[colour_idx] - set_medium_color(stroke_colours[colour_idx], stroke_colour_names[colour_idx]) - + set_medium_color(stroke_colors[colour_idx], stroke_color_names[colour_idx]) + /obj/item/pen/multi/attack_self(mob/user) change_colour((++colour_idx)) - to_chat(user, SPAN_NOTICE("Changed color to '[stroke_colour_name] [medium_name].'")) + to_chat(user, SPAN_NOTICE("Changed color to '[stroke_color_name] [medium_name].'")) diff --git a/code/modules/paperwork/pen/pen.dm b/code/modules/paperwork/pen/pen.dm index a59046d7236..8dfb5b6912c 100644 --- a/code/modules/paperwork/pen/pen.dm +++ b/code/modules/paperwork/pen/pen.dm @@ -10,8 +10,8 @@ throw_range = 15 material = /decl/material/solid/organic/plastic var/pen_flag = PEN_FLAG_ACTIVE //Properties/state of the pen used. - var/stroke_colour = "black" //What colour the ink is! Can be hexadecimal colour or a colour name string. - var/stroke_colour_name = "black" //Human readable name of the stroke colour. Used in text strings, and to identify the nearest colour to the stroke colour. + var/stroke_color = "black" //What colour the ink is! Can be hexadecimal colour or a colour name string. + var/stroke_color_name = "black" //Human readable name of the stroke colour. Used in text strings, and to identify the nearest colour to the stroke colour. var/medium_name = "ink" //Whatever the pen uses to leave its mark. Used in text strings. var/max_uses = -1 //-1 for unlimited uses. var/pen_quality = TOOL_QUALITY_DEFAULT //What will be set as tool quality for the pen @@ -22,33 +22,33 @@ . = ..() set_extension(src, /datum/extension/tool, list( - TOOL_DRILL = TOOL_QUALITY_WORST, + TOOL_SURGICAL_DRILL = TOOL_QUALITY_WORST, TOOL_PEN = pen_quality), list( TOOL_PEN = list( - TOOL_PROP_COLOR_NAME = stroke_colour_name, - TOOL_PROP_COLOR = stroke_colour, + TOOL_PROP_COLOR_NAME = stroke_color_name, + TOOL_PROP_COLOR = stroke_color, TOOL_PROP_PEN_FLAG = pen_flag, TOOL_PROP_USES = max_uses, TOOL_PROP_PEN_FONT = pen_font))) make_pen_description() /obj/item/pen/attack(atom/A, mob/user, target_zone) - if(ismob(A)) - var/mob/M = A - if(ishuman(A) && user.a_intent == I_HELP && target_zone == BP_HEAD) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD, /obj/item/organ/external/head) - if(istype(head)) - head.write_on(user, "[stroke_colour_name] [medium_name]") - else - to_chat(user, SPAN_WARNING("You stab [M] with \the [src].")) - admin_attack_log(user, M, "Stabbed using \a [src]", "Was stabbed with \a [src]", "used \a [src] to stab") - else if(istype(A, /obj/item/organ/external/head)) + if(isliving(A) && user.a_intent == I_HELP && target_zone == BP_HEAD) + var/mob/living/M = A + var/obj/item/organ/external/head/head = M.get_organ(BP_HEAD, /obj/item/organ/external/head) + if(istype(head)) + head.write_on(user, "[stroke_color_name] [medium_name]") + return TRUE + + if(istype(A, /obj/item/organ/external/head)) var/obj/item/organ/external/head/head = A - head.write_on(user, "[stroke_colour_name] [medium_name]") + head.write_on(user, "[stroke_color_name] [medium_name]") + return TRUE + + return ..() /obj/item/pen/proc/toggle() if(pen_flag & PEN_FLAG_ACTIVE) @@ -60,34 +60,34 @@ update_icon() /obj/item/pen/proc/set_medium_color(var/_color, var/_color_name) - stroke_colour = _color - stroke_colour_name = _color_name - set_tool_property(TOOL_PEN, TOOL_PROP_COLOR, stroke_colour) - set_tool_property(TOOL_PEN, TOOL_PROP_COLOR_NAME, stroke_colour_name) + stroke_color = _color + stroke_color_name = _color_name + set_tool_property(TOOL_PEN, TOOL_PROP_COLOR, stroke_color) + set_tool_property(TOOL_PEN, TOOL_PROP_COLOR_NAME, stroke_color_name) make_pen_description() /obj/item/pen/proc/make_pen_description() - desc = "Its [ADD_ARTICLE(stroke_colour_name)] [medium_name] [istype(material)? material.name : ""] pen." + desc = "Its [ADD_ARTICLE(stroke_color_name)] [medium_name] [istype(material)? material.name : ""] pen." /obj/item/pen/blue - name = "blue pen" - icon = 'icons/obj/items/pens/pen_blue.dmi' - stroke_colour = "blue" - stroke_colour_name = "blue" + name = "blue pen" + icon = 'icons/obj/items/pens/pen_blue.dmi' + stroke_color = "blue" + stroke_color_name = "blue" /obj/item/pen/red - name = "red pen" - icon = 'icons/obj/items/pens/pen_red.dmi' - stroke_colour = "red" - stroke_colour_name = "red" + name = "red pen" + icon = 'icons/obj/items/pens/pen_red.dmi' + stroke_color = "red" + stroke_color_name = "red" /obj/item/pen/green - name = "green pen" - icon = 'icons/obj/items/pens/pen_green.dmi' - stroke_colour = "green" - stroke_colour_name = "green" + name = "green pen" + icon = 'icons/obj/items/pens/pen_green.dmi' + stroke_color = "green" + stroke_color_name = "green" /obj/item/pen/invisible - name = "pen" - stroke_colour = "white" - stroke_colour_name = "transluscent" + name = "pen" + stroke_color = "white" + stroke_color_name = "transluscent" diff --git a/code/modules/paperwork/pen/reagent_pen.dm b/code/modules/paperwork/pen/reagent_pen.dm index 1b531b72cce..fef8535af42 100644 --- a/code/modules/paperwork/pen/reagent_pen.dm +++ b/code/modules/paperwork/pen/reagent_pen.dm @@ -1,6 +1,6 @@ /obj/item/pen/reagent atom_flags = ATOM_FLAG_OPEN_CONTAINER - origin_tech = "{'materials':2,'esoteric':5}" + origin_tech = @'{"materials":2,"esoteric":5}' sharp = 1 pen_quality = TOOL_QUALITY_MEDIOCRE @@ -38,10 +38,10 @@ * Sleepy Pens */ /obj/item/pen/reagent/sleepy - origin_tech = "{'materials':2,'esoteric':5}" + origin_tech = @'{"materials":2,"esoteric":5}' /obj/item/pen/reagent/sleepy/make_pen_description() - desc = "It's \a [stroke_colour_name] [medium_name] pen with a sharp point and a carefully engraved \"Waffle Co.\"." + desc = "It's \a [stroke_color_name] [medium_name] pen with a sharp point and a carefully engraved \"Waffle Co.\"." /obj/item/pen/reagent/sleepy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/paralytics, round(reagents.maximum_volume/2)) + add_to_reagents(/decl/material/liquid/paralytics, round(reagents.maximum_volume/2)) diff --git a/code/modules/paperwork/pen/retractable_pen.dm b/code/modules/paperwork/pen/retractable_pen.dm index 3e728611f78..ed9c8851fdc 100644 --- a/code/modules/paperwork/pen/retractable_pen.dm +++ b/code/modules/paperwork/pen/retractable_pen.dm @@ -4,23 +4,23 @@ pen_flag = PEN_FLAG_TOGGLEABLE /obj/item/pen/retractable/blue - stroke_colour = "blue" - stroke_colour_name = "blue" - icon = 'icons/obj/items/pens/pen_retractable_blue.dmi' + stroke_color = "blue" + stroke_color_name = "blue" + icon = 'icons/obj/items/pens/pen_retractable_blue.dmi' /obj/item/pen/retractable/red - stroke_colour = "red" - stroke_colour_name = "red" - icon = 'icons/obj/items/pens/pen_retractable_red.dmi' + stroke_color = "red" + stroke_color_name = "red" + icon = 'icons/obj/items/pens/pen_retractable_red.dmi' /obj/item/pen/retractable/green - stroke_colour = "green" - stroke_colour_name = "green" - icon = 'icons/obj/items/pens/pen_retractable_green.dmi' + stroke_color = "green" + stroke_color_name = "green" + icon = 'icons/obj/items/pens/pen_retractable_green.dmi' /obj/item/pen/retractable/Initialize() . = ..() - desc = "It's a retractable [stroke_colour_name] [medium_name] pen." + desc = "It's a retractable [stroke_color_name] [medium_name] pen." /obj/item/pen/retractable/on_update_icon() . = ..() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6c318baa347..01ffa0e2528 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -5,7 +5,7 @@ name = "circuitboard (photocopier)" build_path = /obj/machinery/photocopier board_type = "machine" - origin_tech = "{'engineering':1, 'programming':1}" + origin_tech = @'{"engineering":1, "programming":1}' req_components = list( /obj/item/stock_parts/printer/buildable = 1, /obj/item/stock_parts/manipulator = 2, @@ -28,7 +28,7 @@ density = TRUE idle_power_usage = 30 active_power_usage = 200 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE obj_flags = OBJ_FLAG_ANCHORABLE construct_state = /decl/machine_construction/default/panel_closed maximum_component_parts = list( @@ -60,10 +60,10 @@ printer = get_component_of_type(/obj/item/stock_parts/printer) //Cache the printer component if(printer) printer.show_queue_ctrl = FALSE //Make sure we don't let users mess with the print queue - printer.register_on_printed_page( CALLBACK(src, /obj/machinery/photocopier/proc/update_ui)) - printer.register_on_finished_queue(CALLBACK(src, /obj/machinery/photocopier/proc/update_ui)) - printer.register_on_print_error( CALLBACK(src, /obj/machinery/photocopier/proc/update_ui)) - printer.register_on_status_changed(CALLBACK(src, /obj/machinery/photocopier/proc/update_ui)) + printer.register_on_printed_page( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui))) + printer.register_on_finished_queue(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui))) + printer.register_on_print_error( CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui))) + printer.register_on_status_changed(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/photocopier, update_ui))) /obj/machinery/photocopier/on_update_icon() cut_overlays() diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index d2cd437e864..79a42e08a61 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -185,7 +185,7 @@ can_hold = list(/obj/item/photo) material = /decl/material/solid/organic/plastic -/obj/item/storage/photo_album/handle_mouse_drop(atom/over, mob/user) +/obj/item/storage/photo_album/handle_mouse_drop(atom/over, mob/user, params) if(over == user && in_range(src, user) || loc == user) if(user.active_storage) user.active_storage.close(user) @@ -212,6 +212,10 @@ var/field_of_view = 3 // squared, so 3 is a 3x3 of tiles var/obj/item/camera_film/film = new //Currently loaded film +/obj/item/camera/loaded/Initialize() + film = new(src) + return ..() + /obj/item/camera/Initialize() set_extension(src, /datum/extension/base_icon_state, icon_state) . = ..() @@ -298,9 +302,9 @@ if(length(holding)) holding = "They are holding [english_list(holding)]" if(!mob_detail) - mob_detail = "You can see [A] on the photo[(A.health / A.maxHealth) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " + mob_detail = "You can see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " else - mob_detail += "You can also see [A] on the photo[(A.health / A.maxHealth)< 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." + mob_detail += "You can also see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." return mob_detail /obj/item/camera/afterattack(atom/target, mob/user, flag) diff --git a/code/modules/paperwork/toner_cartridge.dm b/code/modules/paperwork/toner_cartridge.dm index 8550afbd739..2ac3561f7f5 100644 --- a/code/modules/paperwork/toner_cartridge.dm +++ b/code/modules/paperwork/toner_cartridge.dm @@ -19,8 +19,8 @@ /obj/item/chems/toner_cartridge/populate_reagents() //Normally this would be toner powder, but probably not worth making a material for that. - reagents.add_reagent(/decl/material/liquid/paint, reagents.maximum_volume/2) - reagents.add_reagent(/decl/material/liquid/pigment/black, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/paint, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/pigment/black, reagents.maximum_volume/2) /obj/item/chems/toner_cartridge/dump_contents() . = ..() @@ -32,7 +32,7 @@ /obj/item/chems/toner_cartridge/throw_impact(atom/hit_atom, datum/thrownthing/TT) . = ..() - health = clamp(health - (TT.speed * w_class), 0, max_health) //You don't wanna throw this around too much + current_health = clamp(current_health - (TT.speed * w_class), 0, get_max_health()) //You don't wanna throw this around too much check_health() /obj/item/chems/toner_cartridge/proc/get_amount_toner() @@ -48,5 +48,5 @@ return var/amt_each = round(amount/2) if(reagents.has_reagent(/decl/material/liquid/pigment/black, amt_each) && reagents.has_reagent(/decl/material/liquid/paint, amt_each)) - reagents.remove_any(amount) + remove_any_reagents(amount) return TRUE \ No newline at end of file diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm index b66f89eca98..9a6d48d0613 100644 --- a/code/modules/persistence/noticeboards.dm +++ b/code/modules/persistence/noticeboards.dm @@ -8,7 +8,7 @@ layer = ABOVE_WINDOW_LAYER tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' material = /decl/material/solid/organic/wood var/tmp/max_notices = 5 var/list/notices diff --git a/code/modules/pointdefense/pointdefense.dm b/code/modules/pointdefense/pointdefense.dm index d3512ca7c4c..dfec4c84562 100644 --- a/code/modules/pointdefense/pointdefense.dm +++ b/code/modules/pointdefense/pointdefense.dm @@ -8,7 +8,7 @@ anchored = TRUE base_type = /obj/machinery/pointdefense_control construct_state = /decl/machine_construction/default/panel_closed - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE var/ui_template = "pointdefense_control.tmpl" var/initial_id_tag @@ -105,7 +105,7 @@ desc = "A Kuiper pattern anti-meteor battery. Capable of destroying most threats in a single salvo." density = TRUE anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE idle_power_usage = 0.1 KILOWATTS construct_state = /decl/machine_construction/default/panel_closed base_type = /obj/machinery/pointdefense @@ -159,7 +159,7 @@ var/Angle = round(Get_Angle(src,M)) var/matrix/rot_matrix = matrix() rot_matrix.Turn(Angle) - addtimer(CALLBACK(src, .proc/finish_shot, target), rotation_speed) + addtimer(CALLBACK(src, PROC_REF(finish_shot), target), rotation_speed) animate(src, transform = rot_matrix, rotation_speed, easing = SINE_EASING) set_dir(transform.get_angle() > 0 ? NORTH : SOUTH) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 4190c0b618b..27911cf1baa 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -100,7 +100,7 @@ var/global/list/all_apcs = list() initial_access = list(access_engine_equip) clicksound = "switch" layer = ABOVE_WINDOW_LAYER - directional_offset = "{'NORTH':{'y':22}, 'SOUTH':{'y':-22}, 'EAST':{'x':22}, 'WEST':{'x':-22}}" + directional_offset = @'{"NORTH":{"y":22}, "SOUTH":{"y":-22}, "EAST":{"x":22}, "WEST":{"x":-22}}' var/powered_down = FALSE var/area/area @@ -220,14 +220,14 @@ var/global/list/all_apcs = list() old_area.power_environ = 0 power_alarm.clearAlarm(old_area, src) old_area.power_change() - events_repository.unregister(/decl/observ/name_set, old_area, src, .proc/change_area_name) + events_repository.unregister(/decl/observ/name_set, old_area, src, PROC_REF(change_area_name)) if(new_area) ASSERT(isnull(new_area.apc)) ASSERT(isnull(area)) new_area.apc = src area = new_area change_area_name(new_area, null, new_area.name) - events_repository.register(/decl/observ/name_set, new_area, src, .proc/change_area_name) + events_repository.register(/decl/observ/name_set, new_area, src, PROC_REF(change_area_name)) /obj/machinery/power/apc/get_req_access() if(!locked) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index 608c4b19704..6d5065007fa 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -47,7 +47,7 @@ icon_update = 0 var/cellcount = 0 - var/charge_level = clamp(0, round(Percentage() / 12), 7) + var/charge_level = clamp(round(Percentage() / 12), 0, 7) overlays += "charge[charge_level]" @@ -67,7 +67,7 @@ newmaxcharge += C.maxcharge capacity = newmaxcharge - charge = clamp(0, charge, newmaxcharge) + charge = clamp(charge, 0, newmaxcharge) // Sets input/output depending on our "mode" var. @@ -182,7 +182,7 @@ celldiff = (least.maxcharge / 100) * percentdiff else celldiff = (most.maxcharge / 100) * percentdiff - celldiff = clamp(0, celldiff, max_transfer_rate * CELLRATE) + celldiff = clamp(celldiff, 0, max_transfer_rate * CELLRATE) // Ensure we don't transfer more energy than the most charged cell has, and that the least charged cell can input. celldiff = min(min(celldiff, most.charge), least.maxcharge - least.charge) least.give(most.use(celldiff)) @@ -260,7 +260,7 @@ update_io(0) return 1 else if( href_list["enable"] ) - update_io(clamp(1, text2num(href_list["enable"]), 3)) + update_io(clamp(text2num(href_list["enable"]), 1, 3)) return 1 else if( href_list["equaliseon"] ) equalise = 1 diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index c1e1c7610d1..bf0c3c7fc75 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -46,18 +46,18 @@ /obj/machinery/power/breakerbox/attack_ai(mob/living/silicon/ai/user) if(update_locked) - to_chat(user, "System locked. Please try again later.") + to_chat(user, SPAN_WARNING("System locked. Please try again later.")) return if(busy) - to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.") + to_chat(user, SPAN_WARNING("System is busy. Please wait until current operation is finished before changing power settings.")) return busy = 1 - to_chat(user, "Updating power settings..") + to_chat(user, SPAN_GOOD("Updating power settings...")) if(do_after(user, 50, src)) set_state(!on) - to_chat(user, "Update Completed. New setting:[on ? "on": "off"]") + to_chat(user, SPAN_GOOD("Update completed. New setting:[on ? "on": "off"]")) update_locked = 1 spawn(600) update_locked = 0 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 99bc9c130bc..d2e69767a0c 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -33,6 +33,8 @@ By design, d1 is the smallest direction and d2 is the highest obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED level = LEVEL_BELOW_PLATING + /// Whether this cable type can be (re)colored. + var/can_have_color = TRUE var/d1 var/d2 var/datum/powernet/powernet @@ -241,6 +243,8 @@ By design, d1 is the smallest direction and d2 is the highest . = ..() /obj/structure/cable/proc/cableColor(var/colorC) + if(!can_have_color) + return var/color_n = "#dd0000" if(colorC) color_n = colorC @@ -255,7 +259,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/mergeDiagonalsNetworks(var/direction) //search for and merge diagonally matching cables from the first direction component (north/south) - var/turf/T = get_step(src, direction&3)//go north/south + var/turf/T = get_step_resolving_mimic(src, direction & (NORTH|SOUTH)) for(var/obj/structure/cable/C in T) @@ -265,7 +269,7 @@ By design, d1 is the smallest direction and d2 is the highest if(src == C) continue - if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable + if(C.d1 == (direction ^ (NORTH|SOUTH)) || C.d2 == (direction ^ (NORTH|SOUTH))) //we've got a diagonally matching cable if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) var/datum/powernet/newPN = new() newPN.add_cable(C) @@ -276,7 +280,7 @@ By design, d1 is the smallest direction and d2 is the highest C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet //the same from the second direction component (east/west) - T = get_step(src, direction&12)//go east/west + T = get_step_resolving_mimic(src, direction & (EAST|WEST)) for(var/obj/structure/cable/C in T) @@ -285,7 +289,7 @@ By design, d1 is the smallest direction and d2 is the highest if(src == C) continue - if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable + if(C.d1 == (direction ^ (EAST|WEST)) || C.d2 == (direction ^ (EAST|WEST))) //we've got a diagonally matching cable if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) var/datum/powernet/newPN = new() newPN.add_cable(C) @@ -303,7 +307,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing return - var/turf/TB = get_zstep(src, direction) + var/turf/TB = get_zstep_resolving_mimic(src, direction) for(var/obj/structure/cable/C in TB) @@ -370,8 +374,7 @@ By design, d1 is the smallest direction and d2 is the highest // Powernets handling helpers ////////////////////////////////////////////// -//if powernetless_only = 1, will only get connections without powernet -/obj/structure/cable/proc/get_connections(var/powernetless_only = 0) +/obj/structure/cable/proc/get_cable_connections(var/skip_assigned_powernets = FALSE) . = list() // this will be a list of all connected power objects var/turf/T @@ -380,14 +383,14 @@ By design, d1 is the smallest direction and d2 is the highest if(cable_dir == 0) continue var/reverse = global.reverse_dir[cable_dir] - T = get_zstep(src, cable_dir) + T = get_zstep_resolving_mimic(src, cable_dir) if(T) for(var/obj/structure/cable/C in T) if(C.d1 == reverse || C.d2 == reverse) . += C if(cable_dir & (cable_dir - 1)) // Diagonal, check for /\/\/\ style cables along cardinal directions for(var/pair in list(NORTH|SOUTH, EAST|WEST)) - T = get_step(src, cable_dir & pair) + T = get_step_resolving_mimic(src, cable_dir & pair) if(T) var/req_dir = cable_dir ^ pair for(var/obj/structure/cable/C in T) @@ -399,17 +402,22 @@ By design, d1 is the smallest direction and d2 is the highest if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) // if either of C's d1 and d2 match either of ours . += C + // if asked, skip any cables with powernts + if(skip_assigned_powernets) + for(var/obj/structure/cable/C in .) + if(C.powernet) + . -= C + +/obj/structure/cable/proc/get_machine_connections(var/skip_assigned_powernets = FALSE) + . = list() // this will be a list of all connected power objects if(d1 == 0) for(var/obj/machinery/power/P in loc) if(P.powernet == 0) continue // exclude APCs with powernet=0 - if(!powernetless_only || !P.powernet) + if(!skip_assigned_powernets || !P.powernet) . += P - // if the caller asked for powernetless cables only, dump the ones with powernets - if(powernetless_only) - for(var/obj/structure/cable/C in .) - if(C.powernet) - . -= C +/obj/structure/cable/proc/get_connections(var/skip_assigned_powernets = FALSE) + return get_cable_connections(skip_assigned_powernets) + get_machine_connections(skip_assigned_powernets) //should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. //needed as this can, unlike other placements, disconnect cables @@ -431,7 +439,7 @@ By design, d1 is the smallest direction and d2 is the highest var/list/P_list if(!T1) return if(d1) - T1 = get_step(T1, d1) + T1 = get_zstep_resolving_mimic(T1, d1) P_list = power_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... P_list += power_list(loc, src, d1, 0, cable_only = 1)//... and on turf @@ -495,6 +503,8 @@ By design, d1 is the smallest direction and d2 is the highest attack_verb = list("whipped", "lashed", "disciplined", "flogged") stack_merge_type = /obj/item/stack/cable_coil matter_multiplier = 0.15 + /// Whether or not this cable coil can even have a color in the first place. + var/can_have_color = TRUE /obj/item/stack/cable_coil/single amount = 1 @@ -515,7 +525,7 @@ By design, d1 is the smallest direction and d2 is the highest TOOL_CABLECOIL = TOOL_QUALITY_DEFAULT, TOOL_SUTURES = TOOL_QUALITY_MEDIOCRE )) - if (param_color) // It should be red by default, so only recolor it if parameter was specified. + if (can_have_color && param_color) // It should be red by default, so only recolor it if parameter was specified. color = param_color update_icon() update_wclass() @@ -547,7 +557,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/item/stack/cable_coil/on_update_icon() . = ..() - if (!color) + if (!color && can_have_color) var/list/possible_cable_colours = get_global_cable_colors() color = possible_cable_colours[pick(possible_cable_colours)] if(amount == 1) @@ -564,7 +574,7 @@ By design, d1 is the smallest direction and d2 is the highest SetName(initial(name)) /obj/item/stack/cable_coil/proc/set_cable_color(var/selected_color, var/user) - if(!selected_color) + if(!selected_color || !can_have_color) return var/list/possible_cable_colours = get_global_cable_colors() diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 56a891b021e..e5c5de34844 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/power.dmi' icon_state = "cell" item_state = "cell" - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' force = 5.0 throwforce = 5 throw_speed = 3 @@ -18,7 +18,6 @@ ) var/charge // Current charge var/maxcharge = 1000 // Capacity in Wh - var/overlay_state /obj/item/cell/Initialize() . = ..() @@ -40,19 +39,16 @@ /obj/item/cell/on_update_icon() . = ..() - var/new_overlay_state = null + var/overlay_state = null switch(percent()) if(95 to 100) - new_overlay_state = "cell-o2" + overlay_state = "cell-o2" if(25 to 95) - new_overlay_state = "cell-o1" + overlay_state = "cell-o1" if(0.05 to 25) - new_overlay_state = "cell-o0" - - if(new_overlay_state != overlay_state) - overlay_state = new_overlay_state - if(overlay_state) - add_overlay(overlay_state) + overlay_state = "cell-o0" + if(overlay_state) + add_overlay(overlay_state) /obj/item/cell/proc/percent() // return % charge of cell return maxcharge && (100.0*charge/maxcharge) @@ -136,9 +132,10 @@ material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) -/obj/item/cell/device/variable/Initialize(mapload, charge_amount) - maxcharge = charge_amount - return ..(mapload) +/obj/item/cell/device/variable/Initialize(ml, material_key, charge_amount) + if(!isnull(charge_amount)) + maxcharge = charge_amount + return ..(ml, material_key) /obj/item/cell/device/standard name = "standard device power cell" @@ -151,12 +148,46 @@ maxcharge = 100 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'powerstorage':2}" + origin_tech = @'{"powerstorage":2}' + +/obj/item/cell/device/infinite + name = "experimental device power cell" + desc = "This special experimental power cell has both very large capacity, and ability to recharge itself with zero-point energy." + icon_state = "icell" + origin_tech = null + maxcharge = 3000 + material = /decl/material/solid/metal/steel + matter = list( + /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/metal/aluminium = MATTER_AMOUNT_TRACE + ) + +/obj/item/cell/device/infinite/percent() + return 100 + +/obj/item/cell/device/infinite/fully_charged() + return TRUE + +/obj/item/cell/device/infinite/check_charge(var/amount) + return (maxcharge >= amount) + +/obj/item/cell/device/infinite/use(var/amount) + return min(maxcharge, amount) + +/obj/item/cell/device/infinite/checked_use(var/amount) + return check_charge(amount) + +/obj/item/cell/device/infinite/give() + return 0 + +/obj/item/cell/device/infinite/get_electrocute_damage() + charge = maxcharge + return ..() /obj/item/cell/crap name = "old power cell" desc = "A cheap old power cell. It's probably been in use for quite some time now." - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' maxcharge = 100 material = /decl/material/solid/metal/steel matter = list( @@ -170,7 +201,7 @@ /obj/item/cell/standard name = "standard power cell" desc = "A standard and relatively cheap power cell, commonly used." - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' maxcharge = 250 material = /decl/material/solid/metal/steel matter = list( @@ -181,7 +212,7 @@ /obj/item/cell/apc name = "APC power cell" desc = "A special power cell designed for heavy-duty use in area power controllers." - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' maxcharge = 500 material = /decl/material/solid/metal/steel matter = list( @@ -193,7 +224,7 @@ /obj/item/cell/high name = "advanced power cell" desc = "An advanced high-grade power cell, for use in important systems." - origin_tech = "{'powerstorage':2}" + origin_tech = @'{"powerstorage":2}' icon_state = "hcell" maxcharge = 1000 material = /decl/material/solid/metal/steel @@ -208,7 +239,7 @@ /obj/item/cell/exosuit name = "exosuit power cell" desc = "A special power cell designed for heavy-duty use in industrial exosuits." - origin_tech = "{'powerstorage':3}" + origin_tech = @'{"powerstorage":3}' icon_state = "hcell" maxcharge = 1500 material = /decl/material/solid/metal/steel @@ -221,7 +252,7 @@ /obj/item/cell/super name = "enhanced power cell" desc = "A very advanced power cell with increased energy density, for use in critical applications." - origin_tech = "{'powerstorage':5}" + origin_tech = @'{"powerstorage":5}' icon_state = "scell" maxcharge = 2000 material = /decl/material/solid/metal/steel @@ -236,7 +267,7 @@ /obj/item/cell/hyper name = "superior power cell" desc = "Pinnacle of power storage technology, this very expensive power cell provides the best energy density reachable with conventional electrochemical cells." - origin_tech = "{'powerstorage':6}" + origin_tech = @'{"powerstorage":6}' icon_state = "hpcell" maxcharge = 3000 material = /decl/material/solid/metal/steel @@ -287,7 +318,7 @@ /obj/item/cell/potato name = "potato battery" desc = "A rechargable starch based power cell." - origin_tech = "{'powerstorage':1}" + origin_tech = @'{"powerstorage":1}' icon = 'icons/obj/power.dmi' icon_state = "potato_cell" maxcharge = 20 @@ -296,7 +327,7 @@ /obj/item/cell/gun name = "weapon energy cell" desc = "A military grade high-density battery, expected to deplete after tens of thousands of complete charge cycles." - origin_tech = "{'combat':2,'materials':2,'powerstorage': 2}" + origin_tech = @'{"combat":2,"materials":2,"powerstorage": 2}' icon_state = "gunbattery" maxcharge = 500 w_class = ITEM_SIZE_SMALL //Perhaps unwise. diff --git a/code/modules/power/fission/fission_circuits.dm b/code/modules/power/fission/fission_circuits.dm index 27c88bea33e..f36b48f2fa3 100644 --- a/code/modules/power/fission/fission_circuits.dm +++ b/code/modules/power/fission/fission_circuits.dm @@ -1,13 +1,13 @@ /obj/item/stock_parts/circuitboard/fission_core_control name = "circuit board (fission core controller)" build_path = /obj/machinery/computer/fission - origin_tech = "{'programming':2,'engineering':3}" + origin_tech = @'{"programming":2,"engineering":3}' /obj/item/stock_parts/circuitboard/unary_atmos/fission_core name = "circuit board (fission core)" build_path = /obj/machinery/atmospherics/unary/fission_core board_type = "machine" - origin_tech = "{'engineering':2,'materials':2}" + origin_tech = @'{"engineering":2,"materials":2}' additional_spawn_components = list( /obj/item/stock_parts/power/apc/buildable = 1 ) diff --git a/code/modules/power/floorlamp.dm b/code/modules/power/floorlamp.dm index 39ff3b57c3a..a2cd87ad0f3 100644 --- a/code/modules/power/floorlamp.dm +++ b/code/modules/power/floorlamp.dm @@ -64,7 +64,7 @@ set_scale(1.2, 1.2) // i hate this /obj/machinery/light/flamp/noshade - icon_state = "flampshade_map" + icon_state = "flamp_map" lampshade = null /obj/item/lampshade diff --git a/code/modules/power/fuel_assembly/fuel_assembly.dm b/code/modules/power/fuel_assembly/fuel_assembly.dm index e49145ee109..b472ca24078 100644 --- a/code/modules/power/fuel_assembly/fuel_assembly.dm +++ b/code/modules/power/fuel_assembly/fuel_assembly.dm @@ -12,6 +12,11 @@ var/luminescence = 0 var/initial_amount +// Unmeltable for the time being; TODO proper fix on dev. +/obj/item/fuel_assembly/handle_melting(list/meltable_materials) + SHOULD_CALL_PARENT(FALSE) + return + /obj/item/fuel_assembly/Initialize(mapload, var/_material, var/list/makeup, var/_colour) . = ..(mapload, _material) LAZYINITLIST(matter) diff --git a/code/modules/power/fuel_assembly/fuel_compressor.dm b/code/modules/power/fuel_assembly/fuel_compressor.dm index 09d8f49f561..0516936ca40 100644 --- a/code/modules/power/fuel_assembly/fuel_compressor.dm +++ b/code/modules/power/fuel_assembly/fuel_compressor.dm @@ -111,7 +111,7 @@ rod_makeup[mat_type] = amt return TOPIC_REFRESH -/obj/machinery/fuel_compressor/receive_mouse_drop(var/atom/movable/dropping, var/mob/user) +/obj/machinery/fuel_compressor/receive_mouse_drop(atom/dropping, mob/user, params) if(user.incapacitated() || !user.Adjacent(src)) return return !add_material(dropping, user) @@ -123,7 +123,7 @@ if(istype(thing) && thing.reagents && thing.reagents.total_volume && ATOM_IS_OPEN_CONTAINER(thing)) for(var/R in thing.reagents.reagent_volumes) var/taking_reagent = REAGENT_VOLUME(thing.reagents, R) - thing.reagents.remove_reagent(R, taking_reagent) + thing.remove_from_reagents(R, taking_reagent) stored_material[R] += taking_reagent to_chat(user, SPAN_NOTICE("You add the contents of \the [thing] to \the [src]'s material buffer.")) diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 39bfe1b5f08..e5ba8abc70e 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -1,6 +1,8 @@ #define MAX_FIELD_STR 10000 #define MIN_FIELD_STR 1 +//#TODO: Make sure the field and core state load from save. + /obj/machinery/fusion_core name = "\improper R-UST Mk. 8 Tokamak core" desc = "An enormous solenoid for generating extremely high power electromagnetic fields. It includes a kinetic energy harvester." @@ -25,7 +27,7 @@ /obj/machinery/fusion_core/mapped anchored = TRUE -/obj/machinery/fusion_core/Initialize() +/obj/machinery/fusion_core/Initialize(mapload, d, populate_parts) . = ..() set_extension(src, /datum/extension/local_network_member) if(initial_id_tag) diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index c053090aac8..f1ac424ed41 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -87,7 +87,7 @@ catcher.SetSize((iter*2)+1) particle_catchers.Add(catcher) - addtimer(CALLBACK(src, .proc/update_light_colors), 10 SECONDS, TIMER_LOOP) + addtimer(CALLBACK(src, PROC_REF(update_light_colors)), 10 SECONDS, TIMER_LOOP) /obj/effect/fusion_em_field/proc/handle_tick() //make sure the field generator is still intact @@ -194,7 +194,7 @@ if(field_cohesion == 0) owned_core.Shutdown(force_rupture=1) - + if(percent_unstable > 0.5 && prob(percent_unstable*100)) if(plasma_temperature < FUSION_RUPTURE_THRESHOLD) visible_message("\The [src] ripples uneasily, like a disturbed pond.") diff --git a/code/modules/power/fusion/fusion_circuits.dm b/code/modules/power/fusion/fusion_circuits.dm index 73814a03224..b03d6a03616 100644 --- a/code/modules/power/fusion/fusion_circuits.dm +++ b/code/modules/power/fusion/fusion_circuits.dm @@ -1,13 +1,13 @@ /obj/item/stock_parts/circuitboard/fusion/core_control name = "circuitboard (fusion core controller)" build_path = /obj/machinery/computer/fusion/core_control - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' /obj/item/stock_parts/circuitboard/kinetic_harvester name = "circuitboard (kinetic harvester)" build_path = /obj/machinery/kinetic_harvester board_type = "machine" - origin_tech = "{'programming':4,'engineering':4,'materials':4}" + origin_tech = @'{"programming":4,"engineering":4,"materials":4}' additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1 @@ -21,18 +21,18 @@ /obj/item/stock_parts/circuitboard/fusion_fuel_control name = "circuitboard (fusion fuel controller)" build_path = /obj/machinery/computer/fusion/fuel_control - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' /obj/item/stock_parts/circuitboard/gyrotron_control name = "circuitboard (gyrotron controller)" build_path = /obj/machinery/computer/fusion/gyrotron - origin_tech = "{'programming':4,'engineering':4}" + origin_tech = @'{"programming":4,"engineering":4}' /obj/item/stock_parts/circuitboard/fusion_core name = "circuitboard (fusion core)" build_path = /obj/machinery/fusion_core board_type = "machine" - origin_tech = "{'wormholes':2,'magnets':4,'powerstorage':4}" + origin_tech = @'{"wormholes":2,"magnets":4,"powerstorage":4}' additional_spawn_components = list( /obj/item/stock_parts/power/terminal = 1 ) @@ -48,7 +48,7 @@ name = "circuitboard (fusion fuel injector)" build_path = /obj/machinery/fusion_fuel_injector board_type = "machine" - origin_tech = "{'powerstorage':3,'engineering':4,'materials':4}" + origin_tech = @'{"powerstorage":3,"engineering":4,"materials":4}' req_components = list( /obj/item/stock_parts/manipulator/pico = 2, /obj/item/stock_parts/scanning_module/phasic = 1, @@ -61,7 +61,7 @@ name = "circuitboard (gyrotron)" build_path = /obj/machinery/emitter/gyrotron board_type = "machine" - origin_tech = "{'powerstorage':4,'engineering':4}" + origin_tech = @'{"powerstorage":4,"engineering":4}' additional_spawn_components = list( /obj/item/stock_parts/power/terminal = 1 ) diff --git a/code/modules/power/fusion/fusion_particle_catcher.dm b/code/modules/power/fusion/fusion_particle_catcher.dm index fc23d2ce304..2977828faa8 100644 --- a/code/modules/power/fusion/fusion_particle_catcher.dm +++ b/code/modules/power/fusion/fusion_particle_catcher.dm @@ -9,6 +9,9 @@ var/obj/effect/fusion_em_field/parent var/mysize = 0 +SAVED_VAR(/obj/effect/fusion_particle_catcher, parent) +SAVED_VAR(/obj/effect/fusion_particle_catcher, mysize) + /obj/effect/fusion_particle_catcher/Destroy() . =..() parent.particle_catchers -= src diff --git a/code/modules/power/geothermal/_geothermal.dm b/code/modules/power/geothermal/_geothermal.dm index 81e3c8dc968..101fdd6bcbf 100644 --- a/code/modules/power/geothermal/_geothermal.dm +++ b/code/modules/power/geothermal/_geothermal.dm @@ -84,7 +84,10 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000 for(var/turf/exterior/seafloor/T in RANGE_TURFS(loc, 5)) var/dist = get_dist(loc, T)-1 if(prob(100 - (dist * 20))) - T = T.ChangeTurf(/turf/exterior/mud) + if(prob(25)) + T = T.ChangeTurf(/turf/exterior/clay) + else + T = T.ChangeTurf(/turf/exterior/mud) if(prob(50 - (dist * 10))) new /obj/random/seaweed(T) @@ -187,7 +190,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000 current_pressure = clamp(current_pressure + pressure, 0, MAX_GEOTHERMAL_PRESSURE) var/leftover = round(pressure - current_pressure) if(leftover > 0) - addtimer(CALLBACK(src, .proc/propagate_pressure, leftover), 5) + addtimer(CALLBACK(src, PROC_REF(propagate_pressure), leftover), 5) update_icon() START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) @@ -204,7 +207,7 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000 generate_power(last_generated) remaining_pressure = round(remaining_pressure * GEOTHERMAL_PRESSURE_LOSS) if(remaining_pressure) - addtimer(CALLBACK(src, .proc/propagate_pressure, remaining_pressure), 5) + addtimer(CALLBACK(src, PROC_REF(propagate_pressure), remaining_pressure), 5) update_icon() if(current_pressure <= 1) return PROCESS_KILL diff --git a/code/modules/power/geothermal/geothermal_circuit.dm b/code/modules/power/geothermal/geothermal_circuit.dm index 07d451d68fa..f569521f85e 100644 --- a/code/modules/power/geothermal/geothermal_circuit.dm +++ b/code/modules/power/geothermal/geothermal_circuit.dm @@ -2,7 +2,7 @@ name = "circuitboard (geothermal generator)" build_path = /obj/machinery/geothermal board_type = "machine" - origin_tech = "{'magnets':3,'powerstorage':3}" + origin_tech = @'{"magnets":3,"powerstorage":3}' req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/manipulator = 2, diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 9a6452e04af..4fbd6dea467 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -1,4 +1,4 @@ -// It.. uses a lot of power. Everything under power is engineering stuff, at least. +// It... uses a lot of power. Everything under power is engineering stuff, at least. /obj/machinery/computer/gravity_control_computer name = "Gravity Generator Control" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 4ce810df507..b0279ba8abd 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -37,7 +37,7 @@ construct_state = /decl/machine_construction/wall_frame/panel_closed/simple base_type = /obj/machinery/light frame_type = /obj/item/frame/light - directional_offset = "{'NORTH':{'y':21}, 'EAST':{'x':10}, 'WEST':{'x':-10}}" + directional_offset = @'{"NORTH":{"y":21}, "EAST":{"x":10}, "WEST":{"x":-10}}' var/on = 0 // 1 if on, 0 if off var/flickering = 0 @@ -412,6 +412,7 @@ /obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C broken() + return ..() /obj/machinery/light/small/readylight light_type = /obj/item/light/bulb/red/readylight @@ -472,7 +473,7 @@ throwforce = 5 w_class = ITEM_SIZE_TINY material = /decl/material/solid/metal/steel - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CAN_BE_PAINTED + atom_flags = ATOM_FLAG_CAN_BE_PAINTED obj_flags = OBJ_FLAG_HOLLOW var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 5e1ad2297c3..3714f37ce4a 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -2,7 +2,7 @@ /obj/machinery/port_gen name = "Placeholder Generator" //seriously, don't use this. It can't be anchored without VV magic. desc = "A portable generator for emergency backup power." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj//machines/power/portable_generators.dmi' icon_state = "portgen0" density = TRUE anchored = FALSE @@ -259,7 +259,7 @@ if (operating_temperature > cooling_temperature) var/temp_loss = (operating_temperature - cooling_temperature)/TEMPERATURE_DIVISOR - temp_loss = clamp(2, round(temp_loss, 1), TEMPERATURE_CHANGE_MAX) + temp_loss = clamp(round(temp_loss, 1), 2, TEMPERATURE_CHANGE_MAX) operating_temperature = max(operating_temperature - temp_loss, cooling_temperature) src.updateDialog() @@ -467,7 +467,7 @@ if(reagents.has_reagent(/decl/material/liquid/ethanol/vodka)) rad_power = 4 temperature_gain = 60 - reagents.remove_any(1) + remove_any_reagents(1) if(prob(2)) audible_message("[src] churns happily") else diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 9b06f213441..d2db88a1164 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -127,32 +127,25 @@ return . //remove the old powernet and replace it with a new one throughout the network. -/proc/propagate_network(var/obj/O, var/datum/powernet/PN) +/proc/propagate_network(var/obj/structure/cable/cable, var/datum/powernet/PN) //to_world_log("propagating new network") - var/list/worklist = list() + var/list/cables = list() var/list/found_machines = list() var/index = 1 - var/obj/P = null + var/obj/structure/cable/working_cable = null - worklist+=O //start propagating from the passed object - - while(index<=worklist.len) //until we've exhausted all power objects - P = worklist[index] //get the next power object found + // add the first cable to the list + cables[cable] = TRUE // associative list for speedy deduplication + while(index <= length(cables)) //until we've exhausted all power objects + working_cable = cables[index] //get the next power object found index++ - if( istype(P,/obj/structure/cable)) - var/obj/structure/cable/C = P - if(C.powernet != PN) //add it to the powernet, if it isn't already there - PN.add_cable(C) - worklist |= C.get_connections() //get adjacents power objects, with or without a powernet - - else if(P.anchored && istype(P,/obj/machinery/power)) - var/obj/machinery/power/M = P - found_machines |= M //we wait until the powernet is fully propagates to connect the machines - - else - continue + for(var/new_cable in working_cable.get_cable_connections()) //get adjacent cables, with or without a powernet + cables[new_cable] = TRUE + for(var/obj/structure/cable/cable_entry in cables) + PN.add_cable(cable_entry) + found_machines += cable_entry.get_machine_connections() //now that the powernet is set, connect found machines to it for(var/obj/machinery/power/PM in found_machines) if(!PM.connect_to_network()) //couldn't find a node on its turf... diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index f4266872ef0..8a02779ed2a 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -36,7 +36,10 @@ var/area/A = get_area(src) if(!A) return // in nullspace - id_tag = "[A.proper_name] #[sequential_id(A.name + "power/sensor")]" + var/suffix = uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, "[A.proper_name]power/sensor", 1) // unlike sequential_id, starts at 1 instead of 100 + if(suffix == 1) + suffix = null + id_tag = "[A.proper_name][suffix ? " #[suffix]" : null]" name = "[id_tag] - powernet sensor" // Proc: check_grid_warning() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7b8984696b4..f31ff206ee0 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -10,9 +10,9 @@ var/global/list/rad_collectors = list() anchored = FALSE density = TRUE initial_access = list(access_engine_equip) + max_health = 100 var/obj/item/tank/hydrogen/loaded_tank = null - var/health = 100 var/max_safe_temp = 1000 + T0C var/melted @@ -44,8 +44,8 @@ var/global/list/rad_collectors = list() if(T) var/datum/gas_mixture/our_turfs_air = T.return_air() if(our_turfs_air.temperature > max_safe_temp) - health -= ((our_turfs_air.temperature - max_safe_temp) / 10) - if(health <= 0) + current_health -= ((our_turfs_air.temperature - max_safe_temp) / 10) + if(current_health <= 0) collector_break() //so that we don't zero out the meter if the SM is processed first. diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 1c057a8613e..af92c39b88c 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -233,7 +233,7 @@ /decl/public_access/public_method/toggle_emitter name = "toggle emitter" desc = "Toggles whether or not the emitter is active. It must be unlocked to work." - call_proc = /obj/machinery/emitter/proc/activate + call_proc = TYPE_PROC_REF(/obj/machinery/emitter, activate) /decl/public_access/public_variable/emitter_active expected_type = /obj/machinery/emitter diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 34c488513ce..141550cc601 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -48,7 +48,7 @@ field_generator power level display // Scale % power to % num_power_levels and truncate value var/level = round(num_power_levels * power / field_generator_max_power) // Clamp between 0 and num_power_levels for out of range power values - level = clamp(0, level, num_power_levels) + level = clamp(level, 0, num_power_levels) if(level) overlays += "+p[level]" diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index ebede885d4a..049e62a9051 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -29,7 +29,7 @@ animation.pixel_y = -32 animation.layer = SINGULARITY_EFFECT_LAYER flick('icons/effects/singularity_effect.dmi', animation) - addtimer(CALLBACK(src, .proc/spawn_contained, T), 6 SECOND) + addtimer(CALLBACK(src, PROC_REF(spawn_contained), T), 6 SECOND) QDEL_IN(animation, 7 SECOND) return PROCESS_KILL diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 3d922b263b2..dc88c1bb9c8 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -63,7 +63,6 @@ /obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) var/radiation = (energy*2) M.apply_damage((radiation*3),IRRADIATE, damage_flags = DAM_DISPERSED) - M.updatehealth() /obj/effect/accelerated_particle/proc/move(var/lag) set waitfor = FALSE diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index fcd463d2169..882a009b795 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -115,7 +115,7 @@ /obj/machinery/power/smes/proc/input_power(var/percentage) var/to_input = target_load * (percentage/100) - to_input = clamp(0, to_input, target_load) + to_input = clamp(to_input, 0, target_load) input_available = 0 if(percentage == 100) inputting = 2 @@ -196,7 +196,7 @@ return var/total_restore = output_used * (percent_load / 100) // First calculate amount of power used from our output - total_restore = clamp(0, total_restore, output_used) // Now clamp the value between 0 and actual output, just for clarity. + total_restore = clamp(total_restore, 0, output_used) // Now clamp the value between 0 and actual output, just for clarity. total_restore = output_used - total_restore // And, at last, subtract used power from outputted power, to get amount of power we will give back to the SMES. // now recharge this amount diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 71ac8ba8da2..14a0cdafcad 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -12,7 +12,7 @@ icon = 'icons/obj/items/stock_parts/stock_parts.dmi' icon_state = "smes_coil" w_class = ITEM_SIZE_LARGE // It's LARGE (backpack size) - origin_tech = "{'materials':7,'powerstorage':7,'engineering':5}" + origin_tech = @'{"materials":7,"powerstorage":7,"engineering":5}' base_type = /obj/item/stock_parts/smes_coil part_flags = PART_FLAG_HAND_REMOVE material = /decl/material/solid/metal/steel @@ -137,7 +137,7 @@ capacity *= 1.2 input_level_max *= 2 output_level_max *= 2 - charge = clamp(0, charge, capacity) + charge = clamp(charge, 0, capacity) // Proc: total_system_failure() // Parameters: 2 (intensity - how strong the failure is, user - person which caused the failure) @@ -220,7 +220,7 @@ // Sparks, Near - instantkill shock, Strong EMP, 25% light overload, 5% APC failure. 50% of SMES explosion. This is bad. spark_at(src, amount = 10, cardinal_only = TRUE) to_chat(h_user, SPAN_WARNING("Massive electrical arc sparks between you and [src].
    Last thing you can think about is \"Oh shit...\"")) - // Remember, we have few gigajoules of electricity here.. Turn them into crispy toast. + // Remember, we have few gigajoules of electricity here. Turn them into crispy toast. h_user.electrocute_act(rand(170,210), src, def_zone = ran_zone(null)) SET_STATUS_MAX(h_user, STAT_PARA, 8) spawn(0) @@ -243,7 +243,7 @@ return src.ping("DANGER! Magnetic containment field failure in 3 ... 2 ... 1 ...") explosion(src.loc,1,2,4,8) - // Not sure if this is necessary, but just in case the SMES *somehow* survived.. + // Not sure if this is necessary, but just in case the SMES *somehow* survived. qdel(src) /obj/machinery/power/smes/buildable/proc/check_total_system_failure(var/mob/user) @@ -376,14 +376,14 @@ // Parameters: 1 (new_input - New input value in Watts) // Description: Sets input setting on this SMES. Trims it if limits are exceeded. /obj/machinery/power/smes/buildable/proc/set_input(var/new_input = 0) - input_level = clamp(0, new_input, input_level_max) + input_level = clamp(new_input, 0, input_level_max) update_icon() // Proc: set_output() // Parameters: 1 (new_output - New output value in Watts) // Description: Sets output setting on this SMES. Trims it if limits are exceeded. /obj/machinery/power/smes/buildable/proc/set_output(var/new_output = 0) - output_level = clamp(0, new_output, output_level_max) + output_level = clamp(new_output, 0, output_level_max) update_icon() /obj/machinery/power/smes/buildable/emp_act(var/severity) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 992fa1ab3b3..28718c4d00a 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -12,7 +12,7 @@ var/global/list/solars_list = list() density = TRUE idle_power_usage = 0 active_power_usage = 0 - var/health = 10 + max_health = 10 var/obscured = 0 var/sunfrac = 0 var/efficiency = 1 @@ -55,7 +55,7 @@ var/global/list/solars_list = list() S.anchored = TRUE S.forceMove(src) if(S.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 + current_health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to update_icon() @@ -63,25 +63,25 @@ var/global/list/solars_list = list() /obj/machinery/power/solar/attackby(obj/item/W, mob/user) if(IS_CROWBAR(W)) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + playsound(loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar panel.") if(do_after(user, 50,src)) var/obj/item/solar_assembly/S = locate() in src if(S) S.dropInto(loc) S.give_glass() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the solar panel.") qdel(src) return else if (W) - src.add_fingerprint(user) - src.health -= W.force - src.healthcheck() + add_fingerprint(user) + current_health -= W.force + healthcheck() ..() /obj/machinery/power/solar/proc/healthcheck() - if (src.health <= 0) + if (current_health <= 0) if(!(stat & BROKEN)) set_broken(TRUE) @@ -92,7 +92,7 @@ var/global/list/solars_list = list() overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = ABOVE_HUMAN_LAYER) else overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = ABOVE_HUMAN_LAYER) - src.set_dir(angle2dir(adir)) + set_dir(angle2dir(adir)) return //calculates the fraction of the sunlight that the panel recieves @@ -132,9 +132,9 @@ var/global/list/solars_list = list() /obj/machinery/power/solar/set_broken(new_state) . = ..() if(. && new_state) - health = 0 - new /obj/item/shard(src.loc) - new /obj/item/shard(src.loc) + current_health = 0 + new /obj/item/shard(loc) + new /obj/item/shard(loc) var/obj/item/solar_assembly/S = locate() in src S.glass_type = null unset_control() @@ -144,11 +144,11 @@ var/global/list/solars_list = list() if(. && !QDELETED(src)) if(severity == 1) if(prob(15)) - new /obj/item/shard( src.loc ) + new /obj/item/shard( loc ) physically_destroyed() else if(severity == 2) if (prob(25)) - new /obj/item/shard( src.loc ) + new /obj/item/shard( loc ) physically_destroyed() else if (prob(50)) set_broken(TRUE) @@ -228,13 +228,13 @@ var/global/list/solars_list = list() default_pixel_z = 0 reset_offsets(0) user.visible_message("[user] wrenches the solar assembly into place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 else if(IS_WRENCH(W)) anchored = FALSE user.visible_message("[user] unwrenches the solar assembly from it's place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 if(istype(W, /obj/item/stack/material) && W.get_material_type() == /decl/material/solid/glass) @@ -242,7 +242,7 @@ var/global/list/solars_list = list() if(S.use(2)) glass_type = S.material.type glass_reinforced = S.reinf_material?.type - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + playsound(loc, '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) @@ -261,7 +261,7 @@ var/global/list/solars_list = list() return 1 else if(IS_CROWBAR(W)) - new /obj/item/tracker_electronics(src.loc) + new /obj/item/tracker_electronics(loc) tracker = 0 user.visible_message("[user] takes out the electronics from the solar assembly.") return 1 @@ -421,15 +421,15 @@ var/global/list/solars_list = list() if(href_list["rate control"]) if(href_list["cdir"]) - src.cdir = clamp((360+src.cdir+text2num(href_list["cdir"]))%360, 0, 359) - src.targetdir = src.cdir + cdir = clamp((360+cdir+text2num(href_list["cdir"]))%360, 0, 359) + targetdir = cdir if(track == 2) //manual update, so losing auto-tracking track = 0 spawn(1) set_panels(cdir) if(href_list["tdir"]) - src.trackrate = clamp(src.trackrate+text2num(href_list["tdir"]), -7200, 7200) - if(src.trackrate) nexttime = world.time + 36000/abs(trackrate) + trackrate = clamp(trackrate+text2num(href_list["tdir"]), -7200, 7200) + if(trackrate) nexttime = world.time + 36000/abs(trackrate) if(href_list["track"]) track = text2num(href_list["track"]) @@ -438,15 +438,15 @@ var/global/list/solars_list = list() connected_tracker.set_angle(global.sun.angle) set_panels(cdir) else if (track == 1) //begin manual tracking - src.targetdir = src.cdir - if(src.trackrate) nexttime = world.time + 36000/abs(trackrate) + targetdir = cdir + if(trackrate) nexttime = world.time + 36000/abs(trackrate) set_panels(targetdir) if(href_list["search_connected"]) - src.search_for_connected() + search_for_connected() if(connected_tracker && track == 2) connected_tracker.set_angle(global.sun.angle) - src.set_panels(cdir) + set_panels(cdir) interact(usr) return 1 diff --git a/code/modules/power/stirling.dm b/code/modules/power/stirling.dm index db91f60ed90..b3e94d0f3e5 100644 --- a/code/modules/power/stirling.dm +++ b/code/modules/power/stirling.dm @@ -39,9 +39,15 @@ /obj/machinery/atmospherics/binary/stirling/Process() ..() + if(!active) + return + var/line1_heatcap = air1.heat_capacity() var/line2_heatcap = air2.heat_capacity() + if(!(line1_heatcap + line2_heatcap)) + return + var/delta_t = air1.temperature - air2.temperature // Absolute value of the heat transfer required to bring both lines in equilibrium. diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index fdd405b3160..83721e62928 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -7,7 +7,7 @@ density = TRUE var/obj/machinery/turbine/turbine var/datum/gas_mixture/gas_contained - var/turf/simulated/inturf + var/turf/inturf var/starter = 0 var/rpm = 0 var/rpmtarget = 0 @@ -25,7 +25,7 @@ anchored = TRUE density = TRUE var/obj/machinery/compressor/compressor - var/turf/simulated/outturf + var/turf/outturf var/lastgen uncreated_component_parts = null diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index f8488ea20b3..8ebb33d3c99 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -10,6 +10,12 @@ w_class = ITEM_SIZE_TINY obj_flags = OBJ_FLAG_HOLLOW material = /decl/material/solid/metal/brass + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME + drop_sound = list( + 'sound/weapons/guns/casingfall1.ogg', + 'sound/weapons/guns/casingfall2.ogg', + 'sound/weapons/guns/casingfall3.ogg' + ) var/leaves_residue = 1 var/caliber = "" //Which kind of guns it can be loaded into @@ -18,7 +24,6 @@ var/spent_icon = "pistolcasing-spent" var/bullet_color = COLOR_COPPER var/marking_color - drop_sound = list('sound/weapons/guns/casingfall1.ogg','sound/weapons/guns/casingfall2.ogg','sound/weapons/guns/casingfall3.ogg') /obj/item/ammo_casing/Initialize() if(ispath(projectile_type)) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index eafd25d70d6..e7cc17dcddc 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -130,7 +130,7 @@ /obj/item/ammo_magazine/pistol name = "pistol magazine" icon_state = "pistol" - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' mag_type = MAGAZINE caliber = CALIBER_PISTOL material = /decl/material/solid/metal/steel @@ -178,7 +178,7 @@ /obj/item/ammo_magazine/box/smallpistol name = "ammunition box (pistol, small)" icon_state = "smallpistol" - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' material = /decl/material/solid/metal/steel caliber = CALIBER_PISTOL_SMALL ammo_type = /obj/item/ammo_casing/pistol/small @@ -187,7 +187,7 @@ /obj/item/ammo_magazine/box/pistol name = "ammunition box (pistol)" icon_state = "smallpistol" - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' caliber = CALIBER_PISTOL material = /decl/material/solid/metal/steel ammo_type = /obj/item/ammo_casing/pistol @@ -203,7 +203,7 @@ ammo_type = /obj/item/ammo_casing/pistol/emp caliber = CALIBER_PISTOL max_ammo = 15 - origin_tech = "{'combat':2,'magnets':2,'powerstorage':2}" + origin_tech = @'{"combat":2,"magnets":2,"powerstorage":2}' /obj/item/ammo_magazine/box/emp/smallpistol name = "ammunition box (pistol, small, haywire)" @@ -212,12 +212,12 @@ ammo_type = /obj/item/ammo_casing/pistol/small/emp caliber = CALIBER_PISTOL_SMALL max_ammo = 8 - origin_tech = "{'combat':2,'magnets':2,'powerstorage':2}" + origin_tech = @'{"combat":2,"magnets":2,"powerstorage":2}' /obj/item/ammo_magazine/rifle name = "assault rifle magazine" icon_state = "bullup" - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' mag_type = MAGAZINE caliber = CALIBER_RIFLE material = /decl/material/solid/metal/steel @@ -235,7 +235,7 @@ /obj/item/ammo_magazine/rifle/drum name = "machine gun drum magazine" icon_state = "drum" - origin_tech = "{'combat':2}" + origin_tech = @'{"combat":2}' mag_type = MAGAZINE caliber = CALIBER_RIFLE material = /decl/material/solid/metal/steel @@ -263,3 +263,38 @@ /obj/item/ammo_magazine/speedloader/laser_revolver caliber = CALIBER_PISTOL_LASBULB ammo_type = /obj/item/ammo_casing/lasbulb + +/obj/item/ammo_magazine/shotgunmag + name = "shotgun drum magazine" + desc = "A magazine for semi-automatic shotguns." + icon_state = "shotdrum" + caliber = CALIBER_SHOTGUN + mag_type = MAGAZINE + ammo_type = /obj/item/ammo_casing/shotgun + max_ammo = 15 + multiple_sprites = TRUE + +/obj/item/ammo_magazine/shotgunmag/shot + labels = list("shot") + ammo_type = /obj/item/ammo_casing/shotgun/pellet + +/obj/item/ammo_magazine/shotgunmag/flechette + labels = list("flechette") + ammo_type = /obj/item/ammo_casing/shotgun/flechette + +/obj/item/ammo_magazine/shotgunmag/beanbag + labels = list("beanbag") + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + +/obj/item/ammo_magazine/box/machinegun + name = "magazine box" + icon_state = "machinegun" + origin_tech = "{'combat':2}" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + ammo_type = /obj/item/ammo_casing/rifle + max_ammo = 50 + multiple_sprites = TRUE + +/obj/item/ammo_magazine/box/machinegun/empty + initial_ammo = 0 diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 9d73afb91c8..99c6401abb3 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -85,7 +85,7 @@ leaves_residue = 0 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'combat':3,'materials':3}" + origin_tech = @'{"combat":3,"materials":3}' /obj/item/ammo_casing/shotgun name = "shotgun slug" @@ -105,6 +105,11 @@ projectile_type = /obj/item/projectile/bullet/pellet/shotgun material = /decl/material/solid/metal/steel +/obj/item/ammo_casing/shotgun/flechette + name = "flechette shell" + desc = "A flechette shell." + projectile_type = /obj/item/projectile/bullet/pellet/shotgun/flechette + /obj/item/ammo_casing/shotgun/blank name = "shotgun shell" desc = "A blank shell." @@ -140,7 +145,7 @@ leaves_residue = 0 material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/glass = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'combat':3,'materials':3}" + origin_tech = @'{"combat":3,"materials":3}' /obj/item/ammo_casing/shotgun/stunshell/emp_act(severity) if(prob(100/severity)) BB = null @@ -164,7 +169,7 @@ projectile_type = /obj/item/projectile/ion material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/metal/uranium = MATTER_AMOUNT_REINFORCEMENT) - origin_tech = "{'combat':4,'materials':3}" + origin_tech = @'{"combat":4,"materials":3}' /obj/item/ammo_casing/shell name = "shell casing" diff --git a/code/modules/projectiles/ammunition/chemdart.dm b/code/modules/projectiles/ammunition/chemdart.dm index 96f183544db..bd8710bef92 100644 --- a/code/modules/projectiles/ammunition/chemdart.dm +++ b/code/modules/projectiles/ammunition/chemdart.dm @@ -9,12 +9,16 @@ material = /decl/material/solid/glass var/reagent_amount = 15 -/obj/item/projectile/bullet/chemdart/initialize_reagents(populate) +/obj/item/projectile/bullet/chemdart/Initialize() + . = ..() + initialize_reagents() + +/obj/item/projectile/bullet/chemdart/initialize_reagents(populate = TRUE) create_reagents(reagent_amount) . = ..() /obj/item/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) - if(blocked < 100 && isliving(target)) + if(reagents?.total_volume && blocked < 100 && isliving(target)) var/mob/living/L = target if(L.can_inject(null, def_zone) == CAN_INJECT) reagents.trans_to_mob(L, reagent_amount, CHEM_INJECT) @@ -35,7 +39,7 @@ desc = "A rack of hollow darts." icon_state = "darts" item_state = "rcdammo" - origin_tech = "{'materials':2}" + origin_tech = @'{"materials":2}' mag_type = MAGAZINE caliber = CALIBER_DART ammo_type = /obj/item/ammo_casing/chemdart diff --git a/code/modules/projectiles/ammunition/magnetic.dm b/code/modules/projectiles/ammunition/magnetic.dm index 4ad8d749207..893bde26c0c 100644 --- a/code/modules/projectiles/ammunition/magnetic.dm +++ b/code/modules/projectiles/ammunition/magnetic.dm @@ -8,7 +8,7 @@ var/basetype = /obj/item/magnetic_ammo w_class = ITEM_SIZE_SMALL material = /decl/material/solid/metal/steel - origin_tech = "{'combat':1}" + origin_tech = @'{"combat":1}' var/remaining = 9 /obj/item/magnetic_ammo/examine(mob/user) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index a2965b44b89..06e70a803ad 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -41,7 +41,7 @@ throw_speed = 4 throw_range = 5 force = 5 - origin_tech = "{'combat':1}" + origin_tech = @'{"combat":1}' attack_verb = list("struck", "hit", "bashed") zoomdevicename = "scope" @@ -57,7 +57,7 @@ var/fire_anim = null var/screen_shake = 0 //shouldn't be greater than 2 unless zoomed var/space_recoil = 0 //knocks back in space - var/silenced = 0 + var/silencer var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment. var/accuracy_power = 5 //increase of to-hit chance per 1 point of accuracy var/bulk = 0 //how unwieldy this weapon for its size, affects accuracy when fired without aiming @@ -123,7 +123,7 @@ autofiring_at = fire_at autofiring_by = fire_by if(!autofiring_timer) - autofiring_timer = addtimer(CALLBACK(src, .proc/handle_autofire, autoturn), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE)) + autofiring_timer = addtimer(CALLBACK(src, PROC_REF(handle_autofire), autoturn), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE)) else clear_autofire() @@ -153,28 +153,46 @@ update_icon() // In case item_state is set somewhere else. ..() +/obj/item/gun/proc/update_base_icon_state() + icon_state = get_world_inventory_state() + /obj/item/gun/on_update_icon() var/mob/living/M = loc . = ..() - update_base_icon() + update_base_icon_state() if(istype(M)) if(has_safety && M.skill_check(SKILL_WEAPONS,SKILL_BASIC)) add_overlay(image('icons/obj/guns/gui.dmi',"safety[safety()]")) if(src in M.get_held_items()) M.update_inhand_overlays() + + if(silencer) + var/silenced_state = "[icon_state]-silencer" + if(check_state_in_icon(silenced_state, icon)) + add_overlay(mutable_appearance(icon, silenced_state)) + if(safety_icon) add_overlay(get_safety_indicator()) -/obj/item/gun/proc/update_base_icon() +/obj/item/gun/get_on_belt_overlay() + if(silencer && check_state_in_icon("on_belt_silenced", icon)) + return overlay_image(icon, "on_belt_silenced", color) + return ..() /obj/item/gun/proc/get_safety_indicator() return mutable_appearance(icon, "[get_world_inventory_state()][safety_icon][safety()]") -/obj/item/gun/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) - if(overlay && user_mob.can_wield_item(src) && is_held_twohanded(user_mob) && check_state_in_icon("[overlay.icon_state]-wielded", overlay.icon)) - overlay.icon_state = "[overlay.icon_state]-wielded" +/obj/item/gun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) + if(overlay && user_mob.can_wield_item(src) && is_held_twohanded(user_mob)) + var/wielded_state = "[overlay.icon_state]-wielded" + if(check_state_in_icon(wielded_state, overlay.icon)) + overlay.icon_state = wielded_state + apply_gun_mob_overlays(user_mob, bodytype, overlay, slot, bodypart) . = ..() +/obj/item/gun/proc/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) + return + //Checks whether a given mob can use the gun //Any checks that shouldn't result in handle_click_empty() being called if they fail should go here. //Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there. @@ -259,6 +277,7 @@ var/mob/living/user = null if(isliving(firer)) user = firer + target_zone = user.get_target_zone() if(istype(user)) add_fingerprint(user) @@ -349,9 +368,9 @@ if(fire_anim) flick(fire_anim, src) - if(!silenced && check_fire_message_spam("fire")) + if(check_fire_message_spam("fire")) var/user_message = SPAN_WARNING("You fire \the [src][pointblank ? " point blank":""] at \the [target][reflex ? " by reflex" : ""]!") - if (silenced) + if (silencer) to_chat(firer, user_message) else firer.visible_message( @@ -513,7 +532,7 @@ if((istype(P) && P.fire_sound)) shot_sound = P.fire_sound shot_sound_vol = P.fire_sound_vol - if(silenced) + if(silencer) shot_sound_vol = 10 playsound(firer, shot_sound, shot_sound_vol, 1) @@ -543,7 +562,7 @@ if (istype(in_chamber)) user.visible_message("[user] pulls the trigger.") var/shot_sound = in_chamber.fire_sound? in_chamber.fire_sound : fire_sound - if(silenced) + if(silencer) playsound(user, shot_sound, 10, 1) else playsound(user, shot_sound, 50, 1) @@ -610,6 +629,16 @@ to_chat(user, "The safety is [safety() ? "on" : "off"].") last_safety_check = world.time +/obj/item/gun/proc/try_switch_firemodes(mob/user) + if(!istype(user) || length(firemodes) <= 1) + return FALSE + var/datum/firemode/new_mode = switch_firemodes() + if(prob(20) && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) + new_mode = switch_firemodes() + if(new_mode) + to_chat(user, SPAN_NOTICE("\The [src] is now set to [new_mode.name].")) + return !!new_mode + /obj/item/gun/proc/switch_firemodes(next_mode) if(!next_mode) next_mode = get_next_firemode() @@ -630,11 +659,9 @@ . = 1 /obj/item/gun/attack_self(mob/user) - var/datum/firemode/new_mode = switch_firemodes() - if(prob(20) && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - new_mode = switch_firemodes() - if(new_mode) - to_chat(user, "\The [src] is now set to [new_mode.name].") + if(try_switch_firemodes(user)) + return TRUE + return ..() /obj/item/gun/proc/toggle_safety(var/mob/user) if(!has_safety) @@ -703,7 +730,7 @@ else M.setClickCooldown(DEFAULT_QUICK_COOLDOWN) // Spam prevention, essentially. M.visible_message(SPAN_DANGER("\The [M] pulls the trigger reflexively!")) - Fire(aiming_at, M, target_zone = M.get_target_zone()) + Fire(aiming_at, M) if(M.aiming) M.aiming.toggle_active(FALSE, TRUE) @@ -716,12 +743,24 @@ /obj/item/gun/get_alt_interactions(mob/user) . = ..() - LAZYADD(., /decl/interaction_handler/toggle_safety) + LAZYADD(., /decl/interaction_handler/gun/toggle_safety) + if(length(firemodes) > 1) + LAZYADD(., /decl/interaction_handler/gun/toggle_firemode) -/decl/interaction_handler/toggle_safety - name = "Toggle Gun Safety" +/decl/interaction_handler/gun + abstract_type = /decl/interaction_handler/gun expected_target_type = /obj/item/gun -/decl/interaction_handler/toggle_safety/invoked(atom/target, mob/user, obj/item/prop) +/decl/interaction_handler/gun/toggle_safety + name = "Toggle Safety" + +/decl/interaction_handler/gun/toggle_safety/invoked(atom/target, mob/user, obj/item/prop) var/obj/item/gun/gun = target gun.toggle_safety(user) + +/decl/interaction_handler/gun/toggle_firemode + name = "Change Firemode" + +/decl/interaction_handler/gun/toggle_firemode/invoked(atom/target, mob/user, obj/item/prop) + var/obj/item/gun/gun = target + gun.try_switch_firemodes(user) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 8db4eb959d4..b8fb610335a 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,9 +10,8 @@ var/global/list/registered_cyborg_weapons = list() fire_sound_text = "laser blast" accuracy = 1 - var/obj/item/cell/power_supply // What type of power cell this starts with. Uses accepts_cell_type or variable cell if unset. var/charge_cost = 20 // How much energy is needed to fire. - var/max_shots = 10 // Determines the capacity of the weapon's power cell. Setting power_supply or accepts_cell_type will override this value. + var/max_shots = 10 // Determines the capacity of the weapon's power cell, if the type is not overridded in setup_power_supply(). var/modifystate // Changes the icon_state used for the charge overlay. var/charge_meter = 1 // If set, the icon state will be chosen based on the current charge var/indicator_color // Color used for overlay based charge meters @@ -20,31 +19,24 @@ var/global/list/registered_cyborg_weapons = list() var/use_external_power = 0 // If set, the weapon will look for an external power source to draw from, otherwise it recharges magically var/recharge_time = 4 // How many ticks between recharges. var/charge_tick = 0 // Current charge tick tracker. - var/accepts_cell_type // Specifies a cell type that can be loaded into this weapon. // Which projectile type to create when firing. var/projectile_type = /obj/item/projectile/beam/practice +/obj/item/gun/energy/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + accepted_cell_type = accepted_cell_type || loaded_cell_type || /obj/item/cell/device/variable + loaded_cell_type = loaded_cell_type || accepted_cell_type + power_supply_extension_type = power_supply_extension_type || /datum/extension/loaded_cell/unremovable + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, max_shots*charge_cost) + /obj/item/gun/energy/switch_firemodes() . = ..() if(.) update_icon() -/obj/item/gun/energy/emp_act(severity) - ..() - update_icon() - -/obj/item/gun/energy/Initialize() - - if(ispath(power_supply)) - power_supply = new power_supply(src) - else if(accepts_cell_type) - power_supply = new accepts_cell_type(src) - else - power_supply = new /obj/item/cell/device/variable(src, max_shots*charge_cost) - +/obj/item/gun/energy/Initialize(var/ml, var/material_key) + setup_power_supply() . = ..() - if(self_recharge) START_PROCESSING(SSobj, src) update_icon() @@ -52,13 +44,10 @@ var/global/list/registered_cyborg_weapons = list() /obj/item/gun/energy/Destroy() if(self_recharge) STOP_PROCESSING(SSobj, src) - QDEL_NULL(power_supply) return ..() -/obj/item/gun/energy/get_cell() - return power_supply - /obj/item/gun/energy/Process() + var/obj/item/cell/power_supply = get_cell() if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg charge_tick++ if(charge_tick < recharge_time) return 0 @@ -77,6 +66,7 @@ var/global/list/registered_cyborg_weapons = list() return 1 /obj/item/gun/energy/consume_next_projectile() + var/obj/item/cell/power_supply = get_cell() if(!power_supply) return null if(!ispath(projectile_type)) @@ -90,10 +80,14 @@ var/global/list/registered_cyborg_weapons = list() return loc.get_cell() /obj/item/gun/energy/proc/get_shots_remaining() - . = round(power_supply.charge / charge_cost) + var/obj/item/cell/power_supply = get_cell() + if(!power_supply) + return 0 + return round(power_supply.charge / charge_cost) /obj/item/gun/energy/examine(mob/user) . = ..(user) + var/obj/item/cell/power_supply = get_cell() if(!power_supply) to_chat(user, "Seems like it's dead.") return @@ -104,6 +98,7 @@ var/global/list/registered_cyborg_weapons = list() /obj/item/gun/energy/proc/get_charge_ratio() . = 0 + var/obj/item/cell/power_supply = get_cell() if(power_supply) var/ratio = power_supply.percent() //make sure that rounding down will not give us the empty state even if we have charge for a shot left. @@ -119,7 +114,7 @@ var/global/list/registered_cyborg_weapons = list() if(charge_meter) update_charge_meter() -/obj/item/gun/energy/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/gun/energy/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && charge_meter) var/charge_state = get_charge_state(overlay.icon_state) if(charge_state && check_state_in_icon(charge_state, overlay.icon)) @@ -136,52 +131,9 @@ var/global/list/registered_cyborg_weapons = list() if(use_single_icon) add_overlay(mutable_appearance(icon, "[get_world_inventory_state()][get_charge_ratio()]", indicator_color)) return + var/obj/item/cell/power_supply = get_cell() if(power_supply) if(modifystate) icon_state = "[modifystate][get_charge_ratio()]" else icon_state = "[initial(icon_state)][get_charge_ratio()]" - -//For removable cells. -/obj/item/gun/energy/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || isnull(accepts_cell_type) || isnull(power_supply) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) - return ..() - user.put_in_hands(power_supply) - power_supply = null - user.visible_message(SPAN_NOTICE("\The [user] unloads \the [src].")) - playsound(src,'sound/weapons/guns/interaction/smg_magout.ogg' , 50) - update_icon() - return TRUE - -/obj/item/gun/energy/attackby(var/obj/item/A, mob/user) - - if(istype(A, /obj/item/cell)) - - if(isnull(accepts_cell_type)) - to_chat(user, SPAN_WARNING("\The [src] cannot accept a cell.")) - return TRUE - - if(!istype(A, accepts_cell_type)) - var/obj/cell_dummy = accepts_cell_type - to_chat(user, SPAN_WARNING("\The [src]'s cell bracket can only accept \a [initial(cell_dummy.name)].")) - return TRUE - - if(!user.is_holding_offhand(src)) - to_chat(user, SPAN_WARNING("You must hold \the [src] in your hands to load it.")) - return TRUE - - if(istype(power_supply) ) - to_chat(user, SPAN_NOTICE("\The [src] already has \a [power_supply] loaded.")) - return TRUE - - if(!do_after(user, 5, A, can_move = TRUE)) - return TRUE - - if(user.try_unequip(A, src)) - power_supply = A - user.visible_message(SPAN_WARNING("\The [user] loads \the [A] into \the [src]!")) - playsound(src, 'sound/weapons/guns/interaction/energy_magin.ogg', 80) - update_icon() - return TRUE - - return ..() diff --git a/code/modules/projectiles/guns/energy/capacitor.dm b/code/modules/projectiles/guns/energy/capacitor.dm index 0d07d013922..eddeb72c80a 100644 --- a/code/modules/projectiles/guns/energy/capacitor.dm +++ b/code/modules/projectiles/guns/energy/capacitor.dm @@ -47,13 +47,13 @@ var/global/list/laser_wavelengths desc = "An excitingly chunky directed energy weapon that uses a modular capacitor array to charge each shot." icon = 'icons/obj/guns/capacitor_pistol.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':4,'materials':4,'powerstorage':4}" + origin_tech = @'{"combat":4,"materials":4,"powerstorage":4}' w_class = ITEM_SIZE_NORMAL charge_cost = 100 + charge_meter = FALSE accuracy = 2 fire_delay = 10 slot_flags = SLOT_LOWER_BODY - power_supply = /obj/item/cell/high material = /decl/material/solid/metal/steel projectile_type = /obj/item/projectile/beam/variable matter = list( @@ -70,6 +70,12 @@ var/global/list/laser_wavelengths var/decl/laser_wavelength/charging var/decl/laser_wavelength/selected_wavelength +/obj/item/gun/energy/capacitor/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/high + accepted_cell_type = accepted_cell_type || /obj/item/cell + power_supply_extension_type = power_supply_extension_type || /datum/extension/loaded_cell/secured + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + /obj/item/gun/energy/capacitor/examine(mob/user, distance) . = ..() if(loc == user || distance <= 1) @@ -103,29 +109,17 @@ var/global/list/laser_wavelengths return ..() if(IS_SCREWDRIVER(W)) + // Unload the cell before the caps. + if(get_cell()) + return ..() if(length(capacitors)) var/obj/item/stock_parts/capacitor/capacitor = capacitors[1] capacitor.charge = 0 user.put_in_hands(capacitor) LAZYREMOVE(capacitors, capacitor) - else if(power_supply) - user.put_in_hands(power_supply) - power_supply = null - else - to_chat(user, SPAN_WARNING("\The [src] does not have a cell or capacitor installed.")) - return TRUE - playsound(loc, 'sound/items/Screwdriver2.ogg', 25) - update_icon() - return TRUE - - if(istype(W, /obj/item/cell)) - if(power_supply) - to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) - else if(user.try_unequip(W, src)) - power_supply = W - to_chat(user, SPAN_NOTICE("You fit \the [W] into \the [src].")) + playsound(loc, 'sound/items/Screwdriver2.ogg', 25) update_icon() - return TRUE + return TRUE if(istype(W, /obj/item/stock_parts/capacitor)) if(length(capacitors) >= max_capacitors) @@ -147,7 +141,7 @@ var/global/list/laser_wavelengths charging = FALSE else var/new_wavelength = input("Select the desired laser wavelength.", "Capacitor Laser Wavelength", selected_wavelength) as null|anything in global.laser_wavelengths - if(!charging && new_wavelength != selected_wavelength && (loc == user || user.Adjacent(src)) && !user.incapacitated()) + if(!charging && new_wavelength && new_wavelength != selected_wavelength && (loc == user || user.Adjacent(src)) && !user.incapacitated()) selected_wavelength = new_wavelength to_chat(user, SPAN_NOTICE("You dial \the [src] wavelength to [selected_wavelength.name].")) update_icon() @@ -166,8 +160,9 @@ var/global/list/laser_wavelengths for(var/obj/item/stock_parts/capacitor/capacitor in capacitors) if(capacitor.charge < capacitor.max_charge) charged = FALSE + var/obj/item/cell/power_supply = get_cell() var/use_charge_cost = min(charge_cost * capacitor.rating, round((capacitor.max_charge - capacitor.charge) / capacitor_charge_constant)) - if(power_supply.use(use_charge_cost)) + if(power_supply?.use(use_charge_cost)) capacitor.charge(use_charge_cost * capacitor_charge_constant) update_icon() else @@ -183,6 +178,7 @@ var/global/list/laser_wavelengths var/total_charge_cost = 0 for(var/obj/item/stock_parts/capacitor/capacitor in capacitors) total_charge_cost += capacitor.max_charge + var/obj/item/cell/power_supply = get_cell() . = round(power_supply?.charge / (total_charge_cost / capacitor_charge_constant)) /obj/item/gun/energy/capacitor/on_update_icon() @@ -191,7 +187,7 @@ var/global/list/laser_wavelengths I.color = wiring_color I.appearance_flags |= RESET_COLOR add_overlay(I) - if(power_supply) + if(get_cell()) I = image(icon, "[icon_state]-cell") add_overlay(I) @@ -223,25 +219,24 @@ var/global/list/laser_wavelengths var/mob/M = loc M.update_inhand_overlays() -/obj/item/gun/energy/capacitor/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/gun/energy/capacitor/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) + ..() if(overlay && (slot == BP_L_HAND || slot == BP_R_HAND || slot == slot_back_str)) var/image/I = image(overlay.icon, "[overlay.icon_state]-wiring") I.color = wiring_color I.appearance_flags |= RESET_COLOR overlay.add_overlay(I) - if(power_supply) + if(get_cell()) I = image(overlay.icon, "[overlay.icon_state]-cell") overlay.add_overlay(I) - if(slot != slot_back_str) - for(var/i = 1 to length(capacitors)) - var/obj/item/stock_parts/capacitor/capacitor = capacitors[i] - if(capacitor.charge > 0) - I = emissive_overlay(overlay.icon, "[overlay.icon_state]-charging-[i]") - I.alpha = clamp(255 * (capacitor.charge/capacitor.max_charge), 0, 255) - I.color = selected_wavelength.color - I.appearance_flags |= RESET_COLOR - overlay.overlays += I - . = ..() + for(var/i = 1 to length(capacitors)) + var/obj/item/stock_parts/capacitor/capacitor = capacitors[i] + if(capacitor.charge > 0) + I = emissive_overlay(overlay.icon, "[overlay.icon_state]-charging-[i]") + I.alpha = clamp(255 * (capacitor.charge/capacitor.max_charge), 0, 255) + I.color = selected_wavelength.color + I.appearance_flags |= RESET_COLOR + overlay.overlays += I /obj/item/gun/energy/capacitor/consume_next_projectile() @@ -270,17 +265,22 @@ var/global/list/laser_wavelengths one_hand_penalty = 6 fire_delay = 20 w_class = ITEM_SIZE_HUGE - power_supply = /obj/item/cell/super + +/obj/item/gun/energy/capacitor/rifle/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + loaded_cell_type = loaded_cell_type || /obj/item/cell/super + return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) /obj/item/gun/energy/capacitor/rifle/linear_fusion name = "linear fusion rifle" desc = "A chunky, angular, carbon-fiber-finish capacitor rifle, shipped complete with a self-charging power cell. The operating instructions seem to be written in backwards Cyrillic." color = COLOR_GRAY40 - power_supply = /obj/item/cell/infinite capacitors = /obj/item/stock_parts/capacitor/super projectile_type = /obj/item/projectile/beam/variable/split wiring_color = COLOR_GOLD +/obj/item/gun/energy/capacitor/rifle/linear_fusion/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/infinite, accepted_cell_type, /datum/extension/loaded_cell/unremovable, charge_value) + /obj/item/gun/energy/capacitor/rifle/linear_fusion/attackby(obj/item/W, mob/user) if(IS_SCREWDRIVER(W)) to_chat(user, SPAN_WARNING("\The [src] is hermetically sealed; you can't get the components out.")) diff --git a/code/modules/projectiles/guns/energy/ebow.dm b/code/modules/projectiles/guns/energy/ebow.dm index 08402cffafe..8692e89deb4 100644 --- a/code/modules/projectiles/guns/energy/ebow.dm +++ b/code/modules/projectiles/guns/energy/ebow.dm @@ -5,10 +5,10 @@ icon = 'icons/obj/guns/energy_crossbow.dmi' icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_NORMAL - origin_tech = "{'combat':2,'magnets':2,'esoteric':5}" + origin_tech = @'{"combat":2,"magnets":2,"esoteric":5}' material = /decl/material/solid/metal/steel slot_flags = SLOT_LOWER_BODY - silenced = 1 + silencer = TRUE fire_sound = 'sound/weapons/Genhit.ogg' projectile_type = /obj/item/projectile/energy/bolt max_shots = 8 diff --git a/code/modules/projectiles/guns/energy/egun.dm b/code/modules/projectiles/guns/energy/egun.dm index be5d3b33eb3..ba6cfb04214 100644 --- a/code/modules/projectiles/guns/energy/egun.dm +++ b/code/modules/projectiles/guns/energy/egun.dm @@ -9,7 +9,7 @@ fire_delay = 10 // To balance for the fact that it is a pistol and can be used one-handed without penalty projectile_type = /obj/item/projectile/beam/stun - origin_tech = "{'combat':3,'magnets':2}" + origin_tech = @'{"combat":3,"magnets":2}' indicator_color = COLOR_CYAN firemodes = list( @@ -42,5 +42,6 @@ /obj/item/gun/energy/gun/reloadable name = "reloadable energy gun" desc = "Another bestseller of Lawson Arms and the FTU, the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low, medium and high power projectile settings. In other words: stun, shock or kill." - power_supply = null - accepts_cell_type = /obj/item/cell/gun \ No newline at end of file + +/obj/item/gun/energy/gun/reloadable/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/gun, /obj/item/cell/gun, /datum/extension/loaded_cell, charge_value) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 5224730b58b..ee23a4ab706 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -8,7 +8,7 @@ force = 10 one_hand_penalty = 2 bulk = GUN_BULK_RIFLE - origin_tech = "{'combat':3,'magnets':2}" + origin_tech = @'{"combat":3,"magnets":2}' material = /decl/material/solid/metal/steel projectile_type = /obj/item/projectile/beam/midlaser matter = list( @@ -74,7 +74,7 @@ icon_state = "lasercannon" icon = 'icons/obj/guns/laser_cannon.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':4,'materials':3,'powerstorage':3}" + origin_tech = @'{"combat":4,"materials":3,"powerstorage":3}' slot_flags = SLOT_LOWER_BODY|SLOT_BACK one_hand_penalty = 6 //large and heavy w_class = ITEM_SIZE_HUGE @@ -98,9 +98,9 @@ one_hand_penalty = 0 has_safety = FALSE - /obj/item/gun/energy/laser/reloadable name = "reloadable laser carbine" desc = "A G40E carbine, designed to kill with concentrated energy blasts. Uses removable energy cells." - power_supply = null - accepts_cell_type = /obj/item/cell/gun + +/obj/item/gun/energy/laser/reloadable/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/gun, /obj/item/cell/gun, power_supply_extension_type, charge_value) diff --git a/code/modules/projectiles/guns/energy/laser_sniper.dm b/code/modules/projectiles/guns/energy/laser_sniper.dm index bc037c6c4a0..2b8efadc989 100644 --- a/code/modules/projectiles/guns/energy/laser_sniper.dm +++ b/code/modules/projectiles/guns/energy/laser_sniper.dm @@ -4,7 +4,7 @@ desc = "The HI DMR 9E is an older design. A designated marksman rifle capable of shooting powerful ionized beams, this is a weapon to kill from a distance." icon = 'icons/obj/guns/laser_sniper.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':6,'materials':5,'powerstorage':4}" + origin_tech = @'{"combat":6,"materials":5,"powerstorage":4}' projectile_type = /obj/item/projectile/beam/sniper one_hand_penalty = 5 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. slot_flags = SLOT_BACK diff --git a/code/modules/projectiles/guns/energy/lasertag.dm b/code/modules/projectiles/guns/energy/lasertag.dm index 2f029665387..e9857630b0b 100644 --- a/code/modules/projectiles/guns/energy/lasertag.dm +++ b/code/modules/projectiles/guns/energy/lasertag.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/guns/laser_carbine.dmi' icon_state = ICON_STATE_WORLD desc = "Standard issue weapon of the Imperial Guard." - origin_tech = "{'combat':1,'magnets':2}" + origin_tech = @'{"combat":1,"magnets":2}' self_recharge = 1 material = /decl/material/solid/metal/steel projectile_type = /obj/item/projectile/beam/lastertag/blue diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index c594990a7f4..b7ccef79df0 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -2,7 +2,7 @@ name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized reactor." icon = 'icons/obj/guns/adv_egun.dmi' - origin_tech = "{'combat':3,'materials':5,'powerstorage':3}" + origin_tech = @'{"combat":3,"materials":5,"powerstorage":3}' slot_flags = SLOT_LOWER_BODY w_class = ITEM_SIZE_LARGE force = 8 //looks heavier than a pistol diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 9b961a21142..0b8a92bd278 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -3,7 +3,7 @@ desc = "The Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats. Not the best of its type." icon = 'icons/obj/guns/ion_rifle.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':2,'magnets':4}" + origin_tech = @'{"combat":2,"magnets":4}' w_class = ITEM_SIZE_HUGE force = 10 obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -23,12 +23,18 @@ /obj/item/gun/energy/ionrifle/emp_act(severity) ..(max(severity, 2)) //so it doesn't EMP itself, I guess +/obj/item/gun/energy/ionrifle/mounted + name = "mounted ion gun" + self_recharge = TRUE + use_external_power = TRUE + has_safety = FALSE + /obj/item/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." icon = 'icons/obj/guns/decloner.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':5,'materials':4,'powerstorage':3}" + origin_tech = @'{"combat":5,"materials":4,"powerstorage":3}' max_shots = 10 projectile_type = /obj/item/projectile/energy/declone combustion = 0 @@ -43,7 +49,7 @@ charge_cost = 10 max_shots = 10 projectile_type = /obj/item/projectile/energy/floramut - origin_tech = "{'materials':2,'biotech':3,'powerstorage':3}" + origin_tech = @'{"materials":2,"biotech":3,"powerstorage":3}' self_recharge = 1 material = /decl/material/solid/metal/steel matter = list( @@ -102,7 +108,7 @@ icon = 'icons/obj/guns/toxgun.dmi' icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_NORMAL - origin_tech = "{'combat':5,'exoticmatter':4}" + origin_tech = @'{"combat":5,"exoticmatter":4}' projectile_type = /obj/item/projectile/energy/radiation material = /decl/material/solid/metal/steel matter = list( @@ -120,7 +126,7 @@ slot_flags = SLOT_LOWER_BODY|SLOT_BACK w_class = ITEM_SIZE_NORMAL force = 8 - origin_tech = "{'materials':4,'exoticmatter':4,'engineering':6,'combat':3}" + origin_tech = @'{"materials":4,"exoticmatter":4,"engineering":6,"combat":3}' material = /decl/material/solid/metal/steel projectile_type = /obj/item/projectile/beam/plasmacutter max_shots = 10 @@ -146,7 +152,8 @@ has_safety = FALSE /obj/item/gun/energy/plasmacutter/proc/slice(var/mob/M = null) - if(!safety() && power_supply.checked_use(charge_cost)) //consumes a shot per use + var/obj/item/cell/power_supply = get_cell() + if(!safety() && power_supply?.checked_use(charge_cost)) //consumes a shot per use if(M) M.welding_eyecheck()//Welding tool eye check if(check_accidents(M, "[M] loses grip on [src] from its sudden recoil!",SKILL_CONSTRUCTION, 60, SKILL_ADEPT)) @@ -165,7 +172,7 @@ icon = 'icons/obj/guns/incendiary_laser.dmi' icon_state = ICON_STATE_WORLD safety_icon = "safety" - origin_tech = "{'combat':7,'magnets':4,'esoteric':4}" + origin_tech = @'{"combat":7,"magnets":4,"esoteric":4}' material = /decl/material/solid/metal/aluminium matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index ca42527292f..75de92c76f3 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -34,7 +34,7 @@ desc = "The Mars Military Industries MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands." icon = 'icons/obj/guns/plasma_stun.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':2,'materials':2,'powerstorage':3}" + origin_tech = @'{"combat":2,"materials":2,"powerstorage":3}' fire_delay = 20 max_shots = 4 projectile_type = /obj/item/projectile/energy/plasmastun @@ -47,7 +47,7 @@ icon = 'icons/obj/guns/confuseray.dmi' icon_state = ICON_STATE_WORLD safety_icon = "safety" - origin_tech = "{'combat':2,'materials':2,'powerstorage':2}" + origin_tech = @'{"combat":2,"materials":2,"powerstorage":2}' w_class = ITEM_SIZE_SMALL max_shots = 4 projectile_type = /obj/item/projectile/beam/confuseray diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index 7c8e9e1015c..15cd979e5fd 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -10,16 +10,18 @@ /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) charge_cost = 10 - origin_tech = "{'combat':3,'materials':4,'powerstorage':3,'magnets':2}" + origin_tech = @'{"combat":3,"materials":4,"powerstorage":3,"magnets":2}' slot_flags = SLOT_LOWER_BODY|SLOT_BACK one_hand_penalty = 2 projectile_type = /obj/item/projectile/temp - power_supply = /obj/item/cell/high combustion = 0 indicator_color = COLOR_GREEN var/firing_temperature = T20C var/current_temperature = T20C +/obj/item/gun/energy/temperature/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/high, /obj/item/cell, power_supply_extension_type, charge_value) + /obj/item/gun/energy/temperature/Initialize() . = ..() START_PROCESSING(SSobj, src) diff --git a/code/modules/projectiles/guns/energy/xray.dm b/code/modules/projectiles/guns/energy/xray.dm index 6c1bf530b82..cf20a5f1e00 100644 --- a/code/modules/projectiles/guns/energy/xray.dm +++ b/code/modules/projectiles/guns/energy/xray.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/guns/xray.dmi' icon_state = ICON_STATE_WORLD slot_flags = SLOT_LOWER_BODY|SLOT_BACK - origin_tech = "{'combat':5,'materials':3,'magnets':2,'esoteric':2}" + origin_tech = @'{"combat":5,"materials":3,"magnets":2,"esoteric":2}' projectile_type = /obj/item/projectile/beam/xray/midlaser one_hand_penalty = 2 w_class = ITEM_SIZE_LARGE diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index 56e02609c8f..4d9c170277a 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -3,7 +3,7 @@ desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine." icon = 'icons/obj/guns/launcher/grenade.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':2,'materials':3}" + origin_tech = @'{"combat":2,"materials":3}' w_class = ITEM_SIZE_HUGE force = 10 diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm index 964cf71c46d..bb585d1c534 100644 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ b/code/modules/projectiles/guns/launcher/money_cannon.dm @@ -3,7 +3,7 @@ desc = "A blocky, plastic novelty launcher that claims to be able to shoot money at considerable velocities." icon = 'icons/obj/guns/launcher/money.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':1,'materials':1}" + origin_tech = @'{"combat":1,"materials":1}' slot_flags = SLOT_LOWER_BODY w_class = ITEM_SIZE_SMALL release_force = 80 diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 4506d9ed397..1bc0b69c357 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -3,7 +3,7 @@ desc = "A large gas-powered cannon." icon = 'icons/obj/guns/launcher/pneumatic.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'combat':4,'materials':3}" + origin_tech = @'{"combat":4,"materials":3}' slot_flags = SLOT_LOWER_BODY w_class = ITEM_SIZE_HUGE obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -23,6 +23,10 @@ // For reference, a fully pressurized oxy tank at 50% gas release firing a health // analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+. +SAVED_VAR(/obj/item/gun/launcher/pneumatic, tank) +SAVED_VAR(/obj/item/gun/launcher/pneumatic, item_storage) +SAVED_VAR(/obj/item/gun/launcher/pneumatic, pressure_setting) + /obj/item/gun/launcher/pneumatic/Initialize() . = ..() item_storage = new(src) @@ -133,7 +137,7 @@ icon_state = get_world_inventory_state() update_held_icon() -/obj/item/gun/launcher/pneumatic/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/gun/launcher/pneumatic/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && tank) overlay.icon_state += "-tank" . = ..() diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm index 9d5e7429ad5..938eba04ffb 100644 --- a/code/modules/projectiles/guns/launcher/rocket.dm +++ b/code/modules/projectiles/guns/launcher/rocket.dm @@ -9,7 +9,7 @@ force = 5.0 obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = 0 - origin_tech = "{'combat':8,'materials':5}" + origin_tech = @'{"combat":8,"materials":5}' fire_sound = 'sound/effects/bang.ogg' combustion = 1 diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 7c3d0956a4f..d2a4257e99d 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -3,7 +3,6 @@ desc = "An impact-triggered compressed gas cartridge that can be fitted to a syringe for rapid injection." icon = 'icons/obj/ammo.dmi' icon_state = "syringe-cartridge" - var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -11,13 +10,14 @@ throwforce = 3 force = 3 w_class = ITEM_SIZE_TINY + var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot var/obj/item/chems/syringe/syringe /obj/item/syringe_cartridge/on_update_icon() . = ..() underlays.Cut() if(syringe) - var/mutable_appearance/MA = syringe.appearance + var/mutable_appearance/MA = new /mutable_appearance(syringe) MA.pixel_x = 0 MA.pixel_y = 0 MA.pixel_w = 0 @@ -58,7 +58,7 @@ //unfortuately we don't know where the dart will actually hit, since that's done by the parent. if(L.can_inject(null, ran_zone(TT.target_zone, 30, L)) == CAN_INJECT && syringe.reagents) var/reagent_log = syringe.reagents.get_reagents() - syringe.reagents.trans_to_mob(L, 15, CHEM_INJECT) + syringe.reagents.trans_to_mob(L, syringe.reagents.total_volume, CHEM_INJECT) admin_inject_log(TT.thrower? TT.thrower : null, L, src, reagent_log, 15, violent=1) syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null) diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index 8d737b3349f..0710e5c1eb5 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -5,33 +5,39 @@ icon_state = ICON_STATE_WORLD one_hand_penalty = 5 fire_delay = 20 - origin_tech = "{'combat':5,'materials':4,'esoteric':2,'magnets':4}" + origin_tech = @'{"combat":5,"materials":4,"esoteric":2,"magnets":4}' w_class = ITEM_SIZE_LARGE bulk = GUN_BULK_RIFLE combustion = 1 - var/obj/item/cell/cell // Currently installed powercell. - var/obj/item/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. + var/obj/item/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. var/removable_components = TRUE // Whether or not the gun can be dismantled. var/gun_unreliable = 15 // Percentage chance of detonating in your hands. var/obj/item/loaded // Currently loaded object, for retrieval/unloading. - var/load_type = /obj/item/stack/material/rods // Type of stack to load with. - var/load_sheet_max = 1 // Maximum number of "sheets" you can load from a stack. + var/load_type = /obj/item/stack/material/rods // Type of stack to load with. + var/load_sheet_max = 1 // Maximum number of "sheets" you can load from a stack. var/projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher. var/power_cost = 950 // Cost per fire, should consume almost an entire basic cell. var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating. +SAVED_VAR(/obj/item/gun/magnetic, capacitor) +SAVED_VAR(/obj/item/gun/magnetic, loaded) +SAVED_VAR(/obj/item/gun/magnetic, load_type) + +/obj/item/gun/magnetic/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(loaded_cell_type, /obj/item/cell, (removable_components ? /datum/extension/loaded_cell : /datum/extension/loaded_cell/unremovable), charge_value) + /obj/item/gun/magnetic/preloaded - cell = /obj/item/cell/high capacitor = /obj/item/stock_parts/capacitor/adv +/obj/item/gun/magnetic/preloaded/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/high, accepted_cell_type, power_supply_extension_type, charge_value) + /obj/item/gun/magnetic/Initialize() START_PROCESSING(SSobj, src) - - if (ispath(cell)) - cell = new cell() + setup_power_supply() if (ispath(capacitor)) capacitor = new capacitor() capacitor.charge = capacitor.max_charge @@ -45,16 +51,13 @@ /obj/item/gun/magnetic/Destroy() STOP_PROCESSING(SSobj, src) - QDEL_NULL(cell) QDEL_NULL(loaded) QDEL_NULL(capacitor) . = ..() -/obj/item/gun/magnetic/get_cell() - return cell - /obj/item/gun/magnetic/Process() if(capacitor) + var/obj/item/cell/cell = get_cell() if(cell) if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick)) capacitor.charge(power_per_tick) @@ -65,6 +68,7 @@ /obj/item/gun/magnetic/on_update_icon() . = ..() + var/obj/item/cell/cell = get_cell() if(removable_components) if(cell) add_overlay("[icon_state]_cell") @@ -89,13 +93,10 @@ /obj/item/gun/magnetic/examine(mob/user) . = ..() - if(cell) - to_chat(user, "The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.") - if(capacitor) - to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.") - if(!cell || !capacitor) + if(!get_cell() || !capacitor) to_chat(user, "The capacitor charge indicator is blinking [SPAN_RED("red")]. Maybe you should check the cell or capacitor.") else + to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.") if(capacitor.charge < power_cost) to_chat(user, "The capacitor charge indicator is [SPAN_ORANGE("amber")].") else @@ -104,18 +105,6 @@ /obj/item/gun/magnetic/attackby(var/obj/item/thing, var/mob/user) if(removable_components) - if(istype(thing, /obj/item/cell)) - if(cell) - to_chat(user, "\The [src] already has \a [cell] installed.") - return - if(!user.try_unequip(thing, src)) - return - cell = thing - playsound(loc, 'sound/machines/click.ogg', 10, 1) - user.visible_message("\The [user] slots \the [cell] into \the [src].") - update_icon() - return - if(IS_SCREWDRIVER(thing)) if(!capacitor) to_chat(user, "\The [src] has no capacitor installed.") @@ -126,7 +115,6 @@ capacitor = null update_icon() return - if(istype(thing, /obj/item/stock_parts/capacitor)) if(capacitor) to_chat(user, "\The [src] already has \a [capacitor] installed.") @@ -193,9 +181,8 @@ if(loaded) removing = loaded loaded = null - else if(cell && removable_components) - removing = cell - cell = null + else if(removable_components && get_cell()) + return ..() if(removing) user.put_in_hands(removing) user.visible_message(SPAN_NOTICE("\The [user] removes \the [removing] from \the [src].")) diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm index 1919ee1ef2f..30bb71cea69 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/guns/railgun.dmi' removable_components = TRUE // Can swap out the capacitor for more shots, or cell for longer usage before recharge load_type = /obj/item/rcd_ammo - origin_tech = "{'combat':5,'materials':4,'magnets':4}" + origin_tech = @'{"combat":5,"materials":4,"magnets":4}' projectile_type = /obj/item/projectile/bullet/magnetic/slug one_hand_penalty = 6 power_cost = 300 @@ -14,13 +14,14 @@ loaded = /obj/item/rcd_ammo/large // ~30 shots combustion = 1 bulk = GUN_BULK_RIFLE + 3 - - cell = /obj/item/cell/hyper capacitor = /obj/item/stock_parts/capacitor/adv // 6-8 shots gun_unreliable = 0 var/slowdown_held = 3 var/slowdown_worn = 2 +/obj/item/gun/magnetic/railgun/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/hyper, accepted_cell_type, power_supply_extension_type, charge_value) + /obj/item/gun/magnetic/railgun/Initialize() LAZYSET(slowdown_per_slot, BP_L_HAND, slowdown_held) LAZYSET(slowdown_per_slot, BP_R_HAND, slowdown_held) @@ -63,7 +64,6 @@ one_hand_penalty = 2 fire_delay = 8 removable_components = FALSE - cell = /obj/item/cell/hyper capacitor = /obj/item/stock_parts/capacitor/adv slot_flags = SLOT_BACK power_cost = 100 diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 8ea0a2a3da4..8484b46f898 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -2,7 +2,7 @@ name = "gun" desc = "A gun that fires bullets." icon = 'icons/obj/guns/pistol.dmi' - origin_tech = "{'combat':2,'materials':2}" + origin_tech = @'{"combat":2,"materials":2}' w_class = ITEM_SIZE_NORMAL material = /decl/material/solid/metal/steel screen_shake = 1 @@ -122,6 +122,11 @@ //Attempts to load A into src, depending on the type of thing being loaded and the load_method //Maybe this should be broken up into separate procs for each load method? /obj/item/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user) + + // This gun cannot be manually reloaded. + if(caliber == CALIBER_UNUSABLE) + return + if(istype(A, /obj/item/ammo_magazine)) . = TRUE var/obj/item/ammo_magazine/AM = A @@ -177,19 +182,24 @@ //attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled /obj/item/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1) + + . = FALSE if(is_jammed) user.visible_message("\The [user] begins to unjam [src].", "You clear the jam and unload [src].") if(!do_after(user, 4, src)) return is_jammed = 0 playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) + if(ammo_magazine) user.put_in_hands(ammo_magazine) user.visible_message("[user] removes [ammo_magazine] from [src].", "You remove [ammo_magazine] from [src].") playsound(loc, mag_remove_sound, 50, 1) ammo_magazine.update_icon() ammo_magazine = null - else if(loaded.len) + . = TRUE + + else if(length(loaded)) //presumably, if it can be speed-loaded, it can be speed-unloaded. if(allow_dump && (load_method & SPEEDLOADER)) var/count = 0 @@ -203,32 +213,80 @@ loaded.Cut() if(count) user.visible_message("[user] unloads [src].", "You unload [count] round\s from [src].") + . = TRUE else if(load_method & SINGLE_CASING) var/obj/item/ammo_casing/C = loaded[loaded.len] loaded.len-- user.put_in_hands(C) user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") - else - to_chat(user, "[src] is empty.") + . = TRUE + if(.) + update_icon() + +/obj/item/gun/projectile/proc/try_remove_silencer(mob/user) + if(!istype(user) || !istype(silencer, /obj/item)) + return FALSE + if(!user.is_holding_offhand(src)) + return FALSE + if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS, TRUE)) + return FALSE + to_chat(user, SPAN_NOTICE("You unscrew \the [silencer] from \the [src].")) + user.put_in_hands(silencer) + silencer = initial(silencer) + w_class = initial(w_class) update_icon() + return TRUE + +/obj/item/gun/projectile/proc/can_have_silencer() + return FALSE + +/obj/item/gun/projectile/attackby(var/obj/item/used_item, mob/user) + + if(load_ammo(used_item, user)) + return TRUE + + if(istype(used_item, /obj/item/silencer)) -/obj/item/gun/projectile/attackby(var/obj/item/A, mob/user) - if(!load_ammo(A, user)) - return ..() + if(istype(silencer, /obj/item)) + to_chat(user, SPAN_WARNING("\The [src] already has \a [silencer] attached.")) + return TRUE + + if(silencer) + to_chat(user, SPAN_WARNING("\The [src] does not need a silencer; it is already silent.")) + return TRUE + + if(!can_have_silencer()) + to_chat(user, SPAN_WARNING("\The [src] cannot be fitted with a silencer.")) + return TRUE + + if(!(src in user.get_held_items())) //if we're not in his hands + to_chat(user, SPAN_WARNING("You'll need \the [src] in your hands to do that.")) + return TRUE + + if(user.try_unequip(used_item, src)) + to_chat(user, SPAN_NOTICE("You screw \the [used_item] onto \the [src].")) + silencer = used_item + w_class = ITEM_SIZE_NORMAL + update_icon() + return TRUE + + . = ..() /obj/item/gun/projectile/attack_self(mob/user) - if(firemodes.len > 1) - ..() - else if(manual_unload) - unload_ammo(user) - else - to_chat(user, SPAN_WARNING("You can't unload \the [src] manually. Maybe try a crowbar?")) + if(length(firemodes) <= 1) + if(manual_unload && unload_ammo(user)) + return TRUE + if(try_remove_silencer(user)) + return TRUE + return ..() /obj/item/gun/projectile/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !manual_unload || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) - return ..() - unload_ammo(user, allow_dump=0) - return TRUE + if(src in user.get_inactive_held_items()) + if(manual_unload && unload_ammo(user, allow_dump = FALSE)) + return TRUE + if(try_remove_silencer(user)) + return TRUE + return ..() /obj/item/gun/projectile/afterattack(atom/A, mob/living/user) ..() @@ -277,14 +335,27 @@ else return mutable_appearance(icon, "[base_state]_ammo_ok") -/* Unneeded -- so far. -//in case the weapon has firemodes and can't unload using attack_hand() -/obj/item/gun/projectile/verb/unload_gun() - set name = "Unload Ammo" - set category = "Object" - set src in usr +/obj/item/gun/projectile/get_alt_interactions(mob/user) + . = ..() + if(isitem(silencer)) + LAZYADD(., /decl/interaction_handler/projectile/remove_silencer) + if(ammo_magazine || length(loaded)) + LAZYADD(., /decl/interaction_handler/projectile/unload_ammo) + +/decl/interaction_handler/projectile + abstract_type = /decl/interaction_handler/projectile + expected_target_type = /obj/item/gun/projectile + +/decl/interaction_handler/projectile/remove_silencer + name = "Remove Silencer" + +/decl/interaction_handler/projectile/remove_silencer/invoked(atom/target, mob/user, obj/item/prop) + var/obj/item/gun/projectile/gun = target + gun.try_remove_silencer(user) - if(usr.stat || usr.restrained()) return +/decl/interaction_handler/projectile/unload_ammo + name = "Remove Ammunition" - unload_ammo(usr) -*/ +/decl/interaction_handler/projectile/unload_ammo/invoked(atom/target, mob/user, obj/item/prop) + var/obj/item/gun/projectile/gun = target + gun.unload_ammo(user) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 56fe369ff51..e94c69d8023 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -6,7 +6,7 @@ safety_icon = "safety" w_class = ITEM_SIZE_NORMAL caliber = CALIBER_PISTOL_SMALL - origin_tech = "{'combat':5,'materials':2}" + origin_tech = @'{"combat":5,"materials":2}' slot_flags = SLOT_LOWER_BODY|SLOT_BACK ammo_type = /obj/item/ammo_casing/pistol/small load_method = MAGAZINE @@ -44,7 +44,7 @@ w_class = ITEM_SIZE_HUGE force = 10 caliber = CALIBER_RIFLE - origin_tech = "{'combat':7,'materials':3}" + origin_tech = @'{"combat":7,"materials":3}' ammo_type = /obj/item/ammo_casing/rifle slot_flags = SLOT_BACK load_method = MAGAZINE @@ -70,19 +70,17 @@ list(mode_name="full auto", burst=1, fire_delay=0, burst_delay=1, one_hand_penalty=7, burst_accuracy = list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), autofire_enabled=1) ) -/obj/item/gun/projectile/automatic/assault_rifle/update_base_icon() - if(ammo_magazine) - if(ammo_magazine.stored_ammo.len) - icon_state = "[get_world_inventory_state()]-loaded" - else - icon_state = "[get_world_inventory_state()]-empty" +/obj/item/gun/projectile/automatic/assault_rifle/update_base_icon_state() + . = ..() + if(length(ammo_magazine?.stored_ammo)) + icon_state = "[icon_state]-loaded" else - icon_state = get_world_inventory_state() + icon_state = "[icon_state]-empty" /obj/item/gun/projectile/automatic/assault_rifle/grenade name = "assault rifle" desc = "The Z8 Bulldog is an older model bullpup carbine. This one has an underslung grenade launcher. REALLY makes you feel like a space marine when you hold it." - origin_tech = "{'combat':8,'materials':3}" + origin_tech = @'{"combat":8,"materials":3}' firemodes = list( list(mode_name="semi auto", burst=1, fire_delay=null, use_launcher=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), @@ -137,7 +135,7 @@ w_class = ITEM_SIZE_HUGE force = 10 caliber = CALIBER_RIFLE - origin_tech = "{'combat':9,'materials':3}" + origin_tech = @'{"combat":9,"materials":3}' ammo_type = /obj/item/ammo_casing/rifle load_method = MAGAZINE magazine_type = /obj/item/ammo_magazine/rifle/drum diff --git a/code/modules/projectiles/guns/projectile/bolt_action.dm b/code/modules/projectiles/guns/projectile/bolt_action.dm index 0647f000429..9a963fc75fe 100644 --- a/code/modules/projectiles/guns/projectile/bolt_action.dm +++ b/code/modules/projectiles/guns/projectile/bolt_action.dm @@ -6,7 +6,7 @@ w_class = ITEM_SIZE_HUGE force = 5 slot_flags = SLOT_BACK - origin_tech = "{'combat':4,'materials':2}" + origin_tech = @'{"combat":4,"materials":2}' caliber = CALIBER_RIFLE handle_casings = HOLD_CASINGS load_method = SINGLE_CASING @@ -70,15 +70,15 @@ /obj/item/gun/projectile/bolt_action/unload_ammo(mob/user, var/allow_dump=1) if(!bolt_open) - return - ..() + return FALSE + return ..() /obj/item/gun/projectile/bolt_action/sniper name = "anti-materiel rifle" desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to be used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease." icon = 'icons/obj/guns/heavysniper.dmi' force = 10 - origin_tech = "{'combat':7,'materials':2,'esoteric':8}" + origin_tech = @'{"combat":7,"materials":2,"esoteric":8}' caliber = CALIBER_ANTI_MATERIEL screen_shake = 2 //extra kickback one_hand_penalty = 6 diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index e273bfd34ee..545b1fd17f6 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -8,7 +8,7 @@ fire_sound = 'sound/weapons/empty.ogg' fire_sound_text = "a metallic click" screen_shake = 0 - silenced = 1 + silencer = TRUE load_method = MAGAZINE magazine_type = /obj/item/ammo_magazine/chemdart allowed_magazines = /obj/item/ammo_magazine/chemdart @@ -31,7 +31,7 @@ return for(var/chem in starting_chems) var/obj/B = new container_type(src) - B.reagents.add_reagent(chem, 60) + B.add_to_reagents(chem, 60) beakers += B /obj/item/gun/projectile/dartgun/on_update_icon() @@ -41,16 +41,16 @@ else icon_state = get_world_inventory_state() -/obj/item/gun/projectile/dartgun/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/gun/projectile/dartgun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && (slot in user_mob?.get_held_item_slots()) && ammo_magazine) overlay.icon_state += "-[clamp(length(ammo_magazine.stored_ammo.len), 0, 5)]" . = ..() /obj/item/gun/projectile/dartgun/consume_next_projectile() - . = ..() - var/obj/item/projectile/bullet/chemdart/dart = . + var/obj/item/projectile/bullet/chemdart/dart = ..() if(istype(dart)) fill_dart(dart) + return dart /obj/item/gun/projectile/dartgun/examine(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/projectile/lmg.dm b/code/modules/projectiles/guns/projectile/lmg.dm new file mode 100644 index 00000000000..b930df0d2c0 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/lmg.dm @@ -0,0 +1,100 @@ +/obj/item/gun/projectile/automatic/lmg + name = "light machine gun" + desc = "An unbranded machine gun, based off a design made long ago." + icon = 'icons/obj/guns/lmg.dmi' + w_class = ITEM_SIZE_HUGE + bulk = GUN_BULK_RIFLE + 5 + force = 10 + slot_flags = 0 + max_shells = 50 + caliber = CALIBER_RIFLE + origin_tech = "{'combat':6,'materials':2, 'esoteric':2}" + slot_flags = 0 //need sprites for SLOT_BACK + ammo_type = /obj/item/ammo_casing/rifle + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/box/machinegun + allowed_magazines = list(/obj/item/ammo_magazine/box/machinegun, /obj/item/ammo_magazine/rifle) + one_hand_penalty = 10 + mag_insert_sound = 'sound/weapons/guns/interaction/lmg_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/lmg_magout.ogg' + //can_special_reload = FALSE + + //LMG, better sustained fire accuracy than assault rifles (comparable to SMG), higer move delay and one-handing penalty + //No single-shot or 3-round-burst modes since using this weapon should come at a cost to flexibility. + firemodes = list( + list(mode_name="short bursts", can_autofire=0, burst=5, fire_delay=5, move_delay=12, one_hand_penalty=8, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)), + list(mode_name="long bursts", can_autofire=0, burst=8, fire_delay=5, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2)), + list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1, one_hand_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2)), + ) + + var/cover_open = FALSE + +/obj/item/gun/projectile/automatic/lmg/mag + magazine_type = /obj/item/ammo_magazine/rifle + +/obj/item/gun/projectile/automatic/lmg/empty + starts_loaded = FALSE + +/obj/item/gun/projectile/automatic/lmg/mounted + one_hand_penalty = 18 + bulk = GUN_BULK_RIFLE + 10 + max_shells = 200 + has_safety = FALSE + +/obj/item/gun/projectile/automatic/lmg/special_check(mob/living/user) + if(cover_open) + to_chat(user, SPAN_WARNING("[src]'s cover is open! Close it before firing!")) + return FALSE + return ..() + +/obj/item/gun/projectile/automatic/lmg/proc/toggle_cover(mob/living/user) + cover_open = !cover_open + to_chat(user, SPAN_NOTICE("You [cover_open ? "open" : "close"] [src]'s cover.")) + update_icon() + user.update_inhand_overlays() + +/obj/item/gun/projectile/automatic/lmg/attack_self(mob/living/user) + if(cover_open) + toggle_cover(user) + return TRUE + else + return ..() + +/obj/item/gun/projectile/automatic/lmg/attack_hand(mob/living/user) + if(!cover_open && user.get_inactive_held_items() == src) + toggle_cover(user) + return TRUE + else + return ..() + +/obj/item/gun/projectile/automatic/lmg/on_update_icon() + ..() + var/base_state = "[get_world_inventory_state()]-[cover_open ? "open" : "closed"]" + + if(istype(ammo_magazine, /obj/item/ammo_magazine/box/machinegun)) + //Only the ammo belt magazine has a variable icon depending on ammo count + icon_state = "[base_state]-[round(length(ammo_magazine.stored_ammo) / (ammo_magazine.max_ammo * 0.20), 20)]" + else if(ammo_magazine) + icon_state = "[base_state]-mag-under" + else + icon_state = "[base_state]-empty" + +/obj/item/gun/projectile/automatic/lmg/get_mob_overlay_suffix() + . = "[cover_open ? "open" : "closed"]" + if(ammo_magazine && !istype(ammo_magazine, /obj/item/ammo_magazine/box/machinegun)) + . = "[.]-mag" + else if(!ammo_magazine) + return "[.]-empty" + //In case we got the regular box loaded, no suffix needed + +/obj/item/gun/projectile/automatic/lmg/load_ammo(obj/item/A, mob/living/user) + if(!cover_open) + to_chat(user, SPAN_WARNING("You need to open the cover to load that into [src].")) + return FALSE + return ..() + +/obj/item/gun/projectile/automatic/lmg/unload_ammo(mob/living/user, allow_dump = TRUE) + if(!cover_open) + to_chat(user, SPAN_WARNING("You need to open the cover to unload [src].")) + return FALSE + return ..() \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 9917cd8bcca..638376989ee 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -15,12 +15,12 @@ /obj/item/gun/projectile/pistol/emp magazine_type = /obj/item/ammo_magazine/pistol/emp -/obj/item/gun/projectile/pistol/update_base_icon() - var/base_state = get_world_inventory_state() - if(!length(ammo_magazine?.stored_ammo) && check_state_in_icon("[base_state]-e", icon)) - icon_state = "[base_state]-e" - else - icon_state = base_state +/obj/item/gun/projectile/pistol/update_base_icon_state() + . = ..() + if(!length(ammo_magazine?.stored_ammo)) + var/empty_state = "[icon_state]-e" + if(check_state_in_icon(empty_state, icon)) + icon_state = empty_state /obj/item/gun/projectile/pistol/holdout name = "holdout pistol" @@ -30,49 +30,10 @@ ammo_indicator = FALSE w_class = ITEM_SIZE_SMALL caliber = CALIBER_PISTOL_SMALL - silenced = 0 fire_delay = 4 - origin_tech = "{'combat':2,'materials':2,'esoteric':8}" + origin_tech = @'{"combat":2,"materials":2,"esoteric":8}' magazine_type = /obj/item/ammo_magazine/pistol/small allowed_magazines = /obj/item/ammo_magazine/pistol/small -/obj/item/gun/projectile/pistol/holdout/attack_hand(mob/user) - if(!silenced || !user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_COMPLEX_TOOLS, TRUE)) - return ..() - to_chat(user, SPAN_NOTICE("You unscrew \the [silenced] from \the [src].")) - user.put_in_hands(silenced) - silenced = initial(silenced) - w_class = initial(w_class) - update_icon() +/obj/item/gun/projectile/pistol/holdout/can_have_silencer() return TRUE - -/obj/item/gun/projectile/pistol/holdout/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/silencer)) - if(src in user.get_held_items()) //if we're not in his hands - to_chat(user, SPAN_WARNING("You'll need [src] in your hands to do that.")) - return TRUE - if(user.try_unequip(I, src)) - to_chat(user, SPAN_NOTICE("You screw [I] onto [src].")) - silenced = I //dodgy? - w_class = ITEM_SIZE_NORMAL - update_icon() - return TRUE - . = ..() - -/obj/item/gun/projectile/pistol/holdout/update_base_icon() - ..() - if(silenced) - overlays += mutable_appearance(icon, "[get_world_inventory_state()]-silencer") - -/obj/item/gun/projectile/pistol/holdout/get_on_belt_overlay() - if(silenced && check_state_in_icon("on_belt_silenced", icon)) - return overlay_image(icon, "on_belt_silenced", color) - return ..() - -/obj/item/silencer - name = "silencer" - desc = "A silencer." - icon = 'icons/obj/guns/holdout_pistol_silencer.dmi' - icon_state = ICON_STATE_WORLD - w_class = ITEM_SIZE_SMALL - material = /decl/material/solid/metal/steel diff --git a/code/modules/projectiles/guns/projectile/random_pistol.dm b/code/modules/projectiles/guns/projectile/random_pistol.dm index d0146f54618..ba767072baf 100644 --- a/code/modules/projectiles/guns/projectile/random_pistol.dm +++ b/code/modules/projectiles/guns/projectile/random_pistol.dm @@ -20,10 +20,10 @@ handle_icon = pick(gun_look.handle_icons) . = ..() -/obj/item/gun/projectile/pistol/random/update_base_icon() - ..() - overlays += image(gun_look.icon, icon_state) - overlays += image(handle_icon, icon_state) +/obj/item/gun/projectile/pistol/random/on_update_icon() + . = ..() + add_overlay(image(gun_look.icon, icon_state)) + add_overlay(image(handle_icon, icon_state)) /obj/item/gun/projectile/pistol/random/get_ammo_indicator() return gun_look.adjust_ammo_indicator(..(), get_world_inventory_state()) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 4b7ad7b5e72..0358e6eb6b3 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -5,7 +5,7 @@ icon_state = ICON_STATE_WORLD safety_icon = "safety" caliber = CALIBER_PISTOL_MAGNUM - origin_tech = "{'combat':2,'materials':2}" + origin_tech = @'{"combat":2,"materials":2}' handle_casings = CYCLE_CASINGS max_shells = 6 fire_delay = 12 //Revolvers are naturally slower-firing @@ -48,7 +48,7 @@ name = "cap gun" desc = "Looks almost like the real thing! Ages 8 and up." caliber = CALIBER_CAPS - origin_tech = "{'combat':1,'materials':1}" + origin_tech = @'{"combat":1,"materials":1}' ammo_type = /obj/item/ammo_casing/cap var/cap = TRUE diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 5bf38759b8d..10e369dfa0f 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -9,7 +9,7 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BACK caliber = CALIBER_SHOTGUN - origin_tech = "{'combat':4,'materials':2}" + origin_tech = @'{"combat":4,"materials":2}' load_method = SINGLE_CASING ammo_type = /obj/item/ammo_casing/shotgun/beanbag handle_casings = HOLD_CASINGS @@ -18,7 +18,7 @@ var/recentpump = 0 // to prevent spammage load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' -/obj/item/gun/projectile/shotgun/update_base_icon() +/obj/item/gun/projectile/shotgun/update_base_icon_state() if(length(loaded)) icon_state = get_world_inventory_state() else @@ -64,7 +64,7 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BACK caliber = CALIBER_SHOTGUN - origin_tech = "{'combat':3,'materials':1}" + origin_tech = @'{"combat":3,"materials":1}' ammo_type = /obj/item/ammo_casing/shotgun/beanbag one_hand_penalty = 2 @@ -75,7 +75,7 @@ ) /obj/item/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump) - ..(user, allow_dump=1) + return ..(user, allow_dump=1) //this is largely hacky and bad :( -Pete /obj/item/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A, mob/user) @@ -111,4 +111,81 @@ bulk = 2 /obj/item/gun/projectile/shotgun/doublebarrel/sawn/empty - starts_loaded = FALSE \ No newline at end of file + starts_loaded = FALSE + +/obj/item/gun/projectile/shotgun/magshot + name = "auto shotgun" + desc = "A remnant of a bygone era, the NZ CSG-242 was formerly standard issue for Confederate Naval Forces for ship defense during hostile boarding actions. With a change in doctrine after the losses at Gaia, and with more focus on a multi-role weapons platform, the weapon is slowly being phased out of service." + icon = 'icons/obj/guns/shotgun/magshot.dmi' + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/shotgunmag + allowed_magazines = /obj/item/ammo_magazine/shotgunmag + w_class = ITEM_SIZE_HUGE + force = 10 + obj_flags = OBJ_FLAG_CONDUCTIBLE + slot_flags = SLOT_BACK + caliber = CALIBER_SHOTGUN + origin_tech = "{'combat':3,'materials':1}" + auto_eject = TRUE + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + one_hand_penalty = 8 + bulk = GUN_BULK_RIFLE + burst_delay = 2 + accuracy = -1 + jam_chance = 0.5 + safety_icon = "safety" + ammo_indicator = TRUE + + firemodes = list( + list(mode_name="semi-auto", burst=1, fire_delay=2, move_delay=3, one_hand_penalty=7, burst_accuracy=null, dispersion=1.5), + list(mode_name="3 shell burst", burst=3, fire_delay=1.5, move_delay=6, one_hand_penalty=9, burst_accuracy=list(-1,-1, -2), dispersion=list(2, 2, 4)), + list(mode_name="full auto", can_autofire=TRUE, burst=1, fire_delay=1, move_delay=6, one_hand_penalty=15, burst_accuracy = list(-1,-2,-2,-3,-3,-3,-4,-4), dispersion = list(2, 4, 4, 6, 6, 8)) + ) + +/obj/item/gun/projectile/shotgun/magshot/empty + starts_loaded = FALSE + +/obj/item/gun/projectile/shotgun/magshot/get_ammo_indicator() + var/base_state = get_world_inventory_state() + if(ammo_magazine) + var/ammo_count = LAZYLEN(ammo_magazine.stored_ammo) + if(ammo_count == ammo_magazine.max_ammo) + return mutable_appearance(icon, "[base_state]100") + else if(ammo_count >= (0.75 * ammo_magazine.max_ammo)) + return mutable_appearance(icon, "[base_state]75") + else if(ammo_count >= (0.5 * ammo_magazine.max_ammo)) + return mutable_appearance(icon, "[base_state]50") + + //If mag is empty or below + return mutable_appearance(icon, "[base_state]25") + +/obj/item/gun/projectile/shotgun/magshot/on_update_icon() + ..() + if(ammo_magazine) + icon_state = get_world_inventory_state() + else + icon_state = "[get_world_inventory_state()]-empty" + +/obj/item/gun/projectile/shotgun/magshot/get_mob_overlay_suffix() + if(!ammo_magazine) + return "empty" + +/obj/item/gun/projectile/shotgun/pump/combat + name = "combat shotgun" + desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders." + icon = 'icons/obj/guns/shotgun/combat.dmi' + origin_tech = "{'combat':5,'materials':2}" + max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8. + ammo_type = /obj/item/ammo_casing/shotgun + one_hand_penalty = 8 + +/obj/item/gun/projectile/shotgun/pump/combat/on_update_icon() + ..() + if(length(loaded) > 3) + for(var/i = 0 to length(loaded) - 4) + var/image/I = image(icon, "shell") + I.pixel_x = i * 2 + add_overlay(I) + +/obj/item/gun/projectile/shotgun/pump/combat/empty + starts_loaded = FALSE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8094266a812..176f70ae39c 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -177,8 +177,8 @@ //randomize clickpoint a bit based on dispersion if(dispersion) var/radius = round((dispersion*0.443)*world.icon_size*0.8) //0.443 = sqrt(pi)/4 = 2a, where a is the side length of a square that shares the same area as a circle with diameter = dispersion - p_x = clamp(0, p_x + gaussian(0, radius) * 0.25, world.icon_size) - p_y = clamp(0, p_y + gaussian(0, radius) * 0.25, world.icon_size) + p_x = clamp(p_x + gaussian(0, radius) * 0.25, 0, world.icon_size) + p_y = clamp(p_y + gaussian(0, radius) * 0.25, 0, world.icon_size) //Used to change the direction of the projectile in flight. /obj/item/projectile/proc/redirect(var/new_x, var/new_y, var/atom/starting_loc, var/atom/movable/new_firer=null, var/is_ricochet = FALSE) @@ -341,7 +341,7 @@ var/obj/item/shrapnel = get_shrapnel() if(shrapnel) shrapnel.forceMove(organ) - organ.embed(shrapnel) + organ.embed_in_organ(shrapnel) else if(prob(2 * damage_prob)) organ.sever_artery() @@ -464,7 +464,15 @@ M.Turn(Angle) transform = M trajectory.increment(trajectory_multiplier) + var/turf/T = trajectory.return_turf() + if(!T) + if(!QDELETED(src)) + if(loc) + on_impact(loc) + qdel(src) + return + if(T.z != loc.z) before_move() before_z_change(loc, T) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 30f3b48d403..c944a8a02a6 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -25,8 +25,8 @@ var/mob/living/silicon/robot/R = new(get_turf(M)) R.set_gender(M.get_gender()) R.job = ASSIGNMENT_ROBOT - R.mmi = new /obj/item/mmi(R) - R.mmi.transfer_identity(M) + R.central_processor = new /obj/item/organ/internal/brain_interface(R) + transfer_key_from_mob_to_mob(M, R) return R if(get_species_by_key(choice)) @@ -43,22 +43,29 @@ return H /obj/item/projectile/change/proc/wabbajack(var/mob/M) - if(isliving(M) && M.stat != DEAD) - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(M)) - return - M.handle_pre_transformation() - var/choice = pick(get_random_transformation_options(M)) - var/mob/living/new_mob = apply_transformation(M, choice) - if(new_mob) + + if(!isliving(M) || M.stat == DEAD) + return + + if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(M)) + return + + M.handle_pre_transformation() + var/choice = pick(get_random_transformation_options(M)) + var/mob/living/new_mob = apply_transformation(M, choice) + if(new_mob) + new_mob.a_intent = "hurt" + if(M.mind) for (var/spell/S in M.mind.learned_spells) new_mob.add_spell(new S.type) new_mob.a_intent = "hurt" - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key + transfer_key_from_mob_to_mob(M, new_mob) to_chat(new_mob, "Your form morphs into that of \a [choice].") + else + new_mob = M + if(new_mob) + to_chat(new_mob, SPAN_WARNING("Your form morphs into that of \a [choice].")) + + if(new_mob != M && !QDELETED(M)) + qdel(M) - qdel(M) - else - to_chat(M, "Your form morphs into that of \a [choice].") diff --git a/code/modules/projectiles/projectile/force.dm b/code/modules/projectiles/projectile/force.dm index 1e3b1f372ce..8ac6beeaf3b 100644 --- a/code/modules/projectiles/projectile/force.dm +++ b/code/modules/projectiles/projectile/force.dm @@ -10,7 +10,7 @@ name = "force bolt" /obj/item/projectile/forcebolt/on_hit(var/atom/movable/target, var/blocked = 0) - if(istype(target)) + if(istype(target) && isturf(target.loc)) var/throwdir = get_dir(firer,target) target.throw_at(get_edge_target_turf(target, throwdir),10,10) return 1 diff --git a/code/modules/projectiles/projectile/pellets.dm b/code/modules/projectiles/projectile/pellets.dm index d8063127e36..d3298e723bd 100644 --- a/code/modules/projectiles/projectile/pellets.dm +++ b/code/modules/projectiles/projectile/pellets.dm @@ -66,4 +66,17 @@ damage = 30 pellets = 6 range_step = 1 - spread_step = 10 \ No newline at end of file + spread_step = 10 + +/obj/item/projectile/bullet/pellet/shotgun/flechette + name = "flechette" + icon_state = "flechette" + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' + damage = 30 + armor_penetration = 25 + pellets = 3 + range_step = 3 + base_spread = 99 + spread_step = 2 + penetration_modifier = 0.5 + hitchance_mod = 5 diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 037a41b6fc3..b208b0a7335 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -163,7 +163,7 @@ . = ..() var/mob/living/L = target if(L.reagents) - L.reagents.add_reagent(/decl/material/liquid/venom, 5) + L.add_to_reagents(/decl/material/liquid/venom, 5) /obj/item/missile icon = 'icons/obj/items/grenades/missile.dmi' diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm index b03befe664a..1dd13a1aa6d 100644 --- a/code/modules/projectiles/targeting/targeting_mob.dm +++ b/code/modules/projectiles/targeting/targeting_mob.dm @@ -27,11 +27,3 @@ ..() if(lying) stop_aiming(no_message=1) - -/mob/living/Destroy() - if(aiming) - qdel(aiming) - aiming = null - QDEL_NULL_LIST(aimed_at_by) - return ..() - diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index c9cc33f2a3a..8fd4de31574 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -176,9 +176,9 @@ update_icon() lock_time = world.time + 35 - events_repository.register(/decl/observ/moved, owner, src, /obj/aiming_overlay/proc/update_aiming) - events_repository.register(/decl/observ/moved, aiming_at, src, /obj/aiming_overlay/proc/target_moved) - events_repository.register(/decl/observ/destroyed, aiming_at, src, /obj/aiming_overlay/proc/cancel_aiming) + events_repository.register(/decl/observ/moved, owner, src, TYPE_PROC_REF(/obj/aiming_overlay, update_aiming)) + events_repository.register(/decl/observ/moved, aiming_at, src, TYPE_PROC_REF(/obj/aiming_overlay, target_moved)) + events_repository.register(/decl/observ/destroyed, aiming_at, src, TYPE_PROC_REF(/obj/aiming_overlay, cancel_aiming)) /obj/aiming_overlay/on_update_icon() if(locked) diff --git a/code/modules/pronouns/_pronouns.dm b/code/modules/pronouns/_pronouns.dm index 7ebe82516aa..b9ecd77fbbb 100644 --- a/code/modules/pronouns/_pronouns.dm +++ b/code/modules/pronouns/_pronouns.dm @@ -46,6 +46,7 @@ // Atom helpers. /atom/proc/get_pronouns(var/ignore_coverings) + RETURN_TYPE(/decl/pronouns) . = get_pronouns_by_gender(gender) var/global/list/byond_genders = list(MALE, FEMALE, NEUTER, PLURAL) @@ -77,15 +78,12 @@ var/global/list/byond_genders = list(MALE, FEMALE, NEUTER, PLURAL) pronouns = null /mob/living/get_pronouns(var/ignore_coverings) - if(!pronouns) - pronouns = get_pronouns_by_gender(get_gender()) - return pronouns || GET_DECL(/decl/pronouns) - -// Human concealment helper. -/mob/living/carbon/human/get_pronouns(var/ignore_coverings) + RETURN_TYPE(/decl/pronouns) if(!ignore_coverings) var/obj/item/suit = get_equipped_item(slot_wear_suit_str) var/obj/item/head = get_equipped_item(slot_head_str) if(suit && (suit.flags_inv & HIDEJUMPSUIT) && ((head && head.flags_inv & HIDEMASK) || get_equipped_item(slot_wear_mask_str))) return GET_DECL(/decl/pronouns) - return ..() + if(!pronouns) + pronouns = get_pronouns_by_gender(get_gender()) + return pronouns || GET_DECL(/decl/pronouns) diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm index df714006ba9..0feee45d773 100644 --- a/code/modules/radiation/radiation.dm +++ b/code/modules/radiation/radiation.dm @@ -23,12 +23,12 @@ /datum/radiation_source/proc/update_rad_power(var/new_power = null) if(new_power == null || new_power == rad_power) return // No change - else if(new_power <= config.radiation_lower_limit) + else if(new_power <= get_config_value(/decl/config/num/radiation_lower_limit)) qdel(src) // Decayed to nothing else rad_power = new_power if(!flat) - range = min(round(sqrt(rad_power / config.radiation_lower_limit)), 31) // R = rad_power / dist**2 - Solve for dist + range = min(round(sqrt(rad_power / get_config_value(/decl/config/num/radiation_lower_limit))), 31) // R = rad_power / dist**2 - Solve for dist /turf var/cached_rad_resistance = 0 @@ -39,13 +39,13 @@ if(!(O.rad_resistance_modifier <= 0) && O.density) var/decl/material/M = O.get_material() if(!M) continue - cached_rad_resistance += (M.weight * O.rad_resistance_modifier) / config.radiation_material_resistance_divisor + cached_rad_resistance += (M.weight * O.rad_resistance_modifier) / get_config_value(/decl/config/num/radiation_material_resistance_divisor) // Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana SSradiation.resistance_cache[src] = (length(contents) + 1) /turf/simulated/wall/calc_rad_resistance() SSradiation.resistance_cache[src] = (length(contents) + 1) - cached_rad_resistance = (density ? material.weight / config.radiation_material_resistance_divisor : 0) + cached_rad_resistance = (density ? material.weight / get_config_value(/decl/config/num/radiation_material_resistance_divisor) : 0) /obj var/rad_resistance_modifier = 1 // Allow overriding rad resistance diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm index e89f0cd035d..afcb3288e31 100644 --- a/code/modules/random_map/_random_map_setup.dm +++ b/code/modules/random_map/_random_map_setup.dm @@ -3,30 +3,40 @@ */ #define MIN_SURFACE_COUNT_PER_CHUNK 0.1 -#define MIN_RARE_COUNT_PER_CHUNK 0.05 -#define MIN_DEEP_COUNT_PER_CHUNK 0.025 -#define RESOURCE_HIGH_MAX 4 -#define RESOURCE_HIGH_MIN 2 -#define RESOURCE_MID_MAX 3 -#define RESOURCE_MID_MIN 1 -#define RESOURCE_LOW_MAX 1 -#define RESOURCE_LOW_MIN 0 +#define MIN_RARE_COUNT_PER_CHUNK 0.05 +#define MIN_DEEP_COUNT_PER_CHUNK 0.025 +#define RESOURCE_HIGH_MAX 4 +#define RESOURCE_HIGH_MIN 2 +#define RESOURCE_MID_MAX 3 +#define RESOURCE_MID_MIN 1 +#define RESOURCE_LOW_MAX 1 +#define RESOURCE_LOW_MIN 0 +#define RESOURCE_COMMON_MAX 5 +#define RESOURCE_COMMON_MIN 3 -#define FLOOR_CHAR 0 -#define WALL_CHAR 1 -#define DOOR_CHAR 2 -#define EMPTY_CHAR 3 -#define ROOM_TEMP_CHAR 4 -#define MONSTER_CHAR 5 -#define ARTIFACT_TURF_CHAR 6 -#define ARTIFACT_CHAR 7 -#define CORRIDOR_TURF_CHAR 8 +#define FLOOR_CHAR 0 +#define WALL_CHAR 1 +#define DOOR_CHAR 2 +#define EMPTY_CHAR 3 +#define ROOM_TEMP_CHAR 4 +#define MONSTER_CHAR 5 +#define ARTIFACT_TURF_CHAR 6 +#define ARTIFACT_CHAR 7 +#define CORRIDOR_TURF_CHAR 8 #define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) #define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len) #define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \ tmp_cell = TRANSLATE_COORD(X,Y);\ + if (tmp_cell < 1 || tmp_cell > LEN) {\ + tmp_cell = null;\ + } + +#define TRANSLATE_COORD_OTHER_MAP(X,Y,MAP) ((((Y) - 1) * MAP.limit_x) + (X)) +#define TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(X,Y,MAP) TRANSLATE_AND_VERIFY_COORD_OTHER_MAP_MLEN(X, Y, MAP, MAP.map.len) +#define TRANSLATE_AND_VERIFY_COORD_OTHER_MAP_MLEN(X,Y,MAP,LEN) \ + tmp_cell = TRANSLATE_COORD_OTHER_MAP(X,Y,MAP);\ if (tmp_cell < 1 || tmp_cell > LEN) {\ tmp_cell = null;\ } \ No newline at end of file diff --git a/code/modules/random_map/building/building.dm b/code/modules/random_map/building/building.dm index 98a157c4599..5a24fa36708 100644 --- a/code/modules/random_map/building/building.dm +++ b/code/modules/random_map/building/building.dm @@ -6,7 +6,7 @@ /datum/random_map/building/generate_map() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(!current_cell) continue if(x == 1 || y == 1 || x == limit_x || y == limit_y) @@ -18,7 +18,7 @@ var/list/possible_doors for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(!current_cell) continue if(!(x == 1 || y == 1 || x == limit_x || y == limit_y)) @@ -39,7 +39,10 @@ if(place_door) - possible_doors |= target_map.get_map_cell(tx+x,ty+y) + var/tmp_cell + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(tx+x, ty+y, target_map) + if(tmp_cell) + possible_doors |= tmp_cell if(possible_doors.len) // Place at least one door. diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index f2778b56c02..ab302628e99 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -97,7 +97,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /obj/item/chems/condiment/flour, /obj/item/chems/drinks/milk, /obj/item/chems/drinks/milk, - /obj/item/storage/fancy/egg_box, + /obj/item/storage/box/fancy/egg_box, /obj/item/chems/food/tofu, /obj/item/chems/food/tofu, /obj/item/chems/food/meat, @@ -136,7 +136,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /obj/item/stack/material/plank/mapped/wood, /obj/item/stack/material/panel/mapped/plastic, /obj/item/stack/material/pane/mapped/rglass, - /obj/item/stack/material/reinforced/mapped/plasteel) + /obj/item/stack/material/sheet/reinforced/mapped/plasteel) /datum/supply_drop_loot/medical name = "Medical" @@ -170,7 +170,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /obj/item/stack/material/plank/mapped/wood, /obj/item/stack/material/panel/mapped/plastic, /obj/item/stack/material/pane/mapped/rglass, - /obj/item/stack/material/reinforced/mapped/plasteel) + /obj/item/stack/material/sheet/reinforced/mapped/plasteel) /datum/supply_drop_loot/hydroponics name = "Hydroponics" diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index c6ebc904677..ca2a0af390e 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -47,7 +47,7 @@ // Draw walls/floors/doors. for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(!current_cell) continue @@ -73,7 +73,7 @@ map[current_cell] = SD_FLOOR_TILE // Draw the drop contents. - var/current_cell = get_map_cell(x_midpoint,y_midpoint) + var/current_cell = TRANSLATE_COORD(x_midpoint,y_midpoint) if(current_cell) map[current_cell] = SD_SUPPLY_TILE return 1 diff --git a/code/modules/random_map/dungeon/room.dm b/code/modules/random_map/dungeon/room.dm index 8c60a977c27..c95dff95a9f 100644 --- a/code/modules/random_map/dungeon/room.dm +++ b/code/modules/random_map/dungeon/room.dm @@ -41,35 +41,45 @@ If its complexity is lower than our theme's then for(var/j = 0, j < height, j++) var/truex = xorigin + x + i - 1 var/truey = yorigin + y + j - 1 - var/cell = map.get_map_cell(x+i,y+j) + var/tmp_cell + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i, y+j, map) + var/cell = tmp_cell room_theme.apply_room_theme(truex,truey,map.map[cell]) if(generate_doors && room_theme.door_type && !(map.map[cell] == WALL_CHAR || map.map[cell] == ARTIFACT_TURF_CHAR) && (i == 0 || i == width-1 || j == 0 || j == height-1)) var/isGood = 1 if(j == 0 || j == height-1) //check horizontally - var/curCell = map.map[map.get_map_cell(x+i-1,y+j)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i-1,y+j, map) + var/curCell = map.map[tmp_cell] if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i+1,y+j)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i+1,y+j, map) + curCell = map.map[tmp_cell] if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j-1)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j-1, map) + curCell = map.map[tmp_cell] if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j+1)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j+1, map) + curCell = map.map[tmp_cell] if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) isGood = 0 - if(i == 0 || i == width-1) //verticle + if(i == 0 || i == width-1) //vertical isGood = 1 //if it failed above, it might not fail here. - var/curCell = map.map[map.get_map_cell(x+i,y+j-1)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j-1, map) + var/curCell = map.map[tmp_cell] if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j+1)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i,y+j+1, map) + curCell = map.map[tmp_cell] if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i-1,y+j)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i-1,y+j, map) + curCell = map.map[tmp_cell] if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) isGood = 0 - curCell = map.map[map.get_map_cell(x+i+1,y+j)] + TRANSLATE_AND_VERIFY_COORD_OTHER_MAP(x+i+1,y+j, map) + curCell = map.map[tmp_cell] if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) isGood = 0 if(isGood) diff --git a/code/modules/random_map/dungeon/rooms/tomb.dm b/code/modules/random_map/dungeon/rooms/tomb.dm index aabb29d1468..d91a82b13e5 100644 --- a/code/modules/random_map/dungeon/rooms/tomb.dm +++ b/code/modules/random_map/dungeon/rooms/tomb.dm @@ -28,7 +28,7 @@ H.make_husked() else M = new type() - M.death(0) + M.death() M.forceMove(C1) item_spawns += M check = locate(truex + (direction ? width - 2 : 0), truey + (direction ? 0 : height - 2), zorigin) @@ -44,6 +44,6 @@ H.make_husked() else M = new type() - M.death(0) + M.death() M.forceMove(C2) item_spawns += M \ No newline at end of file diff --git a/code/modules/random_map/dungeon/winding_dungeon.dm b/code/modules/random_map/dungeon/winding_dungeon.dm index dc66d864e75..e301ec2c887 100644 --- a/code/modules/random_map/dungeon/winding_dungeon.dm +++ b/code/modules/random_map/dungeon/winding_dungeon.dm @@ -154,11 +154,11 @@ logging("Winding Dungeon Generation Start") //first generate the border for(var/xx = 1, xx <= limit_x, xx++) - map[get_map_cell(xx,1)] = BORDER_CHAR - map[get_map_cell(xx,limit_y)] = BORDER_CHAR + map[TRANSLATE_COORD(xx,1)] = BORDER_CHAR + map[TRANSLATE_COORD(xx,limit_y)] = BORDER_CHAR for(var/yy = 1, yy < limit_y, yy++) - map[get_map_cell(1,yy)] = BORDER_CHAR - map[get_map_cell(limit_x,yy)] = BORDER_CHAR + map[TRANSLATE_COORD(1,yy)] = BORDER_CHAR + map[TRANSLATE_COORD(limit_x,yy)] = BORDER_CHAR var/num_of_features = limit_x * limit_y * features_multiplier logging("Number of features: [num_of_features]") @@ -197,7 +197,7 @@ logging("open_positions empty. Using randomly chosen coords ([newx],[newy])") //We want to make sure we aren't RIGHT next to another corridor or something. - if(map[get_map_cell(newx,newy+1)] == ARTIFACT_CHAR || map[get_map_cell(newx-1,newy)] == ARTIFACT_CHAR || map[get_map_cell(newx,newy-1)] == ARTIFACT_CHAR || map[get_map_cell(newx+1,newy)] == ARTIFACT_CHAR) + if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == ARTIFACT_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == ARTIFACT_CHAR) logging("Coords ([newx],[newy]) are too close to an ARTIFACT_CHAR position.") continue @@ -207,9 +207,9 @@ height = rand(room_size_min,room_size_max) isRoom = rand(100) <= chance_of_room - if(map[get_map_cell(newx, newy)] == ARTIFACT_TURF_CHAR || map[get_map_cell(newx, newy)] == CORRIDOR_TURF_CHAR) + if(LAZYACCESS(map, TRANSLATE_COORD(newx, newy)) == ARTIFACT_TURF_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx, newy)) == CORRIDOR_TURF_CHAR) //we are basically checking to see where we're going. Up, right, down or left and finding the bottom left corner. - if(map[get_map_cell(newx,newy+1)] == FLOOR_CHAR || map[get_map_cell(newx,newy+1)] == CORRIDOR_TURF_CHAR) //0 - down + if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy+1)) == CORRIDOR_TURF_CHAR) //0 - down logging("This feature is DOWN") if(isRoom) //gotta do some math for this one, since the origin is centered. xmod = -width/2 @@ -219,7 +219,7 @@ ymod = -height //a lot of this will seem nonsense but I swear its not doorx = 0 doory = -1 - else if(map[get_map_cell(newx-1,newy)] == FLOOR_CHAR || map[get_map_cell(newx-1,newy)] == CORRIDOR_TURF_CHAR) //1 - right + else if(LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx-1,newy)) == CORRIDOR_TURF_CHAR) //1 - right logging("This feature is RIGHT") if(isRoom) ymod = -height/2 @@ -229,7 +229,7 @@ xmod = 1 doorx = 1 doory = 0 - else if(map[get_map_cell(newx,newy-1)] == FLOOR_CHAR || map[get_map_cell(newx,newy-1)] == CORRIDOR_TURF_CHAR) //2 - up + else if(LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx,newy-1)) == CORRIDOR_TURF_CHAR) //2 - up logging("This feature is UP") if(isRoom) xmod = -width/2 @@ -239,7 +239,7 @@ ymod = 1 doorx = 0 doory = 1 - else if(map[get_map_cell(newx+1,newy)] == FLOOR_CHAR || map[get_map_cell(newx+1,newy)] == CORRIDOR_TURF_CHAR) // 3 - left + else if(LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == FLOOR_CHAR || LAZYACCESS(map, TRANSLATE_COORD(newx+1,newy)) == CORRIDOR_TURF_CHAR) // 3 - left logging("This feature is LEFT") if(isRoom) ymod = -height/2 @@ -263,16 +263,17 @@ currentFeatures++ if(isRoom) logging("Room created at: [newx+xmod], [newy+ymod].") - map[get_map_cell(newx,newy)] = FLOOR_CHAR - map[get_map_cell(newx+doorx,newy+doory)] = ARTIFACT_CHAR + map[TRANSLATE_COORD(newx,newy)] = FLOOR_CHAR + map[TRANSLATE_COORD(newx+doorx,newy+doory)] = ARTIFACT_CHAR if(rand(0,100) >= chance_of_room_empty) var/room_result = create_room_features(round(newx+xmod),round(newy+ymod),width,height) logging("Attempted room feature creation: [room_result ? "Success" : "Failure"]") else logging("Creating corridor.") - var/door = get_map_cell(newx,newy) - if(map[door] == ARTIFACT_TURF_CHAR) - map[door] = ARTIFACT_CHAR + var/tmp_cell + TRANSLATE_AND_VERIFY_COORD(newx,newy) + if(map[tmp_cell] == ARTIFACT_TURF_CHAR) + map[tmp_cell] = ARTIFACT_CHAR logging("Map completed. Loops: [sanity], [currentFeatures] out of [num_of_features] created.") open_positions.Cut() @@ -287,17 +288,17 @@ if(xtemp < 0 || xtemp > limit_x) logging("We are beyond our x limits") return 0 - if(map[get_map_cell(xtemp,ytemp)] != WALL_CHAR) + if(map[TRANSLATE_COORD(xtemp,ytemp)] != WALL_CHAR) logging("[xtemp],[ytemp] is not equal to WALL_CHAR") return 0 else if(wall_char && (ytemp == truey || ytemp == truey + height - 1 || xtemp == truex || xtemp == truex + width - 1)) - map[get_map_cell(xtemp,ytemp)] = wall_char + map[TRANSLATE_COORD(xtemp,ytemp)] = wall_char if(!("[xtemp]:[ytemp]" in open_positions)) open_positions += "[xtemp]:[ytemp]" logging("Adding \"[xtemp]:[ytemp]\" to open_positions (length: [open_positions.len])") else - map[get_map_cell(xtemp,ytemp)] = char + map[TRANSLATE_COORD(xtemp,ytemp)] = char return 1 /datum/random_map/winding_dungeon/proc/create_room_features(var/rox,var/roy,var/width,var/height) diff --git a/code/modules/random_map/mazes/maze.dm b/code/modules/random_map/mazes/maze.dm index 557adbd6e8e..b9e5cc24b3e 100644 --- a/code/modules/random_map/mazes/maze.dm +++ b/code/modules/random_map/mazes/maze.dm @@ -31,19 +31,28 @@ // Preliminary marking-off... closedlist[next.name] = next - map[get_map_cell(next.x,next.y)] = FLOOR_CHAR + map[TRANSLATE_COORD(next.x,next.y)] = FLOOR_CHAR // Apply the values required and fill gap between this cell and origin point. + var/tmp_cell if(next.ox && next.oy) if(next.ox < next.x) - map[get_map_cell(next.x-1,next.y)] = FLOOR_CHAR + TRANSLATE_AND_VERIFY_COORD(next.x-1, next.y) + if(tmp_cell) + map[tmp_cell] = FLOOR_CHAR else if(next.ox == next.x) if(next.oy < next.y) - map[get_map_cell(next.x,next.y-1)] = FLOOR_CHAR + TRANSLATE_AND_VERIFY_COORD(next.x, next.y-1) + if(tmp_cell) + map[tmp_cell] = FLOOR_CHAR else - map[get_map_cell(next.x,next.y+1)] = FLOOR_CHAR + TRANSLATE_AND_VERIFY_COORD(next.x, next.y+1) + if(tmp_cell) + map[tmp_cell] = FLOOR_CHAR else - map[get_map_cell(next.x+1,next.y)] = FLOOR_CHAR + TRANSLATE_AND_VERIFY_COORD(next.x+1, next.y) + if(tmp_cell) + map[tmp_cell] = FLOOR_CHAR // Grab valid neighbors for use in the open list! add_to_openlist(next.x,next.y+2,next.x,next.y) @@ -60,6 +69,6 @@ if(tx < 1 || ty < 1 || tx > limit_x || ty > limit_y || !isnull(checked_coord_cache["[tx]-[ty]"])) return 0 checked_coord_cache["[tx]-[ty]"] = 1 - map[get_map_cell(tx,ty)] = DOOR_CHAR + map[TRANSLATE_COORD(tx,ty)] = DOOR_CHAR var/datum/maze_cell/new_cell = new(tx,ty,nx,ny) openlist |= new_cell diff --git a/code/modules/random_map/noise/desert.dm b/code/modules/random_map/noise/desert.dm index 31dc1320a44..23d93d399ff 100644 --- a/code/modules/random_map/noise/desert.dm +++ b/code/modules/random_map/noise/desert.dm @@ -14,9 +14,9 @@ if(isnull(val)) val = 0 switch(val) if(0 to 1) - return /turf/simulated/floor/beach/water + return /turf/exterior/sand/water else - return /turf/simulated/floor/beach/sand/desert + return /turf/exterior/sand /datum/random_map/noise/desert/get_additional_spawns(var/value, var/turf/T) var/val = min(9,max(0,round((value/cell_range)*10))) diff --git a/code/modules/random_map/noise/forage.dm b/code/modules/random_map/noise/forage.dm new file mode 100644 index 00000000000..02427d2499d --- /dev/null +++ b/code/modules/random_map/noise/forage.dm @@ -0,0 +1,130 @@ +// These are foul, but apparent we can't reliably access z-level strata during +// SSmapping gen. Using /atom/movable so they don't show up in the mapper. +/atom/movable/spawn_boulder + name = "material boulder spawner" + is_spawnable_type = FALSE + simulated = FALSE + var/spawn_type = /obj/structure/boulder + +/atom/movable/spawn_boulder/Initialize() + ..() + if(isturf(loc)) + if(islist(spawn_type)) + spawn_type = pickweight(spawn_type) + new spawn_type(loc, SSmaterials.get_strata_material_type(loc)) + return INITIALIZE_HINT_QDEL + +/atom/movable/spawn_boulder/rock + name = "material rock spawner" + spawn_type = list( + /obj/item/rock = 10, + /obj/item/rock/striker = 1 + ) + +/datum/random_map/noise/forage + target_turf_type = null + var/static/list/forage = list( + "rocks" = list( + /atom/movable/spawn_boulder, + /atom/movable/spawn_boulder/rock + ), + "caves" = list( + "plumphelmet", + "glowbell", + "caverncandle", + "weepingmoon", + "towercap" + ), + "shallows" = list( + "rice", + "mollusc", + "clam", + "sugarcane" + ), + "cave_shallows" = list( + "algae", + "mollusc", + "clam" + ), + "grass" = list( + "carrot", + "berries", + "potato", + "cotton", + "nettle", + "biteleaf", + "harebells", + "poppies", + "sunflowers", + "lavender", + "garlic", + "peppercorn", + "bamboo" + ), + ) + var/list/trees = list( + /obj/structure/flora/tree/hardwood/ebony + ) + var/list/cave_trees = list( + /obj/structure/flora/tree/softwood/towercap + ) + +/datum/random_map/noise/forage/New() + for(var/category in forage) + var/list/forage_seeds = forage[category] + for(var/forage_seed in forage_seeds) + if(ispath(forage_seed)) + continue + forage_seeds -= forage_seed + if(!SSplants.seeds[forage_seed]) + log_error("Invalid seed name: [forage_seed]") + else + forage_seeds += SSplants.seeds[forage_seed] + return ..() + +/datum/random_map/noise/forage/get_appropriate_path(value) + return + +/datum/random_map/noise/forage/get_additional_spawns(value, turf/T) + var/parse_value = noise2value(value) + var/place_prob + var/place_type + + if(T.is_outside()) + if(istype(T, /turf/exterior/rock)) + if(prob(15)) // Static as current map has limited amount of rock turfs + var/rock_type = pick(forage["rocks"]) + new rock_type(T) + return + else if(istype(T, /turf/exterior/wildgrass)) + if(prob(parse_value * 0.35)) + var/tree_type = pick(trees) + new tree_type(T) + return + place_prob = parse_value * 0.3 + place_type = pick(forage["grass"]) + else if(istype(T, /turf/exterior/mud/water)) + place_prob = parse_value * 0.3 + place_type = pick(forage["shallows"]) + else + if(istype(T, /turf/exterior/mud) && !istype(T, /turf/exterior/mud/water/deep)) + if(prob(parse_value * 0.35)) + var/tree_type = pick(cave_trees) + new tree_type(T) + return + place_prob = parse_value * 0.6 + place_type = pick(forage["caves"]) + else if(istype(T, /turf/exterior/dirt)) + place_prob = parse_value * 0.3 + place_type = pick(forage["caves"]) + else if(istype(T, /turf/exterior/mud/water)) + place_prob = parse_value * 0.3 + place_type = pick(forage["cave_shallows"]) + + if(place_type && prob(place_prob)) + new /obj/structure/flora/plant(T, null, null, place_type) + for(var/stepdir in global.alldirs) + if(prob(15)) + var/turf/neighbor = get_step(T, stepdir) + if(istype(neighbor, T.type) && !(locate(/obj/structure/flora/plant) in neighbor)) + new /obj/structure/flora/plant(neighbor, null, null, place_type) diff --git a/code/modules/random_map/noise/magma.dm b/code/modules/random_map/noise/magma.dm index 0e3ac3c7945..038e9f74ec7 100644 --- a/code/modules/random_map/noise/magma.dm +++ b/code/modules/random_map/noise/magma.dm @@ -9,25 +9,26 @@ /datum/random_map/noise/volcanism/cleanup() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(map[current_cell] < 178) continue var/count - var/tmp_cell = get_map_cell(x+1,y+1) + var/tmp_cell + TRANSLATE_AND_VERIFY_COORD(x+1, y+1) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y-1) + TRANSLATE_AND_VERIFY_COORD(x-1,y-1) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x+1,y-1) + TRANSLATE_AND_VERIFY_COORD(x+1,y-1) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y+1) + TRANSLATE_AND_VERIFY_COORD(x-1,y+1) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y) + TRANSLATE_AND_VERIFY_COORD(x-1,y) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x,y-1) + TRANSLATE_AND_VERIFY_COORD(x,y-1) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x+1,y) + TRANSLATE_AND_VERIFY_COORD(x+1,y) if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x,y+1) + TRANSLATE_AND_VERIFY_COORD(x,y+1) if(tmp_cell && map[tmp_cell] >= 178) count++ if(!count) map[current_cell] = 177 @@ -37,8 +38,8 @@ /datum/random_map/noise/volcanism/get_additional_spawns(var/value, var/turf/T) if(value>=178) - if(istype(T,/turf/simulated/floor/asteroid)) - T.ChangeTurf(/turf/simulated/floor/airless/lava) + if(istype(T,/turf/exterior/barren)) + T.ChangeTurf(/turf/exterior/lava) else if(istype(T,/turf/exterior/wall)) var/turf/exterior/wall/M = T - M.floor_type = /turf/simulated/floor/airless/lava \ No newline at end of file + M.floor_type = /turf/exterior/lava \ No newline at end of file diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm index f3a3403e79f..c8073c37f17 100644 --- a/code/modules/random_map/noise/noise.dm +++ b/code/modules/random_map/noise/noise.dm @@ -83,7 +83,7 @@ map[TRANSLATE_COORD(x+isize,y)] \ )/2) - map[get_map_cell(x,y+hsize)] = round(( \ + map[TRANSLATE_COORD(x,y+hsize)] = round(( \ map[TRANSLATE_COORD(x,y+isize)] + \ map[TRANSLATE_COORD(x,y)] \ )/2) @@ -155,31 +155,55 @@ map = next_map if(smooth_single_tiles) - var/lonely for(var/x in 1 to limit_x - 1) for(var/y in 1 to limit_y - 1) - var/mapcell = get_map_cell(x,y) - var/list/neighbors = get_neighbors(x, y, TRUE) - lonely = TRUE - for(var/cell in neighbors) - if(get_appropriate_path(map[cell]) == get_appropriate_path(map[mapcell])) - lonely = FALSE - break - if(lonely) - map[mapcell] = map[pick(neighbors)] - + var/mapcell = TRANSLATE_COORD(x,y) + if(has_neighbor_with_path(x, y, get_appropriate_path(map[mapcell]), TRUE)) + continue + map[mapcell] = map[pick(get_neighbors(x, y, TRUE))] + +#define CHECK_NEIGHBOR_FOR_PATH(X, Y) \ + TRANSLATE_AND_VERIFY_COORD(X,Y);\ + if(tmp_cell && (get_appropriate_path(map[tmp_cell]) == path)) {\ + return TRUE;\ + } + +/// Checks if the cell at x,y has a neighbor with the given path. +/// Faster than looping over get_neighbors for the same purpose because it doesn't use list ops. +/datum/random_map/noise/proc/has_neighbor_with_path(x, y, path, include_diagonals) + var/tmp_cell + CHECK_NEIGHBOR_FOR_PATH(x-1,y) + CHECK_NEIGHBOR_FOR_PATH(x+1,y) + CHECK_NEIGHBOR_FOR_PATH(x,y+1) + CHECK_NEIGHBOR_FOR_PATH(x,y-1) + if(include_diagonals) + CHECK_NEIGHBOR_FOR_PATH(x+1,y+1) + CHECK_NEIGHBOR_FOR_PATH(x+1,y-1) + CHECK_NEIGHBOR_FOR_PATH(x-1,y-1) + CHECK_NEIGHBOR_FOR_PATH(x-1,y+1) + return FALSE + +#undef CHECK_NEIGHBOR_FOR_PATH + +#define VERIFY_AND_ADD_CELL(X, Y) \ + TRANSLATE_AND_VERIFY_COORD(X,Y);\ + if(tmp_cell) {\ + . += tmp_cell;\ + } + +/// Gets the neighbors of the cell at x, y, optionally including diagonals. +/// (x,y) and its neighbors can safely be invalid/not validated before calling. /datum/random_map/noise/proc/get_neighbors(x, y, include_diagonals) . = list() - if(!include_diagonals) - var/static/list/ortho_offsets = list(list(-1, 0), list(1, 0), list(0, 1), list(0,-1)) - for(var/list/offset in ortho_offsets) - var/tmp_cell = get_map_cell(x+offset[1],y+offset[2]) - if(tmp_cell) - . += tmp_cell - else - for(var/dx in -1 to 1) - for(var/dy in -1 to 1) - var/tmp_cell = get_map_cell(x+dx,y+dy) - if(tmp_cell) - . += tmp_cell - . -= get_map_cell(x,y) \ No newline at end of file + var/tmp_cell + VERIFY_AND_ADD_CELL(x-1,y) + VERIFY_AND_ADD_CELL(x+1,y) + VERIFY_AND_ADD_CELL(x,y+1) + VERIFY_AND_ADD_CELL(x,y-1) + if(include_diagonals) + VERIFY_AND_ADD_CELL(x+1,y+1) + VERIFY_AND_ADD_CELL(x+1,y-1) + VERIFY_AND_ADD_CELL(x-1,y-1) + VERIFY_AND_ADD_CELL(x-1,y+1) + +#undef VERIFY_AND_ADD_CELL \ No newline at end of file diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index 20e971700e5..826d85817de 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -8,30 +8,30 @@ var/min_deep_ratio = MIN_DEEP_COUNT_PER_CHUNK var/list/surface_metals = list( - /decl/material/solid/metal/iron = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX), - /decl/material/solid/metal/aluminium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/metal/gold = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), - /decl/material/solid/metal/silver = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), - /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) + /decl/material/solid/metal/iron = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX), + /decl/material/solid/metal/aluminium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/metal/gold = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), + /decl/material/solid/metal/silver = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), + /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) ) var/list/rare_metals = list( - /decl/material/solid/metal/gold = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/metal/silver = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/metal/uranium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/metal/osmium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + /decl/material/solid/metal/gold = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/metal/silver = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/metal/uranium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/metal/osmium = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX) ) var/list/deep_metals = list( - /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), - /decl/material/solid/gemstone/diamond = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), - /decl/material/solid/metal/osmium = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX), - /decl/material/solid/metallic_hydrogen = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), - /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + /decl/material/solid/metal/uranium = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), + /decl/material/solid/gemstone/diamond = list(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX), + /decl/material/solid/metal/osmium = list(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX), + /decl/material/solid/metallic_hydrogen = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX), + /decl/material/solid/rutile = list(RESOURCE_MID_MIN, RESOURCE_MID_MAX) ) var/list/common_resources = list( - /decl/material/solid/sand = list(3,5), - /decl/material/solid/clay = list(3,5), - /decl/material/solid/graphite = list(3,5) + /decl/material/solid/sand = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX), + /decl/material/solid/clay = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX), + /decl/material/solid/graphite = list(RESOURCE_COMMON_MIN, RESOURCE_COMMON_MAX) ) /datum/random_map/noise/ore/New(var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/used_area) @@ -94,19 +94,19 @@ var/tmp_cell TRANSLATE_AND_VERIFY_COORD(x, y) - - var/spawning - if(tmp_cell < rare_val) - spawning = surface_metals - else if(tmp_cell < deep_val) - spawning = rare_metals - else - spawning = deep_metals - - for(var/val in spawning) - var/list/ranges = spawning[val] - resources[val] = rand(ranges[1], ranges[2]) - set_extension(T, /datum/extension/buried_resources, resources) + if(tmp_cell) + var/spawning + if(tmp_cell < rare_val) + spawning = surface_metals + else if(tmp_cell < deep_val) + spawning = rare_metals + else + spawning = deep_metals + + for(var/val in spawning) + var/list/ranges = spawning[val] + resources[val] = rand(ranges[1], ranges[2]) + set_extension(T, /datum/extension/buried_resources, resources) /datum/random_map/noise/ore/get_map_char(var/value) if(value < rare_val) diff --git a/code/modules/random_map/noise/seafloor.dm b/code/modules/random_map/noise/seafloor.dm index ce3f584a20d..4283970e757 100644 --- a/code/modules/random_map/noise/seafloor.dm +++ b/code/modules/random_map/noise/seafloor.dm @@ -10,19 +10,13 @@ /datum/random_map/noise/seafloor/replace_space/get_appropriate_path(var/value) return /turf/exterior/seafloor/flooded -/turf/exterior/mud/flooded - flooded = TRUE - -/turf/exterior/mud/dark/flooded - flooded = TRUE - /datum/random_map/noise/seafloor/get_appropriate_path(var/value) var/val = min(9,max(0,round((value/cell_range)*10))) switch(val) if(6) - return /turf/exterior/mud/flooded + return /turf/exterior/clay/flooded if(7 to 9) - return /turf/exterior/mud/dark/flooded + return /turf/exterior/mud/flooded /datum/random_map/noise/seafloor/get_additional_spawns(var/value, var/turf/T) var/val = min(9,max(0,round((value/cell_range)*10))) diff --git a/code/modules/random_map/noise/tundra.dm b/code/modules/random_map/noise/tundra.dm index 746c5ddcaf5..54eddf86467 100644 --- a/code/modules/random_map/noise/tundra.dm +++ b/code/modules/random_map/noise/tundra.dm @@ -36,9 +36,9 @@ if(isnull(val)) val = 0 switch(val) if(0 to 4) - return /turf/simulated/floor/beach/water/ocean + return /turf/exterior/mud/water else - return /turf/simulated/floor/snow + return /turf/exterior/snow /datum/random_map/noise/tundra/get_additional_spawns(var/value, var/turf/T) var/val = min(9,max(0,round((value/cell_range)*10))) diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index c0b3ce9fa9a..8b46b5f74d0 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -25,6 +25,7 @@ var/global/list/map_count = list() var/floor_type = /turf/simulated/floor var/target_turf_type + var/change_area = FALSE var/area/use_area // If set, turfs will be put in this area. If set to type, new instance will be spawned for the map // Storage for the final iteration of the map. @@ -45,11 +46,15 @@ var/global/list/map_count = list() if(tlx) limit_x = tlx if(tly) limit_y = tly - if(used_area) + if(!change_area) + use_area = null + else if(!use_area && used_area) if(ispath(used_area)) use_area = new(used_area) else use_area = used_area + else if(ispath(use_area)) + use_area = new(use_area) if(do_not_apply) auto_apply = null @@ -72,13 +77,6 @@ var/global/list/map_count = list() else admin_notice(SPAN_DANGER("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map."), R_DEBUG) -/datum/random_map/proc/get_map_cell(var/x,var/y) - if(!map) - set_map_size() - . = ((y-1)*limit_x)+x - if((. < 1) || (. > map.len)) - return null - /datum/random_map/proc/get_map_char(var/value) switch(value) if(WALL_CHAR) @@ -106,7 +104,7 @@ var/global/list/map_count = list() var/dat = "+------+
    " for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(current_cell) dat += get_map_char(map[current_cell]) dat += "
    " @@ -119,7 +117,7 @@ var/global/list/map_count = list() /datum/random_map/proc/seed_map() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(prob(initial_wall_cell)) map[current_cell] = WALL_CHAR else @@ -128,7 +126,7 @@ var/global/list/map_count = list() /datum/random_map/proc/clear_map() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - map[get_map_cell(x,y)] = 0 + map[TRANSLATE_COORD(x,y)] = 0 /datum/random_map/proc/generate() seed_map() @@ -165,7 +163,7 @@ var/global/list/map_count = list() apply_to_turf(x,y) /datum/random_map/proc/apply_to_turf(var/x,var/y) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(!current_cell) return 0 var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) @@ -201,14 +199,17 @@ var/global/list/map_count = list() ty-- // doesn't push it off-kilter by one. for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + var/current_cell = TRANSLATE_COORD(x,y) if(!current_cell) continue if(tx+x > target_map.limit_x) continue if(ty+y > target_map.limit_y) continue - target_map.map[target_map.get_map_cell(tx+x,ty+y)] = map[current_cell] + var/tmp_cell + TRANSLATE_AND_VERIFY_COORD_MLEN(tx+x, ty+y, target_map.map.len) + if(tmp_cell) + target_map.map[tmp_cell] = map[current_cell] handle_post_overlay_on(target_map,tx,ty) diff --git a/code/modules/reagents/Chemistry-Grinder.dm b/code/modules/reagents/Chemistry-Grinder.dm index af0ebfe26b3..d64776fcd91 100644 --- a/code/modules/reagents/Chemistry-Grinder.dm +++ b/code/modules/reagents/Chemistry-Grinder.dm @@ -192,7 +192,7 @@ update_icon() // Reset the machine. - addtimer(CALLBACK(src, .proc/end_grind, user), 6 SECONDS, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(end_grind), user), 6 SECONDS, TIMER_UNIQUE) var/skill_factor = CLAMP01(1 + 0.3*(user.get_skill_value(skill_to_check) - SKILL_EXPERT)/(SKILL_EXPERT - SKILL_MIN)) // Process. @@ -213,7 +213,7 @@ stack.use(amount_to_take) if(QDELETED(stack)) holdingitems -= stack - beaker.reagents.add_reagent(material.type, (amount_to_take * REAGENT_UNITS_PER_MATERIAL_SHEET * skill_factor)) + beaker.add_to_reagents(material.type, (amount_to_take * REAGENT_UNITS_PER_MATERIAL_SHEET * skill_factor)) continue else if(O.reagents) @@ -238,7 +238,7 @@ user.visible_message(SPAN_DANGER("\The [user]'s hand gets caught in \the [src]!"), SPAN_DANGER("Your hand gets caught in \the [src]!")) user.apply_damage(dam, BRUTE, hand, damage_flags = DAM_SHARP, used_weapon = "grinder") if(BP_IS_PROSTHETIC(hand_organ)) - beaker.reagents.add_reagent(/decl/material/solid/metal/iron, dam) + beaker.add_to_reagents(/decl/material/solid/metal/iron, dam) else user.take_blood(beaker, dam) SET_STATUS_MAX(user, STAT_STUN, 2) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 6316e81d0e3..06b49b0c2a2 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -1,5 +1,19 @@ var/global/obj/temp_reagents_holder = new +/atom/proc/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE) + return reagents?.add_reagent(reagent_type, amount, data, safety, defer_update) + +/atom/proc/remove_from_reagents(reagent_type, amount, safety = FALSE, defer_update = FALSE) + return reagents?.remove_reagent(reagent_type, amount, safety, defer_update) + +/atom/proc/remove_any_reagents(amount = 1, defer_update = FALSE) + return reagents?.remove_any(amount, defer_update) + +/atom/proc/get_reagent_space() + if(!reagents?.maximum_volume) + return 0 + return reagents.maximum_volume - reagents.total_volume + /datum/reagents var/primary_reagent var/list/reagent_volumes @@ -9,6 +23,12 @@ var/global/obj/temp_reagents_holder = new var/atom/my_atom var/cached_color +SAVED_VAR(/datum/reagents, reagent_volumes) +SAVED_VAR(/datum/reagents, reagent_data) +SAVED_VAR(/datum/reagents, total_volume) +SAVED_VAR(/datum/reagents, maximum_volume) +SAVED_VAR(/datum/reagents, my_atom) + /datum/reagents/New(var/maximum_volume = 120, var/atom/my_atom) src.maximum_volume = maximum_volume src.my_atom = my_atom @@ -24,6 +44,8 @@ var/global/obj/temp_reagents_holder = new if(my_atom) if(my_atom.reagents == src) my_atom.reagents = null + if(total_volume > 0) // we can assume 0 reagents and null reagents are broadly identical for the purposes of atom logic + my_atom.on_reagent_change() my_atom = null /datum/reagents/GetCloneArgs() @@ -91,7 +113,7 @@ var/global/obj/temp_reagents_holder = new var/replace_sound if(!(check_flags & ATOM_FLAG_NO_PHASE_CHANGE)) - if(!isnull(R.chilling_point) && R.type != R.bypass_cooling_products_for_root_type && LAZYLEN(R.chilling_products) && temperature <= R.chilling_point) + if(!isnull(R.chilling_point) && R.type != R.bypass_chilling_products_for_root_type && LAZYLEN(R.chilling_products) && temperature <= R.chilling_point) replace_self_with = R.chilling_products if(R.chilling_message) replace_message = "\The [lowertext(R.name)] [R.chilling_message]" @@ -174,6 +196,9 @@ var/global/obj/temp_reagents_holder = new /* Holder-to-chemical */ /datum/reagents/proc/handle_update(var/safety) + if(QDELETED(src)) + return + SSfluids.holders_to_update -= src update_total() if(!safety) HANDLE_REACTIONS(src) @@ -300,6 +325,9 @@ var/global/obj/temp_reagents_holder = new /* Holder-to-holder and similar procs */ /datum/reagents/proc/remove_any(var/amount = 1, var/defer_update = FALSE) // Removes up to [amount] of reagents from [src]. Returns actual amount removed. + if(amount <= 0) + return 0 + if(amount >= total_volume) . = total_volume clear_reagents() @@ -383,6 +411,9 @@ var/global/obj/temp_reagents_holder = new //Splashing reagents is messier than trans_to, the target's loc gets some of the reagents as well. /datum/reagents/proc/splash(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/min_spill=0, var/max_spill=60, var/defer_update = FALSE) + if(!istype(target)) + return + if(isturf(target)) trans_to_turf(target, amount, multiplier, copy, defer_update = defer_update) return @@ -506,7 +537,7 @@ var/global/obj/temp_reagents_holder = new current.touch_turf(target, REAGENT_VOLUME(src, rtype), src) var/dirtiness = get_dirtiness() if(dirtiness <= DIRTINESS_CLEAN) - target.clean_blood() + target.clean() target.remove_cleanables() if(dirtiness != DIRTINESS_NEUTRAL) if(dirtiness > DIRTINESS_NEUTRAL) @@ -524,10 +555,7 @@ var/global/obj/temp_reagents_holder = new for(var/obj/effect/decal/cleanable/blood/B in target) qdel(B) if(dirtiness <= DIRTINESS_CLEAN) - target.clean_blood() - if(istype(target, /turf/simulated)) - var/turf/simulated/simulated_turf = target - simulated_turf.dirt = 0 + target.clean() /datum/reagents/proc/touch_obj(var/obj/target) if(!target || !istype(target) || !target.simulated) @@ -580,9 +608,9 @@ var/global/obj/temp_reagents_holder = new R.touch_turf(target) if(R?.total_volume <= FLUID_QDEL_POINT || QDELETED(target)) return - var/obj/effect/fluid/F = locate() in target - if(!F) F = new(target) - trans_to_holder(F.reagents, amount, multiplier, copy, defer_update = defer_update) + if(!target.reagents) + target.create_reagents(FLUID_MAX_DEPTH) + trans_to_holder(target.reagents, amount, multiplier, copy, defer_update = defer_update) /datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/defer_update = FALSE) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. if(!target || !target.simulated) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index d18ed79fcc8..3716a7d2801 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -129,9 +129,9 @@ for(var/decl/material/reagent in contaminants) reagents.trans_type_to(beaker, reagent.type, round(rand()*amount, 0.1)) else - reagents.remove_reagent(my_reagents.type, amount) + remove_from_reagents(my_reagents.type, amount) for(var/decl/material/reagent in contaminants) - reagents.remove_reagent(reagent.type, round(rand()*amount, 0.1)) + remove_from_reagents(reagent.type, round(rand()*amount, 0.1)) else if (href_list["removecustom"]) var/decl/material/my_reagents = locate(href_list["removecustom"]) @@ -179,7 +179,7 @@ if(reagents.total_volume/count < 1) //Sanity checking. return while (count-- && count >= 0) - var/obj/item/chems/pill/P = new/obj/item/chems/pill(loc) + var/obj/item/chems/pill/dispensed/P = new(loc) if(!name) name = reagents.get_primary_reagent_name() P.SetName("[name] pill") P.icon_state = "pill"+pillsprite diff --git a/code/modules/reagents/Chemistry-Metabolism.dm b/code/modules/reagents/Chemistry-Metabolism.dm index e1002809b1f..cd290a4eb8e 100644 --- a/code/modules/reagents/Chemistry-Metabolism.dm +++ b/code/modules/reagents/Chemistry-Metabolism.dm @@ -2,6 +2,9 @@ var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_INJECT var/mob/living/parent +SAVED_VAR(/datum/reagents/metabolism, metabolism_class) +SAVED_VAR(/datum/reagents/metabolism, parent) + /datum/reagents/metabolism/clear_reagent(var/reagent_type, var/defer_update = FALSE, var/force = FALSE) // Duplicated check so that reagent data is accessible in on_leaving_metabolism. if(force || !!(REAGENT_VOLUME(src, reagent_type) || REAGENT_DATA(src, reagent_type))) diff --git a/code/modules/reagents/chems/chems_blood.dm b/code/modules/reagents/chems/chems_blood.dm index c56c0a0dc81..1b06f730810 100644 --- a/code/modules/reagents/chems/chems_blood.dm +++ b/code/modules/reagents/chems/chems_blood.dm @@ -51,16 +51,7 @@ if(!istype(T) || REAGENT_VOLUME(holder, type) < 3) return var/weakref/W = LAZYACCESS(data, "donor") - if (!W) - blood_splatter(T, src, 1) - return - W = W.resolve() - if(ishuman(W)) - blood_splatter(T, src, 1) - else if(isalien(W)) - var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, holder.my_atom, 1) - if(!QDELETED(B)) - B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" + blood_splatter(T, W?.resolve() || holder.my_atom, 1) /decl/material/liquid/blood/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder) if(M.HasTrait(/decl/trait/metabolically_inert)) diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index 8866c5377dc..bb2ff0beee5 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -33,7 +33,7 @@ /decl/material/liquid/glowsap/on_leaving_metabolism(datum/reagents/metabolism/holder) if(ishuman(holder?.my_atom)) var/mob/living/carbon/human/H = holder.my_atom - addtimer(CALLBACK(H, /mob/living/carbon/human/proc/update_eyes), 5 SECONDS) + addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_eyes)), 5 SECONDS) . = ..() /decl/material/liquid/glowsap/affect_overdose(var/mob/living/M) @@ -74,7 +74,7 @@ /decl/material/liquid/frostoil/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) if(prob(1)) - M.emote("shiver") + M.emote(/decl/emote/visible/shiver) holder.remove_reagent(/decl/material/liquid/capsaicin, 5) /decl/material/liquid/capsaicin @@ -309,7 +309,7 @@ /decl/material/solid/tobacco/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) ..() - M.reagents.add_reagent(/decl/material/liquid/nicotine, nicotine) + M.add_to_reagents(/decl/material/liquid/nicotine, nicotine) /decl/material/solid/tobacco/fine name = "fine tobacco" @@ -423,7 +423,7 @@ else if(E.organ_tag != BP_CHEST && E.organ_tag != BP_GROIN && prob(15)) to_chat(H, SPAN_DANGER("Your [E.name] is being lacerated from within!")) if(E.can_feel_pain()) - H.emote("scream") + H.emote(/decl/emote/audible/scream) if(prob(25)) for(var/i = 1 to rand(3,5)) new /obj/item/shard(get_turf(E), result_mat) diff --git a/code/modules/reagents/chems/chems_drinks.dm b/code/modules/reagents/chems/chems_drinks.dm index 4ae6d0b79ea..ebf6045ae66 100644 --- a/code/modules/reagents/chems/chems_drinks.dm +++ b/code/modules/reagents/chems/chems_drinks.dm @@ -76,7 +76,7 @@ /decl/material/liquid/drink/juice/carrot/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder) ..() - M.reagents.add_reagent(/decl/material/liquid/eyedrops, removed * 0.2) + M.add_to_reagents(/decl/material/liquid/eyedrops, removed * 0.2) /decl/material/liquid/drink/juice/grape name = "grape juice" @@ -865,3 +865,77 @@ glass_name = "Compote" glass_desc = "Traditional dessert drink made from fruits or berries. Grandma would be proud." + +/decl/material/liquid/drink/diet_cola + name = "Diet Cola" + lore_text = "Refreshing diet cola. Contains anti-nutritional value." + taste_description = "diet cola" + color = "#100800" + adj_drowsy = -3 + adj_temp = -5 + uid = "chem_drink_diet_cola" + + glass_name = "Diet Cola" + glass_desc = "A glass of refreshing Space Cola. This one's calorie-free!" + glass_special = list(DRINK_FIZZ) + +/decl/material/liquid/drink/orange_soda + name = "Fizzy Orange" + lore_text = "Artificial sugars and orange essence with fizz." + taste_description = "orange" + color = "#ffa500" + adj_temp = -5 + uid = "chem_drink_orange_soda" + + glass_name = "Orange Soda" + glass_desc = "A surprisingly tasty dye." + glass_special = list(DRINK_FIZZ) + +/decl/material/liquid/drink/rootbeer + name = "Root WeiBeer" + lore_text = "Root beer, brewed from the rare beer root. And a lot of chemicals." + taste_description = "faint toothpaste(?) and fizz" + color = "#290e05" + adj_temp = -5 + uid = "chem_drink_rootbeer" + + glass_name = "Root Beer" + glass_desc = "Yep that sure is some rooty beer." + glass_special = list(DRINK_FIZZ) + +/decl/material/liquid/drink/apple_soda + name = "Apple Soda" + lore_text = "Apple soda. Using only genuine genetically engineered apples. Engineered from bananas." + taste_description = "fizzy apples!" + color = "#ffe4a2" + adj_temp = -5 + uid = "chem_drink_apple_soda" + + glass_name = "Apple Soda" + glass_desc = "Disappointing cider." + glass_special = list(DRINK_FIZZ) + +/decl/material/liquid/drink/strawberry_soda + name = "Strawberry Soda" + lore_text = "Soda using sweet berries." + taste_description = "oddly bland" + color = "#ff6a9b" + adj_temp = -5 + uid = "chem_drink_strawberry_soda" + + glass_name = "Strawberry Soda" + glass_desc = "Attractive and alliterative." + glass_special = list(DRINK_FIZZ) + +/decl/material/liquid/drink/porksoda + name = "Pork Soda" + lore_text = "Soda made from straight up pork." + taste_description = "pork" + color = "#ff6a9b" + adj_temp = -5 + nutrition = 0.8 + uid = "chem_drink_porksoda" + + glass_name = "Pork Soda" + glass_desc = "I asked for a glass of PORT!" + glass_special = list(DRINK_FIZZ) diff --git a/code/modules/reagents/chems/chems_drugs.dm b/code/modules/reagents/chems/chems_drugs.dm index d03237b924d..f19a6179760 100644 --- a/code/modules/reagents/chems/chems_drugs.dm +++ b/code/modules/reagents/chems/chems_drugs.dm @@ -12,7 +12,7 @@ /decl/material/liquid/amphetamines/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) if(prob(5)) - M.emote(pick("twitch", "blink_r", "shiver")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/visible/blink_r, /decl/emote/visible/shiver)) M.add_chemical_effect(CE_SPEEDBOOST, 1) M.add_chemical_effect(CE_PULSE, 3) @@ -33,7 +33,7 @@ if(prob(50)) SET_STATUS_MAX(M, STAT_DROWSY, 3) if(prob(10)) - M.emote("drool") + M.emote(/decl/emote/visible/drool) /decl/material/liquid/nicotine name = "nicotine" @@ -79,7 +79,7 @@ var/dose = LAZYACCESS(M.chem_doses, type) if(dose < 0.5 * threshold) if(dose == metabolism * 2 || prob(5)) - M.emote("yawn") + M.emote(/decl/emote/audible/yawn) else if(dose < 1 * threshold) SET_STATUS_MAX(M, STAT_BLURRY, 10) else if(dose < 2 * threshold) @@ -148,7 +148,7 @@ M.apply_effect(3, STUTTER) ADJ_STATUS(M, STAT_DIZZY, 1) if(prob(5)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) else if(dose < 2 * threshold) M.apply_effect(3, STUTTER) ADJ_STATUS(M, STAT_JITTER, 2) @@ -156,7 +156,7 @@ SET_STATUS_MAX(M, STAT_DRUGGY, 35) if(prob(10)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) else M.add_chemical_effect(CE_MIND, -1) M.apply_effect(3, STUTTER) @@ -164,7 +164,7 @@ ADJ_STATUS(M, STAT_DIZZY, 5) SET_STATUS_MAX(M, STAT_DRUGGY, 40) if(prob(15)) - M.emote(pick("twitch", "giggle")) + M.emote(pick(/decl/emote/visible/twitch, /decl/emote/audible/giggle)) // Welcome back, Three Eye /decl/material/liquid/glowsap/gleam diff --git a/code/modules/reagents/chems/chems_ethanol.dm b/code/modules/reagents/chems/chems_ethanol.dm index 4009ab27374..c4373e38936 100644 --- a/code/modules/reagents/chems/chems_ethanol.dm +++ b/code/modules/reagents/chems/chems_ethanol.dm @@ -23,7 +23,7 @@ /decl/material/liquid/ethanol = 0.75, /decl/material/liquid/water = 0.25 ) - bypass_cooling_products_for_root_type = /decl/material/liquid/ethanol + bypass_chilling_products_for_root_type = /decl/material/liquid/ethanol affect_blood_on_ingest = FALSE // prevents automatic toxins/inebriation as though injected var/nutriment_factor = 0 diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm index a703f497f9a..fdf08f79e28 100644 --- a/code/modules/reagents/chems/chems_medicines.dm +++ b/code/modules/reagents/chems/chems_medicines.dm @@ -139,7 +139,7 @@ for(var/R in M.reagents?.reagent_volumes) var/decl/material/chem = GET_DECL(R) if((remove_generic && chem.toxicity) || (R in remove_toxins)) - M.reagents.remove_reagent(R, removing) + M.remove_from_reagents(R, removing) return /decl/material/liquid/immunobooster diff --git a/code/modules/reagents/chems/chems_pigments.dm b/code/modules/reagents/chems/chems_pigments.dm index 1a64670f9ad..dafbb8f7870 100644 --- a/code/modules/reagents/chems/chems_pigments.dm +++ b/code/modules/reagents/chems/chems_pigments.dm @@ -63,6 +63,35 @@ color = "#aaaaaa" uid = "chem_pigment_white" +/decl/material/liquid/paint_stripper + name = "paint stripper" + uid = "liquid_paint_remover" + lore_text = "A highly toxic compound used as an effective paint stripper." + taste_description = "bleach and acid" + color = "#a0a0a0" + metabolism = REM * 0.2 + value = 0.1 + solvent_power = MAT_SOLVENT_MODERATE + toxicity = 10 + +/decl/material/liquid/paint_stripper/proc/remove_paint(var/atom/painting, var/datum/reagents/holder) + if(istype(painting) && istype(holder)) + var/keep_alpha = painting.alpha + painting.reset_color() + painting.set_alpha(keep_alpha) + +/decl/material/liquid/paint_stripper/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder) + if(istype(T) && !isspaceturf(T)) + remove_paint(T, holder) + +/decl/material/liquid/paint_stripper/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder) + if(istype(O)) + remove_paint(O, holder) + +/decl/material/liquid/paint_stripper/touch_mob(var/mob/living/M, var/amount, var/datum/reagents/holder) + if(istype(M)) + remove_paint(M, holder) + /decl/material/liquid/paint name = "paint" lore_text = "This paint will stick to almost any object." @@ -76,8 +105,8 @@ /decl/material/liquid/paint/proc/apply_paint(var/atom/painting, var/datum/reagents/holder) if(istype(painting) && istype(holder)) var/keep_alpha = painting.alpha - painting.color = holder.get_color() - painting.alpha = keep_alpha + painting.set_color(holder.get_color()) + painting.set_alpha(keep_alpha) /decl/material/liquid/paint/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder) if(istype(T) && !isspaceturf(T)) diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm index b91bb821024..d34a0361704 100644 --- a/code/modules/reagents/dispenser/cartridge.dm +++ b/code/modules/reagents/dispenser/cartridge.dm @@ -63,7 +63,7 @@ return TRUE if(standard_pour_into(user, target)) return TRUE - if(standard_feed_mob(user, target)) + if(handle_eaten_by_mob(user, target) != EATEN_INVALID) return TRUE if(user.a_intent == I_HURT) if(standard_splash_mob(user,target)) diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm index 7837f1a3c11..fc67bea1606 100644 --- a/code/modules/reagents/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/dispenser/cartridge_presets.dm @@ -9,7 +9,7 @@ * CART_TYPE: the type suffix to append to the cartridge type path. * REAGENT_TYPE: The reagent decl path to fill the cartridge with. */ -#define DEFINE_CARTRIDGE_FOR_CHEM(CART_TYPE, REAGENT_TYPE) /obj/item/chems/chem_disp_cartridge/##CART_TYPE/populate_reagents(){reagents.add_reagent(REAGENT_TYPE, reagents.maximum_volume);} +#define DEFINE_CARTRIDGE_FOR_CHEM(CART_TYPE, REAGENT_TYPE) /obj/item/chems/chem_disp_cartridge/##CART_TYPE/populate_reagents(){add_to_reagents(REAGENT_TYPE, reagents.maximum_volume);} // Multiple DEFINE_CARTRIDGE_FOR_CHEM(water, /decl/material/liquid/water) diff --git a/code/modules/reagents/dispenser/cartridge_spawn.dm b/code/modules/reagents/dispenser/cartridge_spawn.dm index 9217acbe9f5..e88e3515f5c 100644 --- a/code/modules/reagents/dispenser/cartridge_spawn.dm +++ b/code/modules/reagents/dispenser/cartridge_spawn.dm @@ -7,7 +7,7 @@ if("small") C = new /obj/item/chems/chem_disp_cartridge/small(usr.loc) if("medium") C = new /obj/item/chems/chem_disp_cartridge/medium(usr.loc) if("large") C = new /obj/item/chems/chem_disp_cartridge(usr.loc) - C.reagents.add_reagent(reagent, C.volume) + C.add_to_reagents(reagent, C.volume) var/decl/material/R = reagent C.setLabel(initial(R.name)) log_and_message_admins("spawned a [size] reagent container containing [reagent]") diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm index ef9070fd880..1a5287a0035 100644 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ b/code/modules/reagents/dispenser/dispenser2.dm @@ -130,8 +130,8 @@ events_repository.unregister(/decl/observ/destroyed, container, src) container = new_container if(container) - events_repository.register(/decl/observ/moved, container, src, .proc/check_container_status) - events_repository.register(/decl/observ/destroyed, container, src, .proc/check_container_status) + events_repository.register(/decl/observ/moved, container, src, PROC_REF(check_container_status)) + events_repository.register(/decl/observ/destroyed, container, src, PROC_REF(check_container_status)) update_icon() SSnano.update_uis(src) // update all UIs attached to src diff --git a/code/modules/reagents/reactions/_reaction.dm b/code/modules/reagents/reactions/_reaction.dm index caed59766bf..bc19c746938 100644 --- a/code/modules/reagents/reactions/_reaction.dm +++ b/code/modules/reagents/reactions/_reaction.dm @@ -12,9 +12,11 @@ var/thermal_product var/mix_message = "The solution begins to bubble." var/reaction_sound = 'sound/effects/bubbles.ogg' - var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file. + /// If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file. + var/log_is_important = 0 var/lore_text var/mechanics_text + var/reaction_category = REACTION_TYPE_COMPOUND /// Flags used when reaction processing. var/chemical_reaction_flags = 0 diff --git a/code/modules/reagents/reactions/reaction_alcohol.dm b/code/modules/reagents/reactions/reaction_alcohol.dm index 3993ba177bc..6fbf57294cc 100644 --- a/code/modules/reagents/reactions/reaction_alcohol.dm +++ b/code/modules/reagents/reactions/reaction_alcohol.dm @@ -1,5 +1,6 @@ /decl/chemical_reaction/recipe abstract_type = /decl/chemical_reaction/recipe + reaction_category = REACTION_TYPE_RECIPE /decl/chemical_reaction/recipe/moonshine name = "Moonshine" diff --git a/code/modules/reagents/reactions/reaction_alloys.dm b/code/modules/reagents/reactions/reaction_alloys.dm index 056c84f260b..61bd616d6a8 100644 --- a/code/modules/reagents/reactions/reaction_alloys.dm +++ b/code/modules/reagents/reactions/reaction_alloys.dm @@ -3,6 +3,7 @@ maximum_temperature = INFINITY reaction_sound = null mix_message = null + reaction_category = REACTION_TYPE_ALLOYING abstract_type = /decl/chemical_reaction/alloy /decl/chemical_reaction/alloy/borosilicate diff --git a/code/modules/reagents/reactions/reaction_compounds.dm b/code/modules/reagents/reactions/reaction_compounds.dm new file mode 100644 index 00000000000..e27f62157e4 --- /dev/null +++ b/code/modules/reagents/reactions/reaction_compounds.dm @@ -0,0 +1,122 @@ +/decl/chemical_reaction/compound + abstract_type = /decl/chemical_reaction/compound + +/decl/chemical_reaction/compound/surfactant + name = "Azosurfactant" + result = /decl/material/liquid/surfactant + required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/liquid/acid = 1) + result_amount = 5 + mix_message = "The solution begins to foam gently." + +/decl/chemical_reaction/compound/space_cleaner + name = "Space cleaner" + result = /decl/material/liquid/cleaner + required_reagents = list(/decl/material/gas/ammonia = 1, /decl/material/liquid/water = 1) + mix_message = "The solution becomes slick and soapy." + result_amount = 2 + +/decl/chemical_reaction/compound/plantbgone + name = "Plant-B-Gone" + result = /decl/material/liquid/weedkiller + required_reagents = list( + /decl/material/liquid/bromide = 1, + /decl/material/liquid/water = 4 + ) + result_amount = 5 + +/decl/chemical_reaction/compound/foaming_agent + name = "Foaming Agent" + result = /decl/material/liquid/foaming_agent + required_reagents = list(/decl/material/solid/lithium = 1, /decl/material/liquid/fuel/hydrazine = 1) + result_amount = 1 + mix_message = "The solution begins to foam vigorously." + +/decl/chemical_reaction/compound/sodiumchloride + name = "Sodium Chloride" + result = /decl/material/solid/sodiumchloride + required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/acid/hydrochloric = 1) + result_amount = 2 + +/decl/chemical_reaction/compound/hair_remover + name = "Hair Remover" + result = /decl/material/liquid/hair_remover + required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/potassium = 1, /decl/material/liquid/acid/hydrochloric = 1) + result_amount = 3 + mix_message = "The solution thins out and emits an acrid smell." + +/decl/chemical_reaction/compound/methyl_bromide + name = "Methyl Bromide" + required_reagents = list( + /decl/material/liquid/bromide = 1, + /decl/material/liquid/ethanol = 1, + /decl/material/liquid/fuel/hydrazine = 1 + ) + result_amount = 3 + result = /decl/material/gas/methyl_bromide + mix_message = "The solution begins to bubble, emitting a dark vapor." + +/decl/chemical_reaction/compound/luminol + name = "Luminol" + result = /decl/material/liquid/luminol + required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/gas/ammonia = 2) + result_amount = 6 + mix_message = "The solution begins to gleam with a fey inner light." + +/decl/chemical_reaction/compound/anfo + name = "Fertilizer ANFO" + result = /decl/material/liquid/anfo + required_reagents = list( + /decl/material/liquid/fertilizer = 20, + /decl/material/liquid/fuel = 10 + ) + result_amount = 15 + mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." + +/decl/chemical_reaction/compound/anfo4 + name = "Chemlab ANFO" + result = /decl/material/liquid/anfo + required_reagents = list( + /decl/material/gas/ammonia = 10, + /decl/material/liquid/fuel = 5 + ) + result_amount = 15 + mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." + +/decl/chemical_reaction/compound/anfo_plus + name = "ANFO+" + result = /decl/material/liquid/anfo/plus + required_reagents = list( + /decl/material/liquid/anfo = 15, + /decl/material/solid/metal/aluminium = 5 + ) + result_amount = 20 + mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." + +/decl/chemical_reaction/compound/crystal_agent + name = "Crystallizing Agent" + result = /decl/material/liquid/crystal_agent + required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/metal/tungsten = 1, /decl/material/liquid/acid/polyacid = 1) + minimum_temperature = 150 CELSIUS + maximum_temperature = 200 CELSIUS + result_amount = 3 + +/decl/chemical_reaction/compound/paint + name = "Paint" + result = /decl/material/liquid/paint + required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/liquid/water = 3) + result_amount = 5 + mix_message = "The solution thickens and takes on a glossy sheen." + +/decl/chemical_reaction/compound/paint_stripper + name = "Paint Stripper" + //TODO: some way to mix chlorine and methane to make proper paint stripper. + required_reagents = list(/decl/material/liquid/acetone = 2, /decl/material/liquid/acid = 2) + result = /decl/material/liquid/paint_stripper + result_amount = 4 + mix_message = "The mixture thins and clears." + +/decl/chemical_reaction/compound/contaminant_cleaner + name = "Akaline Detergent" + result = /decl/material/liquid/contaminant_cleaner + required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/surfactant = 1) + result_amount = 2 diff --git a/code/modules/reagents/reactions/reaction_drugs.dm b/code/modules/reagents/reactions/reaction_drugs.dm index 854f479a657..8d90be875b6 100644 --- a/code/modules/reagents/reactions/reaction_drugs.dm +++ b/code/modules/reagents/reactions/reaction_drugs.dm @@ -1,10 +1,14 @@ -/decl/chemical_reaction/antitoxins +/decl/chemical_reaction/drug + abstract_type = /decl/chemical_reaction/drug + reaction_category = REACTION_TYPE_PHARMACEUTICAL + +/decl/chemical_reaction/drug/antitoxins name = "Antitoxins" result = /decl/material/liquid/antitoxins required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/potassium = 1, /decl/material/gas/ammonia = 1) result_amount = 3 -/decl/chemical_reaction/painkillers +/decl/chemical_reaction/drug/painkillers name = "Mild Painkillers" result = /decl/material/liquid/painkillers required_reagents = list( @@ -14,7 +18,7 @@ ) result_amount = 3 -/decl/chemical_reaction/strong_painkillers +/decl/chemical_reaction/drug/strong_painkillers name = "Strong Painkillers" result = /decl/material/liquid/painkillers/strong required_reagents = list( @@ -24,19 +28,19 @@ ) result_amount = 3 -/decl/chemical_reaction/antiseptic +/decl/chemical_reaction/drug/antiseptic name = "Antiseptic" result = /decl/material/liquid/antiseptic required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/antitoxins = 1, /decl/material/liquid/acid/hydrochloric = 1) result_amount = 3 -/decl/chemical_reaction/mutagenics +/decl/chemical_reaction/drug/mutagenics name = "Unstable mutagen" result = /decl/material/liquid/mutagenics required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/phosphorus = 1, /decl/material/liquid/acid/hydrochloric = 1) result_amount = 3 -/decl/chemical_reaction/psychoactives +/decl/chemical_reaction/drug/psychoactives name = "Psychoactives" result = /decl/material/liquid/psychoactives required_reagents = list(/decl/material/liquid/mercury = 1, /decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/lithium = 1) @@ -44,39 +48,39 @@ minimum_temperature = 50 CELSIUS maximum_temperature = (50 CELSIUS) + 100 -/decl/chemical_reaction/lube +/decl/chemical_reaction/drug/lube name = "Lubricant" result = /decl/material/liquid/lube required_reagents = list(/decl/material/liquid/water = 1, /decl/material/solid/silicon = 1, /decl/material/liquid/acetone = 1) result_amount = 3 mix_message = "The solution becomes thick and slimy." -/decl/chemical_reaction/pacid +/decl/chemical_reaction/drug/pacid name = "Polytrinic acid" result = /decl/material/liquid/acid/polyacid required_reagents = list(/decl/material/liquid/acid = 1, /decl/material/liquid/acid/hydrochloric = 1, /decl/material/solid/potassium = 1) result_amount = 3 -/decl/chemical_reaction/antirads +/decl/chemical_reaction/drug/antirads name = "Anti-Radiation Medication" result = /decl/material/liquid/antirads required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/liquid/antitoxins = 1) result_amount = 2 -/decl/chemical_reaction/narcotics +/decl/chemical_reaction/drug/narcotics name = "Narcotics" result = /decl/material/liquid/narcotics required_reagents = list(/decl/material/liquid/mercury = 1, /decl/material/liquid/acetone = 1, /decl/material/liquid/nutriment/sugar = 1) result_amount = 2 -/decl/chemical_reaction/burn_meds +/decl/chemical_reaction/drug/burn_meds name = "Anti-Burn Medication" result = /decl/material/liquid/burn_meds required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/carbon = 1) result_amount = 2 log_is_important = 1 -/decl/chemical_reaction/presyncopics +/decl/chemical_reaction/drug/presyncopics name = "Presyncopics" result = /decl/material/liquid/presyncopics required_reagents = list(/decl/material/solid/potassium = 1, /decl/material/liquid/acetone = 1, /decl/material/liquid/nutriment/sugar = 1) @@ -84,44 +88,44 @@ maximum_temperature = 60 CELSIUS result_amount = 3 -/decl/chemical_reaction/regenerator +/decl/chemical_reaction/drug/regenerator name = "Regenerative Serum" result = /decl/material/liquid/regenerator required_reagents = list(/decl/material/liquid/stabilizer = 1, /decl/material/liquid/antitoxins = 1) result_amount = 2 -/decl/chemical_reaction/neuroannealer +/decl/chemical_reaction/drug/neuroannealer name = "Neuroannealer" result = /decl/material/liquid/neuroannealer required_reagents = list(/decl/material/liquid/acid/hydrochloric = 1, /decl/material/gas/ammonia = 1, /decl/material/liquid/antitoxins = 1) result_amount = 2 -/decl/chemical_reaction/oxy_meds +/decl/chemical_reaction/drug/oxy_meds name = "Oxygen Deprivation Medication" result = /decl/material/liquid/oxy_meds required_reagents = list(/decl/material/liquid/acetone = 1, /decl/material/liquid/water = 1, /decl/material/solid/sulfur = 1) result_amount = 1 -/decl/chemical_reaction/brute_meds +/decl/chemical_reaction/drug/brute_meds name = "Anti-Trauma Medication" result = /decl/material/liquid/brute_meds required_reagents = list(/decl/material/liquid/stabilizer = 1, /decl/material/solid/carbon = 1) inhibitors = list(/decl/material/liquid/nutriment/sugar = 1) // Messes up with adrenaline result_amount = 2 -/decl/chemical_reaction/amphetamines +/decl/chemical_reaction/drug/amphetamines name = "Amphetamines" result = /decl/material/liquid/amphetamines required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/phosphorus = 1, /decl/material/solid/sulfur = 1) result_amount = 3 -/decl/chemical_reaction/retrovirals +/decl/chemical_reaction/drug/retrovirals name = "Retrovirals" result = /decl/material/liquid/retrovirals required_reagents = list(/decl/material/liquid/antirads = 1, /decl/material/solid/carbon = 1) result_amount = 2 -/decl/chemical_reaction/nanitefluid +/decl/chemical_reaction/compound/nanitefluid name = "Nanite Fluid" result = /decl/material/liquid/nanitefluid required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/solid/metal/aluminium = 1, /decl/material/liquid/lube = 1) @@ -131,19 +135,19 @@ maximum_temperature = -25 CELSIUS mix_message = "The solution becomes a metallic slime." -/decl/chemical_reaction/antibiotics +/decl/chemical_reaction/drug/antibiotics name = "Antibiotics" result = /decl/material/liquid/antibiotics required_reagents = list(/decl/material/liquid/presyncopics = 1, /decl/material/liquid/stabilizer = 1) result_amount = 2 -/decl/chemical_reaction/eyedrops +/decl/chemical_reaction/drug/eyedrops name = "Eye Drops" result = /decl/material/liquid/eyedrops required_reagents = list(/decl/material/solid/carbon = 1, /decl/material/liquid/fuel/hydrazine = 1, /decl/material/liquid/antitoxins = 1) result_amount = 2 -/decl/chemical_reaction/sedatives +/decl/chemical_reaction/drug/sedatives name = "Sedatives" result = /decl/material/liquid/sedatives required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/nutriment/sugar = 4 @@ -153,13 +157,13 @@ ) // Messes with the smoke result_amount = 5 -/decl/chemical_reaction/paralytics +/decl/chemical_reaction/drug/paralytics name = "Paralytics" result = /decl/material/liquid/paralytics required_reagents = list(/decl/material/liquid/ethanol = 1, /decl/material/liquid/mercury = 2, /decl/material/liquid/fuel/hydrazine = 2) result_amount = 1 -/decl/chemical_reaction/zombiepowder +/decl/chemical_reaction/drug/zombiepowder name = "Zombie Powder" result = /decl/material/liquid/zombiepowder required_reagents = list(/decl/material/liquid/carpotoxin = 5, /decl/material/liquid/sedatives = 5, /decl/material/solid/metal/copper = 5) @@ -168,7 +172,7 @@ maximum_temperature = 99 CELSIUS mix_message = "The solution boils off to form a fine powder." -/decl/chemical_reaction/hallucinogenics +/decl/chemical_reaction/drug/hallucinogenics name = "Hallucinogenics" result = /decl/material/liquid/hallucinogenics required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/liquid/fuel/hydrazine = 1, /decl/material/liquid/antitoxins = 1) @@ -177,91 +181,31 @@ minimum_temperature = 75 CELSIUS maximum_temperature = (75 CELSIUS) + 25 -/decl/chemical_reaction/surfactant - name = "Azosurfactant" - result = /decl/material/liquid/surfactant - required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/liquid/acid = 1) - result_amount = 5 - mix_message = "The solution begins to foam gently." - -/decl/chemical_reaction/space_cleaner - name = "Space cleaner" - result = /decl/material/liquid/cleaner - required_reagents = list(/decl/material/gas/ammonia = 1, /decl/material/liquid/water = 1) - mix_message = "The solution becomes slick and soapy." - result_amount = 2 - -/decl/chemical_reaction/contaminant_cleaner - name = "Akaline Detergent" - result = /decl/material/liquid/contaminant_cleaner - required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/surfactant = 1) - result_amount = 2 - -/decl/chemical_reaction/plantbgone - name = "Plant-B-Gone" - result = /decl/material/liquid/weedkiller - required_reagents = list( - /decl/material/liquid/bromide = 1, - /decl/material/liquid/water = 4 - ) - result_amount = 5 - -/decl/chemical_reaction/foaming_agent - name = "Foaming Agent" - result = /decl/material/liquid/foaming_agent - required_reagents = list(/decl/material/solid/lithium = 1, /decl/material/liquid/fuel/hydrazine = 1) - result_amount = 1 - mix_message = "The solution begins to foam vigorously." - -/decl/chemical_reaction/sodiumchloride - name = "Sodium Chloride" - result = /decl/material/solid/sodiumchloride - required_reagents = list(/decl/material/solid/sodium = 1, /decl/material/liquid/acid/hydrochloric = 1) - result_amount = 2 - /decl/chemical_reaction/stimulants name = "Stimulants" result = /decl/material/liquid/stimulants required_reagents = list(/decl/material/liquid/hallucinogenics = 1, /decl/material/solid/lithium = 1) result_amount = 3 -/decl/chemical_reaction/antidepressants +/decl/chemical_reaction/drug/antidepressants name = "Antidepressants" result = /decl/material/liquid/antidepressants required_reagents = list(/decl/material/liquid/hallucinogenics = 1, /decl/material/solid/carbon = 1) result_amount = 3 -/decl/chemical_reaction/hair_remover - name = "Hair Remover" - result = /decl/material/liquid/hair_remover - required_reagents = list(/decl/material/solid/metal/radium = 1, /decl/material/solid/potassium = 1, /decl/material/liquid/acid/hydrochloric = 1) - result_amount = 3 - mix_message = "The solution thins out and emits an acrid smell." - -/decl/chemical_reaction/methyl_bromide - name = "Methyl Bromide" - required_reagents = list( - /decl/material/liquid/bromide = 1, - /decl/material/liquid/ethanol = 1, - /decl/material/liquid/fuel/hydrazine = 1 - ) - result_amount = 3 - result = /decl/material/gas/methyl_bromide - mix_message = "The solution begins to bubble, emitting a dark vapor." - -/decl/chemical_reaction/adrenaline +/decl/chemical_reaction/drug/adrenaline name = "Adrenaline" result = /decl/material/liquid/adrenaline required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/liquid/amphetamines = 1, /decl/material/liquid/oxy_meds = 1) result_amount = 3 -/decl/chemical_reaction/stabilizer +/decl/chemical_reaction/drug/stabilizer name = "Stabilizer" result = /decl/material/liquid/stabilizer required_reagents = list(/decl/material/liquid/nutriment/sugar = 1, /decl/material/solid/carbon = 1, /decl/material/liquid/acetone = 1) result_amount = 3 -/decl/chemical_reaction/gleam +/decl/chemical_reaction/drug/gleam name = "Gleam" result = /decl/material/liquid/glowsap/gleam result_amount = 2 @@ -276,14 +220,14 @@ /decl/material/liquid/glowsap = 2 ) -/decl/chemical_reaction/immunobooster +/decl/chemical_reaction/drug/immunobooster name = "Immunobooster" result = /decl/material/liquid/immunobooster required_reagents = list(/decl/material/liquid/presyncopics = 1, /decl/material/liquid/antitoxins = 1) minimum_temperature = 40 CELSIUS result_amount = 2 -/decl/chemical_reaction/clotting_agent +/decl/chemical_reaction/drug/clotting_agent name = "Clotting Agent" result = /decl/material/liquid/clotting_agent required_reagents = list( @@ -292,3 +236,10 @@ /decl/material/liquid/carpotoxin = 1 ) result_amount = 2 + +/decl/chemical_reaction/drug/nanoblood + name = "Nanoblood" + result = /decl/material/liquid/nanoblood + required_reagents = list(/decl/material/liquid/nanitefluid = 1, /decl/material/solid/metal/iron = 1, /decl/material/liquid/blood = 1) + result_amount = 3 + mix_message = "The solution thickens slowly into a glossy liquid." diff --git a/code/modules/reagents/reactions/reaction_grenade_reaction.dm b/code/modules/reagents/reactions/reaction_grenade_reaction.dm index 50e655fbb05..9d7a2a8f5f5 100644 --- a/code/modules/reagents/reactions/reaction_grenade_reaction.dm +++ b/code/modules/reagents/reactions/reaction_grenade_reaction.dm @@ -3,6 +3,7 @@ abstract_type = /decl/chemical_reaction/grenade_reaction result_amount = 1 chemical_reaction_flags = CHEM_REACTION_FLAG_OVERFLOW_CONTAINER + reaction_category = REACTION_TYPE_COMPOUND /decl/chemical_reaction/grenade_reaction/explosion_potassium name = "Explosion" @@ -125,7 +126,7 @@ /decl/chemical_reaction/grenade_reaction/metalfoam name = "Metal Foam" lore_text = "This mixture explodes in a burst of metallic foam. Good for hull repair!" - required_reagents = list(/decl/material/solid/metal/aluminium = 3, /decl/material/liquid/foaming_agent = 1, /decl/material/liquid/acid/polyacid = 1) + required_reagents = list(/decl/material/solid/metal/aluminium = 3, /decl/material/liquid/foaming_agent = 1, /decl/material/liquid/acid = 1) result_amount = 5 mix_message = "The solution foams up violently!" @@ -147,7 +148,7 @@ /decl/chemical_reaction/grenade_reaction/ironfoam name = "Iron Foam" lore_text = "This mixture explodes in a burst of iron foam. Good for hull repair!" - required_reagents = list(/decl/material/solid/metal/iron = 3, /decl/material/liquid/foaming_agent = 1, /decl/material/liquid/acid/polyacid = 1) + required_reagents = list(/decl/material/solid/metal/iron = 3, /decl/material/liquid/foaming_agent = 1, /decl/material/liquid/acid = 1) result_amount = 5 mix_message = "The solution bubbles vigorously!" diff --git a/code/modules/reagents/reactions/reaction_other.dm b/code/modules/reagents/reactions/reaction_other.dm index f7dd8eb027a..ff57137820f 100644 --- a/code/modules/reagents/reactions/reaction_other.dm +++ b/code/modules/reagents/reactions/reaction_other.dm @@ -13,65 +13,5 @@ /decl/chemical_reaction/soap_key/on_reaction(var/datum/reagents/holder) var/obj/item/soap/S = holder.get_reaction_loc(chemical_reaction_flags) if(istype(S) && S.key_data) - var/obj/item/key/soap/key = new(get_turf(S), null, S.key_data) - key.uses = strength + new /obj/item/key/temporary(get_turf(S), /decl/material/liquid/cleaner, S.key_data, strength) ..() - -/decl/chemical_reaction/luminol - name = "Luminol" - result = /decl/material/liquid/luminol - required_reagents = list(/decl/material/liquid/fuel/hydrazine = 2, /decl/material/solid/carbon = 2, /decl/material/gas/ammonia = 2) - result_amount = 6 - mix_message = "The solution begins to gleam with a fey inner light." - -/decl/chemical_reaction/nanoblood - name = "Nanoblood" - result = /decl/material/liquid/nanoblood - required_reagents = list(/decl/material/liquid/nanitefluid = 1, /decl/material/solid/metal/iron = 1, /decl/material/liquid/blood = 1) - result_amount = 3 - mix_message = "The solution thickens slowly into a glossy liquid." - -/decl/chemical_reaction/anfo - name = "Fertilizer ANFO" - result = /decl/material/liquid/anfo - required_reagents = list( - /decl/material/liquid/fertilizer = 20, - /decl/material/liquid/fuel = 10 - ) - result_amount = 15 - mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." - -/decl/chemical_reaction/anfo4 - name = "Chemlab ANFO" - result = /decl/material/liquid/anfo - required_reagents = list( - /decl/material/gas/ammonia = 10, - /decl/material/liquid/fuel = 5 - ) - result_amount = 15 - mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." - -/decl/chemical_reaction/anfo_plus - name = "ANFO+" - result = /decl/material/liquid/anfo/plus - required_reagents = list( - /decl/material/liquid/anfo = 15, - /decl/material/solid/metal/aluminium = 5 - ) - result_amount = 20 - mix_message = "The solution gives off the eye-watering reek of spilled fertilizer and petroleum." - -/decl/chemical_reaction/crystal_agent - name = "Crystallizing Agent" - result = /decl/material/liquid/crystal_agent - required_reagents = list(/decl/material/solid/silicon = 1, /decl/material/solid/metal/tungsten = 1, /decl/material/liquid/acid/polyacid = 1) - minimum_temperature = 150 CELSIUS - maximum_temperature = 200 CELSIUS - result_amount = 3 - -/decl/chemical_reaction/paint - name = "Paint" - result = /decl/material/liquid/paint - required_reagents = list(/decl/material/liquid/plasticide = 1, /decl/material/liquid/water = 3) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy sheen." diff --git a/code/modules/reagents/reactions/reaction_synthesis.dm b/code/modules/reagents/reactions/reaction_synthesis.dm index 27f3938ac91..0f246cedc1d 100644 --- a/code/modules/reagents/reactions/reaction_synthesis.dm +++ b/code/modules/reagents/reactions/reaction_synthesis.dm @@ -4,6 +4,7 @@ result_amount = 1 mix_message = "The solution hardens and begins to crystallize." abstract_type = /decl/chemical_reaction/synthesis + reaction_category = REACTION_TYPE_SYNTHESIS /decl/chemical_reaction/synthesis/fiberglass name = "Fiberglass" @@ -96,7 +97,7 @@ /decl/chemical_reaction/synthesis/plastication name = "Plastic" - required_reagents = list(/decl/material/liquid/acid/polyacid = 1, /decl/material/liquid/plasticide = 2) + required_reagents = list(/decl/material/liquid/acid = 1, /decl/material/liquid/plasticide = 2) mix_message = "The solution solidifies into a grey-white mass." /decl/chemical_reaction/synthesis/plastication/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) diff --git a/code/modules/reagents/reagent_container_edibility.dm b/code/modules/reagents/reagent_container_edibility.dm new file mode 100644 index 00000000000..f052809413c --- /dev/null +++ b/code/modules/reagents/reagent_container_edibility.dm @@ -0,0 +1,8 @@ +/obj/item/chems/get_edible_material_amount(var/mob/eater) + return ATOM_IS_OPEN_CONTAINER(src) && reagents?.total_volume + +/obj/item/chems/get_food_default_transfer_amount(mob/eater) + return eater?.get_eaten_transfer_amount(amount_per_transfer_from_this) + +/obj/item/chems/get_food_consumption_method(mob/eater) + return EATING_METHOD_DRINK diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 8733b106e11..b7e62217a53 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -116,11 +116,11 @@ return 0 if(!target.reagents || !target.reagents.total_volume) - to_chat(user, SPAN_NOTICE("[target] is empty.")) + to_chat(user, SPAN_NOTICE("\The [target] is empty of reagents.")) return 1 if(reagents && !REAGENTS_FREE_SPACE(reagents)) - to_chat(user, SPAN_NOTICE("[src] is full.")) + to_chat(user, SPAN_NOTICE("\The [src] is full of reagents.")) return 1 var/trans = target.reagents.trans_to_obj(src, target.amount_dispensed) @@ -136,11 +136,11 @@ return 1 if(!reagents || !reagents.total_volume) - to_chat(user, SPAN_NOTICE("[src] is empty.")) + to_chat(user, SPAN_NOTICE("\The [src] is empty of reagents.")) return 1 if(target.reagents && !REAGENTS_FREE_SPACE(target.reagents)) - to_chat(user, SPAN_NOTICE("[target] is full.")) + to_chat(user, SPAN_NOTICE("\The [target] is full of reagents.")) return 1 var/contained = REAGENT_LIST(src) @@ -153,69 +153,6 @@ reagents.splash(target, reagents.total_volume) return 1 -/obj/item/chems/proc/self_feed_message(var/mob/user) - to_chat(user, SPAN_NOTICE("You eat \the [src]")) - -/obj/item/chems/proc/other_feed_message_start(var/mob/user, var/mob/target) - user.visible_message(SPAN_NOTICE("[user] is trying to feed [target] \the [src]!")) - -/obj/item/chems/proc/other_feed_message_finish(var/mob/user, var/mob/target) - user.visible_message(SPAN_NOTICE("[user] has fed [target] \the [src]!")) - -/obj/item/chems/proc/feed_sound(var/mob/user) - return - -/obj/item/chems/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack - if(!istype(target)) - return 0 - - if(!reagents || !reagents.total_volume) - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) - return 1 - - // only carbons can eat - if(iscarbon(target)) - if(target == user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(user, SPAN_NOTICE("\The [blocked] is in the way!")) - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things - self_feed_message(user) - reagents.trans_to_mob(user, issmall(user) ? CEILING(amount_per_transfer_from_this/2) : amount_per_transfer_from_this, CHEM_INGEST) - feed_sound(user) - add_trace_DNA(user) - return 1 - - - else - if(!user.can_force_feed(target, src)) - return - - other_feed_message_start(user, target) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_mob(user, target)) - return - - other_feed_message_finish(user, target) - - var/contained = REAGENT_LIST(src) - admin_attack_log(user, target, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") - - reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST) - feed_sound(user) - add_trace_DNA(target) - return 1 - - return 0 - /obj/item/chems/proc/standard_pour_into(var/mob/user, var/atom/target) // This goes into afterattack and yes, it's atom-level if(!target.reagents) return 0 @@ -229,11 +166,11 @@ return 0 if(!reagents || !reagents.total_volume) - to_chat(user, SPAN_NOTICE("[src] is empty.")) + to_chat(user, SPAN_NOTICE("\The [src] is empty of reagents.")) return 1 if(!REAGENTS_FREE_SPACE(target.reagents)) - to_chat(user, SPAN_NOTICE("[target] is full.")) + to_chat(user, SPAN_NOTICE("\The [target] is full of reagents.")) return 1 var/trans = reagents.trans_to(target, amount_per_transfer_from_this) diff --git a/code/modules/reagents/reagent_containers/beaker.dm b/code/modules/reagents/reagent_containers/beaker.dm index 61a92aa09df..4f9a579414c 100644 --- a/code/modules/reagents/reagent_containers/beaker.dm +++ b/code/modules/reagents/reagent_containers/beaker.dm @@ -4,7 +4,7 @@ desc = "A beaker." icon = 'icons/obj/items/chem/beakers/beaker.dmi' icon_state = ICON_STATE_WORLD - center_of_mass = @"{'x':15,'y':10}" + center_of_mass = @'{"x":15,"y":10}' material = /decl/material/solid/glass material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME material_force_multiplier = 0.25 @@ -69,7 +69,7 @@ name = "large beaker" desc = "A large beaker." icon = 'icons/obj/items/chem/beakers/large.dmi' - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' volume = 120 amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[5,10,15,25,30,60,120]" @@ -80,7 +80,7 @@ name = "mixing bowl" desc = "A large mixing bowl." icon = 'icons/obj/items/chem/mixingbowl.dmi' - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' volume = 180 amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[5,10,15,25,30,60,180]" @@ -92,21 +92,21 @@ name = "cryostasis beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions." icon = 'icons/obj/items/chem/beakers/stasis.dmi' - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' volume = 60 amount_per_transfer_from_this = 10 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_CHEM_CHANGE presentation_flags = PRESENTATION_FLAG_NAME material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_NONE - origin_tech = "{'materials':2}" + origin_tech = @'{"materials":2}' lid_color = COLOR_PALE_BLUE_GRAY /obj/item/chems/glass/beaker/advanced name = "advanced beaker" desc = "An advanced beaker, powered by experimental technology." icon = 'icons/obj/items/chem/beakers/advanced.dmi' - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[5,10,15,25,30,60,120,150,200,250,300]" @@ -117,14 +117,14 @@ /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'exoticmatter':2,'materials':6}" + origin_tech = @'{"exoticmatter":2,"materials":6}' lid_color = COLOR_CYAN_BLUE /obj/item/chems/glass/beaker/vial name = "vial" desc = "A small glass vial." icon = 'icons/obj/items/chem/vial.dmi' - center_of_mass = @"{'x':15,'y':8}" + center_of_mass = @'{"x":15,"y":8}' volume = 30 w_class = ITEM_SIZE_TINY //half the volume of a bottle, half the size amount_per_transfer_from_this = 10 @@ -140,22 +140,26 @@ name = "insulated beaker" desc = "A glass beaker surrounded with black insulation." icon = 'icons/obj/items/chem/beakers/insulated.dmi' - center_of_mass = @"{'x':15,'y':8}" + center_of_mass = @'{"x":15,"y":8}' matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT) possible_transfer_amounts = @"[5,10,15,30]" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_OPEN_CONTAINER presentation_flags = PRESENTATION_FLAG_NAME temperature_coefficient = 1 material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_NONE lid_color = COLOR_GRAY40 +// Hack around reagent temp changes. +/obj/item/chems/glass/beaker/insulated/ProcessAtomTemperature() + return PROCESS_KILL + /obj/item/chems/glass/beaker/insulated/large name = "large insulated beaker" icon = 'icons/obj/items/chem/beakers/insulated_large.dmi' - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT) volume = 120 /obj/item/chems/glass/beaker/sulphuric/populate_reagents() - reagents.add_reagent(/decl/material/liquid/acid, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/acid, reagents.maximum_volume) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 4c54b7882dd..559d735adca 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -26,19 +26,19 @@ /obj/item/chems/ivbag/on_reagent_change() ..() - if(reagents.total_volume > volume/2) + if(reagents?.total_volume > volume/2) w_class = ITEM_SIZE_SMALL else w_class = ITEM_SIZE_TINY /obj/item/chems/ivbag/on_update_icon() . = ..() - var/percent = round(reagents.total_volume / volume * 100) - if(reagents.total_volume) + var/percent = round(reagents?.total_volume / volume * 100) + if(percent) add_overlay(overlay_image(icon, "[round(percent,25)]", reagents.get_color())) add_overlay(attached? "dongle" : "top") -/obj/item/chems/ivbag/handle_mouse_drop(atom/over, mob/user) +/obj/item/chems/ivbag/handle_mouse_drop(atom/over, mob/user, params) if(ismob(loc)) if(attached) visible_message(SPAN_NOTICE("\The [attached] is taken off \the [src].")) @@ -87,7 +87,7 @@ /obj/item/chems/ivbag/blood/populate_reagents() if(blood_fill_type) - reagents.add_reagent(blood_fill_type, reagents.maximum_volume, get_initial_blood_data()) + add_to_reagents(blood_fill_type, reagents.maximum_volume, get_initial_blood_data()) /obj/item/chems/ivbag/blood/nanoblood label_text = "synthetic" diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 510ebe26a50..b74335a2e3d 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -79,7 +79,7 @@ if(M.reagents) var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]]) - M.reagents.add_reagent(reagent_ids[mode], t) + M.add_to_reagents(reagent_ids[mode], t) reagent_volumes[reagent_ids[mode]] -= t admin_inject_log(user, M, src, reagent_ids[mode], t) to_chat(user, "[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining.") @@ -180,7 +180,7 @@ return var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]]) - target.reagents.add_reagent(reagent_ids[mode], t) + target.add_to_reagents(reagent_ids[mode], t) reagent_volumes[reagent_ids[mode]] -= t to_chat(user, "You transfer [t] units of the solution to [target].") return diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 9997b999d18..df9794efd42 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -12,7 +12,7 @@ icon_state = "emptycondiment" atom_flags = ATOM_FLAG_OPEN_CONTAINER possible_transfer_amounts = @"[1,5,10]" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' randpixel = 6 volume = 50 var/obj/item/chems/condiment/is_special_bottle @@ -49,13 +49,6 @@ on_reagent_change() return -/obj/item/chems/condiment/attack_self(var/mob/user) - return - -/obj/item/chems/condiment/attack(var/mob/M, var/mob/user, var/def_zone) - if(standard_feed_mob(user, M)) - return - /obj/item/chems/condiment/afterattack(var/obj/target, var/mob/user, var/proximity) if(!proximity) return @@ -79,12 +72,6 @@ else ..() -/obj/item/chems/condiment/feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - -/obj/item/chems/condiment/self_feed_message(var/mob/user) - to_chat(user, SPAN_NOTICE("You swallow some of contents of \the [src].")) - /obj/item/chems/condiment/proc/update_center_of_mass() center_of_mass = is_special_bottle ? initial(is_special_bottle.center_of_mass) : initial(center_of_mass) @@ -116,7 +103,7 @@ icon_state = "enzyme" /obj/item/chems/condiment/enzyme/populate_reagents() - reagents.add_reagent(/decl/material/liquid/enzyme, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/enzyme, reagents.maximum_volume) /obj/item/chems/condiment/barbecue name = "barbecue sauce" @@ -124,14 +111,14 @@ icon_state = "barbecue" /obj/item/chems/condiment/barbecue/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/barbecue, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/barbecue, reagents.maximum_volume) /obj/item/chems/condiment/sugar name = "sugar" desc = "Cavities in a bottle." /obj/item/chems/condiment/sugar/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) /obj/item/chems/condiment/ketchup name = "ketchup" @@ -139,7 +126,7 @@ icon_state = "ketchup" /obj/item/chems/condiment/ketchup/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/ketchup, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/ketchup, reagents.maximum_volume) /obj/item/chems/condiment/cornoil name = "corn oil" @@ -147,7 +134,7 @@ icon_state = "oliveoil" /obj/item/chems/condiment/cornoil/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/cornoil, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/cornoil, reagents.maximum_volume) /obj/item/chems/condiment/vinegar name = "vinegar" @@ -155,7 +142,7 @@ desc = "As acidic as it gets in the kitchen." /obj/item/chems/condiment/vinegar/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/vinegar, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/vinegar, reagents.maximum_volume) /obj/item/chems/condiment/mayo name = "mayonnaise" @@ -163,7 +150,7 @@ desc = "Mayonnaise, used for centuries to make things edible." /obj/item/chems/condiment/mayo/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/mayo, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/mayo, reagents.maximum_volume) /obj/item/chems/condiment/frostoil name = "coldsauce" @@ -171,7 +158,7 @@ icon_state = "coldsauce" /obj/item/chems/condiment/frostoil/populate_reagents() - reagents.add_reagent(/decl/material/liquid/frostoil, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/frostoil, reagents.maximum_volume) /obj/item/chems/condiment/capsaicin name = "hotsauce" @@ -179,7 +166,7 @@ icon_state = "hotsauce" /obj/item/chems/condiment/capsaicin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/capsaicin, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/capsaicin, reagents.maximum_volume) /obj/item/chems/condiment/small name = "small condiment container" @@ -203,28 +190,28 @@ name = "salt shaker" desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' /obj/item/chems/condiment/small/saltshaker/populate_reagents() - reagents.add_reagent(/decl/material/solid/sodiumchloride, reagents.maximum_volume) + add_to_reagents(/decl/material/solid/sodiumchloride, reagents.maximum_volume) /obj/item/chems/condiment/small/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' /obj/item/chems/condiment/small/peppermill/populate_reagents() - reagents.add_reagent(/decl/material/solid/blackpepper, reagents.maximum_volume) + add_to_reagents(/decl/material/solid/blackpepper, reagents.maximum_volume) /obj/item/chems/condiment/small/sugar name = "sugar" desc = "Sweetness in a bottle" icon_state = "sugarsmall" - center_of_mass = @"{'x':17,'y':9}" + center_of_mass = @'{"x":17,"y":9}' /obj/item/chems/condiment/small/sugar/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) /obj/item/chems/condiment/small/mint name = "mint essential oil" @@ -233,7 +220,7 @@ icon_state = "coldsauce" /obj/item/chems/condiment/small/mint/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/syrup/mint, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/syrup/mint, reagents.maximum_volume) /obj/item/chems/condiment/small/soysauce name = "soy sauce" @@ -241,7 +228,7 @@ icon_state = "soysauce" /obj/item/chems/condiment/small/soysauce/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/soysauce, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/soysauce, reagents.maximum_volume) //MRE condiments and drinks. @@ -258,7 +245,7 @@ icon_state = "packet_small_white" /obj/item/chems/condiment/small/packet/salt/populate_reagents() - reagents.add_reagent(/decl/material/solid/sodiumchloride, reagents.maximum_volume/2) + add_to_reagents(/decl/material/solid/sodiumchloride, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/pepper name = "pepper packet" @@ -266,7 +253,7 @@ icon_state = "packet_small_black" /obj/item/chems/condiment/small/packet/pepper/populate_reagents() - reagents.add_reagent(/decl/material/solid/blackpepper, reagents.maximum_volume/2) + add_to_reagents(/decl/material/solid/blackpepper, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/sugar name = "sugar packet" @@ -274,7 +261,7 @@ icon_state = "packet_small_white" /obj/item/chems/condiment/small/packet/sugar/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/jelly name = "jelly packet" @@ -282,7 +269,7 @@ icon_state = "packet_medium" /obj/item/chems/condiment/small/packet/jelly/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/cherryjelly, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/honey name = "honey packet" @@ -290,7 +277,7 @@ icon_state = "packet_medium" /obj/item/chems/condiment/small/packet/honey/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/sugar, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/capsaicin name = "hot sauce packet" @@ -298,7 +285,7 @@ icon_state = "packet_small_red" /obj/item/chems/condiment/small/packet/capsaicin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/capsaicin, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/capsaicin, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/ketchup name = "ketchup packet" @@ -306,7 +293,7 @@ icon_state = "packet_small_red" /obj/item/chems/condiment/small/packet/ketchup/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/ketchup, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/ketchup, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/mayo name = "mayonnaise packet" @@ -314,7 +301,7 @@ icon_state = "packet_small_white" /obj/item/chems/condiment/small/packet/mayo/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/mayo, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/mayo, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/soy name = "soy sauce packet" @@ -322,56 +309,56 @@ icon_state = "packet_small_black" /obj/item/chems/condiment/small/packet/soy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/soysauce, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/soysauce, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/coffee name = "instant coffee powder packet" desc = "Contains 5u of instant coffee powder. Mix with 25u of water." /obj/item/chems/condiment/small/packet/coffee/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/coffee/instant, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/coffee/instant, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/tea name = "instant tea powder packet" desc = "Contains 5u of instant black tea powder. Mix with 25u of water." /obj/item/chems/condiment/small/packet/tea/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/tea/instant, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/tea/instant, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/cocoa name = "cocoa powder packet" desc = "Contains 5u of cocoa powder. Mix with 25u of water and heat." /obj/item/chems/condiment/small/packet/cocoa/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/coco, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/coco, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/grape name = "grape juice powder packet" desc = "Contains 5u of powdered grape juice. Mix with 15u of water." /obj/item/chems/condiment/small/packet/grape/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/instantjuice/grape, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/instantjuice/grape, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/orange name = "orange juice powder packet" desc = "Contains 5u of powdered orange juice. Mix with 15u of water." /obj/item/chems/condiment/small/packet/orange/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/instantjuice/orange, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/instantjuice/orange, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/watermelon name = "watermelon juice powder packet" desc = "Contains 5u of powdered watermelon juice. Mix with 15u of water." /obj/item/chems/condiment/small/packet/watermelon/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/instantjuice/watermelon, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/instantjuice/watermelon, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/apple name = "apple juice powder packet" desc = "Contains 5u of powdered apple juice. Mix with 15u of water." /obj/item/chems/condiment/small/packet/apple/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/instantjuice/apple, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/instantjuice/apple, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/protein name = "protein powder packet" @@ -379,38 +366,38 @@ icon_state = "packet_medium" /obj/item/chems/condiment/small/packet/protein/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, reagents.maximum_volume/2) + add_to_reagents(/decl/material/liquid/nutriment/protein, reagents.maximum_volume/2) /obj/item/chems/condiment/small/packet/crayon name = "crayon powder packet" desc = "Contains 10u of powdered crayon. Mix with 30u of water." /obj/item/chems/condiment/small/packet/crayon/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/red/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/red, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/red, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/orange/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/orange, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/orange, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/yellow/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/yellow, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/yellow, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/green/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/green, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/green, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/blue/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/blue, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/blue, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/purple/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/purple, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/purple, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/grey/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/grey, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/grey, reagents.maximum_volume) /obj/item/chems/condiment/small/packet/crayon/brown/populate_reagents() - reagents.add_reagent(/decl/material/liquid/pigment/brown, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/pigment/brown, reagents.maximum_volume) //End of MRE stuff. @@ -423,7 +410,7 @@ randpixel = 10 /obj/item/chems/condiment/flour/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment/flour, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nutriment/flour, reagents.maximum_volume) /obj/item/chems/condiment/flour/update_container_name() return @@ -449,7 +436,7 @@ randpixel = 10 /obj/item/chems/condiment/large/salt/populate_reagents() - reagents.add_reagent(/decl/material/solid/sodiumchloride, reagents.maximum_volume) + add_to_reagents(/decl/material/solid/sodiumchloride, reagents.maximum_volume) /obj/item/chems/condiment/large/salt/update_container_name() return diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm index bfa2cc737ca..4ce3f402e3f 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm @@ -12,32 +12,34 @@ var/global/const/DRINK_ICON_NOISY = "noise" icon_state = null base_icon = "square" // Base icon name /// The icon state prefix used for overlay/addon sprites. If unset, defaults to base_icon. - var/overlay_base_icon = null filling_states = @"[20,40,60,80,100]" volume = 30 material = /decl/material/solid/glass - drop_sound = 'sound/foley/bottledrop1.ogg' pickup_sound = 'sound/foley/bottlepickup1.ogg' - - var/list/extras = list() // List of extras. Two extras maximum - - var/rim_pos // Position of the rim for fruit slices. list(y, x_left, x_right) - var/filling_overlayed //if filling should go on top of the icon (e.g. opaque cups) - var/static/list/filling_icons_cache = list() - - center_of_mass =@"{'x':16,'y':9}" - + center_of_mass =@'{"x":16,"y":9}' amount_per_transfer_from_this = 5 possible_transfer_amounts = @"[5,10,15,30]" atom_flags = ATOM_FLAG_OPEN_CONTAINER presentation_flags = PRESENTATION_FLAG_NAME | PRESENTATION_FLAG_DESC temperature_coefficient = 4 - obj_flags = OBJ_FLAG_HOLLOW + w_class = ITEM_SIZE_SMALL + var/overlay_base_icon = null + var/list/extras = list() // List of extras. Two extras maximum + var/rim_pos // Position of the rim for fruit slices. list(y, x_left, x_right) + var/filling_overlayed //if filling should go on top of the icon (e.g. opaque cups) + var/static/list/filling_icons_cache = list() var/custom_name var/custom_desc +// Reverse the matter effect of the hollow flag, keep the force effect. +// Glasses are so tiny that their effective matter is ten times lower than forks/knives due to OBJ_FLAG_HOLLOW. +/obj/item/chems/drinks/glass2/get_matter_amount_modifier() + . = ..() + if(obj_flags & OBJ_FLAG_HOLLOW) + . /= HOLLOW_OBJECT_MATTER_MULTIPLIER + /obj/item/chems/drinks/glass2/examine(mob/M) . = ..() @@ -107,16 +109,15 @@ var/global/const/DRINK_ICON_NOISY = "noise" . = custom_desc || ..() /obj/item/chems/drinks/glass2/on_reagent_change() - temperature_coefficient = 4 / max(1, reagents.total_volume) + temperature_coefficient = 4 / max(1, reagents?.total_volume) ..() /obj/item/chems/drinks/glass2/proc/can_add_extra(obj/item/glass_extra/GE) if(!("[overlay_base_icon]_[GE.glass_addition]left" in icon_states(icon))) - return 0 + return FALSE if(!("[overlay_base_icon]_[GE.glass_addition]right" in icon_states(icon))) - return 0 - - return 1 + return FALSE + return TRUE /obj/item/chems/drinks/glass2/examine(mob/user, distance) . = ..() @@ -213,7 +214,7 @@ var/global/const/DRINK_ICON_NOISY = "noise" side = "right" /obj/item/chems/drinks/glass2/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/kitchen/utensil/spoon)) + if(istype(W, /obj/item/utensil/spoon)) if(user.a_intent == I_HURT) user.visible_message("[user] bashes \the [src] with a spoon, shattering it to pieces! What a rube.") playsound(src, "shatter", 30, 1) diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm index b66c69e011e..73c3ca3fce8 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm @@ -8,7 +8,7 @@ filling_states = @"[20,40,60,80,100]" volume = 30 possible_transfer_amounts = @"[5,10,15,30]" - rim_pos = @"{'y':23,'x_left':13,'x_right':20}" + rim_pos = @'{"y":23,"x_left":13,"x_right":20}' /obj/item/chems/drinks/glass2/rocks name = "rocks glass" @@ -20,7 +20,7 @@ filling_states = @"[25,50,75,100]" volume = 20 possible_transfer_amounts = @"[5,10,20]" - rim_pos = @"{'y':21,'x_left':10,'x_right':23}" + rim_pos = @'{"y":21,"x_left":10,"x_right":23}' /obj/item/chems/drinks/glass2/shake name = "sherry glass" @@ -32,7 +32,7 @@ filling_states = @"[25,50,75,100]" volume = 30 possible_transfer_amounts = @"[5,10,15,30]" - rim_pos = @"{'y':25,'x_left':13,'x_right':21}" + rim_pos = @'{"y":25,"x_left":13,"x_right":21}' /obj/item/chems/drinks/glass2/cocktail name = "cocktail glass" @@ -44,7 +44,7 @@ filling_states = @"[33,66,100]" volume = 15 possible_transfer_amounts = @"[5,10,15]" - rim_pos = @"{'y':22,'x_left':13,'x_right':21}" + rim_pos = @'{"y":22,"x_left":13,"x_right":21}' /obj/item/chems/drinks/glass2/shot name = "shot glass" @@ -57,7 +57,7 @@ volume = 5 material = /decl/material/solid/glass possible_transfer_amounts = @"[1,2,5]" - rim_pos = @"{'y':17,'x_left':13,'x_right':21}" + rim_pos = @'{"y":17,"x_left":13,"x_right":21}' /obj/item/chems/drinks/glass2/pint name = "pint glass" @@ -69,7 +69,7 @@ volume = 60 material = /decl/material/solid/glass possible_transfer_amounts = @"[5,10,15,30,60]" - rim_pos = @"{'y':25,'x_left':12,'x_right':21}" + rim_pos = @'{"y":25,"x_left":12,"x_right":21}' /obj/item/chems/drinks/glass2/mug name = "glass mug" @@ -81,7 +81,7 @@ filling_states = @"[25,50,75,100]" volume = 40 possible_transfer_amounts = @"[5,10,20,40]" - rim_pos = @"{'y':22,'x_left':12,'x_right':20}" + rim_pos = @'{"y":22,"x_left":12,"x_right":20}' /obj/item/chems/drinks/glass2/wine name = "wine glass" @@ -93,7 +93,7 @@ filling_states = @"[20,40,60,80,100]" volume = 25 possible_transfer_amounts = @"[5,10,15,25]" - rim_pos = @"{'y':25,'x_left':12,'x_right':21}" + rim_pos = @'{"y":25,"x_left":12,"x_right":21}' /obj/item/chems/drinks/glass2/flute name = "flute glass" @@ -105,7 +105,7 @@ volume = 25 filling_states = @"[20,40,60,80,100]" possible_transfer_amounts = @"[5,10,15,25]" - rim_pos = @"{'y':24,'x_left':13,'x_right':19}" + rim_pos = @'{"y":24,"x_left":13,"x_right":19}' /obj/item/chems/drinks/glass2/carafe name = "pitcher" @@ -118,8 +118,8 @@ volume = 120 material = /decl/material/solid/glass possible_transfer_amounts = @"[5,10,15,30,60,120]" - rim_pos = @"{'y':26,'x_left':12,'x_right':21}" - center_of_mass = @"{'x':16,'y':7}" + rim_pos = @'{"y":26,"x_left":12,"x_right":21}' + center_of_mass = @'{"x":16,"y":7}' /obj/item/chems/drinks/glass2/coffeecup name = "coffee cup" @@ -128,13 +128,14 @@ icon_state = "coffeecup" item_state = "coffee" volume = 30 - center_of_mass = @"{'x':15,'y':13}" + center_of_mass = @'{"x":15,"y":13}' filling_states = @"[40,80,100]" base_name = "cup" base_icon = "coffeecup" overlay_base_icon = "coffeecup" // so that subtypes work properly - rim_pos = @"{'y':22,'x_left':12,'x_right':20}" + rim_pos = @'{"y":22,"x_left":12,"x_right":20}' filling_overlayed = TRUE + material = /decl/material/solid/stone/ceramic /obj/item/chems/drinks/glass2/coffeecup/black name = "black coffee cup" @@ -172,7 +173,7 @@ base_name = "#1 monkey cup" /obj/item/chems/drinks/glass2/coffeecup/punitelli/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/banana, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/banana, reagents.maximum_volume) /obj/item/chems/drinks/glass2/coffeecup/rainbow name = "rainbow coffee cup" @@ -182,13 +183,10 @@ base_name = "rainbow cup" /obj/item/chems/drinks/glass2/coffeecup/metal - name = "metal coffee cup" desc = "A metal coffee cup. You're not sure which metal." base_icon = "coffeecup_metal" icon_state = "coffeecup_metal" - base_name = "metal cup" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - obj_flags = OBJ_FLAG_CONDUCTIBLE + material = /decl/material/solid/metal/stainlesssteel /obj/item/chems/drinks/glass2/coffeecup/STC name = "\improper ICCG coffee cup" @@ -217,7 +215,7 @@ icon = 'icons/obj/drink_glasses/coffecup_tall.dmi' icon_state = "coffeecup_tall" volume = 60 - center_of_mass = @"{'x':15,'y':19}" + center_of_mass = @'{"x":15,"y":19}' filling_states = @"[50,70,90,100]" base_name = "tall cup" base_icon = "coffeecup_tall" diff --git a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm index 9bd2c837869..af76602181b 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm @@ -38,8 +38,8 @@ ) /obj/item/chems/drinks/glass2/fitnessflask/proteinshake/populate_reagents() - reagents.add_reagent(/decl/material/liquid/nutriment, 30) - reagents.add_reagent(/decl/material/solid/metal/iron, 10) - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 15) - reagents.add_reagent(/decl/material/liquid/water, 45) + add_to_reagents(/decl/material/liquid/nutriment, 30) + add_to_reagents(/decl/material/solid/metal/iron, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 15) + add_to_reagents(/decl/material/liquid/water, 45) diff --git a/code/modules/reagents/reagent_containers/drinks.dm b/code/modules/reagents/reagent_containers/drinks.dm index 13aa0a4e7f4..165a040902e 100644 --- a/code/modules/reagents/reagent_containers/drinks.dm +++ b/code/modules/reagents/reagent_containers/drinks.dm @@ -23,76 +23,60 @@ . = ..() /obj/item/chems/drinks/dragged_onto(var/mob/user) - attack_self(user) + return attack_self(user) /obj/item/chems/drinks/attack_self(mob/user) if(!ATOM_IS_OPEN_CONTAINER(src)) open(user) - return - attack(user, user) + else if(is_edible(user)) + attack(user, user) + else + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE /obj/item/chems/drinks/proc/open(mob/user) - playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) - to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!")) - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - -/obj/item/chems/drinks/attack(mob/M, mob/user, def_zone) - if(force && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT) - return ..() - if(standard_feed_mob(user, M)) - return - return 0 + if(!ATOM_IS_OPEN_CONTAINER(src)) + playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) + to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!")) + atom_flags |= ATOM_FLAG_OPEN_CONTAINER + return TRUE + return FALSE -/obj/item/chems/drinks/afterattack(obj/target, mob/user, proximity) - if(!proximity) return +/obj/item/chems/drinks/proc/do_open_check(mob/user) + if(!ATOM_IS_OPEN_CONTAINER(src)) + to_chat(user, SPAN_NOTICE("You need to open \the [src]!")) + return FALSE + return TRUE +/obj/item/chems/drinks/afterattack(obj/target, mob/user, proximity) + if(!proximity) + return if(standard_dispenser_refill(user, target)) return if(standard_pour_into(user, target)) return return ..() -/obj/item/chems/drinks/standard_feed_mob(var/mob/user, var/mob/target) - if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() - /obj/item/chems/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) - if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() + return do_open_check(user) && ..() /obj/item/chems/drinks/standard_pour_into(var/mob/user, var/atom/target) - if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() - -/obj/item/chems/drinks/self_feed_message(var/mob/user) - to_chat(user, "You swallow a gulp from \the [src].") - if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink)) - for(var/R in reagents.reagent_volumes) - user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R) - -/obj/item/chems/drinks/feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) + return do_open_check(user) && ..() /obj/item/chems/drinks/examine(mob/user, distance) . = ..() if(distance > 1) return if(!reagents || reagents.total_volume == 0) - to_chat(user, "\The [src] is empty!") + to_chat(user, SPAN_NOTICE("\The [src] is empty!")) else if (reagents.total_volume <= volume * 0.25) - to_chat(user, "\The [src] is almost empty!") + to_chat(user, SPAN_NOTICE("\The [src] is almost empty!")) else if (reagents.total_volume <= volume * 0.66) - to_chat(user, "\The [src] is half full!") + to_chat(user, SPAN_NOTICE("\The [src] is half full!")) else if (reagents.total_volume <= volume * 0.90) - to_chat(user, "\The [src] is almost full!") + to_chat(user, SPAN_NOTICE("\The [src] is almost full!")) else - to_chat(user, "\The [src] is full!") + to_chat(user, SPAN_NOTICE("\The [src] is full!")) /obj/item/chems/drinks/proc/get_filling_state() var/percent = round((reagents.total_volume / volume) * 100) @@ -105,9 +89,8 @@ /obj/item/chems/drinks/on_update_icon() . = ..() - if(LAZYLEN(reagents.reagent_volumes)) - if(filling_states) - add_overlay(overlay_image(icon, "[base_icon][get_filling_state()]", reagents.get_color())) + if(LAZYLEN(reagents?.reagent_volumes) && filling_states) + add_overlay(overlay_image(icon, "[base_icon][get_filling_state()]", reagents.get_color())) //////////////////////////////////////////////////////////////////////////////// @@ -138,20 +121,20 @@ desc = "It's milk. White and nutritious goodness!" icon_state = "milk" item_state = "carton" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' /obj/item/chems/drinks/milk/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/milk, reagents.maximum_volume) /obj/item/chems/drinks/soymilk name = "soymilk carton" desc = "It's soy milk. White and nutritious goodness!" icon_state = "soymilk" item_state = "carton" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' /obj/item/chems/drinks/soymilk/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk/soymilk, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/milk/soymilk, reagents.maximum_volume) /obj/item/chems/drinks/milk/smallcarton name = "small milk carton" @@ -159,52 +142,52 @@ icon_state = "mini-milk" /obj/item/chems/drinks/milk/smallcarton/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/milk, reagents.maximum_volume) /obj/item/chems/drinks/milk/smallcarton/chocolate name = "small chocolate milk carton" desc = "It's milk! This one is in delicious chocolate flavour." /obj/item/chems/drinks/milk/smallcarton/chocolate/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk/chocolate, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/milk/chocolate, reagents.maximum_volume) /obj/item/chems/drinks/coffee name = "\improper Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" - center_of_mass = @"{'x':15,'y':10}" + center_of_mass = @'{"x":15,"y":10}' /obj/item/chems/drinks/coffee/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/coffee, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/coffee, reagents.maximum_volume) /obj/item/chems/drinks/ice name = "cup of ice" desc = "Careful, cold ice, do not chew." icon_state = "coffee" - center_of_mass = @"{'x':15,'y':10}" + center_of_mass = @'{"x":15,"y":10}' /obj/item/chems/drinks/ice/populate_reagents() - reagents.add_reagent(/decl/material/solid/ice, reagents.maximum_volume) + add_to_reagents(/decl/material/solid/ice, reagents.maximum_volume) /obj/item/chems/drinks/h_chocolate name = "cup of hot cocoa" desc = "A tall plastic cup of creamy hot chocolate." icon_state = "coffee" item_state = "coffee" - center_of_mass = @"{'x':15,'y':13}" + center_of_mass = @'{"x":15,"y":13}' /obj/item/chems/drinks/h_chocolate/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/hot_coco, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/hot_coco, reagents.maximum_volume) /obj/item/chems/drinks/dry_ramen name = "cup ramen" gender = PLURAL desc = "Just add 10ml water, self heats! A taste that reminds you of your school years." icon_state = "ramen" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' /obj/item/chems/drinks/dry_ramen/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/dry_ramen, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/dry_ramen, reagents.maximum_volume) /obj/item/chems/drinks/sillycup name = "paper cup" @@ -212,11 +195,11 @@ icon_state = "water_cup_e" possible_transfer_amounts = null volume = 10 - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' /obj/item/chems/drinks/sillycup/on_update_icon() . = ..() - if(reagents.total_volume) + if(reagents?.total_volume) icon_state = "water_cup" else icon_state = "water_cup_e" @@ -234,7 +217,7 @@ item_state = "teapot" amount_per_transfer_from_this = 10 volume = 120 - center_of_mass = @"{'x':17,'y':7}" + center_of_mass = @'{"x":17,"y":7}' material = /decl/material/solid/stone/ceramic /obj/item/chems/drinks/pitcher @@ -243,7 +226,7 @@ icon_state = "pitcher" volume = 120 amount_per_transfer_from_this = 10 - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' filling_states = @"[15,30,50,70,85,100]" base_icon = "pitcher" material = /decl/material/solid/metal/stainlesssteel @@ -253,7 +236,7 @@ desc = "A metal flask belonging to the captain." icon_state = "flask" volume = 60 - center_of_mass = @"{'x':17,'y':7}" + center_of_mass = @'{"x":17,"y":7}' /obj/item/chems/drinks/flask/shiny name = "shiny flask" @@ -270,21 +253,21 @@ desc = "A metal flask with a leather band and golden badge belonging to the detective." icon_state = "detflask" volume = 60 - center_of_mass = @"{'x':17,'y':8}" + center_of_mass = @'{"x":17,"y":8}' /obj/item/chems/drinks/flask/barflask name = "flask" desc = "For those who can't be bothered to hang out at the bar to drink." icon_state = "barflask" volume = 60 - center_of_mass = @"{'x':17,'y':7}" + center_of_mass = @'{"x":17,"y":7}' /obj/item/chems/drinks/flask/vacuumflask name = "vacuum flask" desc = "Keeping your drinks at the perfect temperature since 1892." icon_state = "vacuumflask" volume = 60 - center_of_mass = @"{'x':15,'y':4}" + center_of_mass = @'{"x":15,"y":4}' //tea and tea accessories /obj/item/chems/drinks/tea @@ -292,7 +275,7 @@ desc = "A tall plastic cup full of the concept and ideal of tea." icon_state = "coffee" item_state = "coffee" - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' filling_states = @"[100]" base_name = "cup" base_icon = "cup" @@ -304,19 +287,19 @@ desc = "A tall plastic cup of hot black tea." /obj/item/chems/drinks/tea/black/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/tea/black, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/tea/black, reagents.maximum_volume) /obj/item/chems/drinks/tea/green name = "cup of green tea" desc = "A tall plastic cup of hot green tea." /obj/item/chems/drinks/tea/green/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/tea/green, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/tea/green, reagents.maximum_volume) /obj/item/chems/drinks/tea/chai name = "cup of chai tea" desc = "A tall plastic cup of hot chai tea." /obj/item/chems/drinks/tea/chai/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/tea/chai, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/tea/chai, reagents.maximum_volume) diff --git a/code/modules/reagents/reagent_containers/drinks/bottle.dm b/code/modules/reagents/reagent_containers/drinks/bottle.dm index 194a207934a..c96ca01eaab 100644 --- a/code/modules/reagents/reagent_containers/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/drinks/bottle.dm @@ -98,22 +98,25 @@ return B /obj/item/chems/drinks/bottle/attackby(obj/item/W, mob/user) - if(!rag && istype(W, /obj/item/chems/glass/rag)) - insert_rag(W, user) - return - if(rag && W.isflamesource()) - rag.attackby(W, user) - return - ..() + if(!rag) + if(istype(W, /obj/item/chems/glass/rag)) + insert_rag(W, user) + return TRUE + else if(W.isflamesource()) + return rag.attackby(W, user) + return ..() /obj/item/chems/drinks/bottle/attack_self(mob/user) - if(rag) - remove_rag(user) - else - ..() + return rag ? remove_rag(user) : ..() /obj/item/chems/drinks/bottle/proc/insert_rag(obj/item/chems/glass/rag/R, mob/user) - if(!material?.type != /decl/material/solid/glass || rag) return + if(material?.type != /decl/material/solid/glass) + to_chat(user, SPAN_WARNING("\The [src] isn't made of glass, you can't make a good Molotov with it.")) + return TRUE + + if(rag) + to_chat(user, SPAN_WARNING("\The [src] already has \a [rag] stuffed into it.")) + return TRUE if(user.try_unequip(R)) to_chat(user, SPAN_NOTICE("You stuff [R] into [src].")) @@ -132,6 +135,7 @@ atom_flags &= ~ATOM_FLAG_OPEN_CONTAINER update_icon() + return TRUE /obj/item/chems/drinks/bottle/proc/remove_rag(mob/user) if(!rag) return @@ -248,254 +252,254 @@ name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." icon_state = "ginbottle" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/gin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/gin, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/gin, reagents.maximum_volume) /obj/item/chems/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." icon_state = "whiskeybottle" - center_of_mass = @"{'x':16,'y':3}" + center_of_mass = @'{"x":16,"y":3}' /obj/item/chems/drinks/bottle/whiskey/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/whiskey, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/whiskey, reagents.maximum_volume) /obj/item/chems/drinks/bottle/agedwhiskey name = "aged whiskey" desc = "This rich, smooth, hideously expensive beverage was aged for decades." icon_state = "whiskeybottle2" - center_of_mass = @"{'x':16,'y':3}" + center_of_mass = @'{"x":16,"y":3}' /obj/item/chems/drinks/bottle/agedwhiskey/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/aged_whiskey, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/aged_whiskey, reagents.maximum_volume) /obj/item/chems/drinks/bottle/vodka name = "Tunguska Triple Distilled" desc = "Aah, vodka. Prime choice of drink AND fuel by Indies around the galaxy." icon_state = "vodkabottle" - center_of_mass = @"{'x':17,'y':3}" + center_of_mass = @'{"x":17,"y":3}' /obj/item/chems/drinks/bottle/vodka/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume) /obj/item/chems/drinks/bottle/tequila name = "Caccavo Guaranteed Quality tequila" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" icon_state = "tequilabottle" - center_of_mass = @"{'x':16,'y':3}" + center_of_mass = @'{"x":16,"y":3}' /obj/item/chems/drinks/bottle/tequila/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume) /obj/item/chems/drinks/bottle/patron name = "Wrapp Artiste Patron" desc = "Silver laced tequila, served in space night clubs across the galaxy." icon_state = "patronbottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/patron/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume - 5) - reagents.add_reagent(/decl/material/solid/metal/silver, 5) + add_to_reagents(/decl/material/liquid/ethanol/tequila, reagents.maximum_volume - 5) + add_to_reagents(/decl/material/solid/metal/silver, 5) /obj/item/chems/drinks/bottle/rum name = "Captain Pete's Cuban Spiced Rum" desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." icon_state = "rumbottle" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' /obj/item/chems/drinks/bottle/rum/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/rum, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/rum, reagents.maximum_volume) /obj/item/chems/drinks/bottle/holywater name = "Flask of Holy Water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" - center_of_mass = @"{'x':17,'y':10}" + center_of_mass = @'{"x":17,"y":10}' /obj/item/chems/drinks/bottle/holywater/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume, list("holy" = TRUE)) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume, list("holy" = TRUE)) /obj/item/chems/drinks/bottle/vermouth name = "Goldeneye Vermouth" desc = "Sweet, sweet dryness~" icon_state = "vermouthbottle" - center_of_mass = @"{'x':17,'y':3}" + center_of_mass = @'{"x":17,"y":3}' /obj/item/chems/drinks/bottle/vermouth/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/vermouth, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/vermouth, reagents.maximum_volume) /obj/item/chems/drinks/bottle/kahlua name = "Robert Robust's Coffee Liqueur" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK!" icon_state = "kahluabottle" - center_of_mass = @"{'x':17,'y':3}" + center_of_mass = @'{"x":17,"y":3}' /obj/item/chems/drinks/bottle/kahlua/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/coffee, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/coffee, reagents.maximum_volume) /obj/item/chems/drinks/bottle/goldschlager name = "College Girl Goldschlager" desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." icon_state = "goldschlagerbottle" - center_of_mass = @"{'x':15,'y':3}" + center_of_mass = @'{"x":15,"y":3}' /obj/item/chems/drinks/bottle/goldschlager/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume - 5) - reagents.add_reagent(/decl/material/solid/metal/gold, 5) + add_to_reagents(/decl/material/liquid/ethanol/vodka, reagents.maximum_volume - 5) + add_to_reagents(/decl/material/solid/metal/gold, 5) /obj/item/chems/drinks/bottle/cognac name = "Chateau De Baton Premium Cognac" desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." icon_state = "cognacbottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/cognac/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/cognac, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/cognac, reagents.maximum_volume) /obj/item/chems/drinks/bottle/wine name = "Doublebeard Bearded Special Wine" desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/wine/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/wine, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/wine, reagents.maximum_volume) /obj/item/chems/drinks/bottle/absinthe name = "Jailbreaker Verte" desc = "One sip of this and you just know you're gonna have a good time." icon_state = "absinthebottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/absinthe/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/absinthe, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/absinthe, reagents.maximum_volume) /obj/item/chems/drinks/bottle/melonliquor name = "Emeraldine Melon Liquor" desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light." icon_state = "alco-green" //Placeholder. - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/melonliquor/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/melonliquor, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/melonliquor, reagents.maximum_volume) /obj/item/chems/drinks/bottle/bluecuracao name = "Miss Blue Curacao" desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic." icon_state = "alco-blue" //Placeholder. - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/bluecuracao/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/bluecuracao, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/bluecuracao, reagents.maximum_volume) /obj/item/chems/drinks/bottle/herbal name = "Liqueur d'Herbe" desc = "A bottle of the seventh-finest herbal liquor sold under a generic name in the galaxy. The back label has a load of guff about the monks who traditionally made this particular variety." icon_state = "herbal" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/herbal/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/herbal, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/herbal, reagents.maximum_volume) /obj/item/chems/drinks/bottle/grenadine name = "Briar Rose Grenadine Syrup" desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." icon_state = "grenadinebottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/grenadine/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/grenadine, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/grenadine, reagents.maximum_volume) /obj/item/chems/drinks/bottle/cola name = "\improper Space Cola" desc = "Cola. in space." icon_state = "colabottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/cola/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/cola, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/cola, reagents.maximum_volume) /obj/item/chems/drinks/bottle/space_up name = "\improper Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up_bottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/space_up/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/lemonade, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/lemonade, reagents.maximum_volume) /obj/item/chems/drinks/bottle/space_mountain_wind name = "\improper Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind_bottle" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/space_mountain_wind/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume) /obj/item/chems/drinks/bottle/pwine name = "Warlock's Velvet" desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" icon_state = "pwinebottle" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/pwine/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/pwine, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/pwine, reagents.maximum_volume) /obj/item/chems/drinks/bottle/sake name = "Takeo Sadow's Combined Sake" desc = "A bottle of the highest-grade sake allowed for import." icon_state = "sake" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/sake/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/sake, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/sake, reagents.maximum_volume) /obj/item/chems/drinks/bottle/champagne name = "Murcelano Vinyard's Premium Champagne" desc = "The regal drink of celebrities and royalty." icon_state = "champagne" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/champagne/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume) /obj/item/chems/drinks/bottle/jagermeister name = "Kaisermeister Deluxe" desc = "Jagermeister. This drink just demands a party." icon_state = "herbal" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/bottle/jagermeister/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/jagermeister, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/jagermeister, reagents.maximum_volume) //////////////////////////PREMIUM ALCOHOL /////////////////////// /obj/item/chems/drinks/bottle/premiumvodka name = "Four Stripes Quadruple Distilled" desc = "Premium distilled vodka imported directly from the Gilgamesh Colonial Confederation." icon_state = "premiumvodka" - center_of_mass = @"{'x':17,'y':3}" + center_of_mass = @'{"x":17,"y":3}' /obj/item/chems/drinks/bottle/premiumvodka/populate_reagents() var/namepick = pick("Four Stripes","Gilgamesh","Novaya Zemlya","Indie","STS-35") var/typepick = pick("Absolut","Gold","Quadruple Distilled","Platinum","Standard") name = "[namepick] [typepick]" - reagents.add_reagent(/decl/material/liquid/ethanol/vodka/premium, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/vodka/premium, reagents.maximum_volume) /obj/item/chems/drinks/bottle/premiumwine name = "Uve De Blanc" desc = "You feel pretentious just looking at it." icon_state = "premiumwine" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' /obj/item/chems/drinks/bottle/premiumwine/populate_reagents() var/namepick = pick("Calumont","Sciacchemont","Recioto","Torcalota") var/agedyear = rand(global.using_map.game_year - 150, global.using_map.game_year) name = "Chateau [namepick] De Blanc" desc += " This bottle is marked as [agedyear] Vintage." - reagents.add_reagent(/decl/material/liquid/ethanol/wine/premium, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/wine/premium, reagents.maximum_volume) //////////////////////////JUICES AND STUFF /////////////////////// @@ -504,7 +508,7 @@ desc = "Full of vitamins and deliciousness!" icon_state = "orangejuice" item_state = "carton" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' material = /decl/material/solid/organic/cardboard matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY @@ -513,14 +517,14 @@ pickup_sound = 'sound/foley/paperpickup2.ogg' /obj/item/chems/drinks/bottle/orangejuice/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/orange, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/orange, reagents.maximum_volume) /obj/item/chems/drinks/bottle/cream name = "Milk Cream" desc = "It's cream. Made from milk. What else did you think you'd find in there?" icon_state = "cream" item_state = "carton" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' material = /decl/material/solid/organic/cardboard matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY @@ -529,14 +533,14 @@ pickup_sound = 'sound/foley/paperpickup2.ogg' /obj/item/chems/drinks/bottle/cream/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk/cream, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/milk/cream, reagents.maximum_volume) /obj/item/chems/drinks/bottle/tomatojuice name = "Tomato Juice" desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." icon_state = "tomatojuice" item_state = "carton" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' material = /decl/material/solid/organic/cardboard matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY @@ -545,14 +549,14 @@ pickup_sound = 'sound/foley/paperpickup2.ogg' /obj/item/chems/drinks/bottle/tomatojuice/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, reagents.maximum_volume) /obj/item/chems/drinks/bottle/limejuice name = "Lime Juice" desc = "Sweet-sour goodness." icon_state = "limejuice" item_state = "carton" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' material = /decl/material/solid/organic/cardboard matter = list( /decl/material/solid/organic/plastic = MATTER_AMOUNT_SECONDARY @@ -561,7 +565,7 @@ pickup_sound = 'sound/foley/paperpickup2.ogg' /obj/item/chems/drinks/bottle/limejuice/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/lime, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/lime, reagents.maximum_volume) //Small bottles /obj/item/chems/drinks/bottle/small @@ -574,26 +578,26 @@ name = "space beer" desc = "Contains only water, malt and hops." icon_state = "beer" - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' /obj/item/chems/drinks/bottle/small/beer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/beer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/beer, reagents.maximum_volume) /obj/item/chems/drinks/bottle/small/ale name = "\improper Magm-Ale" desc = "A true dorf's drink of choice." icon_state = "alebottle" item_state = "beer" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/bottle/small/ale/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/ale, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/ale, reagents.maximum_volume) /obj/item/chems/drinks/bottle/small/gingerbeer name = "Ginger Beer" desc = "A delicious non-alcoholic beverage enjoyed across Sol space." icon_state = "gingerbeer" - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' /obj/item/chems/drinks/bottle/small/gingerbeer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/gingerbeer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/gingerbeer, reagents.maximum_volume) diff --git a/code/modules/reagents/reagent_containers/drinks/cans.dm b/code/modules/reagents/reagent_containers/drinks/cans.dm index 6071e79e11c..aaef7b3b537 100644 --- a/code/modules/reagents/reagent_containers/drinks/cans.dm +++ b/code/modules/reagents/reagent_containers/drinks/cans.dm @@ -16,20 +16,20 @@ name = "\improper Space Cola" desc = "Cola. in space." icon_state = "cola" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/cola/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/cola, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/cola, reagents.maximum_volume) /obj/item/chems/drinks/cans/waterbottle name = "bottled water" desc = "Pure drinking water, imported from the Martian poles." icon_state = "waterbottle" - center_of_mass = @"{'x':15,'y':8}" + center_of_mass = @'{"x":15,"y":8}' material = /decl/material/solid/organic/plastic /obj/item/chems/drinks/cans/waterbottle/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) /obj/item/chems/drinks/cans/waterbottle/open(mob/user) playsound(loc,'sound/effects/bonebreak1.ogg', rand(10,50), 1) @@ -40,101 +40,101 @@ name = "\improper Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/space_mountain_wind/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/citrussoda, reagents.maximum_volume) /obj/item/chems/drinks/cans/thirteenloko name = "\improper Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly." icon_state = "thirteen_loko" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' /obj/item/chems/drinks/cans/thirteenloko/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/thirteenloko, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/thirteenloko, reagents.maximum_volume) /obj/item/chems/drinks/cans/dr_gibb name = "\improper Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/dr_gibb/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/cherrycola, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/cherrycola, reagents.maximum_volume) /obj/item/chems/drinks/cans/starkist name = "\improper Star-Kist" desc = "Can you taste a bit of tuna...?" icon_state = "starkist" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/starkist/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/orangecola, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/orangecola, reagents.maximum_volume) /obj/item/chems/drinks/cans/space_up name = "\improper Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/space_up/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/lemonade, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/lemonade, reagents.maximum_volume) /obj/item/chems/drinks/cans/lemon_lime name = "\improper Lemon-Lime" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/lemon_lime/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/lemon_lime, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/lemon_lime, reagents.maximum_volume) /obj/item/chems/drinks/cans/iced_tea name = "\improper Vrisk Serket Iced Tea" desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" icon_state = "ice_tea_can" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/iced_tea/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/tea/black, reagents.maximum_volume - 5) - reagents.add_reagent(/decl/material/solid/ice, 5) + add_to_reagents(/decl/material/liquid/drink/tea/black, reagents.maximum_volume - 5) + add_to_reagents(/decl/material/solid/ice, 5) /obj/item/chems/drinks/cans/grape_juice name = "\improper Grapel Juice" desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" icon_state = "purple_can" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/grape_juice/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/grape, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/grape, reagents.maximum_volume) /obj/item/chems/drinks/cans/tonic name = "\improper T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/tonic/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/tonic, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/tonic, reagents.maximum_volume) /obj/item/chems/drinks/cans/sodawater name = "soda water" desc = "A can of soda water. Still water's more refreshing cousin." icon_state = "sodawater" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/sodawater/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/sodawater, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/sodawater, reagents.maximum_volume) /obj/item/chems/drinks/cans/beastenergy name = "Beast Energy" desc = "100% pure energy, and 150% pure liver disease." icon_state = "beastenergy" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' /obj/item/chems/drinks/cans/beastenergy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/beastenergy, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/beastenergy, reagents.maximum_volume) //Items exclusive to the BODA machine on deck 4 and wherever else it pops up. First two are a bit jokey. Second two are genuine article. @@ -142,42 +142,42 @@ name = "\improper Red Army Twist!" desc = "A taste of what keeps our glorious nation running! Served as Space Commissariat Stahlin prefers it! Luke warm." icon_state = "syndi_cola_x" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/syndicolax/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/potato, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/potato, reagents.maximum_volume) /obj/item/chems/drinks/cans/artbru name = "\improper Arstotzka Bru" desc = "Just what any bureaucrat needs to get through the day. Keep stamping those papers!" icon_state = "art_bru" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/artbru/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/turnip, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/turnip, reagents.maximum_volume) /obj/item/chems/drinks/cans/syndicola name = "\improper TerraCola" desc = "A can of the only soft drink state approved for the benefit of the people. Served at room temperature regardless of ambient temperatures thanks to innovative Terran insulation technology." icon_state = "syndi_cola" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/syndicola/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume - 5) - reagents.add_reagent(/decl/material/solid/metal/iron, 5) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume - 5) + add_to_reagents(/decl/material/solid/metal/iron, 5) /obj/item/chems/drinks/glass2/square/boda name = "boda" desc = "A tall glass of refreshing Boda!" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/glass2/square/boda/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/sodawater, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/sodawater, reagents.maximum_volume) /obj/item/chems/drinks/glass2/square/bodaplus name = "tri kopeiki sirop boda" desc = "A tall glass of even more refreshing Boda! Now with Sok!" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/glass2/square/bodaplus/populate_reagents() var/reag = pick(list( @@ -191,8 +191,8 @@ /decl/material/liquid/drink/juice/banana, /decl/material/liquid/drink/juice/berry, /decl/material/liquid/drink/juice/watermelon)) - reagents.add_reagent(/decl/material/liquid/drink/sodawater, reagents.maximum_volume / 2) - reagents.add_reagent(reag, reagents.maximum_volume / 2) + add_to_reagents(/decl/material/liquid/drink/sodawater, reagents.maximum_volume / 2) + add_to_reagents(reag, reagents.maximum_volume / 2) //Canned alcohols. @@ -201,16 +201,82 @@ name = "\improper Space Beer" desc = "Now in a can!" icon_state = "beercan" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/speer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/beer/good, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/beer/good, reagents.maximum_volume) /obj/item/chems/drinks/cans/ale name = "\improper Magm-Ale" desc = "Now in a can!" icon_state = "alecan" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' /obj/item/chems/drinks/cans/ale/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/ale, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/ale, reagents.maximum_volume) + +//Fox's Sodas from Legacy Bay: NSV Luna + +/obj/item/chems/drinks/cans/cola_diet + name = "diet space cola" + desc = "Cola... in space! Now with extra self-confidence." + icon_state = "cola-blue" + +/obj/item/chems/drinks/cans/cola_diet/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/diet_cola, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/rootbeer + name = "rocket root beer" + desc = "Blast away with Rocket Root Beer!" + icon_state = "cola-brown" + +/obj/item/chems/drinks/cans/rootbeer/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/rootbeer, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_apple + name = "andromeda apple" + desc = "Look to the stars with Andromeda Apple!" + icon_state = "cola-green" + +/obj/item/chems/drinks/cans/cola_apple/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/apple_soda, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_orange + name = "orbital orange" + desc = "Feel out-of-this-world with Orbital Orange!" + icon_state = "cola-orange" + +/obj/item/chems/drinks/cans/cola_orange/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/orange_soda, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_grape + name = "gravity grape" + desc = "Feel the planetfall with Gravity Grape!" + icon_state = "cola-purple" + +/obj/item/chems/drinks/cans/cola_grape/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/grapesoda, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_lemonlime + name = "citrus star" + desc = "Shoot to space with Citrus Star!" + icon_state = "cola-yellow" + +/obj/item/chems/drinks/cans/cola_lemonlime/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/lemon_lime, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_strawberry + name = "sirius strawberry" + desc = "See stars with Sirius Strawberry!" + icon_state = "cola-pink" + +/obj/item/chems/drinks/cans/cola_strawberry/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/strawberry_soda, reagents.maximum_volume) + +/obj/item/chems/drinks/cans/cola_pork + name = "pork soda" + desc = "Primus sucks!" + icon_state = "cola-pork" + +/obj/item/chems/drinks/cans/cola_pork/populate_reagents() + add_to_reagents(/decl/material/liquid/drink/porksoda, reagents.maximum_volume) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/drinks/champagne.dm b/code/modules/reagents/reagent_containers/drinks/champagne.dm index a0cffe9359c..3a380131da9 100644 --- a/code/modules/reagents/reagent_containers/drinks/champagne.dm +++ b/code/modules/reagents/reagent_containers/drinks/champagne.dm @@ -23,13 +23,13 @@ desc = "Sparkling wine made from exquisite grape varieties by the method of secondary fermentation in a bottle. Bubbling." icon = 'icons/obj/food.dmi' icon_state = "champagne" - center_of_mass = @"{'x':12,'y':5}" + center_of_mass = @'{"x":12,"y":5}' atom_flags = 0 //starts closed var/opening /obj/item/chems/drinks/bottle/champagne/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/champagne, reagents.maximum_volume) /obj/item/chems/drinks/bottle/champagne/open(mob/user) if(ATOM_IS_OPEN_CONTAINER(src)) diff --git a/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm b/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm index 68655dc9ca6..c2517e3b519 100644 --- a/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm +++ b/code/modules/reagents/reagent_containers/drinks/cocktailshaker.dm @@ -5,7 +5,7 @@ amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[5,10,15,25,30,60]" //Professional bartender should be able to transfer as much as needed volume = 120 - center_of_mass = @"{'x':17,'y':10}" + center_of_mass = @'{"x":17,"y":10}' atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT /obj/item/chems/drinks/shaker/attack_self(mob/user) @@ -29,7 +29,7 @@ if(reagents && reagents.total_volume) atom_flags &= ~ATOM_FLAG_NO_REACT HANDLE_REACTIONS(reagents) - addtimer(CALLBACK(src, .proc/stop_react), SSmaterials.wait) + addtimer(CALLBACK(src, PROC_REF(stop_react)), SSmaterials.wait) /obj/item/chems/drinks/shaker/proc/stop_react() atom_flags |= ATOM_FLAG_NO_REACT \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/drinks/jar.dm b/code/modules/reagents/reagent_containers/drinks/jar.dm index afe4051e918..aedbbade98d 100644 --- a/code/modules/reagents/reagent_containers/drinks/jar.dm +++ b/code/modules/reagents/reagent_containers/drinks/jar.dm @@ -7,7 +7,7 @@ desc = "A jar. You're not sure what it's supposed to hold." icon_state = "jar" item_state = "beaker" - center_of_mass = @"{'x':15,'y':8}" + center_of_mass = @'{"x":15,"y":8}' material = /decl/material/solid/glass drop_sound = 'sound/foley/bottledrop1.ogg' pickup_sound = 'sound/foley/bottlepickup1.ogg' diff --git a/code/modules/reagents/reagent_containers/drinks/juicebox.dm b/code/modules/reagents/reagent_containers/drinks/juicebox.dm index 5fc23e36c85..92cbf0ea885 100644 --- a/code/modules/reagents/reagent_containers/drinks/juicebox.dm +++ b/code/modules/reagents/reagent_containers/drinks/juicebox.dm @@ -70,7 +70,7 @@ desc = "A small cardboard juicebox with a cartoon apple on it." /obj/item/chems/drinks/juicebox/apple/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/apple, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/apple, reagents.maximum_volume) /obj/item/chems/drinks/juicebox/apple/Initialize() . = ..() @@ -81,7 +81,7 @@ desc = "A small cardboard juicebox with a cartoon orange on it." /obj/item/chems/drinks/juicebox/orange/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/orange, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/orange, reagents.maximum_volume) /obj/item/chems/drinks/juicebox/orange/Initialize() . = ..() @@ -92,7 +92,7 @@ desc = "A small cardboard juicebox with some cartoon grapes on it." /obj/item/chems/drinks/juicebox/grape/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/grape, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/drink/juice/grape, reagents.maximum_volume) /obj/item/chems/drinks/juicebox/grape/Initialize() . = ..() @@ -112,8 +112,8 @@ /obj/item/chems/drinks/juicebox/sensible_random/proc/juice_it() var/list/drinktypes = decls_repository.get_decl_paths_of_subtype(/decl/material/liquid/drink/juice) var/decl/material/J = pick(drinktypes) - reagents.add_reagent(J, 20) - reagents.add_reagent(pick(drinktypes - J), 5) + add_to_reagents(J, 20) + add_to_reagents(pick(drinktypes - J), 5) return reagents.reagent_volumes /obj/item/chems/drinks/juicebox/sensible_random/populate_reagents() diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 3c522e538f1..00ed01ba7b3 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -62,7 +62,7 @@ return else trans = reagents.splash(target, amount_per_transfer_from_this, max_spill=0) //sprinkling reagents on generic non-mobs. Droppers are very precise - to_chat(user, SPAN_NOTICE("You transfer [trans] units of the solution.")) + to_chat(user, SPAN_NOTICE("You transfer [trans] unit\s of the solution.")) else // Taking from something @@ -76,7 +76,7 @@ var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - to_chat(user, SPAN_NOTICE("You fill the dropper with [trans] units of the solution.")) + to_chat(user, SPAN_NOTICE("You fill the dropper with [trans] unit\s of the solution.")) /obj/item/chems/dropper/update_container_name() return @@ -86,7 +86,7 @@ /obj/item/chems/dropper/on_update_icon() . = ..() - if(reagents.total_volume) + if(reagents?.total_volume) icon_state = "dropper1" else icon_state = "dropper0" diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm index c9ebb7e9ce4..07fd140edb5 100644 --- a/code/modules/reagents/reagent_containers/food.dm +++ b/code/modules/reagents/reagent_containers/food.dm @@ -15,9 +15,11 @@ icon_state = null randpixel = 6 atom_flags = ATOM_FLAG_OPEN_CONTAINER + item_flags = null + material = /decl/material/liquid/nutriment possible_transfer_amounts = null volume = 50 - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' w_class = ITEM_SIZE_SMALL abstract_type = /obj/item/chems/food @@ -33,10 +35,14 @@ var/list/nutriment_desc = list("food" = 1) // List of flavours and flavour strengths. The flavour strength text is determined by the ratio of flavour strengths in the snack. var/list/eat_sound = 'sound/items/eatfood.ogg' var/filling_color = "#ffffff" //Used by sandwiches. - var/trash = null + var/trash + var/obj/item/plate/plate var/list/attack_products //Items you can craft together. Like bomb making, but with food and less screwdrivers. // Uses format list(ingredient = result_type). The ingredient can be a typepath or a kitchen_tag string (used for mobs or plants) +/obj/item/chems/food/can_be_injected_by(var/atom/injector) + return TRUE + /obj/item/chems/food/standard_pour_into(mob/user, atom/target) return FALSE @@ -49,157 +55,66 @@ /obj/item/chems/food/Initialize() .=..() amount_per_transfer_from_this = bitesize - - //Placeholder for effect that trigger on eating that aren't tied to reagents. -/obj/item/chems/food/proc/On_Consume(var/mob/M) - if(isliving(M) && cooked_food) - var/mob/living/eater = M - eater.add_stressor(/datum/stressor/ate_cooked_food, 15 MINUTES) - if(!reagents.total_volume) - M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].") - M.drop_item() - M.update_personal_goal(/datum/goal/achievement/specific_object/food, type) - if(trash) - if(ispath(trash,/obj/item)) - var/obj/item/TrashItem = new trash(get_turf(M)) - M.put_in_hands(TrashItem) - else if(istype(trash,/obj/item)) - M.put_in_hands(trash) - qdel(src) - return + if(ispath(plate)) + plate = new plate(src) /obj/item/chems/food/attack_self(mob/user) - attack(user, user) + if(is_edible(user)) + attack(user, user) + else + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE /obj/item/chems/food/dragged_onto(var/mob/user) - attack(user, user) - -/obj/item/chems/food/self_feed_message(mob/user) - if(!iscarbon(user)) - return ..() - var/mob/living/carbon/C = user - var/fullness = C.get_fullness() - if (fullness <= 50) - to_chat(C, SPAN_WARNING("You hungrily chew out a piece of [src] and gobble it!")) - if (fullness > 50 && fullness <= 150) - to_chat(C, SPAN_NOTICE("You hungrily begin to eat [src].")) - if (fullness > 150 && fullness <= 350) - to_chat(C, SPAN_NOTICE("You take a bite of [src].")) - if (fullness > 350 && fullness <= 550) - to_chat(C, SPAN_NOTICE("You unwillingly chew a bit of [src].")) - -/obj/item/chems/food/feed_sound(mob/user) - if(eat_sound) - playsound(user, pick(eat_sound), rand(10, 50), 1) - -/obj/item/chems/food/standard_feed_mob(mob/user, mob/target) - . = ..() - if(.) - bitecount++ - On_Consume(target) - -/obj/item/chems/food/attack(mob/M, mob/user, def_zone) - if(!reagents || !reagents.total_volume) - to_chat(user, "None of [src] left!") - qdel(src) - return 0 - if(iscarbon(M)) - //TODO: replace with standard_feed_mob() call. - var/mob/living/carbon/C = M - var/fullness = C.get_fullness() - if (fullness > 550) - var/message = C == user ? "You cannot force any more of [src] to go down your throat." : "[user] cannot force anymore of [src] down [M]'s throat." - to_chat(user, SPAN_WARNING(message)) - return 0 - if(standard_feed_mob(user, M)) - return 1 - return 0 + return attack_self(user) /obj/item/chems/food/examine(mob/user, distance) . = ..() if(distance > 1) return + if(plate) + to_chat(user, SPAN_NOTICE("\The [src] has been arranged on \a [plate].")) if (bitecount==0) return else if (bitecount==1) - to_chat(user, "\The [src] was bitten by someone!") + to_chat(user, SPAN_NOTICE("\The [src] was bitten by someone!")) else if (bitecount<=3) - to_chat(user, "\The [src] was bitten [bitecount] time\s!") + to_chat(user, SPAN_NOTICE("\The [src] was bitten [bitecount] time\s!")) else - to_chat(user, "\The [src] was bitten multiple times!") - -/obj/item/chems/food/attackby(obj/item/W, mob/living/user) - if(!istype(user)) - return - if(istype(W,/obj/item/storage)) - ..()// -> item/attackby() - return - // Eating with forks - if(istype(W,/obj/item/kitchen/utensil)) - var/obj/item/kitchen/utensil/U = W - if(U.scoop_food) - if(!U.reagents) - U.create_reagents(5) - - if (U.reagents.total_volume > 0) - to_chat(user, "You already have something on your [U].") - return + to_chat(user, SPAN_NOTICE("\The [src] was bitten multiple times!")) - user.visible_message( \ - "\The [user] scoops up some [src] with \the [U]!", \ - "You scoop up some [src] with \the [U]!" \ - ) +/obj/item/chems/food/attackby(obj/item/W, mob/user) - src.bitecount++ - U.overlays.Cut() - U.loaded = "[src]" - var/image/I = new(U.icon, "loadedfood") - I.color = src.filling_color - U.overlays += I - - if(!reagents) - PRINT_STACK_TRACE("A snack [type] failed to have a reagent holder when attacked with a [W.type]. It was [QDELETED(src) ? "" : "not"] being deleted.") - else - reagents.trans_to_obj(U, min(reagents.total_volume,5)) - if (reagents.total_volume <= 0) - qdel(src) - return + if(istype(W, /obj/item/storage)) + return ..() - if (is_sliceable()) - //these are used to allow hiding edge items in food that is not on a table/tray - var/can_slice_here = isturf(src.loc) && ((locate(/obj/structure/table) in src.loc) || (locate(/obj/machinery/optable) in src.loc) || (locate(/obj/item/storage/tray) in src.loc)) - var/hide_item = !has_edge(W) || !can_slice_here + // Plating food. + if(istype(W, /obj/item/plate)) + var/obj/item/plate/plate = W + plate.try_plate_food(src, user) + return TRUE - if (hide_item) - if (W.w_class >= src.w_class || is_robot_module(W) || istype(W,/obj/item/chems/condiment)) - return - if(!user.try_unequip(W, src)) - return + // Eating with forks + if(user.a_intent == I_HELP && do_utensil_interaction(W, user)) + return TRUE - to_chat(user, "You slip \the [W] inside \the [src].") + // Hiding items inside larger food items. + if(user.a_intent != I_HURT && is_sliceable() && W.w_class < w_class && !is_robot_module(W) && !istype(W, /obj/item/chems/condiment)) + if(user.try_unequip(W, src)) + to_chat(user, SPAN_NOTICE("You slip \the [W] inside \the [src].")) add_fingerprint(user) W.forceMove(src) - return - - if (has_edge(W)) - if (!can_slice_here) - to_chat(user, "You cannot slice \the [src] here! You need a table or at least a tray to do it.") - return + return TRUE - var/slices_lost = 0 - if (W.w_class > ITEM_SIZE_NORMAL) - user.visible_message("\The [user] crudely slices \the [src] with [W]!", "You crudely slice \the [src] with your [W]!") - slices_lost = rand(1,min(1,round(slices_num/2))) - else - user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!") + // Creating food combinations. + if(try_create_combination(W, user)) + return TRUE - var/reagents_per_slice = reagents.total_volume/slices_num - for(var/i=1 to (slices_num-slices_lost)) - var/obj/slice = new slice_path (src.loc) - reagents.trans_to_obj(slice, reagents_per_slice) - qdel(src) - return + return ..() +/obj/item/chems/food/proc/try_create_combination(obj/item/W, mob/user) + if(!length(attack_products) || !istype(W) || QDELETED(src) || QDELETED(W)) + return FALSE var/create_type for(var/key in attack_products) if(ispath(key) && !istype(W, key)) @@ -211,27 +126,25 @@ if(G.seed.kitchen_tag && G.seed.kitchen_tag != key) continue create_type = attack_products[key] - if (!ispath(create_type)) - return - if(!user.canUnEquip(src)) - return - - var/obj/item/chems/food/result = new create_type() + break + if(!ispath(create_type) || (user && (!user.canUnEquip(src) || !user.canUnEquip(W)))) + return FALSE //If the snack was in your hands, the result will be too - if (src in user.get_held_item_slots()) - user.drop_from_inventory(src) - user.put_in_hands(result) - else - result.dropInto(loc) - - qdel(W) + var/was_in_hands = (src in user?.get_held_items()) + var/my_loc = get_turf(src) qdel(src) + qdel(W) + var/obj/item/chems/food/result = new create_type(my_loc) + if(was_in_hands) + user.put_in_hands(result) to_chat(user, SPAN_NOTICE("You make \the [result]!")) + return TRUE /obj/item/chems/food/proc/is_sliceable() return (slices_num && slice_path && slices_num > 0) /obj/item/chems/food/proc/on_dry(var/atom/newloc) + drop_plate(get_turf(newloc)) if(dried_type == type) SetName("dried [name]") color = "#a38463" @@ -242,25 +155,24 @@ . = new dried_type(newloc || get_turf(src)) qdel(src) +/obj/item/chems/food/proc/drop_plate(var/drop_loc) + if(istype(plate)) + plate.dropInto(drop_loc || loc) + plate.make_dirty(src) + plate = null + +/obj/item/chems/food/physically_destroyed() + drop_plate() + return ..() + /obj/item/chems/food/Destroy() + QDEL_NULL(plate) + trash = null if(contents) for(var/atom/movable/something in contents) something.dropInto(loc) . = ..() -/obj/item/chems/food/attack_animal(var/mob/user) - if(!isanimal(user) && !isalien(user)) - return - user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].") - bitecount++ - if(reagents && user.reagents) - reagents.trans_to_mob(user, bitesize, CHEM_INGEST) - spawn(5) - if(!src && !user.client) - user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]") - qdel(src) - On_Consume(user) - /obj/item/chems/food/proc/update_food_appearance_from(var/obj/item/donor, var/food_color, var/copy_donor_appearance = TRUE) filling_color = food_color if(copy_donor_appearance) @@ -274,9 +186,22 @@ update_icon() /obj/item/chems/food/on_update_icon() + underlays.Cut() . = ..() //Since other things that don't have filling override this, slap it into its own proc to avoid the overhead of scanning through the icon file apply_filling_overlay() //#TODO: Maybe generalise food item icons. + // If we have a plate, add it to our icon. + if(plate) + var/image/I = new + I.appearance = plate + I.layer = FLOAT_LAYER + I.plane = FLOAT_PLANE + I.pixel_x = 0 + I.pixel_y = 0 + I.pixel_z = 0 + I.pixel_w = 0 + I.appearance_flags |= RESET_TRANSFORM|RESET_COLOR + underlays += list(I) /obj/item/chems/food/proc/apply_filling_overlay() if(check_state_in_icon("[icon_state]_filling", icon)) @@ -287,4 +212,4 @@ . = ..() SHOULD_CALL_PARENT(TRUE) if(nutriment_amt) - reagents.add_reagent(nutriment_type, nutriment_amt, nutriment_desc) + add_to_reagents(nutriment_type, nutriment_amt, nutriment_desc) diff --git a/code/modules/reagents/reagent_containers/food/baked_goods.dm b/code/modules/reagents/reagent_containers/food/baked_goods.dm index af486d26432..c1b6e20d979 100644 --- a/code/modules/reagents/reagent_containers/food/baked_goods.dm +++ b/code/modules/reagents/reagent_containers/food/baked_goods.dm @@ -7,7 +7,7 @@ desc = "A delicious and spongy little cake." icon_state = "muffin" filling_color = "#e0cf9b" - center_of_mass = @"{'x':17,'y':4}" + center_of_mass = @'{"x":17,"y":4}' nutriment_desc = list("sweetness" = 3, "muffin" = 3) nutriment_amt = 6 bitesize = 2 @@ -16,16 +16,16 @@ name = "banana cream pie" desc = "Just like back home, on clown planet! HONK!" icon_state = "pie" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fbffb8" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("pie" = 3, "cream" = 2) nutriment_amt = 4 bitesize = 3 /obj/item/chems/food/bananapie/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/banana_cream, 5) + add_to_reagents(/decl/material/liquid/nutriment/banana_cream, 5) /obj/item/chems/food/pie/throw_impact(atom/hit_atom) ..() @@ -37,15 +37,15 @@ name = "berry clafoutis" desc = "No black birds, this is a good sign." icon_state = "berryclafoutis" - trash = /obj/item/trash/plate - center_of_mass = @"{'x':16,'y':13}" + plate = /obj/item/plate + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("sweetness" = 2, "pie" = 3) nutriment_amt = 4 bitesize = 3 /obj/item/chems/food/berryclafoutis/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/berry, 5) + add_to_reagents(/decl/material/liquid/drink/juice/berry, 5) /obj/item/chems/food/waffles name = "waffles" @@ -53,7 +53,7 @@ icon_state = "waffles" trash = /obj/item/trash/waffles filling_color = "#e6deb5" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' nutriment_desc = list("waffle" = 8) nutriment_amt = 8 bitesize = 2 @@ -64,21 +64,21 @@ icon_state = "rofflewaffles" trash = /obj/item/trash/waffles filling_color = "#ff00f7" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' nutriment_desc = list("waffle" = 7, "sweetness" = 1) nutriment_amt = 8 bitesize = 4 /obj/item/chems/food/rofflewaffles/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/psychotropics, 8) + add_to_reagents(/decl/material/liquid/psychotropics, 8) /obj/item/chems/food/pancakes name = "pancakes" desc = "Pancakes without blueberries, still delicious." icon_state = "pancakes" - trash = /obj/item/trash/plate - center_of_mass = @"{'x':15,'y':11}" + plate = /obj/item/plate + center_of_mass = @'{"x":15,"y":11}' nutriment_desc = list("pancake" = 8) nutriment_amt = 8 bitesize = 2 @@ -87,8 +87,8 @@ name = "blueberry pancakes" desc = "Pancakes with blueberries, delicious." icon_state = "pancakes" - trash = /obj/item/trash/plate - center_of_mass = @"{'x':15,'y':11}" + plate = /obj/item/plate + center_of_mass = @'{"x":15,"y":11}' nutriment_desc = list("pancake" = 8) nutriment_amt = 8 bitesize = 2 @@ -97,9 +97,9 @@ name = "eggplant parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#4d2f5e" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("cheese" = 3, "eggplant" = 3) nutriment_amt = 6 bitesize = 2 @@ -110,12 +110,12 @@ icon_state = "soylent_green" trash = /obj/item/trash/waffles filling_color = "#b8e6b5" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' bitesize = 2 /obj/item/chems/food/soylentgreen/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/soylenviridians name = "\improper Soylen Virdians" @@ -123,7 +123,7 @@ icon_state = "soylent_yellow" trash = /obj/item/trash/waffles filling_color = "#e6fa61" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' nutriment_desc = list("some sort of protein" = 10)//seasoned vERY well. nutriment_amt = 10 bitesize = 2 @@ -132,22 +132,22 @@ name = "meat-pie" icon_state = "meatpie" desc = "An old barber recipe, very delicious!" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#948051" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 2 /obj/item/chems/food/meatpie/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/tofupie name = "tofu-pie" icon_state = "meatpie" desc = "A delicious tofu pie." - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fffee0" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("tofu" = 2, "pie" = 8) nutriment_amt = 10 bitesize = 2 @@ -157,22 +157,22 @@ desc = "Sweet and tasty poison pie." icon_state = "amanita_pie" filling_color = "#ffcccc" - center_of_mass = @"{'x':17,'y':9}" + center_of_mass = @'{"x":17,"y":9}' nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2) nutriment_amt = 5 bitesize = 3 /obj/item/chems/food/amanita_pie/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/amatoxin, 3) - reagents.add_reagent(/decl/material/liquid/psychotropics, 1) + add_to_reagents(/decl/material/liquid/amatoxin, 3) + add_to_reagents(/decl/material/liquid/psychotropics, 1) /obj/item/chems/food/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon_state = "plump_pie" filling_color = "#b8279b" - center_of_mass = @"{'x':17,'y':9}" + center_of_mass = @'{"x":17,"y":9}' nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3) nutriment_amt = 8 bitesize = 2 @@ -182,20 +182,20 @@ if(prob(10)) //#TODO: have this depend on cook's skill within the recipe handling instead maybe? name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" - reagents.add_reagent(/decl/material/liquid/regenerator, 5) + add_to_reagents(/decl/material/liquid/regenerator, 5) /obj/item/chems/food/xemeatpie name = "xeno-pie" icon_state = "xenomeatpie" desc = "A delicious meatpie. Probably heretical." - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#43de18" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 2 /obj/item/chems/food/xemeatpie/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/poppypretzel name = "poppy pretzel" @@ -203,7 +203,7 @@ icon_state = "poppypretzel" bitesize = 2 filling_color = "#916e36" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("poppy seeds" = 2, "pretzel" = 3) nutriment_amt = 5 bitesize = 2 @@ -213,7 +213,7 @@ desc = "A pie containing sweet sweet love... or apple." icon_state = "applepie" filling_color = "#e0edc5" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("sweetness" = 2, "apple" = 2, "pie" = 2) nutriment_amt = 4 bitesize = 3 @@ -223,7 +223,7 @@ desc = "Taste so good, make a grown man cry." icon_state = "cherrypie" filling_color = "#ff525a" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("sweetness" = 2, "cherry" = 2, "pie" = 2) nutriment_amt = 4 bitesize = 3 @@ -233,7 +233,7 @@ desc = "A true prophecy in each cookie!" icon_state = "fortune_cookie" filling_color = "#e8e79e" - center_of_mass = @"{'x':15,'y':14}" + center_of_mass = @'{"x":15,"y":14}' nutriment_desc = list("fortune cookie" = 2) nutriment_amt = 3 bitesize = 2 \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/bread.dm b/code/modules/reagents/reagent_containers/food/bread.dm index e5c4f56f02f..57f43d97ac0 100644 --- a/code/modules/reagents/reagent_containers/food/bread.dm +++ b/code/modules/reagents/reagent_containers/food/bread.dm @@ -6,9 +6,9 @@ name = "sandwich" desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce!" icon_state = "sandwich" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#d9be29" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' nutriment_desc = list("bread" = 3, "cheese" = 3) nutriment_amt = 3 nutriment_type = /decl/material/liquid/nutriment/bread @@ -16,15 +16,15 @@ /obj/item/chems/food/sandwich/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) /obj/item/chems/food/toastedsandwich name = "toasted sandwich" desc = "Now if you only had a pepper bar." icon_state = "toastedsandwich" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#d9be29" - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' nutriment_desc = list("toasted bread" = 3, "cheese" = 3) nutriment_amt = 3 nutriment_type = /decl/material/liquid/nutriment/bread @@ -32,14 +32,14 @@ /obj/item/chems/food/toastedsandwich/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) - reagents.add_reagent(/decl/material/solid/carbon, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/solid/carbon, 2) /obj/item/chems/food/grilledcheese name = "grilled cheese sandwich" desc = "Goes great with Tomato soup!" icon_state = "toastedsandwich" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#d9be29" nutriment_desc = list("toasted bread" = 3, "cheese" = 3) nutriment_amt = 3 @@ -48,14 +48,14 @@ /obj/item/chems/food/grilledcheese/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/baguette name = "baguette" desc = "Good for pretend sword fights." icon_state = "baguette" filling_color = "#e3d796" - center_of_mass = @"{'x':18,'y':12}" + center_of_mass = @'{"x":18,"y":12}' nutriment_desc = list("long bread" = 6) nutriment_amt = 6 bitesize = 3 @@ -63,16 +63,16 @@ /obj/item/chems/food/baguette/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/solid/blackpepper, 1) - reagents.add_reagent(/decl/material/solid/sodiumchloride, 1) + add_to_reagents(/decl/material/solid/blackpepper, 1) + add_to_reagents(/decl/material/solid/sodiumchloride, 1) /obj/item/chems/food/jelliedtoast name = "jellied toast" desc = "A slice of bread covered with delicious jam." icon_state = "jellytoast" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#b572ab" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("toasted bread" = 2) nutriment_amt = 1 bitesize = 3 @@ -80,15 +80,15 @@ /obj/item/chems/food/jelliedtoast/cherry/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, 5) + add_to_reagents(/decl/material/liquid/nutriment/cherryjelly, 5) /obj/item/chems/food/jellysandwich name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." icon_state = "jellysandwich" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#9e3a78" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("bread" = 2) nutriment_amt = 2 bitesize = 3 @@ -96,14 +96,14 @@ /obj/item/chems/food/jellysandwich/cherry/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, 5) + add_to_reagents(/decl/material/liquid/nutriment/cherryjelly, 5) /obj/item/chems/food/twobread name = "\improper Two Bread" desc = "It is very bitter and winy." icon_state = "twobread" filling_color = "#dbcc9a" - center_of_mass = @"{'x':15,'y':12}" + center_of_mass = @'{"x":15,"y":12}' nutriment_desc = list("sourness" = 2, "bread" = 2) nutriment_amt = 2 bitesize = 3 @@ -114,7 +114,7 @@ desc = "Is such a thing even possible?" icon_state = "threebread" filling_color = "#dbcc9a" - center_of_mass = @"{'x':15,'y':12}" + center_of_mass = @'{"x":15,"y":12}' nutriment_desc = list("sourness" = 2, "bread" = 3) nutriment_amt = 3 bitesize = 4 @@ -126,7 +126,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "flatbread" bitesize = 2 - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' nutriment_desc = list("bread" = 3) nutriment_amt = 3 nutriment_type = /decl/material/liquid/nutriment/bread \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/burgers.dm b/code/modules/reagents/reagent_containers/food/burgers.dm index b201568cc67..fef86dec591 100644 --- a/code/modules/reagents/reagent_containers/food/burgers.dm +++ b/code/modules/reagents/reagent_containers/food/burgers.dm @@ -7,21 +7,21 @@ desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" filling_color = "#f2b6ea" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' bitesize = 2 material = /decl/material/solid/organic/meat /obj/item/chems/food/brainburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) - reagents.add_reagent(/decl/material/liquid/neuroannealer, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/neuroannealer, 6) /obj/item/chems/food/ghostburger name = "ghost burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" filling_color = "#fff2ff" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("buns" = 3, "spookiness" = 3) nutriment_amt = 2 bitesize = 2 @@ -35,24 +35,24 @@ name = "-burger" desc = "A bloody burger." icon_state = "hburger" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' bitesize = 2 /obj/item/chems/food/human/burger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) /obj/item/chems/food/cheeseburger name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("cheese" = 2, "bun" = 2) nutriment_amt = 2 /obj/item/chems/food/cheeseburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/burger name = "burger" @@ -60,14 +60,14 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "burger" filling_color = "#d63c3c" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("bun" = 2) nutriment_amt = 3 bitesize = 2 /obj/item/chems/food/burger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) /obj/item/chems/food/hamburger name = "hamburger" @@ -75,33 +75,33 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "hamburger" filling_color = "#d63c3c" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("bun" = 2) nutriment_amt = 3 bitesize = 2 /obj/item/chems/food/hamburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) /obj/item/chems/food/fishburger name = "fish sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon_state = "fishburger" filling_color = "#ffdefe" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' bitesize = 3 /obj/item/chems/food/fishburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) /obj/item/chems/food/tofuburger name = "tofu burger" - desc = "What.. is that meat?" + desc = "What... is that meat?" icon_state = "tofuburger" filling_color = "#fffee0" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("bun" = 2, "pseudo-soy meat" = 3) nutriment_amt = 6 bitesize = 2 @@ -111,7 +111,7 @@ desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" filling_color = COLOR_GRAY80 - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("bun" = 2, "metal" = 3) nutriment_amt = 2 bitesize = 2 @@ -119,7 +119,7 @@ /obj/item/chems/food/roburger/populate_reagents() . = ..() if(prob(5)) - reagents.add_reagent(/decl/material/liquid/nanitefluid, 2) + add_to_reagents(/decl/material/liquid/nanitefluid, 2) /obj/item/chems/food/roburgerbig name = "roburger" @@ -127,31 +127,31 @@ icon_state = "roburger" filling_color = COLOR_GRAY80 volume = 100 - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' bitesize = 0.1 /obj/item/chems/food/roburgerbig/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nanitefluid, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/nanitefluid, reagents.maximum_volume) /obj/item/chems/food/xenoburger name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" filling_color = "#43de18" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' bitesize = 2 /obj/item/chems/food/xenoburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) /obj/item/chems/food/clownburger name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" filling_color = "#ff00ff" - center_of_mass = @"{'x':17,'y':12}" + center_of_mass = @'{"x":17,"y":12}' nutriment_desc = list("bun" = 2, "clown shoe" = 3) nutriment_amt = 6 bitesize = 2 @@ -161,7 +161,7 @@ desc = "Its taste defies language." icon_state = "mimeburger" filling_color = "#ffffff" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("bun" = 2, "mime paint" = 3) nutriment_amt = 6 bitesize = 2 @@ -180,42 +180,42 @@ desc = "Forget the Luna Burger! THIS is the future!" icon_state = "bigbiteburger" filling_color = "#e3d681" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("buns" = 4) nutriment_amt = 4 bitesize = 3 /obj/item/chems/food/bigbiteburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/jellyburger name = "jelly burger" - desc = "Culinary delight..?" + desc = "Culinary delight...?" icon_state = "jellyburger" filling_color = "#b572ab" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("buns" = 5) nutriment_amt = 5 bitesize = 2 /obj/item/chems/food/jellyburger/cherry/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, 5) + add_to_reagents(/decl/material/liquid/nutriment/cherryjelly, 5) /obj/item/chems/food/superbiteburger name = "super bite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" filling_color = "#cca26a" - center_of_mass = @"{'x':16,'y':3}" + center_of_mass = @'{"x":16,"y":3}' nutriment_desc = list("buns" = 25) nutriment_amt = 25 bitesize = 10 /obj/item/chems/food/superbiteburger/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 25) + add_to_reagents(/decl/material/liquid/nutriment/protein, 25) // I am not creating another file just for hot dogs. @@ -224,22 +224,22 @@ desc = "Unrelated to dogs, maybe." icon_state = "hotdog" bitesize = 2 - center_of_mass = @"{'x':16,'y':17}" + center_of_mass = @'{"x":16,"y":17}' nutriment_type = /decl/material/liquid/nutriment/bread material = /decl/material/solid/organic/meat /obj/item/chems/food/hotdog/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) /obj/item/chems/food/classichotdog name = "classic hotdog" desc = "Going literal." icon_state = "hotcorgi" bitesize = 6 - center_of_mass = @"{'x':16,'y':17}" + center_of_mass = @'{"x":16,"y":17}' material = /decl/material/solid/organic/meat /obj/item/chems/food/classichotdog/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 16) + add_to_reagents(/decl/material/liquid/nutriment/protein, 16) diff --git a/code/modules/reagents/reagent_containers/food/can_edibility.dm b/code/modules/reagents/reagent_containers/food/can_edibility.dm new file mode 100644 index 00000000000..4a1742cb5b4 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/can_edibility.dm @@ -0,0 +1,5 @@ +/obj/item/chems/food/can/handle_eaten_by_mob(mob/user, mob/target) + if(!ATOM_IS_OPEN_CONTAINER(src)) + to_chat(user, SPAN_NOTICE("You need to open \the [src] first!")) + return EATEN_UNABLE + return ..() diff --git a/code/modules/reagents/reagent_containers/food/canned.dm b/code/modules/reagents/reagent_containers/food/canned.dm index 2bb9e7693f2..902e7731c3d 100644 --- a/code/modules/reagents/reagent_containers/food/canned.dm +++ b/code/modules/reagents/reagent_containers/food/canned.dm @@ -6,7 +6,7 @@ /obj/item/chems/food/can name = "empty can" icon = 'icons/obj/food_canned.dmi' - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' atom_flags = 0 bitesize = 3 @@ -28,22 +28,6 @@ atom_flags |= ATOM_FLAG_OPEN_CONTAINER sealed = FALSE -/obj/item/chems/food/can/attack(mob/M, mob/user, def_zone) - if(force && !(obj_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT) - return ..() - - if(standard_feed_mob(user, M)) - update_icon(src) - return TRUE - - return FALSE - -/obj/item/chems/food/can/standard_feed_mob(mob/user, mob/target) - if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, SPAN_NOTICE("You need to open \the [src] first!")) - return TRUE - return ..() - /obj/item/chems/food/can/attack_self(mob/user) if(!ATOM_IS_OPEN_CONTAINER(src) && !open_complexity) to_chat(user, SPAN_NOTICE("You unseal \the [src] with a crack of metal.")) @@ -61,7 +45,7 @@ unseal() return - else if(istype(W,/obj/item/kitchen/utensil)) + else if(istype(W,/obj/item/utensil)) if(ATOM_IS_OPEN_CONTAINER(src)) ..() else @@ -88,7 +72,7 @@ /obj/item/chems/food/can/beef/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 12) + add_to_reagents(/decl/material/liquid/nutriment/protein, 12) /obj/item/chems/food/can/beans name = "baked beans" @@ -107,13 +91,11 @@ filling_color = "#ae0000" nutriment_desc = list("tomato" = 1) eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/can/tomato/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 12) - -/obj/item/chems/food/can/tomato/feed_sound(var/mob/user) - playsound(user, 'sound/items/drink.ogg', rand(10, 50), 1) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 12) /obj/item/chems/food/can/spinach name = "spinach" @@ -126,10 +108,10 @@ /obj/item/chems/food/can/spinach/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment, 5) - reagents.add_reagent(/decl/material/liquid/adrenaline, 5) - reagents.add_reagent(/decl/material/liquid/amphetamines, 5) - reagents.add_reagent(/decl/material/solid/metal/iron, 5) + add_to_reagents(/decl/material/liquid/nutriment, 5) + add_to_reagents(/decl/material/liquid/adrenaline, 5) + add_to_reagents(/decl/material/liquid/amphetamines, 5) + add_to_reagents(/decl/material/solid/metal/iron, 5) //Vending Machine Foods should go here. @@ -153,8 +135,8 @@ /obj/item/chems/food/can/caviar/true/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) - reagents.add_reagent(/decl/material/liquid/carpotoxin, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/carpotoxin, 1) /obj/item/knife/opener name = "can-opener" diff --git a/code/modules/reagents/reagent_containers/food/dough.dm b/code/modules/reagents/reagent_containers/food/dough.dm index aae9bd46371..6dbec4e8f73 100644 --- a/code/modules/reagents/reagent_containers/food/dough.dm +++ b/code/modules/reagents/reagent_containers/food/dough.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "dough" bitesize = 2 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("dough" = 3) nutriment_amt = 3 nutriment_type = /decl/material/liquid/nutriment/bread @@ -25,12 +25,13 @@ icon_state = "flat dough" slice_path = /obj/item/chems/food/doughslice slices_num = 3 - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SLICE /obj/item/chems/food/sliceable/flatdough/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 1) - reagents.add_reagent(/decl/material/liquid/nutriment, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 1) + add_to_reagents(/decl/material/liquid/nutriment, 3) /obj/item/chems/food/doughslice name = "dough slice" @@ -40,10 +41,11 @@ slice_path = /obj/item/chems/food/spagetti slices_num = 1 bitesize = 2 - center_of_mass = @"{'x':17,'y':19}" + center_of_mass = @'{"x":17,"y":19}' nutriment_desc = list("dough" = 1) nutriment_amt = 1 nutriment_type = /decl/material/liquid/nutriment/bread + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SLICE /obj/item/chems/food/bun name = "bun" @@ -51,7 +53,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "bun" bitesize = 2 - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' nutriment_desc = list("bun" = 4) nutriment_amt = 4 nutriment_type = /decl/material/liquid/nutriment/bread @@ -76,7 +78,7 @@ desc = "A small bread monkey fashioned from two burger buns." icon_state = "bunbun" bitesize = 2 - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("bun" = 8) nutriment_amt = 8 nutriment_type = /decl/material/liquid/nutriment/bread \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/eggs.dm b/code/modules/reagents/reagent_containers/food/eggs.dm index 9ab1eccd49a..4fa7e499124 100644 --- a/code/modules/reagents/reagent_containers/food/eggs.dm +++ b/code/modules/reagents/reagent_containers/food/eggs.dm @@ -5,10 +5,11 @@ /obj/item/chems/food/egg name = "egg" desc = "An egg!" - icon_state = "egg" + icon = 'icons/obj/food/eggs/egg.dmi' + icon_state = ICON_STATE_WORLD filling_color = "#fdffd1" volume = 10 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_amt = 3 nutriment_type = /decl/material/liquid/nutriment/protein/egg @@ -45,71 +46,75 @@ return ..() /obj/item/chems/food/egg/blue - icon_state = "egg-blue" + icon = 'icons/obj/food/eggs/egg_blue.dmi' /obj/item/chems/food/egg/green - icon_state = "egg-green" + icon = 'icons/obj/food/eggs/egg_green.dmi' /obj/item/chems/food/egg/mime - icon_state = "egg-mime" + icon = 'icons/obj/food/eggs/egg_mime.dmi' /obj/item/chems/food/egg/orange - icon_state = "egg-orange" + icon = 'icons/obj/food/eggs/egg_orange.dmi' /obj/item/chems/food/egg/purple - icon_state = "egg-purple" + icon = 'icons/obj/food/eggs/egg_purple.dmi' /obj/item/chems/food/egg/rainbow - icon_state = "egg-rainbow" + icon = 'icons/obj/food/eggs/egg_rainbow.dmi' /obj/item/chems/food/egg/red - icon_state = "egg-red" + icon = 'icons/obj/food/eggs/egg_red.dmi' /obj/item/chems/food/egg/yellow - icon_state = "egg-yellow" + icon = 'icons/obj/food/eggs/egg_yellow.dmi' + +/obj/item/chems/food/egg/lizard + icon = 'icons/obj/food/eggs/egg_lizard.dmi' /obj/item/chems/food/egg/lizard/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein/egg, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein/egg, 5) if(prob(30)) //extra nutriment - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) /obj/item/chems/food/friedegg name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" filling_color = "#ffdf78" - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' bitesize = 1 /obj/item/chems/food/friedegg/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) - reagents.add_reagent(/decl/material/solid/sodiumchloride, 1) - reagents.add_reagent(/decl/material/solid/blackpepper, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/solid/sodiumchloride, 1) + add_to_reagents(/decl/material/solid/blackpepper, 1) /obj/item/chems/food/boiledegg name = "boiled egg" desc = "A hard boiled egg." - icon_state = "egg" + icon = 'icons/obj/food/eggs/egg.dmi' + icon_state = ICON_STATE_WORLD filling_color = "#ffffff" /obj/item/chems/food/boiledegg/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/omelette name = "cheese omelette" desc = "Omelette with cheese!" icon_state = "omelette" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fff9a8" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 1 /obj/item/chems/food/omelette/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) /obj/item/chems/food/chawanmushi name = "chawanmushi" @@ -117,9 +122,9 @@ icon_state = "chawanmushi" trash = /obj/item/trash/snack_bowl filling_color = "#f0f2e4" - center_of_mass = @"{'x':17,'y':10}" + center_of_mass = @'{"x":17,"y":10}' bitesize = 1 - + /obj/item/chems/food/chawanmushi/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) \ No newline at end of file + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/fish.dm b/code/modules/reagents/reagent_containers/food/fish.dm index d5ef783e66c..94e55be5bcd 100644 --- a/code/modules/reagents/reagent_containers/food/fish.dm +++ b/code/modules/reagents/reagent_containers/food/fish.dm @@ -3,7 +3,7 @@ desc = "A fillet of fish." icon_state = "fishfillet" filling_color = "#ffdefe" - center_of_mass = @"{'x':17,'y':13}" + center_of_mass = @'{"x":17,"y":13}' bitesize = 6 nutriment_amt = 6 nutriment_type = /decl/material/liquid/nutriment/protein @@ -22,7 +22,7 @@ var/toxin_amt = REAGENT_VOLUME(reagents, /decl/material/liquid/carpotoxin) if(toxin_amt && !prob(user.skill_fail_chance(SKILL_COOKING, 100, SKILL_PROF))) - reagents.remove_reagent(/decl/material/liquid/carpotoxin, toxin_amt) + remove_from_reagents(/decl/material/liquid/carpotoxin, toxin_amt) user.visible_message("\The [user] slices \the [src] into thin strips.") var/transfer_amt = FLOOR(reagents.total_volume * 0.3) @@ -39,7 +39,7 @@ /obj/item/chems/food/fish/poison/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/carpotoxin, 6) + add_to_reagents(/decl/material/liquid/carpotoxin, 6) /obj/item/chems/food/fish/shark fish_type = "shark" diff --git a/code/modules/reagents/reagent_containers/food/fried.dm b/code/modules/reagents/reagent_containers/food/fried.dm index 2aca1e326e8..5bb26f441c7 100644 --- a/code/modules/reagents/reagent_containers/food/fried.dm +++ b/code/modules/reagents/reagent_containers/food/fried.dm @@ -8,9 +8,9 @@ name = "onion rings" desc = "Like circular fries but better." icon_state = "onionrings" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#eddd00" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("fried onions" = 5) nutriment_amt = 5 bitesize = 2 @@ -19,9 +19,9 @@ name = "chips" desc = "Frenched potato, fried." icon_state = "fries" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#eddd00" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("fresh fries" = 4) nutriment_amt = 4 bitesize = 2 @@ -32,7 +32,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawsticks" bitesize = 2 - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' nutriment_desc = list("raw potato" = 3) nutriment_amt = 3 @@ -40,13 +40,13 @@ name = "cheesy fries" desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#eddd00" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("fresh fries" = 3, "cheese" = 3) nutriment_amt = 4 bitesize = 2 /obj/item/chems/food/cheesyfries/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) diff --git a/code/modules/reagents/reagent_containers/food/junkfood.dm b/code/modules/reagents/reagent_containers/food/junkfood.dm index a618d9038d4..41240b99d69 100644 --- a/code/modules/reagents/reagent_containers/food/junkfood.dm +++ b/code/modules/reagents/reagent_containers/food/junkfood.dm @@ -4,13 +4,13 @@ desc = "For when you desperately want meat and you don't care what kind. Has the same texture as old leather boots." trash = /obj/item/trash/sosjerky filling_color = "#631212" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' bitesize = 2 material = /decl/material/solid/organic/meat /obj/item/chems/food/sosjerky/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/no_raisin name = "raisins" @@ -18,7 +18,7 @@ desc = "Pouring water on these will not turn them back into grapes, unfortunately." trash = /obj/item/trash/raisins filling_color = "#343834" - center_of_mass = @"{'x':15,'y':4}" + center_of_mass = @'{"x":15,"y":4}' nutriment_desc = list("raisins" = 6) nutriment_amt = 6 @@ -27,12 +27,12 @@ icon_state = "space_twinkie" desc = "So full of preservatives, it's guaranteed to survive longer then you will." filling_color = "#ffe591" - center_of_mass = @"{'x':15,'y':11}" + center_of_mass = @'{"x":15,"y":11}' bitesize = 2 /obj/item/chems/food/spacetwinkie/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 4) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 4) /obj/item/chems/food/cheesiehonkers name = "cheese puffs" @@ -40,7 +40,7 @@ desc = "Bite sized cheese flavoured snacks that will leave your fingers coated in cheese dust." trash = /obj/item/trash/cheesie filling_color = "#ffa305" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("cheese" = 5, "chips" = 2) nutriment_amt = 4 bitesize = 2 @@ -50,7 +50,7 @@ icon_state = "syndi_cakes" desc = "Made using extremely unethical labour, ingredients and marketing methods." filling_color = "#ff5d05" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("sweetness" = 3, "cake" = 1) nutriment_amt = 4 trash = /obj/item/trash/syndi_cakes @@ -58,7 +58,7 @@ /obj/item/chems/food/syndicake/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/regenerator, 5) + add_to_reagents(/decl/material/liquid/regenerator, 5) //terran delights @@ -68,7 +68,7 @@ desc = "Pistachios. There is absolutely nothing remarkable about these." trash = /obj/item/trash/pistachios filling_color = "#825d26" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("nuts" = 1) nutriment_amt = 3 bitesize = 0.5 @@ -79,7 +79,7 @@ desc = "A favorite among birds." trash = /obj/item/trash/semki filling_color = "#68645d" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("sunflower seeds" = 1) nutriment_amt = 6 bitesize = 0.5 @@ -90,14 +90,14 @@ desc = "Space cepholapod tentacles, carefully removed from the squid then dried into strips of delicious rubbery goodness!" trash = /obj/item/trash/squid filling_color = "#c0a9d7" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("fish" = 1, "salt" = 1) nutriment_amt = 2 bitesize = 1 /obj/item/chems/food/squid/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/croutons name = "croutons" @@ -105,7 +105,7 @@ desc = "Fried bread cubes. Good in salad but I guess you can just eat them as is." trash = /obj/item/trash/croutons filling_color = "#c6b17f" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("bread" = 1, "salt" = 1) nutriment_amt = 3 bitesize = 1 @@ -117,14 +117,14 @@ desc = "Pig fat. Salted. Just as good as it sounds." trash = /obj/item/trash/salo filling_color = "#e0bcbc" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("fat" = 1, "salt" = 1) nutriment_amt = 2 bitesize = 2 /obj/item/chems/food/salo/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) /obj/item/chems/food/driedfish name = "vobla" @@ -132,14 +132,14 @@ desc = "Dried salted beer snack fish." trash = /obj/item/trash/driedfish filling_color = "#c8a5bb" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("fish" = 1, "salt" = 1) nutriment_amt = 2 bitesize = 1 /obj/item/chems/food/driedfish/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/liquidfood name = "\improper LiquidFood MRE" @@ -147,27 +147,27 @@ icon_state = "liquidfood" trash = /obj/item/trash/liquidfood filling_color = "#a8a8a8" - center_of_mass = @"{'x':16,'y':15}" + center_of_mass = @'{"x":16,"y":15}' nutriment_desc = list("chalk" = 6) nutriment_amt = 20 bitesize = 4 /obj/item/chems/food/liquidfood/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/solid/metal/iron, 3) + add_to_reagents(/decl/material/solid/metal/iron, 3) /obj/item/chems/food/meatcube name = "cubed meat" desc = "Fried, salted lean meat compressed into a cube. Not very appetizing." icon_state = "meatcube" filling_color = "#7a3d11" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 3 material = /decl/material/solid/organic/meat /obj/item/chems/food/meatcube/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 15) + add_to_reagents(/decl/material/liquid/nutriment/protein, 15) /obj/item/chems/food/tastybread name = "bread tube" @@ -175,7 +175,7 @@ icon_state = "tastybread" trash = /obj/item/trash/tastybread filling_color = "#a66829" - center_of_mass = @"{'x':17,'y':16}" + center_of_mass = @'{"x":17,"y":16}' nutriment_desc = list("bread" = 2, "sweetness" = 3) nutriment_amt = 6 nutriment_type = /decl/material/liquid/nutriment/bread @@ -187,14 +187,14 @@ icon_state = "candy" trash = /obj/item/trash/candy filling_color = "#7d5f46" - center_of_mass = @"{'x':15,'y':15}" + center_of_mass = @'{"x":15,"y":15}' nutriment_amt = 1 nutriment_desc = list("candy" = 1) bitesize = 2 /obj/item/chems/food/candy/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 3) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 3) /obj/item/chems/food/candy/proteinbar name = "protein bar" @@ -205,9 +205,9 @@ /obj/item/chems/food/candy/proteinbar/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment, 9) - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 4) + add_to_reagents(/decl/material/liquid/nutriment, 9) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 4) /obj/item/chems/food/candy/donor name = "donor candy" @@ -218,23 +218,23 @@ /obj/item/chems/food/candy/donor/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment, 10) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 3) + add_to_reagents(/decl/material/liquid/nutriment, 10) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 3) /obj/item/chems/food/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Not actually candied corn." icon_state = "candy_corn" filling_color = "#fffcb0" - center_of_mass = @"{'x':14,'y':10}" + center_of_mass = @'{"x":14,"y":10}' nutriment_amt = 4 nutriment_desc = list("candy corn" = 4) bitesize = 2 /obj/item/chems/food/candy_corn/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment, 4) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 2) + add_to_reagents(/decl/material/liquid/nutriment, 4) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 2) /obj/item/chems/food/chips name = "chips" @@ -242,7 +242,7 @@ icon_state = "chips" trash = /obj/item/trash/chips filling_color = "#e8c31e" - center_of_mass = @"{'x':15,'y':15}" + center_of_mass = @'{"x":15,"y":15}' nutriment_amt = 3 nutriment_desc = list("salt" = 1, "chips" = 2) bitesize = 1 @@ -253,7 +253,7 @@ desc = "COOKIE!!!" icon_state = "cookie" filling_color = "#dbc94f" - center_of_mass = @"{'x':17,'y':18}" + center_of_mass = @'{"x":17,"y":18}' nutriment_amt = 5 nutriment_desc = list("sweetness" = 3, "cookie" = 2) w_class = ITEM_SIZE_TINY @@ -265,52 +265,50 @@ desc = "Such sweet, fattening food." icon_state = "chocolatebar" filling_color = "#7d5f46" - center_of_mass = @"{'x':15,'y':15}" + center_of_mass = @'{"x":15,"y":15}' nutriment_amt = 2 nutriment_desc = list("chocolate" = 5) bitesize = 2 /obj/item/chems/food/chocolatebar/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/coco, 2) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 2) + add_to_reagents(/decl/material/liquid/nutriment/coco, 2) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 2) /obj/item/chems/food/chocolateegg name = "chocolate egg" desc = "Such sweet, fattening food." icon_state = "chocolateegg" filling_color = "#7d5f46" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_amt = 3 nutriment_desc = list("chocolate" = 5) bitesize = 2 /obj/item/chems/food/chocolateegg/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/coco, 2) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 2) + add_to_reagents(/decl/material/liquid/nutriment/coco, 2) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 2) /obj/item/chems/food/donut name = "donut" desc = "Goes great with Robust Coffee." - icon_state = "donut1" + icon = 'icons/obj/food/donuts/donut.dmi' + icon_state = ICON_STATE_WORLD filling_color = "#d9c386" - center_of_mass = @"{'x':19,'y':16}" + center_of_mass = @'{"x":19,"y":16}' nutriment_desc = list("sweetness", "donut") nutriment_amt = 3 bitesize = 3 nutriment_type = /decl/material/liquid/nutriment/bread - var/overlay_state = "box-donut1" - var/donut_state = "donut" + var/iced_icon = 'icons/obj/food/donuts/donut_iced.dmi' -//FIXME: Again a really weird way of handling that /obj/item/chems/food/donut/populate_reagents() . = ..() - if(prob(30)) - icon_state = "[donut_state]2" - overlay_state = "box-donut2" + if(iced_icon && prob(30) && icon != iced_icon) + icon = iced_icon SetName("frosted [name]") - reagents.add_reagent(/decl/material/liquid/nutriment/sprinkles, 2) + add_to_reagents(/decl/material/liquid/nutriment/sprinkles, 2) /obj/item/chems/food/donut/chaos name = "chaos donut" @@ -335,22 +333,23 @@ /obj/item/chems/food/donut/chaos/populate_reagents() . = ..() - reagents.add_reagent(pick(get_random_fillings()), 3) + add_to_reagents(pick(get_random_fillings()), 3) /obj/item/chems/food/donut/jelly name = "jelly donut" desc = "You jelly?" - icon_state = "jdonut1" + icon = 'icons/obj/food/donuts/donut_jelly.dmi' + iced_icon = 'icons/obj/food/donuts/donut_jelly_iced.dmi' filling_color = "#ed1169" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_amt = 3 bitesize = 5 nutriment_type = /decl/material/liquid/nutriment/bread - donut_state = "jdonut" + var/jelly_type = /decl/material/liquid/nutriment/cherryjelly /obj/item/chems/food/donut/jelly/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/cherryjelly, 5) + add_to_reagents(jelly_type, 5) //Sol Vendor /obj/item/chems/food/lunacake @@ -359,7 +358,7 @@ desc = "Now with 20% less lawsuit enabling regolith!" trash = /obj/item/trash/cakewrap filling_color = "#ffffff" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("sweet" = 4, "vanilla" = 1) nutriment_amt = 5 bitesize = 2 @@ -387,7 +386,7 @@ desc = "Contains over 9000% of your daily recommended intake of salt." trash = /obj/item/trash/tidegobs filling_color = "#2556b0" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("salt" = 4, "ocean" = 1, "seagull" = 1) nutriment_amt = 5 bitesize = 2 @@ -398,7 +397,7 @@ desc = "A day ration of salt, styrofoam and possibly sawdust." trash = /obj/item/trash/saturno filling_color = "#dca319" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("salt" = 4, "peanut" = 2, "wood?" = 1) nutriment_amt = 5 bitesize = 2 @@ -409,7 +408,7 @@ desc = "Some kind of gel, maybe?" trash = /obj/item/trash/jupiter filling_color = "#dc1919" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("jelly?" = 5) nutriment_amt = 5 bitesize = 2 @@ -420,7 +419,7 @@ desc = "Baseless tasteless nutrient rods to get you through the day. Now even less rash inducing!" trash = /obj/item/trash/pluto filling_color = "#ffffff" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("chalk" = 4, "sadness" = 1) nutriment_amt = 5 bitesize = 2 @@ -431,7 +430,7 @@ desc = "A steaming self-heated bowl of sweet eggs and taters!" trash = /obj/item/trash/mars filling_color = "#d2c63f" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("eggs" = 4, "potato" = 4, "mustard" = 2) nutriment_amt = 8 bitesize = 2 @@ -442,7 +441,7 @@ desc = "Hot takes on hot cakes, a timeless classic now finally fit for human consumption!" trash = /obj/item/trash/venus filling_color = "#d2c63f" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("heat" = 4, "burning" = 1) nutriment_amt = 5 bitesize = 2 @@ -450,7 +449,7 @@ /obj/item/chems/food/venus/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/capsaicin, 5) + add_to_reagents(/decl/material/liquid/capsaicin, 5) /obj/item/chems/food/oort name = "\improper Cloud Rocks" @@ -458,14 +457,14 @@ desc = "Pop rocks. The new formula guarantees fewer shrapnel induced oral injuries." trash = /obj/item/trash/oort filling_color = "#3f7dd2" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("fizz" = 3, "sweet?" = 1, "shrapnel" = 1) nutriment_amt = 5 bitesize = 2 /obj/item/chems/food/oort/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/frostoil, 5) + add_to_reagents(/decl/material/liquid/frostoil, 5) //weebo vend! So japanese it hurts @@ -496,7 +495,7 @@ /obj/item/chems/food/weebonuts/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/capsaicin, 1) + add_to_reagents(/decl/material/liquid/capsaicin, 1) /obj/item/chems/food/chocobanana name = "choco banana" @@ -509,7 +508,7 @@ /obj/item/chems/food/chocobanana/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/sprinkles, 10) + add_to_reagents(/decl/material/liquid/nutriment/sprinkles, 10) /obj/item/chems/food/dango name = "dango" @@ -537,7 +536,7 @@ return has_been_heated = 1 user.visible_message("[user] crushes \the [src] package.", "You crush \the [src] package and feel a comfortable heat build up.") - addtimer(CALLBACK(src, .proc/heat, weakref(user)), 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(heat), weakref(user)), 20 SECONDS) /obj/item/chems/food/donkpocket/sinpocket/heat(weakref/message_to) ..() @@ -551,7 +550,7 @@ desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" filling_color = "#dedeab" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("heartiness" = 1, "dough" = 2) nutriment_amt = 2 var/warm = 0 @@ -559,17 +558,17 @@ /obj/item/chems/food/donkpocket/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/donkpocket/proc/heat() if(warm) return warm = 1 for(var/reagent in heated_reagents) - reagents.add_reagent(reagent, heated_reagents[reagent]) + add_to_reagents(reagent, heated_reagents[reagent]) bitesize = 6 SetName("warm donk-pocket") - addtimer(CALLBACK(src, .proc/cool), 7 MINUTES) + addtimer(CALLBACK(src, PROC_REF(cool)), 7 MINUTES) /obj/item/chems/food/donkpocket/proc/cool() if(!warm) diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm index 2d660fbdab1..0a3685c8cf7 100644 --- a/code/modules/reagents/reagent_containers/food/lunch.dm +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -3,10 +3,10 @@ var/global/list/lunchables_lunches_ = list( /obj/item/chems/food/slice/meatbread/filled, /obj/item/chems/food/slice/tofubread/filled, /obj/item/chems/food/slice/creamcheesebread/filled, - /obj/item/chems/food/slice/margherita/filled, - /obj/item/chems/food/slice/meatpizza/filled, - /obj/item/chems/food/slice/mushroompizza/filled, - /obj/item/chems/food/slice/vegetablepizza/filled, + /obj/item/chems/food/slice/pizza/margherita/filled, + /obj/item/chems/food/slice/pizza/meat/filled, + /obj/item/chems/food/slice/pizza/mushroom/filled, + /obj/item/chems/food/slice/pizza/vegetable/filled, /obj/item/chems/food/tastybread, /obj/item/chems/food/liquidfood, /obj/item/chems/food/jellysandwich/cherry, diff --git a/code/modules/reagents/reagent_containers/food/meat/cubes.dm b/code/modules/reagents/reagent_containers/food/meat/cubes.dm index 3636faf49a2..5f4b9ca62a2 100644 --- a/code/modules/reagents/reagent_containers/food/meat/cubes.dm +++ b/code/modules/reagents/reagent_containers/food/meat/cubes.dm @@ -3,11 +3,11 @@ /obj/item/chems/food/monkeycube name = "monkey cube" desc = "Just add water!" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER + atom_flags = ATOM_FLAG_OPEN_CONTAINER icon_state = "monkeycube" bitesize = 12 filling_color = "#adac7f" - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' var/growing = FALSE var/monkey_type = /mob/living/carbon/human/monkey @@ -15,7 +15,7 @@ /obj/item/chems/food/monkeycube/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/monkeycube/get_single_monetary_worth() . = (monkey_type ? round(atom_info_repository.get_combined_worth_for(monkey_type) * 1.25) : 5) @@ -26,12 +26,12 @@ if(wrapper_type) Unwrap(user) -/obj/item/chems/food/monkeycube/proc/Expand() +/obj/item/chems/food/monkeycube/proc/Expand(force_loc) if(!growing) growing = TRUE - src.visible_message(SPAN_NOTICE("\The [src] expands!")) + visible_message(SPAN_NOTICE("\The [src] expands!")) var/mob/monkey = new monkey_type - monkey.dropInto(src.loc) + monkey.dropInto(force_loc || loc) qdel(src) /obj/item/chems/food/monkeycube/proc/Unwrap(var/mob/user) @@ -42,13 +42,16 @@ user.put_in_hands(new wrapper_type(get_turf(user))) wrapper_type = null -/obj/item/chems/food/monkeycube/On_Consume(var/mob/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.visible_message("A screeching creature bursts out of [M]'s chest!") - var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(H, BP_CHEST) - organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage") - Expand() +/obj/item/chems/food/monkeycube/handle_eaten_by_mob(mob/user, mob/target) + . = ..() + if(. == EATEN_SUCCESS) + target = target || user + if(target) + target.visible_message(SPAN_DANGER("A screeching creature bursts out of \the [target]!")) + var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(target, BP_CHEST) + if(organ) + organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage") + Expand(get_turf(target)) /obj/item/chems/food/monkeycube/on_reagent_change() ..() diff --git a/code/modules/reagents/reagent_containers/food/meat/fish.dm b/code/modules/reagents/reagent_containers/food/meat/fish.dm index abec8e0faf1..d5c9118b9e3 100644 --- a/code/modules/reagents/reagent_containers/food/meat/fish.dm +++ b/code/modules/reagents/reagent_containers/food/meat/fish.dm @@ -3,39 +3,39 @@ desc = "A finger of fish." icon_state = "fishfingers" filling_color = "#ffdefe" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 3 /obj/item/chems/food/fishfingers/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/cubancarp name = "\improper Cuban Carp" desc = "A sandwich that burns your tongue and then leaves it numb!" icon_state = "cubancarp" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#e9adff" - center_of_mass = @"{'x':12,'y':5}" + center_of_mass = @'{"x":12,"y":5}' nutriment_desc = list("toasted bread" = 3) nutriment_amt = 3 bitesize = 3 /obj/item/chems/food/cubancarp/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) - reagents.add_reagent(/decl/material/liquid/capsaicin, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/capsaicin, 3) /obj/item/chems/food/fishandchips name = "fish and chips" desc = "Best enjoyed wrapped in a newspaper on a cold wet day." icon_state = "fishandchips" filling_color = "#e3d796" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' nutriment_desc = list("salt" = 1, "chips" = 2, "fish" = 2) nutriment_amt = 3 bitesize = 3 /obj/item/chems/food/fishandchips/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) \ No newline at end of file + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/meat/meat.dm b/code/modules/reagents/reagent_containers/food/meat/meat.dm index 79f809cd11e..b2a33dda7f2 100644 --- a/code/modules/reagents/reagent_containers/food/meat/meat.dm +++ b/code/modules/reagents/reagent_containers/food/meat/meat.dm @@ -5,12 +5,12 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawcutlet" bitesize = 1 - center_of_mass = @"{'x':17,'y':20}" + center_of_mass = @'{"x":17,"y":20}' material = /decl/material/solid/organic/meat /obj/item/chems/food/rawcutlet/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 1) /obj/item/chems/food/cutlet name = "cutlet" @@ -18,12 +18,12 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "cutlet" bitesize = 2 - center_of_mass = @"{'x':17,'y':20}" + center_of_mass = @'{"x":17,"y":20}' material = /decl/material/solid/organic/meat /obj/item/chems/food/cutlet/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/rawmeatball name = "raw meatball" @@ -31,25 +31,25 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "rawmeatball" bitesize = 2 - center_of_mass = @"{'x':16,'y':15}" + center_of_mass = @'{"x":16,"y":15}' material = /decl/material/solid/organic/meat /obj/item/chems/food/rawmeatball/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/meatball name = "meatball" desc = "A great meal all round." icon_state = "meatball" filling_color = "#db0000" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 2 material = /decl/material/solid/organic/meat /obj/item/chems/food/meatball/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) /obj/item/chems/food/plainsteak name = "plain steak" @@ -59,29 +59,30 @@ slice_path = /obj/item/chems/food/cutlet slices_num = 3 filling_color = "#7a3d11" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 3 material = /decl/material/solid/organic/meat + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SLICE /obj/item/chems/food/plainsteak/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/meatsteak name = "meat steak" desc = "A piece of hot spicy meat." icon_state = "meatstake" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#7a3d11" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 3 material = /decl/material/solid/organic/meat /obj/item/chems/food/meatsteak/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) - reagents.add_reagent(/decl/material/solid/sodiumchloride, 1) - reagents.add_reagent(/decl/material/solid/blackpepper, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/solid/sodiumchloride, 1) + add_to_reagents(/decl/material/solid/blackpepper, 1) /obj/item/chems/food/meatsteak/synthetic name = "meaty steak" @@ -91,9 +92,9 @@ name = "loaded steak" desc = "A steak slathered in sauce with sauteed onions and mushrooms." icon_state = "meatstake" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#7a3d11" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("onion" = 2, "mushroom" = 2) nutriment_amt = 4 bitesize = 3 @@ -101,15 +102,15 @@ /obj/item/chems/food/loadedsteak/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) - reagents.add_reagent(/decl/material/liquid/nutriment/garlicsauce, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/garlicsauce, 2) /obj/item/chems/food/tomatomeat name = "tomato slice" desc = "A slice from a huge tomato." icon_state = "tomatomeat" filling_color = "#db0000" - center_of_mass = @"{'x':17,'y':16}" + center_of_mass = @'{"x":17,"y":16}' nutriment_amt = 3 nutriment_desc = list("raw" = 2, "tomato" = 3) bitesize = 6 @@ -119,27 +120,27 @@ desc = "A very manly slab of meat." icon_state = "bearmeat" filling_color = "#db0000" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' bitesize = 3 material = /decl/material/solid/organic/meat /obj/item/chems/food/bearmeat/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 12) - reagents.add_reagent(/decl/material/liquid/amphetamines, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 12) + add_to_reagents(/decl/material/liquid/amphetamines, 5) /obj/item/chems/food/spider name = "giant spider leg" desc = "An economical replacement for crab. In space! Would probably be a lot nicer cooked." icon_state = "spiderleg" filling_color = "#d5f5dc" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' bitesize = 3 material = /decl/material/solid/organic/meat /obj/item/chems/food/spider/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 9) + add_to_reagents(/decl/material/liquid/nutriment/protein, 9) /obj/item/chems/food/spider/cooked name = "boiled spider meat" @@ -152,14 +153,14 @@ desc = "A slab of green meat. Smells like acid." icon_state = "xenomeat" filling_color = "#43de18" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' bitesize = 6 material = /decl/material/solid/organic/meat /obj/item/chems/food/xenomeat/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) - reagents.add_reagent(/decl/material/liquid/acid/polyacid, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/acid/polyacid, 6) /obj/item/chems/food/sausage name = "sausage" @@ -167,40 +168,40 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "sausage" filling_color = "#db0000" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 2 material = /decl/material/solid/organic/meat /obj/item/chems/food/sausage/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) /obj/item/chems/food/fatsausage name = "spiced sausage" desc = "A piece of mixed, long meat, with some bite to it." icon_state = "sausage" filling_color = "#db0000" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 2 material = /decl/material/solid/organic/meat /obj/item/chems/food/fatsausage/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) /obj/item/chems/food/organ name = "organ" - desc = "It's good for you." + desc = "It's good for you, probably." icon = 'icons/obj/surgery.dmi' icon_state = "appendix" filling_color = "#e00d34" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 3 /obj/item/chems/food/organ/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, rand(3,5)) - reagents.add_reagent(/decl/material/liquid/bromide, rand(1,3)) //lolwat? + add_to_reagents(/decl/material/liquid/nutriment/protein, rand(3,5)) + add_to_reagents(/decl/material/gas/ammonia, rand(1,3)) // you probably should not be eating raw organ meat /obj/item/chems/food/meatkabob name = "meat-kabob" @@ -208,9 +209,9 @@ desc = "Delicious meat, on a stick." trash = /obj/item/stack/material/rods filling_color = "#a85340" - center_of_mass = @"{'x':17,'y':15}" + center_of_mass = @'{"x":17,"y":15}' bitesize = 2 /obj/item/chems/food/meatkabob/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) \ No newline at end of file + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/meat/slabs.dm b/code/modules/reagents/reagent_containers/food/meat/slabs.dm index f7b078085d7..4a7aa12fa25 100644 --- a/code/modules/reagents/reagent_containers/food/meat/slabs.dm +++ b/code/modules/reagents/reagent_containers/food/meat/slabs.dm @@ -7,13 +7,14 @@ slices_num = 3 max_health = 180 filling_color = "#ff1c1c" - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' material = /decl/material/solid/organic/meat bitesize = 3 + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SLICE /obj/item/chems/food/meat/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 9) + add_to_reagents(/decl/material/liquid/nutriment/protein, 9) /obj/item/chems/food/meat/syntiflesh name = "synthetic meat" diff --git a/code/modules/reagents/reagent_containers/food/misc.dm b/code/modules/reagents/reagent_containers/food/misc.dm index 79781c1c3a9..1f1f54abf16 100644 --- a/code/modules/reagents/reagent_containers/food/misc.dm +++ b/code/modules/reagents/reagent_containers/food/misc.dm @@ -3,20 +3,20 @@ desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211f02" - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' bitesize = 2 /obj/item/chems/food/badrecipe/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 1) - reagents.add_reagent(/decl/material/solid/carbon, 3) + add_to_reagents(/decl/material/liquid/acrylamide, 1) + add_to_reagents(/decl/material/solid/carbon, 3) /obj/item/chems/food/stuffing name = "stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" filling_color = "#c9ac83" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_amt = 3 nutriment_desc = list("dryness" = 2, "bread" = 2) bitesize = 1 @@ -27,7 +27,7 @@ icon_state = "popcorn" trash = /obj/item/trash/popcorn filling_color = "#fffad4" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("popcorn" = 3) nutriment_amt = 2 bitesize = 0.1 @@ -37,14 +37,14 @@ desc = "Totally baked." icon_state = "loadedbakedpotato" filling_color = "#9c7a68" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("baked potato" = 3) nutriment_amt = 3 bitesize = 2 /obj/item/chems/food/loadedbakedpotato/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) /obj/item/chems/food/spacylibertyduff name = "party jelly" @@ -52,14 +52,14 @@ icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl filling_color = "#42b873" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("mushroom" = 5, "rainbow" = 1) nutriment_amt = 6 bitesize = 3 /obj/item/chems/food/spacylibertyduff/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/psychotropics, 6) + add_to_reagents(/decl/material/liquid/psychotropics, 6) /obj/item/chems/food/amanitajelly name = "amanita jelly" @@ -67,54 +67,54 @@ icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl filling_color = "#ed0758" - center_of_mass = @"{'x':16,'y':5}" + center_of_mass = @'{"x":16,"y":5}' nutriment_desc = list("jelly" = 3, "mushroom" = 3) nutriment_amt = 6 bitesize = 3 /obj/item/chems/food/amanitajelly/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/amatoxin, 6) - reagents.add_reagent(/decl/material/liquid/psychotropics, 3) + add_to_reagents(/decl/material/liquid/amatoxin, 6) + add_to_reagents(/decl/material/liquid/psychotropics, 3) /obj/item/chems/food/enchiladas name = "enchiladas" desc = "Not to be confused with an echidna, though I don't know how you would." icon_state = "enchiladas" - trash = /obj/item/trash/tray + plate = /obj/item/plate/tray filling_color = "#a36a1f" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("tortilla" = 3, "corn" = 3) nutriment_amt = 2 bitesize = 4 /obj/item/chems/food/enchiladas/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 6) - reagents.add_reagent(/decl/material/liquid/capsaicin, 6) + add_to_reagents(/decl/material/liquid/nutriment/protein, 6) + add_to_reagents(/decl/material/liquid/capsaicin, 6) /obj/item/chems/food/monkeysdelight name = "monkey's delight" desc = "Eeee Eee!" icon_state = "monkeysdelight" - trash = /obj/item/trash/tray + plate = /obj/item/plate/tray filling_color = "#5c3c11" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' bitesize = 6 /obj/item/chems/food/monkeysdelight/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) - reagents.add_reagent(/decl/material/liquid/drink/juice/banana, 5) - reagents.add_reagent(/decl/material/solid/blackpepper, 1) - reagents.add_reagent(/decl/material/solid/sodiumchloride, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/drink/juice/banana, 5) + add_to_reagents(/decl/material/solid/blackpepper, 1) + add_to_reagents(/decl/material/solid/sodiumchloride, 1) /obj/item/chems/food/candiedapple name = "candied apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" filling_color = "#f21873" - center_of_mass = @"{'x':15,'y':13}" + center_of_mass = @'{"x":15,"y":13}' nutriment_desc = list("apple" = 3, "caramel" = 3, "sweetness" = 2) nutriment_amt = 3 bitesize = 3 @@ -124,19 +124,19 @@ desc = "A tasty after-dinner mint. It is only wafer thin." icon_state = "mint" filling_color = "#f2f2f2" - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' bitesize = 1 /obj/item/chems/food/mint/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/syrup/mint, 1) + add_to_reagents(/decl/material/liquid/drink/syrup/mint, 1) /obj/item/chems/food/plumphelmetbiscuit name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced wheat flour." icon_state = "phelmbiscuit" filling_color = "#cfb4c4" - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' nutriment_desc = list("mushroom" = 4) nutriment_amt = 5 bitesize = 2 @@ -146,30 +146,31 @@ if(prob(10)) name = "exceptional plump helmet biscuit" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent(/decl/material/liquid/nutriment, 3) - reagents.add_reagent(/decl/material/liquid/regenerator, 5) + add_to_reagents(/decl/material/liquid/nutriment, 3) + add_to_reagents(/decl/material/liquid/regenerator, 5) /obj/item/chems/food/appletart name = "golden apple streusel tart" desc = "A tasty dessert that won't make it through a metal detector." icon_state = "gappletart" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ffff00" - center_of_mass = @"{'x':16,'y':18}" + center_of_mass = @'{"x":16,"y":18}' nutriment_desc = list("apple" = 8) nutriment_amt = 8 bitesize = 3 /obj/item/chems/food/appletart/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/solid/metal/gold, 5) + add_to_reagents(/decl/material/solid/metal/gold, 5) /obj/item/chems/food/cracker name = "cracker" desc = "It's a salted cracker." - icon_state = "cracker" + icon = 'icons/obj/food/cracker.dmi' + icon_state = ICON_STATE_WORLD filling_color = "#f5deb8" - center_of_mass = @"{'x':17,'y':6}" + center_of_mass = @'{"x":17,"y":6}' nutriment_desc = list("salt" = 1, "cracker" = 2) w_class = ITEM_SIZE_TINY nutriment_amt = 1 @@ -184,35 +185,35 @@ desc = "Take a bite!" icon_state = "taco" bitesize = 3 - center_of_mass = @"{'x':21,'y':12}" + center_of_mass = @'{"x":21,"y":12}' nutriment_desc = list("cheese" = 2,"taco shell" = 2) nutriment_amt = 4 nutriment_type = /decl/material/liquid/nutriment/bread /obj/item/chems/food/taco/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) /obj/item/chems/food/pelmen name = "meat pelmen" desc = "Raw meat appetizer." icon_state = "pelmen" filling_color = "#ffffff" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 2 /obj/item/chems/food/pelmen/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 1) /obj/item/chems/food/pelmeni_boiled name = "boiled pelmeni" desc = "A dish consisting of boiled pieces of meat wrapped in dough. Delicious!" icon_state = "pelmeni_boiled" filling_color = "#ffffff" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' bitesize = 2 /obj/item/chems/food/pelmeni_boiled/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 30) + add_to_reagents(/decl/material/liquid/nutriment/protein, 30) diff --git a/code/modules/reagents/reagent_containers/food/pasta.dm b/code/modules/reagents/reagent_containers/food/pasta.dm index 97f839d2db3..572d3fd02ee 100644 --- a/code/modules/reagents/reagent_containers/food/pasta.dm +++ b/code/modules/reagents/reagent_containers/food/pasta.dm @@ -7,7 +7,7 @@ desc = "A bundle of raw spaghetti." icon_state = "spagetti" filling_color = "#eddd00" - center_of_mass = @"{'x':16,'y':16}" + center_of_mass = @'{"x":16,"y":16}' nutriment_desc = list("noodles" = 2) nutriment_amt = 1 bitesize = 1 @@ -16,9 +16,9 @@ name = "boiled spaghetti" desc = "A plain dish of pasta, just screaming for sauce." icon_state = "spagettiboiled" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fcee81" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("noodles" = 2) nutriment_amt = 2 bitesize = 2 @@ -27,55 +27,55 @@ name = "spaghetti & tomato" desc = "Spaghetti and crushed tomatoes." icon_state = "pastatomato" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#de4545" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("tomato" = 3, "noodles" = 3) nutriment_amt = 6 bitesize = 4 /obj/item/chems/food/pastatomato/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 10) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 10) /obj/item/chems/food/nanopasta name = "nanopasta" desc = "Nanomachines, son!" icon_state = "nanopasta" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#535e66" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_amt = 6 bitesize = 4 /obj/item/chems/food/nanopasta/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nanitefluid, 10) + add_to_reagents(/decl/material/liquid/nanitefluid, 10) /obj/item/chems/food/meatballspagetti name = "spaghetti & meatballs" desc = "Now thats a nice meatball!" icon_state = "meatballspagetti" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#de4545" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("noodles" = 4) nutriment_amt = 4 bitesize = 2 /obj/item/chems/food/meatballspagetti/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) /obj/item/chems/food/spesslaw name = "spaghetti & too many meatballs" desc = "Do you want some pasta with those meatballs?" icon_state = "spesslaw" filling_color = "#de4545" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("noodles" = 4) nutriment_amt = 4 bitesize = 2 /obj/item/chems/food/spesslaw/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) diff --git a/code/modules/reagents/reagent_containers/food/rice.dm b/code/modules/reagents/reagent_containers/food/rice.dm index f95a46518c2..34db6b3e997 100644 --- a/code/modules/reagents/reagent_containers/food/rice.dm +++ b/code/modules/reagents/reagent_containers/food/rice.dm @@ -8,7 +8,7 @@ icon_state = "boiledrice" trash = /obj/item/trash/snack_bowl filling_color = "#fffbdb" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_desc = list("rice" = 2) nutriment_amt = 6 bitesize = 2 @@ -27,7 +27,7 @@ icon_state = "katsu" trash = /obj/item/trash/snack_bowl filling_color = "#faa005" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_desc = list("rice" = 2, "apple" = 2, "potato" = 2, "carrot" = 2, "bread" = 2, ) nutriment_amt = 6 bitesize = 2 @@ -38,7 +38,7 @@ icon_state = "rpudding" trash = /obj/item/trash/snack_bowl filling_color = "#fffbdb" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_desc = list("rice" = 2) nutriment_amt = 4 bitesize = 2 \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/rotten.dm b/code/modules/reagents/reagent_containers/food/rotten.dm index 4ec76666392..7bd6d271426 100644 --- a/code/modules/reagents/reagent_containers/food/rotten.dm +++ b/code/modules/reagents/reagent_containers/food/rotten.dm @@ -3,7 +3,7 @@ /obj/item/chems/food/old name = "master old-food" desc = "they're all inedible and potentially dangerous items" - center_of_mass = @"{'x':15,'y':12}" + center_of_mass = @'{"x":15,"y":12}' nutriment_desc = list("rot" = 5, "mold" = 5) nutriment_amt = 10 bitesize = 3 @@ -12,7 +12,7 @@ /obj/item/chems/food/old/populate_reagents() . = ..() - reagents.add_reagent(pick( + add_to_reagents(pick( /decl/material/liquid/fuel, /decl/material/liquid/amatoxin, /decl/material/liquid/carpotoxin, @@ -42,7 +42,7 @@ /obj/item/chems/food/old/hotdog name = "hotdog" - desc = "This one is probably only marginally less safe to eat than when it was first created.." + desc = "This is probably only marginally less safe to eat than when it was first created." icon_state = "ancient_hotdog" /obj/item/chems/food/old/taco diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index 1ce36ad4255..00d0fbf391c 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -11,7 +11,7 @@ name = "sandwich" desc = "The best thing since sliced bread." icon_state = "breadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate bitesize = 2 var/list/ingredients = list() diff --git a/code/modules/reagents/reagent_containers/food/sliceable.dm b/code/modules/reagents/reagent_containers/food/sliceable.dm index 0648b1934ce..37a191e5eb4 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable.dm @@ -7,6 +7,8 @@ /obj/item/chems/food/sliceable w_class = ITEM_SIZE_NORMAL //whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that. + utensil_flags = UTENSIL_FLAG_COLLECT | UTENSIL_FLAG_SLICE + /** * A food item slice * diff --git a/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm b/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm index f9e9bd01be4..f7b1f0ccb11 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable/cakes.dm @@ -5,7 +5,7 @@ slice_path = /obj/item/chems/food/slice/carrotcake slices_num = 5 filling_color = "#ffd675" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "carrot" = 15) nutriment_amt = 25 bitesize = 2 @@ -13,16 +13,16 @@ /obj/item/chems/food/sliceable/carrotcake/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/eyedrops, 10) + add_to_reagents(/decl/material/liquid/eyedrops, 10) /obj/item/chems/food/slice/carrotcake name = "carrot cake slice" desc = "Carrotty slice of carrot cake, carrots are good for your eyes! It's true! Probably!" icon_state = "carrotcake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ffd675" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/carrotcake /obj/item/chems/food/slice/carrotcake/filled @@ -35,7 +35,7 @@ slice_path = /obj/item/chems/food/slice/braincake slices_num = 5 filling_color = "#e6aedb" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "slime" = 15) nutriment_amt = 5 bitesize = 2 @@ -43,17 +43,17 @@ /obj/item/chems/food/sliceable/braincake/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 25) - reagents.add_reagent(/decl/material/liquid/neuroannealer, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 25) + add_to_reagents(/decl/material/liquid/neuroannealer, 10) /obj/item/chems/food/slice/braincake name = "brain cake slice" desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." icon_state = "braincakeslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#e6aedb" bitesize = 2 - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' whole_path = /obj/item/chems/food/sliceable/braincake /obj/item/chems/food/slice/braincake/filled @@ -66,23 +66,23 @@ slice_path = /obj/item/chems/food/slice/cheesecake slices_num = 5 filling_color = "#faf7af" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "cream" = 10, "cheese" = 15) nutriment_amt = 10 bitesize = 2 /obj/item/chems/food/sliceable/cheesecake/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 15) + add_to_reagents(/decl/material/liquid/nutriment/protein, 15) /obj/item/chems/food/slice/cheesecake name = "cheese cake slice" desc = "Slice of pure cheestisfaction." icon_state = "cheesecake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#faf7af" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/cheesecake /obj/item/chems/food/slice/cheesecake/filled @@ -95,7 +95,7 @@ slice_path = /obj/item/chems/food/slice/plaincake slices_num = 5 filling_color = "#f7edd5" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "vanilla" = 15) nutriment_amt = 20 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -104,10 +104,10 @@ name = "vanilla cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "plaincake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#f7edd5" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/plaincake /obj/item/chems/food/slice/plaincake/filled @@ -120,7 +120,7 @@ slice_path = /obj/item/chems/food/slice/orangecake slices_num = 5 filling_color = "#fada8e" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "orange" = 15) nutriment_amt = 20 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -129,10 +129,10 @@ name = "orange cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "orangecake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fada8e" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/orangecake /obj/item/chems/food/slice/orangecake/filled @@ -145,7 +145,7 @@ slice_path = /obj/item/chems/food/slice/limecake slices_num = 5 filling_color = "#cbfa8e" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "lime" = 15) nutriment_amt = 20 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -154,10 +154,10 @@ name = "lime cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "limecake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#cbfa8e" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/limecake /obj/item/chems/food/slice/limecake/filled @@ -170,7 +170,7 @@ slice_path = /obj/item/chems/food/slice/lemoncake slices_num = 5 filling_color = "#fafa8e" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "lemon" = 15) nutriment_amt = 20 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -179,10 +179,10 @@ name = "lemon cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "lemoncake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fafa8e" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/lemoncake /obj/item/chems/food/slice/lemoncake/filled @@ -195,7 +195,7 @@ slice_path = /obj/item/chems/food/slice/chocolatecake slices_num = 5 filling_color = "#805930" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "chocolate" = 15) nutriment_amt = 20 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -204,10 +204,10 @@ name = "chocolate cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "chocolatecake_slice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#805930" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/chocolatecake /obj/item/chems/food/slice/chocolatecake/filled @@ -220,7 +220,7 @@ slice_path = /obj/item/chems/food/slice/birthdaycake slices_num = 5 filling_color = "#ffd6d6" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10) nutriment_amt = 20 bitesize = 3 @@ -228,16 +228,16 @@ /obj/item/chems/food/sliceable/birthdaycake/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/sprinkles, 10) + add_to_reagents(/decl/material/liquid/nutriment/sprinkles, 10) /obj/item/chems/food/slice/birthdaycake name = "birthday cake slice" desc = "A slice of your birthday." icon_state = "birthdaycakeslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ffd6d6" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/birthdaycake /obj/item/chems/food/slice/birthdaycake/filled @@ -250,7 +250,7 @@ slice_path = /obj/item/chems/food/slice/applecake slices_num = 5 filling_color = "#ebf5b8" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cake" = 10, "sweetness" = 10, "apple" = 15) nutriment_amt = 15 nutriment_type = /decl/material/liquid/nutriment/bread/cake @@ -259,10 +259,10 @@ name = "apple cake slice" desc = "A slice of heavenly cake." icon_state = "applecakeslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ebf5b8" bitesize = 2 - center_of_mass = @"{'x':16,'y':14}" + center_of_mass = @'{"x":16,"y":14}' whole_path = /obj/item/chems/food/sliceable/applecake /obj/item/chems/food/slice/applecake/filled @@ -275,7 +275,7 @@ slice_path = /obj/item/chems/food/slice/pumpkinpie slices_num = 5 filling_color = "#f5b951" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("pie" = 5, "cream" = 5, "pumpkin" = 5) nutriment_amt = 15 @@ -283,10 +283,10 @@ name = "pumpkin pie slice" desc = "A slice of pumpkin pie, with whipped cream on top. Perfection." icon_state = "pumpkinpieslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#f5b951" bitesize = 2 - center_of_mass = @"{'x':16,'y':12}" + center_of_mass = @'{"x":16,"y":12}' whole_path = /obj/item/chems/food/sliceable/pumpkinpie /obj/item/chems/food/slice/pumpkinpie/filled diff --git a/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm b/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm index fb076444459..b2b03bc52d9 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable/cheeses.dm @@ -5,14 +5,14 @@ slice_path = /obj/item/chems/food/cheesewedge slices_num = 5 filling_color = "#fff700" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("cheese" = 10) nutriment_amt = 10 bitesize = 2 /obj/item/chems/food/sliceable/cheesewheel/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 10) + add_to_reagents(/decl/material/liquid/nutriment/protein, 10) /obj/item/chems/food/cheesewedge name = "cheese wedge" @@ -20,6 +20,6 @@ icon_state = "cheesewedge" filling_color = "#fff700" bitesize = 2 - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' // todo: non-cheddar cheeses \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm b/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm index b5c168fd449..6c7d8a70ba2 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable/loaves.dm @@ -5,7 +5,7 @@ slice_path = /obj/item/chems/food/slice/meatbread slices_num = 5 filling_color = "#ff7575" - center_of_mass = @"{'x':19,'y':9}" + center_of_mass = @'{"x":19,"y":9}' nutriment_desc = list("bread" = 10) nutriment_amt = 10 bitesize = 2 @@ -13,16 +13,16 @@ /obj/item/chems/food/sliceable/meatbread/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 20) + add_to_reagents(/decl/material/liquid/nutriment/protein, 20) /obj/item/chems/food/slice/meatbread name = "meatbread slice" desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ff7575" bitesize = 2 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' whole_path = /obj/item/chems/food/sliceable/meatbread /obj/item/chems/food/slice/meatbread/filled @@ -35,7 +35,7 @@ slice_path = /obj/item/chems/food/slice/xenomeatbread slices_num = 5 filling_color = "#8aff75" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' nutriment_desc = list("bread" = 10) nutriment_amt = 10 bitesize = 2 @@ -43,16 +43,16 @@ /obj/item/chems/food/sliceable/xenomeatbread/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 20) + add_to_reagents(/decl/material/liquid/nutriment/protein, 20) /obj/item/chems/food/slice/xenomeatbread name = "xenomeatbread slice" desc = "A slice of delicious meatbread. Extra Heretical." icon_state = "xenobreadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#8aff75" bitesize = 2 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' whole_path = /obj/item/chems/food/sliceable/xenomeatbread /obj/item/chems/food/slice/xenomeatbread/filled @@ -65,7 +65,7 @@ slice_path = /obj/item/chems/food/slice/bananabread slices_num = 5 filling_color = "#ede5ad" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' nutriment_desc = list("bread" = 10) nutriment_amt = 10 bitesize = 2 @@ -73,16 +73,16 @@ /obj/item/chems/food/sliceable/bananabread/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/banana_cream, 20) + add_to_reagents(/decl/material/liquid/nutriment/banana_cream, 20) /obj/item/chems/food/slice/bananabread name = "banana-nut bread slice" desc = "A slice of delicious banana bread." icon_state = "bananabreadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#ede5ad" bitesize = 2 - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' whole_path = /obj/item/chems/food/sliceable/bananabread /obj/item/chems/food/slice/bananabread/filled @@ -95,7 +95,7 @@ slice_path = /obj/item/chems/food/slice/tofubread slices_num = 5 filling_color = "#f7ffe0" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' nutriment_desc = list("tofu" = 10) nutriment_amt = 10 bitesize = 2 @@ -105,10 +105,10 @@ name = "tofubread slice" desc = "A slice of delicious tofubread." icon_state = "tofubreadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#f7ffe0" bitesize = 2 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' whole_path = /obj/item/chems/food/sliceable/tofubread /obj/item/chems/food/slice/tofubread/filled @@ -121,7 +121,7 @@ slice_path = /obj/item/chems/food/slice/bread slices_num = 5 filling_color = "#ffe396" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' nutriment_desc = list("bread" = 6) nutriment_amt = 6 bitesize = 2 @@ -131,10 +131,10 @@ name = "bread slice" desc = "A slice of home." icon_state = "breadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#d27332" bitesize = 2 - center_of_mass = @"{'x':16,'y':4}" + center_of_mass = @'{"x":16,"y":4}' whole_path = /obj/item/chems/food/sliceable/bread /obj/item/chems/food/slice/bread/filled @@ -147,7 +147,7 @@ slice_path = /obj/item/chems/food/slice/creamcheesebread slices_num = 5 filling_color = "#fff896" - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' nutriment_desc = list("bread" = 6, "cream" = 3, "cheese" = 3) nutriment_amt = 5 bitesize = 2 @@ -155,16 +155,16 @@ /obj/item/chems/food/sliceable/creamcheesebread/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 15) + add_to_reagents(/decl/material/liquid/nutriment/protein, 15) /obj/item/chems/food/slice/creamcheesebread name = "cream cheese bread slice" desc = "A slice of yum!" icon_state = "creamcheesebreadslice" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#fff896" bitesize = 2 - center_of_mass = @"{'x':16,'y':13}" + center_of_mass = @'{"x":16,"y":13}' whole_path = /obj/item/chems/food/sliceable/creamcheesebread /obj/item/chems/food/slice/creamcheesebread/filled diff --git a/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm b/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm index 1232094ad3f..cb6dc5b9cc5 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable/misc_slices.dm @@ -4,4 +4,4 @@ icon_state = "watermelonslice" filling_color = "#ff3867" bitesize = 2 - center_of_mass = @"{'x':16,'y':10}" \ No newline at end of file + center_of_mass = @'{"x":16,"y":10}' \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm deleted file mode 100644 index 8f66d203b88..00000000000 --- a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm +++ /dev/null @@ -1,295 +0,0 @@ -/////////// -// PIZZA // -/////////// - -/obj/item/chems/food/sliceable/pizza - slices_num = 6 - filling_color = "#baa14c" - -/obj/item/chems/food/sliceable/pizza/margherita - name = "margherita" - desc = "The golden standard of pizzas." - icon_state = "pizzamargherita" - slice_path = /obj/item/chems/food/slice/margherita - slices_num = 6 - center_of_mass = @"{'x':16,'y':11}" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15) - nutriment_amt = 35 - bitesize = 2 - nutriment_type = /decl/material/liquid/nutriment/bread - -/obj/item/chems/food/sliceable/pizza/margherita/populate_reagents() - . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 6) - -/obj/item/chems/food/slice/margherita - name = "margherita slice" - desc = "A slice of the classic pizza." - icon_state = "pizzamargheritaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = @"{'x':18,'y':13}" - whole_path = /obj/item/chems/food/sliceable/pizza/margherita - -/obj/item/chems/food/slice/margherita/filled - filled = TRUE - -/obj/item/chems/food/sliceable/pizza/meatpizza - name = "meatpizza" - desc = "A pizza with meat topping." - icon_state = "meatpizza" - slice_path = /obj/item/chems/food/slice/meatpizza - slices_num = 6 - center_of_mass = @"{'x':16,'y':11}" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15) - nutriment_amt = 10 - bitesize = 2 - nutriment_type = /decl/material/liquid/nutriment/bread - -/obj/item/chems/food/sliceable/pizza/meatpizza/populate_reagents() - . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 34) - reagents.add_reagent(/decl/material/liquid/nutriment/barbecue, 6) - -/obj/item/chems/food/slice/meatpizza - name = "meatpizza slice" - desc = "A slice of a meaty pizza." - icon_state = "meatpizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = @"{'x':18,'y':13}" - whole_path = /obj/item/chems/food/sliceable/pizza/meatpizza - -/obj/item/chems/food/slice/meatpizza/filled - filled = TRUE - -/obj/item/chems/food/sliceable/pizza/mushroompizza - name = "mushroompizza" - desc = "Very special pizza." - icon_state = "mushroompizza" - slice_path = /obj/item/chems/food/slice/mushroompizza - slices_num = 6 - center_of_mass = @"{'x':16,'y':11}" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10) - nutriment_amt = 35 - bitesize = 2 - nutriment_type = /decl/material/liquid/nutriment/bread - -/obj/item/chems/food/sliceable/pizza/mushroompizza/populate_reagents() - . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) - -/obj/item/chems/food/slice/mushroompizza - name = "mushroompizza slice" - desc = "Maybe it is the last slice of pizza in your life." - icon_state = "mushroompizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = @"{'x':18,'y':13}" - whole_path = /obj/item/chems/food/sliceable/pizza/mushroompizza - -/obj/item/chems/food/slice/mushroompizza/filled - filled = TRUE - -/obj/item/chems/food/sliceable/pizza/vegetablepizza - name = "vegetable pizza" - desc = "Vegetarian pizza huh? What about all the plants that were slaughtered to make this huh?? Hypocrite." - icon_state = "vegetablepizza" - slice_path = /obj/item/chems/food/slice/vegetablepizza - slices_num = 6 - center_of_mass = @"{'x':16,'y':11}" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5) - nutriment_amt = 25 - bitesize = 2 - nutriment_type = /decl/material/liquid/nutriment/bread - -/obj/item/chems/food/sliceable/pizza/vegetablepizza/populate_reagents() - . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) - reagents.add_reagent(/decl/material/liquid/nutriment/ketchup, 6) - reagents.add_reagent(/decl/material/liquid/eyedrops, 12) - -/obj/item/chems/food/slice/vegetablepizza - name = "vegetable pizza slice" - desc = "A slice of the most green pizza of all pizzas not containing green ingredients." - icon_state = "vegetablepizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = @"{'x':18,'y':13}" - whole_path = /obj/item/chems/food/sliceable/pizza/vegetablepizza - -/obj/item/chems/food/slice/vegetablepizza/filled - filled = TRUE - -/obj/item/pizzabox - name = "pizza box" - desc = "A box suited for pizzas." - icon = 'icons/obj/food.dmi' - icon_state = "pizzabox1" - material = /decl/material/solid/organic/cardboard - var/open = 0 // Is the box open? - var/ismessy = 0 // Fancy mess on the lid - var/obj/item/chems/food/sliceable/pizza/pizza // content pizza - var/list/boxes = list()// If the boxes are stacked, they come here - var/boxtag = "" - -/obj/item/pizzabox/Initialize(ml, material_key) - . = ..() - if(ispath(pizza)) - pizza = new pizza(src) - -/obj/item/pizzabox/on_update_icon() - . = ..() - - // Set appropriate description - if( open && pizza ) - desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if( boxes.len > 0 ) - desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." - - var/obj/item/pizzabox/topbox = boxes[boxes.len] - var/toptag = topbox.boxtag - if( toptag != "" ) - desc = "[desc] The box on top has a tag, it reads: '[toptag]'." - else - desc = "A box suited for pizzas." - - if( boxtag != "" ) - desc = "[desc] The box has a tag, it reads: '[boxtag]'." - - // Icon states and overlays - if( open ) - if( ismessy ) - icon_state = "pizzabox_messy" - else - icon_state = "pizzabox_open" - - if( pizza ) - var/mutable_appearance/pizzaimg = new(pizza) - pizzaimg.pixel_y = -3 - add_overlay(pizzaimg) - return - else - // Stupid code because byondcode sucks - var/doimgtag = 0 - if( boxes.len > 0 ) - var/obj/item/pizzabox/topbox = boxes[boxes.len] - if( topbox.boxtag != "" ) - doimgtag = 1 - else - if( boxtag != "" ) - doimgtag = 1 - - if( doimgtag ) - add_overlay(image("food.dmi", "pizzabox_tag", pixel_y = (boxes.len * 3))) - - icon_state = "pizzabox[boxes.len+1]" - -/obj/item/pizzabox/attack_hand(mob/user) - - if(open && pizza) - if(user.check_dexterity(DEXTERITY_HOLD_ITEM)) - user.put_in_hands(pizza) - to_chat(user, SPAN_NOTICE("You take \the [src.pizza] out of \the [src].")) - pizza = null - update_icon() - return TRUE - - if(length(boxes) && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_HOLD_ITEM)) - var/obj/item/pizzabox/box = boxes[boxes.len] - boxes -= box - user.put_in_hands(box) - to_chat(user, SPAN_WARNING("You remove the topmost [src] from your hand.")) - box.update_icon() - update_icon() - return TRUE - - return ..() - -/obj/item/pizzabox/attack_self(mob/user) - - if( boxes.len > 0 ) - return - - open = !open - - if( open && pizza ) - ismessy = 1 - - update_icon() - -/obj/item/pizzabox/attackby(obj/item/I, mob/user) - if( istype(I, /obj/item/pizzabox/) ) - var/obj/item/pizzabox/box = I - - if( !box.open && !src.open ) - // make a list of all boxes to be added - var/list/boxestoadd = list() - boxestoadd += box - for(var/obj/item/pizzabox/i in box.boxes) - boxestoadd += i - - if( (boxes.len+1) + boxestoadd.len <= 5 ) - if(!user.try_unequip(box, src)) - return TRUE - box.boxes = list()// clear the box boxes so we don't have boxes inside boxes. - Xzibit - src.boxes.Add( boxestoadd ) - - box.update_icon() - update_icon() - - to_chat(user, "You put \the [box] ontop of \the [src]!") - else - to_chat(user, "The stack is too high!") - else - to_chat(user, "Close \the [box] first!") - - return TRUE - - if( istype(I, /obj/item/chems/food/sliceable/pizza/) ) - - if( src.open ) - if(!user.try_unequip(I, src)) - return TRUE - src.pizza = I - - update_icon() - - to_chat(user, "You put \the [I] in \the [src]!") - else - to_chat(user, "You try to push \the [I] through the lid but it doesn't work!") - return TRUE - - if(IS_PEN(I)) - - if( src.open ) - return TRUE - - var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30) - - var/obj/item/pizzabox/boxtotagto = src - if( boxes.len > 0 ) - boxtotagto = boxes[boxes.len] - - boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30) - - update_icon() - return TRUE - return ..() - -/obj/item/pizzabox/margherita - pizza = /obj/item/chems/food/sliceable/pizza/margherita - boxtag = "Margherita Deluxe" - -/obj/item/pizzabox/vegetable - pizza = /obj/item/chems/food/sliceable/pizza/vegetablepizza - boxtag = "Gourmet Vegatable" - -/obj/item/pizzabox/mushroom - pizza = /obj/item/chems/food/sliceable/pizza/mushroompizza - boxtag = "Mushroom Special" - -/obj/item/pizzabox/meat - pizza = /obj/item/chems/food/sliceable/pizza/meatpizza - boxtag = "Meatlover's Supreme" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/_pizza.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/_pizza.dm new file mode 100644 index 00000000000..45d5b1ca36c --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/_pizza.dm @@ -0,0 +1,32 @@ +/obj/item/chems/food/sliceable/pizza + icon_state = ICON_STATE_WORLD + slices_num = 6 + nutriment_amt = 25 + bitesize = 2 + nutriment_type = /decl/material/liquid/nutriment/bread + center_of_mass = @'{"x":16,"y":11}' + filling_color = "#baa14c" + abstract_type = /obj/item/chems/food/sliceable/pizza + nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15) + var/ruined = FALSE // Visual only, doesn't actually impact the edibility or sliceability of the pizza. + +/obj/item/chems/food/sliceable/pizza/proc/ruin() + if(!ruined) + ruined = TRUE + name = "ruined [name]" + update_icon() + +/obj/item/chems/food/sliceable/pizza/on_update_icon() + . = ..() + icon_state = get_world_inventory_state() + if(ruined) + var/ruined_state = "[icon_state]_ruined" + if(check_state_in_icon(ruined_state, icon)) + icon_state = ruined_state + +/obj/item/chems/food/slice/pizza + icon = 'icons/obj/food/pizzas/pizza_slices.dmi' + filling_color = "#baa14c" + bitesize = 2 + center_of_mass = @'{"x":18,"y":13}' + abstract_type = /obj/item/chems/food/slice/pizza diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm new file mode 100644 index 00000000000..b1881b06414 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_box.dm @@ -0,0 +1,333 @@ +/obj/item/pizzabox + name = "pizza box" + desc = "A box suited for pizzas." + icon = 'icons/obj/food/containers/pizzabox.dmi' + icon_state = ICON_STATE_WORLD + material = /decl/material/solid/organic/cardboard + + var/const/RISKY_PIZZA_STACK = 6 + var/const/MAXIMUM_PIZZA_STACK = 15 + var/open = FALSE // Is the box open? + var/image/messy_overlay + var/obj/item/chems/food/sliceable/pizza/pizza + var/list/stacked_boxes + var/box_tag + var/box_tag_color = COLOR_BLACK + +/obj/item/pizzabox/Initialize(ml, material_key) + . = ..() + if(ispath(pizza)) + pizza = new pizza(src) + if(open) + open = FALSE + toggle_open() + else if(box_tag || pizza) + update_strings() + update_icon() + // We care about our own moved event in case of structural failure. + events_repository.register(/decl/observ/moved, src, src, PROC_REF(check_stack_failure)) + +/obj/item/pizzabox/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) + if(overlay && length(stacked_boxes)) + var/i = 1 + for(var/obj/item/pizzabox/box in stacked_boxes) + var/image/I = box.get_mob_overlay(user_mob, slot, bodypart, use_fallback_if_icon_missing, TRUE) + if(I) + I.pixel_y = i * 3 + I.pixel_x = pick(-1,0,1) + overlay.overlays += I + i++ + . = ..() + +// Tossing a pizza around can have terrible effects... +/obj/item/pizzabox/attack(mob/living/M, mob/living/user, var/target_zone) + ..() + return FALSE + +/obj/item/pizzabox/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(proximity_flag && user?.a_intent == I_HURT && user != target) + jostle_pizza() + explode_stack() + +/obj/item/pizzabox/proc/jostle_pizza() + if(pizza && !pizza.ruined && prob(20)) + pizza.ruin() + if(!open && prob(30)) + toggle_open() + else + if(open) + update_icon() + update_strings() + +/obj/item/pizzabox/proc/explode_stack() + var/turf/our_turf = get_turf(src) + if(!our_turf || !LAZYLEN(stacked_boxes)) + return + while(LAZYLEN(stacked_boxes)) + var/obj/item/pizzabox/top_box = stacked_boxes[LAZYLEN(stacked_boxes)] + LAZYREMOVE(stacked_boxes, top_box) + top_box.throw_at(get_edge_target_turf(our_turf, pick(global.alldirs)), 1, 1) // just enough to bonk people + update_strings() + update_icon() + if(ismob(loc)) + var/mob/owner = loc + owner.update_inhand_overlays() + +// This is disgusting, but I can't work out a good way to catch +// the end of a throw regardless of whether or not it hit something. +/obj/item/pizzabox/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) + . = ..() + wait_for_throw_end_then_spill() + +/obj/item/pizzabox/proc/wait_for_throw_end_then_spill() + set waitfor = FALSE + while(!QDELETED(throwing)) + sleep(1) + if(QDELETED(src)) + return + jostle_pizza() + explode_stack() + +/obj/item/pizzabox/proc/check_stack_failure() + + if(isobj(loc) || LAZYLEN(stacked_boxes)+1 < RISKY_PIZZA_STACK) + return // no stack, no worries + + var/fell_off = 0 + var/turf/our_turf = get_turf(src) + if(!isturf(our_turf)) + return // shouldn't happen due to checks above + + var/mob/mover = loc + var/moving_deliberately = ismob(mover) && MOVING_DELIBERATELY(mover) + while(LAZYLEN(stacked_boxes)+1 > RISKY_PIZZA_STACK) + var/danger_zone = ((LAZYLEN(stacked_boxes)+1)-RISKY_PIZZA_STACK) * 10 + if(moving_deliberately) + danger_zone *= 0.5 + if(danger_zone <= 0 || !prob(danger_zone)) + break // we are safe... for now... + var/obj/item/pizzabox/top_box = stacked_boxes[LAZYLEN(stacked_boxes)] + LAZYREMOVE(stacked_boxes, top_box) + top_box.dropInto(our_turf) + top_box.throw_at(get_edge_target_turf(our_turf, pick(global.alldirs)), 1, 1) // just enough to bonk people + fell_off++ + if(fell_off > 0) + our_turf.visible_message(SPAN_DANGER("[fell_off] [fell_off == 1 ? "pizza" : "pizzas"] [fell_off == 1 ? "falls" : "fall"] off the stack!")) + update_strings() + update_icon() + if(ismob(mover)) + mover.update_inhand_overlays() + else if(prob(15) && ismob(mover)) + to_chat(loc, SPAN_WARNING("The stack of pizza boxes sways alarmingly...")) + +/obj/item/pizzabox/proc/toggle_open() + if(LAZYLEN(stacked_boxes)) + return FALSE + open = !open + if(open && pizza && !messy_overlay) + var/mess_state = "[pizza.icon_state]_mess" + if(check_state_in_icon(mess_state, pizza.icon)) + messy_overlay = image(pizza.icon, mess_state) + update_icon() + compile_overlays() // to avoid our tags and messy state flickering + return TRUE + +/obj/item/pizzabox/proc/update_strings() + name = initial(name) + var/list/desc_strings = list(initial(desc)) + if(open && pizza) + desc_strings += "It appears to have \a [pizza] inside." + else if(length(stacked_boxes)) + name = "stack of pizza boxes" + desc_strings += "A pile of boxes suited for pizzas. There appears to be [length(stacked_boxes)+1] boxes in the pile." + var/obj/item/pizzabox/topbox = stacked_boxes[length(stacked_boxes)] + if(topbox?.box_tag) + desc_strings += "The box on top has a tag reading: '[topbox.box_tag]'." + else if(box_tag) + desc_strings += "The box has a tag reading: '[box_tag]'." + desc = jointext(desc_strings, " ") + +/obj/item/pizzabox/on_update_icon() + . = ..() + // Update our own appearance. + icon_state = get_world_inventory_state() + if(open) + icon_state = "[icon_state]_open" + if(messy_overlay) + add_overlay(messy_overlay) + if(pizza) + var/mutable_appearance/pizzaimg = new(pizza) + pizzaimg.layer = FLOAT_LAYER + pizzaimg.plane = FLOAT_PLANE + pizzaimg.pixel_x = 0 + pizzaimg.pixel_y = -3 + pizzaimg.pixel_z = 0 + pizzaimg.pixel_w = 0 + add_overlay(pizzaimg) + return + + // If we're closed, draw our tag and all the pizzas in the stack. + if(box_tag) + add_overlay(overlay_image(icon, "[icon_state]_tag", box_tag_color, RESET_COLOR)) + + // Add all the boxes in the stack. + var/i = 1 + for(var/obj/item/pizzabox/pizza_box in stacked_boxes) + var/mutable_appearance/box_img = new(pizza_box) + box_img.layer = FLOAT_LAYER + box_img.plane = FLOAT_PLANE + box_img.pixel_y = i * 3 + pick(-1,0,1) + box_img.pixel_x = pick(-1,0,1) + box_img.pixel_z = 0 + box_img.pixel_w = 0 + add_overlay(box_img) + i++ + +/obj/item/pizzabox/attack_hand(mob/user) + + if(open && pizza && user.a_intent != I_GRAB) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM)) + user.put_in_hands(pizza) + to_chat(user, SPAN_NOTICE("You take \the [pizza] out of \the [src].")) + pizza = null + update_icon() + return TRUE + + var/box_count = LAZYLEN(stacked_boxes) + if(box_count && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_HOLD_ITEM)) + var/obj/item/pizzabox/box = stacked_boxes[box_count] + LAZYREMOVE(stacked_boxes, box) + user.put_in_hands(box) + to_chat(user, SPAN_WARNING("You remove the topmost [src] from your hand.")) + + if((LAZYLEN(stacked_boxes)+1) == (RISKY_PIZZA_STACK-1)) + to_chat(user, SPAN_NOTICE("The stack looks a bit more stable. It's probably safe to carry now.")) + + box.update_icon() + box.update_strings() + update_icon() + update_strings() + return TRUE + + return ..() + +/obj/item/pizzabox/attack_self(mob/user) + if(toggle_open()) + return TRUE + return ..() + +/obj/item/pizzabox/attackby(obj/item/I, mob/user) + + // Stacking pizza boxes. + if(istype(I, /obj/item/pizzabox)) + var/obj/item/pizzabox/box = I + if(box.open) + to_chat(user, SPAN_WARNING("You need to close \the [box] first!")) + return TRUE + + if(open) + to_chat(user, SPAN_WARNING("You need to close \the [src] first!")) + return TRUE + + var/stack_count = (LAZYLEN(stacked_boxes) + LAZYLEN(box.stacked_boxes) + 2) + if(stack_count > MAXIMUM_PIZZA_STACK) + to_chat(user, SPAN_WARNING("That pizza stack would be too high!")) + return TRUE + + if(!user.try_unequip(box, src)) + return TRUE + + LAZYDISTINCTADD(stacked_boxes, box) + if(box.stacked_boxes) + LAZYDISTINCTADD(stacked_boxes, box.stacked_boxes) + LAZYCLEARLIST(box.stacked_boxes) + update_icon() + update_strings() + box.update_icon() + box.update_strings() + + user.visible_message(SPAN_NOTICE("\The [user] stacks \the [box] on top of \the [src].")) + if(stack_count == RISKY_PIZZA_STACK) + to_chat(user, SPAN_WARNING("The stack sags a bit. You have a bad feeling about carrying it...")) + + return TRUE + + // Putting a pizza back in the box. + if(istype(I, /obj/item/chems/food/sliceable/pizza)) + + if(!open) + to_chat(user, SPAN_WARNING("Open \the [src] first!")) + return TRUE + + if(pizza) + to_chat(user, SPAN_WARNING("\The [src] already has \the [pizza] inside!")) + return TRUE + + if(!user.try_unequip(I, src)) + return TRUE + + pizza = I + update_strings() + update_icon() + user.visible_message(SPAN_NOTICE("\The [user] slides \the [I] into \the [src].")) + return TRUE + + // Appending to the tag. + if(IS_PEN(I)) + + if(open) + to_chat(user, SPAN_WARNING("Close \the [src] first!")) + return TRUE + + var/tag_string = sanitize(input("Enter what you want to add to the tag.", "Write", null, null) as text|null, 30) + if(!CanPhysicallyInteract(user) || !tag_string || open) + return TRUE + + var/box_count = LAZYLEN(stacked_boxes) + var/obj/item/pizzabox/tagging_box = (box_count > 0) ? stacked_boxes[box_count] : src + tagging_box.box_tag = copytext("[tagging_box.box_tag][tag_string]", 1, 30) + tagging_box.box_tag_color = I.get_tool_property(TOOL_PEN, TOOL_PROP_COLOR) || COLOR_BLACK + user.visible_message(SPAN_NOTICE("\The [user] writes something on \the [src].")) + update_strings() + update_icon() + return TRUE + + return ..() + +/obj/item/pizzabox/get_alt_interactions(mob/user) + . = ..() + LAZYADD(., /decl/interaction_handler/open_pizza_box) + +/decl/interaction_handler/open_pizza_box + expected_target_type = /obj/item/pizzabox + +/decl/interaction_handler/open_pizza_box/is_possible(atom/target, mob/user, obj/item/prop) + . = ..() + if(.) + var/obj/item/pizzabox/box = target + . = LAZYLEN(box.stacked_boxes) <= 0 + +/decl/interaction_handler/open_pizza_box/invoked(atom/target, mob/user, obj/item/prop) + var/obj/item/pizzabox/box = target + box.toggle_open() + +// Subtypes below. +/obj/item/pizzabox/margherita + pizza = /obj/item/chems/food/sliceable/pizza/margherita + box_tag = "Margherita Deluxe" + box_tag_color = COLOR_DARK_RED + +/obj/item/pizzabox/vegetable + pizza = /obj/item/chems/food/sliceable/pizza/vegetablepizza + box_tag = "Gourmet Vegetable" + box_tag_color = COLOR_PAKISTAN_GREEN + +/obj/item/pizzabox/mushroom + pizza = /obj/item/chems/food/sliceable/pizza/mushroompizza + box_tag = "Mushroom Special" + box_tag_color = COLOR_PURPLE_GRAY + +/obj/item/pizzabox/meat + pizza = /obj/item/chems/food/sliceable/pizza/meatpizza + box_tag = "Meatlover's Supreme" + box_tag_color = COLOR_BROWN_ORANGE diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_margherita.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_margherita.dm new file mode 100644 index 00000000000..331877b75f5 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_margherita.dm @@ -0,0 +1,19 @@ +/obj/item/chems/food/sliceable/pizza/margherita + name = "margherita" + desc = "The golden standard of pizzas." + slice_path = /obj/item/chems/food/slice/pizza/margherita + icon = 'icons/obj/food/pizzas/pizza_margherita.dmi' + +/obj/item/chems/food/sliceable/pizza/margherita/populate_reagents() + . = ..() + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 6) + +/obj/item/chems/food/slice/pizza/margherita + name = "margherita slice" + desc = "A slice of the classic pizza." + icon_state = "pizzamargheritaslice" + whole_path = /obj/item/chems/food/sliceable/pizza/margherita + +/obj/item/chems/food/slice/pizza/margherita/filled + filled = TRUE diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_meat.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_meat.dm new file mode 100644 index 00000000000..053603f280f --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_meat.dm @@ -0,0 +1,20 @@ +/obj/item/chems/food/sliceable/pizza/meatpizza + name = "meatpizza" + desc = "A pizza with meat topping." + slice_path = /obj/item/chems/food/slice/pizza/meat + nutriment_amt = 10 + icon = 'icons/obj/food/pizzas/pizza_meat.dmi' + +/obj/item/chems/food/sliceable/pizza/meatpizza/populate_reagents() + . = ..() + add_to_reagents(/decl/material/liquid/nutriment/protein, 34) + add_to_reagents(/decl/material/liquid/nutriment/barbecue, 6) + +/obj/item/chems/food/slice/pizza/meat + name = "meatpizza slice" + desc = "A slice of a meaty pizza." + icon_state = "meatpizzaslice" + whole_path = /obj/item/chems/food/sliceable/pizza/meatpizza + +/obj/item/chems/food/slice/pizza/meat/filled + filled = TRUE diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_mushroom.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_mushroom.dm new file mode 100644 index 00000000000..b38b930655d --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_mushroom.dm @@ -0,0 +1,19 @@ +/obj/item/chems/food/sliceable/pizza/mushroompizza + name = "mushroompizza" + desc = "Very special pizza." + slice_path = /obj/item/chems/food/slice/pizza/mushroom + nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10) + icon = 'icons/obj/food/pizzas/pizza_mushroom.dmi' + +/obj/item/chems/food/sliceable/pizza/mushroompizza/populate_reagents() + . = ..() + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) + +/obj/item/chems/food/slice/pizza/mushroom + name = "mushroompizza slice" + desc = "Maybe it is the last slice of pizza in your life." + icon_state = "mushroompizzaslice" + whole_path = /obj/item/chems/food/sliceable/pizza/mushroompizza + +/obj/item/chems/food/slice/pizza/mushroom/filled + filled = TRUE diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_vegetable.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_vegetable.dm new file mode 100644 index 00000000000..77eff776340 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza/pizza_vegetable.dm @@ -0,0 +1,21 @@ +/obj/item/chems/food/sliceable/pizza/vegetablepizza + name = "vegetable pizza" + desc = "Vegetarian pizza, huh? What about all the plants that were slaughtered to make this, huh!? Hypocrite." + slice_path = /obj/item/chems/food/slice/pizza/vegetable + nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5) + icon = 'icons/obj/food/pizzas/pizza_vegetable.dmi' + +/obj/item/chems/food/sliceable/pizza/vegetablepizza/populate_reagents() + . = ..() + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) + add_to_reagents(/decl/material/liquid/nutriment/ketchup, 6) + add_to_reagents(/decl/material/liquid/eyedrops, 12) + +/obj/item/chems/food/slice/pizza/vegetable + name = "vegetable pizza slice" + desc = "A slice of the most green pizza of all pizzas not containing green ingredients." + icon_state = "vegetablepizzaslice" + whole_path = /obj/item/chems/food/sliceable/pizza/vegetablepizza + +/obj/item/chems/food/slice/pizza/vegetable/filled + filled = TRUE diff --git a/code/modules/reagents/reagent_containers/food/soup.dm b/code/modules/reagents/reagent_containers/food/soup.dm index c2a8a192450..3c576c5c769 100644 --- a/code/modules/reagents/reagent_containers/food/soup.dm +++ b/code/modules/reagents/reagent_containers/food/soup.dm @@ -8,36 +8,37 @@ icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl filling_color = "#785210" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' bitesize = 5 eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') /obj/item/chems/food/meatballsoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 8) - reagents.add_reagent(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 8) + add_to_reagents(/decl/material/liquid/water, 5) /obj/item/chems/food/bloodsoup name = "tomato soup" desc = "Smells like copper." icon_state = "tomatosoup" filling_color = "#ff0000" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' bitesize = 5 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/bloodsoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) - reagents.add_reagent(/decl/material/liquid/blood, 10) - reagents.add_reagent(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/blood, 10) + add_to_reagents(/decl/material/liquid/water, 5) /obj/item/chems/food/clownstears name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" filling_color = "#c4fbff" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' nutriment_desc = list("salt" = 1, "the worst joke" = 3) nutriment_amt = 4 bitesize = 5 @@ -45,8 +46,8 @@ /obj/item/chems/food/clownstears/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/banana, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/drink/juice/banana, 5) + add_to_reagents(/decl/material/liquid/water, 10) /obj/item/chems/food/vegetablesoup name = "vegetable soup" @@ -54,15 +55,16 @@ icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl filling_color = "#afc4b5" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_desc = list("carrot" = 2, "corn" = 2, "eggplant" = 2, "potato" = 2) nutriment_amt = 8 bitesize = 5 eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/vegetablesoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/water, 5) /obj/item/chems/food/nettlesoup name = "nettle soup" @@ -70,16 +72,17 @@ icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl filling_color = "#afc4b5" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' nutriment_desc = list("salad" = 4, "egg" = 2, "potato" = 2) nutriment_amt = 8 bitesize = 5 eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/nettlesoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/water, 5) - reagents.add_reagent(/decl/material/liquid/regenerator, 5) + add_to_reagents(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/regenerator, 5) /obj/item/chems/food/mysterysoup name = "mystery soup" @@ -87,11 +90,12 @@ icon_state = "mysterysoup" trash = /obj/item/trash/snack_bowl filling_color = "#f082ff" - center_of_mass = @"{'x':16,'y':6}" + center_of_mass = @'{"x":16,"y":6}' nutriment_desc = list("backwash" = 1) nutriment_amt = 1 bitesize = 5 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/mysterysoup/proc/get_random_fillings() return list( @@ -124,7 +128,7 @@ ), list( /decl/material/solid/carbon = 10, - /decl/material/liquid/bromide = 10 + /decl/material/liquid/acrylamide = 10 ), list( /decl/material/liquid/nutriment = 5, @@ -141,24 +145,25 @@ . = ..() var/list/fillings = pick(get_random_fillings()) for(var/filling in fillings) - reagents.add_reagent(filling, fillings[filling]) + add_to_reagents(filling, fillings[filling]) /obj/item/chems/food/wishsoup - name = "\improper Wish Soup" + name = "wish soup" desc = "I wish this was soup." icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl filling_color = "#d1f4ff" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' bitesize = 5 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/wishsoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/water, 10) if(prob(25)) src.desc = "A wish come true!" - reagents.add_reagent(/decl/material/liquid/nutriment, 8, list("something good" = 8)) + add_to_reagents(/decl/material/liquid/nutriment, 8, list("something good" = 8)) /obj/item/chems/food/hotchili name = "hot chili" @@ -166,23 +171,23 @@ icon_state = "hotchili" trash = /obj/item/trash/snack_bowl filling_color = "#ff3c00" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("chilli peppers" = 2, "burning" = 1) nutriment_amt = 3 bitesize = 5 /obj/item/chems/food/hotchili/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) - reagents.add_reagent(/decl/material/liquid/capsaicin, 3) - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/capsaicin, 3) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 2) /obj/item/chems/food/coldchili name = "cold chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" filling_color = "#2b00ff" - center_of_mass = @"{'x':15,'y':9}" + center_of_mass = @'{"x":15,"y":9}' nutriment_desc = list("chilly peppers" = 3) nutriment_amt = 3 trash = /obj/item/trash/snack_bowl @@ -190,9 +195,9 @@ /obj/item/chems/food/coldchili/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 3) - reagents.add_reagent(/decl/material/liquid/frostoil, 3) - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 3) + add_to_reagents(/decl/material/liquid/frostoil, 3) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 2) /obj/item/chems/food/tomatosoup name = "tomato soup" @@ -200,47 +205,49 @@ icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl filling_color = "#d92929" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' nutriment_desc = list("soup" = 5) nutriment_amt = 5 bitesize = 3 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/tomatosoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 10) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 10) /obj/item/chems/food/stew name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" filling_color = "#9e673a" - center_of_mass = @"{'x':16,'y':5}" + center_of_mass = @'{"x":16,"y":5}' nutriment_desc = list("tomato" = 2, "potato" = 2, "carrot" = 2, "eggplant" = 2, "mushroom" = 2) nutriment_amt = 6 bitesize = 10 /obj/item/chems/food/stew/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 4) - reagents.add_reagent(/decl/material/liquid/drink/juice/tomato, 5) - reagents.add_reagent(/decl/material/liquid/eyedrops, 5) - reagents.add_reagent(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/nutriment/protein, 4) + add_to_reagents(/decl/material/liquid/drink/juice/tomato, 5) + add_to_reagents(/decl/material/liquid/eyedrops, 5) + add_to_reagents(/decl/material/liquid/water, 5) /obj/item/chems/food/milosoup name = "milosoup" desc = "The universes best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' nutriment_desc = list("soy" = 8) nutriment_amt = 8 bitesize = 4 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/milosoup/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/water, 5) + add_to_reagents(/decl/material/liquid/water, 5) /obj/item/chems/food/mushroomsoup name = "chantrelle soup" @@ -248,23 +255,25 @@ icon_state = "mushroomsoup" trash = /obj/item/trash/snack_bowl filling_color = "#e386bf" - center_of_mass = @"{'x':17,'y':10}" + center_of_mass = @'{"x":17,"y":10}' nutriment_desc = list("mushroom" = 8, "milk" = 2) nutriment_amt = 8 bitesize = 3 eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/beetsoup name = "beet soup" - desc = "Wait, how do you spell it again..?" + desc = "Wait, how do you spell it again...?" icon_state = "beetsoup" trash = /obj/item/trash/snack_bowl filling_color = "#fac9ff" - center_of_mass = @"{'x':15,'y':8}" + center_of_mass = @'{"x":15,"y":8}' nutriment_desc = list("tomato" = 4, "beet" = 4) nutriment_amt = 8 bitesize = 2 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/beetsoup/populate_reagents() . = ..() diff --git a/code/modules/reagents/reagent_containers/food/soy.dm b/code/modules/reagents/reagent_containers/food/soy.dm index 727043f19be..15b7363f88a 100644 --- a/code/modules/reagents/reagent_containers/food/soy.dm +++ b/code/modules/reagents/reagent_containers/food/soy.dm @@ -3,22 +3,22 @@ icon_state = "tofu" desc = "We all love tofu." filling_color = "#fffee0" - center_of_mass = @"{'x':17,'y':10}" + center_of_mass = @'{"x":17,"y":10}' nutriment_amt = 3 nutriment_desc = list("tofu" = 3, "softness" = 3) bitesize = 3 /obj/item/chems/food/tofu/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/plant_protein, 6) + add_to_reagents(/decl/material/liquid/nutriment/plant_protein, 6) /obj/item/chems/food/soydope name = "soy dope" desc = "Dope from a soy." icon_state = "soydope" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#c4bf76" - center_of_mass = @"{'x':16,'y':10}" + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("slime" = 2, "soy" = 2) nutriment_amt = 2 bitesize = 2 @@ -29,7 +29,7 @@ desc = "Vegan meat, on a stick." trash = /obj/item/stack/material/rods filling_color = "#fffee0" - center_of_mass = @"{'x':17,'y':15}" + center_of_mass = @'{"x":17,"y":15}' nutriment_desc = list("tofu" = 3, "metal" = 1) nutriment_amt = 8 bitesize = 2 @@ -39,7 +39,7 @@ desc = "A fake turkey made from tofu." icon_state = "tofurkey" filling_color = "#fffee0" - center_of_mass = @"{'x':16,'y':8}" + center_of_mass = @'{"x":16,"y":8}' nutriment_amt = 12 nutriment_desc = list("turkey" = 3, "tofu" = 5, "softness" = 4) bitesize = 3 @@ -48,8 +48,8 @@ name = "stewed soy meat" desc = "Even non-vegetarians will LOVE this!" icon_state = "stewedsoymeat" - trash = /obj/item/trash/plate - center_of_mass = @"{'x':16,'y':10}" + plate = /obj/item/plate + center_of_mass = @'{"x":16,"y":10}' nutriment_desc = list("soy" = 4, "tomato" = 4) nutriment_amt = 8 bitesize = 2 \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/veggie.dm b/code/modules/reagents/reagent_containers/food/veggie.dm index 3f8a53ff5dd..88f1945e956 100644 --- a/code/modules/reagents/reagent_containers/food/veggie.dm +++ b/code/modules/reagents/reagent_containers/food/veggie.dm @@ -8,14 +8,14 @@ icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl filling_color = "#468c00" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_amt = 8 nutriment_desc = list("apples" = 3,"salad" = 4, "quintessence" = 2) bitesize = 3 /obj/item/chems/food/aesirsalad/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/regenerator, 8) + add_to_reagents(/decl/material/liquid/regenerator, 8) /obj/item/chems/food/tossedsalad name = "tossed salad" @@ -23,7 +23,7 @@ icon_state = "herbsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76b87f" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_desc = list("salad" = 2, "tomato" = 2, "carrot" = 2, "apple" = 2) nutriment_amt = 8 bitesize = 3 @@ -34,40 +34,40 @@ icon_state = "validsalad" trash = /obj/item/trash/snack_bowl filling_color = "#76b87f" - center_of_mass = @"{'x':17,'y':11}" + center_of_mass = @'{"x":17,"y":11}' nutriment_desc = list("100% real salad") nutriment_amt = 6 bitesize = 3 /obj/item/chems/food/validsalad/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 2) + add_to_reagents(/decl/material/liquid/nutriment/protein, 2) /obj/item/chems/food/carrotfries name = "carrot fries" desc = "Tasty fries from fresh carrots." icon_state = "carrotfries" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#faa005" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_desc = list("carrot" = 3, "salt" = 1) nutriment_amt = 3 bitesize = 2 /obj/item/chems/food/carrotfries/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/eyedrops, 3) + add_to_reagents(/decl/material/liquid/eyedrops, 3) /obj/item/chems/food/hugemushroomslice name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" filling_color = "#e0d7c5" - center_of_mass = @"{'x':17,'y':16}" + center_of_mass = @'{"x":17,"y":16}' nutriment_amt = 3 nutriment_desc = list("raw" = 2, "mushroom" = 2) bitesize = 6 /obj/item/chems/food/hugemushroomslice/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/psychotropics, 3) \ No newline at end of file + add_to_reagents(/decl/material/liquid/psychotropics, 3) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food_edibility.dm b/code/modules/reagents/reagent_containers/food_edibility.dm new file mode 100644 index 00000000000..143daba2505 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food_edibility.dm @@ -0,0 +1,43 @@ +/obj/item/chems/food/get_food_consumption_method(mob/eater) + return EATING_METHOD_EAT + +/obj/item/chems/food/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT) + if(eat_sound) + playsound(user, pick(eat_sound), rand(10, 50), 1) + return + return ..() + +/obj/item/chems/food/handle_eaten_by_mob(mob/user, mob/target) + . = ..() + if(. == EATEN_SUCCESS) + bitecount++ + +/obj/item/chems/food/get_food_default_transfer_amount(mob/eater) + return eater?.get_eaten_transfer_amount(bitesize) + +/obj/item/chems/food/handle_consumed(mob/feeder, mob/eater, consumption_method = EATING_METHOD_EAT) + + if(isliving(eater) && cooked_food) + var/mob/living/living_eater = eater + living_eater.add_stressor(/datum/stressor/ate_cooked_food, 15 MINUTES) + + var/atom/loc_ref = loc + var/obj/item/plate_ref = plate + var/trash_ref = trash + . = ..() + if(.) + if(trash_ref) + if(ispath(trash_ref, /obj/item)) + var/obj/item/trash_item = new trash_ref(loc_ref) + if(feeder) + feeder.put_in_hands(trash_item) + else if(istype(trash_ref, /obj/item)) + var/obj/item/trash_item = trash_ref + if(!QDELETED(trash_item)) + trash_item.dropInto(loc_ref) + if(feeder) + feeder.put_in_hands(trash_item) + if(plate_ref && !QDELETED(plate_ref)) + plate_ref.dropInto(loc_ref) + if(feeder) + feeder.put_in_hands(plate_ref) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a8ef1a33350..7850344db12 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -47,19 +47,19 @@ return if(reagents?.total_volume) - to_chat(user, "It contains [reagents.total_volume] units of liquid.") + to_chat(user, SPAN_NOTICE("It contains [reagents.total_volume] units of liquid.")) else - to_chat(user, "It is empty.") + to_chat(user, SPAN_NOTICE("It is empty.")) if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "The airtight lid seals it completely.") + to_chat(user,SPAN_NOTICE("The airtight lid seals it completely.")) /obj/item/chems/glass/attack_self() ..() if(ATOM_IS_OPEN_CONTAINER(src)) - to_chat(usr, "You put the lid on \the [src].") + to_chat(usr, SPAN_NOTICE("You put the lid on \the [src].")) atom_flags ^= ATOM_FLAG_OPEN_CONTAINER else - to_chat(usr, "You take the lid off \the [src].") + to_chat(usr, SPAN_NOTICE("You take the lid off \the [src].")) atom_flags |= ATOM_FLAG_OPEN_CONTAINER update_icon() @@ -68,20 +68,6 @@ return ..() return FALSE -/obj/item/chems/glass/standard_feed_mob(var/mob/user, var/mob/target) - if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "You need to open \the [src] first.") - return 1 - if(user.a_intent == I_HURT) - return 1 - return ..() - -/obj/item/chems/glass/self_feed_message(var/mob/user) - to_chat(user, "You swallow a gulp from \the [src].") - if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink)) - for(var/R in reagents.reagent_volumes) - user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R) - /obj/item/chems/glass/afterattack(var/obj/target, var/mob/user, var/proximity) if(!ATOM_IS_OPEN_CONTAINER(src) || !proximity) //Is the container open & are they next to whatever they're clicking? return FALSE //If not, do nothing. @@ -92,7 +78,7 @@ return TRUE if(standard_pour_into(user, target)) //Pouring into another beaker? return TRUE - if(standard_feed_mob(user, target)) + if(handle_eaten_by_mob(user, target) != EATEN_INVALID) return TRUE if(user.a_intent == I_HURT) if(standard_splash_mob(user,target)) @@ -112,7 +98,7 @@ desc = "It's a bucket." icon = 'icons/obj/items/bucket.dmi' icon_state = ICON_STATE_WORLD - center_of_mass = @"{'x':16,'y':9}" + center_of_mass = @'{"x":16,"y":9}' w_class = ITEM_SIZE_NORMAL amount_per_transfer_from_this = 20 possible_transfer_amounts = @"[10,20,30,60,120,150,180]" diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 8e553466d3d..cd34a4cf679 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/items/chem/bottle.dmi' icon_state = ICON_STATE_WORLD randpixel = 7 - center_of_mass = @"{'x':16,'y':15}" + center_of_mass = @'{"x":16,"y":15}' amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[5,10,15,25,30,60]" w_class = ITEM_SIZE_SMALL @@ -64,9 +64,9 @@ update_icon() /obj/item/chems/glass/bottle/populate_reagents() - . = ..() SHOULD_CALL_PARENT(TRUE) - if(reagents.total_volume > 0 && autolabel && !label_text) // don't override preset labels + . = ..() + if(reagents?.total_volume > 0 && autolabel && !label_text) // don't override preset labels label_text = reagents.get_primary_reagent_name() update_container_name() @@ -74,46 +74,46 @@ desc = "A small bottle. Contains stabilizer - used to stabilize patients." /obj/item/chems/glass/bottle/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/stabilizer, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/bromide desc = "A small bottle of bromide. Do not drink, it is poisonous." /obj/item/chems/glass/bottle/bromide/populate_reagents() - reagents.add_reagent(/decl/material/liquid/bromide, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/bromide, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/cyanide desc = "A small bottle of cyanide. Bitter almonds?" /obj/item/chems/glass/bottle/cyanide/populate_reagents() - reagents.add_reagent(/decl/material/liquid/cyanide, reagents.maximum_volume / 2) //volume changed to match chloral + add_to_reagents(/decl/material/liquid/cyanide, reagents.maximum_volume / 2) //volume changed to match chloral . = ..() /obj/item/chems/glass/bottle/sedatives desc = "A small bottle of soporific medication. Just the fumes make you sleepy." /obj/item/chems/glass/bottle/sedatives/populate_reagents() - reagents.add_reagent(/decl/material/liquid/sedatives, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/sedatives, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/antitoxin desc = "A small bottle of antitoxins. Counters poisons, and repairs damage. A wonder drug." /obj/item/chems/glass/bottle/antitoxin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antitoxins, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/mutagenics desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact." /obj/item/chems/glass/bottle/mutagenics/populate_reagents() - reagents.add_reagent(/decl/material/liquid/mutagenics, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/mutagenics, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/ammonia/populate_reagents() - reagents.add_reagent(/decl/material/gas/ammonia, reagents.maximum_volume) + add_to_reagents(/decl/material/gas/ammonia, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/eznutrient @@ -124,7 +124,7 @@ material = /decl/material/solid/organic/plastic /obj/item/chems/glass/bottle/eznutrient/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fertilizer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/fertilizer, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/left4zed @@ -136,8 +136,8 @@ /obj/item/chems/glass/bottle/left4zed/populate_reagents() var/mutagen_amount = round(reagents.maximum_volume / 6) - reagents.add_reagent(/decl/material/liquid/fertilizer, reagents.maximum_volume - mutagen_amount) - reagents.add_reagent(/decl/material/liquid/mutagenics, mutagen_amount) + add_to_reagents(/decl/material/liquid/fertilizer, reagents.maximum_volume - mutagen_amount) + add_to_reagents(/decl/material/liquid/mutagenics, mutagen_amount) . = ..() /obj/item/chems/glass/bottle/robustharvest @@ -149,12 +149,12 @@ /obj/item/chems/glass/bottle/robustharvest/populate_reagents() var/amonia_amount = round(reagents.maximum_volume / 6) - reagents.add_reagent(/decl/material/liquid/fertilizer, reagents.maximum_volume - amonia_amount) - reagents.add_reagent(/decl/material/gas/ammonia, amonia_amount) + add_to_reagents(/decl/material/liquid/fertilizer, reagents.maximum_volume - amonia_amount) + add_to_reagents(/decl/material/gas/ammonia, amonia_amount) . = ..() /obj/item/chems/glass/bottle/pacid/populate_reagents() - reagents.add_reagent(/decl/material/liquid/acid/polyacid, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/acid/polyacid, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/adminordrazine desc = "A small bottle. Contains the liquid essence of the gods." @@ -163,19 +163,19 @@ label_color = COLOR_CYAN_BLUE /obj/item/chems/glass/bottle/adminordrazine/populate_reagents() - reagents.add_reagent(/decl/material/liquid/adminordrazine, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/adminordrazine, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/capsaicin desc = "A small bottle. Contains hot sauce." /obj/item/chems/glass/bottle/capsaicin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/capsaicin, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/capsaicin, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/frostoil desc = "A small bottle. Contains cold sauce." /obj/item/chems/glass/bottle/frostoil/populate_reagents() - reagents.add_reagent(/decl/material/liquid/frostoil, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/frostoil, reagents.maximum_volume) . = ..() diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm index 91ba1fd1c1d..54464dc8912 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm @@ -16,7 +16,7 @@ desc = "A small bottle. Contains stabilizer - used to stabilize patients." /obj/item/chems/glass/bottle/robot/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/stabilizer, reagents.maximum_volume) . = ..() /obj/item/chems/glass/bottle/robot/antitoxin @@ -26,5 +26,5 @@ icon_state = "bottle-4" /obj/item/chems/glass/bottle/robot/antitoxin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antitoxins, reagents.maximum_volume) . = ..() diff --git a/code/modules/reagents/reagent_containers/glass_edibility.dm b/code/modules/reagents/reagent_containers/glass_edibility.dm new file mode 100644 index 00000000000..9411350417e --- /dev/null +++ b/code/modules/reagents/reagent_containers/glass_edibility.dm @@ -0,0 +1,7 @@ +/obj/item/chems/glass/handle_eaten_by_mob(var/mob/user, var/mob/target) + if(!ATOM_IS_OPEN_CONTAINER(src)) + to_chat(user, SPAN_WARNING("You need to open \the [src] first.")) + return EATEN_UNABLE + if(user.a_intent == I_HURT) + return EATEN_INVALID + return ..() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 9ad4c7d1243..741079f8334 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/hypospray.dmi' icon_state = ICON_STATE_WORLD abstract_type = /obj/item/chems/hypospray - origin_tech = "{'materials':4,'biotech':5}" + origin_tech = @'{"materials":4,"biotech":5}' amount_per_transfer_from_this = 5 volume = 30 possible_transfer_amounts = null @@ -174,15 +174,24 @@ icon = 'icons/obj/autoinjector.dmi' amount_per_transfer_from_this = 5 volume = 5 - origin_tech = "{'materials':2,'biotech':2}" + origin_tech = @'{"materials":2,"biotech":2}' slot_flags = SLOT_LOWER_BODY | SLOT_EARS w_class = ITEM_SIZE_TINY detail_state = "_band" detail_color = COLOR_CYAN + abstract_type = /obj/item/chems/hypospray/autoinjector + var/autolabel = TRUE // if set, will add label with the name of the first initial reagent +/obj/item/chems/hypospray/autoinjector/Initialize() + . = ..() + if(label_text) + update_container_name() /obj/item/chems/hypospray/autoinjector/populate_reagents() - reagents.add_reagent(/decl/material/liquid/adrenaline, reagents.maximum_volume) + SHOULD_CALL_PARENT(TRUE) + . = ..() + if(reagents?.total_volume > 0 && autolabel && !label_text) // don't override preset labels + label_text = "[reagents.get_primary_reagent_name()], [reagents.total_volume]u" /obj/item/chems/hypospray/autoinjector/Initialize() . = ..() @@ -204,45 +213,59 @@ else to_chat(user, SPAN_NOTICE("It is spent.")) +//////////////////////////////////////////////////////////////////////////////// +// Autoinjector - Stabilizer +//////////////////////////////////////////////////////////////////////////////// +/obj/item/chems/hypospray/autoinjector/stabilizer/populate_reagents() + add_to_reagents(/decl/material/liquid/stabilizer, reagents.maximum_volume) + . = ..() + +//////////////////////////////////////////////////////////////////////////////// +// Autoinjector - Adrenaline +//////////////////////////////////////////////////////////////////////////////// +/obj/item/chems/hypospray/autoinjector/adrenaline/populate_reagents() + add_to_reagents(/decl/material/liquid/adrenaline, reagents.maximum_volume) + . = ..() + //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Detox //////////////////////////////////////////////////////////////////////////////// /obj/item/chems/hypospray/autoinjector/detox - name = "autoinjector (antitox)" detail_color = COLOR_GREEN /obj/item/chems/hypospray/autoinjector/detox/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antitoxins, reagents.maximum_volume) + . = ..() //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Pain //////////////////////////////////////////////////////////////////////////////// /obj/item/chems/hypospray/autoinjector/pain - name = "autoinjector (painkiller)" detail_color = COLOR_PURPLE /obj/item/chems/hypospray/autoinjector/pain/populate_reagents() - reagents.add_reagent(/decl/material/liquid/painkillers, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/painkillers, reagents.maximum_volume) + . = ..() //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Antirad //////////////////////////////////////////////////////////////////////////////// /obj/item/chems/hypospray/autoinjector/antirad - name = "autoinjector (anti-rad)" detail_color = COLOR_AMBER /obj/item/chems/hypospray/autoinjector/antirad/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antirads, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antirads, reagents.maximum_volume) + . = ..() //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Hallucinogenics //////////////////////////////////////////////////////////////////////////////// /obj/item/chems/hypospray/autoinjector/hallucinogenics - name = "autoinjector" detail_color = COLOR_DARK_GRAY /obj/item/chems/hypospray/autoinjector/hallucinogenics/populate_reagents() - reagents.add_reagent(/decl/material/liquid/hallucinogenics, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/hallucinogenics, reagents.maximum_volume) + . = ..() //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Clotting agent @@ -255,8 +278,8 @@ /obj/item/chems/hypospray/autoinjector/clotting/populate_reagents() . = ..() var/amt = round(reagents.maximum_volume*0.5) - reagents.add_reagent(/decl/material/liquid/stabilizer, amt) - reagents.add_reagent(/decl/material/liquid/clotting_agent, (reagents.maximum_volume - amt)) + add_to_reagents(/decl/material/liquid/stabilizer, amt) + add_to_reagents(/decl/material/liquid/clotting_agent, (reagents.maximum_volume - amt)) //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Empty @@ -266,4 +289,5 @@ detail_color = COLOR_WHITE /obj/item/chems/hypospray/autoinjector/empty/populate_reagents() + SHOULD_CALL_PARENT(FALSE) return diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm index b265d36b703..df9d2ed145c 100644 --- a/code/modules/reagents/reagent_containers/inhaler.dm +++ b/code/modules/reagents/reagent_containers/inhaler.dm @@ -5,14 +5,14 @@ desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel." icon = 'icons/obj/inhaler.dmi' icon_state = ICON_STATE_WORLD - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' amount_per_transfer_from_this = 5 volume = 5 w_class = ITEM_SIZE_SMALL possible_transfer_amounts = null atom_flags = ATOM_FLAG_OPEN_CONTAINER slot_flags = SLOT_LOWER_BODY - origin_tech = "{'materials':2,'biotech':2}" + origin_tech = @'{"materials":2,"biotech":2}' material = /decl/material/solid/organic/plastic matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, @@ -27,7 +27,7 @@ /obj/item/chems/inhaler/Initialize() . = ..() for(var/T in starts_with) - reagents.add_reagent(T, starts_with[T]) + add_to_reagents(T, starts_with[T]) if(ATOM_IS_OPEN_CONTAINER(src) && reagents.total_volume > 0) atom_flags &= ~ATOM_FLAG_OPEN_CONTAINER update_icon() @@ -56,13 +56,8 @@ to_chat(user, SPAN_WARNING("\The [src] is empty.")) return TRUE - // This properly handles mouth coverage/presence, but should probably be replaced later. - if(user == target) - if(!target.can_eat(src)) - return TRUE - else - if(!target.can_force_feed(user, src)) - return TRUE + if(!user.can_force_feed(target, src)) + return TRUE user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) user.do_attack_animation(target) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 176964aaaaf..a35480f6668 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -14,18 +14,30 @@ slot_flags = SLOT_EARS volume = 30 material = /decl/material/solid/organic/plantmatter + var/autolabel = TRUE // if set, will add label with the name of the first initial reagent var/static/list/colorizable_icon_states = list("pill1", "pill2", "pill3", "pill4", "pill5") // if using an icon state from here, color will be derived from reagents +/obj/item/chems/pill/dispensed + autolabel = FALSE + /obj/item/chems/pill/Initialize() . = ..() if(!icon_state) icon_state = pick(colorizable_icon_states) //preset pills only use colour changing or unique icons update_icon() + if(label_text) + update_container_name() + +/obj/item/chems/pill/populate_reagents() + SHOULD_CALL_PARENT(TRUE) + . = ..() + if(reagents?.total_volume > 0 && autolabel && !label_text) // don't override preset labels + label_text = "[reagents.get_primary_reagent_name()], [reagents.total_volume]u" /obj/item/chems/pill/on_update_icon() . = ..() if(icon_state in colorizable_icon_states) - color = reagents.get_color() + color = reagents?.get_color() alpha = 255 // above probably reset our alpha else color = null @@ -36,49 +48,18 @@ /obj/item/chems/pill/dragged_onto(var/mob/user) attack(user, user) -/obj/item/chems/pill/attack(mob/M, mob/user, def_zone) - //TODO: replace with standard_feed_mob() call. - if(M == user) - if(!M.can_eat(src)) - return - M.visible_message(SPAN_NOTICE("[M] swallows a pill."), SPAN_NOTICE("You swallow \the [src]."), null, 2) - if(reagents?.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - else if(ishuman(M)) - if(!M.can_force_feed(user, src)) - return - - user.visible_message(SPAN_WARNING("[user] attempts to force [M] to swallow \the [src].")) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_mob(user, M)) - return - user.visible_message(SPAN_WARNING("[user] forces [M] to swallow \the [src].")) - var/contained = REAGENT_LIST(src) - admin_attack_log(user, M, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - return 0 - /obj/item/chems/pill/afterattack(obj/target, mob/user, proximity) - if(!proximity) return - - if(ATOM_IS_OPEN_CONTAINER(target) && target.reagents) + if(proximity && ATOM_IS_OPEN_CONTAINER(target) && target.reagents) if(!target.reagents.total_volume) - to_chat(user, "[target] is empty. Can't dissolve \the [src].") + to_chat(user, SPAN_WARNING("\The [target] is empty. You can't dissolve \the [src] in it.")) return - to_chat(user, "You dissolve \the [src] in [target].") - + to_chat(user, SPAN_NOTICE("You dissolve \the [src] in \the [target].")) + user.visible_message(SPAN_NOTICE("\The [user] puts something in \the [target]."), range = 2) admin_attacker_log(user, "spiked \a [target] with a pill. Reagents: [REAGENT_LIST(src)]") reagents.trans_to(target, reagents.total_volume) - user.visible_message(SPAN_NOTICE("\The [user] puts something in \the [target]."), range = 2) qdel(src) - return + return + return ..() //////////////////////////////////////////////////////////////////////////////// /// Pills. END @@ -86,191 +67,201 @@ //We lied - it's pills all the way down /obj/item/chems/pill/bromide - name = "bromide pill" desc = "Highly toxic." icon_state = "pill4" volume = 50 /obj/item/chems/pill/bromide/populate_reagents() - reagents.add_reagent(/decl/material/liquid/bromide, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/bromide, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/cyanide name = "strange pill" desc = "It's marked 'KCN'. Smells vaguely of almonds." icon_state = "pillC" volume = 50 + autolabel = FALSE /obj/item/chems/pill/cyanide/populate_reagents() - reagents.add_reagent(/decl/material/liquid/cyanide, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/cyanide, reagents.maximum_volume) + . = ..() /obj/item/chems/pill/adminordrazine name = "Adminordrazine pill" desc = "It's magic. We don't have to explain it." icon_state = "pillA" + autolabel = FALSE /obj/item/chems/pill/adminordrazine/populate_reagents() - reagents.add_reagent(/decl/material/liquid/adminordrazine, 1) + add_to_reagents(/decl/material/liquid/adminordrazine, 1) + . = ..() /obj/item/chems/pill/stox - name = "sedatives (15u)" desc = "Commonly used to treat insomnia." icon_state = "pill3" /obj/item/chems/pill/stox/populate_reagents() - reagents.add_reagent(/decl/material/liquid/sedatives, 15) + add_to_reagents(/decl/material/liquid/sedatives, 15) + . = ..() /obj/item/chems/pill/burn_meds - name = "synthskin (15u)" desc = "Used to treat burns." icon_state = "pill2" /obj/item/chems/pill/burn_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/burn_meds, 15) + add_to_reagents(/decl/material/liquid/burn_meds, 15) + . = ..() /obj/item/chems/pill/painkillers - name = "painkillers (15u)" desc = "A simple painkiller." icon_state = "pill3" /obj/item/chems/pill/painkillers/populate_reagents() - reagents.add_reagent(/decl/material/liquid/painkillers, 15) + add_to_reagents(/decl/material/liquid/painkillers, 15) + . = ..() /obj/item/chems/pill/strong_painkillers - name = "strong painkillers (15u)" desc = "A powerful painkiller. Do not mix with alcohol consumption." icon_state = "pill3" /obj/item/chems/pill/strong_painkillers/populate_reagents() - reagents.add_reagent(/decl/material/liquid/painkillers/strong, 15) + add_to_reagents(/decl/material/liquid/painkillers/strong, 15) + . = ..() /obj/item/chems/pill/stabilizer - name = "stabilizer (30u)" desc = "Used to stabilize patients." icon_state = "pill1" /obj/item/chems/pill/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, 30) + add_to_reagents(/decl/material/liquid/stabilizer, 30) + . = ..() /obj/item/chems/pill/oxygen - name = "oxygen (15u)" desc = "Used to treat oxygen deprivation." icon_state = "pill1" /obj/item/chems/pill/oxygen/populate_reagents() - reagents.add_reagent(/decl/material/liquid/oxy_meds, 15) + add_to_reagents(/decl/material/liquid/oxy_meds, 15) + . = ..() /obj/item/chems/pill/antitoxins - name = "antitoxins (25u)" desc = "A broad-spectrum anti-toxin." icon_state = "pill1" /obj/item/chems/pill/antitoxins/populate_reagents() // Antitox is easy to make and has no OD threshold so we can get away with big pills. - reagents.add_reagent(/decl/material/liquid/antitoxins, 25) + . = ..() + add_to_reagents(/decl/material/liquid/antitoxins, 25) /obj/item/chems/pill/brute_meds - name = "styptic (20u)" desc = "Used to treat physical injuries." icon_state = "pill2" /obj/item/chems/pill/brute_meds/populate_reagents() - reagents.add_reagent(/decl/material/liquid/brute_meds, 20) + add_to_reagents(/decl/material/liquid/brute_meds, 20) + . = ..() /obj/item/chems/pill/happy name = "happy pill" desc = "Happy happy joy joy!" icon_state = "pill4" + autolabel = FALSE /obj/item/chems/pill/happy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/psychoactives, 15) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 15) + add_to_reagents(/decl/material/liquid/psychoactives, 15) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 15) + . = ..() /obj/item/chems/pill/zoom name = "zoom pill" desc = "Zoooom!" icon_state = "pill4" + autolabel = FALSE /obj/item/chems/pill/zoom/populate_reagents() - reagents.add_reagent(/decl/material/liquid/narcotics, 5) - reagents.add_reagent(/decl/material/liquid/antidepressants, 5) - reagents.add_reagent(/decl/material/liquid/stimulants, 5) - reagents.add_reagent(/decl/material/liquid/amphetamines, 5) + add_to_reagents(/decl/material/liquid/narcotics, 5) + add_to_reagents(/decl/material/liquid/antidepressants, 5) + add_to_reagents(/decl/material/liquid/stimulants, 5) + add_to_reagents(/decl/material/liquid/amphetamines, 5) + . = ..() /obj/item/chems/pill/gleam name = "strange pill" desc = "The surface of this unlabelled pill crawls against your skin." icon_state = "pill2" + autolabel = FALSE /obj/item/chems/pill/gleam/populate_reagents() - reagents.add_reagent(/decl/material/liquid/glowsap/gleam, 10) + add_to_reagents(/decl/material/liquid/glowsap/gleam, 10) + . = ..() /obj/item/chems/pill/antibiotics - name = "antibiotics (10u)" desc = "Contains antibiotic agents." icon_state = "pill3" /obj/item/chems/pill/antibiotics/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antibiotics, 10) + add_to_reagents(/decl/material/liquid/antibiotics, 10) + . = ..() //Psychiatry pills. /obj/item/chems/pill/stimulants - name = "stimulants (15u)" desc = "Improves the ability to concentrate." icon_state = "pill2" /obj/item/chems/pill/stimulants/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stimulants, 15) + add_to_reagents(/decl/material/liquid/stimulants, 15) + . = ..() /obj/item/chems/pill/antidepressants - name = "antidepressants (15u)" desc = "Mild anti-depressant." icon_state = "pill4" /obj/item/chems/pill/antidepressants/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antidepressants, 15) + add_to_reagents(/decl/material/liquid/antidepressants, 15) + . = ..() /obj/item/chems/pill/antirads - name = "antirads (7u)" + name = "pill (anti-rad treatment, 15u)" desc = "Used to treat radiation poisoning." icon_state = "pill1" + autolabel = FALSE /obj/item/chems/pill/antirads/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antirads, 7) - -/obj/item/chems/pill/antirad - name = "AntiRad" - desc = "Used to treat radiation poisoning." - icon_state = "yellow" - -/obj/item/chems/pill/antirad/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antirads, 5) - reagents.add_reagent(/decl/material/liquid/antitoxins, 10) + add_to_reagents(/decl/material/liquid/antirads, 5) + add_to_reagents(/decl/material/liquid/antitoxins, 10) + . = ..() /obj/item/chems/pill/sugariron - name = "Sugar-Iron (10u)" + name = "pill (sugar-iron, 10u)" desc = "Used to help the body naturally replenish blood." icon_state = "pill1" + autolabel = FALSE /obj/item/chems/pill/sugariron/populate_reagents() - reagents.add_reagent(/decl/material/solid/metal/iron, 5) - reagents.add_reagent(/decl/material/liquid/nutriment/sugar, 5) + add_to_reagents(/decl/material/solid/metal/iron, 5) + add_to_reagents(/decl/material/liquid/nutriment/sugar, 5) + . = ..() /obj/item/chems/pill/detergent name = "detergent pod" desc = "Put in water to get space cleaner. Do not eat. Really." icon_state = "pod21" + autolabel = FALSE + var/smell_clean_time = 10 MINUTES // Don't overwrite the custom name. /obj/item/chems/pill/detergent/update_container_name() return /obj/item/chems/pill/detergent/populate_reagents() - reagents.add_reagent(/decl/material/liquid/contaminant_cleaner, 30) + add_to_reagents(/decl/material/liquid/contaminant_cleaner, 30) + . = ..() /obj/item/chems/pill/pod name = "master flavorpod item" desc = "A cellulose pod containing some kind of flavoring." icon_state = "pill4" + autolabel = FALSE // Don't overwrite the custom names. /obj/item/chems/pill/pod/update_container_name() @@ -280,22 +271,26 @@ name = "creamer pod" /obj/item/chems/pill/pod/cream/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk, 5) + add_to_reagents(/decl/material/liquid/drink/milk, 5) + . = ..() /obj/item/chems/pill/pod/cream_soy name = "non-dairy creamer pod" /obj/item/chems/pill/pod/cream_soy/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/milk/soymilk, 5) + add_to_reagents(/decl/material/liquid/drink/milk/soymilk, 5) + . = ..() /obj/item/chems/pill/pod/orange name = "orange flavorpod" /obj/item/chems/pill/pod/orange/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/juice/orange, 5) + add_to_reagents(/decl/material/liquid/drink/juice/orange, 5) + . = ..() /obj/item/chems/pill/pod/mint name = "mint flavorpod" /obj/item/chems/pill/pod/mint/populate_reagents() - reagents.add_reagent(/decl/material/liquid/drink/syrup/mint, 1) + add_to_reagents(/decl/material/liquid/drink/syrup/mint, 1) + . = ..() diff --git a/code/modules/reagents/reagent_containers/pill_edibility.dm b/code/modules/reagents/reagent_containers/pill_edibility.dm new file mode 100644 index 00000000000..02034687bb8 --- /dev/null +++ b/code/modules/reagents/reagent_containers/pill_edibility.dm @@ -0,0 +1,30 @@ +/obj/item/chems/pill/get_food_consumption_method(mob/eater) + return EATING_METHOD_EAT + +/obj/item/chems/pill/get_edible_material_amount(var/mob/eater) + return reagents?.total_volume + +/obj/item/chems/pill/get_food_default_transfer_amount(mob/eater) + return reagents?.total_volume // Always eat it in one bite. + +/obj/item/chems/pill/show_feed_message_start(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_NOTICE("You begin trying to swallow \the [target].")) + else + user.visible_message(SPAN_NOTICE("\The [user] attempts to force \the [target] to swallow \the [src]!")) + +/obj/item/chems/pill/show_feed_message_end(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + target = target || user + if(user) + if(user == target) + to_chat(user, SPAN_NOTICE("You swallow \the [src].")) + else + user.visible_message(SPAN_NOTICE("\The [user] forces \the [target] to swallow \the [src]!")) + +/obj/item/chems/pill/play_feed_sound(mob/user, consumption_method = EATING_METHOD_EAT) + return + +/obj/item/chems/pill/show_food_consumed_message(mob/user, mob/target, consumption_method = EATING_METHOD_EAT) + return diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 3d16cb63e44..93275c0530b 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -29,6 +29,10 @@ . = ..() src.verbs -= /obj/item/chems/verb/set_amount_per_transfer_from_this +// Override to avoid drinking from this or feeding it to your neighbor. +/obj/item/chems/spray/attack(mob/user) + return FALSE + /obj/item/chems/spray/afterattack(atom/A, mob/user, proximity) if(istype(A, /obj/item/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/chems) || istype(A, /obj/structure/hygiene/sink) || istype(A, /obj/structure/janitorialcart)) return @@ -89,7 +93,7 @@ //If no safety, we just toggle the nozzle var/decl/interaction_handler/IH = GET_DECL(/decl/interaction_handler/next_spray_amount) if(IH.is_possible(src, user)) - IH.invoked(src, user) + IH.invoked(src, user, src) return TRUE ///Whether the spray has a safety toggle @@ -137,21 +141,21 @@ particle_move_delay = 6 /obj/item/chems/spray/cleaner/populate_reagents() - reagents.add_reagent(/decl/material/liquid/cleaner, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/cleaner, reagents.maximum_volume) /obj/item/chems/spray/antiseptic name = "antiseptic spray" desc = "Great for hiding incriminating bloodstains and sterilizing scalpels." /obj/item/chems/spray/antiseptic/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antiseptic, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antiseptic, reagents.maximum_volume) /obj/item/chems/spray/hair_remover name = "hair remover" desc = "Very effective at removing hair, feathers, spines and horns." /obj/item/chems/spray/hair_remover/populate_reagents() - reagents.add_reagent(/decl/material/liquid/hair_remover, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/hair_remover, reagents.maximum_volume) /obj/item/chems/spray/pepper name = "pepperspray" @@ -164,7 +168,7 @@ safety = TRUE /obj/item/chems/spray/pepper/populate_reagents() - reagents.add_reagent(/decl/material/liquid/capsaicin/condensed, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/capsaicin/condensed, reagents.maximum_volume) /obj/item/chems/spray/pepper/has_safety() return TRUE @@ -180,7 +184,7 @@ volume = 10 /obj/item/chems/spray/waterflower/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) /obj/item/chems/spray/chemsprayer name = "chem sprayer" @@ -192,7 +196,7 @@ w_class = ITEM_SIZE_LARGE possible_transfer_amounts = null volume = 600 - origin_tech = "{'combat':3,'materials':3,'engineering':3}" + origin_tech = @'{"combat":3,"materials":3,"engineering":3}' particle_move_delay = 2 //Was hardcoded to 2 before, and 8 was slower than most mob's move speed material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) @@ -219,7 +223,7 @@ volume = 100 /obj/item/chems/spray/plantbgone/populate_reagents() - reagents.add_reagent(/decl/material/liquid/weedkiller, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/weedkiller, reagents.maximum_volume) /obj/item/chems/spray/plantbgone/afterattack(atom/A, mob/user, proximity) if(!proximity) return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 68ac5733796..4e87d99fb8c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -19,15 +19,29 @@ slot_flags = SLOT_EARS sharp = 1 item_flags = ITEM_FLAG_NO_BLUDGEON + var/mode = SYRINGE_DRAW var/visible_name = "a syringe" var/time = 30 + var/autolabel = TRUE // if set, will add label with the name of the first initial reagent var/can_stab = TRUE /obj/item/chems/syringe/Initialize(var/mapload) . = ..() update_icon() +/obj/item/chems/syringe/populate_reagents() + SHOULD_CALL_PARENT(TRUE) + . = ..() + if(reagents.total_volume > 0 && autolabel && !label_text) // don't override preset labels + label_text = reagents.get_primary_reagent_name() + update_container_name() + + +/obj/item/chems/syringe/on_reagent_change() + . = ..() + update_icon() + /obj/item/chems/syringe/on_picked_up(mob/user) . = ..() update_icon() @@ -182,12 +196,14 @@ to_chat(user, SPAN_NOTICE("The syringe is empty.")) mode = SYRINGE_DRAW return - if(istype(target, /obj/item/implantcase/chem)) + + if(!user.Adjacent(target)) return - if(!ATOM_IS_OPEN_CONTAINER(target) && !ismob(target) && !istype(target, /obj/item/chems/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/storage/fancy/cigarettes)) + if(!ismob(target) && (!target.reagents || !target.can_be_injected_by(src))) to_chat(user, SPAN_NOTICE("You cannot directly fill this object.")) return + if(!REAGENTS_FREE_SPACE(target.reagents)) to_chat(user, SPAN_NOTICE("[target] is full.")) return @@ -305,12 +321,14 @@ amount_per_transfer_from_this = 60 volume = 60 visible_name = "a giant syringe" - time = 300 + time = 30 SECONDS mode = SYRINGE_INJECT + autolabel = FALSE can_stab = FALSE /obj/item/chems/syringe/ld50_syringe/populate_reagents() - reagents.add_reagent(/decl/material/liquid/heartstopper, reagents.maximum_volume) + SHOULD_CALL_PARENT(FALSE) + add_to_reagents(/decl/material/liquid/heartstopper, reagents.maximum_volume) /obj/item/chems/syringe/ld50_syringe/drawReagents(var/target, var/mob/user) if(ismob(target)) // No drawing 60 units of blood at once @@ -323,49 +341,49 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/chems/syringe/stabilizer - name = "syringe (stabilizer)" desc = "Contains stabilizer - for patients in danger of brain damage." mode = SYRINGE_INJECT /obj/item/chems/syringe/stabilizer/populate_reagents() - reagents.add_reagent(/decl/material/liquid/stabilizer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/stabilizer, reagents.maximum_volume) + return ..() /obj/item/chems/syringe/antitoxin - name = "syringe (anti-toxin)" desc = "Contains anti-toxins." mode = SYRINGE_INJECT /obj/item/chems/syringe/antitoxin/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antitoxins, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antitoxins, reagents.maximum_volume) + return ..() /obj/item/chems/syringe/antibiotic - name = "syringe (antibiotics)" desc = "Contains antibiotic agents." mode = SYRINGE_INJECT /obj/item/chems/syringe/antibiotic/populate_reagents() - reagents.add_reagent(/decl/material/liquid/antibiotics, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/antibiotics, reagents.maximum_volume) + return ..() /obj/item/chems/syringe/drugs - name = "syringe (drugs)" desc = "Contains aggressive drugs meant for torture." mode = SYRINGE_INJECT /obj/item/chems/syringe/drugs/populate_reagents() var/vol_each = round(reagents.maximum_volume / 3) - reagents.add_reagent(/decl/material/liquid/psychoactives, vol_each) - reagents.add_reagent(/decl/material/liquid/hallucinogenics, vol_each) - reagents.add_reagent(/decl/material/liquid/presyncopics, vol_each) + add_to_reagents(/decl/material/liquid/psychoactives, vol_each) + add_to_reagents(/decl/material/liquid/hallucinogenics, vol_each) + add_to_reagents(/decl/material/liquid/presyncopics, vol_each) + return ..() /obj/item/chems/syringe/steroid - name = "syringe (anabolic steroids)" desc = "Contains drugs for muscle growth." mode = SYRINGE_INJECT /obj/item/chems/syringe/steroid/populate_reagents() var/vol_third = round(reagents.maximum_volume/3) - reagents.add_reagent(/decl/material/liquid/adrenaline, vol_third) - reagents.add_reagent(/decl/material/liquid/amphetamines, 2 * vol_third) + add_to_reagents(/decl/material/liquid/adrenaline, vol_third) + add_to_reagents(/decl/material/liquid/amphetamines, 2 * vol_third) + return ..() // TG ports @@ -380,17 +398,17 @@ /decl/material/solid/metal/uranium = MATTER_AMOUNT_TRACE, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) - origin_tech = "{'biotech':3,'materials':4,'exoticmatter':2}" + origin_tech = @'{"biotech":3,"materials":4,"exoticmatter":2}' /obj/item/chems/syringe/noreact name = "cryostasis syringe" desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." volume = 20 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE icon = 'icons/obj/syringe_cryo.dmi' material = /decl/material/solid/glass matter = list( /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/organic/plastic = MATTER_AMOUNT_TRACE ) - origin_tech = "{'biotech':4,'materials':4}" + origin_tech = @'{"biotech":4,"materials":4}' diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index ce643d908bc..e15202ca069 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -8,7 +8,7 @@ anchored = FALSE material = /decl/material/solid/organic/plastic matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY) - maxhealth = 100 + max_health = 100 tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT var/unwrenched = FALSE var/tmp/volume = 1000 @@ -45,11 +45,6 @@ if(. && unwrenched) leak() -/obj/structure/reagent_dispensers/Process() - if(!unwrenched) - return PROCESS_KILL - leak() - /obj/structure/reagent_dispensers/examine(mob/user, distance) . = ..() if(unwrenched) @@ -70,19 +65,13 @@ if(reagents?.maximum_volume) to_chat(user, "It may contain up to [reagents.maximum_volume] units of fluid.") -/obj/structure/reagent_dispensers/Destroy() - . = ..() - STOP_PROCESSING(SSprocessing, src) - /obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user) if(IS_WRENCH(W)) unwrenched = !unwrenched visible_message(SPAN_NOTICE("\The [user] wrenches \the [src]'s tap [unwrenched ? "open" : "shut"].")) if(unwrenched) log_and_message_admins("opened a tank at [get_area_name(loc)].") - START_PROCESSING(SSprocessing, src) - else - STOP_PROCESSING(SSprocessing, src) + leak() return TRUE . = ..() @@ -129,11 +118,11 @@ amount_dispensed = 10 possible_transfer_amounts = @"[10,25,50,100]" volume = 7500 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE movable_flags = MOVABLE_FLAG_WHEELED /obj/structure/reagent_dispensers/watertank/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) /obj/structure/reagent_dispensers/watertank/firefighter name = "firefighting water reserve" @@ -158,7 +147,7 @@ var/obj/item/assembly_holder/rig /obj/structure/reagent_dispensers/fueltank/populate_reagents() - reagents.add_reagent(/decl/material/liquid/fuel, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) /obj/structure/reagent_dispensers/fueltank/examine(mob/user, distance) . = ..() @@ -236,10 +225,10 @@ anchored = TRUE density = FALSE amount_dispensed = 45 - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' /obj/structure/reagent_dispensers/peppertank/populate_reagents() - reagents.add_reagent(/decl/material/liquid/capsaicin/condensed, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/capsaicin/condensed, reagents.maximum_volume) /obj/structure/reagent_dispensers/water_cooler name = "water cooler" @@ -256,7 +245,7 @@ var/tmp/cup_type = /obj/item/chems/drinks/sillycup /obj/structure/reagent_dispensers/water_cooler/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/user) if(user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) @@ -302,7 +291,7 @@ matter = list(/decl/material/solid/metal/stainlesssteel = MATTER_AMOUNT_TRACE) /obj/structure/reagent_dispensers/beerkeg/populate_reagents() - reagents.add_reagent(/decl/material/liquid/ethanol/beer, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/ethanol/beer, reagents.maximum_volume) /obj/structure/reagent_dispensers/acid name = "sulphuric acid dispenser" @@ -310,10 +299,10 @@ icon_state = "acidtank" amount_dispensed = 10 anchored = TRUE - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' /obj/structure/reagent_dispensers/acid/populate_reagents() - reagents.add_reagent(/decl/material/liquid/acid, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/acid, reagents.maximum_volume) //Interactions /obj/structure/reagent_dispensers/get_alt_interactions(var/mob/user) diff --git a/code/modules/reagents/storage/pill_bottle_subtypes.dm b/code/modules/reagents/storage/pill_bottle_subtypes.dm index ca201583d53..2335449cb94 100644 --- a/code/modules/reagents/storage/pill_bottle_subtypes.dm +++ b/code/modules/reagents/storage/pill_bottle_subtypes.dm @@ -6,6 +6,14 @@ /obj/item/storage/pill_bottle/brute_meds/WillContain() return list(/obj/item/chems/pill/brute_meds = 21) +/obj/item/storage/pill_bottle/sugariron + labeled_name = "sugar-iron" + desc = "Contains pills used to assist in blood recovery." + wrapper_color = COLOR_MAROON + +/obj/item/storage/pill_bottle/sugariron/WillContain() + return list(/obj/item/chems/pill/sugariron = 21) + /obj/item/storage/pill_bottle/oxygen labeled_name = "oxygen" desc = "Contains pills used to treat oxygen deprivation." diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 0d264554032..7c2f44f08f9 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -4,8 +4,8 @@ /obj/structure/disposalconstruct name = "disposal pipe segment" desc = "A huge pipe segment used for constructing disposal systems." - icon = 'icons/obj/pipes/disposal.dmi' icon_state = "conpipe-s" + icon = 'icons/obj/pipes/disposal_pipe.dmi' anchored = FALSE density = FALSE material = /decl/material/solid/metal/steel @@ -17,6 +17,8 @@ var/constructed_path = /obj/structure/disposalpipe var/built_icon_state +SAVED_VAR(/obj/structure/disposalconstruct, dpdir) + /obj/structure/disposalconstruct/Initialize(mapload, var/P = null) . = ..(mapload) if(P) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 3e5684f71fa..e299b45c018 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -14,7 +14,7 @@ var/global/list/diversion_junctions = list() /obj/machinery/disposal name = "disposal unit" desc = "A pneumatic waste disposal unit." - icon = 'icons/obj/pipes/disposal.dmi' + icon = 'icons/obj/pipes/disposal_bin.dmi' icon_state = "disposal" anchored = TRUE density = TRUE @@ -112,7 +112,7 @@ var/global/list/diversion_junctions = list() update_icon() -/obj/machinery/disposal/receive_mouse_drop(atom/dropping, mob/user) +/obj/machinery/disposal/receive_mouse_drop(atom/dropping, mob/user, params) . = (user?.a_intent != I_HURT && ..()) @@ -124,7 +124,7 @@ var/global/list/diversion_junctions = list() var/incapacitation_flags = INCAPACITATION_DEFAULT if(dropping == user) incapacitation_flags &= ~INCAPACITATION_RESTRAINED - if(!dropping.can_mouse_drop(src, user, incapacitation_flags)) + if(!dropping.can_mouse_drop(src, user, incapacitation_flags, params)) return FALSE // Todo rewrite all of this. @@ -302,7 +302,7 @@ var/global/list/diversion_junctions = list() // update the icon & overlays to reflect mode & status /obj/machinery/disposal/on_update_icon() - overlays.Cut() + cut_overlays() if(stat & BROKEN) mode = 0 flush = 0 @@ -310,7 +310,7 @@ var/global/list/diversion_junctions = list() // flush handle if(flush) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle") + add_overlay("[icon_state]-handle") // only handle is shown if no power if(stat & NOPOWER || mode == -1) @@ -318,13 +318,13 @@ var/global/list/diversion_junctions = list() // check for items in disposal - occupied light if(contents.len > LAZYLEN(component_parts)) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-full") + add_overlay("[icon_state]-full") // charging and ready light if(mode == 1) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-charge") + add_overlay("[icon_state]-charge") else if(mode == 2) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-ready") + add_overlay("[icon_state]-ready") // timed process // charge the gas reservoir and perform flush if ready @@ -532,13 +532,13 @@ var/global/list/diversion_junctions = list() /obj/structure/disposaloutlet name = "disposal outlet" desc = "An outlet for the pneumatic disposal system." - icon = 'icons/obj/pipes/disposal.dmi' + icon = 'icons/obj/pipes/disposal_outlet.dmi' icon_state = "outlet" density = TRUE anchored = TRUE var/turf/target // this will be where the output objects are 'thrown' to. var/mode = 0 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + atom_flags = ATOM_FLAG_CLIMBABLE /obj/structure/disposaloutlet/Initialize() . = ..() @@ -565,7 +565,7 @@ var/global/list/diversion_junctions = list() /obj/structure/disposaloutlet/proc/animate_expel() set waitfor = FALSE - flick("outlet-open", src) + flick("[icon_state]-open", src) playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) sleep(20) //wait until correct animation frame playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) diff --git a/code/modules/recycling/disposalpipe.dm b/code/modules/recycling/disposalpipe.dm index 29b031775e3..dab84d056bb 100644 --- a/code/modules/recycling/disposalpipe.dm +++ b/code/modules/recycling/disposalpipe.dm @@ -1,12 +1,12 @@ // Disposal pipes /obj/structure/disposalpipe - icon = 'icons/obj/pipes/disposal.dmi' + icon = 'icons/obj/pipes/disposal_pipe.dmi' name = "disposal pipe" desc = "An underfloor disposal pipe." anchored = TRUE density = FALSE - maxhealth = 10 + max_health = 10 level = LEVEL_BELOW_PLATING dir = 0 // dir will contain dominant direction for junction pipes alpha = 192 // Plane and alpha modified for mapping, reset to normal on spawn. @@ -18,6 +18,9 @@ var/flipped_state // If it has a mirrored version, this is the typepath for it. // new pipe, set the icon_state as on map +SAVED_VAR(/obj/structure/disposalpipe, dpdir) +SAVED_VAR(/obj/structure/disposalpipe, base_icon_state) + /obj/structure/disposalpipe/Initialize() . = ..() alpha = 255 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 048a2674cbf..1a1ecb8cd9c 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -2,7 +2,8 @@ name = "delivery chute" desc = "A chute for big and small packages alike!" density = TRUE - icon_state = "intake" + icon = 'icons/obj/pipes/disposal_chute.dmi' + icon_state = "chute" base_type = /obj/machinery/disposal/deliveryChute/buildable frame_type = /obj/structure/disposalconstruct/machine/chute @@ -47,7 +48,7 @@ /obj/machinery/disposal/deliveryChute/flush() flushing = 1 - flick("intake-closing", src) + flick("[icon_state]-closing", src) var/obj/structure/disposalholder/H = new() // virtual holder object which actually // travels through the pipes. air_contents = new() // new empty gas resv. diff --git a/code/modules/research/design_console.dm b/code/modules/research/design_console.dm index 5e2ee5b1194..cf1f568f583 100644 --- a/code/modules/research/design_console.dm +++ b/code/modules/research/design_console.dm @@ -1,9 +1,11 @@ /obj/machinery/computer/design_console name = "design database console" desc = "A console for interfacing with a research and development design network." + base_type = /obj/machinery/computer/design_console var/initial_network_id var/initial_network_key + var/initial_network_tag var/list/local_cache var/obj/item/disk/design_disk/disk var/obj/machinery/design_database/viewing_database @@ -11,7 +13,10 @@ /obj/machinery/computer/design_console/Initialize() . = ..() - set_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) + var/datum/extension/network_device/D = get_or_create_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) + if(istype(D) && length(initial_network_tag)) + D.set_network_tag(initial_network_tag) + /obj/machinery/computer/design_console/modify_mapped_vars(map_hash) ..() diff --git a/code/modules/research/design_database.dm b/code/modules/research/design_database.dm index f2095ae7714..f7bfb96c544 100644 --- a/code/modules/research/design_database.dm +++ b/code/modules/research/design_database.dm @@ -17,9 +17,11 @@ var/global/list/default_initial_tech_levels construct_state = /decl/machine_construction/default/panel_closed uncreated_component_parts = null stat_immune = 0 + base_type = /obj/machinery/design_database var/initial_network_id var/initial_network_key + var/initial_network_tag var/list/tech_levels var/need_disk_operation = FALSE var/obj/item/disk/tech_disk/disk @@ -35,7 +37,7 @@ var/global/list/default_initial_tech_levels var/list/data = list() var/datum/extension/network_device/device = get_extension(src, /datum/extension/network_device) - data["network_id"] = device.network_tag + data["network_id"] = device.network_tag //#FIXME: Is it supposed to be the device tag, or the network name/id?? if(disk) data["disk_name"] = disk.name var/list/tech_data = list() @@ -85,12 +87,14 @@ var/global/list/default_initial_tech_levels D.ui_interact(user) return TOPIC_REFRESH -/obj/machinery/design_database/Initialize() +/obj/machinery/design_database/Initialize(mapload, d = 0, populate_parts = TRUE) if(!tech_levels) tech_levels = get_default_initial_tech_levels() ..() design_databases += src - set_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) + var/datum/extension/network_device/D = get_or_create_extension(src, /datum/extension/network_device, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) + if(istype(D) && length(initial_network_tag)) + D.set_network_tag(initial_network_tag) update_icon() . = INITIALIZE_HINT_LATELOAD diff --git a/code/modules/research/design_database_analyzer.dm b/code/modules/research/design_database_analyzer.dm index bce7bff5a42..b0c3c4150bb 100644 --- a/code/modules/research/design_database_analyzer.dm +++ b/code/modules/research/design_database_analyzer.dm @@ -114,7 +114,7 @@ loaded_item = O to_chat(user, SPAN_NOTICE("You add \the [O] to \the [src].")) flick("d_analyzer_la", src) - addtimer(CALLBACK(src, .proc/refresh_busy), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(refresh_busy)), 1 SECOND) return TRUE /obj/machinery/destructive_analyzer/proc/refresh_busy() @@ -140,12 +140,12 @@ else loaded_item = null flick("d_analyzer_process", src) - addtimer(CALLBACK(src, .proc/refresh_busy), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(refresh_busy)), 2 SECONDS) /obj/item/research name = "research debugging device" desc = "Instant research tool. For testing purposes only." icon = 'icons/obj/items/stock_parts/stock_parts.dmi' icon_state = "smes_coil" - origin_tech = "{'materials':19,'engineering':19,'exoticmatter':19,'powerstorage':19,'wormholes':19,'biotech':19,'combat':19,'magnets':19,'programming':19,'esoteric':19}" + origin_tech = @'{"materials":19,"engineering":19,"exoticmatter":19,"powerstorage":19,"wormholes":19,"biotech":19,"combat":19,"magnets":19,"programming":19,"esoteric":19}' max_health = ITEM_HEALTH_NO_DAMAGE diff --git a/code/modules/sealant_gun/sealant_gun.dm b/code/modules/sealant_gun/sealant_gun.dm index 4a7cf1719c1..57dc500ade3 100644 --- a/code/modules/sealant_gun/sealant_gun.dm +++ b/code/modules/sealant_gun/sealant_gun.dm @@ -22,10 +22,12 @@ if(loaded_tank) add_overlay("[icon_state]-tank") -/obj/item/gun/launcher/sealant/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/gun/launcher/sealant/apply_gun_mob_overlays(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) if(overlay && loaded_tank) - overlay.overlays += image(overlay.icon, "[overlay.icon_state]-tank") - . = ..() + var/tank_state = "[overlay.icon_state]-tank" + if(check_state_in_icon(tank_state, overlay.icon)) + overlay.overlays += image(overlay.icon, tank_state) + ..() /obj/item/gun/launcher/sealant/mapped loaded_tank = /obj/item/sealant_tank/mapped diff --git a/code/modules/sealant_gun/sealant_injector.dm b/code/modules/sealant_gun/sealant_injector.dm index 8eee5ee365a..d48d47109e3 100644 --- a/code/modules/sealant_gun/sealant_injector.dm +++ b/code/modules/sealant_gun/sealant_injector.dm @@ -1,8 +1,8 @@ /obj/item/chems/chem_disp_cartridge/foaming_agent/populate_reagents() - reagents.add_reagent(/decl/material/liquid/foaming_agent, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/foaming_agent, reagents.maximum_volume) /obj/item/chems/chem_disp_cartridge/polyacid/populate_reagents() - reagents.add_reagent(/decl/material/liquid/acid/polyacid, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/acid/polyacid, reagents.maximum_volume) /obj/structure/sealant_injector name = "sealant tank injector" diff --git a/code/modules/security levels/keycard_authentication.dm b/code/modules/security levels/keycard_authentication.dm index 036f61b6f6b..6af4ec58fdc 100644 --- a/code/modules/security levels/keycard_authentication.dm +++ b/code/modules/security levels/keycard_authentication.dm @@ -9,7 +9,7 @@ active_power_usage = 6 power_channel = ENVIRON obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-20}, 'SOUTH':{'y':28}, 'EAST':{'x':-24}, 'WEST':{'x':24}}" + directional_offset = @'{"NORTH":{"y":-20}, "SOUTH":{"y":28}, "EAST":{"x":-24}, "WEST":{"x":24}}' var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" @@ -79,7 +79,7 @@ else dat += "
  • Engage [security_state.high_security_level.name]
  • " - if(!config.ert_admin_call_only) + if(!get_config_value(/decl/config/toggle/ert_admin_call_only)) dat += "
  • Emergency Response Team
  • " dat += "
  • Grant Emergency Maintenance Access
  • " @@ -130,10 +130,10 @@ if(KA == src) continue KA.reset() - addtimer(CALLBACK(src, .proc/receive_request, src, initial_card.resolve())) + addtimer(CALLBACK(src, PROC_REF(receive_request), src, initial_card.resolve())) if(confirm_delay) - addtimer(CALLBACK(src, .proc/broadcast_check), confirm_delay) + addtimer(CALLBACK(src, PROC_REF(broadcast_check)), confirm_delay) /obj/machinery/keycard_auth/proc/broadcast_check() if(confirmed) @@ -192,8 +192,9 @@ SSstatistics.add_field("alert_keycard_auth_nukecode",1) /obj/machinery/keycard_auth/proc/is_ert_blocked() - if(config.ert_admin_call_only) return 1 - return SSticker.mode && SSticker.mode.ert_disabled + if(get_config_value(/decl/config/toggle/ert_admin_call_only)) + return TRUE + return SSticker.mode?.ert_disabled /obj/machinery/keycard_auth/update_directional_offset(force = FALSE) if(!force && (!length(directional_offset) || !is_wall_mounted())) //Check if the thing is actually mapped onto a table or something diff --git a/code/modules/shield_generators/floor_diffuser.dm b/code/modules/shield_generators/floor_diffuser.dm index 1cfeb54a6e3..b9d29391db3 100644 --- a/code/modules/shield_generators/floor_diffuser.dm +++ b/code/modules/shield_generators/floor_diffuser.dm @@ -26,9 +26,10 @@ if(!enabled) return for(var/direction in global.cardinal) - var/turf/simulated/shielded_tile = get_step(get_turf(src), direction) - for(var/obj/effect/shield/S in shielded_tile) - S.diffuse(5) + var/turf/shielded_tile = get_step(get_turf(src), direction) + if(shielded_tile?.simulated) + for(var/obj/effect/shield/S in shielded_tile) + S.diffuse(5) /obj/machinery/shield_diffuser/on_update_icon() if(alarm) diff --git a/code/modules/shield_generators/handheld_diffuser.dm b/code/modules/shield_generators/handheld_diffuser.dm index 03a2919b3e3..250691aa2a6 100644 --- a/code/modules/shield_generators/handheld_diffuser.dm +++ b/code/modules/shield_generators/handheld_diffuser.dm @@ -3,15 +3,13 @@ desc = "A small handheld device designed to disrupt energy barriers." icon = 'icons/obj/machines/shielding.dmi' icon_state = "hdiffuser_off" - origin_tech = "{'magnets':5,'powerstorage':5,'esoteric':2}" + origin_tech = @'{"magnets":5,"powerstorage":5,"esoteric":2}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) - - var/obj/item/cell/device/cell var/enabled = 0 /obj/item/shield_diffuser/on_update_icon() @@ -22,28 +20,26 @@ icon_state = "hdiffuser_off" /obj/item/shield_diffuser/Initialize() + set_extension(src, /datum/extension/loaded_cell/unremovable, /obj/item/cell/device, /obj/item/cell/device/standard) . = ..() - cell = new(src) /obj/item/shield_diffuser/Destroy() - QDEL_NULL(cell) if(enabled) STOP_PROCESSING(SSobj, src) . = ..() -/obj/item/shield_diffuser/get_cell() - return cell - /obj/item/shield_diffuser/Process() - if(!enabled) + var/obj/item/cell/cell = get_cell() + if(!enabled || !cell) return for(var/direction in global.cardinal) - var/turf/simulated/shielded_tile = get_step(get_turf(src), direction) - for(var/obj/effect/shield/S in shielded_tile) - // 10kJ per pulse, but gap in the shield lasts for longer than regular diffusers. - if(istype(S) && !S.diffused_for && !S.disabled_for && cell.checked_use(10 KILOWATTS * CELLRATE)) - S.diffuse(20) + var/turf/shielded_tile = get_step(get_turf(src), direction) + if(shielded_tile?.simulated) + for(var/obj/effect/shield/S in shielded_tile) + // 10kJ per pulse, but gap in the shield lasts for longer than regular diffusers. + if(istype(S) && !S.diffused_for && !S.disabled_for && cell.checked_use(10 KILOWATTS * CELLRATE)) + S.diffuse(20) /obj/item/shield_diffuser/attack_self() enabled = !enabled @@ -56,5 +52,4 @@ /obj/item/shield_diffuser/examine(mob/user) . = ..() - to_chat(user, "The charge meter reads [cell ? cell.percent() : 0]%") to_chat(user, "It is [enabled ? "enabled" : "disabled"].") diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm index 08175deb955..3fca6c5530b 100644 --- a/code/modules/shield_generators/shield.dm +++ b/code/modules/shield_generators/shield.dm @@ -169,23 +169,15 @@ if(!gen) qdel(src) return 1 - if(disabled_for || diffused_for) return 1 - // Atmosphere containment. if(air_group) return !gen.check_flag(MODEFLAG_ATMOSPHERIC) - if(mover) return mover.can_pass_shield(gen) return 1 - -/obj/effect/shield/c_airblock(turf/other) - return gen.check_flag(MODEFLAG_ATMOSPHERIC) ? BLOCKED : 0 - - // EMP. It may seem weak but keep in mind that multiple shield segments are likely to be affected. /obj/effect/shield/emp_act(var/severity) if(!disabled_for) @@ -201,10 +193,10 @@ // Fire /obj/effect/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + SHOULD_CALL_PARENT(FALSE) if(!disabled_for) take_damage(rand(5,10), SHIELD_DAMTYPE_HEAT) - // Projectiles /obj/effect/shield/bullet_act(var/obj/item/projectile/proj) if(proj.damage_type == BURN) @@ -316,13 +308,13 @@ // Small visual effect, makes the shield tiles brighten up by becoming more opaque for a moment, and spreads to nearby shields. /obj/effect/shield/proc/impact_effect(var/i, var/list/affected_shields = list()) - i = clamp(1, i, 10) + i = clamp(i, 1, 10) alpha = 255 animate(src, alpha = initial(alpha), time = 1 SECOND) affected_shields |= src i-- if(i) - addtimer(CALLBACK(src, .proc/spread_impact_effect, i, affected_shields), 2) + addtimer(CALLBACK(src, PROC_REF(spread_impact_effect), i, affected_shields), 2) /obj/effect/shield/proc/spread_impact_effect(var/i, var/list/affected_shields = list()) for(var/direction in global.cardinal) diff --git a/code/modules/shield_generators/shield_generator.dm b/code/modules/shield_generators/shield_generator.dm index d0a84fc3e8f..834e79ad440 100644 --- a/code/modules/shield_generators/shield_generator.dm +++ b/code/modules/shield_generators/shield_generator.dm @@ -1,5 +1,5 @@ /obj/machinery/shield_generator - name = "advanced shield generator" + name = "shield generator" desc = "A heavy-duty shield generator and capacitor, capable of generating energy shields at large distances." icon = 'icons/obj/machines/shielding.dmi' icon_state = "generator0" @@ -10,40 +10,70 @@ uncreated_component_parts = list(/obj/item/stock_parts/power/terminal) stock_part_presets = list(/decl/stock_part_preset/terminal_setup) stat_immune = 0 - - var/list/field_segments = list() // List of all shield segments owned by this generator. - var/list/damaged_segments = list() // List of shield segments that have failed and are currently regenerating. - var/shield_modes = 0 // Enabled shield mode flags - var/mitigation_em = 0 // Current EM mitigation - var/mitigation_physical = 0 // Current Physical mitigation - var/mitigation_heat = 0 // Current Burn mitigation - var/mitigation_max = 0 // Maximal mitigation reachable with this generator. Set by RefreshParts() - var/max_energy = 0 // Maximal stored energy. In joules. Depends on the type of used SMES coil when constructing this generator. - var/current_energy = 0 // Current stored energy. - var/field_radius = 1 // Current field radius. - var/target_radius = 1 // Desired field radius. - var/running = SHIELD_OFF // Whether the generator is enabled or not. - var/input_cap = 1 MEGAWATTS // Currently set input limit. Set to 0 to disable limits altogether. The shield will try to input this value per tick at most - var/upkeep_power_usage = 0 // Upkeep power usage last tick. - var/upkeep_multiplier = 1 // Multiplier of upkeep values. - var/power_usage = 0 // Total power usage last tick. - var/overloaded = 0 // Whether the field has overloaded and shut down to regenerate. - var/hacked = 0 // Whether the generator has been hacked by cutting the safety wire. - var/offline_for = 0 // The generator will be inoperable for this duration in ticks. - var/input_cut = 0 // Whether the input wire is cut. - var/mode_changes_locked = 0 // Whether the control wire is cut, locking out changes. - var/ai_control_disabled = 0 // Whether the AI control is disabled. - var/list/mode_list = null // A list of shield_mode datums. - var/full_shield_strength = 0 // The amount of power shields need to be at full operating strength. - var/vessel_reverse_dir = EAST // Reverse dir of our vessel - - var/idle_multiplier = 1 // Trades off cost vs. spin-up time from idle to running - var/idle_valid_values = list(1, 2, 5, 10) - var/spinup_delay = 20 - var/spinup_counter = 0 + obj_flags = OBJ_FLAG_ANCHORABLE + + /// List of all shield segments owned by this generator. + var/list/field_segments = list() + /// List of shield segments that have failed and are currently regenerating. + var/list/damaged_segments = list() + /// Enabled shield mode flags + var/shield_modes = 0 + /// Current EM mitigation + var/mitigation_em = 0 + /// Current Physical mitigation + var/mitigation_physical = 0 + /// Current Burn mitigation + var/mitigation_heat = 0 + /// Maximal mitigation reachable with this generator. Set by RefreshParts() + var/mitigation_max = 0 + /// Maximal stored energy. In joules. Depends on the type of used SMES coil when constructing this generator. + var/max_energy = 0 + /// Current stored energy. + var/current_energy = 0 + /// Current field radius. + var/field_radius = 1 + /// Desired field radius. + var/target_radius = 1 + /// Whether the generator is enabled or not. + var/running = SHIELD_OFF + /// Currently set input limit. Set to 0 to disable limits altogether. The shield will try to input this value per tick at most + var/input_cap = 1 MEGAWATTS + /// Upkeep power usage last tick. + var/upkeep_power_usage = 0 + /// Multiplier of upkeep values. + var/upkeep_multiplier = 1 + /// Total power usage last tick. + var/power_usage = 0 + /// Whether the field has overloaded and shut down to regenerate. + var/overloaded = 0 + /// Whether the generator has been hacked by cutting the safety wire. + var/hacked = 0 + /// The generator will be inoperable for this duration in ticks. + var/offline_for = 0 + /// Whether the input wire is cut. + var/input_cut = 0 + /// Whether the control wire is cut, locking out changes. + var/mode_changes_locked = 0 + /// Whether the AI control is disabled. + var/ai_control_disabled = 0 + /// The amount of power shields need to be at full operating strength. + var/full_shield_strength = 0 + /// Reverse dir of our vessel + var/vessel_reverse_dir = EAST + /// A list of shield_mode datums. + var/list/mode_list + // Trades off cost vs. spin-up time from idle to running + var/idle_multiplier = 1 + var/idle_valid_values = list(1, 2, 5, 10) + var/spinup_delay = 20 + var/spinup_counter = 0 var/obj/effect/overmap/visitable/last_linked_overmap_object +// We do not anchor by default, so that shield generators in hard storage don't create a terminal. +/obj/machinery/shield_generator/mapped + anchored = TRUE + /obj/machinery/shield_generator/on_update_icon() if(running) icon_state = "generator1" @@ -57,7 +87,7 @@ for(var/st in subtypesof(/datum/shield_mode/)) var/datum/shield_mode/SM = new st() mode_list.Add(SM) - events_repository.register(/decl/observ/moved, src, src, .proc/update_overmap_shield_list) + events_repository.register(/decl/observ/moved, src, src, PROC_REF(update_overmap_shield_list)) . = INITIALIZE_HINT_LATELOAD /obj/machinery/shield_generator/LateInitialize() @@ -88,12 +118,12 @@ for(var/obj/item/stock_parts/smes_coil/S in component_parts) full_shield_strength += (S.ChargeCapacity / CELLRATE) * 5 max_energy = full_shield_strength * 20 - current_energy = clamp(0, current_energy, max_energy) + current_energy = clamp(current_energy, 0, max_energy) mitigation_max = MAX_MITIGATION_BASE + MAX_MITIGATION_RESEARCH * total_component_rating_of_type(/obj/item/stock_parts/capacitor) - mitigation_em = clamp(0, mitigation_em, mitigation_max) - mitigation_physical = clamp(0, mitigation_physical, mitigation_max) - mitigation_heat = clamp(0, mitigation_heat, mitigation_max) + mitigation_em = clamp(mitigation_em, 0, mitigation_max) + mitigation_physical = clamp(mitigation_physical, 0, mitigation_max) + mitigation_heat = clamp(mitigation_heat, 0, mitigation_max) ..() @@ -172,9 +202,9 @@ running = SHIELD_RUNNING regenerate_field() - mitigation_em = clamp(0, mitigation_em - MITIGATION_LOSS_PASSIVE, mitigation_max) - mitigation_heat = clamp(0, mitigation_heat - MITIGATION_LOSS_PASSIVE, mitigation_max) - mitigation_physical = clamp(0, mitigation_physical - MITIGATION_LOSS_PASSIVE, mitigation_max) + mitigation_em = clamp(mitigation_em - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) + mitigation_heat = clamp(mitigation_heat - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) + mitigation_physical = clamp(mitigation_physical - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) if(running == SHIELD_RUNNING) upkeep_power_usage = round((field_segments.len - damaged_segments.len) * ENERGY_UPKEEP_PER_TILE * upkeep_multiplier) @@ -193,7 +223,7 @@ // Now try to recharge our internal energy. var/energy_to_demand if(input_cap) - energy_to_demand = clamp(0, max_energy - current_energy, input_cap - energy_buffer) + energy_to_demand = clamp(max_energy - current_energy, 0, input_cap - energy_buffer) else energy_to_demand = max(0, max_energy - current_energy) energy_buffer = energy_to_demand - use_power_oneoff(energy_to_demand) @@ -221,12 +251,6 @@ return SPAN_NOTICE("Wait until \the [src] cools down from emergency shutdown first!") return ..() -/obj/machinery/shield_generator/attackby(obj/item/O, mob/user) - if(panel_open && (IS_MULTITOOL(O) || IS_WIRECUTTER(O))) - attack_hand_with_interaction_checks(user) - return TRUE - return component_attackby(O, user) - /obj/machinery/shield_generator/proc/energy_failure() if(running == SHIELD_DISCHARGING) shutdown_field() @@ -345,7 +369,7 @@ var/new_range = input(user, "Enter new field range (1-[world.maxx]). Leave blank to cancel.", "Field Radius Control", field_radius) as num if(!new_range) return TOPIC_HANDLED - target_radius = clamp(1, new_range, world.maxx) + target_radius = clamp(new_range, 1, world.maxx) return TOPIC_REFRESH if(href_list["set_input_cap"]) @@ -397,9 +421,9 @@ mitigation_heat += MITIGATION_HIT_LOSS + MITIGATION_HIT_GAIN energy_to_use *= 1 - (mitigation_heat / 100) - mitigation_em = clamp(0, mitigation_em, mitigation_max) - mitigation_heat = clamp(0, mitigation_heat, mitigation_max) - mitigation_physical = clamp(0, mitigation_physical, mitigation_max) + mitigation_em = clamp(mitigation_em, 0, mitigation_max) + mitigation_heat = clamp(mitigation_heat, 0, mitigation_max) + mitigation_physical = clamp(mitigation_physical, 0, mitigation_max) current_energy -= energy_to_use diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 9aef90c8526..12522834663 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -6,22 +6,21 @@ density = TRUE opacity = FALSE anchored = TRUE - var/const/max_health = 200 - var/health = max_health //The shield can only take so much beating (prevents perma-prisons) + max_health = 200 var/shield_generate_power = 7500 //how much power we use when regenerating var/shield_idle_power = 1500 //how much power we use when just being sustained. /obj/machinery/shield/malfai name = "emergency forcefield" desc = "A weak forcefield which seems to be projected by the emergency atmosphere containment field." - health = max_health/2 // Half health, it's not suposed to resist much. + max_health = 100 // Half health, it's not suposed to resist much. /obj/machinery/shield/malfai/Process() - health -= 0.5 // Slowly lose integrity over time + current_health -= 0.5 // Slowly lose integrity over time check_failure() /obj/machinery/shield/proc/check_failure() - if (src.health <= 0) + if (current_health <= 0) visible_message("\The [src] dissipates!") qdel(src) return @@ -47,7 +46,7 @@ //Calculate damage var/aforce = W.force if(W.damtype == BRUTE || W.damtype == BURN) - src.health -= aforce + current_health -= aforce //Play a fitting sound playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1) @@ -60,7 +59,7 @@ ..() /obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() + current_health -= Proj.get_structure_damage() ..() check_failure() set_opacity(1) @@ -80,26 +79,27 @@ qdel(src) /obj/machinery/shield/hitby(AM, var/datum/thrownthing/TT) - ..() - //Let everyone know we've been hit! - visible_message(SPAN_DANGER("\The [src] was hit by \the [AM].")) - //Super realistic, resource-intensive, real-time damage calculations. - var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else - var/obj/O = AM - tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - src.health -= tforce - //This seemed to be the best sound for hitting a force field. - playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1) - check_failure() - //The shield becomes dense to absorb the blow.. purely asthetic. - set_opacity(1) - spawn(20) - if(!QDELETED(src)) - set_opacity(0) + . = ..() + if(.) + //Let everyone know we've been hit! + visible_message(SPAN_DANGER("\The [src] was hit by \the [AM].")) + //Super realistic, resource-intensive, real-time damage calculations. + var/tforce = 0 + if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm + var/mob/I = AM + tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) + else + var/obj/O = AM + tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + current_health -= tforce + //This seemed to be the best sound for hitting a force field. + playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1) + check_failure() + //The shield becomes dense to absorb the blow. Purely asthetic. + set_opacity(1) + spawn(20) + if(!QDELETED(src)) + set_opacity(0) /obj/machinery/shieldgen name = "Emergency shield projector" @@ -110,8 +110,7 @@ opacity = FALSE anchored = FALSE initial_access = list(access_engine) - var/const/max_health = 100 - var/health = max_health + max_health = 100 var/active = 0 var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate var/list/deployed_shields = list() @@ -198,9 +197,9 @@ check_delay-- /obj/machinery/shieldgen/proc/checkhp() - if(health <= 30) + if(current_health <= 30) src.malfunction = 1 - if(health <= 0) + if(current_health <= 0) spawn(0) explosion(get_turf(src.loc), 0, 0, 1, 0, 0, 0) qdel(src) @@ -211,24 +210,24 @@ . = ..() if(.) if(severity == 1) - health -= 75 + current_health -= 75 else if(severity == 2) - health -= 30 + current_health -= 30 if(prob(15)) malfunction = 1 else if(severity == 3) - health -= 10 + current_health -= 10 checkhp() /obj/machinery/shieldgen/emp_act(severity) switch(severity) if(1) - src.health /= 2 //cut health in half + current_health /= 2 //cut health in half malfunction = 1 locked = pick(0,1) if(2) if(prob(50)) - src.health *= 0.3 //chop off a third of the health + current_health *= 0.3 //chop off a third of the health malfunction = 1 checkhp() @@ -276,10 +275,9 @@ else if(IS_COIL(W) && malfunction && is_open) var/obj/item/stack/cable_coil/coil = W to_chat(user, "You begin to replace the wires.") - //if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage if(do_after(user, 30,src)) if (coil.use(1)) - health = max_health + current_health = get_max_health() malfunction = 0 to_chat(user, "You repair the [src]!") update_icon() diff --git a/code/modules/shieldgen/shieldwallgen.dm b/code/modules/shieldgen/shieldwallgen.dm index 75caf91139e..1ee46b4635a 100644 --- a/code/modules/shieldgen/shieldwallgen.dm +++ b/code/modules/shieldgen/shieldwallgen.dm @@ -24,7 +24,7 @@ data["draw"] = round(power_draw) data["power"] = round(storedpower) data["maxpower"] = round(max_stored_power) - data["current_draw"] = ((clamp(500, max_stored_power - storedpower, power_draw)) + power ? active_power_usage : 0) + data["current_draw"] = ((clamp(max_stored_power - storedpower, 500, power_draw)) + power ? active_power_usage : 0) data["online"] = active == 2 ? 1 : 0 ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -108,7 +108,7 @@ if(C) PN = C.powernet // find the powernet of the connected cable if(PN) - var/shieldload = clamp(500, max_stored_power - storedpower, power_draw) //what we try to draw + var/shieldload = clamp(max_stored_power - storedpower, 500, power_draw) //what we try to draw shieldload = PN.draw_power(shieldload) //what we actually get storedpower += shieldload diff --git a/code/modules/shuttles/docking_beacon.dm b/code/modules/shuttles/docking_beacon.dm index a8b99cbc9e1..84721e66431 100644 --- a/code/modules/shuttles/docking_beacon.dm +++ b/code/modules/shuttles/docking_beacon.dm @@ -153,7 +153,7 @@ for(var/turf/T in get_turfs()) new /obj/effect/temporary(T, 5 SECONDS,'icons/effects/alphacolors.dmi', "green") projecting = TRUE - addtimer(CALLBACK(src, .proc/allow_projection), 10 SECONDS) // No spamming holograms. + addtimer(CALLBACK(src, PROC_REF(allow_projection)), 10 SECONDS) // No spamming holograms. if(href_list["settings"]) D.ui_interact(user) diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index 755791d1755..9eaf7554147 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -144,7 +144,7 @@ var/global/list/shuttle_landmarks = list() for(var/turf/T in range(radius, src)) if(T.density) T.ChangeTurf(get_base_turf_by_area(T)) - T.turf_flags |= TURF_FLAG_NORUINS + T.turf_flags |= TURF_FLAG_NO_POINTS_OF_INTEREST //Used for custom landing locations. Self deletes after a shuttle leaves. /obj/effect/shuttle_landmark/temporary diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 2ba1a820624..9e2e3dff49d 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -31,6 +31,17 @@ var/mothershuttle //tag of mothershuttle var/motherdock //tag of mothershuttle landmark, defaults to starting location +SAVED_VAR(/datum/shuttle, name) +SAVED_VAR(/datum/shuttle, display_name) +SAVED_VAR(/datum/shuttle, shuttle_area) +SAVED_VAR(/datum/shuttle, current_location) +SAVED_VAR(/datum/shuttle, flags) +SAVED_VAR(/datum/shuttle, multiz) +SAVED_VAR(/datum/shuttle, ceiling_type) +SAVED_VAR(/datum/shuttle, force_ceiling_on_init) +SAVED_VAR(/datum/shuttle, mothershuttle) +SAVED_VAR(/datum/shuttle, motherdock) + /datum/shuttle/New(map_hash, var/obj/effect/shuttle_landmark/initial_location) ..() if(!display_name) @@ -49,7 +60,7 @@ for(var/area_type in shuttle_area) if(istype(area_type, /area)) // If the shuttle area is already an instance, it does not need to be located. areas += area_type - events_repository.register(/decl/observ/destroyed, area_type, src, .proc/remove_shuttle_area) + events_repository.register(/decl/observ/destroyed, area_type, src, PROC_REF(remove_shuttle_area)) continue var/area/A if(map_hash && islist(SSshuttle.map_hash_to_areas[map_hash])) @@ -59,7 +70,7 @@ if(!istype(A)) CRASH("Shuttle \"[name]\" couldn't locate area [area_type].") areas += A - events_repository.register(/decl/observ/destroyed, A, src, .proc/remove_shuttle_area) + events_repository.register(/decl/observ/destroyed, A, src, PROC_REF(remove_shuttle_area)) shuttle_area = areas if(initial_location) @@ -84,7 +95,7 @@ create_ceiling(force_ceiling_on_init) /datum/shuttle/proc/remove_shuttle_area(area/area_to_remove) - events_repository.unregister(/decl/observ/destroyed, area_to_remove, src, .proc/remove_shuttle_area) + events_repository.unregister(/decl/observ/destroyed, area_to_remove, src, PROC_REF(remove_shuttle_area)) SSshuttle.shuttle_areas -= area_to_remove shuttle_area -= area_to_remove if(!length(shuttle_area)) diff --git a/code/modules/shuttles/shuttle_autodock.dm b/code/modules/shuttles/shuttle_autodock.dm index 1bcfc6c299a..4f9657d10d4 100644 --- a/code/modules/shuttles/shuttle_autodock.dm +++ b/code/modules/shuttles/shuttle_autodock.dm @@ -19,6 +19,11 @@ category = /datum/shuttle/autodock flags = SHUTTLE_FLAGS_PROCESS | SHUTTLE_FLAGS_ZERO_G +SAVED_VAR(/datum/shuttle/autodock, current_dock_target) +SAVED_VAR(/datum/shuttle/autodock, dock_target) +SAVED_VAR(/datum/shuttle/autodock, docking_codes) +SAVED_VAR(/datum/shuttle/autodock, next_location) + /datum/shuttle/autodock/New(var/map_hash, var/obj/effect/shuttle_landmark/start_waypoint) ..() if(map_hash) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm index a68048eedf6..29f43d6fdf0 100644 --- a/code/modules/species/outsider/random.dm +++ b/code/modules/species/outsider/random.dm @@ -15,6 +15,15 @@ base_color = RANDOM_RGB MULT_BY_RANDOM_COEF(eye_flash_mod, 0.5, 1.5) eye_darksight_range = rand(1,8) + var/temp_comfort_shift = rand(-50,50) + cold_level_1 += temp_comfort_shift + cold_level_2 += temp_comfort_shift + cold_level_3 += temp_comfort_shift + heat_level_1 += temp_comfort_shift + heat_level_2 += temp_comfort_shift + heat_level_3 += temp_comfort_shift + heat_discomfort_level += temp_comfort_shift + cold_discomfort_level += temp_comfort_shift . = ..() /decl/species/alium @@ -74,17 +83,6 @@ //Environment var/temp_comfort_shift = rand(-50,50) - cold_level_1 += temp_comfort_shift - cold_level_2 += temp_comfort_shift - cold_level_3 += temp_comfort_shift - - heat_level_1 += temp_comfort_shift - heat_level_2 += temp_comfort_shift - heat_level_3 += temp_comfort_shift - - heat_discomfort_level += temp_comfort_shift - cold_discomfort_level += temp_comfort_shift - body_temperature += temp_comfort_shift var/pressure_comfort_shift = rand(-50,50) @@ -103,49 +101,11 @@ . = ..() -/decl/species/alium/get_blood_color(mob/living/carbon/human/H) +/decl/species/alium/get_species_blood_color(mob/living/carbon/human/H) if(istype(H) && H.isSynthetic()) return ..() return blood_color -/decl/species/alium/proc/adapt_to_atmosphere(var/datum/gas_mixture/atmosphere) - var/temp_comfort_shift = atmosphere.temperature - body_temperature - - cold_level_1 += temp_comfort_shift - cold_level_2 += temp_comfort_shift - cold_level_3 += temp_comfort_shift - - heat_level_1 += temp_comfort_shift - heat_level_2 += temp_comfort_shift - heat_level_3 += temp_comfort_shift - - heat_discomfort_level += temp_comfort_shift - cold_discomfort_level += temp_comfort_shift - - body_temperature += temp_comfort_shift - - var/normal_pressure = atmosphere.return_pressure() - hazard_high_pressure = 5 * normal_pressure - warning_high_pressure = 0.7 * hazard_high_pressure - - hazard_low_pressure = 0.2 * normal_pressure - warning_low_pressure = 2.5 * hazard_low_pressure - - breath_type = pick(atmosphere.gas) - breath_pressure = 0.8*(atmosphere.gas[breath_type]/atmosphere.total_moles)*normal_pressure - - var/list/newgases = decls_repository.get_decl_paths_of_subtype(/decl/material/gas) - newgases = newgases.Copy() - newgases ^= atmosphere.gas - for(var/gas in newgases) - var/decl/material/mat = GET_DECL(gas) - if(mat.gas_flags & (XGM_GAS_OXIDIZER|XGM_GAS_FUEL)) - newgases -= gas - if(newgases.len) - poison_types = list(pick_n_take(newgases)) - if(newgases.len) - exhale_type = pick_n_take(newgases) - /obj/structure/aliumizer name = "alien monolith" desc = "Your true form is calling. Use this to become an alien humanoid." diff --git a/code/modules/species/outsider/starlight.dm b/code/modules/species/outsider/starlight.dm index 9d06d562de6..19833e06964 100644 --- a/code/modules/species/outsider/starlight.dm +++ b/code/modules/species/outsider/starlight.dm @@ -37,12 +37,29 @@ icon_state = "ash" /decl/bodytype/starlight/starborn - name = "starborn" - desc = "A blazing mass of light." - icon_base = 'icons/mob/human_races/species/starborn/body.dmi' - icon_deformed = 'icons/mob/human_races/species/starborn/body.dmi' - husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi' - body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS + name = "starborn" + desc = "A blazing mass of light." + icon_base = 'icons/mob/human_races/species/starborn/body.dmi' + icon_deformed = 'icons/mob/human_races/species/starborn/body.dmi' + husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi' + body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_PAIN | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS + cold_level_1 = 260 + cold_level_2 = 250 + cold_level_3 = 235 + heat_level_1 = 20000 + heat_level_2 = 30000 + heat_level_3 = 40000 + cold_discomfort_level = 300 + cold_discomfort_strings = list( + "You feel your fire dying out...", + "Your fire begins to shrink away from the cold.", + "You feel slow and sluggish from the cold." + ) + heat_discomfort_level = 10000 + heat_discomfort_strings = list( + "Surprisingly, you start burning!", + "You're... burning!?!" + ) /decl/blood_type/starstuff name = "starstuff" @@ -52,7 +69,7 @@ splatter_colour = "#ffff00" /decl/species/starlight/handle_death(var/mob/living/carbon/human/H) - addtimer(CALLBACK(H,/mob/proc/dust),0) + addtimer(CALLBACK(H, TYPE_PROC_REF(/mob, dust)),0) /decl/species/starlight/starborn name = "Starborn" @@ -67,22 +84,6 @@ unarmed_attacks = list(/decl/natural_attack/punch/starborn) - cold_discomfort_level = 300 - cold_discomfort_strings = list("You feel your fire dying out...", - "Your fire begins to shrink away from the cold.", - "You feel slow and sluggish from the cold." - ) - cold_level_1 = 260 - cold_level_2 = 250 - cold_level_3 = 235 - - heat_discomfort_level = 10000 - heat_discomfort_strings = list("Surprisingly, you start burning!", - "You're... burning!?!") - heat_level_1 = 20000 - heat_level_2 = 30000 - heat_level_3 = 40000 - warning_low_pressure = 50 hazard_low_pressure = 0 siemens_coefficient = 0 @@ -102,9 +103,7 @@ /decl/species/starlight/starborn/handle_death(var/mob/living/carbon/human/H) ..() var/turf/T = get_turf(H) - var/obj/effect/fluid/F = locate() in T - if(!F) F = new(T) - F.reagents.add_reagent(/decl/material/liquid/fuel, 20) + T.add_to_reagents(/decl/material/liquid/fuel, 20) T.hotspot_expose(FLAMMABLE_GAS_MINIMUM_BURN_TEMPERATURE) /decl/bodytype/starlight/blueforged diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index b0aba0256c9..7c931f93a5a 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -20,7 +20,23 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/holder_icon var/list/available_bodytypes = list() var/decl/bodytype/default_bodytype - var/base_prosthetics_model = /decl/bodytype/prosthetic/basic_human + var/base_external_prosthetics_model = /decl/bodytype/prosthetic/basic_human + var/base_internal_prosthetics_model + + // A list of customization categories made available in character preferences. + var/list/available_accessory_categories = list( + SAC_HAIR, + SAC_FACIAL_HAIR, + SAC_COSMETICS, + SAC_MARKINGS + ) + + // Lists of accessory types for modpack modification of accessory restrictions. + // These lists are pretty broad and indiscriminate in application, don't use + // them for fine detail restriction/allowing if you can avoid it. + var/list/allow_specific_sprite_accessories + var/list/disallow_specific_sprite_accessories + var/list/accessory_styles var/list/blood_types = list( /decl/blood_type/aplus, @@ -36,8 +52,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/flesh_color = "#ffc896" // Pink. var/blood_oxy = 1 - var/static/list/hair_styles - var/static/list/facial_hair_styles var/organs_icon //species specific internal organs icons @@ -111,12 +125,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/blood_reagent = /decl/material/liquid/blood var/max_pressure_diff = 60 // Maximum pressure difference that is safe for lungs - var/cold_level_1 = 243 // Cold damage level 1 below this point. -30 Celsium degrees - var/cold_level_2 = 200 // Cold damage level 2 below this point. - var/cold_level_3 = 120 // Cold damage level 3 below this point. - var/heat_level_1 = 360 // Heat damage level 1 above this point. - var/heat_level_2 = 400 // Heat damage level 2 above this point. - var/heat_level_3 = 1000 // Heat damage level 3 above this point. + var/passive_temp_gain = 0 // Species will gain this much temperature every second var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. @@ -124,19 +133,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure. var/body_temperature = 310.15 // Species will try to stabilize at this temperature. // (also affects temperature processing) - var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm. - var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly. - var/list/heat_discomfort_strings = list( - "You feel sweat drip down your neck.", - "You feel uncomfortably warm.", - "Your skin prickles in the heat." - ) - var/list/cold_discomfort_strings = list( - "You feel chilly.", - "You shiver suddenly.", - "Your chilly flesh stands out in goosebumps." - ) - var/water_soothe_amount // HUD data vars. @@ -231,6 +227,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/preview_icon_path var/preview_outfit = /decl/hierarchy/outfit/job/generic/assistant + /// List of emote types that this species can use by default. + var/list/default_emotes + /decl/species/proc/build_codex_strings() if(!codex_description) @@ -295,6 +294,10 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 . = ..() + if(!base_internal_prosthetics_model) + // internal bodytypes don't care about icons so this is safe, and also necessary for the default map species + base_internal_prosthetics_model = base_external_prosthetics_model || /decl/bodytype/prosthetic/basic_human + // Populate blood type table. for(var/blood_type in blood_types) var/decl/blood_type/blood_decl = GET_DECL(blood_type) @@ -305,6 +308,42 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 available_bodytypes -= bodytype available_bodytypes += GET_DECL(bodytype) + // Update sprite accessory lists for these species. + for(var/accessory_type in allow_specific_sprite_accessories) + var/decl/sprite_accessory/accessory = GET_DECL(accessory_type) + // If this accessory is species restricted, add us to the list. + if(accessory.species_allowed) + accessory.species_allowed |= name + if(!isnull(accessory.body_flags_allowed)) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.body_flags_allowed |= bodytype.body_flags + if(!isnull(accessory.body_flags_denied)) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.body_flags_denied &= ~bodytype.body_flags + if(accessory.bodytype_categories_allowed) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.bodytype_categories_allowed |= bodytype.bodytype_category + if(accessory.bodytype_categories_denied) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.bodytype_categories_allowed -= bodytype.bodytype_category + + for(var/accessory_type in disallow_specific_sprite_accessories) + var/decl/sprite_accessory/accessory = GET_DECL(accessory_type) + if(accessory.species_allowed) + accessory.species_allowed -= name + if(!isnull(accessory.body_flags_allowed)) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.body_flags_allowed &= ~bodytype.body_flags + if(!isnull(accessory.body_flags_denied)) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.body_flags_denied |= bodytype.body_flags + if(accessory.bodytype_categories_allowed) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.bodytype_categories_allowed -= bodytype.bodytype_category + if(accessory.bodytype_categories_denied) + for(var/decl/bodytype/bodytype in available_bodytypes) + accessory.bodytype_categories_allowed |= bodytype.bodytype_category + if(ispath(default_bodytype)) default_bodytype = GET_DECL(default_bodytype) else if(length(available_bodytypes) && !default_bodytype) @@ -382,31 +421,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 else if(!ispath(age_descriptor, /datum/appearance_descriptor/age)) . += "age descriptor was not a /datum/appearance_descriptor/age subtype" - if(cold_level_3) - if(cold_level_2) - if(cold_level_3 > cold_level_2) - . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_2 ([cold_level_2])" - if(cold_level_1) - if(cold_level_3 > cold_level_1) - . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_1 ([cold_level_1])" - if(cold_level_2 && cold_level_1) - if(cold_level_2 > cold_level_1) - . += "cold_level_2 ([cold_level_2]) was not lower than cold_level_1 ([cold_level_1])" - - if(heat_level_3 != INFINITY) - if(heat_level_2 != INFINITY) - if(heat_level_3 < heat_level_2) - . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_2 ([heat_level_2])" - if(heat_level_1 != INFINITY) - if(heat_level_3 < heat_level_1) - . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_1 ([heat_level_1])" - if((heat_level_2 != INFINITY) && (heat_level_1 != INFINITY)) - if(heat_level_2 < heat_level_1) - . += "heat_level_2 ([heat_level_2]) was not higher than heat_level_1 ([heat_level_1])" - - if(min(heat_level_1, heat_level_2, heat_level_3) <= max(cold_level_1, cold_level_2, cold_level_3)) - . += "heat and cold damage level thresholds overlap" - if(taste_sensitivity < 0) . += "taste_sensitivity ([taste_sensitivity]) was negative" @@ -464,9 +478,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/handle_sleeping(var/mob/living/carbon/human/H) if(prob(2) && !H.failed_last_breath && !H.isSynthetic()) if(!HAS_STATUS(H, STAT_PARA)) - H.emote("snore") + H.emote(/decl/emote/audible/snore) else - H.emote("groan") + H.emote(/decl/emote/audible/groan) /decl/species/proc/handle_environment_special(var/mob/living/carbon/human/H) return @@ -542,7 +556,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 H.set_fullscreen(GET_STATUS(H, STAT_BLIND) && !H.equipment_prescription, "blind", /obj/screen/fullscreen/blind) H.set_fullscreen(H.stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout) - if(config.welder_vision) + if(get_config_value(/decl/config/toggle/on/welder_vision)) H.set_fullscreen(H.equipment_tint_total, "welder", /obj/screen/fullscreen/impaired, H.equipment_tint_total) var/how_nearsighted = get_how_nearsighted(H) H.set_fullscreen(how_nearsighted, "nearsighted", /obj/screen/fullscreen/oxy, how_nearsighted) @@ -594,7 +608,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/decl/blood_type/blood = get_blood_decl(H) return istype(blood) ? blood.splatter_name : "blood" -/decl/species/proc/get_blood_color(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_blood_color(var/mob/living/carbon/human/H) var/decl/blood_type/blood = get_blood_decl(H) return istype(blood) ? blood.splatter_colour : COLOR_BLOOD_HUMAN @@ -610,7 +624,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return shoes.move_trail return move_trail -/decl/species/proc/handle_trail(var/mob/living/carbon/human/H, var/turf/simulated/T) +/decl/species/proc/handle_trail(var/mob/living/carbon/human/H, var/turf/T) return /decl/species/proc/update_skin(var/mob/living/carbon/human/H) @@ -670,55 +684,28 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/decl/pronouns/G = H.get_pronouns() return SPAN_DANGER("[G.His] face is horribly mangled!\n") -/decl/species/proc/get_hair_style_types(var/decl/bodytype/bodytype) - if(!bodytype) - bodytype = default_bodytype - var/list/hair_styles_by_species = LAZYACCESS(hair_styles, type) - if(!hair_styles_by_species) - hair_styles_by_species = list() - LAZYSET(hair_styles, type, hair_styles_by_species) - var/list/hair_style_by_bodytype = hair_styles_by_species[bodytype] - if(!hair_style_by_bodytype) - hair_style_by_bodytype = list() - LAZYSET(hair_styles_by_species, bodytype, hair_style_by_bodytype) - var/list/all_hairstyles = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/hair) - for(var/hairstyle in all_hairstyles) - var/decl/sprite_accessory/S = all_hairstyles[hairstyle] - if(!S.accessory_is_available(null, src, bodytype)) - continue - ADD_SORTED(hair_style_by_bodytype, hairstyle, /proc/cmp_text_asc) - hair_style_by_bodytype[hairstyle] = S - return hair_style_by_bodytype - -/decl/species/proc/get_hair_styles(var/decl/bodytype/bodytype) +/decl/species/proc/get_available_accessories(var/decl/bodytype/bodytype, accessory_category) . = list() - for(var/hair in get_hair_style_types(bodytype)) - . += GET_DECL(hair) + for(var/accessory in get_available_accessory_types(bodytype, accessory_category)) + . += GET_DECL(accessory) -/decl/species/proc/get_facial_hair_style_types(var/decl/bodytype/bodytype) +/decl/species/proc/get_available_accessory_types(decl/bodytype/bodytype, accessory_category) if(!bodytype) bodytype = default_bodytype - var/list/facial_hair_styles_by_species = LAZYACCESS(facial_hair_styles, type) - if(!facial_hair_styles_by_species) - facial_hair_styles_by_species = list() - LAZYSET(facial_hair_styles, type, facial_hair_styles_by_species) - var/list/facial_hair_style_by_bodytype = facial_hair_styles_by_species[bodytype] - if(!facial_hair_style_by_bodytype) - facial_hair_style_by_bodytype = list() - LAZYSET(facial_hair_styles_by_species, bodytype, facial_hair_style_by_bodytype) - var/list/all_facial_styles = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/facial_hair) - for(var/facialhairstyle in all_facial_styles) - var/decl/sprite_accessory/S = all_facial_styles[facialhairstyle] - if(!S.accessory_is_available(null, src, bodytype)) + var/list/available_accessories = accessory_styles?[bodytype.type]?[accessory_category] + if(!available_accessories) + available_accessories = list() + LAZYINITLIST(accessory_styles) + LAZYSET(accessory_styles[bodytype.type], accessory_category, available_accessories) + var/decl/sprite_accessory_category/accessory_category_decl = GET_DECL(accessory_category) + var/list/all_accessories = decls_repository.get_decls_of_subtype(accessory_category_decl.base_accessory_type) + for(var/accessory_style in all_accessories) + var/decl/sprite_accessory/check_accessory = all_accessories[accessory_style] + if(!check_accessory || !check_accessory.accessory_is_available(null, src, bodytype)) continue - ADD_SORTED(facial_hair_style_by_bodytype, facialhairstyle, /proc/cmp_text_asc) - facial_hair_style_by_bodytype[facialhairstyle] = S - return facial_hair_style_by_bodytype - -/decl/species/proc/get_facial_hair_styles(var/decl/bodytype/bodytype) - . = list() - for(var/hair in get_facial_hair_style_types(bodytype)) - . += GET_DECL(hair) + ADD_SORTED(available_accessories, accessory_style, /proc/cmp_text_asc) + available_accessories[accessory_style] = check_accessory + return available_accessories /decl/species/proc/skills_from_age(age) //Converts an age into a skill point allocation modifier. Can be used to give skill point bonuses/penalities not depending on job. switch(age) @@ -738,8 +725,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/pain_level = pain_emotes_with_pain_level[pain_emotes] if(pain_level >= pain_power) // This assumes that if a pain-level has been defined it also has a list of emotes to go with it - var/decl/emote/E = GET_DECL(pick(pain_emotes)) - return E.key + return pick(pain_emotes) /decl/species/proc/handle_post_move(var/mob/living/carbon/human/H) handle_exertion(H) @@ -827,20 +813,3 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 H.mob_swap_flags = swap_flags H.mob_push_flags = push_flags H.pass_flags = pass_flags - -/decl/species/proc/get_species_temperature_threshold(var/threshold) - switch(threshold) - if(COLD_LEVEL_1) - return cold_level_1 - if(COLD_LEVEL_2) - return cold_level_2 - if(COLD_LEVEL_3) - return cold_level_3 - if(HEAT_LEVEL_1) - return heat_level_1 - if(HEAT_LEVEL_2) - return heat_level_2 - if(HEAT_LEVEL_3) - return heat_level_3 - else - CRASH("get_species_temperature_threshold() called with invalid threshold value.") diff --git a/code/modules/species/species_bodytype.dm b/code/modules/species/species_bodytype.dm index d120c807f97..31312b987dd 100644 --- a/code/modules/species/species_bodytype.dm +++ b/code/modules/species/species_bodytype.dm @@ -1,12 +1,15 @@ var/global/list/bodytypes_by_category = list() /decl/bodytype + /// Name used in general. var/name = "default" + /// Name used in preference bodytype selection. Defaults to name. + var/pref_name /// Seen when examining a prosthetic limb, if non-null. var/desc var/icon_base var/icon_deformed - var/lip_icon + var/cosmetics_icon var/bandages_icon var/bodytype_flag = BODY_FLAG_HUMANOID var/bodytype_category = BODYTYPE_OTHER @@ -22,8 +25,10 @@ var/global/list/bodytypes_by_category = list() var/associated_gender var/appearance_flags = 0 // Appearance/display related features. + /// Used when filing your nails. + var/nail_noun /// What tech levels should limbs of this type use/need? - var/limb_tech = "{'biotech':2}" + var/limb_tech = @'{"biotech":2}' var/icon_cache_uid /// Determines if eyes should render on heads using this bodytype. var/has_eyes = TRUE @@ -82,7 +87,6 @@ var/global/list/bodytypes_by_category = list() // Used for initializing prefs/preview var/base_color = COLOR_BLACK var/base_eye_color = COLOR_BLACK - var/base_hair_color = COLOR_BLACK /// Used to initialize organ material var/material = /decl/material/solid/organic/meat @@ -143,10 +147,7 @@ var/global/list/bodytypes_by_category = list() var/vital_organ_failure_death_delay = 25 SECONDS var/mob_size = MOB_SIZE_MEDIUM - var/default_h_style = /decl/sprite_accessory/hair/bald - var/default_f_style = /decl/sprite_accessory/facial_hair/shaved - - var/list/base_markings + var/list/default_sprite_accessories // Darksight handling /// Fractional multiplier (0 to 1) for the base alpha of the darkness overlay. A value of 1 means darkness is completely invisible. @@ -168,10 +169,37 @@ var/global/list/bodytypes_by_category = list() /// Stun from blindness modifier. var/eye_flash_mod = 1 + // Bodytype temperature damage thresholds. + var/cold_level_1 = 243 // Cold damage level 1 below this point. -30 Celsium degrees + var/cold_level_2 = 200 // Cold damage level 2 below this point. + var/cold_level_3 = 120 // Cold damage level 3 below this point. + var/heat_level_1 = 360 // Heat damage level 1 above this point. + var/heat_level_2 = 400 // Heat damage level 2 above this point. + var/heat_level_3 = 1000 // Heat damage level 3 above this point. + + // Temperature comfort levels and strings. + var/heat_discomfort_level = 315 + var/cold_discomfort_level = 285 + /// Aesthetic messages about feeling warm. + var/list/heat_discomfort_strings = list( + "You feel sweat drip down your neck.", + "You feel uncomfortably warm.", + "Your skin prickles in the heat." + ) + /// Aesthetic messages about feeling chilly. + var/list/cold_discomfort_strings = list( + "You feel chilly.", + "You shiver suddenly.", + "Your chilly flesh stands out in goosebumps." + ) + /decl/bodytype/Initialize() . = ..() icon_deformed ||= icon_base + if(!pref_name) + pref_name = name + LAZYDISTINCTADD(global.bodytypes_by_category[bodytype_category], src) //If the species has eyes, they are the default vision organ if(!vision_organ && has_organ[BP_EYES]) @@ -180,9 +208,9 @@ var/global/list/bodytypes_by_category = list() if(!breathing_organ && has_organ[BP_LUNGS]) breathing_organ = BP_LUNGS - if(config.grant_default_darksight) - eye_darksight_range = max(eye_darksight_range, config.default_darksight_range) - eye_low_light_vision_effectiveness = max(eye_low_light_vision_effectiveness, config.default_darksight_effectiveness) + if(get_config_value(/decl/config/toggle/grant_default_darksight)) + eye_darksight_range = max(eye_darksight_range, get_config_value(/decl/config/num/default_darksight_range)) + eye_low_light_vision_effectiveness = max(eye_low_light_vision_effectiveness, get_config_value(/decl/config/num/default_darksight_effectiveness)) // Modify organ lists if necessary. if(islist(override_organ_types)) @@ -211,6 +239,18 @@ var/global/list/bodytypes_by_category = list() /decl/bodytype/validate() . = ..() + var/damage_icon = get_damage_overlays() + if(damage_icon) + for(var/brute = 0 to 3) + for(var/burn = 0 to 3) + var/damage_state = "[brute][burn]" + if(!check_state_in_icon(damage_state, damage_icon)) + . += "missing state '[damage_state]' in icon '[damage_icon]'" + if(!check_state_in_icon("", damage_icon)) + . += "missing default empty state in icon '[damage_icon]'" + else + . += "null damage overlay icon" + if(eye_base_low_light_vision > 1) . += "base low light vision is greater than 1 (over 100%)" else if(eye_base_low_light_vision < 0) @@ -231,26 +271,47 @@ var/global/list/bodytypes_by_category = list() else if(eye_low_light_vision_adjustment_speed < 0) . += "low light vision adjustment speed is less than 0 (below 0%)" - if(icon_base) - if(check_state_in_icon("torso", icon_base)) - . += "deprecated \"torso\" state present in icon_base" - if(!check_state_in_icon(BP_CHEST, icon_base)) - . += "\"[BP_CHEST]\" state not present in icon_base" - if(icon_deformed && icon_deformed != icon_base) - if(check_state_in_icon("torso", icon_deformed)) - . += "deprecated \"torso\" state present in icon_deformed" - if(!check_state_in_icon(BP_CHEST, icon_deformed)) - . += "\"[BP_CHEST]\" state not present in icon_deformed" + if(icon_base || icon_deformed) + + var/list/limb_tags = list() + for(var/limb in has_limbs) + limb_tags |= limb + for(var/limb in override_limb_types) + limb_tags |= limb + + if(icon_base) + if(check_state_in_icon("torso", icon_base)) + . += "deprecated \"torso\" state present in icon_base" + for(var/limb in limb_tags) + if(!check_state_in_icon(limb, icon_base)) + . += "missing required state in [icon_base]: [limb]" + + if(icon_deformed && icon_deformed != icon_base) + if(check_state_in_icon("torso", icon_deformed)) + . += "deprecated \"torso\" state present in icon_deformed" + for(var/limb in limb_tags) + if(!check_state_in_icon(limb, icon_deformed)) + . += "missing required state in [icon_deformed]: [limb]" + if((appearance_flags & HAS_SKIN_COLOR) && isnull(base_color)) . += "uses skin color but missing base_color" - if((appearance_flags & HAS_HAIR_COLOR) && isnull(base_hair_color)) - . += "uses hair color but missing base_hair_color" if((appearance_flags & HAS_EYE_COLOR) && isnull(base_eye_color)) . += "uses eye color but missing base_eye_color" - if(isnull(default_h_style)) - . += "null default_h_style (use a bald/hairless hairstyle if 'no hair' is intended)" - if(isnull(default_f_style)) - . += "null default_f_style (use a shaved/hairless facial hair style if 'no facial hair' is intended)" + + for(var/accessory_category in default_sprite_accessories) + var/decl/sprite_accessory_category/acc_cat = GET_DECL(accessory_category) + if(!istype(acc_cat)) + . += "invalid sprite accessory category entry: [accessory_category || "null"]" + continue + for(var/accessory in default_sprite_accessories[accessory_category]) + var/decl/sprite_accessory/acc_decl = GET_DECL(accessory) + if(!istype(acc_decl)) + . += "invalid sprite accessory in category [accessory_category]: [accessory || "null"]" + continue + if(acc_decl.accessory_category != acc_cat.type) + . += "accessory category [acc_decl.accessory_category || "null"] does not match [acc_cat.type]" + if(!istype(acc_decl, acc_cat.base_accessory_type)) + . += "accessory type [acc_decl.type] does not align with category base accessory: [acc_cat.base_accessory_type || "null"]" var/list/tail_data = has_limbs[BP_TAIL] if(tail_data) @@ -278,6 +339,31 @@ var/global/list/bodytypes_by_category = list() else . += "invalid BP_TAIL type: got [tail_organ], expected /obj/item/organ/external/tail" + if(cold_level_3) + if(cold_level_2) + if(cold_level_3 > cold_level_2) + . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_2 ([cold_level_2])" + if(cold_level_1) + if(cold_level_3 > cold_level_1) + . += "cold_level_3 ([cold_level_3]) was not lower than cold_level_1 ([cold_level_1])" + if(cold_level_2 && cold_level_1) + if(cold_level_2 > cold_level_1) + . += "cold_level_2 ([cold_level_2]) was not lower than cold_level_1 ([cold_level_1])" + + if(heat_level_3 != INFINITY) + if(heat_level_2 != INFINITY) + if(heat_level_3 < heat_level_2) + . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_2 ([heat_level_2])" + if(heat_level_1 != INFINITY) + if(heat_level_3 < heat_level_1) + . += "heat_level_3 ([heat_level_3]) was not higher than heat_level_1 ([heat_level_1])" + if((heat_level_2 != INFINITY) && (heat_level_1 != INFINITY)) + if(heat_level_2 < heat_level_1) + . += "heat_level_2 ([heat_level_2]) was not higher than heat_level_1 ([heat_level_1])" + + if(min(heat_level_1, heat_level_2, heat_level_3) <= max(cold_level_1, cold_level_2, cold_level_3)) + . += "heat and cold damage level thresholds overlap" + /decl/bodytype/proc/max_skin_tone() if(appearance_flags & HAS_SKIN_TONE_GRAV) return 100 @@ -303,14 +389,15 @@ var/global/list/bodytypes_by_category = list() if(H.has_external_organs()) for(var/obj/item/organ/external/E in H.get_external_organs()) if(!is_default_limb(E)) - H.remove_organ(E, FALSE, FALSE, TRUE, TRUE, FALSE) //Remove them first so we don't trigger removal effects by just calling delete on them + H.remove_organ(E, FALSE, FALSE, TRUE, TRUE, FALSE, skip_health_update = TRUE) //Remove them first so we don't trigger removal effects by just calling delete on them qdel(E) //Clear invalid internal organs if(H.has_internal_organs()) - for(var/obj/item/organ/O in H.get_internal_organs()) + for(var/obj/item/organ/internal/O in H.get_internal_organs()) if(!is_default_organ(O)) - H.remove_organ(O, FALSE, FALSE, TRUE, TRUE, FALSE) //Remove them first so we don't trigger removal effects by just calling delete on them + O.transfer_brainmob_with_organ = FALSE // To avoid ghosting us on set_species(). + H.remove_organ(O, FALSE, FALSE, TRUE, TRUE, FALSE, skip_health_update = TRUE) //Remove them first so we don't trigger removal effects by just calling delete on them qdel(O) //Create missing limbs @@ -323,7 +410,7 @@ var/global/list/bodytypes_by_category = list() if(E.parent_organ) var/list/parent_organ_data = has_limbs[E.parent_organ] parent_organ_data["has_children"]++ - H.add_organ(E, GET_EXTERNAL_ORGAN(H, E.parent_organ), FALSE, FALSE) + H.add_organ(E, GET_EXTERNAL_ORGAN(H, E.parent_organ), FALSE, FALSE, skip_health_update = TRUE) //Create missing internal organs for(var/organ_tag in has_organ) @@ -334,7 +421,8 @@ var/global/list/bodytypes_by_category = list() if(organ_tag != O.organ_tag) warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.") O.organ_tag = organ_tag - H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE) + H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE, skip_health_update = TRUE) + H.update_health() //Checks if an existing organ is the bodytype default /decl/bodytype/proc/is_default_organ(obj/item/organ/internal/O) @@ -373,33 +461,26 @@ var/global/list/bodytypes_by_category = list() if(initial(I.parent_organ) == organ.organ_tag) limb.cavity_max_w_class = max(limb.cavity_max_w_class, get_resized_organ_w_class(initial(I.w_class))) -/decl/bodytype/proc/set_default_hair(mob/living/carbon/human/organism, override_existing = TRUE, defer_update_hair = FALSE) - if(!organism.h_style || (override_existing && (organism.h_style != default_h_style))) - organism.h_style = default_h_style - . = TRUE - if(!organism.h_style || (override_existing && (organism.f_style != default_f_style))) - organism.f_style = default_f_style - . = TRUE - if(. && !defer_update_hair) - organism.update_hair() - -/decl/bodytype/proc/customize_preview_mannequin(mob/living/carbon/human/dummy/mannequin/mannequin) - if(length(base_markings)) - for(var/mark_type in base_markings) - var/decl/sprite_accessory/marking/mark_decl = GET_DECL(mark_type) - for(var/bodypart in mark_decl.body_parts) - var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(mannequin, bodypart) - if(O && !LAZYACCESS(O.markings, mark_type)) - LAZYSET(O.markings, mark_type, base_markings[mark_type]) - - for(var/obj/item/organ/external/E in mannequin.get_external_organs()) +/decl/bodytype/proc/set_default_sprite_accessories(var/mob/living/setting) + if(!istype(setting)) + return + for(var/obj/item/organ/external/E in setting.get_external_organs()) E.skin_colour = base_color + E.clear_sprite_accessories(skip_update = TRUE) + if(!length(default_sprite_accessories)) + return + for(var/accessory_category in default_sprite_accessories) + for(var/accessory in default_sprite_accessories[accessory_category]) + var/decl/sprite_accessory/accessory_decl = GET_DECL(accessory) + var/accessory_colour = default_sprite_accessories[accessory_category][accessory] + for(var/bodypart in accessory_decl.body_parts) + var/obj/item/organ/external/O = GET_EXTERNAL_ORGAN(setting, bodypart) + if(O) + O.set_sprite_accessory(accessory, null, accessory_colour, skip_update = TRUE) - mannequin.eye_colour = base_eye_color - mannequin.hair_colour = base_hair_color - mannequin.facial_hair_colour = base_hair_color - set_default_hair(mannequin) - +/decl/bodytype/proc/customize_preview_mannequin(mob/living/carbon/human/dummy/mannequin/mannequin) + set_default_sprite_accessories(mannequin) + mannequin.set_eye_colour(base_eye_color, skip_update = TRUE) mannequin.force_update_limbs() mannequin.update_mutations(0) mannequin.update_body(0) @@ -449,8 +530,64 @@ var/global/list/bodytypes_by_category = list() var/obj/item/organ/internal/new_innard = new organ_type(limb.owner, null, limb.owner.dna, src) limb.owner.add_organ(new_innard, GET_EXTERNAL_ORGAN(limb.owner, new_innard.parent_organ), FALSE, FALSE) +/decl/bodytype/proc/get_body_temperature_threshold(var/threshold) + switch(threshold) + if(COLD_LEVEL_1) + return cold_level_1 + if(COLD_LEVEL_2) + return cold_level_2 + if(COLD_LEVEL_3) + return cold_level_3 + if(HEAT_LEVEL_1) + return heat_level_1 + if(HEAT_LEVEL_2) + return heat_level_2 + if(HEAT_LEVEL_3) + return heat_level_3 + else + CRASH("get_species_temperature_threshold() called with invalid threshold value.") + +/decl/bodytype/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) + + if(!prob(5)) + return + + var/covered = 0 // Basic coverage can help. + var/held_items = H.get_held_items() + for(var/obj/item/clothing/clothes in H) + if(clothes in held_items) + continue + if((clothes.body_parts_covered & SLOT_UPPER_BODY) && (clothes.body_parts_covered & SLOT_LOWER_BODY)) + covered = 1 + break + + switch(msg_type) + if("cold") + if(!covered && length(cold_discomfort_strings)) + to_chat(H, SPAN_DANGER(pick(cold_discomfort_strings))) + if("heat") + if(covered && length(heat_discomfort_strings)) + to_chat(H, SPAN_DANGER(pick(heat_discomfort_strings))) + /decl/bodytype/proc/get_user_species_for_validation() for(var/species_name in get_all_species()) var/decl/species/species = get_species_by_key(species_name) if(src in species.available_bodytypes) return species_name + +// Defined as a global so modpacks can add to it. +var/global/list/limbs_with_nails = list( + BP_L_HAND, + BP_R_HAND, + BP_M_HAND, + BP_L_FOOT, + BP_R_FOOT +) + +/decl/bodytype/proc/get_default_grooming_results(obj/item/organ/external/limb, obj/item/grooming/tool) + if(nail_noun && (tool.grooming_flags & GROOMABLE_FILE) && (limb?.organ_tag in limbs_with_nails)) + return list( + "success" = GROOMING_RESULT_SUCCESS, + "descriptor" = nail_noun + ) + return null diff --git a/code/modules/species/species_bodytype_helpers.dm b/code/modules/species/species_bodytype_helpers.dm index d2efe0d3bca..a92d48f1933 100644 --- a/code/modules/species/species_bodytype_helpers.dm +++ b/code/modules/species/species_bodytype_helpers.dm @@ -21,8 +21,8 @@ /decl/bodytype/proc/get_skeletal_icon(var/mob/living/carbon/human/H) return skeletal_icon -/decl/bodytype/proc/get_lip_icon(var/mob/living/carbon/human/H) - return lip_icon +/decl/bodytype/proc/get_cosmetics_icon(var/decl/sprite_accessory/cosmetics/cosmetics_style) + return cosmetics_icon /decl/bodytype/proc/get_vulnerable_location(var/mob/living/carbon/human/H) return vulnerable_location @@ -33,9 +33,13 @@ /decl/bodytype/proc/handle_post_bodytype_pref_set(datum/preferences/pref) if(!pref) return - // Markings used to be cleared outside of here, but it was always done before every call, so it was moved in here. - pref.body_markings = base_markings?.Copy() + pref.sprite_accessories = list() + for(var/accessory_category in default_sprite_accessories) + pref.sprite_accessories[accessory_category] = list() + for(var/accessory in default_sprite_accessories[accessory_category]) + pref.sprite_accessories[accessory_category][accessory] = default_sprite_accessories[accessory_category][accessory] /decl/bodytype/proc/apply_appearance(var/mob/living/carbon/human/H) - H.skin_colour = base_color + if(base_color) + H.set_skin_colour(base_color) diff --git a/code/modules/species/species_bodytype_random.dm b/code/modules/species/species_bodytype_random.dm index 31f90a9fb86..446b7581764 100644 --- a/code/modules/species/species_bodytype_random.dm +++ b/code/modules/species/species_bodytype_random.dm @@ -1,7 +1,7 @@ #define SETUP_RANDOM_COLOR_GETTER(X, Y, Z, W) \ /decl/bodytype/var/list/random_##Y = W;\ /decl/bodytype/proc/get_random_##X(){\ - if(!(appearance_flags & Z) || !random_##Y.len){\ + if((Z && !(appearance_flags & Z)) || !random_##Y.len){\ return;\ }\ var/decl/color_generator/CG = GET_DECL(pickweight(random_##Y));\ @@ -29,18 +29,7 @@ SETUP_RANDOM_COLOR_GETTER(skin_color, skin_colors, HAS_SKIN_COLOR, list( /decl/color_generator/blue_light, /decl/color_generator/green, /decl/color_generator/white)) -SETUP_RANDOM_COLOR_SETTER(skin_color, change_skin_color) - -SETUP_RANDOM_COLOR_GETTER(hair_color, hair_colors, HAS_HAIR_COLOR, list( - /decl/color_generator/black, - /decl/color_generator/blonde, - /decl/color_generator/chestnut, - /decl/color_generator/copper, - /decl/color_generator/brown, - /decl/color_generator/wheat, - /decl/color_generator/old, - /decl/color_generator/punk)) -SETUP_RANDOM_COLOR_SETTER(hair_color, change_hair_color) +SETUP_RANDOM_COLOR_SETTER(skin_color, set_skin_colour) SETUP_RANDOM_COLOR_GETTER(eye_color, eye_colors, HAS_EYE_COLOR, list( /decl/color_generator/black, @@ -51,12 +40,7 @@ SETUP_RANDOM_COLOR_GETTER(eye_color, eye_colors, HAS_EYE_COLOR, list( /decl/color_generator/blue_light, /decl/color_generator/green, /decl/color_generator/albino_eye)) -SETUP_RANDOM_COLOR_SETTER(eye_color, change_eye_color) - -/decl/bodytype/proc/get_random_facial_hair_color() - return get_random_hair_color() - -SETUP_RANDOM_COLOR_SETTER(facial_hair_color, change_facial_hair_color) +SETUP_RANDOM_COLOR_SETTER(eye_color, set_eye_colour) /decl/bodytype/proc/get_random_skin_tone() return random_skin_tone(src) @@ -69,12 +53,4 @@ SETUP_RANDOM_COLOR_SETTER(facial_hair_color, change_facial_hair_color) if(!isnull(new_tone)) change_skin_tone(new_tone) -/mob/living/carbon/human/proc/randomize_hair_style() - var/list/L = get_valid_hairstyle_types() - change_hair(SAFEPICK(L)) - -/mob/living/carbon/human/proc/randomize_facial_hair_style() - var/list/L = get_valid_facial_hairstyle_types() - change_facial_hair(SAFEPICK(L)) - #undef SETUP_RANDOM_COLOR_GETTER diff --git a/code/modules/species/species_crystalline_bodytypes.dm b/code/modules/species/species_crystalline_bodytypes.dm index c281454099d..15c0f6047bb 100644 --- a/code/modules/species/species_crystalline_bodytypes.dm +++ b/code/modules/species/species_crystalline_bodytypes.dm @@ -5,10 +5,16 @@ **/ /decl/bodytype/crystalline abstract_type = /decl/bodytype/crystalline - limb_tech = "{'materials':4}" + limb_tech = @'{"materials":4}' is_robotic = FALSE material = /decl/material/solid/gemstone/crystal body_flags = BODY_FLAG_CRYSTAL_REFORM | BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS + cold_level_1 = SYNTH_COLD_LEVEL_1 + cold_level_2 = SYNTH_COLD_LEVEL_2 + cold_level_3 = SYNTH_COLD_LEVEL_3 + heat_level_1 = SYNTH_HEAT_LEVEL_1 + heat_level_2 = SYNTH_HEAT_LEVEL_2 + heat_level_3 = SYNTH_HEAT_LEVEL_3 var/is_brittle /decl/bodytype/crystalline/apply_bodytype_organ_modifications(obj/item/organ/org) diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index 150571a33ed..a3e795a825f 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -13,37 +13,15 @@ /decl/species/proc/get_knockout_message(var/mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) -/decl/species/proc/get_death_message(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_death_message(var/mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) /decl/species/proc/get_ssd(var/mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? "flashing a 'system offline' glyph on their monitor" : show_ssd) -/decl/species/proc/get_flesh_colour(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_flesh_color(var/mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color) -/decl/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) - - if(!prob(5)) - return - - var/covered = 0 // Basic coverage can help. - var/held_items = H.get_held_items() - for(var/obj/item/clothing/clothes in H) - if(clothes in held_items) - continue - if((clothes.body_parts_covered & SLOT_UPPER_BODY) && (clothes.body_parts_covered & SLOT_LOWER_BODY)) - covered = 1 - break - - switch(msg_type) - if("cold") - if(!covered) - to_chat(H, "[pick(cold_discomfort_strings)]") - if("heat") - if(covered) - to_chat(H, "[pick(heat_discomfort_strings)]") - /decl/species/proc/get_vision_flags(var/mob/living/carbon/human/H) return vision_flags diff --git a/code/modules/species/species_helpers.dm b/code/modules/species/species_helpers.dm index 6b8aef39799..5ac85615ad4 100644 --- a/code/modules/species/species_helpers.dm +++ b/code/modules/species/species_helpers.dm @@ -39,15 +39,9 @@ var/global/list/stored_shock_by_ref = list() /decl/species/proc/handle_post_species_pref_set(datum/preferences/pref) pref.skin_colour = default_bodytype.base_color pref.eye_colour = default_bodytype.base_eye_color - pref.hair_colour = default_bodytype.base_hair_color - pref.facial_hair_colour = default_bodytype.base_hair_color +// pref.hair_colour = default_bodytype.base_hair_color +// pref.facial_hair_colour = default_bodytype.base_hair_color /decl/species/proc/equip_default_fallback_uniform(var/mob/living/carbon/human/H) if(istype(H)) H.equip_to_slot_or_del(new /obj/item/clothing/under/harness, slot_w_uniform_str) - -/decl/species/proc/is_blood_incompatible(var/my_blood_type, var/their_blood_type) - var/decl/blood_type/my_blood = get_blood_type_by_name(my_blood_type) - if(!istype(my_blood)) - return FALSE - return !my_blood.can_take_donation_from(get_blood_type_by_name(their_blood_type)) diff --git a/code/modules/species/species_hud.dm b/code/modules/species/species_hud.dm index 412aff74fdd..24290d09211 100644 --- a/code/modules/species/species_hud.dm +++ b/code/modules/species/species_hud.dm @@ -1,12 +1,10 @@ /datum/hud_data - var/icon // If set, overrides ui_style. var/has_a_intent = 1 // Set to draw intent box. var/has_m_intent = 1 // Set to draw move intent box. var/has_warnings = 1 // Set to draw environment warnings. var/has_pressure = 1 // Draw the pressure indicator. var/has_nutrition = 1 // Draw the nutrition indicator. var/has_bodytemp = 1 // Draw the bodytemp indicator. - var/has_hands = 1 // Set to draw hands. var/has_drop = 1 // Set to draw drop button. var/has_throw = 1 // Set to draw throw button. var/has_resist = 1 // Set to draw resist button. @@ -43,19 +41,14 @@ var/slot_id = inv_slot.slot_id inventory_slots[slot_id] = inv_slot equip_slots |= slot_id - // Build reference lists for inventory updates if(inv_slot.can_be_hidden) hidden_slots |= slot_id else persistent_slots |= slot_id - - if(has_hands) - equip_slots |= slot_handcuffed_str - + equip_slots |= slot_handcuffed_str if(slot_back_str in equip_slots) equip_slots |= slot_in_backpack_str - if(slot_w_uniform_str in equip_slots) equip_slots |= slot_tie_str diff --git a/code/modules/species/species_shapeshifter.dm b/code/modules/species/species_shapeshifter.dm index 3a8bff664eb..6e770d63a4c 100644 --- a/code/modules/species/species_shapeshifter.dm +++ b/code/modules/species/species_shapeshifter.dm @@ -33,8 +33,9 @@ var/global/list/wrapped_species_by_ref = list() /decl/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H) if(monochromatic) - H.hair_colour = H.skin_colour - H.facial_hair_colour = H.skin_colour + var/skin_colour = H.get_skin_colour() + SET_HAIR_COLOUR(H, skin_colour, TRUE) + SET_FACIAL_HAIR_COLOUR(H, skin_colour, TRUE) ..() /decl/species/shapeshifter/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) @@ -54,15 +55,15 @@ var/global/list/wrapped_species_by_ref = list() visible_message("\The [src]'s form contorts subtly.") var/decl/bodytype/root_bodytype = get_bodytype() - var/list/hairstyles = species.get_hair_styles(root_bodytype) + var/list/hairstyles = species.get_available_accessory_types(root_bodytype, SAC_HAIR) if(length(hairstyles)) var/decl/sprite_accessory/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in hairstyles - change_hair(new_hair ? new_hair.type : /decl/sprite_accessory/hair/bald) + SET_HAIR_STYLE(src, (new_hair ? new_hair.type : /decl/sprite_accessory/hair/bald), FALSE) - var/list/beardstyles = species.get_facial_hair_styles(root_bodytype) + var/list/beardstyles = species.get_available_accessory_types(root_bodytype, SAC_FACIAL_HAIR) if(length(beardstyles)) var/decl/sprite_accessory/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in beardstyles - change_facial_hair(new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved) + SET_FACIAL_HAIR_STYLE(src, (new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved), FALSE) /mob/living/carbon/human/proc/shapeshifter_select_gender() @@ -115,15 +116,12 @@ var/global/list/wrapped_species_by_ref = list() shapeshifter_set_colour(new_skin) /mob/living/carbon/human/proc/shapeshifter_set_colour(var/new_skin) - - skin_colour = new_skin - + set_skin_colour(new_skin, skip_update = TRUE) var/decl/species/shapeshifter/S = species if(S.monochromatic) - hair_colour = skin_colour - facial_hair_colour = skin_colour - + var/skin_colour = get_skin_colour() + SET_HAIR_COLOUR(src, skin_colour, TRUE) + SET_FACIAL_HAIR_COLOUR(src, skin_colour, TRUE) for(var/obj/item/organ/external/E in get_external_organs()) E.sync_colour_to_human(src) - try_refresh_visible_overlays() diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm index 5281b332af9..4ca51b873eb 100644 --- a/code/modules/species/station/golem.dm +++ b/code/modules/species/station/golem.dm @@ -30,14 +30,6 @@ flesh_color = "#137e8f" - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - death_message = "becomes completely motionless..." available_pronouns = list(/decl/pronouns/neuter) diff --git a/code/modules/species/station/human_bodytypes.dm b/code/modules/species/station/human_bodytypes.dm index 402e4d8eb2b..b5b3a603455 100644 --- a/code/modules/species/station/human_bodytypes.dm +++ b/code/modules/species/station/human_bodytypes.dm @@ -1,19 +1,20 @@ /decl/bodytype/human - name = "feminine" - bodytype_category = BODYTYPE_HUMANOID - icon_base = 'icons/mob/human_races/species/human/body_female.dmi' - icon_deformed = 'icons/mob/human_races/species/human/deformed_body_female.dmi' - lip_icon = 'icons/mob/human_races/species/human/lips.dmi' - blood_overlays = 'icons/mob/human_races/species/human/blood_overlays.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - limb_icon_intensity = 0.7 - associated_gender = FEMALE + name = "feminine" + bodytype_category = BODYTYPE_HUMANOID + cosmetics_icon = 'icons/mob/human_races/species/default_cosmetics.dmi' + icon_base = 'icons/mob/human_races/species/human/body_female.dmi' + icon_deformed = 'icons/mob/human_races/species/human/deformed_body_female.dmi' + blood_overlays = 'icons/mob/human_races/species/human/blood_overlays.dmi' + bandages_icon = 'icons/mob/bandage.dmi' + limb_icon_intensity = 0.7 + associated_gender = FEMALE uniform_state_modifier = "f" - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_NORMAL | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + appearance_flags = HAS_SKIN_TONE_NORMAL | HAS_UNDERWEAR | HAS_EYE_COLOR + nail_noun = "nails" /decl/bodytype/human/masculine - name = "masculine" - icon_base = 'icons/mob/human_races/species/human/body_male.dmi' - icon_deformed = 'icons/mob/human_races/species/human/deformed_body_male.dmi' - associated_gender = MALE + name = "masculine" + icon_base = 'icons/mob/human_races/species/human/body_male.dmi' + icon_deformed = 'icons/mob/human_races/species/human/deformed_body_male.dmi' + associated_gender = MALE uniform_state_modifier = null \ No newline at end of file diff --git a/code/modules/species/station/monkey_bodytypes.dm b/code/modules/species/station/monkey_bodytypes.dm index 7d7fb09acb7..0f6dca01417 100644 --- a/code/modules/species/station/monkey_bodytypes.dm +++ b/code/modules/species/station/monkey_bodytypes.dm @@ -5,11 +5,12 @@ blood_overlays = 'icons/mob/human_races/species/monkey/blood_overlays.dmi' health_hud_intensity = 1.75 bodytype_flag = BODY_FLAG_MONKEY + eye_icon = null override_limb_types = list( - BP_HEAD = /obj/item/organ/external/head/no_eyes, BP_TAIL = /obj/item/organ/external/tail/monkey ) mob_size = MOB_SIZE_SMALL + nail_noun = "nails" /decl/bodytype/monkey/Initialize() equip_adjust = list( diff --git a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm index 70a37798f3f..823a1613525 100644 --- a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm +++ b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm @@ -39,7 +39,7 @@ if(!..()) return 0 - newVars = list("maxHealth" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2) + newVars = list("max_health" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2) return "Your bats are now stronger." @@ -59,7 +59,7 @@ summon_amt = 1 summon_type = list(/mob/living/simple_animal/hostile/commanded/bear) - newVars = list("maxHealth" = 15, + newVars = list("max_health" = 15, "health" = 15, "melee_damage_lower" = 10, "melee_damage_upper" = 10, @@ -76,14 +76,14 @@ return 0 switch(spell_levels[Sp_POWER]) if(1) - newVars = list("maxHealth" = 30, + newVars = list("max_health" = 30, "health" = 30, "melee_damage_lower" = 15, "melee_damage_upper" = 15 ) return "Your bear has been upgraded from a cub to a whelp." if(2) - newVars = list("maxHealth" = 45, + newVars = list("max_health" = 45, "health" = 45, "melee_damage_lower" = 20, "melee_damage_upper" = 20, @@ -91,7 +91,7 @@ ) return "Your bear has been upgraded from a whelp to an adult." if(3) - newVars = list("maxHealth" = 60, + newVars = list("max_health" = 60, "health" = 60, "melee_damage_lower" = 25, "melee_damage_upper" = 25, @@ -99,7 +99,7 @@ ) return "Your bear has been upgraded from an adult to an alpha." if(4) - newVars = list("maxHealth" = 75, + newVars = list("max_health" = 75, "health" = 75, "melee_damage_lower" = 35, "melee_damage_upper" = 35, diff --git a/code/modules/spells/aoe_turf/conjure/force_portal.dm b/code/modules/spells/aoe_turf/conjure/force_portal.dm index 7a4483435cf..baee15fed72 100644 --- a/code/modules/spells/aoe_turf/conjure/force_portal.dm +++ b/code/modules/spells/aoe_turf/conjure/force_portal.dm @@ -1,6 +1,6 @@ /spell/aoe_turf/conjure/force_portal name = "Force Portal" - desc = "Create a portal that sucks in anything that touches it and then shoots it all out at the end.." + desc = "Create a portal that sucks in anything that touches it and then shoots it all out at the end." school = "conjuration" feedback = "FP" summon_type = list(/obj/effect/force_portal) diff --git a/code/modules/spells/aoe_turf/drain_blood.dm b/code/modules/spells/aoe_turf/drain_blood.dm index 8fa0be93c73..da5d1be45cd 100644 --- a/code/modules/spells/aoe_turf/drain_blood.dm +++ b/code/modules/spells/aoe_turf/drain_blood.dm @@ -40,8 +40,8 @@ if(amount > 0) H.adjust_blood(amount) continue - L.adjustBruteLoss(-5) - L.adjustFireLoss(-2.5) + L.adjustBruteLoss(-5, do_update_health = FALSE) + L.adjustFireLoss(-2.5, do_update_health = FALSE) L.adjustToxLoss(-2.5) /obj/item/projectile/beam/blood_effect diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm index a2d58655579..88f84ebfe87 100644 --- a/code/modules/spells/artifacts.dm +++ b/code/modules/spells/artifacts.dm @@ -22,7 +22,7 @@ to_chat(user, "You can see... everything!") // This never actually happens. visible_message("[user] stares into [src], their eyes glazing over.") - user.teleop = user.ghostize(1) + user.teleop = user.ghostize() announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.") return diff --git a/code/modules/spells/contracts.dm b/code/modules/spells/contracts.dm index 60c6bba8bf9..3326ddefef0 100644 --- a/code/modules/spells/contracts.dm +++ b/code/modules/spells/contracts.dm @@ -1,7 +1,7 @@ /obj/item/contract name = "contract" desc = "written in the blood of some unfortunate fellow." - icon = 'icons/mob/screen_spells.dmi' + icon = 'icons/mob/screen/spells.dmi' icon_state = "master_open" material = /decl/material/solid/organic/paper var/contract_master = null diff --git a/code/modules/spells/general/acid_spray.dm b/code/modules/spells/general/acid_spray.dm index c39d043bfc8..a1aebd2df04 100644 --- a/code/modules/spells/general/acid_spray.dm +++ b/code/modules/spells/general/acid_spray.dm @@ -21,7 +21,7 @@ for(var/mod in list(315, 0, 45)) var/obj/effect/effect/water/chempuff/chem = new(get_turf(target)) chem.create_reagents(10) - chem.reagents.add_reagent(reagent_type,10) + chem.add_to_reagents(reagent_type,10) chem.set_color() spawn(0) chem.set_up(get_ranged_target_turf(target, angle2dir(angle+mod), 3)) diff --git a/code/modules/spells/general/veil_of_shadows.dm b/code/modules/spells/general/veil_of_shadows.dm index 0b189f8efbc..4d328e65db0 100644 --- a/code/modules/spells/general/veil_of_shadows.dm +++ b/code/modules/spells/general/veil_of_shadows.dm @@ -22,8 +22,8 @@ H.AddMovementHandler(/datum/movement_handler/mob/incorporeal) if(H.add_cloaking_source(src)) H.visible_message("\The [H] shrinks from view!") - events_repository.register(/decl/observ/moved, H,src,.proc/check_light) - timer_id = addtimer(CALLBACK(src,.proc/cancel_veil),duration, TIMER_STOPPABLE) + events_repository.register(/decl/observ/moved, H,src,PROC_REF(check_light)) + timer_id = addtimer(CALLBACK(src,PROC_REF(cancel_veil)),duration, TIMER_STOPPABLE) /spell/veil_of_shadows/proc/cancel_veil() var/mob/living/carbon/human/H = holder @@ -35,7 +35,7 @@ drop_cloak() else events_repository.unregister(/decl/observ/moved, H,src) - events_repository.register(/decl/observ/moved, H,src,.proc/drop_cloak) + events_repository.register(/decl/observ/moved, H,src,PROC_REF(drop_cloak)) /spell/veil_of_shadows/proc/drop_cloak() var/mob/living/carbon/human/H = holder diff --git a/code/modules/spells/hand/hand.dm b/code/modules/spells/hand/hand.dm index f17f55c1707..a533cc3dbb3 100644 --- a/code/modules/spells/hand/hand.dm +++ b/code/modules/spells/hand/hand.dm @@ -75,7 +75,7 @@ /spell/hand/duration/cast(var/list/targets, var/mob/user) . = ..() if(.) - hand_timer = addtimer(CALLBACK(src, .proc/cancel_hand), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) + hand_timer = addtimer(CALLBACK(src, PROC_REF(cancel_hand)), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) /spell/hand/duration/cancel_hand() deltimer(hand_timer) diff --git a/code/modules/spells/hand/hand_item.dm b/code/modules/spells/hand/hand_item.dm index 855cfdcfa92..36670f1f945 100644 --- a/code/modules/spells/hand/hand_item.dm +++ b/code/modules/spells/hand/hand_item.dm @@ -4,7 +4,7 @@ Basically: I can use it to target things where I click. I can then pass these ta /obj/item/magic_hand name = "Magic Hand" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/mob/screen/spells.dmi' atom_flags = 0 item_flags = 0 obj_flags = 0 diff --git a/code/modules/spells/hand/slippery_surface.dm b/code/modules/spells/hand/slippery_surface.dm index 002b4c947ff..2db0588d128 100644 --- a/code/modules/spells/hand/slippery_surface.dm +++ b/code/modules/spells/hand/slippery_surface.dm @@ -12,9 +12,10 @@ cast_sound = 'sound/magic/summonitems_generic.ogg' /spell/hand/slippery_surface/cast_hand(var/atom/a, var/mob/user) - for(var/turf/simulated/T in view(1,a)) - T.wet_floor(50) - new /obj/effect/temporary(T,3, 'icons/effects/effects.dmi', "sonar_ping") + for(var/turf/T in view(1,a)) + if(T.simulated) + T.wet_floor(50) + new /obj/effect/temporary(T, 3, 'icons/effects/effects.dmi', "sonar_ping") return ..() /spell/hand/slippery_surface/tower diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm index cb5af2f7598..79a64522435 100644 --- a/code/modules/spells/spellbook.dm +++ b/code/modules/spells/spellbook.dm @@ -70,7 +70,7 @@ var/global/list/artefact_feedback = list( return if(reagent) if(I.reagents?.has_reagent(reagent, 5)) - I.reagents.remove_reagent(reagent, 5) + I.remove_from_reagents(reagent, 5) else if(LAZYACCESS(I.matter, reagent) >= (SHEET_MATERIAL_AMOUNT * 5)) qdel(I) else diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm index d2dc6a0201e..ad550747a7f 100644 --- a/code/modules/spells/spells.dm +++ b/code/modules/spells/spells.dm @@ -31,7 +31,7 @@ /mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready") if(!ability_master) - ability_master = new() + ability_master = new(null, src) spell_to_add.holder = src if(mind) if(!mind.learned_spells) diff --git a/code/modules/spells/targeted/blood_boil.dm b/code/modules/spells/targeted/blood_boil.dm index 1c16d337cdb..0f9ef34b98a 100644 --- a/code/modules/spells/targeted/blood_boil.dm +++ b/code/modules/spells/targeted/blood_boil.dm @@ -20,6 +20,6 @@ H.bodytemperature += 40 if(prob(10)) to_chat(H,"\The [user] seems to radiate an uncomfortable amount of heat your direction.") - if(H.bodytemperature > H.get_temperature_threshold(HEAT_LEVEL_3)) //Burst into flames + if(H.bodytemperature > H.get_mob_temperature_threshold(HEAT_LEVEL_3)) //Burst into flames H.fire_stacks += 50 H.IgniteMob() \ No newline at end of file diff --git a/code/modules/spells/targeted/cleric_spells.dm b/code/modules/spells/targeted/cleric_spells.dm index e3ea0071e9f..59545660c56 100644 --- a/code/modules/spells/targeted/cleric_spells.dm +++ b/code/modules/spells/targeted/cleric_spells.dm @@ -181,7 +181,7 @@ var/time = (L.getBruteLoss() + L.getFireLoss()) * 20 L.status_flags &= GODMODE to_chat(L,"You will be in stasis for [time/10] second\s.") - addtimer(CALLBACK(src,.proc/cancel_rift),time) + addtimer(CALLBACK(src,PROC_REF(cancel_rift)),time) /spell/targeted/heal_target/trance/Destroy() cancel_rift() @@ -220,7 +220,7 @@ should_wait = 0 break //Don't need to check anymore. if(should_wait) - addtimer(CALLBACK(src,.proc/check_for_revoke,targets), 30 SECONDS) + addtimer(CALLBACK(src,PROC_REF(check_for_revoke),targets), 30 SECONDS) else revoke_spells() diff --git a/code/modules/spells/targeted/equip/burning_touch.dm b/code/modules/spells/targeted/equip/burning_touch.dm index b7e9c9dbdb9..c6227d6b246 100644 --- a/code/modules/spells/targeted/equip/burning_touch.dm +++ b/code/modules/spells/targeted/equip/burning_touch.dm @@ -16,7 +16,7 @@ /obj/item/flame/hands name = "Burning Hand" - icon = 'icons/mob/screen1.dmi' + icon = 'icons/mob/screen/grabs.dmi' icon_state = "grabbed+1" force = 10 damtype = BURN diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm index 9f3885664c9..fd741613209 100644 --- a/code/modules/spells/targeted/ethereal_jaunt.dm +++ b/code/modules/spells/targeted/ethereal_jaunt.dm @@ -107,7 +107,7 @@ else to_chat(user, "Some strange aura is blocking the way!") canmove = 0 - addtimer(CALLBACK(src, .proc/allow_move), 2) + addtimer(CALLBACK(src, PROC_REF(allow_move)), 2) /obj/effect/dummy/spell_jaunt/proc/allow_move() canmove = TRUE diff --git a/code/modules/spells/targeted/glimpse_of_eternity.dm b/code/modules/spells/targeted/glimpse_of_eternity.dm index 8a9c5b9e912..a34920af8f1 100644 --- a/code/modules/spells/targeted/glimpse_of_eternity.dm +++ b/code/modules/spells/targeted/glimpse_of_eternity.dm @@ -21,6 +21,6 @@ new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "electricity_constant") else SET_STATUS_MAX(L, STAT_BLIND, 2) - L.adjustBruteLoss(-10) + L.adjustBruteLoss(-10, do_update_health = FALSE) L.adjustFireLoss(-10) new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "green_sparkles") \ No newline at end of file diff --git a/code/modules/spells/targeted/shapeshift.dm b/code/modules/spells/targeted/shapeshift.dm index a4504ed778c..20c129ee781 100644 --- a/code/modules/spells/targeted/shapeshift.dm +++ b/code/modules/spells/targeted/shapeshift.dm @@ -55,9 +55,9 @@ M.forceMove(trans) //move inside the new dude to hide him. M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING transformed_dudes[trans] = M - events_repository.register(/decl/observ/death, trans,src,/spell/targeted/shapeshift/proc/stop_transformation) - events_repository.register(/decl/observ/destroyed, trans,src,/spell/targeted/shapeshift/proc/stop_transformation) - events_repository.register(/decl/observ/destroyed, M, src, /spell/targeted/shapeshift/proc/destroyed_transformer) + events_repository.register(/decl/observ/death, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation)) + events_repository.register(/decl/observ/destroyed, trans,src, TYPE_PROC_REF(/spell/targeted/shapeshift, stop_transformation)) + events_repository.register(/decl/observ/destroyed, M, src, TYPE_PROC_REF(/spell/targeted/shapeshift, destroyed_transformer)) if(duration) spawn(duration) stop_transformation(trans) @@ -73,8 +73,8 @@ return FALSE transformer.status_flags &= ~GODMODE if(share_damage) - var/ratio = target.health/target.maxHealth - var/damage = transformer.maxHealth - round(transformer.maxHealth*(ratio)) + var/transformer_max_health = transformer.get_max_health() + var/damage = transformer.set_max_health(transformer_max_health-round(transformer_max_health*(transformer.get_health_ratio()))) for(var/i in 1 to CEILING(damage/10)) transformer.adjustBruteLoss(10) if(target.mind) @@ -116,7 +116,7 @@ level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2) - newVars = list("health" = 50, "maxHealth" = 50) + newVars = list("health" = 50, "max_health" = 50) hud_state = "wiz_poly" @@ -183,7 +183,7 @@ "melee_damage_upper" = 25, "resistance" = 6, "health" = 125, - "maxHealth" = 125) + "max_health" = 125) duration = 0 return "You revel in the corruption. There is no turning back." diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm index 2bb9cca2eb7..04a69e3b7da 100644 --- a/code/modules/spells/targeted/targeted.dm +++ b/code/modules/spells/targeted/targeted.dm @@ -140,9 +140,9 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp apply_spell_damage(target) /spell/targeted/proc/apply_spell_damage(mob/living/target) - target.adjustBruteLoss(amt_dam_brute) - target.adjustFireLoss(amt_dam_fire) - target.adjustToxLoss(amt_dam_tox) + target.adjustBruteLoss(amt_dam_brute, do_update_health = FALSE) + target.adjustFireLoss(amt_dam_fire, do_update_health = FALSE) + target.adjustToxLoss(amt_dam_tox, do_update_health = FALSE) target.adjustOxyLoss(amt_dam_oxy) if(ishuman(target)) var/mob/living/carbon/human/H = target diff --git a/code/modules/spells/targeted/torment.dm b/code/modules/spells/targeted/torment.dm index ea1cdff12a2..9008aefa271 100644 --- a/code/modules/spells/targeted/torment.dm +++ b/code/modules/spells/targeted/torment.dm @@ -21,7 +21,7 @@ cast_sound = 'sound/magic/cowhead_curse.ogg' /spell/targeted/torment/cast(var/list/targets, var/mob/user) - gibs(user.loc) + user.spawn_gibber() for(var/mob/living/carbon/human/H in targets) H.adjustHalLoss(loss) diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm index a78cab57bf4..b7aeafd58ad 100644 --- a/code/modules/sprite_accessories/_accessory.dm +++ b/code/modules/sprite_accessories/_accessory.dm @@ -1,6 +1,6 @@ /* - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, + Hello and welcome to sprite accessories: For sprite accessories, such as hair, facial hair, and possibly tattoos and stuff somewhere along the line. This file is intended to be friendly for people with little to no actual coding experience. The process of adding in new hairstyles has been made pain-free and easy to do. @@ -10,33 +10,72 @@ have to define any UI values for sprite accessories manually for hair and facial hair. Just add in new hair types and the game will naturally adapt. - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm + Changing icon states, icon files and names should not represent any risks to + existing savefiles, but please do not change decl uids unless you are very sure + you know what you're doing and don't mind potentially causing people's savefiles + to load the default values for the marking category in question. */ /decl/sprite_accessory abstract_type = /decl/sprite_accessory decl_flags = DECL_FLAG_MANDATORY_UID - var/name // The preview name of the accessory - var/icon // the icon file the accessory is located in - var/icon_state // the icon_state of the accessory - var/required_gender = null // Restricted to specific genders. null matches any - var/list/species_allowed = list(SPECIES_HUMAN) // Restrict some styles to specific root species names - var/list/subspecies_allowed // Restrict some styles to specific species names, irrespective of root species name - var/body_flags_allowed = null // Restrict some styles to specific bodytype flags - var/body_flags_denied = null // Restrict some styles to specific bodytype flags - var/list/bodytype_categories_allowed = null // Restricts some styles to specific bodytype categories - var/list/bodytype_categories_denied = null // Restricts some styles to specific bodytype categories + /// The preview name of the accessory + var/name + /// the icon file the accessory is located in + var/icon + /// the icon_state of the accessory + var/icon_state + /// Restricted to specific bodytypes. null matches any + var/list/decl/bodytype/bodytypes_allowed + /// Restricted from specific bodytypes. null matches none + var/list/decl/bodytype/bodytypes_denied + /// Restrict some styles to specific root species names + var/list/species_allowed = list(SPECIES_HUMAN) + /// Restrict some styles to specific species names, irrespective of root species name + var/list/subspecies_allowed + /// Restrict some styles to specific bodytype flags. + var/body_flags_allowed + /// Restrict some styles to specific bodytype flags. + var/body_flags_denied + /// Restricts some styles to specific bodytype categories + var/list/bodytype_categories_allowed + /// Restricts some styles to specific bodytype categories + var/list/bodytype_categories_denied + /// Slot to check equipment for when hiding this accessory. + var/hidden_by_gear_slot + /// Flag to check equipment for when hiding this accessory. + var/hidden_by_gear_flag + /// Various flags controlling some checks and behavior. + var/accessory_flags = 0 + /// Flags to check when applying this accessory to the mob. + var/requires_appearance_flags = 0 + /// Icon cache for various icon generation steps. + var/list/cached_icons = list() + /// Whether or not this overlay should be trimmed to fit the base bodypart icon. + var/mask_to_bodypart = FALSE + /// What blend mode to use when colourizing this accessory. + var/color_blend = ICON_ADD + /// What blend mode to use when applying this accessory to the compiled organ. + var/layer_blend = ICON_OVERLAY + /// What bodypart tags does this marking apply to? + var/list/body_parts + /// Set to a layer integer to apply this as an overlay over the top of hair and such. + var/sprite_overlay_layer + /// A list of sprite accessory types that are disallowed by this one being included. + var/list/disallows_accessories + /// Whether or not this accessory is transferred via DNA (ie. not a scar or tattoo) + var/is_heritable = FALSE + /// What category does this accessory fall under? + var/accessory_category + /// Whether or not this accessory should be drawn on the mob at all. + var/draw_accessory = TRUE + /// Bitflags indicating what grooming tools work on this accessory. + var/grooming_flags = GROOMABLE_NONE - var/do_colouration = 1 // Whether or not the accessory can be affected by colouration - var/blend = ICON_ADD - var/flags = 0 +/decl/sprite_accessory/proc/refresh_mob(var/mob/living/subject) + return /decl/sprite_accessory/proc/accessory_is_available(var/mob/owner, var/decl/species/species, var/decl/bodytype/bodytype) - if(!isnull(required_gender) && bodytype.associated_gender != required_gender) - return FALSE if(species) var/species_is_permitted = TRUE if(species_allowed) @@ -46,6 +85,10 @@ if(!species_is_permitted) return FALSE if(bodytype) + if(LAZYLEN(bodytypes_allowed) && !(bodytype.type in bodytypes_allowed)) + return FALSE + if(LAZYISIN(bodytypes_denied, bodytype.type)) + return FALSE if(!isnull(bodytype_categories_allowed) && !(bodytype.bodytype_category in bodytype_categories_allowed)) return FALSE if(!isnull(bodytype_categories_denied) && (bodytype.bodytype_category in bodytype_categories_denied)) @@ -54,18 +97,61 @@ return FALSE if(!isnull(body_flags_denied) && (body_flags_denied & bodytype.bodytype_flag)) return FALSE + if(requires_appearance_flags && !(bodytype.appearance_flags & requires_appearance_flags)) + return FALSE return TRUE -/decl/sprite_accessory/proc/get_validatable_icon_state() - return icon_state - /decl/sprite_accessory/validate() . = ..() + if(!ispath(accessory_category, /decl/sprite_accessory_category)) + . += "invalid sprite accessory category: [accessory_category || "null"]" if(!icon) . += "missing icon" else - var/actual_icon_state = get_validatable_icon_state() - if(!actual_icon_state) + if(!icon_state) . += "missing icon_state" - else if(!check_state_in_icon(actual_icon_state, icon)) - . += "missing icon state \"[actual_icon_state]\" in [icon]" + else if(!check_state_in_icon(icon_state, icon)) + . += "missing icon state \"[icon_state]\" in [icon]" + +/decl/sprite_accessory/proc/get_hidden_substitute() + return + +/decl/sprite_accessory/proc/is_hidden(var/obj/item/organ/external/organ) + if(!organ?.owner) + return FALSE + if(hidden_by_gear_slot) + var/obj/item/hiding = organ.owner.get_equipped_item(hidden_by_gear_slot) + if(!hiding) + return FALSE + return (hiding.flags_inv & hidden_by_gear_flag) + return FALSE + +/decl/sprite_accessory/proc/get_accessory_icon(var/obj/item/organ/external/organ) + return icon + +/decl/sprite_accessory/proc/can_be_groomed_with(obj/item/organ/external/organ, obj/item/grooming/tool) + if(istype(tool) && (grooming_flags & tool.grooming_flags)) + return GROOMING_RESULT_SUCCESS + return GROOMING_RESULT_FAILED + +/decl/sprite_accessory/proc/get_grooming_descriptor(grooming_result, obj/item/organ/external/organ, obj/item/grooming/tool) + return "mystery grooming target" + +/decl/sprite_accessory/proc/get_cached_accessory_icon(var/obj/item/organ/external/organ, var/color = COLOR_WHITE) + ASSERT(istext(color) && (length(color) == 7 || length(color) == 9)) + if(!icon_state) + return null + LAZYINITLIST(cached_icons[organ.bodytype]) + LAZYINITLIST(cached_icons[organ.bodytype][organ.organ_tag]) + var/icon/accessory_icon = cached_icons[organ.bodytype][organ.organ_tag][color] + if(!accessory_icon) + accessory_icon = icon(get_accessory_icon(organ), icon_state) // make a new one to avoid mutating the base + if(!accessory_icon) + cached_icons[organ.bodytype][organ.organ_tag][color] = null + return null + if(mask_to_bodypart) + accessory_icon.Blend(get_limb_mask_for(organ), ICON_MULTIPLY) + if(!isnull(color) && !isnull(color_blend)) + accessory_icon.Blend(color, color_blend) + cached_icons[organ.bodytype][organ.organ_tag][color] = accessory_icon + return accessory_icon diff --git a/code/modules/sprite_accessories/_accessory_category.dm b/code/modules/sprite_accessories/_accessory_category.dm new file mode 100644 index 00000000000..663699bf8f4 --- /dev/null +++ b/code/modules/sprite_accessories/_accessory_category.dm @@ -0,0 +1,28 @@ +/decl/sprite_accessory_category + decl_flags = DECL_FLAG_MANDATORY_UID + abstract_type = /decl/sprite_accessory_category + /// A name to display in preferences. + var/name + /// A base abstract accessory type for this category. + var/base_accessory_type + /// A maximum number of selections. Ignored if null. + var/max_selections + /// A default always-available type used as a fallback. + var/default_accessory + /// A default colour for the above. + var/default_accessory_color = COLOR_BLACK + /// Set to FALSE for categories where multiple selection is allowed (markings) + var/single_selection = TRUE + /// Set to TRUE to apply these markings as defaults when bodytype is set. + var/always_apply_defaults = FALSE + /// Whether the default accessories in this category are cleared when prefs are applied. + var/clear_in_pref_apply = FALSE + +/decl/sprite_accessory_category/validate() + . = ..() + if(!name) + . += "no name set" + if(!ispath(base_accessory_type, /decl/sprite_accessory)) + . += "invalid base accessory type: [base_accessory_type || "null"]" + if(single_selection && !default_accessory) + . += "single selection set but no default accessory set" diff --git a/code/modules/sprite_accessories/accessory_cosmetics.dm b/code/modules/sprite_accessories/accessory_cosmetics.dm new file mode 100644 index 00000000000..f3600048882 --- /dev/null +++ b/code/modules/sprite_accessories/accessory_cosmetics.dm @@ -0,0 +1,63 @@ +/decl/sprite_accessory_category/cosmetics + name = "Cosmetics" + default_accessory = /decl/sprite_accessory/cosmetics/none + base_accessory_type = /decl/sprite_accessory/cosmetics + uid = "acc_cat_cosmetics" + +/decl/sprite_accessory/cosmetics + icon = 'icons/mob/human_races/species/default_cosmetics.dmi' + body_parts = list(BP_HEAD) + color_blend = ICON_MULTIPLY + abstract_type = /decl/sprite_accessory/cosmetics + bodytypes_allowed = null + bodytypes_denied = null + species_allowed = null + subspecies_allowed = null + bodytype_categories_allowed = null + bodytype_categories_denied = null + body_flags_allowed = null + body_flags_denied = null + accessory_category = SAC_COSMETICS + +/decl/sprite_accessory/cosmetics/get_accessory_icon(obj/item/organ/external/organ) + if(!organ || QDELETED(organ)) + return icon + return organ.bodytype?.get_cosmetics_icon(src) + +/decl/sprite_accessory/cosmetics/refresh_mob(var/mob/living/subject) + if(istype(subject)) + subject.update_body() + +/decl/sprite_accessory/cosmetics/accessory_is_available(mob/owner, decl/species/species, decl/bodytype/bodytype) + . = ..() + if(.) + if(!bodytype) + bodytype = owner?.get_bodytype() + return !isnull(bodytype?.get_cosmetics_icon(src)) + +/decl/sprite_accessory/cosmetics/validate() + . = ..() + var/list/all_bodytypes = decls_repository.get_decls_of_type(/decl/bodytype) + for(var/bodytype_type in all_bodytypes) + var/decl/bodytype/bodytype = all_bodytypes[bodytype_type] + var/cosmetics_icon = bodytype.get_cosmetics_icon(src) + if(cosmetics_icon && !check_state_in_icon(icon_state, cosmetics_icon)) + . += "missing icon_state [icon_state] for bodytype [bodytype.type] in icon [bodytype.cosmetics_icon]" + +// Subtypes. +/decl/sprite_accessory/cosmetics/none + name = "No Cosmetics" + icon_state = "nothing" + draw_accessory = FALSE + grooming_flags = FALSE + uid = "acc_cosmetics_nothing" + +/decl/sprite_accessory/cosmetics/lipstick + name = "Lipstick" + icon_state = "lips" + uid = "acc_cosmetics_lips" + +/decl/sprite_accessory/cosmetics/eyeshadow + name = "Eyeshadow" + icon_state = "eyeshadow" + uid = "acc_cosmetics_eyeshadow" diff --git a/code/modules/sprite_accessories/_accessory_facial.dm b/code/modules/sprite_accessories/accessory_facial.dm similarity index 69% rename from code/modules/sprite_accessories/_accessory_facial.dm rename to code/modules/sprite_accessories/accessory_facial.dm index ea5338b8db0..1229e48831b 100644 --- a/code/modules/sprite_accessories/_accessory_facial.dm +++ b/code/modules/sprite_accessories/accessory_facial.dm @@ -1,29 +1,51 @@ -/* -/////////////////////////////////// -/ =---------------------------= / -/ == Facial Hair Definitions == / -/ =---------------------------= / -/////////////////////////////////// -*/ +/decl/sprite_accessory_category/facial_hair + name = "Facial Hair" + base_accessory_type = /decl/sprite_accessory/facial_hair + default_accessory = /decl/sprite_accessory/facial_hair/shaved + always_apply_defaults = TRUE + uid = "acc_cat_facial_hair" /decl/sprite_accessory/facial_hair - abstract_type = /decl/sprite_accessory/facial_hair - icon = 'icons/mob/human_races/species/human/facial.dmi' - -/decl/sprite_accessory/facial_hair/get_validatable_icon_state() - return "[icon_state]_s" + abstract_type = /decl/sprite_accessory/facial_hair + icon = 'icons/mob/human_races/species/human/facial.dmi' + hidden_by_gear_slot = slot_head_str + hidden_by_gear_flag = BLOCK_HEAD_HAIR + body_parts = list(BP_HEAD) + sprite_overlay_layer = FLOAT_LAYER + is_heritable = TRUE + accessory_category = SAC_FACIAL_HAIR + accessory_flags = HAIR_LOSS_VULNERABLE + grooming_flags = GROOMABLE_BRUSH | GROOMABLE_COMB + +/decl/sprite_accessory/facial_hair/get_grooming_descriptor(grooming_result, obj/item/organ/external/organ, obj/item/grooming/tool) + return grooming_result == GROOMING_RESULT_PARTIAL ? "chin and cheeks" : "facial hair" + +/decl/sprite_accessory/facial_hair/can_be_groomed_with(obj/item/organ/external/organ, obj/item/grooming/tool) + . = ..() + if(. == GROOMING_RESULT_SUCCESS && (accessory_flags & VERY_SHORT)) + return GROOMING_RESULT_PARTIAL + +/decl/sprite_accessory/facial_hair/get_hidden_substitute() + return GET_DECL(/decl/sprite_accessory/facial_hair/shaved) + +/decl/sprite_accessory/facial_hair/refresh_mob(var/mob/living/subject) + if(istype(subject)) + subject.update_hair() /decl/sprite_accessory/facial_hair/shaved - name = "Shaved" - icon_state = "bald" - required_gender = null - species_allowed = null - subspecies_allowed = null + name = "Shaved" + icon_state = "bald" + uid = "acc_fhair_shaved" + bodytypes_allowed = null + bodytypes_denied = null + species_allowed = null + subspecies_allowed = null bodytype_categories_allowed = null - bodytype_categories_denied = null - body_flags_allowed = null - body_flags_denied = null - uid = "acc_fhair_shaved" + bodytype_categories_denied = null + body_flags_allowed = null + body_flags_denied = null + draw_accessory = FALSE + grooming_flags = null /decl/sprite_accessory/facial_hair/watson name = "Watson Mustache" diff --git a/code/modules/sprite_accessories/accessory_frills.dm b/code/modules/sprite_accessories/accessory_frills.dm new file mode 100644 index 00000000000..b03ec96eeaf --- /dev/null +++ b/code/modules/sprite_accessories/accessory_frills.dm @@ -0,0 +1,30 @@ +/decl/sprite_accessory_category/frills + name = "Frills" + base_accessory_type = /decl/sprite_accessory/frills + default_accessory = /decl/sprite_accessory/frills/none + uid = "acc_cat_frills" + +/decl/sprite_accessory/frills + hidden_by_gear_slot = slot_head_str + hidden_by_gear_flag = BLOCK_HEAD_HAIR + body_parts = list(BP_HEAD) + sprite_overlay_layer = FLOAT_LAYER + is_heritable = TRUE + icon = 'icons/mob/human_races/species/default_frills.dmi' + accessory_category = SAC_FRILLS + abstract_type = /decl/sprite_accessory/frills + +/decl/sprite_accessory/frills/none + name = "No Frills" + icon_state = "none" + uid = "acc_frills_none" + bodytypes_allowed = null + bodytypes_denied = null + species_allowed = null + subspecies_allowed = null + bodytype_categories_allowed = null + bodytype_categories_denied = null + body_flags_allowed = null + body_flags_denied = null + draw_accessory = FALSE + grooming_flags = null diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/accessory_hair.dm similarity index 70% rename from code/modules/sprite_accessories/_accessory_hair.dm rename to code/modules/sprite_accessories/accessory_hair.dm index 0732fc0eb3c..764ac708920 100644 --- a/code/modules/sprite_accessories/_accessory_hair.dm +++ b/code/modules/sprite_accessories/accessory_hair.dm @@ -1,41 +1,65 @@ -/* -//////////////////////////// -/ =--------------------= / -/ == Hair Definitions == / -/ =--------------------= / -//////////////////////////// -*/ +/decl/sprite_accessory_category/hair + name = "Hair" + base_accessory_type = /decl/sprite_accessory/hair + default_accessory = /decl/sprite_accessory/hair/bald + always_apply_defaults = TRUE + uid = "acc_cat_hair" /decl/sprite_accessory/hair - abstract_type = /decl/sprite_accessory/hair - icon = 'icons/mob/human_races/species/human/hair.dmi' - -/decl/sprite_accessory/hair/get_validatable_icon_state() - return "[icon_state]_s" + abstract_type = /decl/sprite_accessory/hair + icon = 'icons/mob/human_races/species/human/hair.dmi' + hidden_by_gear_slot = slot_head_str + hidden_by_gear_flag = BLOCK_HEAD_HAIR + body_parts = list(BP_HEAD) + sprite_overlay_layer = FLOAT_LAYER + is_heritable = TRUE + accessory_category = SAC_HAIR + accessory_flags = HAIR_LOSS_VULNERABLE + grooming_flags = GROOMABLE_BRUSH | GROOMABLE_COMB + +/decl/sprite_accessory/hair/get_grooming_descriptor(grooming_result, obj/item/organ/external/organ, obj/item/grooming/tool) + return grooming_result == GROOMING_RESULT_PARTIAL ? "scalp" : "hair" + +/decl/sprite_accessory/hair/can_be_groomed_with(obj/item/organ/external/organ, obj/item/grooming/tool) + . = ..() + if(. == GROOMING_RESULT_SUCCESS && (accessory_flags & VERY_SHORT)) + return GROOMING_RESULT_PARTIAL + +/decl/sprite_accessory/hair/get_hidden_substitute() + if(accessory_flags & VERY_SHORT) + return src + return GET_DECL(/decl/sprite_accessory/hair/short) + +/decl/sprite_accessory/hair/refresh_mob(var/mob/living/subject) + if(istype(subject)) + subject.update_hair() /decl/sprite_accessory/hair/bald - name = "Bald" - icon_state = "bald" - flags = VERY_SHORT | HAIR_BALD - required_gender = null - species_allowed = null - subspecies_allowed = null + name = "Bald" + icon_state = "bald" + uid = "acc_hair_bald" + accessory_flags = VERY_SHORT | HAIR_BALD + bodytypes_allowed = null + bodytypes_denied = null + species_allowed = null + subspecies_allowed = null bodytype_categories_allowed = null - bodytype_categories_denied = null - body_flags_allowed = null - body_flags_denied = null - uid = "acc_hair_bald" + bodytype_categories_denied = null + body_flags_allowed = null + body_flags_denied = null + draw_accessory = FALSE + grooming_flags = null /decl/sprite_accessory/hair/short name = "Short Hair" // try to capatilize the names please~ icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_short" /decl/sprite_accessory/hair/twintail name = "Twintail" icon_state = "hair_twintail" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_twintail" /decl/sprite_accessory/hair/short2 @@ -46,43 +70,43 @@ /decl/sprite_accessory/hair/cut name = "Cut Hair" icon_state = "hair_c" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_cut" /decl/sprite_accessory/hair/flair name = "Flaired Hair" icon_state = "hair_flair" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_flair" /decl/sprite_accessory/hair/long name = "Shoulder-length Hair" icon_state = "hair_b" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_shoulder" /decl/sprite_accessory/hair/longer name = "Long Hair" icon_state = "hair_vlong" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_long" /decl/sprite_accessory/hair/longest name = "Very Long Hair" icon_state = "hair_longest" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_verylong" /decl/sprite_accessory/hair/longfringe name = "Long Fringe" icon_state = "hair_longfringe" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_longfringe" /decl/sprite_accessory/hair/longestalt name = "Longer Fringe" icon_state = "hair_vlongfringe" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_longestalt" /decl/sprite_accessory/hair/halfbang @@ -98,43 +122,43 @@ /decl/sprite_accessory/hair/ponytail1 name = "Ponytail 1" icon_state = "hair_ponytail" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail1" /decl/sprite_accessory/hair/ponytail2 name = "Ponytail 2" icon_state = "hair_pa" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail2" /decl/sprite_accessory/hair/ponytail3 name = "Ponytail 3" icon_state = "hair_ponytail3" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail3" /decl/sprite_accessory/hair/ponytail4 name = "Ponytail 4" icon_state = "hair_ponytail4" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail4" /decl/sprite_accessory/hair/ponytail5 name = "Ponytail 5" icon_state = "hair_ponytail5" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail5" /decl/sprite_accessory/hair/ponytail6 name = "Ponytail 6" icon_state = "hair_ponytail6" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ponytail6" /decl/sprite_accessory/hair/sideponytail name = "Side Ponytail" icon_state = "hair_stail" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_sideponytail" /decl/sprite_accessory/hair/parted @@ -150,7 +174,7 @@ /decl/sprite_accessory/hair/sleeze name = "Sleeze" icon_state = "hair_sleeze" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_sleeze" /decl/sprite_accessory/hair/quiff @@ -171,13 +195,13 @@ /decl/sprite_accessory/hair/bedhead3 name = "Bedhead 3" icon_state = "hair_bedheadv3" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_bedhead3" /decl/sprite_accessory/hair/beehive name = "Beehive" icon_state = "hair_beehive" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_beehive" /decl/sprite_accessory/hair/beehive2 @@ -188,19 +212,19 @@ /decl/sprite_accessory/hair/bobcurl name = "Bobcurl" icon_state = "hair_bobcurl" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_bobcurl" /decl/sprite_accessory/hair/bob name = "Bob" icon_state = "hair_bobcut" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_bob" /decl/sprite_accessory/hair/bobcutalt name = "Chin Length Bob" icon_state = "hair_bobcutalt" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_bobcutalt" /decl/sprite_accessory/hair/bowl @@ -211,13 +235,13 @@ /decl/sprite_accessory/hair/buzz name = "Buzzcut" icon_state = "hair_buzzcut" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_buzz" /decl/sprite_accessory/hair/crew name = "Crewcut" icon_state = "hair_crewcut" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_crew" /decl/sprite_accessory/hair/combover @@ -248,7 +272,7 @@ /decl/sprite_accessory/hair/curls name = "Curls" icon_state = "hair_curls" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_curls" /decl/sprite_accessory/hair/afro @@ -269,19 +293,19 @@ /decl/sprite_accessory/hair/rows name = "Rows" icon_state = "hair_rows1" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_rows" /decl/sprite_accessory/hair/rows2 name = "Rows 2" icon_state = "hair_rows2" - flags = VERY_SHORT | HAIR_TIEABLE + accessory_flags = VERY_SHORT | HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_rows2" /decl/sprite_accessory/hair/sargeant name = "Flat Top" icon_state = "hair_sargeant" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_flattop" /decl/sprite_accessory/hair/emo @@ -297,19 +321,19 @@ /decl/sprite_accessory/hair/longemo name = "Long Emo" icon_state = "hair_emolong" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_longemo" /decl/sprite_accessory/hair/shortovereye name = "Overeye Short" icon_state = "hair_shortovereye" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_overeye_short" /decl/sprite_accessory/hair/longovereye name = "Overeye Long" icon_state = "hair_longovereye" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_overeye_long" /decl/sprite_accessory/hair/flow @@ -320,7 +344,7 @@ /decl/sprite_accessory/hair/feather name = "Feather" icon_state = "hair_feather" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_feather" /decl/sprite_accessory/hair/hitop @@ -346,7 +370,7 @@ /decl/sprite_accessory/hair/gentle name = "Gentle" icon_state = "hair_gentle" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_gentle" /decl/sprite_accessory/hair/spiky @@ -362,67 +386,67 @@ /decl/sprite_accessory/hair/kagami name = "Pigtails" icon_state = "hair_kagami" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_kagami" /decl/sprite_accessory/hair/himecut name = "Hime Cut" icon_state = "hair_himecut" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_himecut" /decl/sprite_accessory/hair/shorthime name = "Short Hime Cut" icon_state = "hair_shorthime" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_shorthime" /decl/sprite_accessory/hair/grandebraid name = "Grande Braid" icon_state = "hair_grande" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_grande" /decl/sprite_accessory/hair/mbraid name = "Medium Braid" icon_state = "hair_shortbraid" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_mbraid" /decl/sprite_accessory/hair/braid2 name = "Long Braid" icon_state = "hair_hbraid" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_braid2" /decl/sprite_accessory/hair/odango name = "Odango" icon_state = "hair_odango" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_odango" /decl/sprite_accessory/hair/ombre name = "Ombre" icon_state = "hair_ombre" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ombre" /decl/sprite_accessory/hair/updo name = "Updo" icon_state = "hair_updo" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_updo" /decl/sprite_accessory/hair/skinhead name = "Skinhead" icon_state = "hair_skinhead" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_skinhead" /decl/sprite_accessory/hair/balding name = "Balding Hair" icon_state = "hair_e" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_balding" /decl/sprite_accessory/hair/familyman @@ -433,13 +457,13 @@ /decl/sprite_accessory/hair/mahdrills name = "Drillruru" icon_state = "hair_drillruru" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_drillruru" /decl/sprite_accessory/hair/fringetail name = "Fringetail" icon_state = "hair_fringetail" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_fringetail" /decl/sprite_accessory/hair/dandypomp @@ -450,7 +474,7 @@ /decl/sprite_accessory/hair/poofy name = "Poofy" icon_state = "hair_poofy" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_poofy" /decl/sprite_accessory/hair/crono @@ -481,7 +505,7 @@ /decl/sprite_accessory/hair/nitori name = "Nitori" icon_state = "hair_nitori" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_nitori" /decl/sprite_accessory/hair/joestar @@ -492,13 +516,13 @@ /decl/sprite_accessory/hair/volaju name = "Volaju" icon_state = "hair_volaju" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_volaju" /decl/sprite_accessory/hair/longeralt2 name = "Long Hair Alt 2" icon_state = "hair_longeralt2" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_longeralt2" /decl/sprite_accessory/hair/shortbangs @@ -509,157 +533,157 @@ /decl/sprite_accessory/hair/shavedbun name = "Shaved Bun" icon_state = "hair_shavedbun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_shavedbun" /decl/sprite_accessory/hair/halfshaved name = "Half-Shaved" icon_state = "hair_halfshaved" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_halfshaved" /decl/sprite_accessory/hair/halfshavedemo name = "Half-Shaved Emo" icon_state = "hair_halfshavedemo" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_halfshavedemo" /decl/sprite_accessory/hair/longsideemo name = "Long Side Emo" icon_state = "hair_longsideemo" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_longsideemo" /decl/sprite_accessory/hair/bun name = "Low Bun" icon_state = "hair_bun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_lowbun" /decl/sprite_accessory/hair/bun2 name = "High Bun" icon_state = "hair_bun2" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_highbun" /decl/sprite_accessory/hair/doublebun name = "Double-Bun" icon_state = "hair_doublebun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_doublebun" /decl/sprite_accessory/hair/lowfade name = "Low Fade" icon_state = "hair_lowfade" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_lowfade" /decl/sprite_accessory/hair/medfade name = "Medium Fade" icon_state = "hair_medfade" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_medfade" /decl/sprite_accessory/hair/highfade name = "High Fade" icon_state = "hair_highfade" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_highfade" /decl/sprite_accessory/hair/baldfade name = "Balding Fade" icon_state = "hair_baldfade" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_baldfade" /decl/sprite_accessory/hair/nofade name = "Regulation Cut" icon_state = "hair_nofade" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_nofade" /decl/sprite_accessory/hair/trimflat name = "Trimmed Flat Top" icon_state = "hair_trimflat" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_trimflat" /decl/sprite_accessory/hair/shaved name = "Shaved" icon_state = "hair_shaved" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_shaved" /decl/sprite_accessory/hair/trimmed name = "Trimmed" icon_state = "hair_trimmed" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_trimmed" /decl/sprite_accessory/hair/tightbun name = "Tight Bun" icon_state = "hair_tightbun" - flags = VERY_SHORT | HAIR_TIEABLE + accessory_flags = VERY_SHORT | HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_tightbun" /decl/sprite_accessory/hair/coffeehouse name = "Coffee House Cut" icon_state = "hair_coffeehouse" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_coffeehouse" /decl/sprite_accessory/hair/undercut name = "Undercut" icon_state = "hair_undercut" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_undercut" /decl/sprite_accessory/hair/partfade name = "Parted Fade" icon_state = "hair_shavedpart" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_partfade" /decl/sprite_accessory/hair/hightight name = "High and Tight" icon_state = "hair_hightight" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_hightight" /decl/sprite_accessory/hair/rowbun name = "Row Bun" icon_state = "hair_rowbun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_rowbun" /decl/sprite_accessory/hair/rowdualbraid name = "Row Dual Braid" icon_state = "hair_rowdualtail" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_rowdualbraid" /decl/sprite_accessory/hair/rowbraid name = "Row Braid" icon_state = "hair_rowbraid" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_rowbraid" /decl/sprite_accessory/hair/regulationmohawk name = "Regulation Mohawk" icon_state = "hair_shavedmohawk" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_regulationmohawk" /decl/sprite_accessory/hair/topknot name = "Topknot" icon_state = "hair_topknot" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_topknot" /decl/sprite_accessory/hair/ronin name = "Ronin" icon_state = "hair_ronin" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_ronin" /decl/sprite_accessory/hair/bowlcut2 @@ -670,25 +694,25 @@ /decl/sprite_accessory/hair/thinning name = "Thinning" icon_state = "hair_thinning" - flags = VERY_SHORT + accessory_flags = VERY_SHORT uid = "acc_hair_thinning" /decl/sprite_accessory/hair/thinningfront name = "Thinning Front" icon_state = "hair_thinningfront" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_thinningfront" /decl/sprite_accessory/hair/thinningback name = "Thinning Back" icon_state = "hair_thinningrear" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_thinningback" /decl/sprite_accessory/hair/manbun name = "Manbun" icon_state = "hair_manbun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_manbun" /decl/sprite_accessory/hair/leftsidecut @@ -709,7 +733,7 @@ /decl/sprite_accessory/hair/messyhair name = "Messy" icon_state = "hair_messyhair" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_messyhair" /decl/sprite_accessory/hair/averagejoe @@ -740,19 +764,19 @@ /decl/sprite_accessory/hair/amazon name = "Amazon" icon_state = "hair_amazon" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_amazon" /decl/sprite_accessory/hair/straightlong name = "Straight Long" icon_state = "hair_straightlong" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_straightlong" /decl/sprite_accessory/hair/marysue name = "Mary Sue" icon_state = "hair_marysue" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_marysue" /decl/sprite_accessory/hair/messyhair2 @@ -768,7 +792,7 @@ /decl/sprite_accessory/hair/sideundercut name = "Side Undercut" icon_state = "hair_sideundercut" - flags = VERY_SHORT + accessory_flags = VERY_SHORT | HAIR_LOSS_VULNERABLE uid = "acc_hair_sideundercut" /decl/sprite_accessory/hair/bighawk @@ -779,23 +803,23 @@ /decl/sprite_accessory/hair/donutbun name = "Donut Bun" icon_state = "hair_donutbun" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_donutbun" /decl/sprite_accessory/hair/gentle2 name = "Gentle 2" icon_state = "hair_gentle2" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_gentle2" /decl/sprite_accessory/hair/gentle2long name = "Gentle 2 Long" icon_state = "hair_gentle2long" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_gentle2long" /decl/sprite_accessory/hair/trimrsidecut name = "Trimmed Right Sidecut" icon_state = "hair_rightside_trim" - flags = HAIR_TIEABLE + accessory_flags = HAIR_TIEABLE | HAIR_LOSS_VULNERABLE uid = "acc_hair_trimrightsidecut" diff --git a/code/modules/sprite_accessories/accessory_horns.dm b/code/modules/sprite_accessories/accessory_horns.dm new file mode 100644 index 00000000000..59e7b0ff6a2 --- /dev/null +++ b/code/modules/sprite_accessories/accessory_horns.dm @@ -0,0 +1,34 @@ +/decl/sprite_accessory_category/horns + name = "Horns" + base_accessory_type = /decl/sprite_accessory/horns + default_accessory = /decl/sprite_accessory/horns/none + uid = "acc_cat_horns" + +/decl/sprite_accessory/horns + hidden_by_gear_slot = slot_head_str + hidden_by_gear_flag = BLOCK_HEAD_HAIR + body_parts = list(BP_HEAD) + sprite_overlay_layer = FLOAT_LAYER + is_heritable = TRUE + icon = 'icons/mob/human_races/species/default_horns.dmi' + accessory_category = SAC_HORNS + abstract_type = /decl/sprite_accessory/horns + grooming_flags = GROOMABLE_FILE + +/decl/sprite_accessory/horns/get_grooming_descriptor(grooming_result, obj/item/organ/external/organ, obj/item/grooming/tool) + return grooming_result == GROOMING_RESULT_PARTIAL ? "nubs" : "horns" + +/decl/sprite_accessory/horns/none + name = "No Horns" + icon_state = "none" + uid = "acc_horns_none" + bodytypes_allowed = null + bodytypes_denied = null + species_allowed = null + subspecies_allowed = null + bodytype_categories_allowed = null + bodytype_categories_denied = null + body_flags_allowed = null + body_flags_denied = null + draw_accessory = FALSE + grooming_flags = null diff --git a/code/modules/sprite_accessories/_accessory_markings.dm b/code/modules/sprite_accessories/accessory_markings.dm similarity index 66% rename from code/modules/sprite_accessories/_accessory_markings.dm rename to code/modules/sprite_accessories/accessory_markings.dm index 99d73ccab36..d37ab9e6acb 100644 --- a/code/modules/sprite_accessories/_accessory_markings.dm +++ b/code/modules/sprite_accessories/accessory_markings.dm @@ -1,33 +1,19 @@ -//body markings +/decl/sprite_accessory_category/markings + name = "Markings" + single_selection = FALSE + base_accessory_type = /decl/sprite_accessory/marking + uid = "acc_cat_markings" + clear_in_pref_apply = TRUE + /decl/sprite_accessory/marking - icon = 'icons/mob/human_races/species/default_markings.dmi' - do_colouration = 1 //Almost all of them have it, COLOR_ADD - abstract_type = /decl/sprite_accessory/marking - //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, - //like IPC optics overlay stuff. - var/layer_blend = ICON_OVERLAY - var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines - //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN,BP_HEAD - var/draw_target = MARKING_TARGET_SKIN - var/list/disallows = list() //A list of other marking types to ban from adding when this marking is already added - var/list/icons = list() - var/mask_to_bodypart = TRUE - -/decl/sprite_accessory/marking/proc/get_cached_marking_icon(var/decl/bodytype/bodytype, var/bodypart, var/color = COLOR_WHITE) - LAZYINITLIST(icons[bodytype]) - LAZYINITLIST(icons[bodytype][bodypart]) - if(!icons[bodytype][bodypart][color]) - var/icon/marking_icon = icon(icon, icon_state) // make a new one to avoid mutating the base - if(mask_to_bodypart) - marking_icon.Blend(get_limb_mask_for(bodytype, bodypart), ICON_MULTIPLY) - marking_icon.Blend(color, blend) - icons[bodytype][bodypart][color] = marking_icon - return icons[bodytype][bodypart][color] - -/decl/sprite_accessory/marking/validate() - . = ..() - if(!check_state_in_icon(icon_state, icon)) - . += "missing icon state \"[icon_state]\" in [icon]" + icon = 'icons/mob/human_races/species/default_markings.dmi' + abstract_type = /decl/sprite_accessory/marking + mask_to_bodypart = TRUE + accessory_category = SAC_MARKINGS + +/decl/sprite_accessory/marking/refresh_mob(var/mob/living/subject) + if(istype(subject)) + subject.update_body() /decl/sprite_accessory/marking/tat_hive name = "Tattoo (Hive, Back)" diff --git a/code/modules/status_conditions/_status_markers.dm b/code/modules/status_conditions/_status_markers.dm index 830aa5581b2..9731e1881e6 100644 --- a/code/modules/status_conditions/_status_markers.dm +++ b/code/modules/status_conditions/_status_markers.dm @@ -67,11 +67,11 @@ if(status.status_marker_icon && status.status_marker_state) var/obj/status_marker/marker = new(null, status) - add_vis_contents(mob_image, marker) + mob_image.add_vis_contents(marker) LAZYSET(markers, status, marker) marker = new(null, status) - add_vis_contents(mob_image_personal, marker) + mob_image_personal.add_vis_contents(marker) LAZYSET(markers_personal, status, marker) global.status_marker_holders += src @@ -88,10 +88,10 @@ C.images -= mob_image_personal global.status_marker_holders -= src if(mob_image) - clear_vis_contents(mob_image) + mob_image.clear_vis_contents() mob_image = null if(mob_image_personal) - clear_vis_contents(mob_image_personal) + mob_image_personal.clear_vis_contents() mob_image_personal = null for(var/key in markers) qdel(markers[key]) diff --git a/code/modules/status_conditions/status_sleeping.dm b/code/modules/status_conditions/status_sleeping.dm index d70e8c3b8b5..7c64e3b2083 100644 --- a/code/modules/status_conditions/status_sleeping.dm +++ b/code/modules/status_conditions/status_sleeping.dm @@ -9,14 +9,10 @@ . = ..() victim.facing_dir = null victim.UpdateLyingBuckledAndVerbStatus() - if(ishuman(victim)) - var/mob/living/carbon/human/H = victim - H.handle_dreams() - H.species.handle_sleeping(H) + victim.handle_dreams() + victim.get_species()?.handle_sleeping(victim) /decl/status_condition/sleeping/handle_status(mob/living/victim, var/amount) . = ..() - if(ishuman(victim)) - var/mob/living/carbon/human/H = victim - H.handle_dreams() - H.species.handle_sleeping(H) + victim.handle_dreams() + victim.get_species()?.handle_sleeping(victim) diff --git a/code/modules/stressors/stressor_definitions.dm b/code/modules/stressors/stressor_definitions.dm index 3b7377905cb..747f39de3c3 100644 --- a/code/modules/stressors/stressor_definitions.dm +++ b/code/modules/stressors/stressor_definitions.dm @@ -3,6 +3,11 @@ desc = "well fed." stress_value = -(STRESSOR_DEGREE_MILD) +/datum/stressor/well_groomed + name = "Well Groomed" + desc = "neat and tidy." + stress_value = -(STRESSOR_DEGREE_MILD) + /datum/stressor/hungry name = "Hungry" desc = "hungry." diff --git a/code/modules/submaps/submap_archetype.dm b/code/modules/submaps/submap_archetype.dm index 738ebf0512a..11bb3d6f425 100644 --- a/code/modules/submaps/submap_archetype.dm +++ b/code/modules/submaps/submap_archetype.dm @@ -12,13 +12,6 @@ /// Whether the job preferences for this submap archetype are collapsed by default. var/default_to_hidden = TRUE -/decl/submap_archetype/Initialize() - if(islist(whitelisted_species) && !length(whitelisted_species)) - whitelisted_species |= SSmodpacks.default_submap_whitelisted_species - if(islist(blacklisted_species) && !length(blacklisted_species)) - blacklisted_species |= SSmodpacks.default_submap_blacklisted_species - . = ..() - /decl/submap_archetype/validate() . = ..() if(!descriptor) diff --git a/code/modules/submaps/submap_join.dm b/code/modules/submaps/submap_join.dm index 997f6f89de2..73ef894405f 100644 --- a/code/modules/submaps/submap_join.dm +++ b/code/modules/submaps/submap_join.dm @@ -79,7 +79,7 @@ var/list/spawn_in_storage = SSjobs.equip_custom_loadout(character, job) if(spawn_in_storage) for(var/decl/loadout_option/G in spawn_in_storage) - G.spawn_in_storage_or_drop(user_human, user_human.client.prefs.Gear()[G.name]) + G.spawn_in_storage_or_drop(user_human, user_human.client.prefs.Gear()[G.uid]) SScustomitems.equip_custom_items(user_human) character.job = job.title diff --git a/code/modules/submaps/submap_landmark.dm b/code/modules/submaps/submap_landmark.dm index 65cf96aa48e..7bf42c3fec0 100644 --- a/code/modules/submaps/submap_landmark.dm +++ b/code/modules/submaps/submap_landmark.dm @@ -1,10 +1,12 @@ /obj/abstract/submap_landmark - icon = 'icons/misc/mark.dmi' - invisibility = INVISIBILITY_MAXIMUM - anchored = TRUE - simulated = FALSE - density = FALSE - opacity = FALSE + icon = 'icons/misc/mark.dmi' + invisibility = INVISIBILITY_MAXIMUM + anchored = TRUE + simulated = FALSE + density = FALSE + opacity = FALSE + abstract_type = /obj/abstract/submap_landmark + is_spawnable_type = FALSE /obj/abstract/submap_landmark/joinable_submap icon_state = "x4" diff --git a/code/modules/supermatter/setup_supermatter.dm b/code/modules/supermatter/setup_supermatter.dm index e7dc912abb4..4af1f8aa34c 100644 --- a/code/modules/supermatter/setup_supermatter.dm +++ b/code/modules/supermatter/setup_supermatter.dm @@ -105,7 +105,7 @@ var/global/list/engine_setup_markers = list() invisibility = INVISIBILITY_ABSTRACT anchored = TRUE density = FALSE - icon = 'icons/mob/screen1.dmi' + icon = 'icons/effects/markers.dmi' icon_state = "x3" /obj/effect/engine_setup/Initialize() diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index dfa03826dc4..cdf3a4de4d4 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -202,7 +202,7 @@ var/global/list/supermatter_delam_accent_sounds = list( uid = gl_uid++ soundloop = new(list(src), TRUE) update_icon() - add_filter("outline",1,list(type = "drop_shadow", size = 0, color = COLOR_WHITE, x = 0, y = 0)) + add_filter("outline", 1, list(type = "drop_shadow", size = 0, color = COLOR_WHITE, x = 0, y = 0)) /obj/machinery/power/supermatter/Destroy() . = ..() @@ -485,7 +485,7 @@ var/global/list/supermatter_delam_accent_sounds = list( else damage_archived = damage - damage = max(0, damage + clamp(-damage_rate_limit, (removed.temperature - critical_temperature) / 150, damage_inc_limit)) + damage = max(0, damage + clamp((removed.temperature - critical_temperature) / 150, -damage_rate_limit, damage_inc_limit)) //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure @@ -518,7 +518,7 @@ var/global/list/supermatter_delam_accent_sounds = list( visible_message("[src]: Releasing additional [round((heat_capacity_new - heat_capacity)*removed.temperature)] W with exhaust gasses.") removed.add_thermal_energy(thermal_power) - removed.temperature = clamp(0, removed.temperature, 10000) + removed.temperature = clamp(removed.temperature, 0, 10000) env.merge(removed) @@ -556,13 +556,13 @@ var/global/list/supermatter_delam_accent_sounds = list( if(damage_animation) return if(!get_filter("rays")) - add_filter("rays",1,list(type="rays", size = 64, color = emergency_color, factor = 0.6, density = 12)) + add_filter("rays", 1 ,list(type = "rays", size = 64, color = emergency_color, factor = 0.6, density = 12)) animate_filter("rays", list(time = 10 SECONDS, offset = 10, loop=-1)) animate(time = 10 SECONDS, loop=-1) animate_filter("rays",list(time = 2 SECONDS, size = 80, loop=-1, flags = ANIMATION_PARALLEL)) animate(time = 2 SECONDS, size = 10, loop=-1, flags = ANIMATION_PARALLEL) - addtimer(CALLBACK(src, .proc/finish_damage_animation), 12 SECONDS) + addtimer(CALLBACK(src, PROC_REF(finish_damage_animation)), 12 SECONDS) /obj/machinery/power/supermatter/proc/finish_damage_animation() damage_animation = FALSE diff --git a/code/modules/surgery/crystal.dm b/code/modules/surgery/crystal.dm index d9899a24ff6..b607c915c26 100644 --- a/code/modules/surgery/crystal.dm +++ b/code/modules/surgery/crystal.dm @@ -1,7 +1,7 @@ /decl/surgery_step/generic/cut_open/crystal name = "Drill keyhole incision" description = "This procedure drills a keyhold incision into crystalline limbs to allow for delicate internal work." - allowed_tools = list(TOOL_DRILL = 100) + allowed_tools = list(TOOL_SURGICAL_DRILL = 100) fail_string = "cracking" access_string = "a neat hole" surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_FLESH @@ -37,12 +37,12 @@ /decl/surgery_step/internal/detach_organ/crystal name = "Detach crystalline internal organ" description = "This procedure severs a crystalline internal organ, allowing it to be removed." - allowed_tools = list(TOOL_DRILL = 100) + allowed_tools = list(TOOL_SURGICAL_DRILL = 100) surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT | SURGERY_NO_FLESH /decl/surgery_step/internal/attach_organ/crystal name = "Attach crystalline internal organ" - description = "This procedure reattaches a previously detached crystalline internal organ." + description = "This procedure attaches a detached crystalline internal organ." allowed_tools = list(/obj/item/stack/medical/resin = 100) surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT | SURGERY_NO_FLESH diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 4f6c83bee51..20a0fd66fce 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -285,7 +285,7 @@ user.visible_message( SPAN_DANGER("\The [user] manages to get \the [tool] stuck in \the [target]'s [affected.name]!"), \ SPAN_DANGER("You manage to get \the [tool] stuck in \the [target]'s [affected.name]!")) - affected.embed(tool, affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)) + affected.embed_in_organ(tool, affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)) else user.visible_message( SPAN_WARNING("\The [user] slips, mangling \the [target]'s [affected.name] with \the [tool]."), \ diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 9873cdec09f..1b8ef1751a0 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -27,7 +27,7 @@ /decl/surgery_step/cavity/make_space name = "Hollow out cavity" description = "This procedure is used to prepare a patient to have something large implanted in their body." - allowed_tools = list(TOOL_DRILL = 100) + allowed_tools = list(TOOL_SURGICAL_DRILL = 100) min_duration = 60 max_duration = 80 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 71a67326c50..d51f538ac2a 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -128,7 +128,7 @@ name = "Connect limb" description = "This procedure is used to reconnect a replaced severed limb." allowed_tools = list( - TOOL_HEMOSTAT = 100, + TOOL_SUTURES = 100, TOOL_CABLECOIL = 75 ) can_infect = 1 @@ -145,15 +145,15 @@ /decl/surgery_step/limb/connect/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You start connecting tendons and muscle in [target]'s [E.amputation_point].") + user.visible_message("[user] starts reattaching tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You start reattaching tendons and muscle in [target]'s [E.amputation_point].") ..() /decl/surgery_step/limb/connect/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(target, target_zone) var/obj/item/organ/external/P = GET_EXTERNAL_ORGAN(target, E.parent_organ) - user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") + user.visible_message("[user] has reattached tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You have reattached tendons and muscles in [target]'s [E.amputation_point] with [tool].") //This time we call add_organ but we want it to install in a non detached state target.add_organ(E, P, FALSE, TRUE, FALSE) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 5ee4834aa70..94b63369dd3 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -190,19 +190,12 @@ /decl/surgery_step/internal/remove_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) user.visible_message("\The [user] has removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].", \ "You have removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") - // Extract the organ! var/obj/item/organ/O = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) if(istype(O) && istype(affected)) //Now call remove again with detach = FALSE so we fully remove it target.remove_organ(O, TRUE, FALSE) - - // Just in case somehow the organ we're extracting from an organic is an MMI - if(istype(O, /obj/item/organ/internal/mmi_holder)) - var/obj/item/organ/internal/mmi_holder/brain = O - brain.transfer_and_delete() - log_warning("Organ removal surgery on '[target]' returned a mmi_holder '[O]' instead of a mmi!!") ..() /decl/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) @@ -228,7 +221,7 @@ /decl/surgery_step/internal/replace_organ/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool) var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, user.get_target_zone()) - if(BP_IS_PROSTHETIC(O) || istype(O, /obj/item/organ/internal/augment)) + if(BP_IS_PROSTHETIC(O)) if(BP_IS_PROSTHETIC(affected)) return SURGERY_SKILLS_ROBOTIC else @@ -237,44 +230,59 @@ return ..() /decl/surgery_step/internal/replace_organ/pre_surgery_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - . = FALSE + var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(istype(O) && istype(affected)) - if(BP_IS_CRYSTAL(O) && !BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("You cannot install a crystalline organ into a non-crystalline bodypart.")) - else if(!BP_IS_CRYSTAL(O) && BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("You cannot install a non-crystalline organ into a crystalline bodypart.")) - else if(BP_IS_PROSTHETIC(affected) && !BP_IS_PROSTHETIC(O)) - to_chat(user, SPAN_WARNING("You cannot install a naked organ into a robotic body.")) - else if(!target.get_bodytype()) - CRASH("Target ([target]) of surgery [type] has no bodytype!") - else - var/decl/pronouns/G = O.get_pronouns() - if(O.organ_tag == BP_POSIBRAIN && !target.should_have_organ(BP_POSIBRAIN)) - to_chat(user, SPAN_WARNING("There's no place in [target] to fit \the [O.organ_tag].")) - else if(O.damage > (O.max_damage * 0.75)) - to_chat(user, SPAN_WARNING("\The [O.name] [G.is] in no state to be transplanted.")) - else if(O.w_class > affected.cavity_max_w_class) - to_chat(user, SPAN_WARNING("\The [O.name] [G.is] too big for [affected.cavity_name] cavity!")) - else - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, O.organ_tag) - if(I && (I.parent_organ == affected.organ_tag)) - to_chat(user, SPAN_WARNING("\The [target] already has \a [O.name].")) - else - . = TRUE + if(!istype(O) || !istype(affected)) + return FALSE + + if(BP_IS_CRYSTAL(O) && !BP_IS_CRYSTAL(affected)) + to_chat(user, SPAN_WARNING("You cannot install a crystalline organ into a non-crystalline bodypart.")) + return FALSE + + if(!BP_IS_CRYSTAL(O) && BP_IS_CRYSTAL(affected)) + to_chat(user, SPAN_WARNING("You cannot install a non-crystalline organ into a crystalline bodypart.")) + return FALSE + + if(BP_IS_PROSTHETIC(affected) && !BP_IS_PROSTHETIC(O)) + to_chat(user, SPAN_WARNING("You cannot install a naked organ into a robotic body.")) + return FALSE + + if(O.parent_organ != affected.organ_tag) + to_chat(user, SPAN_WARNING("\The [O] cannot be installed in \the [affected].")) + return FALSE + + if(!target.get_bodytype()) + PRINT_STACK_TRACE("Target ([target]) of surgery [type] has no bodytype!") + return FALSE + + var/decl/pronouns/G = O.get_pronouns() + if(O.damage > (O.max_damage * 0.75)) + to_chat(user, SPAN_WARNING("\The [O.name] [G.is] in no state to be transplanted.")) + return FALSE + + if(O.w_class > affected.cavity_max_w_class) + to_chat(user, SPAN_WARNING("\The [O.name] [G.is] too big for [affected.cavity_name] cavity!")) + return FALSE + + var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, O.organ_tag) + if(I && (I.parent_organ == affected.organ_tag)) + to_chat(user, SPAN_WARNING("\The [target] already has \a [O.name].")) + return FALSE + + return TRUE /decl/surgery_step/internal/replace_organ/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message("[user] starts [robotic_surgery ? "reinstalling" : "transplanting"] \the [tool] into [target]'s [affected.name].", \ - "You start [robotic_surgery ? "reinstalling" : "transplanting"] \the [tool] into [target]'s [affected.name].") + user.visible_message("[user] starts [robotic_surgery ? "installing" : "transplanting"] \the [tool] into [target]'s [affected.name].", \ + "You start [robotic_surgery ? "installing" : "transplanting"] \the [tool] into [target]'s [affected.name].") target.custom_pain("Someone's rooting around in your [affected.name]!",100,affecting = affected) ..() /decl/surgery_step/internal/replace_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message("\The [user] has [robotic_surgery ? "reinstalled" : "transplanted"] \the [tool] into [target]'s [affected.name].", \ - "You have [robotic_surgery ? "reinstalled" : "transplanted"] \the [tool] into [target]'s [affected.name].") + user.visible_message("\The [user] has [robotic_surgery ? "installed" : "transplanted"] \the [tool] into [target]'s [affected.name].", \ + "You have [robotic_surgery ? "installed" : "transplanted"] \the [tool] into [target]'s [affected.name].") var/obj/item/organ/O = tool if(istype(O) && user.try_unequip(O, target)) //Place the organ but don't attach it yet @@ -299,7 +307,7 @@ ////////////////////////////////////////////////////////////////// /decl/surgery_step/internal/attach_organ name = "Attach internal organ" - description = "This procedure reattaches a replaced internal organ." + description = "This procedure attaches a replaced internal organ." allowed_tools = list( TOOL_SUTURES = 100, TOOL_CABLECOIL = 75 @@ -325,8 +333,8 @@ var/list/attachable_organs var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - for(var/obj/item/organ/I in affected.implants) - if(I && (I.status & ORGAN_CUT_AWAY)) + for(var/obj/item/organ/I in (affected.implants|affected.internal_organs)) + if(I.status & ORGAN_CUT_AWAY) var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state) radial_button.name = "Attach \the [I.name]" LAZYSET(attachable_organs, I, radial_button) @@ -371,8 +379,8 @@ /decl/surgery_step/internal/attach_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/I = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) - user.visible_message("[user] has reattached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ - "You have reattached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") + user.visible_message("[user] has attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ + "You have attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) if(istype(I) && I.parent_organ == target_zone && affected && (I in affected.implants)) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index e972107b4b2..0ca85baec58 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -1,4 +1,4 @@ -//Procedures in this file: Robotic surgery steps, organ removal, replacement. MMI insertion, synthetic organ repair. +//Procedures in this file: Robotic surgery steps, organ removal, replacement, synthetic organ repair. ////////////////////////////////////////////////////////////////// // ROBOTIC SURGERY // ////////////////////////////////////////////////////////////////// @@ -434,7 +434,7 @@ var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) if(I && istype(I) && istype(affected)) - target.remove_organ(I, detach = TRUE) + target.remove_organ(I, drop_organ = FALSE, detach = TRUE) ..() /decl/surgery_step/robotics/detach_organ_robotic/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) @@ -447,7 +447,7 @@ ////////////////////////////////////////////////////////////////// /decl/surgery_step/robotics/attach_organ_robotic name = "Reattach prosthetic organ" - description = "This procedure reattaches a decoupled robotic internal organ." + description = "This procedure attaches a decoupled robotic internal organ." allowed_tools = list( TOOL_SCREWDRIVER = 100, ) @@ -478,8 +478,8 @@ ..() /decl/surgery_step/robotics/attach_organ_robotic/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - user.visible_message("[user] has reattached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ - "You have reattached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") + user.visible_message("[user] has attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ + "You have attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) var/current_organ = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) @@ -494,73 +494,6 @@ "Your hand slips, unseating \the [tool].") ..() -////////////////////////////////////////////////////////////////// -// mmi installation surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/install_mmi - name = "Install MMI" - description = "This procedure installs an MMI within a prosthetic organ." - allowed_tools = list( - /obj/item/mmi = 100 - ) - min_duration = 60 - max_duration = 80 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/robotics/install_mmi/pre_surgery_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/mmi/M = tool - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(affected && istype(M)) - if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD) - to_chat(user, SPAN_WARNING("That brain is not usable.")) - else if(BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("The crystalline interior of \the [affected] is incompatible with \the [M].")) - else if(!target.isSynthetic()) - to_chat(user, SPAN_WARNING("You cannot install a computer brain into a meat body.")) - else if(!target.should_have_organ(BP_BRAIN)) - var/decl/species/species = target.get_species() - to_chat(user, SPAN_WARNING("You're pretty sure [species ? "[species.name_plural] don't" : "\the [target] doesn't"] normally have a brain.")) - else if(target.has_brain()) - to_chat(user, SPAN_WARNING("Your subject already has a brain.")) - else - return TRUE - return FALSE - -/decl/surgery_step/robotics/install_mmi/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && target_zone == BP_HEAD) - return affected - -/decl/surgery_step/robotics/install_mmi/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \ - "You start installing \the [tool] into [target]'s [affected.name].") - ..() - -/decl/surgery_step/robotics/install_mmi/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - if(!user.try_unequip(tool) || !ishuman(target)) - return - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message("[user] has installed \the [tool] into [target]'s [affected.name].", \ - "You have installed \the [tool] into [target]'s [affected.name].") - - var/obj/item/mmi/M = tool - var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) - var/mob/living/carbon/human/H = target - H.add_organ(holder, affected, TRUE) - tool.forceMove(holder) - holder.stored_mmi = tool - holder.update_from_mmi() - - if(M.brainmob && M.brainmob.mind) - M.brainmob.mind.transfer_to(target) - ..() - -/decl/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips.", \ - "Your hand slips.") - ..() - /decl/surgery_step/internal/remove_organ/robotic name = "Remove robotic component" description = "This procedure removes a robotic component." @@ -573,54 +506,3 @@ can_infect = 0 robotic_surgery = TRUE surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/remove_mmi - name = "Remove MMI" - description = "This procedure removes an MMI from a prosthetic organ." - min_duration = 60 - max_duration = 80 - allowed_tools = list( - TOOL_HEMOSTAT = 100, - TOOL_WIRECUTTERS = 75, - ) - can_infect = 0 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/remove_mmi/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool) - return SURGERY_SKILLS_ROBOTIC - -/decl/surgery_step/remove_mmi/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (locate(/obj/item/mmi) in affected.implants)) - return affected - -/decl/surgery_step/remove_mmi/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message( \ - "\The [user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1,affecting = affected) - ..() - -/decl/surgery_step/remove_mmi/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(affected) - var/obj/item/mmi/mmi = locate() in affected.implants - if(affected && mmi) - user.visible_message( \ - SPAN_NOTICE("\The [user] removes \the [mmi] from \the [target]'s [affected.name] with \the [tool]."), \ - SPAN_NOTICE("You remove \the [mmi] from \the [target]'s [affected.name] with \the [tool].")) - target.remove_implant(mmi, TRUE, affected) - else - user.visible_message( \ - SPAN_NOTICE("\The [user] could not find anything inside [target]'s [affected.name]."), \ - SPAN_NOTICE("You could not find anything inside [target]'s [affected.name].")) - ..() - -/decl/surgery_step/remove_mmi/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - user.visible_message( \ - SPAN_WARNING("\The [user]'s hand slips, damaging \the [target]'s [affected.name] with \the [tool]!"), \ - SPAN_WARNING("Your hand slips, damaging \the [target]'s [affected.name] with \the [tool]!")) - affected.take_external_damage(3, 0, used_weapon = tool) - ..() diff --git a/code/modules/synthesized_instruments/event_manager.dm b/code/modules/synthesized_instruments/event_manager.dm index 8ca067e6716..182ab68b3b0 100644 --- a/code/modules/synthesized_instruments/event_manager.dm +++ b/code/modules/synthesized_instruments/event_manager.dm @@ -68,7 +68,7 @@ if (active) return 0 src.active = 1 - addtimer(CALLBACK(src, .proc/handle_events), 0) + addtimer(CALLBACK(src, PROC_REF(handle_events)), 0) /datum/musical_event_manager/proc/deactivate() if (src.kill_loop) return 0 diff --git a/code/modules/synthesized_instruments/song.dm b/code/modules/synthesized_instruments/song.dm index f24bdf289f1..b9afb626984 100644 --- a/code/modules/synthesized_instruments/song.dm +++ b/code/modules/synthesized_instruments/song.dm @@ -48,7 +48,7 @@ var/note_num = delta1+delta2+global.musical_config.nn2no[note] if (note_num < 0 || note_num > 127) - CRASH("play_synthesized note failed because of 0..127 condition, [note], [acc], [oct]") + CRASH("play_synthesized note failed because of 0-127 condition, [note], [acc], [oct]") var/datum/sample_pair/pair = src.instrument_data.sample_map[global.musical_config.n2t(note_num)] #define Q 0.083 // 1/12 @@ -191,7 +191,7 @@ var/list/allowed_suff = list("b", "n", "#", "s") var/list/note_off_delta = list("a"=91, "b"=91, "c"=98, "d"=98, "e"=98, "f"=98, "g"=98) var/list/lines_copy = src.lines.Copy() - addtimer(CALLBACK(src, .proc/play_lines, user, allowed_suff, note_off_delta, lines_copy), 0) + addtimer(CALLBACK(src, PROC_REF(play_lines), user, allowed_suff, note_off_delta, lines_copy), 0) #undef CP #undef IS_DIGIT diff --git a/code/modules/synthesized_instruments/sound_player.dm b/code/modules/synthesized_instruments/sound_player.dm index 2224721e424..20df81d5456 100644 --- a/code/modules/synthesized_instruments/sound_player.dm +++ b/code/modules/synthesized_instruments/sound_player.dm @@ -26,7 +26,7 @@ src.actual_instrument = where src.echo = global.musical_config.echo_default.Copy() src.env = global.musical_config.env_default.Copy() - src.proxy_listener = new(src.actual_instrument, /datum/sound_player/proc/on_turf_entered_relay, /datum/sound_player/proc/on_turfs_changed_relay, range, proc_owner = src) + src.proxy_listener = new(src.actual_instrument, TYPE_PROC_REF(/datum/sound_player, on_turf_entered_relay), TYPE_PROC_REF(/datum/sound_player, on_turfs_changed_relay), range, proc_owner = src) proxy_listener.register_turfs() /datum/sound_player/Destroy() diff --git a/code/modules/synthesized_instruments/sound_token.dm b/code/modules/synthesized_instruments/sound_token.dm index 3de8c409edf..a495fe3dd3c 100644 --- a/code/modules/synthesized_instruments/sound_token.dm +++ b/code/modules/synthesized_instruments/sound_token.dm @@ -32,7 +32,7 @@ listeners = list() listener_status = list() - events_repository.register(/decl/observ/destroyed, source, src, /datum/proc/qdel_self) + events_repository.register(/decl/observ/destroyed, source, src, TYPE_PROC_REF(/datum, qdel_self)) player.subscribe(src) diff --git a/code/modules/tools/_tool_defines.dm b/code/modules/tools/archetypes/_tool_defines.dm similarity index 100% rename from code/modules/tools/_tool_defines.dm rename to code/modules/tools/archetypes/_tool_defines.dm diff --git a/code/modules/tools/tool_archetype.dm b/code/modules/tools/archetypes/tool_archetype.dm similarity index 63% rename from code/modules/tools/tool_archetype.dm rename to code/modules/tools/archetypes/tool_archetype.dm index bed1c7dd3a0..0aebe360fb9 100644 --- a/code/modules/tools/tool_archetype.dm +++ b/code/modules/tools/archetypes/tool_archetype.dm @@ -1,11 +1,16 @@ /decl/tool_archetype - var/name = "tool" // Noun for the tool. - var/article = TRUE // Boolean value for prefixing 'a' or 'an' to the tool name. - var/use_sound = 'sound/items/Deconstruct.ogg' // Sound or list of sounds to play when this tool is used. - var/config_sound = 'sound/items/Ratchet.ogg' // Sound or list of sounds to play when this tool is selected as a variable tool head. + /// Noun for the tool. + var/name = "tool" + /// Boolean value for prefixing 'a' or 'an' to the tool name. + var/article = TRUE + /// Sound or list of sounds to play when this tool is selected as a variable tool head. + var/config_sound = 'sound/items/Ratchet.ogg' var/codex_key - var/use_message = "adjusting" - var/list/properties // A list of named tool specific properties this tool offers, and the default value of that property, if applicable. + /// Sound or list of sounds to play when this tool is used. + var/tool_sound = 'sound/items/Deconstruct.ogg' + var/tool_message = "adjusting" + /// A list of named tool specific properties this tool offers, and the default value of that property, if applicable. + var/list/properties /decl/tool_archetype/proc/can_use_tool(var/obj/item/tool, var/expend_fuel = 0) return istype(tool) && tool.get_tool_quality(type) > 0 @@ -34,7 +39,7 @@ . = "bad" if(0 to TOOL_QUALITY_BAD) . = "awful" - + if(.) if(article) . = "\a [.]" diff --git a/code/modules/tools/tool_archetype_definition_pen.dm b/code/modules/tools/archetypes/tool_archetype_definition_pen.dm similarity index 88% rename from code/modules/tools/tool_archetype_definition_pen.dm rename to code/modules/tools/archetypes/tool_archetype_definition_pen.dm index 87c7aae992c..33796155a6f 100644 --- a/code/modules/tools/tool_archetype_definition_pen.dm +++ b/code/modules/tools/archetypes/tool_archetype_definition_pen.dm @@ -1,8 +1,8 @@ /decl/tool_archetype/pen - name = "pen" - use_message = "writing" - use_sound = list('sound/effects/pen1.ogg','sound/effects/pen2.ogg') - properties = list( + name = "pen" + tool_message = "writing" + tool_sound = list('sound/effects/pen1.ogg','sound/effects/pen2.ogg') + properties = list( TOOL_PROP_COLOR = "black", TOOL_PROP_COLOR_NAME = "black", TOOL_PROP_PEN_FLAG = 0, @@ -21,14 +21,16 @@ else . = "Anonymous" -/decl/tool_archetype/pen/proc/decrement_uses(var/mob/user, var/obj/item/tool, var/decrement = 1) +/decl/tool_archetype/pen/proc/decrement_uses(var/mob/user, var/obj/item/tool, var/decrement = 1, var/destroy_on_zero = TRUE) . = tool.get_tool_property(TOOL_PEN, TOOL_PROP_USES) if(. < 0) return TRUE . -= decrement tool.set_tool_property(TOOL_PEN, TOOL_PROP_USES, max(0, .)) //Prevent negatives and turning the pen into an infinite uses pen if(. <= 0 && (tool.get_tool_property(TOOL_PEN, TOOL_PROP_PEN_FLAG) & PEN_FLAG_DEL_EMPTY)) - qdel(tool) + . = 0 + if(destroy_on_zero) + qdel(tool) /**Toggles the active/inactive state of some pens */ /decl/tool_archetype/pen/proc/toggle_active(var/mob/user, var/obj/item/pen/tool) diff --git a/code/modules/tools/archetypes/tool_archetype_definitions.dm b/code/modules/tools/archetypes/tool_archetype_definitions.dm new file mode 100644 index 00000000000..ca4888d31da --- /dev/null +++ b/code/modules/tools/archetypes/tool_archetype_definitions.dm @@ -0,0 +1,50 @@ +/decl/tool_archetype/cable_coil + name = "cable coil" + tool_message = "rewiring" + +/decl/tool_archetype/wirecutters + name = "wirecutters" + article = FALSE + tool_sound = 'sound/items/Wirecutter.ogg' + codex_key = TOOL_CODEX_WIRECUTTERS + tool_message = "snipping" + +/decl/tool_archetype/screwdriver + name = "screwdriver" + tool_sound = 'sound/items/Screwdriver.ogg' + codex_key = TOOL_CODEX_SCREWDRIVER + +/decl/tool_archetype/multitool + name = "multitool" + codex_key = TOOL_CODEX_MULTITOOL + tool_message = "reconfiguring" + +/decl/tool_archetype/crowbar + name = "crowbar" + codex_key = TOOL_CODEX_CROWBAR + tool_message = "levering" + +/decl/tool_archetype/hatchet + name = "hatchet" + tool_sound = 'sound/items/axe_wood.ogg' + tool_message = "chopping" + +/decl/tool_archetype/wrench + name = "wrench" + tool_sound = 'sound/items/Ratchet.ogg' + codex_key = TOOL_CODEX_WRENCH + +/decl/tool_archetype/shovel + name = "shovel" + tool_sound = 'sound/items/shovel_dirt.ogg' + tool_message = "digging" + +/decl/tool_archetype/pick + name = "pick" + tool_sound = 'sound/weapons/Genhit.ogg' + tool_message = "excavating" + +/decl/tool_archetype/hammer + name = "hammer" + tool_sound = 'sound/weapons/Genhit.ogg' + tool_message = "striking" diff --git a/code/modules/tools/archetypes/tool_archetype_definitions_surgery.dm b/code/modules/tools/archetypes/tool_archetype_definitions_surgery.dm new file mode 100644 index 00000000000..3da7b83011f --- /dev/null +++ b/code/modules/tools/archetypes/tool_archetype_definitions_surgery.dm @@ -0,0 +1,36 @@ +/decl/tool_archetype/scalpel + name = "scalpel" + tool_message = "slicing" + +/decl/tool_archetype/retractor + name = "retractor" + tool_message = "retracting" + +/decl/tool_archetype/hemostat + name = "hemostat" + +/decl/tool_archetype/saw + name = "surgical saw" + tool_message = "sawwing" + +/decl/tool_archetype/cautery + name = "cautery" + tool_message = "cauterizing" + +/decl/tool_archetype/sutures + name = "sutures" + article = FALSE + tool_message = "suturing" + +/decl/tool_archetype/bone_gel + name = "bone gel" + article = FALSE + tool_message = "gluing" + +/decl/tool_archetype/bone_setter + name = "bone setter" + tool_message = "setting" + +/decl/tool_archetype/surgical_drill + name = "surgical drill" + tool_message = "drilling" diff --git a/code/modules/tools/tool_archetype_definitions_welder.dm b/code/modules/tools/archetypes/tool_archetype_definitions_welder.dm similarity index 87% rename from code/modules/tools/tool_archetype_definitions_welder.dm rename to code/modules/tools/archetypes/tool_archetype_definitions_welder.dm index cb3c4b314fb..38785e04ec3 100644 --- a/code/modules/tools/tool_archetype_definitions_welder.dm +++ b/code/modules/tools/archetypes/tool_archetype_definitions_welder.dm @@ -1,8 +1,8 @@ /decl/tool_archetype/welder - name = "welder" - use_sound = list('sound/items/Welder.ogg','sound/items/Welder2.ogg') - codex_key = TOOL_CODEX_WELDER - use_message = "welding" + name = "welder" + tool_sound = list('sound/items/Welder.ogg','sound/items/Welder2.ogg') + codex_key = TOOL_CODEX_WELDER + tool_message = "welding" /decl/tool_archetype/welder/handle_pre_interaction(var/mob/user, var/obj/item/tool, var/expend_fuel = 0) var/obj/item/weldingtool/welder = tool diff --git a/code/modules/tools/tool_extension.dm b/code/modules/tools/archetypes/tool_extension.dm similarity index 70% rename from code/modules/tools/tool_extension.dm rename to code/modules/tools/archetypes/tool_extension.dm index 61c41dfba6a..2b576672ac2 100644 --- a/code/modules/tools/tool_extension.dm +++ b/code/modules/tools/archetypes/tool_extension.dm @@ -27,7 +27,7 @@ for(var/tool in tool_values) if(isnull(tool_use_sounds[tool])) var/decl/tool_archetype/tool_archetype = GET_DECL(tool) - tool_use_sounds[tool] = tool_archetype.use_sound + tool_use_sounds[tool] = tool_archetype.tool_sound /datum/extension/tool/proc/get_tool_speed(var/archetype) . = clamp((TOOL_QUALITY_BEST - get_tool_quality(archetype)), TOOL_SPEED_BEST, TOOL_SPEED_WORST) @@ -55,8 +55,22 @@ /datum/extension/tool/proc/handle_physical_manipulation(var/mob/user) return FALSE +/datum/extension/tool/proc/get_tool_message(archetype) + var/decl/tool_archetype/tool_archetype = istype(archetype, /decl/tool_archetype) ? archetype : GET_DECL(archetype) + return get_tool_property(archetype, TOOL_PROP_VERB) || tool_archetype.tool_message + +/datum/extension/tool/proc/get_tool_sound(archetype) + var/decl/tool_archetype/tool_archetype = istype(archetype, /decl/tool_archetype) ? archetype : GET_DECL(archetype) + return LAZYACCESS(tool_use_sounds, archetype) || get_tool_property(archetype, TOOL_PROP_SOUND) || tool_archetype.tool_sound + +/datum/extension/tool/proc/get_expected_tool_use_delay(archetype, delay, mob/user, check_skill = SKILL_CONSTRUCTION) + . = CEILING(delay * get_tool_speed(archetype)) + if(user && check_skill) + . *= user.skill_delay_mult(check_skill, 0.3) + . = max(round(.), 5) + // Returns a failure message as a string if the interaction fails. -/datum/extension/tool/proc/do_tool_interaction(var/archetype, var/mob/user, var/atom/target, var/delay = (1 SECOND), var/start_message, var/success_message, var/failure_message, var/fuel_expenditure = 0, var/check_skill = SKILL_CONSTRUCTION, var/check_skill_threshold, var/check_skill_prob = 50) +/datum/extension/tool/proc/do_tool_interaction(var/archetype, var/mob/user, var/atom/target, var/delay = (1 SECOND), var/start_message, var/success_message, var/failure_message, var/fuel_expenditure = 0, var/check_skill = SKILL_CONSTRUCTION, var/prefix_message, var/suffix_message,var/check_skill_threshold, var/check_skill_prob = 50, var/set_cooldown = FALSE) if(!istype(user) || !istype(target)) return TOOL_USE_FAILURE_NOMESSAGE @@ -70,11 +84,14 @@ if(check_result != TOOL_USE_SUCCESS) return check_result - user.visible_message(SPAN_NOTICE("\The [user] begins [start_message || tool_archetype.use_message] \the [target] with \the [holder]."), SPAN_NOTICE("You begin [start_message || tool_archetype.use_message] \the [target] with \the [holder].")) - var/use_sound = LAZYACCESS(tool_use_sounds, archetype) - //If no sound overrides, grab the archetype's sound/sound list - if(!use_sound) - use_sound = tool_archetype.use_sound + var/use_message = get_tool_message(archetype) + user.visible_message( + SPAN_NOTICE("\The [user] begins [prefix_message][start_message || use_message] \the [target] with \the [holder][suffix_message]."), + SPAN_NOTICE("You begin [prefix_message][start_message || use_message] \the [target] with \the [holder][suffix_message].") + ) + + //If no sound overrides, grab the archetype's sound/sound list + var/use_sound = get_tool_sound(archetype) if(islist(use_sound)) if(length(use_sound)) use_sound = pick(use_sound) @@ -84,13 +101,14 @@ playsound(user.loc, use_sound, 100) // If we have a delay, reduce it by the tool speed and then further reduce via skill if necessary. - if(delay) - delay = max(5, CEILING(delay * get_tool_speed(archetype))) + // Skill multiplier is applied to delay do_skilled() so skip it in get_expected_tool_use_delay() + var/use_delay = delay ? get_expected_tool_use_delay(archetype, delay, user, check_skill = FALSE) : 0 + if(use_delay) if(check_skill) - if(!user.do_skilled(delay, check_skill, target, check_holding = TRUE)) + if(!user.do_skilled(delay, check_skill, target, check_holding = TRUE, set_cooldown = set_cooldown)) return TOOL_USE_FAILURE_NOMESSAGE else - if(!do_after(user, delay, target, check_holding = TRUE)) + if(!do_after(user, delay, target, check_holding = TRUE, set_cooldown = set_cooldown)) return TOOL_USE_FAILURE_NOMESSAGE // Basic skill check for the action - do it post-delay so they can't just spamclick. diff --git a/code/modules/tools/tool_extension_variable.dm b/code/modules/tools/archetypes/tool_extension_variable.dm similarity index 100% rename from code/modules/tools/tool_extension_variable.dm rename to code/modules/tools/archetypes/tool_extension_variable.dm diff --git a/code/modules/tools/tool_item.dm b/code/modules/tools/archetypes/tool_item.dm similarity index 68% rename from code/modules/tools/tool_item.dm rename to code/modules/tools/archetypes/tool_item.dm index 4091fc364ef..f8267b1ba38 100644 --- a/code/modules/tools/tool_item.dm +++ b/code/modules/tools/archetypes/tool_item.dm @@ -1,6 +1,13 @@ /obj/item/proc/get_tool_quality(var/archetype) var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) - . = tool?.get_tool_quality(archetype) + return tool?.get_tool_quality(archetype) + +/obj/item/proc/get_best_tool_archetype() + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + if(tool) + for(var/tool_archetype in tool.tool_values) + if(!. || tool.get_tool_quality(tool_archetype) > tool.get_tool_quality(.)) + . = tool_archetype /obj/item/proc/get_tool_speed(var/archetype) var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) @@ -11,18 +18,30 @@ var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) . = tool?.get_tool_property(archetype, property) +/obj/item/proc/get_expected_tool_use_delay(archetype, delay, mob/user, check_skill = SKILL_CONSTRUCTION) + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + . = tool?.get_expected_tool_use_delay(archetype, delay, user, check_skill) + +/obj/item/proc/get_tool_sound(var/archetype) + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + . = tool?.get_tool_sound(archetype) + +/obj/item/proc/get_tool_message(var/archetype) + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + . = tool?.get_tool_message(archetype) + /**Set the property for the given tool archetype to the specified value. */ /obj/item/proc/set_tool_property(var/archetype, var/property, var/value) var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) . = tool?.set_tool_property(archetype, property, value) -/obj/item/proc/do_tool_interaction(var/archetype, var/mob/user, var/atom/target, var/delay = (1 SECOND), var/start_message, var/success_message, var/failure_message, var/fuel_expenditure = 0, var/check_skill = SKILL_CONSTRUCTION, var/check_skill_threshold, var/check_skill_prob = 50) +/obj/item/proc/do_tool_interaction(var/archetype, var/mob/user, var/atom/target, var/delay = (1 SECOND), var/start_message, var/success_message, var/failure_message, var/fuel_expenditure = 0, var/check_skill = SKILL_CONSTRUCTION, var/prefix_message, var/suffix_message, var/check_skill_threshold, var/check_skill_prob = 50, var/set_cooldown = FALSE) if(get_tool_quality(archetype) <= 0) return FALSE var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) - . = tool.do_tool_interaction(archetype, user, target, delay, start_message, success_message, failure_message, fuel_expenditure, check_skill, check_skill_threshold, check_skill_prob) + . = tool.do_tool_interaction(archetype, user, target, delay, start_message, success_message, failure_message, fuel_expenditure, check_skill, prefix_message, suffix_message, check_skill_threshold, check_skill_prob, set_cooldown) if(QDELETED(user) || QDELETED(target)) return FALSE diff --git a/code/modules/tools/components/_component.dm b/code/modules/tools/components/_component.dm new file mode 100644 index 00000000000..63f505bdf51 --- /dev/null +++ b/code/modules/tools/components/_component.dm @@ -0,0 +1,14 @@ +/obj/item/tool_component + name = "tool component" + abstract_type = /obj/item/tool_component + material = /decl/material/solid/metal/steel + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + w_class = ITEM_SIZE_SMALL + +/* + todo + - binding + - slapcrafting for assembly + - modify properties based on material + - credit Tinker's Construct in PR +*/ \ No newline at end of file diff --git a/code/modules/tools/components/handle.dm b/code/modules/tools/components/handle.dm new file mode 100644 index 00000000000..3183a58a0c0 --- /dev/null +++ b/code/modules/tools/components/handle.dm @@ -0,0 +1,23 @@ +/obj/item/tool_component/handle + name = "tool handle" + force = 5 + icon = 'icons/obj/items/tool/components/tool_handle.dmi' + material = /decl/material/solid/organic/wood + abstract_type = /obj/item/tool_component/handle + +/obj/item/tool_component/handle/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/tool_component/head)) + return W.attackby(src, user) + return ..() + +/obj/item/tool_component/handle/short + name = "short tool handle" + desc = "A short, straight rod suitable for use as the handle of a tool." + icon_state = "handle_short" + +/obj/item/tool_component/handle/long + name = "long tool handle" + desc = "A long, hefty rod suitable for use as the handle of a heavy tool." + icon_state = "handle_long" + force = 8 // bonk + w_class = ITEM_SIZE_NORMAL diff --git a/code/modules/tools/components/head.dm b/code/modules/tools/components/head.dm new file mode 100644 index 00000000000..9c7bfd7b54b --- /dev/null +++ b/code/modules/tools/components/head.dm @@ -0,0 +1,79 @@ +var/global/list/_tool_quality_cache = list() +var/global/list/_tool_properties_cache = list() + +/obj/item/tool_component/head + icon = 'icons/obj/items/tool/components/tool_head.dmi' + abstract_type = /obj/item/tool_component/head + var/requires_handle_type = /obj/item/tool_component/handle/short + + var/tool_type + var/list/tool_qualities + var/list/tool_properties + +/obj/item/tool_component/head/Initialize(ml, material_key) + if(tool_type) + tool_qualities = tool_qualities || global._tool_quality_cache[tool_type] + tool_properties = tool_properties || global._tool_properties_cache[tool_type] + if(!tool_qualities || !tool_properties) + var/obj/item/tool/thing = new tool_type + if(!tool_qualities) + tool_qualities = thing.get_initial_tool_qualities() + global._tool_quality_cache[tool_type] = tool_qualities + if(!tool_properties) + tool_properties = thing.get_initial_tool_properties() + global._tool_properties_cache[tool_type] = tool_properties + // qdel(thing) //do we need to do this? are we allowed to do it during Initialize()? + return ..() + +/obj/item/tool_component/head/attackby(obj/item/W, mob/user) + if(tool_type && istype(W, /obj/item/tool_component/handle)) + if(!istype(W, requires_handle_type)) + var/obj/handle_ref = requires_handle_type + var/obj/tool_ref = tool_type + to_chat(user, SPAN_WARNING("You need \a [initial(handle_ref.name)] to craft \a [initial(tool_ref.name)].")) + return TRUE + if(ismob(loc)) + var/mob/M = loc + M.drop_from_inventory(src) + if(ismob(W.loc)) + var/mob/M = W.loc + M.drop_from_inventory(W) + var/obj/item/crafted = new tool_type(get_turf(user), material?.type, W.material?.type, tool_qualities, tool_properties) + if(crafted) + user?.put_in_hands(crafted) + to_chat(user, SPAN_NOTICE("You assemble \the [W] and \the [src] into \a [crafted]!")) + qdel(W) + qdel(src) + return TRUE + return ..() + +/obj/item/tool_component/head/proc/try_craft_tool(mob/user, obj/item/tool_component/head/head) + return FALSE + +/obj/item/tool_component/head/hammer + name = "hammer head" + desc = "The head of a claw hammer." + icon_state = "hammer" + tool_type = /obj/item/tool/hammer + +/obj/item/tool_component/head/shovel + name = "shovel head" + desc = "The head of a shovel." + icon_state = "shovel" + tool_type = /obj/item/tool/shovel + +/obj/item/tool_component/head/pickaxe + name = "pickaxe head" + desc = "The head of a pickaxe." + icon_state = "pickaxe" + tool_type = /obj/item/tool/pickaxe + requires_handle_type = /obj/item/tool_component/handle/long + w_class = ITEM_SIZE_NORMAL + +/obj/item/tool_component/head/sledgehammer + name = "sledgehammer head" + desc = "The head of a sledgehammer." + icon_state = "sledgehammer" + tool_type = /obj/item/tool/hammer/sledge + requires_handle_type = /obj/item/tool_component/handle/long + w_class = ITEM_SIZE_NORMAL diff --git a/code/modules/tools/components/recipes.dm b/code/modules/tools/components/recipes.dm new file mode 100644 index 00000000000..2b645fe7547 --- /dev/null +++ b/code/modules/tools/components/recipes.dm @@ -0,0 +1,30 @@ +/decl/stack_recipe/tool + abstract_type = /decl/stack_recipe/tool + +/decl/stack_recipe/tool/handle + abstract_type = /decl/stack_recipe/tool/handle + difficulty = 1 + +/decl/stack_recipe/tool/handle/long + result_type = /obj/item/tool_component/handle/long + +/decl/stack_recipe/tool/handle/short + result_type = /obj/item/tool_component/handle/short + +/decl/stack_recipe/tool/head + abstract_type = /decl/stack_recipe/tool/head + difficulty = 2 + +/decl/stack_recipe/tool/head/hammer + result_type = /obj/item/tool_component/head/hammer + +/decl/stack_recipe/tool/head/shovel + result_type = /obj/item/tool_component/head/shovel + +/decl/stack_recipe/tool/head/sledgehammer + difficulty = 3 + result_type = /obj/item/tool_component/head/sledgehammer + +/decl/stack_recipe/tool/head/pickaxe + difficulty = 3 + result_type = /obj/item/tool_component/head/pickaxe diff --git a/code/modules/tools/subtypes/drills.dm b/code/modules/tools/subtypes/drills.dm new file mode 100644 index 00000000000..c57da41762f --- /dev/null +++ b/code/modules/tools/subtypes/drills.dm @@ -0,0 +1,59 @@ +/obj/item/tool/drill + name = "mining drill" + desc = "The most basic of mining drills, for short excavations and small mineral extractions." + icon = 'icons/obj/items/tool/drills/drill.dmi' + material_alteration = 0 + +/obj/item/tool/drill/get_handle_color() + return null + +/obj/item/tool/drill/get_initial_tool_properties() + var/static/list/tool_properties = list( + TOOL_PICK = list( + TOOL_PROP_EXCAVATION_DEPTH = 200, + TOOL_PROP_VERB = "drilling" + ) + ) + return tool_properties + +// TODO: cell extension? +/obj/item/tool/drill/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_DECENT, + TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE + ) + return tool_qualities + +/obj/item/tool/drill/advanced + name = "advanced mining drill" // Can dig sand as well! + desc = "Yours is the drill that will pierce through the rock walls." + icon = 'icons/obj/items/tool/drills/drill_advanced.dmi' + origin_tech = @'{"materials":2,"powerstorage":3,"engineering":2}' + matter = list(/decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT) + +/obj/item/tool/drill/advanced/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_GOOD, + TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE, + TOOL_SHOVEL = TOOL_QUALITY_MEDIOCRE + ) + return tool_qualities + +/obj/item/tool/drill/diamond //When people ask about the badass leader of the mining tools, they are talking about ME! + name = "diamond mining drill" + desc = "Yours is the drill that will pierce the heavens!" + icon = 'icons/obj/items/tool/drills/drill_diamond.dmi' + origin_tech = @'{"materials":6,"powerstorage":4,"engineering":5}' + material = /decl/material/solid/metal/steel + matter = list( + /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE + ) + +/obj/item/tool/drill/diamond/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_BEST, + TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE, + TOOL_SHOVEL = TOOL_QUALITY_MEDIOCRE + ) + return tool_qualities \ No newline at end of file diff --git a/code/modules/tools/subtypes/hammers.dm b/code/modules/tools/subtypes/hammers.dm new file mode 100644 index 00000000000..9b8885abf44 --- /dev/null +++ b/code/modules/tools/subtypes/hammers.dm @@ -0,0 +1,49 @@ +/obj/item/tool/hammer + name = "hammer" + desc = "A simple hammer. Ancient technology once thought lost." + icon = 'icons/obj/items/tool/hammers/hammer.dmi' + sharp = 0 + edge = 0 + material_force_multiplier = 0.3 + +/obj/item/tool/hammer/get_initial_tool_properties() + var/static/list/tool_properties = list( + TOOL_PICK = list( + TOOL_PROP_EXCAVATION_DEPTH = 200, + TOOL_PROP_VERB = "hammering" + ) + ) + return tool_properties + +/obj/item/tool/hammer/get_initial_tool_qualities() + var/static/list/tool_qualities = list(TOOL_HAMMER = TOOL_QUALITY_DEFAULT) + return tool_qualities + +/obj/item/tool/hammer/sledge + name = "sledgehammer" + desc = "A heavy two-handed construction hammer. Great for smashing your boss right in the face." + icon = 'icons/obj/items/tool/hammers/sledgehammer.dmi' + +/obj/item/tool/hammer/sledge/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_HAMMER = TOOL_QUALITY_DEFAULT, + TOOL_PICK = TOOL_QUALITY_MEDIOCRE, + TOOL_SHOVEL = TOOL_QUALITY_MEDIOCRE + ) + return tool_qualities + +/obj/item/tool/hammer/jack + name = "sonic jackhammer" + desc = "A hefty tool that cracks rocks with sonic blasts, perfect for killing cave lizards." + icon = 'icons/obj/items/tool/hammers/jackhammer.dmi' + origin_tech = @'{"materials":3,"powerstorage":2,"engineering":2}' + material_alteration = 0 + +/obj/item/tool/hammer/jack/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_HAMMER = TOOL_QUALITY_DEFAULT, + TOOL_PICK = TOOL_QUALITY_DEFAULT, + TOOL_SURGICAL_DRILL = TOOL_QUALITY_MEDIOCRE, + TOOL_SHOVEL = TOOL_QUALITY_DECENT + ) + return tool_qualities diff --git a/code/modules/tools/subtypes/pickaxes.dm b/code/modules/tools/subtypes/pickaxes.dm new file mode 100644 index 00000000000..2b09b47978c --- /dev/null +++ b/code/modules/tools/subtypes/pickaxes.dm @@ -0,0 +1,59 @@ +/obj/item/tool/pickaxe + name = "pickaxe" + desc = "A heavy tool with a pick head for prospecting for minerals, and an axe head for dealing with anyone with a prior claim." + icon_state = "preview" + icon = 'icons/obj/items/tool/pickaxe.dmi' + sharp = TRUE + edge = TRUE + force = 15 + handle_material = /decl/material/solid/organic/wood + material_force_multiplier = 0.3 + +/obj/item/tool/pickaxe/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_DEFAULT, + TOOL_SHOVEL = TOOL_QUALITY_MEDIOCRE, + TOOL_HAMMER = TOOL_QUALITY_MEDIOCRE + ) + return tool_qualities + +/obj/item/tool/pickaxe/get_initial_tool_properties() + var/static/list/tool_properties = list( + TOOL_PICK = list( + TOOL_PROP_EXCAVATION_DEPTH = 200 + ) + ) + return tool_properties + +/obj/item/tool/pickaxe/titanium + origin_tech = @'{"materials":3}' + material = /decl/material/solid/metal/titanium + +/obj/item/tool/pickaxe/titanium/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_DECENT, + TOOL_SHOVEL = TOOL_QUALITY_DEFAULT + ) + return tool_qualities + +/obj/item/tool/pickaxe/plasteel + origin_tech = @'{"materials":4}' + material = /decl/material/solid/metal/plasteel + +/obj/item/tool/pickaxe/plasteel/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_GOOD, + TOOL_SHOVEL = TOOL_QUALITY_DECENT + ) + return tool_qualities + +/obj/item/tool/pickaxe/ocp + origin_tech = @'{"materials":6,"engineering":4}' + material = /decl/material/solid/metal/plasteel/ocp + +/obj/item/tool/pickaxe/ocp/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_PICK = TOOL_QUALITY_BEST, + TOOL_SHOVEL = TOOL_QUALITY_GOOD + ) + return tool_qualities diff --git a/code/modules/tools/subtypes/power_tools.dm b/code/modules/tools/subtypes/power_tools.dm new file mode 100644 index 00000000000..3a649b77e87 --- /dev/null +++ b/code/modules/tools/subtypes/power_tools.dm @@ -0,0 +1,67 @@ +/obj/item/tool/hydraulic_cutter + name = "hydraulic cutter" + desc = "A universal, miniturized hydraulic tool with interchangable heads for either prying or cutting. But not both at the same time." + icon = 'icons/obj/items/tool/cutter.dmi' + icon_state = ICON_STATE_WORLD + slot_flags = SLOT_LOWER_BODY + material_force_multiplier = 0.2 + w_class = ITEM_SIZE_SMALL + origin_tech = @'{"materials":3,"engineering":3}' + material = /decl/material/solid/metal/steel + center_of_mass = @'{"x":17,"y":16}' + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + drop_sound = 'sound/foley/bardrop1.ogg' + +/obj/item/tool/hydraulic_cutter/on_update_icon() + . = ..() + icon_state = get_world_inventory_state() + if(IS_CROWBAR(src)) + add_overlay("[icon_state]-pry") + else if(IS_WIRECUTTER(src)) + add_overlay("[icon_state]-cut") + +/obj/item/tool/hydraulic_cutter/Initialize() + . = ..() + var/datum/extension/tool/variable/tool = get_extension(src, /datum/extension/tool) + tool?.set_sound_overrides('sound/items/jaws_pry.ogg', 'sound/items/change_jaws.ogg') + +/obj/item/tool/hydraulic_cutter/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_CROWBAR = TOOL_QUALITY_GOOD, + TOOL_WIRECUTTERS = TOOL_QUALITY_GOOD + ) + return tool_qualities + +/obj/item/tool/power_drill + name = "power drill" + desc = "A universal power drill, with heads for most common screw and bolt types." + icon = 'icons/obj/items/tool/powerdrill.dmi' + icon_state = ICON_STATE_WORLD + slot_flags = SLOT_LOWER_BODY + material_force_multiplier = 0.2 + w_class = ITEM_SIZE_SMALL + origin_tech = @'{"materials":3,"engineering":3}' + material = /decl/material/solid/metal/steel + center_of_mass = @'{"x":17,"y":16}' + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + drop_sound = 'sound/foley/bardrop1.ogg' + +/obj/item/tool/power_drill/Initialize() + . = ..() + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + tool?.set_sound_overrides('sound/items/airwrench.ogg', 'sound/items/change_drill.ogg') + +/obj/item/tool/power_drill/get_initial_tool_qualities() + var/static/list/tool_qualities = list( + TOOL_WRENCH = TOOL_QUALITY_GOOD, + TOOL_SCREWDRIVER = TOOL_QUALITY_GOOD + ) + return tool_qualities + +/obj/item/tool/power_drill/on_update_icon() + . = ..() + icon_state = get_world_inventory_state() + if(IS_SCREWDRIVER(src)) + add_overlay("[icon_state]-screw") + else if(IS_WRENCH(src)) + add_overlay("[icon_state]-bolt") diff --git a/code/modules/tools/subtypes/shovel.dm b/code/modules/tools/subtypes/shovel.dm new file mode 100644 index 00000000000..9016bf7731f --- /dev/null +++ b/code/modules/tools/subtypes/shovel.dm @@ -0,0 +1,39 @@ +/obj/item/tool/shovel + name = "shovel" + desc = "A large tool for digging and moving dirt." + icon = 'icons/obj/items/tool/shovels/shovel.dmi' + icon_state = ICON_STATE_WORLD + slot_flags = SLOT_LOWER_BODY + force = 8 + throwforce = 4 + w_class = ITEM_SIZE_HUGE + edge = TRUE + sharp = TRUE + attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") + handle_material = /decl/material/solid/organic/wood + +/obj/item/tool/shovel/get_initial_tool_qualities() + var/static/list/tool_qualities = list(TOOL_SHOVEL = TOOL_QUALITY_DEFAULT) + return tool_qualities + +/obj/item/tool/spade + name = "spade" + desc = "A small tool for digging and moving dirt." + icon = 'icons/obj/items/tool/shovels/spade.dmi' + icon_state = ICON_STATE_WORLD + force = 5 + throwforce = 7 + w_class = ITEM_SIZE_SMALL + edge = FALSE + sharp = FALSE + slot_flags = SLOT_LOWER_BODY + attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") + material_alteration = 0 + handle_material = /decl/material/solid/organic/plastic + +/obj/item/tool/spade/get_handle_color() + return null + +/obj/item/tool/spade/get_initial_tool_qualities() + var/static/list/tool_qualities = list(TOOL_SHOVEL = TOOL_QUALITY_BAD) + return tool_qualities diff --git a/code/modules/tools/subtypes/xenoarchaeology_picks.dm b/code/modules/tools/subtypes/xenoarchaeology_picks.dm new file mode 100644 index 00000000000..85f472f89b2 --- /dev/null +++ b/code/modules/tools/subtypes/xenoarchaeology_picks.dm @@ -0,0 +1,156 @@ +/obj/item/tool/xeno + name = "master xenoarch pickaxe" + desc = "A miniature excavation tool for precise digging." + icon = 'icons/obj/xenoarchaeology.dmi' + item_state = "screwdriver_brown" + force = 3 + throwforce = 0 + attack_verb = list("stabbed", "jabbed", "spiked", "attacked") + material = /decl/material/solid/metal/chromium + matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY) + w_class = ITEM_SIZE_SMALL + sharp = 1 + abstract_type = /obj/item/tool/xeno + material_alteration = 0 + handle_material = /decl/material/solid/organic/plastic + + var/excavation_verb = "delicately picking" + var/excavation_sound = 'sound/weapons/thudswoosh.ogg' + var/excavation_amount = 0 + +/obj/item/tool/xeno/get_initial_tool_properties() + return list( + TOOL_PICK = list( + TOOL_PROP_VERB = excavation_verb, + TOOL_PROP_SOUND = excavation_sound, + TOOL_PROP_EXCAVATION_DEPTH = excavation_amount + ) + ) + +/obj/item/tool/xeno/get_initial_tool_qualities() + var/static/list/tool_qualities = list(TOOL_PICK = TOOL_QUALITY_DEFAULT) + return tool_qualities + +/obj/item/tool/xeno/examine(mob/user) + . = ..() + if(IS_PICK(src)) + to_chat(user, "This tool has a [get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) || 0] centimetre excavation depth.") + +/obj/item/tool/xeno/brush + name = "wire brush" + icon_state = "pick_brush" + slot_flags = SLOT_EARS + force = 1 + attack_verb = list("prodded", "attacked") + desc = "A wood-handled brush with thick metallic wires for clearing away dust and loose scree." + sharp = 0 + material = /decl/material/solid/organic/wood + matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) + excavation_amount = 1 + excavation_sound = 'sound/weapons/thudswoosh.ogg' + excavation_verb = "brushing" + +/obj/item/tool/xeno/one_pick + name = "2cm pick" + icon_state = "pick1" + excavation_amount = 2 + excavation_sound = 'sound/items/Screwdriver.ogg' + +/obj/item/tool/xeno/two_pick + name = "4cm pick" + icon_state = "pick2" + excavation_amount = 4 + excavation_sound = 'sound/items/Screwdriver.ogg' + +/obj/item/tool/xeno/three_pick + name = "6cm pick" + icon_state = "pick3" + excavation_amount = 6 + excavation_sound = 'sound/items/Screwdriver.ogg' + +/obj/item/tool/xeno/four_pick + name = "8cm pick" + icon_state = "pick4" + excavation_amount = 8 + excavation_sound = 'sound/items/Screwdriver.ogg' + +/obj/item/tool/xeno/five_pick + name = "10cm pick" + icon_state = "pick5" + excavation_amount = 10 + excavation_sound = 'sound/items/Screwdriver.ogg' + +/obj/item/tool/xeno/six_pick + name = "12cm pick" + icon_state = "pick6" + excavation_amount = 12 + +/obj/item/tool/xeno/hand + name = "hand pickaxe" + icon_state = "pick_hand" + item_state = "sword0" + desc = "A smaller, more precise version of the pickaxe." + excavation_amount = 30 + excavation_sound = 'sound/items/Crowbar.ogg' + excavation_verb = "clearing" + material = /decl/material/solid/metal/chromium + matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY) + w_class = ITEM_SIZE_NORMAL + force = 6 + throwforce = 3 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Pack for holding pickaxes + +/obj/item/storage/excavation + name = "excavation pick set" + icon = 'icons/obj/items/storage/excavation.dmi' + icon_state = "excavation" + item_state = "utility" + desc = "A rugged case containing a set of standardized picks used in archaeological digs." + item_state = "syringe_kit" + storage_slots = 7 + slot_flags = SLOT_LOWER_BODY + w_class = ITEM_SIZE_NORMAL + can_hold = list(/obj/item/tool/xeno) + max_storage_space = 18 + max_w_class = ITEM_SIZE_NORMAL + use_to_pickup = 1 + material = /decl/material/solid/organic/leather/synth + +/obj/item/storage/excavation/WillContain() + return list( + /obj/item/tool/xeno/brush, + /obj/item/tool/xeno/one_pick, + /obj/item/tool/xeno/two_pick, + /obj/item/tool/xeno/three_pick, + /obj/item/tool/xeno/four_pick, + /obj/item/tool/xeno/five_pick, + /obj/item/tool/xeno/six_pick + ) + +/obj/item/storage/excavation/empty/WillContain() + return + +/obj/item/storage/excavation/handle_item_insertion() + ..() + sort_picks() + +/obj/item/storage/excavation/proc/sort_picks() + var/list/obj/item/tool/xeno/picksToSort = list() + for(var/obj/item/tool/xeno/P in src) + picksToSort += P + P.forceMove(null) + while(picksToSort.len) + var/min = 200 // No pick is bigger than 200 + var/selected = 0 + for(var/i = 1 to picksToSort.len) + var/obj/item/tool/xeno/current = picksToSort[i] + var/excav_amount = current.get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) + if(excav_amount <= min) + selected = i + min = excav_amount + var/obj/item/tool/xeno/smallest = picksToSort[selected] + smallest.forceMove(src) + picksToSort -= smallest + prepare_ui() diff --git a/code/modules/tools/tool.dm b/code/modules/tools/tool.dm new file mode 100644 index 00000000000..1b63fdc77fc --- /dev/null +++ b/code/modules/tools/tool.dm @@ -0,0 +1,109 @@ +/obj/item/tool + icon_state = ICON_STATE_WORLD + obj_flags = OBJ_FLAG_CONDUCTIBLE + slot_flags = SLOT_LOWER_BODY + force = 10 + throwforce = 4 + w_class = ITEM_SIZE_HUGE + origin_tech = @'{"materials":1,"engineering":1}' + attack_verb = list("hit", "pierced", "sliced", "attacked") + sharp = 0 + abstract_type = /obj/item/tool + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + + /// Material is used for the head, handle is handle(d) below. + material = /decl/material/solid/metal/steel + /// Material used for our handle. Set to base material if null. + var/decl/material/handle_material + +/obj/item/tool/examine(mob/user) + . = ..() + to_chat(user, "The head is made of [material.use_name] and the handle is made of [handle_material.use_name].") + +/obj/item/tool/Initialize(ml, material_key, _handle_material, override_tool_qualities, override_tool_properties) + + // Find out handle material if supplied, default to base material otherwise. + if(ispath(_handle_material, /decl/material)) + handle_material = GET_DECL(_handle_material) + else if(istype(_handle_material, /decl/material)) + handle_material = _handle_material + else if(ispath(handle_material)) + handle_material = GET_DECL(handle_material) + else if(!istype(handle_material, /decl/material)) + if(istype(material, /decl/material)) + handle_material = material + else if(ispath(material, /decl/material)) + handle_material = GET_DECL(material) + else + handle_material = null + + // Update qualities. + var/list/tool_qualities = override_tool_qualities || get_initial_tool_qualities() + if(length(tool_qualities)) + var/datum/extension/tool/tool_data + if(length(tool_qualities) == 1) + tool_data = get_or_create_extension(src, /datum/extension/tool, tool_qualities) + else + tool_data = get_or_create_extension(src, /datum/extension/tool/variable, tool_qualities) + + // Update properties. + if(tool_data && IS_PICK(src)) + var/list/tool_properties = override_tool_properties || get_initial_tool_properties() + for(var/tool_archetype in tool_properties) + var/list/archetype_properties = tool_properties[tool_archetype] + for(var/tool_property in archetype_properties) + tool_data.set_tool_property(tool_archetype, tool_property, archetype_properties[tool_property]) + + . = ..() + + if(!handle_material) + handle_material = material + update_icon() + +/obj/item/tool/create_matter() + if(handle_material) + if(material == handle_material) + LAZYSET(matter, material.type, (MATTER_AMOUNT_PRIMARY + MATTER_AMOUNT_REINFORCEMENT)) + else + LAZYSET(matter, handle_material.type, MATTER_AMOUNT_REINFORCEMENT) + return ..() + +/obj/item/tool/proc/get_initial_tool_properties() + return list() + +/obj/item/tool/proc/get_initial_tool_qualities() + return list() + +/obj/item/tool/proc/get_handle_color() + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + return handle_material?.color || material?.color || COLOR_WHITE + return initial(color) + +/obj/item/tool/on_update_icon() + . = ..() + var/handle_color = get_handle_color() + if(!isnull(handle_color)) // return COLOR_WHITE instead of null as a way of opting into this behavior + var/handle_state = "[icon_state]-handle" + if(check_state_in_icon(handle_state, icon)) + var/image/I = image(icon, handle_state) + I.color = handle_color + if(handle_material) + I.alpha = 100 + handle_material.opacity * 255 + I.appearance_flags |= RESET_ALPHA + I.appearance_flags |= RESET_COLOR + add_overlay(I) + +/obj/item/tool/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) + if(overlay) + var/handle_color = get_handle_color() + if(!isnull(handle_color)) + var/handle_state = "[overlay.icon_state]-handle" + if(check_state_in_icon(handle_state, overlay.icon)) + var/image/handle = image(overlay.icon, handle_state) + handle.color = handle_color + if(handle_material) + handle.alpha = 100 + handle_material.opacity * 255 + handle.appearance_flags |= RESET_COLOR | RESET_ALPHA + handle.appearance_flags |= RESET_COLOR + overlay.overlays += handle + . = ..() diff --git a/code/modules/tools/tool_archetype_definitions.dm b/code/modules/tools/tool_archetype_definitions.dm deleted file mode 100644 index 48dbb848852..00000000000 --- a/code/modules/tools/tool_archetype_definitions.dm +++ /dev/null @@ -1,40 +0,0 @@ -/decl/tool_archetype/cable_coil - name = "cable coil" - use_message = "rewiring" - -/decl/tool_archetype/wirecutters - name = "wirecutters" - article = FALSE - use_sound = 'sound/items/Wirecutter.ogg' - codex_key = TOOL_CODEX_WIRECUTTERS - use_message = "snipping" - -/decl/tool_archetype/screwdriver - name = "screwdriver" - use_sound = 'sound/items/Screwdriver.ogg' - codex_key = TOOL_CODEX_SCREWDRIVER - -/decl/tool_archetype/multitool - name = "multitool" - codex_key = TOOL_CODEX_MULTITOOL - use_message = "reconfiguring" - -/decl/tool_archetype/crowbar - name = "crowbar" - codex_key = TOOL_CODEX_CROWBAR - use_message = "levering" - -/decl/tool_archetype/hatchet - name = "hatchet" - use_sound = 'sound/items/axe_wood.ogg' - use_message = "chopping" - -/decl/tool_archetype/wrench - name = "wrench" - use_sound = 'sound/items/Ratchet.ogg' - codex_key = TOOL_CODEX_WRENCH - -/decl/tool_archetype/shovel - name = "shovel" - use_sound = 'sound/items/shovel_dirt.ogg' - use_message = "digging" diff --git a/code/modules/tools/tool_archetype_definitions_surgery.dm b/code/modules/tools/tool_archetype_definitions_surgery.dm deleted file mode 100644 index 1f897d6b02a..00000000000 --- a/code/modules/tools/tool_archetype_definitions_surgery.dm +++ /dev/null @@ -1,36 +0,0 @@ -/decl/tool_archetype/scalpel - name = "scalpel" - use_message = "slicing" - -/decl/tool_archetype/retractor - name = "retractor" - use_message = "retracting" - -/decl/tool_archetype/hemostat - name = "hemostat" - -/decl/tool_archetype/saw - name = "surgical saw" - use_message = "sawwing" - -/decl/tool_archetype/cautery - name = "cautery" - use_message = "cauterizing" - -/decl/tool_archetype/sutures - name = "sutures" - article = FALSE - use_message = "suturing" - -/decl/tool_archetype/bone_gel - name = "bone gel" - article = FALSE - use_message = "gluing" - -/decl/tool_archetype/bone_setter - name = "bone setter" - use_message = "setting" - -/decl/tool_archetype/surgical_drill - name = "surgical drill" - use_message = "drilling" diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 6ff51f087a4..edd50670dce 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -88,7 +88,7 @@ Notes: queueHide = !!showing if (queueHide) - addtimer(CALLBACK(src, .proc/do_hide), 1) + addtimer(CALLBACK(src, PROC_REF(do_hide)), 1) else do_hide() diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index 7005f2f332c..a7bee800221 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -27,6 +27,11 @@ var/busy_state // Used for controller processing. var/next_process +SAVED_VAR(/datum/turbolift, current_floor) +SAVED_VAR(/datum/turbolift, doors) +SAVED_VAR(/datum/turbolift, floors) +SAVED_VAR(/datum/turbolift, control_panel_interior) + /datum/turbolift/proc/emergency_stop() queued_floors.Cut() target_floor = null @@ -40,11 +45,11 @@ /datum/turbolift/proc/open_doors(var/datum/turbolift_floor/use_floor = current_floor) for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) - INVOKE_ASYNC(door, /obj/machinery/door/proc/open) + INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door, open)) /datum/turbolift/proc/close_doors(var/datum/turbolift_floor/use_floor = current_floor) for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) - INVOKE_ASYNC(door, /obj/machinery/door/proc/close) + INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door, close)) #define LIFT_MOVING 1 #define LIFT_WAITING_A 2 diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm index 10276564fac..0d59bde8d0e 100644 --- a/code/modules/turbolift/turbolift_areas.dm +++ b/code/modules/turbolift/turbolift_areas.dm @@ -1,7 +1,7 @@ // Used for creating the exchange areas. /area/turbolift name = "Turbolift" - base_turf = /turf/simulated/open + base_turf = /turf/open requires_power = 0 sound_env = SMALL_ENCLOSED holomap_color = HOLOMAP_AREACOLOR_LIFTS diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm index dfa7c14bb52..e570d0421ea 100644 --- a/code/modules/turbolift/turbolift_console.dm +++ b/code/modules/turbolift/turbolift_console.dm @@ -6,7 +6,7 @@ density = FALSE layer = ABOVE_OBJ_LAYER obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":-32}, "WEST":{"x":32}}' var/datum/turbolift/lift /obj/structure/lift/proc/pressed(var/mob/user) diff --git a/code/modules/turbolift/turbolift_floor.dm b/code/modules/turbolift/turbolift_floor.dm index 8b2f19fa90e..bb436f103bb 100644 --- a/code/modules/turbolift/turbolift_floor.dm +++ b/code/modules/turbolift/turbolift_floor.dm @@ -10,6 +10,13 @@ var/list/doors = list() var/obj/structure/lift/button/ext_panel +SAVED_VAR(/datum/turbolift_floor, label) +SAVED_VAR(/datum/turbolift_floor, name) +SAVED_VAR(/datum/turbolift_floor, announce_str) +SAVED_VAR(/datum/turbolift_floor, arrival_sound) +SAVED_VAR(/datum/turbolift_floor, doors) +SAVED_VAR(/datum/turbolift_floor, ext_panel) + /datum/turbolift_floor/proc/set_area_ref(var/ref) var/area/turbolift/A = locate(ref) if(!istype(A)) diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm index 183d2e21bc7..14563e24b8e 100644 --- a/code/modules/turbolift/turbolift_map.dm +++ b/code/modules/turbolift/turbolift_map.dm @@ -157,7 +157,7 @@ INITIALIZE_IMMEDIATE(/obj/abstract/turbolift_spawner) return // Update path appropriately if needed. - var/swap_to = /turf/simulated/open + var/swap_to = /turf/space // this will be resolved to the appropriate open turf type by ChangeTurf(). if(cz == uz) // Elevator. if(wall_type && (tx == ux || ty == uy || tx == ex || ty == ey) && !(tx >= door_x1 && tx <= door_x2 && ty >= door_y1 && ty <= door_y2)) swap_to = wall_type diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index 9c4398a49ea..1a5b1dc82c8 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -7,8 +7,8 @@ load_item_visible = 1 buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 5) - health = 100 - maxhealth = 100 + current_health = 100 + max_health = 100 locked = 0 fire_dam_coeff = 0.6 @@ -124,7 +124,7 @@ return 1 return ..() -/obj/vehicle/bike/receive_mouse_drop(var/atom/dropping, mob/user) +/obj/vehicle/bike/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && istype(dropping, /atom/movable)) if(!load(dropping)) diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index b3facf35c84..e995266e03f 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -361,10 +361,10 @@ if(!is_train_head() || !on) move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind else - move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains - move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) - move_delay += config.run_delay //base reference speed - move_delay *= 1.1 //makes cargo trains 10% slower than running when not overweight + move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) // limits base overweight so you cant overspeed trains + move_delay *= (1 / max(1, active_engines)) * 2 // overweight penalty (scaled by the number of engines) + move_delay += get_config_value(/decl/config/num/movement_run) // base reference speed + move_delay *= 1.1 // makes cargo trains 10% slower than running when not overweight /obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines) src.train_length = train_length diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 61e579a188e..23975a13955 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -4,8 +4,8 @@ move_delay = 1 - health = 100 - maxhealth = 100 + current_health = 100 + max_health = 100 fire_dam_coeff = 0.7 brute_dam_coeff = 0.5 @@ -103,14 +103,14 @@ to_chat(user, "You climb down from [src].") return 1 -/obj/vehicle/train/handle_mouse_drop(atom/over, mob/user) +/obj/vehicle/train/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/vehicle/train)) var/obj/vehicle/train/beep = over beep.latch(src, user) return TRUE . = ..() -/obj/vehicle/train/receive_mouse_drop(var/atom/dropping, mob/user) +/obj/vehicle/train/receive_mouse_drop(atom/dropping, mob/user, params) . = ..() if(!. && istype(dropping, /atom/movable)) if(!load(dropping)) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 5c7ee107bf2..46377b8490e 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -19,8 +19,6 @@ var/attack_log = null var/on = 0 - var/health = 0 //do not forget to set health for your vehicle! - var/maxhealth = 0 var/fire_dam_coeff = 1.0 var/brute_dam_coeff = 1.0 var/open = 0 //Maint panel @@ -86,9 +84,10 @@ else if(IS_WELDER(W)) var/obj/item/weldingtool/T = W if(T.welding) - if(health < maxhealth) + var/current_max_health = get_max_health() + if(current_health < current_max_health) if(open) - health = min(maxhealth, health+10) + current_health = min(current_max_health, current_health+10) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.visible_message("\The [user] repairs \the [src]!","You repair \the [src]!") else @@ -101,14 +100,14 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) switch(W.damtype) if(BURN) - health -= W.force * fire_dam_coeff + current_health -= W.force * fire_dam_coeff if(BRUTE) - health -= W.force * brute_dam_coeff + current_health -= W.force * brute_dam_coeff ..() healthcheck() /obj/vehicle/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() + current_health -= Proj.get_structure_damage() ..() healthcheck() @@ -118,11 +117,11 @@ explode() else if(severity == 2) - health -= rand(5,10)*fire_dam_coeff - health -= rand(10,20)*brute_dam_coeff + current_health -= rand(5,10)*fire_dam_coeff + current_health -= rand(10,20)*brute_dam_coeff else if(prob(50)) - health -= rand(1,5)*fire_dam_coeff - health -= rand(1,5)*brute_dam_coeff + current_health -= rand(1,5)*fire_dam_coeff + current_health -= rand(1,5)*brute_dam_coeff healthcheck() /obj/vehicle/emp_act(severity) @@ -180,13 +179,13 @@ /obj/vehicle/proc/explode() src.visible_message("\The [src] blows apart!") - var/turf/Tsec = get_turf(src) + var/turf/my_turf = get_turf(src) SSmaterials.create_object(/decl/material/solid/metal/steel, get_turf(src), 2, /obj/item/stack/material/rods) - new /obj/item/stack/cable_coil/cut(Tsec) + new /obj/item/stack/cable_coil/cut(my_turf) if(cell) - cell.forceMove(Tsec) + cell.forceMove(my_turf) cell.update_icon() cell = null @@ -197,13 +196,13 @@ unload() - new /obj/effect/gibspawner/robot(Tsec) + new /obj/effect/gibspawner/robot(my_turf) new /obj/effect/decal/cleanable/blood/oil(src.loc) qdel(src) /obj/vehicle/proc/healthcheck() - if(health <= 0) + if(current_health <= 0) explode() /obj/vehicle/proc/powercheck() diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index 2bc98d39530..a354dbd2e0a 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -17,18 +17,19 @@ var/global/list/ventcrawl_machinery = list( /obj/item/sword/cultblade ) -/mob/living/var/list/icon/pipes_shown = list() -/mob/living/var/is_ventcrawling = 0 -/mob/var/next_play_vent = 0 +/mob/living + var/list/image/pipes_shown + var/is_ventcrawling = FALSE + var/next_play_vent = 0 /mob/living/proc/can_ventcrawl() if(!client) return FALSE if(!(/mob/living/proc/ventcrawl in verbs)) - to_chat(src, "You don't possess the ability to ventcrawl!") + to_chat(src, SPAN_WARNING("You don't possess the ability to ventcrawl!")) return FALSE if(incapacitated()) - to_chat(src, "You cannot ventcrawl in your current state!") + to_chat(src, SPAN_WARNING("You cannot ventcrawl in your current state!")) return FALSE return ventcrawl_carry() @@ -56,7 +57,7 @@ var/global/list/ventcrawl_machinery = list( /mob/living/proc/ventcrawl_carry() for(var/atom/A in contents) if(!is_allowed_vent_crawl_item(A)) - to_chat(src, "You can't carry \the [A] while ventcrawling!") + to_chat(src, SPAN_WARNING("You can't carry \the [A] while ventcrawling!")) return FALSE return TRUE @@ -86,67 +87,62 @@ var/global/list/ventcrawl_machinery = list( return 1 /mob/living/proc/handle_ventcrawl(var/atom/clicked_on) + if(!can_ventcrawl()) return - var/obj/machinery/atmospherics/unary/vent_found - if(clicked_on && Adjacent(clicked_on)) - vent_found = clicked_on - if(!istype(vent_found) || !vent_found.can_crawl_through()) - vent_found = null + var/obj/machinery/atmospherics/unary/vent_found = clicked_on + if(!istype(vent_found) || !vent_found.can_crawl_through() || !Adjacent(vent_found)) + vent_found = null + for(var/obj/machinery/atmospherics/unary/machine in range(1,src)) + if(!Adjacent(machine)) + continue + if(!is_type_in_list(machine, ventcrawl_machinery)) + continue + if(!machine.can_crawl_through()) + continue + vent_found = machine + break if(!vent_found) - for(var/obj/machinery/atmospherics/machine in range(1,src)) - if(is_type_in_list(machine, ventcrawl_machinery)) - vent_found = machine - - if(!vent_found || !vent_found.can_crawl_through()) - vent_found = null - - if(vent_found) - break - - if(vent_found) - var/datum/pipe_network/network = vent_found.network_in_dir(vent_found.dir) - if(network && (network.normal_members.len || network.line_members.len)) - - to_chat(src, "You begin climbing into the ventilation system...") - if(vent_found.air_contents && !issilicon(src)) - - switch(vent_found.air_contents.temperature) - if(0 to BODYTEMP_COLD_DAMAGE_LIMIT) - to_chat(src, "You feel a painful freeze coming from the vent!") - if(BODYTEMP_COLD_DAMAGE_LIMIT to T0C) - to_chat(src, "You feel an icy chill coming from the vent.") - if(T0C + 40 to BODYTEMP_HEAT_DAMAGE_LIMIT) - to_chat(src, "You feel a hot wash coming from the vent.") - if(BODYTEMP_HEAT_DAMAGE_LIMIT to INFINITY) - to_chat(src, "You feel a searing heat coming from the vent!") - switch(vent_found.air_contents.return_pressure()) - if(0 to HAZARD_LOW_PRESSURE) - to_chat(src, "You feel a rushing draw pulling you into the vent!") - if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) - to_chat(src, "You feel a strong drag pulling you into the vent.") - if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) - to_chat(src, "You feel a strong current pushing you away from the vent.") - if(HAZARD_HIGH_PRESSURE to INFINITY) - to_chat(src, "You feel a roaring wind pushing you away from the vent!") - if(!do_after(src, 45, vent_found, 1, 1)) - return - if(!can_ventcrawl()) - return - - visible_message("[src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") - - forceMove(vent_found) - add_ventcrawl(vent_found) - - else - to_chat(src, "This vent is not connected to anything.") - else to_chat(src, "You must be standing on or beside an air vent to enter it.") + return + + var/datum/pipe_network/network = vent_found.network_in_dir(vent_found.dir) + if(!network || (!length(network.normal_members) && !length(network.line_members))) + to_chat(src, "This vent is not connected to anything.") + return + + to_chat(src, "You begin climbing into the ventilation system...") + if(vent_found.air_contents && !issilicon(src)) + switch(vent_found.air_contents.temperature) + if(0 to BODYTEMP_COLD_DAMAGE_LIMIT) + to_chat(src, SPAN_DANGER("You feel a painful freeze coming from the vent!")) + if(BODYTEMP_COLD_DAMAGE_LIMIT to T0C) + to_chat(src, SPAN_WARNING("You feel an icy chill coming from the vent.")) + if(T0C + 40 to BODYTEMP_HEAT_DAMAGE_LIMIT) + to_chat(src, SPAN_WARNING("You feel a hot wash coming from the vent.")) + if(BODYTEMP_HEAT_DAMAGE_LIMIT to INFINITY) + to_chat(src, SPAN_DANGER("You feel a searing heat coming from the vent!")) + switch(vent_found.air_contents.return_pressure()) + if(0 to HAZARD_LOW_PRESSURE) + to_chat(src, SPAN_DANGER("You feel a rushing draw pulling you into the vent!")) + if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) + to_chat(src, SPAN_WARNING("You feel a strong drag pulling you into the vent.")) + if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) + to_chat(src, SPAN_WARNING("You feel a strong current pushing you away from the vent.")) + if(HAZARD_HIGH_PRESSURE to INFINITY) + to_chat(src, SPAN_DANGER("You feel a roaring wind pushing you away from the vent!")) + + if(!do_after(src, 45, vent_found, 1, 1) || !can_ventcrawl()) + return + + visible_message("\The [src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") + forceMove(vent_found) + add_ventcrawl(vent_found) + /mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine) - is_ventcrawling = 1 + is_ventcrawling = TRUE //candrop = 0 var/datum/pipe_network/network = starting_machine.return_network(starting_machine) if(!network) @@ -155,15 +151,13 @@ var/global/list/ventcrawl_machinery = list( for(var/obj/machinery/atmospherics/A in (pipeline.members || pipeline.edges)) if(!A.pipe_image) A.pipe_image = emissive_overlay(icon = A, loc = A.loc, dir = A.dir) - pipes_shown += A.pipe_image + LAZYDISTINCTADD(pipes_shown, A.pipe_image) client.images += A.pipe_image /mob/living/proc/remove_ventcrawl() - is_ventcrawling = 0 - //candrop = 1 + is_ventcrawling = FALSE if(client) for(var/image/current_image in pipes_shown) client.images -= current_image client.eye = src - - pipes_shown.len = 0 + LAZYCLEARLIST(pipes_shown) diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index a12184e78e3..1399a9df5b1 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -8,7 +8,7 @@ for(var/mob/living/M in global.player_list) if(M.client) M.client.images -= pipe_image - M.pipes_shown -= pipe_image + LAZYREMOVE(M.pipes_shown, pipe_image) pipe_image = null . = ..() diff --git a/code/modules/weather/_weather.dm b/code/modules/weather/_weather.dm index 53c581e5774..53a1ed5476f 100644 --- a/code/modules/weather/_weather.dm +++ b/code/modules/weather/_weather.dm @@ -23,12 +23,13 @@ */ /obj/abstract/weather_system - plane = DEFAULT_PLANE - layer = ABOVE_PROJECTILE_LAYER - icon = 'icons/effects/weather.dmi' - icon_state = "blank" - invisibility = INVISIBILITY_NONE - appearance_flags = (RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM) + plane = DEFAULT_PLANE + layer = ABOVE_PROJECTILE_LAYER + icon = 'icons/effects/weather.dmi' + icon_state = "blank" + invisibility = INVISIBILITY_NONE + appearance_flags = (RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM) + is_spawnable_type = FALSE var/water_material = /decl/material/liquid/water // Material to use for the properties of rain. var/ice_material = /decl/material/solid/ice // Material to use for the properties of snow and hail. @@ -61,7 +62,7 @@ for(var/tz in affecting_zs) for(var/turf/T as anything in block(locate(1, 1, tz), locate(world.maxx, world.maxy, tz))) if(T.weather == src) - remove_vis_contents(T, vis_contents_additions) + T.remove_vis_contents(vis_contents_additions) T.weather = null vis_contents_additions.Cut() SSweather.unregister_weather_system(src) @@ -91,9 +92,10 @@ // Dummy object for lightning flash animation. /obj/abstract/lightning_overlay - plane = EMISSIVE_PLANE - layer = ABOVE_LIGHTING_LAYER - icon = 'icons/effects/weather.dmi' - icon_state = "full" - alpha = 0 - invisibility = INVISIBILITY_NONE + plane = EMISSIVE_PLANE + layer = ABOVE_LIGHTING_LAYER + icon = 'icons/effects/weather.dmi' + icon_state = "full" + alpha = 0 + invisibility = INVISIBILITY_NONE + is_spawnable_type = FALSE diff --git a/code/modules/weather/weather_init.dm b/code/modules/weather/weather_init.dm index c8533997c8d..d5fdc4e5632 100644 --- a/code/modules/weather/weather_init.dm +++ b/code/modules/weather/weather_init.dm @@ -21,7 +21,7 @@ INITIALIZE_IMMEDIATE(/obj/abstract/weather_system) // If we're post-init, init immediately. if(SSweather.initialized) - addtimer(CALLBACK(src, .proc/init_weather), 0) + addtimer(CALLBACK(src, PROC_REF(init_weather)), 0) // Start the weather effects from the highest point; they will propagate downwards during update. /obj/abstract/weather_system/proc/init_weather() diff --git a/code/modules/weather/weather_mob_tracking.dm b/code/modules/weather/weather_mob_tracking.dm index 0a1a318700b..4355918aa8f 100644 --- a/code/modules/weather/weather_mob_tracking.dm +++ b/code/modules/weather/weather_mob_tracking.dm @@ -2,8 +2,8 @@ var/global/list/current_mob_ambience = list() /obj/abstract/weather_system - // Weakref lists used to track mobs within our weather - // system; alternative to keeping big lists of actual mobs or + // Weakref lists used to track mobs within our weather + // system; alternative to keeping big lists of actual mobs or // having mobs constantly poked by weather systems. var/tmp/list/mobs_on_cooldown = list() // Has this mob recently been messed with by the weather? @@ -15,7 +15,7 @@ var/global/list/current_mob_ambience = list() var/mobref = weakref(M) if(!(mobref in mobs_on_cooldown)) mobs_on_cooldown[mobref] = TRUE - addtimer(CALLBACK(src, .proc/clear_cooldown, mobref), delay) + addtimer(CALLBACK(src, PROC_REF(clear_cooldown), mobref), delay) return TRUE return FALSE diff --git a/code/modules/webhooks/_webhook.dm b/code/modules/webhooks/_webhook.dm index e7cfb646cd7..ed5087c06bd 100644 --- a/code/modules/webhooks/_webhook.dm +++ b/code/modules/webhooks/_webhook.dm @@ -10,7 +10,7 @@ if (!target_url) return -1 - var/result = call(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json"))) + var/result = LIBCALL(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json"))) result = cached_json_decode(result) if (result["error_code"]) @@ -27,7 +27,7 @@ if(!length(message)) return FALSE - if(config.disable_webhook_embeds) + if(get_config_value(/decl/config/toggle/disable_webhook_embeds)) var/list/embed_content for(var/list/embed in message["embeds"]) if(embed["title"]) diff --git a/code/modules/webhooks/webhook_fax.dm b/code/modules/webhooks/webhook_fax.dm new file mode 100644 index 00000000000..aed15715efd --- /dev/null +++ b/code/modules/webhooks/webhook_fax.dm @@ -0,0 +1,11 @@ +/decl/webhook/fax_sent + id = WEBHOOK_FAX_SENT + +// Data expects a "body" field containing a message. +/decl/webhook/fax_sent/get_message(var/list/data) + . = ..() + .["embeds"] = list(list( + "title" = (data && data["title"]) || "undefined", + "description" = (data && data["body"]) || "undefined", + "color" = COLOR_WEBHOOK_DEFAULT + )) diff --git a/mods/persistence/modules/world_save/_persistence.dm b/code/modules/world_save/_persistence.dm similarity index 100% rename from mods/persistence/modules/world_save/_persistence.dm rename to code/modules/world_save/_persistence.dm diff --git a/mods/persistence/modules/world_save/load_cache.dm b/code/modules/world_save/load_cache.dm similarity index 100% rename from mods/persistence/modules/world_save/load_cache.dm rename to code/modules/world_save/load_cache.dm diff --git a/mods/persistence/modules/world_save/save_testing.dm b/code/modules/world_save/save_testing.dm similarity index 100% rename from mods/persistence/modules/world_save/save_testing.dm rename to code/modules/world_save/save_testing.dm diff --git a/mods/persistence/modules/world_save/saved_vars.dm b/code/modules/world_save/saved_vars.dm similarity index 100% rename from mods/persistence/modules/world_save/saved_vars.dm rename to code/modules/world_save/saved_vars.dm diff --git a/mods/persistence/modules/world_save/saved_vars/matrix.dm b/code/modules/world_save/saved_vars/matrix.dm similarity index 100% rename from mods/persistence/modules/world_save/saved_vars/matrix.dm rename to code/modules/world_save/saved_vars/matrix.dm diff --git a/mods/persistence/modules/world_save/saved_vars/saved_icon_states.dm b/code/modules/world_save/saved_vars/saved_icon_states.dm similarity index 100% rename from mods/persistence/modules/world_save/saved_vars/saved_icon_states.dm rename to code/modules/world_save/saved_vars/saved_icon_states.dm diff --git a/mods/persistence/modules/world_save/saved_vars/saved_instances.dm b/code/modules/world_save/saved_vars/saved_instances.dm similarity index 95% rename from mods/persistence/modules/world_save/saved_vars/saved_instances.dm rename to code/modules/world_save/saved_vars/saved_instances.dm index ee52d150382..b9a9b9719e7 100644 --- a/mods/persistence/modules/world_save/saved_vars/saved_instances.dm +++ b/code/modules/world_save/saved_vars/saved_instances.dm @@ -6,7 +6,6 @@ //#TODO: Move to respective files SAVED_INSTANCIATE_ONLY(/obj/effect/decal/cleanable/lichen) -SAVED_INSTANCIATE_ONLY(/obj/effect/decal/cleanable/dirt) SAVED_INSTANCIATE_ONLY(/obj/effect/decal/cleanable/ash) SAVED_INSTANCIATE_ONLY(/obj/effect/decal/cleanable/flour) SAVED_INSTANCIATE_ONLY(/obj/effect/decal/cleanable/generic) diff --git a/mods/persistence/modules/world_save/saved_vars/saved_misc.dm b/code/modules/world_save/saved_vars/saved_misc.dm similarity index 69% rename from mods/persistence/modules/world_save/saved_vars/saved_misc.dm rename to code/modules/world_save/saved_vars/saved_misc.dm index 93e56108602..aaf940f2457 100644 --- a/mods/persistence/modules/world_save/saved_vars/saved_misc.dm +++ b/code/modules/world_save/saved_vars/saved_misc.dm @@ -9,7 +9,7 @@ SAVED_VAR(/zone, air) /////////////////////////////////////////////////////////////////////////////// // ATOM /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/atom, contents) +SAVED_VAR(/atom, contents) //#TODO: Use loc instead of contents. /////////////////////////////////////////////////////////////////////////////// //ATOM/MOVABLE @@ -39,17 +39,11 @@ SAVED_VAR(/obj, blood_DNA) /////////////////////////////////////////////////////////////////////////////// SAVED_VAR(/turf/simulated, air) -SAVED_VAR(/turf/simulated, dirt) SAVED_VAR(/turf/simulated, temperature) SAVED_VAR(/turf/simulated/floor, burnt) SAVED_VAR(/turf/simulated/floor, broken) -SAVED_VAR(/turf/simulated/floor/asteroid, dug) - -SAVED_VAR(/turf/exterior, owner) -SAVED_VAR(/turf/exterior, diggable) - SAVED_VAR(/turf/exterior/wall, strata_override) SAVED_VAR(/turf/exterior/wall, paint_color) SAVED_VAR(/turf/exterior/wall, material) @@ -67,273 +61,13 @@ SAVED_VAR(/turf/simulated/wall, girder_material) /////////////////////////////////////////////////////////////////////////////// //DATUMS /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/datum/extension/labels, labels) - -SAVED_VAR(/datum/extension/forensic_evidence, evidence) -SAVED_VAR(/datum/extension/forensic_evidence, last_updated) - -SAVED_VAR(/datum/extension/buried_resources, resources) -SAVED_VAR(/datum/extension/buried_resources, surveyed) - -SAVED_VAR(/datum/forensics, data) - -SAVED_VAR(/datum/fingerprint, full_print) -SAVED_VAR(/datum/fingerprint, completeness) - -SAVED_VAR(/datum/plantgene, genetype) -SAVED_VAR(/datum/plantgene, values) - -SAVED_VAR(/datum/wrapper/image, color) -SAVED_VAR(/datum/wrapper/image, icon_state) -SAVED_VAR(/datum/wrapper/image, alpha) -SAVED_VAR(/datum/wrapper/image, layer) -SAVED_VAR(/datum/wrapper/image, dir) -SAVED_VAR(/datum/wrapper/image, appearance_flags) - -SAVED_VAR(/datum/computer_file, holder) -SAVED_VAR(/datum/computer_file, filename) -SAVED_VAR(/datum/computer_file, read_access) -SAVED_VAR(/datum/computer_file, write_access) -SAVED_VAR(/datum/computer_file, mod_access) - -SAVED_FLATTEN(/datum/computer_file/data) -SAVED_VAR(/datum/computer_file/data, stored_data) -SAVED_VAR(/datum/computer_file/data, size) -SAVED_VAR(/datum/computer_file/data, block_size) - -SAVED_VAR(/datum/computer_file/program, program_state) -SAVED_VAR(/datum/computer_file/program, computer) - -SAVED_VAR(/datum/dna, uni_identity) -SAVED_VAR(/datum/dna, struc_enzymes) -SAVED_VAR(/datum/dna, unique_enzymes) -SAVED_VAR(/datum/dna, UI) -SAVED_VAR(/datum/dna, SE) -SAVED_VAR(/datum/dna, b_type) -SAVED_VAR(/datum/dna, real_name) -SAVED_VAR(/datum/dna, lineage) -SAVED_VAR(/datum/dna, species) -SAVED_VAR(/datum/dna, body_markings) - -SAVED_VAR(/datum/fluidtrack, direction) -SAVED_VAR(/datum/fluidtrack, basecolor) - -SAVED_VAR(/datum/gas_mixture, gas) -SAVED_VAR(/datum/gas_mixture, temperature) -SAVED_VAR(/datum/gas_mixture, total_moles) -SAVED_VAR(/datum/gas_mixture, volume) -SAVED_VAR(/datum/gas_mixture, group_multiplier) - -SAVED_VAR(/datum/mind, key) -SAVED_VAR(/datum/mind, name) -SAVED_VAR(/datum/mind, current) -SAVED_VAR(/datum/mind, active) -SAVED_VAR(/datum/mind, gen_relations_info) -SAVED_VAR(/datum/mind, assigned_role) -SAVED_VAR(/datum/mind, role_alt_title) -SAVED_VAR(/datum/mind, assigned_job) -SAVED_VAR(/datum/mind, objectives) -SAVED_VAR(/datum/mind, has_been_rev) -SAVED_VAR(/datum/mind, brigged_since) -SAVED_VAR(/datum/mind, initial_account) -SAVED_VAR(/datum/mind, initial_account_login) -SAVED_VAR(/datum/mind, philotic_damage) -SAVED_VAR(/datum/mind, age) -SAVED_VAR(/datum/mind, unique_id) -SAVED_VAR(/datum/mind, finished_chargen) -SAVED_VAR(/datum/mind, memories) - -SAVED_VAR(/datum/memory, creation_source) -SAVED_VAR(/datum/memory, memory) -SAVED_VAR(/datum/memory, tags) -SAVED_VAR(/datum/memory, owner) -SAVED_VAR(/datum/memory, _owner_name) -SAVED_VAR(/datum/memory, _owner_ckey) SAVED_VAR(/datum/pipeline, air) -SAVED_VAR(/datum/reagents/metabolism, metabolism_class) -SAVED_VAR(/datum/reagents/metabolism, parent) - -SAVED_VAR(/datum/reagents, total_volume) -SAVED_VAR(/datum/reagents, maximum_volume) -SAVED_VAR(/datum/reagents, reagent_volumes) -SAVED_VAR(/datum/reagents, reagent_data) -SAVED_VAR(/datum/reagents, my_atom) - -SAVED_VAR(/datum/robot_component/cell, stored_cell) - -//Seeds are procedurally generated and need to save everything -SAVED_VAR(/datum/seed, name) -SAVED_VAR(/datum/seed, seed_name) -SAVED_VAR(/datum/seed, seed_noun) -SAVED_VAR(/datum/seed, display_name) -SAVED_VAR(/datum/seed, can_self_harvest) -SAVED_VAR(/datum/seed, growth_stages) -SAVED_VAR(/datum/seed, traits) -SAVED_VAR(/datum/seed, mutants) -SAVED_VAR(/datum/seed, chems) -SAVED_VAR(/datum/seed, consume_gasses) -SAVED_VAR(/datum/seed, exude_gasses) -SAVED_VAR(/datum/seed, kitchen_tag) -SAVED_VAR(/datum/seed, trash_type) -SAVED_VAR(/datum/seed, splat_type) -SAVED_VAR(/datum/seed, force_layer) - -SAVED_VAR(/datum/seed_pile, name) -SAVED_VAR(/datum/seed_pile, amount) -SAVED_VAR(/datum/seed_pile, seed_type) -SAVED_VAR(/datum/seed_pile, seeds) -SAVED_VAR(/datum/seed_pile, ID) - -SAVED_VAR(/datum/shuttle, name) -SAVED_VAR(/datum/shuttle, shuttle_area) -SAVED_VAR(/datum/shuttle, current_location) -SAVED_VAR(/datum/shuttle, moving_status) -SAVED_VAR(/datum/shuttle, flags) - -SAVED_VAR(/datum/shuttle/autodock, current_dock_target) -SAVED_VAR(/datum/shuttle/autodock, dock_target) -SAVED_VAR(/datum/shuttle/autodock, docking_codes) -SAVED_VAR(/datum/shuttle/autodock, next_location) - -SAVED_VAR(/datum/stored_items, item_name) -SAVED_VAR(/datum/stored_items, item_path) -SAVED_VAR(/datum/stored_items, amount) -SAVED_VAR(/datum/stored_items, instances) -SAVED_VAR(/datum/stored_items, storing_object) - -SAVED_VAR(/datum/turbolift, current_floor) -SAVED_VAR(/datum/turbolift, doors) -SAVED_VAR(/datum/turbolift, floors) -SAVED_VAR(/datum/turbolift, control_panel_interior) - -SAVED_VAR(/datum/turbolift_floor, label) -SAVED_VAR(/datum/turbolift_floor, name) -SAVED_VAR(/datum/turbolift_floor, announce_str) -SAVED_VAR(/datum/turbolift_floor, arrival_sound) -SAVED_VAR(/datum/turbolift_floor, doors) -SAVED_VAR(/datum/turbolift_floor, ext_panel) - -SAVED_VAR(/datum/wires, wire_count) -SAVED_VAR(/datum/wires, wires_status) -SAVED_VAR(/datum/wires, wires) -SAVED_VAR(/datum/wires, signallers) - -SAVED_VAR(/datum/wound, current_stage) -SAVED_VAR(/datum/wound, damage) -SAVED_VAR(/datum/wound, bleed_timer) -SAVED_VAR(/datum/wound, bleed_threshold) -SAVED_VAR(/datum/wound, min_damage) -SAVED_VAR(/datum/wound, bandaged) -SAVED_VAR(/datum/wound, clamped) -SAVED_VAR(/datum/wound, salved) -SAVED_VAR(/datum/wound, disinfected) -SAVED_VAR(/datum/wound, created) -SAVED_VAR(/datum/wound, amount) -SAVED_VAR(/datum/wound, germ_level) -SAVED_VAR(/datum/wound, parent_organ) -SAVED_VAR(/datum/wound, embedded_objects) -SAVED_VAR(/datum/wound, desc_list) -SAVED_VAR(/datum/wound, damage_list) - -SAVED_VAR(/datum/robot_component, installed) -SAVED_VAR(/datum/robot_component, powered) -SAVED_VAR(/datum/robot_component, toggled) -SAVED_VAR(/datum/robot_component, brute_damage) -SAVED_VAR(/datum/robot_component, electronics_damage) -SAVED_VAR(/datum/robot_component, external_type) -SAVED_VAR(/datum/robot_component, wrapped) - -SAVED_VAR(/datum/skillset, skill_list) -SAVED_VAR(/datum/skillset, owner) -SAVED_VAR(/datum/skillset, skill_buffs) -SAVED_VAR(/datum/skillset, points_remaining) -SAVED_VAR(/datum/skillset, time_active) -SAVED_VAR(/datum/skillset, total_points_added) -SAVED_VAR(/datum/skillset, min_skill_level) -SAVED_VAR(/datum/skillset, textbook_skills) -SAVED_VAR(/datum/skillset, last_read_time) - -SAVED_VAR(/datum/skill_buff, buffs) -SAVED_VAR(/datum/skill_buff, limit) -SAVED_VAR(/datum/skill_buff, skillset) - -SAVED_VAR(/datum/lock, status) -SAVED_VAR(/datum/lock, lock_data) -SAVED_VAR(/datum/lock, holder) - -SAVED_VAR(/datum/integrated_io, name) -SAVED_VAR(/datum/integrated_io, holder) -SAVED_VAR(/datum/integrated_io, data) -SAVED_VAR(/datum/integrated_io, linked) -SAVED_VAR(/datum/integrated_io, io_type) -SAVED_VAR(/datum/integrated_io, pin_type) -SAVED_VAR(/datum/integrated_io, ord) - -SAVED_VAR(/datum/report_field, name) -SAVED_VAR(/datum/report_field, value) -SAVED_VAR(/datum/report_field, can_edit) -SAVED_VAR(/datum/report_field, required) -SAVED_VAR(/datum/report_field, ID) -SAVED_VAR(/datum/report_field, needs_big_box) -SAVED_VAR(/datum/report_field, ignore_value) -SAVED_VAR(/datum/report_field, write_access) -SAVED_VAR(/datum/report_field, read_access) - -SAVED_VAR(/datum/computer_file/report, title) -SAVED_VAR(/datum/computer_file/report, form_name) -SAVED_VAR(/datum/computer_file/report, creator) -SAVED_VAR(/datum/computer_file/report, file_time) -SAVED_VAR(/datum/computer_file/report, fields) -SAVED_VAR(/datum/computer_file/report, available_on_network) -SAVED_VAR(/datum/computer_file/report, logo) - -SAVED_VAR(/datum/extension/lockable, locked) -SAVED_VAR(/datum/extension/lockable, code) -SAVED_VAR(/datum/extension/lockable, l_code) -SAVED_VAR(/datum/extension/lockable, l_set) -SAVED_VAR(/datum/extension/lockable, l_setshort) -SAVED_VAR(/datum/extension/lockable, l_hacking) -SAVED_VAR(/datum/extension/lockable, emagged) -SAVED_VAR(/datum/extension/lockable, is_digital_lock) -SAVED_VAR(/datum/extension/lockable, open) -SAVED_VAR(/datum/extension/lockable, error) - -SAVED_VAR(/datum/computer_network, network_key) -SAVED_VAR(/datum/computer_network, network_features_enabled) -SAVED_VAR(/datum/computer_network, intrusion_detection_enabled) -SAVED_VAR(/datum/computer_network, intrusion_detection_alarm) -SAVED_VAR(/datum/computer_network, banned_nids) -SAVED_VAR(/datum/computer_network, chat_channels) - -SAVED_VAR(/datum/computer_file/data/cloning, mob_age) -SAVED_VAR(/datum/computer_file/data/cloning, skill_list) -SAVED_VAR(/datum/computer_file/data/cloning, languages) -SAVED_VAR(/datum/computer_file/data/cloning, mind_id) -SAVED_VAR(/datum/computer_file/data/cloning, dna) -SAVED_VAR(/datum/computer_file/data/cloning, backup_date) - -SAVED_VAR(/datum/extension/assembly, parts) -SAVED_VAR(/datum/extension/assembly, enabled) -SAVED_VAR(/datum/extension/assembly, damage) - -SAVED_VAR(/datum/wrapper, key) - -SAVED_VAR(/datum/wrapper_holder, wrapped) - -SAVED_VAR(/datum/wrapper/area, name) - -SAVED_VAR(/datum/wrapper/map_data, height) -SAVED_VAR(/datum/wrapper/map_data, landmark_loc) - -SAVED_VAR(/datum/wrapper/late/extension, holder_p_id) -SAVED_VAR(/datum/wrapper/late/extension, extension_saved_vars) - /////////////////////////////////////////////////////////////////////////////// //MOB /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/mob/living, health) +SAVED_VAR(/mob/living, current_health) SAVED_VAR(/mob/living, mob_bump_flag) SAVED_VAR(/mob/living, mob_swap_flags) SAVED_VAR(/mob/living, mob_push_flags) @@ -398,45 +132,11 @@ SAVED_VAR(/mob/living/carbon, chem_effects) SAVED_VAR(/mob/living/carbon, chem_doses) SAVED_VAR(/mob/living/carbon, default_language) -SAVED_VAR(/mob/living/carbon/brain, container) -SAVED_VAR(/mob/living/carbon/brain, timeofhostdeath) -SAVED_VAR(/mob/living/carbon/brain, emp_damage) -SAVED_VAR(/mob/living/carbon/brain, alert) - SAVED_VAR(/mob/living/carbon/alien, language) SAVED_VAR(/mob/living/silicon, idcard) -SAVED_VAR(/mob/living/silicon/robot, lights_on) -SAVED_VAR(/mob/living/silicon/robot, sight_mode) -SAVED_VAR(/mob/living/silicon/robot, custom_name) -SAVED_VAR(/mob/living/silicon/robot, module_category) -SAVED_VAR(/mob/living/silicon/robot, module) -SAVED_VAR(/mob/living/silicon/robot, module_active) -SAVED_VAR(/mob/living/silicon/robot, module_state_1) -SAVED_VAR(/mob/living/silicon/robot, module_state_2) -SAVED_VAR(/mob/living/silicon/robot, module_state_3) -SAVED_VAR(/mob/living/silicon/robot, cell) -SAVED_VAR(/mob/living/silicon/robot, components) -SAVED_VAR(/mob/living/silicon/robot, mmi) -SAVED_VAR(/mob/living/silicon/robot, opened) -SAVED_VAR(/mob/living/silicon/robot, emagged) -SAVED_VAR(/mob/living/silicon/robot, wiresexposed) -SAVED_VAR(/mob/living/silicon/robot, locked) -SAVED_VAR(/mob/living/silicon/robot, has_power) -SAVED_VAR(/mob/living/silicon/robot, ident) -SAVED_VAR(/mob/living/silicon/robot, modtype) -SAVED_VAR(/mob/living/silicon/robot, killswitch) -SAVED_VAR(/mob/living/silicon/robot, killswitch_time) -SAVED_VAR(/mob/living/silicon/robot, weapon_lock) -SAVED_VAR(/mob/living/silicon/robot, weaponlock_time) -SAVED_VAR(/mob/living/silicon/robot, lockcharge) -SAVED_VAR(/mob/living/silicon/robot, speed) -SAVED_VAR(/mob/living/silicon/robot, scrambledcodes) -SAVED_VAR(/mob/living/silicon/robot, tracking_entities) -SAVED_VAR(/mob/living/silicon/robot, braintype) -SAVED_VAR(/mob/living/silicon/robot, intenselight) -SAVED_VAR(/mob/living/silicon/robot, vtec) + SAVED_VAR(/mob/living/silicon/pai, ram) SAVED_VAR(/mob/living/silicon/pai, software) @@ -464,20 +164,10 @@ SAVED_VAR(/mob/living/simple_animal/hostile, return_damage_max) SAVED_VAR(/mob/living/simple_animal/mushroom, seed) SAVED_VAR(/mob/living/simple_animal/mushroom, harvest_time) -SAVED_VAR(/mob/living/slime, toxloss) -SAVED_VAR(/mob/living/slime, is_adult) -SAVED_VAR(/mob/living/slime, cores) -SAVED_VAR(/mob/living/slime, mutation_chance) -SAVED_VAR(/mob/living/slime, powerlevel) -SAVED_VAR(/mob/living/slime, amount_grown) -SAVED_VAR(/mob/living/slime, hurt_temperature) -SAVED_VAR(/mob/living/slime, die_temperature) -SAVED_VAR(/mob/living/slime, core_removal_stage) -SAVED_VAR(/mob/living/slime, ingested) - /////////////////////////////////////////////////////////////////////////////// // ITEMS /////////////////////////////////////////////////////////////////////////////// + SAVED_VAR(/obj/item/ammo_casing, BB) SAVED_VAR(/obj/item/flashlight, on) @@ -559,7 +249,6 @@ SAVED_VAR(/obj/item/forensics/sample, evidence) SAVED_VAR(/obj/item/key, key_data) SAVED_VAR(/obj/item/baton, status) -SAVED_VAR(/obj/item/baton, bcell) SAVED_VAR(/obj/item/paper, info) SAVED_VAR(/obj/item/paper, info_links) @@ -613,7 +302,7 @@ SAVED_VAR(/obj/vehicle/train/cargo/engine, key) SAVED_VAR(/obj/vehicle/train, passenger_allowed) SAVED_VAR(/obj/vehicle, on) -SAVED_VAR(/obj/vehicle, health) +SAVED_VAR(/obj/vehicle, current_health) SAVED_VAR(/obj/vehicle, open) SAVED_VAR(/obj/vehicle, locked) SAVED_VAR(/obj/vehicle, stat) @@ -642,8 +331,6 @@ SAVED_VAR(/obj/item/fuel_assembly, matter) SAVED_VAR(/obj/item/fuel_assembly, percent_depleted) SAVED_VAR(/obj/item/fuel_assembly, radioactivity) -SAVED_VAR(/obj/item/key/soap, uses) - SAVED_VAR(/obj/item/lock_construct, lock_data) SAVED_VAR(/obj/item/passport, info) @@ -662,24 +349,6 @@ SAVED_VAR(/obj/item/flame/lighter, reagents) /////////////////////////////////////////////////////////////////////////////// // item/clothing /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/item/clothing/head/welding, up) - -SAVED_VAR(/obj/item/clothing/shoes/magboots, magpulse) - -SAVED_VAR(/obj/item/clothing/suit/space/void, boots) -SAVED_VAR(/obj/item/clothing/suit/space/void, helmet) -SAVED_VAR(/obj/item/clothing/suit/space/void, tank) - -SAVED_VAR(/obj/item/clothing/suit/storage, pockets) -SAVED_VAR(/obj/item/clothing/suit/storage, slots) - -SAVED_VAR(/obj/item/clothing/shoes, shine) -SAVED_VAR(/obj/item/clothing/shoes, hidden_item) -SAVED_VAR(/obj/item/clothing/shoes, attached_cuffs) - -SAVED_VAR(/obj/item/clothing/under, sensor_mode) -SAVED_VAR(/obj/item/clothing/under, rolled_down) -SAVED_VAR(/obj/item/clothing/under, rolled_sleeves) /////////////////////////////////////////////////////////////////////////////// // item/assembly @@ -712,53 +381,18 @@ SAVED_VAR(/obj/item/assembly_holder, a_right) SAVED_VAR(/obj/item/assembly_holder, special_assembly) SAVED_VAR(/obj/item/assembly_holder, master) -/////////////////////////////////////////////////////////////////////////////// -// item/card -/////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/item/card/id, access) -SAVED_VAR(/obj/item/card/id, registered_name) -SAVED_VAR(/obj/item/card/id, associated_account_id) -SAVED_VAR(/obj/item/card/id, associated_network_account) -SAVED_VAR(/obj/item/card/id, age) -SAVED_VAR(/obj/item/card/id, blood_type) -SAVED_VAR(/obj/item/card/id, dna_hash) -SAVED_VAR(/obj/item/card/id, fingerprint_hash) -SAVED_VAR(/obj/item/card/id, card_gender) -SAVED_VAR(/obj/item/card/id, front) -SAVED_VAR(/obj/item/card/id, side) -SAVED_VAR(/obj/item/card/id, assignment) -SAVED_VAR(/obj/item/card/id, military_branch) -SAVED_VAR(/obj/item/card/id, military_rank) -SAVED_VAR(/obj/item/card/id, formal_name_prefix) -SAVED_VAR(/obj/item/card/id, formal_name_suffix) -SAVED_VAR(/obj/item/card/id, detail_color) -SAVED_VAR(/obj/item/card/id, extra_details) /////////////////////////////////////////////////////////////////////////////// // item/disk /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/item/disk/botany, genes) -SAVED_VAR(/obj/item/disk/botany, genesource) - -SAVED_VAR(/obj/item/disk/tech_disk, stored_tech) /////////////////////////////////////////////////////////////////////////////// // item/gun /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/item/gun/launcher/pneumatic, tank) -SAVED_VAR(/obj/item/gun/launcher/pneumatic, item_storage) -SAVED_VAR(/obj/item/gun/launcher/pneumatic, pressure_setting) - -SAVED_VAR(/obj/item/gun/magnetic, cell) -SAVED_VAR(/obj/item/gun/magnetic, capacitor) -SAVED_VAR(/obj/item/gun/magnetic, loaded) -SAVED_VAR(/obj/item/gun/magnetic, load_type) /////////////////////////////////////////////////////////////////////////////// // item/implant /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/item/implant/freedom, activation_emote) - /////////////////////////////////////////////////////////////////////////////// // CIRCUITS @@ -891,74 +525,11 @@ SAVED_VAR(/obj/item/integrated_circuit/time/ticker, is_running) /////////////////////////////////////////////////////////////////////////////// //Effects /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/effect/decal/cleanable, age) -SAVED_VAR(/obj/effect/decal/cleanable, cleanable_scent) -SAVED_VAR(/obj/effect/decal/cleanable, scent_type) -SAVED_VAR(/obj/effect/decal/cleanable, scent_intensity) -SAVED_VAR(/obj/effect/decal/cleanable, scent_descriptor) -SAVED_VAR(/obj/effect/decal/cleanable, scent_range) - -SAVED_VAR(/obj/effect/decal/cleanable/blood, base_icon) -SAVED_VAR(/obj/effect/decal/cleanable/blood, basecolor) -SAVED_VAR(/obj/effect/decal/cleanable/blood, amount) -SAVED_VAR(/obj/effect/decal/cleanable/blood, drytime) -SAVED_VAR(/obj/effect/decal/cleanable/blood, blood_size) -SAVED_VAR(/obj/effect/decal/cleanable/blood, chemical) -SAVED_VAR(/obj/effect/decal/cleanable/blood, blood_data) - -SAVED_VAR(/obj/effect/energy_net, health) -SAVED_VAR(/obj/effect/energy_net, countdown) -SAVED_VAR(/obj/effect/energy_net, captured) - -SAVED_VAR(/obj/effect/vine, health) -SAVED_VAR(/obj/effect/vine, parent) -SAVED_VAR(/obj/effect/vine, seed) -SAVED_VAR(/obj/effect/vine, plant) -SAVED_VAR(/obj/effect/vine, max_growth) - -SAVED_VAR(/obj/effect/fusion_particle_catcher, parent) -SAVED_VAR(/obj/effect/fusion_particle_catcher, mysize) - -SAVED_VAR(/obj/effect/fluid, last_flow_strength) -SAVED_VAR(/obj/effect/fluid, last_flow_dir) -SAVED_VAR(/obj/effect/fluid, reagents) - -SAVED_VAR(/obj/effect/effect/smoke/chem, splash_amount) -SAVED_VAR(/obj/effect/effect/smoke/chem, destination) -SAVED_VAR(/obj/effect/effect/smoke/chem, reagents) + /////////////////////////////////////////////////////////////////////////////// // Structures /////////////////////////////////////////////////////////////////////////////// -SAVED_VAR(/obj/structure, reagents) - -SAVED_VAR(/obj/structure, health) -SAVED_VAR(/obj/structure, material) -SAVED_VAR(/obj/structure, reinf_material) -SAVED_VAR(/obj/structure, dismantled) -SAVED_VAR(/obj/structure, req_access) - -SAVED_VAR(/obj/structure/closet/secure_closet/personal, registered_name) - -SAVED_VAR(/obj/structure/closet, broken) -SAVED_VAR(/obj/structure/closet, opened) -SAVED_VAR(/obj/structure/closet, locked) - -SAVED_VAR(/obj/structure/tank_rack, oxygen_tanks) -SAVED_VAR(/obj/structure/tank_rack, hydrogen_tanks) - -SAVED_VAR(/obj/structure/disposalconstruct, dpdir) - -SAVED_VAR(/obj/structure/disposalpipe, dpdir) -SAVED_VAR(/obj/structure/disposalpipe, base_icon_state) - -SAVED_VAR(/obj/structure/door_assembly, state) -SAVED_VAR(/obj/structure/door_assembly, glass) -SAVED_VAR(/obj/structure/door_assembly, glass_material) -SAVED_VAR(/obj/structure/door_assembly, door_color) -SAVED_VAR(/obj/structure/door_assembly, stripe_color) -SAVED_VAR(/obj/structure/door_assembly, symbol_color) -SAVED_VAR(/obj/structure/door_assembly, electronics) SAVED_VAR(/obj/structure/janitorialcart, mybag) SAVED_VAR(/obj/structure/janitorialcart, mymop) @@ -1130,8 +701,7 @@ SAVED_VAR(/obj/machinery/door/window, base_state) SAVED_VAR(/obj/machinery/door, visible) SAVED_VAR(/obj/machinery/door, glass) -SAVED_VAR(/obj/machinery/door, health) -SAVED_VAR(/obj/machinery/door, maxhealth) +SAVED_VAR(/obj/machinery/door, max_health) SAVED_VAR(/obj/machinery/door, close_door_at) SAVED_VAR(/obj/machinery/door, pry_mod) SAVED_VAR(/obj/machinery/door, block_air_zones) @@ -1179,7 +749,6 @@ SAVED_VAR(/obj/machinery/faxmachine, scanner_item) SAVED_VAR(/obj/machinery/faxmachine, quick_dial) SAVED_VAR(/obj/machinery/faxmachine, fax_history) -SAVED_VAR(/obj/machinery/portable_atmospherics/canister, health) SAVED_VAR(/obj/machinery/portable_atmospherics/canister, valve_open) SAVED_VAR(/obj/machinery/portable_atmospherics/canister, release_pressure) SAVED_VAR(/obj/machinery/portable_atmospherics/canister, canister_color) @@ -1204,7 +773,6 @@ SAVED_VAR(/obj/machinery/portable_atmospherics/hydroponics, seed) SAVED_VAR(/obj/machinery/portable_atmospherics, air_contents) SAVED_VAR(/obj/machinery/portable_atmospherics, holding) -SAVED_VAR(/obj/machinery/porta_turret, health) SAVED_VAR(/obj/machinery/porta_turret, locked) SAVED_VAR(/obj/machinery/porta_turret, installation) SAVED_VAR(/obj/machinery/porta_turret, check_access) @@ -1319,11 +887,6 @@ SAVED_VAR(/obj/machinery/computer/ship/sensors, trackers) SAVED_VAR(/obj/machinery/computer/ship, linked) -SAVED_VAR(/obj/machinery/stellar_anchor, anchored_areas) -SAVED_VAR(/obj/machinery/stellar_anchor, sector_name) -SAVED_VAR(/obj/machinery/stellar_anchor, sector_type) -SAVED_VAR(/obj/machinery/stellar_anchor, sector_color) - SAVED_VAR(/obj/machinery/atmospherics/omni/mixer, max_flow_rate) SAVED_VAR(/obj/machinery/atmospherics/omni/mixer, set_flow_rate) SAVED_VAR(/obj/machinery/atmospherics/omni/mixer, max_output_pressure) @@ -1360,8 +923,6 @@ SAVED_VAR(/obj/machinery/computer/air_control, data) SAVED_VAR(/obj/machinery/network, overheated) SAVED_VAR(/obj/machinery/network, initial_network_id) SAVED_VAR(/obj/machinery/network, initial_network_key) -SAVED_VAR(/obj/machinery/network, saved_network_tag) -SAVED_VAR(/obj/machinery/network, saved_address) SAVED_VAR(/obj/machinery/network/mainframe, initial_roles) @@ -1374,19 +935,12 @@ SAVED_VAR(/obj/machinery/mining/drill, capacity) SAVED_VAR(/obj/machinery/mining/drill, supports) SAVED_VAR(/obj/machinery/mining/drill, supported) -SAVED_VAR(/obj/machinery/rad_collector, health) SAVED_VAR(/obj/machinery/rad_collector, melted) SAVED_VAR(/obj/machinery/rad_collector, active) SAVED_VAR(/obj/machinery/rad_collector, locked) SAVED_VAR(/obj/machinery/rad_collector, last_rads) SAVED_VAR(/obj/machinery/rad_collector, loaded_tank) -SAVED_VAR(/obj/machinery/mantrap, occupant) -SAVED_VAR(/obj/machinery/mantrap, entrance_dir) - -SAVED_VAR(/obj/machinery/cloning_pod, occupant) -SAVED_VAR(/obj/machinery/cloning_pod, error) - SAVED_VAR(/obj/machinery/docking_beacon, display_name) SAVED_VAR(/obj/machinery/docking_beacon, permitted_shuttles) SAVED_VAR(/obj/machinery/docking_beacon, locked) diff --git a/mods/persistence/modules/world_save/saved_vars/saved_overrides.dm b/code/modules/world_save/saved_vars/saved_overrides.dm similarity index 100% rename from mods/persistence/modules/world_save/saved_vars/saved_overrides.dm rename to code/modules/world_save/saved_vars/saved_overrides.dm diff --git a/mods/persistence/modules/world_save/saved_vars/saved_skipped.dm b/code/modules/world_save/saved_vars/saved_skipped.dm similarity index 96% rename from mods/persistence/modules/world_save/saved_vars/saved_skipped.dm rename to code/modules/world_save/saved_vars/saved_skipped.dm index 1dd3dd19a76..f7bf2b48d8e 100644 --- a/mods/persistence/modules/world_save/saved_vars/saved_skipped.dm +++ b/code/modules/world_save/saved_vars/saved_skipped.dm @@ -105,4 +105,12 @@ /turf/unsimulated/mimic_edge should_save = FALSE /turf/simulated/mimic_edge + should_save = FALSE + +// +// Effects +// + +//Is just an overlay made on fluid update by turfs +/obj/effect/flood should_save = FALSE \ No newline at end of file diff --git a/mods/persistence/modules/world_save/serializers/_serializer.dm b/code/modules/world_save/serializers/_serializer.dm similarity index 100% rename from mods/persistence/modules/world_save/serializers/_serializer.dm rename to code/modules/world_save/serializers/_serializer.dm diff --git a/mods/persistence/modules/world_save/serializers/json_serializer.dm b/code/modules/world_save/serializers/json_serializer.dm similarity index 98% rename from mods/persistence/modules/world_save/serializers/json_serializer.dm rename to code/modules/world_save/serializers/json_serializer.dm index 555d7da0086..37eea2c6003 100644 --- a/mods/persistence/modules/world_save/serializers/json_serializer.dm +++ b/code/modules/world_save/serializers/json_serializer.dm @@ -43,6 +43,8 @@ else if(istype(VV, /decl)) var/decl/VD = VV results[V] = "[SERIALIZER_TYPE_DECL]#[VD.type]" + else if(ispointer(VV)) + CRASH("Pointer type is unsupported! ([VV])") else if(istype(VV, /datum)) if(should_flatten(VV)) if(VV in object_parent) @@ -126,6 +128,8 @@ else if(istype(V, /decl)) var/decl/VD = V F_V = "[SERIALIZER_TYPE_DECL]#[VD.type]" + else if(ispointer(V)) + CRASH("Pointer type is unsupported! ([V])") else if(istype(V, /datum)) if(should_flatten(V)) if(V in list_parent) diff --git a/mods/persistence/modules/world_save/serializers/one_off_serializer.dm b/code/modules/world_save/serializers/one_off_serializer.dm similarity index 100% rename from mods/persistence/modules/world_save/serializers/one_off_serializer.dm rename to code/modules/world_save/serializers/one_off_serializer.dm diff --git a/mods/persistence/modules/world_save/serializers/sql_serializer.dm b/code/modules/world_save/serializers/sql_serializer.dm similarity index 99% rename from mods/persistence/modules/world_save/serializers/sql_serializer.dm rename to code/modules/world_save/serializers/sql_serializer.dm index 9ab49f3ebfd..a8b66348c92 100644 --- a/mods/persistence/modules/world_save/serializers/sql_serializer.dm +++ b/code/modules/world_save/serializers/sql_serializer.dm @@ -199,6 +199,8 @@ var/global/list/serialization_time_spent_type var/decl/VD = VV VT = SERIALIZER_TYPE_DECL VV = "[VD.type]" + else if(ispointer(VV)) + CRASH("Pointer type is unsupported! ([VV])") else if(get_wrapper(VV)) VT = SERIALIZER_TYPE_WRAPPER var/wrapper_path = get_wrapper(VV) @@ -307,6 +309,8 @@ var/global/list/serialization_time_spent_type var/decl/key_d = key KT = SERIALIZER_TYPE_DECL KV = "[key_d.type]" + else if(ispointer(key)) + CRASH("Pointer type is unsupported! ([key])") else if(get_wrapper(key)) KT = SERIALIZER_TYPE_WRAPPER var/wrapper_path = get_wrapper(key) @@ -357,6 +361,8 @@ var/global/list/serialization_time_spent_type var/decl/ED = EV ET = SERIALIZER_TYPE_DECL EV = "[ED.type]" + else if(ispointer(EV)) + CRASH("Pointer type is unsupported! ([EV])") else if(get_wrapper(EV)) ET = SERIALIZER_TYPE_WRAPPER var/wrapper_path = get_wrapper(EV) diff --git a/mods/persistence/modules/world_save/serializers/sql_serializer_db.dm b/code/modules/world_save/serializers/sql_serializer_db.dm similarity index 100% rename from mods/persistence/modules/world_save/serializers/sql_serializer_db.dm rename to code/modules/world_save/serializers/sql_serializer_db.dm diff --git a/mods/persistence/modules/world_save/wrappers/_late_wrapper.dm b/code/modules/world_save/wrappers/_late_wrapper.dm similarity index 100% rename from mods/persistence/modules/world_save/wrappers/_late_wrapper.dm rename to code/modules/world_save/wrappers/_late_wrapper.dm diff --git a/mods/persistence/modules/world_save/wrappers/_wrapper.dm b/code/modules/world_save/wrappers/_wrapper.dm similarity index 93% rename from mods/persistence/modules/world_save/wrappers/_wrapper.dm rename to code/modules/world_save/wrappers/_wrapper.dm index 8c3679a1ecc..7674688abad 100644 --- a/mods/persistence/modules/world_save/wrappers/_wrapper.dm +++ b/code/modules/world_save/wrappers/_wrapper.dm @@ -2,6 +2,8 @@ var/key var/wrapper_for +SAVED_VAR(/datum/wrapper, key) + // called after object is deserialized while in the serializer. Return a reference to the game data key is pointing to. /datum/wrapper/proc/on_deserialize(var/serializer/curr_serializer) diff --git a/mods/persistence/modules/world_save/wrappers/_wrapper_holder.dm b/code/modules/world_save/wrappers/_wrapper_holder.dm similarity index 87% rename from mods/persistence/modules/world_save/wrappers/_wrapper_holder.dm rename to code/modules/world_save/wrappers/_wrapper_holder.dm index 10e748152cd..2109cb16e41 100644 --- a/mods/persistence/modules/world_save/wrappers/_wrapper_holder.dm +++ b/code/modules/world_save/wrappers/_wrapper_holder.dm @@ -1,6 +1,8 @@ /datum/wrapper_holder // Dummy object to hold wrappers for deserialization, when the wrapped objects don't necessarily have a physical reference. Has to be created manually. var/list/wrapped = list() +SAVED_VAR(/datum/wrapper_holder, wrapped) + /datum/wrapper_holder/New(wrapped_list) if(wrapped_list) wrapped += wrapped_list diff --git a/mods/persistence/modules/world_save/wrappers/area_wrapper.dm b/code/modules/world_save/wrappers/area_wrapper.dm similarity index 94% rename from mods/persistence/modules/world_save/wrappers/area_wrapper.dm rename to code/modules/world_save/wrappers/area_wrapper.dm index f5f0b86a72f..f43a1fb259a 100644 --- a/mods/persistence/modules/world_save/wrappers/area_wrapper.dm +++ b/code/modules/world_save/wrappers/area_wrapper.dm @@ -5,6 +5,8 @@ // Area details var/name +SAVED_VAR(/datum/wrapper/area, name) + /datum/wrapper/area/on_serialize(var/area/A, var/serializer/curr_serializer) key = "[A.type]" name = A.name diff --git a/mods/persistence/modules/world_save/wrappers/channel_wrapper.dm b/code/modules/world_save/wrappers/channel_wrapper.dm similarity index 100% rename from mods/persistence/modules/world_save/wrappers/channel_wrapper.dm rename to code/modules/world_save/wrappers/channel_wrapper.dm diff --git a/mods/persistence/modules/world_save/wrappers/escrow_holder.dm b/code/modules/world_save/wrappers/escrow_holder.dm similarity index 100% rename from mods/persistence/modules/world_save/wrappers/escrow_holder.dm rename to code/modules/world_save/wrappers/escrow_holder.dm diff --git a/mods/persistence/modules/world_save/wrappers/extensions/_extension_wrapper.dm b/code/modules/world_save/wrappers/extensions/_extension_wrapper.dm similarity index 92% rename from mods/persistence/modules/world_save/wrappers/extensions/_extension_wrapper.dm rename to code/modules/world_save/wrappers/extensions/_extension_wrapper.dm index f068186dbea..2ec662a911f 100644 --- a/mods/persistence/modules/world_save/wrappers/extensions/_extension_wrapper.dm +++ b/code/modules/world_save/wrappers/extensions/_extension_wrapper.dm @@ -3,6 +3,9 @@ var/holder_p_id var/list/extension_saved_vars = list() +SAVED_VAR(/datum/wrapper/late/extension, holder_p_id) +SAVED_VAR(/datum/wrapper/late/extension, extension_saved_vars) + /datum/wrapper/late/extension/on_serialize(datum/extension/object, serializer/curr_serializer) . = ..() if(!object.holder) diff --git a/mods/persistence/modules/world_save/wrappers/extensions/labels_wrapper.dm b/code/modules/world_save/wrappers/extensions/labels_wrapper.dm similarity index 100% rename from mods/persistence/modules/world_save/wrappers/extensions/labels_wrapper.dm rename to code/modules/world_save/wrappers/extensions/labels_wrapper.dm diff --git a/mods/persistence/modules/world_save/wrappers/image_wrapper.dm b/code/modules/world_save/wrappers/image_wrapper.dm similarity index 74% rename from mods/persistence/modules/world_save/wrappers/image_wrapper.dm rename to code/modules/world_save/wrappers/image_wrapper.dm index 620ecd92982..ae88ddc1b18 100644 --- a/mods/persistence/modules/world_save/wrappers/image_wrapper.dm +++ b/code/modules/world_save/wrappers/image_wrapper.dm @@ -11,6 +11,13 @@ var/pixel_y = 0 var/appearance_flags +SAVED_VAR(/datum/wrapper/image, color) +SAVED_VAR(/datum/wrapper/image, icon_state) +SAVED_VAR(/datum/wrapper/image, alpha) +SAVED_VAR(/datum/wrapper/image, layer) +SAVED_VAR(/datum/wrapper/image, dir) +SAVED_VAR(/datum/wrapper/image, appearance_flags) + /datum/wrapper/image/on_serialize(var/image/I, var/serializer/curr_serializer) key = "[I.icon]" diff --git a/mods/persistence/modules/world_save/wrappers/map_data_wrapper.dm b/code/modules/world_save/wrappers/map_data_wrapper.dm similarity index 89% rename from mods/persistence/modules/world_save/wrappers/map_data_wrapper.dm rename to code/modules/world_save/wrappers/map_data_wrapper.dm index ea8d745b1f4..f6da67665a1 100644 --- a/mods/persistence/modules/world_save/wrappers/map_data_wrapper.dm +++ b/code/modules/world_save/wrappers/map_data_wrapper.dm @@ -7,6 +7,9 @@ var/height var/landmark_loc +SAVED_VAR(/datum/wrapper/map_data, height) +SAVED_VAR(/datum/wrapper/map_data, landmark_loc) + /datum/wrapper/map_data/on_serialize(var/obj/abstract/map_data/M, var/serializer/curr_serializer) key = "[M.type]" diff --git a/mods/persistence/modules/world_save/wrappers/weakref_wrapper.dm b/code/modules/world_save/wrappers/weakref_wrapper.dm similarity index 100% rename from mods/persistence/modules/world_save/wrappers/weakref_wrapper.dm rename to code/modules/world_save/wrappers/weakref_wrapper.dm diff --git a/code/modules/xenoarcheaology/artifacts/standalone/autocloner.dm b/code/modules/xenoarcheaology/artifacts/standalone/autocloner.dm index 7490ac3ccf0..4c3ed1a86ec 100644 --- a/code/modules/xenoarcheaology/artifacts/standalone/autocloner.dm +++ b/code/modules/xenoarcheaology/artifacts/standalone/autocloner.dm @@ -25,7 +25,7 @@ /mob/living/simple_animal/cat, /mob/living/simple_animal/corgi, /mob/living/simple_animal/corgi/puppy, - /mob/living/simple_animal/chicken, + /mob/living/simple_animal/fowl/chicken, /mob/living/simple_animal/cow, /mob/living/simple_animal/hostile/retaliate/parrot, /mob/living/simple_animal/crab, diff --git a/code/modules/xenoarcheaology/artifacts/standalone/replicator.dm b/code/modules/xenoarcheaology/artifacts/standalone/replicator.dm index 97fff9c8da8..39a459eeb9e 100644 --- a/code/modules/xenoarcheaology/artifacts/standalone/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/standalone/replicator.dm @@ -57,8 +57,8 @@ /obj/item/flame/lighter, /obj/item/light/bulb, /obj/item/light/tube, - /obj/item/pickaxe, - /obj/item/shovel, + /obj/item/tool/pickaxe, + /obj/item/tool/shovel, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, diff --git a/code/modules/xenoarcheaology/artifacts/triggers/chemical.dm b/code/modules/xenoarcheaology/artifacts/triggers/chemical.dm index ab5c05c7777..0d4020d7b8a 100644 --- a/code/modules/xenoarcheaology/artifacts/triggers/chemical.dm +++ b/code/modules/xenoarcheaology/artifacts/triggers/chemical.dm @@ -16,7 +16,7 @@ . = ..() if(istype(O, /obj/item/chems)) for(var/reagent in required_chemicals) - if(O.reagents.remove_reagent(reagent, 1)) + if(O.remove_from_reagents(reagent, 1)) return TRUE /datum/artifact_trigger/chemical/water @@ -36,6 +36,7 @@ name = "presence of acid" required_chemicals = list( /decl/material/liquid/acid, + /decl/material/liquid/acid/hydrochloric, /decl/material/liquid/acid/polyacid ) diff --git a/code/modules/xenoarcheaology/artifacts/triggers/gas.dm b/code/modules/xenoarcheaology/artifacts/triggers/gas.dm index ede86ae080d..4c970db3bb2 100644 --- a/code/modules/xenoarcheaology/artifacts/triggers/gas.dm +++ b/code/modules/xenoarcheaology/artifacts/triggers/gas.dm @@ -6,8 +6,8 @@ /datum/artifact_trigger/gas/New() if(!gas_needed) gas_needed = list(pick(decls_repository.get_decl_paths_of_subtype(/decl/material/gas)) = rand(1,10)) - var/decl/material/gas/G = GET_DECL(gas_needed[1]) - name = "concentration of [G.name]" + var/decl/material/gas/gas = GET_DECL(gas_needed[1]) + name = "concentration of [gas.name]" /datum/artifact_trigger/gas/copy() var/datum/artifact_trigger/gas/C = ..() diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index cf78f34f6c7..0be33c98cc3 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -10,7 +10,6 @@ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME var/excavation_level = 0 var/datum/artifact_find/artifact_find - var/last_act = 0 /obj/structure/boulder/Initialize(var/ml, var/_mat, var/coloration) . = ..() @@ -24,36 +23,29 @@ return ..() /obj/structure/boulder/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/depth_scanner)) var/obj/item/depth_scanner/C = I C.scan_atom(user, src) - return + return TRUE if(istype(I, /obj/item/measuring_tape)) var/obj/item/measuring_tape/P = I - user.visible_message("\The [user] extends \the [P] towards \the [src].", "You extend \the [P] towards \the [src].") + user.visible_message( + SPAN_NOTICE("\The [user] extends \the [P] towards \the [src]."), + SPAN_NOTICE("You extend \the [P] towards \the [src].") + ) if(do_after(user, 15)) - to_chat(user, "\The [src] has been excavated to a depth of [src.excavation_level]cm.") - return - - if(istype(I, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = I - - if(last_act + P.digspeed > world.time)//prevents message spam - return - last_act = world.time - - to_chat(user, "You start [P.drill_verb] [src].") - - if(!do_after(user, P.digspeed)) - return - - to_chat(user, "You finish [P.drill_verb] [src].") - excavation_level += P.excavation_amount + to_chat(user, SPAN_NOTICE("\The [src] has been excavated to a depth of [src.excavation_level]cm.")) + return TRUE + if(I.do_tool_interaction(TOOL_PICK, user, src, 3 SECONDS, set_cooldown = TRUE)) + excavation_level += I.get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) if(excavation_level > 200) - //failure - user.visible_message("\The [src] suddenly crumbles away.", "\The [src] has disintegrated under your onslaught, any secrets it was holding are long gone.") + user.visible_message( + SPAN_DANGER("\The [src] suddenly crumbles away."), + SPAN_DANGER("\The [src] has disintegrated under your onslaught. Any secrets it was holding are long gone.") + ) qdel(src) return @@ -66,20 +58,26 @@ var/obj/structure/artifact/X = O if(X.my_effect) X.my_effect.artifact_id = artifact_find.artifact_id - src.visible_message("\The [src] suddenly crumbles away.") + visible_message(SPAN_DANGER("\The [src] suddenly crumbles away.")) else - user.visible_message("\The [src] suddenly crumbles away.", "\The [src] has been whittled away under your careful excavation, but there was nothing of interest inside.") + user.visible_message( + SPAN_DANGER("\The [src] suddenly crumbles away."), + SPAN_DANGER("\The [src] has been whittled away under your careful excavation, but there was nothing of interest inside.") + ) qdel(src) + return TRUE + + return ..() /obj/structure/boulder/Bumped(AM) . = ..() if(ishuman(AM)) var/mob/living/carbon/human/H = AM - var/obj/item/pickaxe/P = (locate() in H.get_inactive_held_items()) - if(istype(P)) - src.attackby(P, H) - + for(var/obj/item/P in H.get_inactive_held_items()) + if(IS_PICK(P)) + attackby(P, H) + return else if(isrobot(AM)) var/mob/living/silicon/robot/R = AM - if(istype(R.module_active,/obj/item/pickaxe)) + if(IS_PICK(R.module_active)) attackby(R.module_active,R) diff --git a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm index b6d2d50adef..9cd5a4e78ae 100644 --- a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm +++ b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm @@ -42,4 +42,4 @@ START_PROCESSING(SSobj, src) /obj/item/chems/glass/replenishing/Process() - reagents.add_reagent(spawning_id, 0.3) \ No newline at end of file + add_to_reagents(spawning_id, 0.3) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/finds/find_types/guns.dm b/code/modules/xenoarcheaology/finds/find_types/guns.dm index bad46a6a963..3111921fc19 100644 --- a/code/modules/xenoarcheaology/finds/find_types/guns.dm +++ b/code/modules/xenoarcheaology/finds/find_types/guns.dm @@ -16,7 +16,7 @@ //33% chance to be able to reload the gun with human ammunition if(prob(66)) - new_gun.caliber = "999" + new_gun.caliber = CALIBER_UNUSABLE //33% chance to fill it with a random amount of bullets new_gun.max_shells = rand(1,12) new_gun.loaded.Cut() @@ -64,13 +64,16 @@ //10% chance to have an unchargeable cell //15% chance to gain a random amount of starting energy, otherwise start with an empty cell - if(prob(10)) - new_gun.power_supply.maxcharge = 0 - if(prob(15)) - new_gun.power_supply.charge = rand(0, new_gun.power_supply.maxcharge) - else - new_gun.power_supply.charge = 0 - + var/obj/item/cell/power_supply = new_gun.get_cell() + if(power_supply) + if(prob(10)) + power_supply.maxcharge = 0 + if(prob(15)) + power_supply.charge = rand(0, power_supply.maxcharge) + else + power_supply.charge = 0 + power_supply.update_icon() + new_gun.update_icon() return new_gun /decl/archaeological_find/laser/new_icon() diff --git a/code/modules/xenoarcheaology/finds/find_types/mundane.dm b/code/modules/xenoarcheaology/finds/find_types/mundane.dm index a8ca2935444..7d1ea51ec77 100644 --- a/code/modules/xenoarcheaology/finds/find_types/mundane.dm +++ b/code/modules/xenoarcheaology/finds/find_types/mundane.dm @@ -9,9 +9,9 @@ /decl/archaeological_find/cutlery item_type = "cutlery" possible_types = list( - /obj/item/kitchen/utensil/fork, - /obj/item/knife/table, - /obj/item/kitchen/utensil/spoon + /obj/item/utensil/fork, + /obj/item/utensil/knife, + /obj/item/utensil/spoon ) /decl/archaeological_find/cutlery/new_icon_state() diff --git a/code/modules/xenoarcheaology/finds/find_types/statuette.dm b/code/modules/xenoarcheaology/finds/find_types/statuette.dm index c2f480dd53f..beb93d05fa3 100644 --- a/code/modules/xenoarcheaology/finds/find_types/statuette.dm +++ b/code/modules/xenoarcheaology/finds/find_types/statuette.dm @@ -41,7 +41,7 @@ //see if we've identified anyone nearby if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len) var/mob/living/carbon/human/M = pop(nearby_mobs) - if(M in view(7,src) && M.health > 20) + if(M in view(7,src) && M.current_health > 20) if(prob(50)) bloodcall(M) nearby_mobs.Add(M) diff --git a/code/modules/xenoarcheaology/finds/strange_rock.dm b/code/modules/xenoarcheaology/finds/strange_rock.dm index e30753a5abb..a18758c6e93 100644 --- a/code/modules/xenoarcheaology/finds/strange_rock.dm +++ b/code/modules/xenoarcheaology/finds/strange_rock.dm @@ -4,7 +4,7 @@ desc = "Seems to have some unusal strata evident throughout it." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "strange" - origin_tech = "{'materials':5}" + origin_tech = @'{"materials":5}' material = /decl/material/solid/stone/sandstone var/obj/item/inside @@ -19,7 +19,7 @@ . = ..() /obj/item/strangerock/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/pickaxe/xeno/brush)) + if(istype(I, /obj/item/tool/xeno/brush)) if(inside) inside.dropInto(loc) visible_message(SPAN_NOTICE("\The [src] is brushed away, revealing \the [inside].")) diff --git a/code/modules/xenoarcheaology/machinery/artifact_analyser.dm b/code/modules/xenoarcheaology/machinery/artifact_analyser.dm index 5cf1f67dc33..af753c97347 100644 --- a/code/modules/xenoarcheaology/machinery/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/machinery/artifact_analyser.dm @@ -29,7 +29,7 @@ if(!owned_scanner) owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) if(owned_scanner) - events_repository.register(/decl/observ/destroyed, owned_scanner, src, /obj/machinery/artifact_analyser/proc/clear_scanner) + events_repository.register(/decl/observ/destroyed, owned_scanner, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_scanner)) /obj/machinery/artifact_analyser/proc/clear_scanner() if(owned_scanner) @@ -39,7 +39,7 @@ /obj/machinery/artifact_analyser/proc/set_object(var/obj/O) if(O != scanned_object && O) clear_object() - events_repository.register(/decl/observ/destroyed, O, src, /obj/machinery/artifact_analyser/proc/clear_object) + events_repository.register(/decl/observ/destroyed, O, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_object)) scanned_object = O /obj/machinery/artifact_analyser/proc/clear_object() diff --git a/code/modules/xenoarcheaology/machinery/artifact_harvester.dm b/code/modules/xenoarcheaology/machinery/artifact_harvester.dm index e04ff905dac..9c8139e77f9 100644 --- a/code/modules/xenoarcheaology/machinery/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/machinery/artifact_harvester.dm @@ -5,7 +5,7 @@ /obj/machinery/artifact_harvester name = "exotic particle harvester" icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "xenoarchaeology_harvester" + icon_state = "xenoarch_harvester" anchored = TRUE density = TRUE idle_power_usage = 50 @@ -31,7 +31,7 @@ if(!owned_scanner) owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) if(owned_scanner) - events_repository.register(/decl/observ/destroyed, owned_scanner, src, /obj/machinery/artifact_analyser/proc/clear_scanner) + events_repository.register(/decl/observ/destroyed, owned_scanner, src, TYPE_PROC_REF(/obj/machinery/artifact_analyser, clear_scanner)) /obj/machinery/artifact_harvester/Destroy() clear_scanner() @@ -53,7 +53,7 @@ if(cur_artifact == new_artifact || !new_artifact) return clear_artifact() - events_repository.register(/decl/observ/destroyed, new_artifact, src, /obj/machinery/artifact_harvester/proc/clear_artifact) + events_repository.register(/decl/observ/destroyed, new_artifact, src, TYPE_PROC_REF(/obj/machinery/artifact_harvester, clear_artifact)) cur_artifact = new_artifact /obj/machinery/artifact_harvester/attackby(var/obj/I, var/mob/user) @@ -98,9 +98,9 @@ /obj/machinery/artifact_harvester/on_update_icon() if(inserted_battery) - icon_state = "xenoarchaeology_harvester" + icon_state = "xenoarch_harvester" else - icon_state = "xenoarchaeology_harvester_battery" + icon_state = "xenoarch_harvester_battery" /obj/machinery/artifact_harvester/proc/set_mode(new_mode) mode = new_mode diff --git a/code/modules/xenoarcheaology/machinery/geosample_scanner.dm b/code/modules/xenoarcheaology/machinery/geosample_scanner.dm index b4df95cc6e1..a88e5046041 100644 --- a/code/modules/xenoarcheaology/machinery/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/machinery/geosample_scanner.dm @@ -265,7 +265,7 @@ radiation = 0 t_left_radspike = 0 if(used_coolant) - src.reagents.remove_any(used_coolant) + remove_any_reagents(used_coolant) used_coolant = 0 /obj/machinery/radiocarbon_spectrometer/proc/complete_scan() diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index 3f10112a63b..03510f0db9e 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -134,7 +134,7 @@ activated = 1 current_tick = 0 START_PROCESSING(SSobj, src) - events_repository.register(/decl/observ/moved, src, src, /obj/item/anodevice/proc/on_move) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/obj/item/anodevice, on_move)) if(inserted_battery?.battery_effect?.activated == 0) inserted_battery.battery_effect.ToggleActivate(1) diff --git a/code/modules/xenoarcheaology/tools/anomaly_container.dm b/code/modules/xenoarcheaology/tools/anomaly_container.dm index 3ad102b8aeb..19f0e781d94 100644 --- a/code/modules/xenoarcheaology/tools/anomaly_container.dm +++ b/code/modules/xenoarcheaology/tools/anomaly_container.dm @@ -37,7 +37,7 @@ underlays.Cut() desc = initial(desc) -/obj/structure/artifact/handle_mouse_drop(atom/over, mob/user) +/obj/structure/artifact/handle_mouse_drop(atom/over, mob/user, params) if(istype(over, /obj/structure/anomaly_container)) Bumped(user) var/obj/structure/anomaly_container/box = over diff --git a/code/modules/xenoarcheaology/tools/anomaly_scanner.dm b/code/modules/xenoarcheaology/tools/anomaly_scanner.dm index 9a09ac427fd..94555b7c17c 100644 --- a/code/modules/xenoarcheaology/tools/anomaly_scanner.dm +++ b/code/modules/xenoarcheaology/tools/anomaly_scanner.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "flashgun" item_state = "flashgun" - origin_tech = "{'wormholes':3,'magnets':3}" + origin_tech = @'{"wormholes":3,"magnets":3}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/xenoarcheaology/tools/depth_scanner.dm b/code/modules/xenoarcheaology/tools/depth_scanner.dm index 5698d8d2566..c09dedbda44 100644 --- a/code/modules/xenoarcheaology/tools/depth_scanner.dm +++ b/code/modules/xenoarcheaology/tools/depth_scanner.dm @@ -3,7 +3,7 @@ desc = "A device used to check spatial depth and density of rock outcroppings." icon = 'icons/obj/items/device/depth_scanner.dmi' icon_state = ICON_STATE_WORLD - origin_tech = "{'magnets':2,'engineering':2,'wormholes':2}" + origin_tech = @'{"magnets":2,"engineering":2,"wormholes":2}' material = /decl/material/solid/metal/steel matter = list( /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, diff --git a/code/modules/xenoarcheaology/tools/equipment.dm b/code/modules/xenoarcheaology/tools/equipment.dm index d61abd58828..bd74e2db349 100644 --- a/code/modules/xenoarcheaology/tools/equipment.dm +++ b/code/modules/xenoarcheaology/tools/equipment.dm @@ -22,7 +22,23 @@ ARMOR_RAD = ARMOR_RAD_SHIELDED ) anomaly_shielding = 0.6 - allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/excavation,/obj/item/pickaxe,/obj/item/scanner/health,/obj/item/scanner/breath,/obj/item/measuring_tape,/obj/item/ano_scanner,/obj/item/depth_scanner,/obj/item/core_sampler,/obj/item/gps,/obj/item/pinpointer/radio,/obj/item/radio/beacon,/obj/item/pickaxe/xeno,/obj/item/storage/bag/fossils) + allowed = list( + /obj/item/flashlight, + /obj/item/tank, + /obj/item/suit_cooling_unit, + /obj/item/stack/flag, + /obj/item/storage/excavation, + /obj/item/tool, + /obj/item/scanner/breath, + /obj/item/measuring_tape, + /obj/item/ano_scanner, + /obj/item/depth_scanner, + /obj/item/core_sampler, + /obj/item/gps, + /obj/item/pinpointer/radio, + /obj/item/radio/beacon, + /obj/item/storage/bag/fossils + ) /obj/item/clothing/head/helmet/space/void/excavation name = "excavation voidsuit helmet" @@ -36,7 +52,6 @@ ARMOR_RAD = ARMOR_RAD_SHIELDED ) anomaly_shielding = 0.2 - light_overlay = "hardhat_light" /obj/item/clothing/suit/space/void/excavation/prepared helmet = /obj/item/clothing/head/helmet/space/void/excavation @@ -54,7 +69,7 @@ /obj/item/gps, /obj/item/measuring_tape, /obj/item/flashlight, - /obj/item/pickaxe, + /obj/item/tool, /obj/item/depth_scanner, /obj/item/camera, /obj/item/paper, @@ -69,6 +84,6 @@ /obj/item/storage/excavation, /obj/item/anobattery, /obj/item/ano_scanner, - /obj/item/stack/tape_roll/barricade_tape/research, - /obj/item/pickaxe/xeno/hand) + /obj/item/stack/tape_roll/barricade_tape/research + ) material = /decl/material/solid/organic/leather/synth diff --git a/code/modules/xenoarcheaology/tools/misc.dm b/code/modules/xenoarcheaology/tools/misc.dm index 868128238e7..b40fbe78c6c 100644 --- a/code/modules/xenoarcheaology/tools/misc.dm +++ b/code/modules/xenoarcheaology/tools/misc.dm @@ -5,10 +5,10 @@ return list( /obj/item/book/manual/excavation, /obj/item/book/manual/mass_spectrometry, - /obj/item/book/manual/materials_chemistry_analysis, - /obj/item/book/manual/anomaly_testing, - /obj/item/book/manual/anomaly_spectroscopy, - /obj/item/book/manual/stasis, + /obj/item/book/fluff/materials_chemistry_analysis, + /obj/item/book/fluff/anomaly_testing, + /obj/item/book/fluff/anomaly_spectroscopy, + /obj/item/book/fluff/stasis, ) /obj/structure/closet/secure_closet/xenoarchaeologist @@ -35,6 +35,8 @@ /obj/structure/closet/excavation name = "excavation tools" closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools + //mapper preview + color = COLOR_YELLOW_GRAY /obj/structure/closet/excavation/WillContain() return list( @@ -47,9 +49,8 @@ /obj/item/gps, /obj/item/pinpointer/radio, /obj/item/clothing/glasses/meson, - /obj/item/pickaxe, + /obj/item/tool, /obj/item/measuring_tape, - /obj/item/pickaxe/xeno/hand, /obj/item/storage/bag/fossils, /obj/item/hand_labeler, /obj/item/stack/tape_roll/barricade_tape/research, @@ -61,24 +62,6 @@ /obj/machinery/alarm/monitor/isolation req_access = list(list(access_research, access_atmospherics, access_engine_equip)) -// -// Archeology designs -// - -//Structures -/decl/material/solid/metal/chromium/generate_recipes(reinforce_material) - . = ..() - . += /datum/stack_recipe/structure/anomaly_container - -/datum/stack_recipe/structure/anomaly_container - title = "anomaly container" - result_type = /obj/structure/anomaly_container - time = 10 SECONDS - one_per_turf = TRUE - on_floor = TRUE - difficulty = MAT_VALUE_VERY_HARD_DIY - apply_material_name = FALSE - //Devices /datum/fabricator_recipe/protolathe/tool/anomaly_battery path = /obj/item/anobattery @@ -97,28 +80,28 @@ path = /obj/item/measuring_tape /datum/fabricator_recipe/protolathe/tool/hand_pickaxe - path = /obj/item/pickaxe/xeno/hand + path = /obj/item/tool/xeno/hand /datum/fabricator_recipe/protolathe/tool/xeno_brush - path = /obj/item/pickaxe/xeno/brush + path = /obj/item/tool/xeno/brush /datum/fabricator_recipe/protolathe/tool/xeno_pick_one - path = /obj/item/pickaxe/xeno/one_pick + path = /obj/item/tool/xeno/one_pick /datum/fabricator_recipe/protolathe/tool/xeno_pick_two - path = /obj/item/pickaxe/xeno/two_pick + path = /obj/item/tool/xeno/two_pick /datum/fabricator_recipe/protolathe/tool/xeno_pick_three - path = /obj/item/pickaxe/xeno/three_pick + path = /obj/item/tool/xeno/three_pick /datum/fabricator_recipe/protolathe/tool/xeno_pick_four - path = /obj/item/pickaxe/xeno/four_pick + path = /obj/item/tool/xeno/four_pick /datum/fabricator_recipe/protolathe/tool/xeno_pick_five - path = /obj/item/pickaxe/xeno/five_pick + path = /obj/item/tool/xeno/five_pick /datum/fabricator_recipe/protolathe/tool/xeno_pick_six - path = /obj/item/pickaxe/xeno/six_pick + path = /obj/item/tool/xeno/six_pick //Clothes /datum/fabricator_recipe/textiles/protective/bio_hood_anomaly diff --git a/code/modules/xenoarcheaology/tools/picks.dm b/code/modules/xenoarcheaology/tools/picks.dm deleted file mode 100644 index 1d9eea8282e..00000000000 --- a/code/modules/xenoarcheaology/tools/picks.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/item/pickaxe/xeno - name = "master xenoarch pickaxe" - desc = "A miniature excavation tool for precise digging." - icon = 'icons/obj/xenoarchaeology.dmi' - item_state = "screwdriver_brown" - force = 3 - throwforce = 0 - attack_verb = list("stabbed", "jabbed", "spiked", "attacked") - material = /decl/material/solid/metal/chromium - matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY) - w_class = ITEM_SIZE_SMALL - drill_verb = "delicately picking" - digspeed = 20 - excavation_amount = 0 - sharp = 1 - -/obj/item/pickaxe/xeno/examine(mob/user) - . = ..() - to_chat(user, "This tool has a [excavation_amount] centimetre excavation depth.") - -/obj/item/pickaxe/xeno/brush - name = "wire brush" - icon_state = "pick_brush" - slot_flags = SLOT_EARS - force = 1 - attack_verb = list("prodded", "attacked") - desc = "A wood-handled brush with thick metallic wires for clearing away dust and loose scree." - excavation_amount = 1 - drill_sound = 'sound/weapons/thudswoosh.ogg' - drill_verb = "brushing" - sharp = 0 - material = /decl/material/solid/organic/wood - matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_REINFORCEMENT) - -/obj/item/pickaxe/xeno/one_pick - name = "2cm pick" - icon_state = "pick1" - excavation_amount = 2 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/two_pick - name = "4cm pick" - icon_state = "pick2" - excavation_amount = 4 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/three_pick - name = "6cm pick" - icon_state = "pick3" - excavation_amount = 6 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/four_pick - name = "8cm pick" - icon_state = "pick4" - excavation_amount = 8 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/five_pick - name = "10cm pick" - icon_state = "pick5" - excavation_amount = 10 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/six_pick - name = "12cm pick" - icon_state = "pick6" - excavation_amount = 12 - -/obj/item/pickaxe/xeno/hand - name = "hand pickaxe" - icon_state = "pick_hand" - item_state = "sword0" - digspeed = 30 - desc = "A smaller, more precise version of the pickaxe." - excavation_amount = 30 - drill_sound = 'sound/items/Crowbar.ogg' - drill_verb = "clearing" - material = /decl/material/solid/metal/chromium - matter = list(/decl/material/solid/metal/steel = MATTER_AMOUNT_SECONDARY) - w_class = ITEM_SIZE_NORMAL - force = 6 - throwforce = 3 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Pack for holding pickaxes - -/obj/item/storage/excavation - name = "excavation pick set" - icon = 'icons/obj/items/storage/excavation.dmi' - icon_state = "excavation" - item_state = "utility" - desc = "A rugged case containing a set of standardized picks used in archaeological digs." - item_state = "syringe_kit" - storage_slots = 7 - slot_flags = SLOT_LOWER_BODY - w_class = ITEM_SIZE_NORMAL - can_hold = list(/obj/item/pickaxe/xeno) - max_storage_space = 18 - max_w_class = ITEM_SIZE_NORMAL - use_to_pickup = 1 - material = /decl/material/solid/organic/leather/synth - -/obj/item/storage/excavation/WillContain() - return list( - /obj/item/pickaxe/xeno/brush, - /obj/item/pickaxe/xeno/one_pick, - /obj/item/pickaxe/xeno/two_pick, - /obj/item/pickaxe/xeno/three_pick, - /obj/item/pickaxe/xeno/four_pick, - /obj/item/pickaxe/xeno/five_pick, - /obj/item/pickaxe/xeno/six_pick - ) - -/obj/item/storage/excavation/empty/WillContain() - return - -/obj/item/storage/excavation/handle_item_insertion() - ..() - sort_picks() - -/obj/item/storage/excavation/proc/sort_picks() - var/list/obj/item/pickaxe/xeno/picksToSort = list() - for(var/obj/item/pickaxe/xeno/P in src) - picksToSort += P - P.forceMove(null) - while(picksToSort.len) - var/min = 200 // No pick is bigger than 200 - var/selected = 0 - for(var/i = 1 to picksToSort.len) - var/obj/item/pickaxe/xeno/current = picksToSort[i] - if(current.excavation_amount <= min) - selected = i - min = current.excavation_amount - var/obj/item/pickaxe/xeno/smallest = picksToSort[selected] - smallest.forceMove(src) - picksToSort -= smallest - prepare_ui() diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 39eb1497975..d2daf82b18d 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -3,7 +3,7 @@ desc = "A coiled metallic tape used to check dimensions and lengths." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "measuring" - origin_tech = "{'materials':1}" + origin_tech = @'{"materials":1}' material = /decl/material/solid/metal/steel w_class = ITEM_SIZE_SMALL diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm index ae9f0a4d90f..70b06a5f24a 100644 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ b/code/modules/xgm/xgm_gas_mixture.dm @@ -19,6 +19,12 @@ ///The last cached color of the gas mixture var/tmp/cached_mix_color +SAVED_VAR(/datum/gas_mixture, gas) +SAVED_VAR(/datum/gas_mixture, temperature) +SAVED_VAR(/datum/gas_mixture, total_moles) +SAVED_VAR(/datum/gas_mixture, volume) +SAVED_VAR(/datum/gas_mixture, group_multiplier) + /datum/gas_mixture/New(_volume, _temperature, _group_multiplier) if(!isnull(_volume)) volume = _volume @@ -260,7 +266,7 @@ /datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1) if(ratio <= 0) return null - out_group_multiplier = clamp(1, out_group_multiplier, group_multiplier) + out_group_multiplier = clamp(out_group_multiplier, 1, group_multiplier) ratio = min(ratio, 1) @@ -571,3 +577,21 @@ cached_mix_color = rgb(colors[1] / total_color_weight, colors[2] / total_color_weight, colors[3] / total_color_weight, colors[4] / total_color_weight) return cached_mix_color + +//Update the gasmix after VV tempering +/decl/vv_set_handler/gas_mixture_handler + handled_type = /datum/gas_mixture + handled_vars = list("total_moles", "temperature", "volume") + predicates = list(/proc/is_num_predicate) + +/decl/vv_set_handler/gas_mixture_handler/handle_set_var(var/datum/gas_mixture/GM, variable, var_value, client) + GM.update_values() + +//Update gasmix when the gas list changes +/decl/vv_set_handler/gas_mixture_gases_handler + handled_type = /datum/gas_mixture + handled_vars = list("gas") + predicates = null + +/decl/vv_set_handler/gas_mixture_gases_handler/handle_set_var(var/datum/gas_mixture/GM, variable, var_value, client) + GM.update_values() \ No newline at end of file diff --git a/code/procs/AStar.dm b/code/procs/AStar.dm index e3cf62730d7..01e4213f805 100644 --- a/code/procs/AStar.dm +++ b/code/procs/AStar.dm @@ -12,7 +12,7 @@ And for the distance one i wrote: /turf/proc/Distance So an example use might be: -src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance) +src.path_list = AStar(src.loc, target.loc, TYPE_PROC_REF(/turf, AdjacentTurfs), TYPE_PROC_REF(/turf, Distance)) Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use. diff --git a/code/procs/hud.dm b/code/procs/hud.dm index c42577190d2..760d1b2fb37 100644 --- a/code/procs/hud.dm +++ b/code/procs/hud.dm @@ -28,9 +28,9 @@ the HUD updates properly! */ P.Client.images += patient.hud_list[STATUS_HUD] else var/sensor_level = getsensorlevel(patient) - if(sensor_level >= SUIT_SENSOR_VITAL) + if(sensor_level >= VITALS_SENSOR_VITAL) P.Client.images += patient.hud_list[HEALTH_HUD] - if(sensor_level >= SUIT_SENSOR_BINARY) + if(sensor_level >= VITALS_SENSOR_BINARY) P.Client.images += patient.hud_list[LIFE_HUD] //Security HUDs. Pass a value for the second argument to enable implant viewing or other special features. diff --git a/code/unit_tests/chemistry_tests.dm b/code/unit_tests/chemistry_tests.dm index 6b16b290696..344b3d3a4e7 100644 --- a/code/unit_tests/chemistry_tests.dm +++ b/code/unit_tests/chemistry_tests.dm @@ -12,7 +12,7 @@ var/atom/from = new donor_type(test_loc) from.create_reagents(container_volume) - from.reagents.add_reagent(/decl/material/liquid/water, container_volume) + from.add_to_reagents(/decl/material/liquid/water, container_volume) var/atom/target if(ispath(recipient_type, /turf) && istype(test_loc, recipient_type)) @@ -219,9 +219,8 @@ // Cleanup pt. 2 chem_refs.Cut() - var/obj/effect/fluid/fluid = locate() in spawn_spot - if(fluid) - qdel(fluid) + if(spawn_spot.reagents?.total_volume) + spawn_spot.reagents.clear_reagents() failures += "- spawn turf had fluids post-test" // Report status. diff --git a/code/unit_tests/closets.dm b/code/unit_tests/closets.dm index 4c268a2c6f5..9bc236f8ff9 100644 --- a/code/unit_tests/closets.dm +++ b/code/unit_tests/closets.dm @@ -55,21 +55,21 @@ ) var/fail_msg = "Insane closet appearances found: " if(LAZYLEN(bad_decl)) - fail_msg += "\nDecl did not add itself to appropriate global list:\n[jointext("\t[bad_icon]", "\n")]." + fail_msg += "\nDecl did not add itself to appropriate global list:\n[jointext(bad_icon, "\n\t")]." if(LAZYLEN(bad_icon)) - fail_msg += "\nNull final icon values:\n[jointext("\t[bad_icon]", "\n")]." + fail_msg += "\nNull final icon values:\n\t[jointext(bad_icon, "\n\t")]." if(LAZYLEN(bad_colour)) - fail_msg += "\nNull color values:\n[jointext("\t[bad_colour]", "\n")]." + fail_msg += "\nNull color values:\n\t[jointext(bad_colour, "\n\t")]." if(LAZYLEN(bad_base_icon)) - fail_msg += "\nNull base icon value:\n[jointext("\t[bad_base_icon]", "\n")]." + fail_msg += "\nNull base icon value:\n\t[jointext(bad_base_icon, "\n\t")]." if(LAZYLEN(bad_base_state)) - fail_msg += "\nMissing state from base icon:\n[jointext("\t[bad_base_state]", "\n")]." + fail_msg += "\nMissing state from base icon:\n\t[jointext(bad_base_state, "\n\t")]." if(LAZYLEN(bad_decal_icon)) - fail_msg += "\nDecal icon not set but decal lists populated:\n[jointext("\t[bad_decal_icon]", "\n")]." + fail_msg += "\nDecal icon not set but decal lists populated:\n\t[jointext(bad_decal_icon, "\n\t")]." if(LAZYLEN(bad_decal_colour)) - fail_msg += "\nNull color in final decal entry:\n[jointext("\t[bad_decal_colour]", "\n")]." + fail_msg += "\nNull color in final decal entry:\n\t[jointext(bad_decal_colour, "\n\t")]." if(LAZYLEN(bad_decal_state)) - fail_msg += "\nNon-existent decal icon state:\n[jointext("\t[bad_decal_state]", "\n")]." + fail_msg += "\nNon-existent decal icon state:\n\t[jointext(bad_decal_state, "\n\t")]." fail(fail_msg) else diff --git a/code/unit_tests/del_the_world.dm b/code/unit_tests/del_the_world.dm index 2175864694c..d234c9a0dd9 100644 --- a/code/unit_tests/del_the_world.dm +++ b/code/unit_tests/del_the_world.dm @@ -6,6 +6,16 @@ /datum/unit_test/del_the_world/start_test() var/turf/spawn_loc = get_safe_turf() var/list/cached_contents = spawn_loc.contents.Copy() + + /// Types to except from GC checking tests. + var/list/gc_exceptions = list( + // I hate doing this, but until the graph tests are fixed by someone who actually understands them, + // this is the best I can do without breaking other stuff. + /datum/node/physical, + // Randomly fails to GC during CI, cause unclear. Remove this if the root cause is identified. + /obj/item/organ/external/chest + ) + var/list/ignore = typesof( // will error if the area already has one /obj/machinery/power/apc, @@ -24,12 +34,13 @@ // Needs a level above. /obj/structure/stairs, // Fluid system related; causes issues with atoms spawned on the turf. - /obj/abstract/fluid_mapped, - /obj/effect/fluid, + /obj/abstract/landmark/mapped_fluid, /obj/effect/flood, // Not valid when spawned manually. /obj/effect/overmap, /obj/effect/shuttle_landmark, + // Generally not expected to be spawned outside of a mob HUD context. + /obj/screen, // Docking controllers can only exist once with a given id_tag in the world. And some subtypes are defined with an id_tag /obj/machinery/embedded_controller/radio/simple_docking_controller, ) + list( @@ -120,9 +131,7 @@ //Alright, time to see if anything messed up var/list/cache_for_sonic_speed = SSgarbage.items for(var/path in cache_for_sonic_speed) - if(ispath(path, /datum/node/physical)) - // I hate doing this, but until the graph tests are fixed by someone who actually understands them, - // this is the best I can do without breaking other stuff. + if(path in gc_exceptions) continue var/datum/qdel_item/item = cache_for_sonic_speed[path] if(item.failures) diff --git a/code/unit_tests/equipment_tests.dm b/code/unit_tests/equipment_tests.dm index e15fa9dbad6..6aefebbfbf8 100644 --- a/code/unit_tests/equipment_tests.dm +++ b/code/unit_tests/equipment_tests.dm @@ -146,7 +146,7 @@ failure_list += "[item] was equipped to [equipped_location] despite failing isEquipped (should not be equipped)." /datum/unit_test/equipment_slot_test/start_test() - var/mob/living/carbon/human/subject = new(get_safe_turf()) + var/mob/living/carbon/human/subject = new(get_safe_turf(), SPECIES_HUMAN) // force human so default map species doesn't mess with anything created_atoms |= subject var/list/failures = list() diff --git a/code/unit_tests/food_tests.dm b/code/unit_tests/food_tests.dm index 864a5709320..9c2ceb4f1ec 100644 --- a/code/unit_tests/food_tests.dm +++ b/code/unit_tests/food_tests.dm @@ -13,6 +13,10 @@ for (var/subtype in subtypesof(/obj/item/chems/food/slice)) var/obj/item/chems/food/slice/slice = subtype + + if(TYPE_IS_ABSTRACT(slice)) + continue + if(!initial(slice.whole_path)) log_bad("[slice] does not define a whole_path.") any_failed = TRUE diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm index 3af3d356736..8a03c5f1aa2 100644 --- a/code/unit_tests/icon_tests.dm +++ b/code/unit_tests/icon_tests.dm @@ -2,6 +2,42 @@ name = "ICON STATE template" template = /datum/unit_test/icon_test +/datum/unit_test/icon_test/turfs_shall_have_icon_states + name = "ICON STATE - Turf Subtypes Shall Have Icon States" + var/list/except_types = list( + /turf/unsimulated/mimic_edge, + /turf/exterior/mimic_edge, + /turf/simulated/mimic_edge, + /turf/open + ) + +/datum/unit_test/icon_test/turfs_shall_have_icon_states/start_test() + var/list/failures = list() + for(var/turf_type in subtypesof(/turf)) + var/turf/turf_prototype = turf_type + if(TYPE_IS_ABSTRACT(turf_prototype)) + continue + var/excepted = FALSE + for(var/exception_path in except_types) + if(ispath(turf_type, exception_path)) + excepted = TRUE + break + if(excepted) + continue + var/test_icon_state = initial(turf_prototype.icon_state) + var/test_icon = initial(turf_prototype.icon) + if(isnull(test_icon_state)) + failures += "[turf_prototype] - null icon state" + if(!test_icon) + failures += "[turf_prototype] - null icon" + if(!isnull(test_icon_state) && test_icon && !check_state_in_icon(test_icon_state, test_icon)) + failures += "[turf_prototype] - state [test_icon_state] not in icon [test_icon]" + if(length(failures)) + fail("Turf subtypes had missing icons or icon states:\n[jointext(failures, "\n")].") + else + pass("All turf subtypes had valid icon states.") + return 1 + /datum/unit_test/icon_test/item_modifiers_shall_have_icon_states name = "ICON STATE - Item Modifiers Shall Have Icon Sates" var/list/icon_states_by_type @@ -69,6 +105,29 @@ pass("All signs have valid icon states.") return 1 +/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states + name = "ICON STATE - Random spawners shall have existing icon states" + +/datum/unit_test/icon_test/random_spawners_shall_have_existing_icon_states/start_test() + var/list/failures = list() + for(var/test_type in subtypesof(/obj/random)) + var/obj/random/prototype = test_type + if(TYPE_IS_ABSTRACT(prototype)) + continue + var/test_icon = initial(prototype.icon) + if(!test_icon) + failures += "[test_type] - no icon" + var/test_icon_state = initial(prototype.icon_state) + if(!test_icon_state) + failures += "[test_type] - no icon_state" + if(test_icon_state && test_icon && !check_state_in_icon(test_icon_state, test_icon)) + failures += "[test_type] - icon_state [test_icon_state] not present in [test_icon]" + if(length(failures)) + fail("Some random spawners have an invalid icon state:\n[jointext(failures, "\n")]") + else + pass("All random spawners had a valid icon state.") + return 1 + /datum/unit_test/icon_test/floor_decals_shall_have_existing_icon_states name = "ICON STATE - Floor decals shall have existing icon states" var/static/list/excepted_types = list( diff --git a/code/unit_tests/items.dm b/code/unit_tests/items.dm index 2bdf8d336a3..e6d7dce493d 100644 --- a/code/unit_tests/items.dm +++ b/code/unit_tests/items.dm @@ -69,4 +69,41 @@ /datum/item_unit_test/constant //Checks that modify the objects -/datum/item_unit_test/volatile \ No newline at end of file +/datum/item_unit_test/volatile + +///////////////////////////////////////////////////////// +// Additional miscellaneous item tests below. +///////////////////////////////////////////////////////// + +// Not really an items test in an inheritance sense, but here for organization. +/datum/unit_test/paint_kits_shall_have_existing_states + name = "ITEMS: Paint Kits Shall Have Existing Icon States" + var/mech_decal_icon = 'icons/mecha/mech_decals.dmi' + var/static/list/blend_modes = list( + BLEND_OVERLAY, + BLEND_ADD, + BLEND_MULTIPLY, + BLEND_SUBTRACT + ) +// TODO: add other kits in here for validation somehow. +/datum/unit_test/paint_kits_shall_have_existing_states/start_test() + var/list/failures + for(var/kit_type in typesof(/obj/item/kit/paint)) + var/obj/item/kit/paintkit = kit_type + if(TYPE_IS_ABSTRACT(paintkit)) + continue + var/kit_state = initial(paintkit.new_state) + if(!kit_state) + LAZYADD(failures, "kit type [kit_type] has no decal state defined.") + else if(!check_state_in_icon(kit_state, mech_decal_icon)) + LAZYADD(failures, "kit type [kit_type] decal state '[kit_state]' not present in '[mech_decal_icon]'") + else + var/kit_blend = initial(paintkit.new_blend) + if(!(kit_blend in blend_modes)) + LAZYADD(failures, "kit type [kit_type] decal blend '[kit_blend || "NULL"]' not present in blend mode list") + + if(length(failures)) + fail("[length(failures)] type\s had problems:\n[jointext(failures, "\n")]") + else + pass("No kit types had errors.") + return 1 diff --git a/code/unit_tests/json.dm b/code/unit_tests/json.dm index 84002b7ad5c..9d1dbb31c1c 100644 --- a/code/unit_tests/json.dm +++ b/code/unit_tests/json.dm @@ -11,17 +11,17 @@ try var/list/output = cached_json_decode(check_json) if(!islist(output) || !length(output)) - LAZYADD(failures, check_json) + LAZYADD(failures, "[subtype] - \"[check_json]\"") else for(var/tech in output) if(!isnum(output[tech]) || output[tech] < 1) - LAZYADD(failures, check_json) + LAZYADD(failures, "[subtype] - \"[check_json]\"") else var/decl/research_field/field = SSfabrication.get_research_field_by_id(tech) if(!istype(field) || !field.name) LAZYADD(failures, "[subtype] - [tech]") catch() - LAZYADD(failures, check_json) + LAZYADD(failures, "[subtype] - \"[check_json]\"") if(LAZYLEN(failures)) fail("Some items had invalid tech levels present in origin_tech: [english_list(failures)].") else @@ -37,6 +37,11 @@ var/list/failures var/list/json_to_check + for(var/subtype in typesof(/obj)) + var/obj/test = subtype + var/check_json = initial(test.directional_offset) + if(!isnull(check_json)) + LAZYSET(json_to_check, "[subtype].directional_offset", check_json) for(var/subtype in typesof(/obj/item)) var/obj/item/test = subtype var/check_json = initial(test.center_of_mass) @@ -62,11 +67,17 @@ var/check_json = initial(test.possible_transfer_amounts) if(!isnull(check_json)) LAZYSET(json_to_check, "[subtype].possible_transfer_amounts", check_json) + var/list/prefabs = decls_repository.get_decls_of_subtype(/decl/prefab/ic_assembly) + for(var/assembly_path in prefabs) + var/decl/prefab/ic_assembly/assembly = prefabs[assembly_path] + var/check_json = assembly.data + if(!isnull(check_json)) + LAZYSET(json_to_check, "[assembly_path].data", check_json) // Validate JSON. for(var/check_key in json_to_check) try var/list/output = cached_json_decode(json_to_check[check_key]) - if(!islist(output) || !length(output)) + if(findtext(json_to_check[check_key], "{'") || !islist(output) || !length(output)) LAZYADD(failures, check_key) catch() LAZYADD(failures, check_key) diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm index cdda5aa98c0..563a1863a20 100644 --- a/code/unit_tests/loadout_tests.dm +++ b/code/unit_tests/loadout_tests.dm @@ -4,8 +4,7 @@ /datum/unit_test/loadout_test_shall_have_valid_icon_states/start_test() var/list/failed = list() - for(var/gear_name in global.gear_datums) - var/decl/loadout_option/G = global.gear_datums[gear_name] + for(var/decl/loadout_option/G in decls_repository.get_decls_unassociated(/decl/loadout_option)) var/list/path_tweaks = list() for(var/datum/gear_tweak/path/p in G.gear_tweaks) path_tweaks += p @@ -39,8 +38,7 @@ /datum/unit_test/loadout_test_gear_path_tweaks_shall_be_of_gear_path/start_test() var/list/failed = list() - for(var/gear_name in global.gear_datums) - var/decl/loadout_option/G = global.gear_datums[gear_name] + for(var/decl/loadout_option/G in decls_repository.get_decls_unassociated(/decl/loadout_option)) for(var/datum/gear_tweak/path/p in G.gear_tweaks) for(var/path_name in p.valid_paths) var/path_type = p.valid_paths[path_name] @@ -58,8 +56,7 @@ /datum/unit_test/loadout_test_gear_path_tweaks_shall_have_unique_keys/start_test() var/path_entries_by_gear_path_and_name = list() - for(var/gear_name in global.gear_datums) - var/decl/loadout_option/G = global.gear_datums[gear_name] + for(var/decl/loadout_option/G in decls_repository.get_decls_unassociated(/decl/loadout_option)) for(var/datum/gear_tweak/path/p in G.gear_tweaks) for(var/path_name in p.valid_paths) group_by(path_entries_by_gear_path_and_name, "[G] - [p] - [path_name]", path_name) @@ -82,8 +79,7 @@ /datum/unit_test/loadout_custom_setup_tweaks_shall_have_valid_procs/start_test() var/list/failures = list() - for(var/gear_name in global.gear_datums) - var/decl/loadout_option/G = global.gear_datums[gear_name] + for(var/decl/loadout_option/G in decls_repository.get_decls_unassociated(/decl/loadout_option)) var/datum/instance var/mob/user for(var/datum/gear_tweak/custom_setup/cs in G.gear_tweaks) @@ -125,6 +121,7 @@ path = /obj/unit_test/loadout custom_setup_proc = /obj/unit_test/loadout/proc/loadout_proc custom_setup_proc_arguments = list(5) + uid = "gear_debug" /obj/unit_test/loadout var/loadout_mob diff --git a/code/unit_tests/machine_tests.dm b/code/unit_tests/machine_tests.dm index fc1da183105..73ae50a5e50 100644 --- a/code/unit_tests/machine_tests.dm +++ b/code/unit_tests/machine_tests.dm @@ -11,7 +11,13 @@ for(var/path in machine.maximum_component_parts) if(machine.number_of_components(path) > machine.maximum_component_parts[path]) failed[machine.type] = TRUE - log_bad("[log_info_line(machine)] had too many components of type [path].") + var/parts_list = "" + for(var/obj/item/apart as anything in machine.component_parts) + if(istype(apart)) + parts_list += "\n[apart.type]" + else + parts_list += "\npath:[apart]" + log_bad("[log_info_line(machine)] had too many components of type [path].\nContained parts: [parts_list]") if(!failed[machine.type]) passed[machine.type] = TRUE diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index abdc2d5be55..bf363d37149 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -926,7 +926,7 @@ var/is_bad_door = FALSE for(var/turf/T in D.locs) - if((istype(T, /turf/simulated/open) || isspaceturf(T)) && !(T.type in turf_exceptions)) + if(T.is_open() && !(T.type in turf_exceptions)) is_bad_door = TRUE log_bad("Invalid door turf: [log_info_line(T)]") if(is_bad_door) diff --git a/code/unit_tests/materials.dm b/code/unit_tests/materials.dm index 98bc05bc8bf..239bba739db 100644 --- a/code/unit_tests/materials.dm +++ b/code/unit_tests/materials.dm @@ -8,46 +8,84 @@ var/list/passed_designs = list() var/failed_count = 0 - for(var/decl/material/mat_datum as anything in SSmaterials.materials) - - var/list/recipes = list() - for(var/thing in mat_datum.get_recipes()) - if(istype(thing, /datum/stack_recipe)) - recipes += thing - else if(istype(thing, /datum/stack_recipe_list)) - var/datum/stack_recipe_list/recipe_stack = thing - if(length(recipe_stack.recipes)) - recipes |= recipe_stack.recipes - - for(var/datum/stack_recipe/recipe as anything in recipes) - var/obj/product = recipe.spawn_result() - var/failed - if(!product) - failed = "no product returned" - else if(!istype(product)) - failed = "non-obj product returned ([product.type])" - else - LAZYINITLIST(product.matter) // For the purposes of the following tests not runtiming. - if(!recipe.use_material && !recipe.use_reinf_material) - if(length(product.matter)) - failed = "unsupplied material types" - else if(recipe.use_material && (product.matter[recipe.use_material]/SHEET_MATERIAL_AMOUNT) > recipe.req_amount) - failed = "excessive base material ([recipe.req_amount]/[CEILING(product.matter[recipe.use_material]/SHEET_MATERIAL_AMOUNT)])" - else if(recipe.use_reinf_material && (product.matter[recipe.use_reinf_material]/SHEET_MATERIAL_AMOUNT) > recipe.req_amount) - failed = "excessive reinf material ([recipe.req_amount]/[CEILING(product.matter[recipe.use_reinf_material]/SHEET_MATERIAL_AMOUNT)])" - else - for(var/mat in product.matter) - if(mat != recipe.use_material && mat != recipe.use_reinf_material) - failed = "extra material type ([mat])" - if(failed) // Try to prune out some duplicate error spam, we have too many materials now - if(!(recipe.type in seen_design_types)) - failed_designs += "[mat_datum.type] - [recipe.type] - [failed]" - seen_design_types += recipe.type - failed_count++ - else - passed_designs += recipe - if(!QDELETED(product)) - qdel(product) + // Assemble our lists of parameters for recipes. + var/list/stack_types = list(null) + var/list/tool_types = list(null) + + var/list/all_recipes = decls_repository.get_decls_of_subtype(/decl/stack_recipe) + for(var/recipe_type in all_recipes) + var/decl/stack_recipe/recipe = all_recipes[recipe_type] + if(recipe.required_tool) + tool_types |= recipe.required_tool + if(recipe.craft_stack_types) + stack_types |= recipe.craft_stack_types + + var/list/all_materials = decls_repository.get_decls_of_type(/decl/material) + var/list/material_types = list(null) + for(var/material_type in all_materials) + var/decl/material/mat = all_materials[material_type] + if(!mat.holographic && mat.phase_at_temperature() == MAT_PHASE_SOLID) + material_types |= material_type + + // Force config to be the most precise recipes possible. + var/decl/config/config = GET_DECL(/decl/config/toggle/on/stack_crafting_uses_types) + config.set_value(TRUE) + config = GET_DECL(/decl/config/toggle/stack_crafting_uses_tools) + config.set_value(TRUE) + + // This is obscene, but completeness requires it. + for(var/stack_type in stack_types) + for(var/tool_type in tool_types) + for(var/material_type in material_types) + var/decl/material/material = GET_DECL(material_type) + for(var/reinforced_type in material_types) + var/decl/material/reinforced = GET_DECL(reinforced_type) + + // Get a linear list of all recipes available to this combination. + var/list/recipes = get_stack_recipes(material, reinforced, stack_type, tool_type) + while(locate(/datum/stack_recipe_list) in recipes) + for(var/datum/stack_recipe_list/recipe_stack in recipes) + recipes -= recipe_stack + if(length(recipe_stack.recipes)) + recipes |= recipe_stack.recipes + + if(!length(recipes)) + continue + + // Handle the actual validation. + for(var/decl/stack_recipe/recipe as anything in recipes) + if(ispath(recipe.result_type, /turf)) // Cannot exist without a loc and doesn't have matter, cannot assess here. + continue + var/atom/product = recipe.spawn_result(null, null, 1, material, reinforced) + var/failed + if(!product) + failed = "no product returned" + else if(!istype(product, recipe.expected_product_type)) + failed = "unexpected product type returned ([product.type])" + else if(isobj(product)) + var/obj/product_obj = product + LAZYINITLIST(product_obj.matter) // For the purposes of the following tests not runtiming. + if(!material && !reinforced) + if(length(product_obj.matter)) + failed = "unsupplied material types" + else if(material && (product_obj.matter[material.type]/SHEET_MATERIAL_AMOUNT) > recipe.req_amount) + failed = "excessive base material ([recipe.req_amount]/[CEILING(product_obj.matter[material.type]/SHEET_MATERIAL_AMOUNT)])" + else if(reinforced && (product_obj.matter[reinforced.type]/SHEET_MATERIAL_AMOUNT) > recipe.req_amount) + failed = "excessive reinf material ([recipe.req_amount]/[CEILING(product_obj.matter[reinforced.type]/SHEET_MATERIAL_AMOUNT)])" + else + for(var/mat in product_obj.matter) + if(mat != material?.type && mat != reinforced?.type) + failed = "extra material type ([mat])" + + if(failed) // Try to prune out some duplicate error spam, we have too many materials now + if(!(recipe.type in seen_design_types)) + failed_designs += "[material?.type || "null mat"] - [reinforced?.type || "null reinf"] - [tool_type] - [stack_type] - [recipe.type] - [failed]" + seen_design_types += recipe.type + failed_count++ + else + passed_designs += recipe + if(!QDELETED(product)) + qdel(product) if(failed_count) fail("[failed_count] crafting recipes had inconsistent output materials: [jointext(failed_designs, "\n")].") diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm index 9179e912557..698c69fb569 100644 --- a/code/unit_tests/mob_tests.dm +++ b/code/unit_tests/mob_tests.dm @@ -110,7 +110,7 @@ var/global/default_mobloc = null if(!loss && ishuman(M)) var/mob/living/carbon/human/H = M // Synthetics have robot limbs which don't report damage to getXXXLoss() if(H.isSynthetic()) // So we have to hard code this check or create a different one for them. - return H.species.total_health - H.health + return H.species.total_health - H.current_health return loss // ============================================================================================================== @@ -164,7 +164,7 @@ var/global/default_mobloc = null // Damage the mob - var/initial_health = H.health + var/initial_health = H.current_health if(damagetype == OXY && H.need_breathe()) var/obj/item/organ/internal/lungs/L = H.get_organ(H.get_bodytype().breathing_organ, /obj/item/organ/internal/lungs) @@ -175,7 +175,7 @@ var/global/default_mobloc = null var/ending_damage = damage_check(H, damagetype) - var/ending_health = H.health + var/ending_health = H.current_health qdel(H) // Now test this stuff. @@ -252,7 +252,7 @@ var/global/default_mobloc = null /datum/unit_test/robot_module_icons name = "MOB: Robot Modules Shall Have UI Icons" - var/icon_file = 'icons/mob/screen1_robot.dmi' + var/icon_file = 'icons/mob/screen/styles/robot/module.dmi' /datum/unit_test/robot_module_icons/start_test() var/failed = 0 diff --git a/code/unit_tests/obj_damage_tests.dm b/code/unit_tests/obj_damage_tests.dm index 56dc1e07b50..691e34abaca 100644 --- a/code/unit_tests/obj_damage_tests.dm +++ b/code/unit_tests/obj_damage_tests.dm @@ -2,9 +2,9 @@ // items_shall_stay_invincible ///////////////////////////////////////////////////////// /datum/item_unit_test/constant/items_shall_stay_invincible/run_test(var/obj/item/I) - if(initial(I.health) != ITEM_HEALTH_NO_DAMAGE && initial(I.max_health) != ITEM_HEALTH_NO_DAMAGE) + if(initial(I.current_health) != ITEM_HEALTH_NO_DAMAGE && initial(I.max_health) != ITEM_HEALTH_NO_DAMAGE) return TRUE //Ignore things that aren't invincible - if(I.health != ITEM_HEALTH_NO_DAMAGE || I.max_health != ITEM_HEALTH_NO_DAMAGE) + if(I.current_health != ITEM_HEALTH_NO_DAMAGE || I.get_max_health() != ITEM_HEALTH_NO_DAMAGE) IT.report_failure(src, I.type, "Is defined as not taking health damage, but it can take damage after init.") return FALSE return TRUE @@ -13,10 +13,11 @@ // items_shall_define_their_max_health ///////////////////////////////////////////////////////// /datum/item_unit_test/constant/items_shall_define_their_max_health/run_test(var/obj/item/I) - if(I.health == ITEM_HEALTH_NO_DAMAGE || I.max_health == ITEM_HEALTH_NO_DAMAGE) + var/current_max_health = I.get_max_health() + if(I.current_health == ITEM_HEALTH_NO_DAMAGE || current_max_health == ITEM_HEALTH_NO_DAMAGE) return TRUE //We don't care about invincible things - if(I.health > 0 && I.max_health != I.health) - IT.report_failure(src, I.type, "Defines health = [I.health], but its max_health is [I.max_health? I.max_health : "null"].") + if(I.current_health > 0 && current_max_health != I.current_health) + IT.report_failure(src, I.type, "Defines health = [I.current_health], but its max health is [current_max_health || "null"].") return FALSE return TRUE @@ -25,11 +26,11 @@ ///////////////////////////////////////////////////////// /**Items should only change their defined health variable during init if it was set to null. Otherwise issues will arise. */ /datum/item_unit_test/constant/items_shall_set_health_var_only_if_null/run_test(var/obj/item/I) - if(initial(I.health) == ITEM_HEALTH_NO_DAMAGE || initial(I.max_health) == ITEM_HEALTH_NO_DAMAGE) + if(initial(I.current_health) == ITEM_HEALTH_NO_DAMAGE || initial(I.max_health) == ITEM_HEALTH_NO_DAMAGE) return TRUE - if(isnull(initial(I.health))) - if(I.health > 0) + if(isnull(initial(I.current_health))) + if(I.current_health > 0) return TRUE else if(istype(I.material)) IT.report_failure(src, I.type, "Had its health defined as null, and its material '[I.material.type]' left it as null!") @@ -38,8 +39,8 @@ IT.report_failure(src, I.type, "Had its health defined as null, didn't assign a valid health value during init, and isn't marked as invincible.") return FALSE - else if(I.health != initial(I.health)) - IT.report_failure(src, I.type, "Defined a health value ([I.health? I.health : "null"]), but it was replaced during init! Highly likely to be undesired!") + else if(I.current_health != initial(I.current_health)) + IT.report_failure(src, I.type, "Defined a health value ([I.current_health? I.current_health : "null"]), but it was replaced during init! Highly likely to be undesired!") return FALSE //In this case, the health was set to something, and didn't change during init @@ -51,11 +52,11 @@ /** Makes sure that if we have a material setting up our health, it actually sets it to something sane. */ /datum/item_unit_test/constant/items_shall_get_a_valid_health_from_materials/run_test(var/obj/item/I) //If any health is specified or if the object is invincible skip. Return true on no material too since its not our job to validate the material logic - if(!isnull(initial(I.health)) || !isnull(initial(I.max_health)) || !I.material) + if(!isnull(initial(I.current_health)) || !isnull(initial(I.max_health)) || !I.material) return TRUE - if((I.max_health < 1.0) || (I.health < 1.0)) - IT.report_failure(src, I.type, "Had its health/max_health set to a value < 1 by its material '[I.material.type]', where '[I.material.name]''s 'integrity' == '[I.material.integrity]', and '[I]''s 'material_health_multiplier' == '[I.material_health_multiplier]'.") + if((I.get_max_health() < 1.0) || (I.current_health < 1.0)) + IT.report_failure(src, I.type, "Had its health/max health set to a value < 1 by its material '[I.material.type]', where '[I.material.name]''s 'integrity' == '[I.material.integrity]', and '[I]''s 'material_health_multiplier' == '[I.material_health_multiplier]'.") return FALSE return TRUE @@ -64,22 +65,22 @@ ///////////////////////////////////////////////////////// /datum/item_unit_test/volatile/items_shall_take_damage/run_test(var/obj/item/I) var/failure_text = "" - var/old_health = I.health + var/old_health = I.current_health var/damage_taken_returned = I.take_damage(1, BRUTE, 0, null, 100) //Ignore armor //Check if invincibility actually works if(!isnull(old_health)) - if(old_health && old_health == I.health && old_health != ITEM_HEALTH_NO_DAMAGE && I.max_health != ITEM_HEALTH_NO_DAMAGE) - failure_text += "Item took no damage and isn't defined as invincible. (old: [old_health? old_health : "null"], new: [I.health? I.health : "null"], returned: [damage_taken_returned? damage_taken_returned : "null"]) " - if(old_health != I.health && (old_health == ITEM_HEALTH_NO_DAMAGE || I.max_health == ITEM_HEALTH_NO_DAMAGE)) - failure_text += "Item took some damage while defined as invincible. (old: [old_health? old_health : "null"], new: [I.health? I.health : "null"], returned: [damage_taken_returned? damage_taken_returned : "null"]) " + if(old_health && old_health == I.current_health && old_health != ITEM_HEALTH_NO_DAMAGE && I.get_max_health() != ITEM_HEALTH_NO_DAMAGE) + failure_text += "Item took no damage and isn't defined as invincible. (old: [old_health? old_health : "null"], new: [I.current_health? I.current_health : "null"], returned: [damage_taken_returned? damage_taken_returned : "null"]) " + if(old_health != I.current_health && (old_health == ITEM_HEALTH_NO_DAMAGE || I.get_max_health() == ITEM_HEALTH_NO_DAMAGE)) + failure_text += "Item took some damage while defined as invincible. (old: [old_health? old_health : "null"], new: [I.current_health? I.current_health : "null"], returned: [damage_taken_returned? damage_taken_returned : "null"]) " else failure_text += "Item health is null after init. " //Check the take damage returned damage value - var/damage_taken_actual = (old_health == ITEM_HEALTH_NO_DAMAGE || I.max_health == ITEM_HEALTH_NO_DAMAGE || isnull(old_health))? 0 : old_health - I.health + var/damage_taken_actual = (old_health == ITEM_HEALTH_NO_DAMAGE || I.get_max_health() == ITEM_HEALTH_NO_DAMAGE || isnull(old_health))? 0 : old_health - I.current_health if(damage_taken_returned != damage_taken_actual) - failure_text += "take_damage() returned the wrong amount of damage (health before: [old_health? old_health : "null"], after: [I.health? I.health : "null"], returned damage:[damage_taken_returned? damage_taken_returned : "null"])." + failure_text += "take_damage() returned the wrong amount of damage (health before: [old_health? old_health : "null"], after: [I.current_health? I.current_health : "null"], returned damage:[damage_taken_returned? damage_taken_returned : "null"])." if(length(failure_text)) IT.report_failure(src, I.type, failure_text) @@ -92,10 +93,10 @@ /**Damages items to destruction and see if it throws runtimes. Type starts with z so it's run last.*/ /datum/item_unit_test/volatile/z_items_shall_be_destroyed_gracefully/run_test(var/obj/item/I) try - var/damage_dealt = I.can_take_damage() ? (I.max_health + 1) : 9999 //Arbitrary large damage value for invincible things + var/damage_dealt = I.can_take_damage() ? (I.get_max_health() + 1) : 9999 //Arbitrary large damage value for invincible things I.take_damage(damage_dealt, BRUTE, 0, "TEST", ARMOR_PIERCING_BYPASSED) //Just let the exception handler do its job . = TRUE catch(var/exception/E) IT.report_failure(src, I.type, "Threw an exception when destroyed by brute damage!: [EXCEPTION_TEXT(E)]") . = FALSE - throw E \ No newline at end of file + throw E diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm index 1ea0867030c..aea6e3f5489 100644 --- a/code/unit_tests/observation_tests.dm +++ b/code/unit_tests/observation_tests.dm @@ -10,8 +10,6 @@ var/list/received_name_set_events var/list/stored_global_listen_count - var/list/stored_event_sources_count - var/list/stored_event_listen_count /datum/unit_test/observation/start_test() received_moves = received_moves || list() @@ -24,8 +22,6 @@ events_repository.unregister_global(/decl/observ/moved, global_listener) stored_global_listen_count = global.global_listen_count.Copy() - stored_event_sources_count = global.event_sources_count.Copy() - stored_event_listen_count = global.event_listen_count.Copy() sanity_check_events("Pre-Test") . = conduct_test() @@ -62,10 +58,6 @@ for(var/entry in (global.global_listen_count - stored_global_listen_count)) fail("[phase]: global_listen_count - Contained [log_info_line(entry)].") - for(var/entry in (global.event_sources_count - stored_event_sources_count)) - fail("[phase]: event_sources_count - Contained [log_info_line(entry)].") - for(var/entry in (global.event_listen_count - stored_event_listen_count)) - fail("[phase]: event_listen_count - Contained [log_info_line(entry)].") /datum/unit_test/observation/proc/conduct_test() return 0 @@ -97,7 +89,7 @@ old_name = O.name new_name = O.name + " (New)" - events_repository.register_global(/decl/observ/name_set, src, /datum/unit_test/observation/proc/receive_name_change) + events_repository.register_global(/decl/observ/name_set, src, TYPE_PROC_REF(/datum/unit_test/observation, receive_name_change)) O.SetName(new_name) if(received_name_set_events.len != 1) @@ -220,51 +212,6 @@ return 1 -// Should have updated this to work with the new mechs -/* -/datum/unit_test/observation/moved_shall_only_trigger_for_recursive_drop - name = "OBSERVATION: Moved - Shall Only Trigger Once For Recursive Drop" - -/datum/unit_test/observation/moved_shall_only_trigger_for_recursive_drop/conduct_test() - var/turf/T = get_safe_turf() - var/obj/exosuit/exosuit = get_named_instance(/obj/exosuit, T, "exosuit") - var/obj/item/wrench/held_item = get_named_instance(/obj/item/wrench, T, "Wrench") - var/mob/living/carbon/human/dummy/held_mob = get_named_instance(/mob/living/carbon/human/dummy, T, "Held Mob") - var/mob/living/carbon/human/dummy/holding_mob = get_named_instance(/mob/living/carbon/human/dummy, T, "Holding Mob") - - held_mob.mob_size = MOB_SIZE_SMALL - held_mob.put_in_active_hand(held_item) - held_mob.get_scooped(holding_mob, holding_mob) - - holding_mob.forceMove(exosuit) - - exosuit.occupant = holding_mob - - events_repository.register(/decl/observ/moved, held_item, src, /datum/unit_test/observation/proc/receive_move) - holding_mob.drop_from_inventory(held_item) - - if(received_moves.len != 1) - fail("Expected 1 raised moved event, were [received_moves.len].") - dump_received_moves() - return 1 - - var/list/event = received_moves[1] - if(event[1] != held_item || event[2] != held_mob || event[3] != exosuit) - fail("Unexpected move event received. Expected [held_item], was [event[1]]. Expected [held_mob], was [event[2]]. Expected [exosuit], was [event[3]]") - else if(!(held_item in exosuit.dropped_items)) - fail("Expected \the [held_item] to be in the mechs' dropped item list") - else - pass("One one moved event with expected arguments raised.") - - events_repository.unregister(/decl/observ/moved, held_item, src) - qdel(exosuit) - qdel(held_item) - qdel(held_mob) - qdel(holding_mob) - - return 1 -*/ - /datum/unit_test/observation/moved_shall_not_unregister_recursively_one name = "OBSERVATION: Moved - Shall Not Unregister Recursively - One" @@ -320,7 +267,7 @@ var/turf/T = get_safe_turf() var/obj/O = get_named_instance(/obj, T) - events_repository.register_global(/decl/observ/name_set, O, /atom/movable/proc/move_to_turf) + events_repository.register_global(/decl/observ/name_set, O, TYPE_PROC_REF(/atom/movable, move_to_turf)) qdel(O) var/decl/observ/name_set/name_set_event = GET_DECL(/decl/observ/name_set) @@ -347,7 +294,7 @@ var/mob/event_source = get_named_instance(/mob, T, "Event Source") var/mob/listener = get_named_instance(/mob, T, "Event Listener") - events_repository.register(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move) + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) qdel(event_source) var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved) @@ -375,7 +322,7 @@ var/mob/event_source = get_named_instance(/mob, T, "Event Source") var/mob/listener = get_named_instance(/mob, T, "Event Listener") - events_repository.register(/decl/observ/moved, event_source, listener, /atom/movable/proc/recursive_move) + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) qdel(listener) var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved) @@ -394,3 +341,103 @@ pass("The event source listener list does not contain a null key.") qdel(event_source) return 1 + +/datum/unit_test/observation/sanity_shall_be_possible_to_register_multiple_times + name = "OBSERVATION: Sanity - Shall be possible to register multiple times" + +/datum/unit_test/observation/sanity_shall_be_possible_to_register_multiple_times/conduct_test() + var/turf/T = get_safe_turf() + var/mob/event_source = get_named_instance(/mob, T, "Event Source") + var/mob/listener = get_named_instance(/mob, T, "Event Listener") + + var/initial_event_source_count = event_source.event_source_count + var/initial_event_listen_count = listener.event_listen_count + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + var/event_source_count_diff = event_source.event_source_count - initial_event_source_count + var/event_listener_count_diff = listener.event_listen_count - initial_event_listen_count + + if (event_source_count_diff != 1 || event_listener_count_diff != 1) + fail("Incorrect count. Expected a source diff count of 1, was [event_source_count_diff]. Expected a listener diff count of 1, was [event_listener_count_diff]") + else + pass("Count was correct.") + + qdel(event_source) + qdel(listener) + return 1 + +/datum/unit_test/observation/sanity_shall_be_possible_to_unregister_multiple_times + name = "OBSERVATION: Sanity - Shall be possible to unregister multiple times" + +/datum/unit_test/observation/sanity_shall_be_possible_to_unregister_multiple_times/conduct_test() + var/turf/T = get_safe_turf() + var/mob/event_source = get_named_instance(/mob, T, "Event Source") + var/mob/listener = get_named_instance(/mob, T, "Event Listener") + + var/initial_event_source_count = event_source.event_source_count + var/initial_event_listen_count = listener.event_listen_count + events_repository.register(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.unregister(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.unregister(/decl/observ/moved, event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + var/event_source_count_diff = event_source.event_source_count - initial_event_source_count + var/event_listener_count_diff = listener.event_listen_count - initial_event_listen_count + + if (event_source_count_diff != 0 || event_listener_count_diff != 0) + fail("Incorrect count. Expected a source diff count of 0, was [event_source_count_diff]. Expected a listener diff count of 0, was [event_listener_count_diff]") + else + pass("Count was correct.") + + qdel(event_source) + qdel(listener) + return 1 + +/datum/unit_test/observation/sanity_deleting_one_of_multiple_sources_shall_result_in_correct_count + name = "OBSERVATION: Sanity - Deleting one of multiple sources shall result in correct count" + +/datum/unit_test/observation/sanity_deleting_one_of_multiple_sources_shall_result_in_correct_count/conduct_test() + var/turf/T = get_safe_turf() + var/mob/event_source_A = get_named_instance(/mob, T, "Event Source A") + var/mob/event_source_B = get_named_instance(/mob, T, "Event Source B") + var/mob/listener = get_named_instance(/mob, T, "Event Listener") + + var/initial_event_listen_count = listener.event_listen_count + events_repository.register(/decl/observ/moved, event_source_A, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.register(/decl/observ/moved, event_source_B, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + qdel(event_source_A) + var/event_listener_count_diff = listener.event_listen_count - initial_event_listen_count + + if (event_listener_count_diff != 1) + fail("Incorrect count. Listener had a listen diff count of [event_listener_count_diff], expected 1.") + else + pass("Count was correct.") + + qdel(event_source_B) + qdel(listener) + return 1 + + +/datum/unit_test/observation/sanity_deleting_one_of_multiple_listeners_shall_result_in_correct_count + name = "OBSERVATION: Sanity - Deleting one of multiple listeners shall result in correct count" + +/datum/unit_test/observation/sanity_deleting_one_of_multiple_listeners_shall_result_in_correct_count/conduct_test() + var/turf/T = get_safe_turf() + var/mob/event_source = get_named_instance(/mob, T, "Event Source") + var/mob/listener_A = get_named_instance(/mob, T, "Event Listener A") + var/mob/listener_B = get_named_instance(/mob, T, "Event Listener B") + + var/initial_event_source_count = event_source.event_source_count + var/initial_event_listen_count = listener_B.event_listen_count + events_repository.register(/decl/observ/moved, event_source, listener_A, TYPE_PROC_REF(/atom/movable, recursive_move)) + events_repository.register(/decl/observ/moved, event_source, listener_B, TYPE_PROC_REF(/atom/movable, recursive_move)) + qdel(listener_A) + var/event_source_count_diff = event_source.event_source_count - initial_event_source_count + var/event_listener_count_diff = listener_B.event_listen_count - initial_event_listen_count + + if (event_source_count_diff != 1 || listener_B.event_listen_count != 1) + fail("Incorrect count. Event Source had a listen diff count of [event_source_count_diff], expected 1. Listener had a listen diff count of [event_listener_count_diff], expected 1.") + else + pass("Count was correct.") + + qdel(event_source) + qdel(listener_B) + return 1 diff --git a/code/unit_tests/offset_tests.dm b/code/unit_tests/offset_tests.dm new file mode 100644 index 00000000000..1ab4c71d9cd --- /dev/null +++ b/code/unit_tests/offset_tests.dm @@ -0,0 +1,92 @@ +/datum/unit_test/wall_objs_shall_face_proper_dir + name = "MAP: Wall mounted objects must face proper direction" + var/static/list/exception_types = list( + /obj/structure/sign/directions, // TODO: remove once directional/rotated subtypes have been created + /obj/structure/emergency_dispenser // these are just kind of fucked, i'll leave it to someone else to make the presets match the directional offsets + ) + +/datum/unit_test/wall_objs_shall_face_proper_dir/start_test() + var/bad_objs = 0 + for(var/obj/structure in world) // includes machinery, structures, and anchored items + if(QDELETED(structure)) + continue + if(!isStationLevel(structure.z)) + continue //#FIXME: Why are away sites, templates, ruins excluded&? + if(is_type_in_list(structure, exception_types)) + continue + if(!structure.anchored) + continue + if(!isturf(structure.loc)) + continue + if(!length(structure.directional_offset)) // does not need to be offset + continue + var/list/diroff = cached_json_decode(structure.directional_offset) + var/list/curoff = diroff["[uppertext(dir2text(structure.dir))]"] + if(!curoff) // uh oh! + continue + // If the offset is unset or 0, it's allowed to be whatever. + // If it's nonzero, it must match the sign. + if( + (curoff["x"] && (SIGN(curoff["x"]) != SIGN(structure.pixel_x))) || \ + (curoff["y"] && (SIGN(curoff["y"]) != SIGN(structure.pixel_y))) + ) + bad_objs++ + log_bad("Incorrect offset direction: [log_info_line(structure)]") + continue + + if(bad_objs) + fail("Found [bad_objs] wall-mounted object\s with incorrect directions") + else + pass("All wall-mounted objects have correct directions") + return TRUE + +/datum/unit_test/wall_objs_shall_offset_onto_wall + name = "MAP: Wall mounted objects must offset over walls" + var/static/list/exception_types = list( + /obj/machinery/light, + /obj/machinery/camera, + /obj/structure/lift/button/standalone + ) + +/datum/unit_test/wall_objs_shall_offset_onto_wall/start_test() + var/bad_objs = 0 + for(var/obj/structure in world) // includes machinery, structures, and anchored items + if(QDELETED(structure)) + continue + if(!isStationLevel(structure.z)) + continue + if(is_type_in_list(structure, exception_types)) + continue + if(!structure.anchored) + continue + if(!isturf(structure.loc)) + continue + if(!length(structure.directional_offset)) // does not need to be offset + continue + var/list/diroff = cached_json_decode(structure.directional_offset) + var/list/curoff = diroff["[uppertext(dir2text(structure.dir))]"] + if(!curoff) // structure is not offset in this dir at all + continue + if(structure.loc.density) + bad_objs++ + log_bad("Wall-mounted object on dense turf: [log_info_line(structure)]") + continue + var/adj_x = structure.x + (abs(structure.pixel_x) > 12 ? SIGN(structure.pixel_x) : 0) + var/adj_y = structure.y + (abs(structure.pixel_y) > 12 ? SIGN(structure.pixel_y) : 0) + var/turf/adjusted_loc = locate(adj_x, adj_y, structure.z) + if(!adjusted_loc.density) + var/found_support = FALSE + for(var/obj/structure/S in adjusted_loc) + if(!S.density) // this will be way too forgiving with windows since it doesn't take into account directionality + continue + found_support = TRUE + if(found_support) + continue + bad_objs++ + log_bad("Offset turf did not have a wall or window: [log_info_line(structure)]") + + if(bad_objs) + fail("Found [bad_objs] wall-mounted object\s without a wall or window") + else + pass("All wall-mounted objects are on appropriate walls/windows") + return TRUE \ No newline at end of file diff --git a/code/unit_tests/proximity_tests.dm b/code/unit_tests/proximity_tests.dm index ef196a9b7a8..e9d9729c182 100644 --- a/code/unit_tests/proximity_tests.dm +++ b/code/unit_tests/proximity_tests.dm @@ -133,7 +133,7 @@ /obj/proximity_listener/proc/SetTrigger(trigger_type, listener_flags) QDEL_NULL(trigger) - trigger = new trigger_type(src, /obj/proximity_listener/proc/OnTurfEntered, /obj/proximity_listener/proc/OnTurfsChanged, 7, listener_flags, null, 90, 270) + trigger = new trigger_type(src, TYPE_PROC_REF(/obj/proximity_listener, OnTurfEntered), TYPE_PROC_REF(/obj/proximity_listener, OnTurfsChanged), 7, listener_flags, null, 90, 270) trigger.register_turfs() /obj/proximity_listener/Destroy() diff --git a/code/unit_tests/saving.dm b/code/unit_tests/saving.dm new file mode 100644 index 00000000000..7277c2e85b1 --- /dev/null +++ b/code/unit_tests/saving.dm @@ -0,0 +1,3 @@ + +// check for id collision in the database +// check that before_save and after_deserialize are called exactly once. \ No newline at end of file diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm index f23f690b8b9..faba257edc1 100644 --- a/code/unit_tests/unit_test.dm +++ b/code/unit_tests/unit_test.dm @@ -109,7 +109,11 @@ var/global/ascii_reset = "[ascii_esc]\[0m" var/cleanup_failed = FALSE if(!async && check_cleanup) // Async tests run at the same time, so cleaning up after any one completes risks breaking other tests - var/ignored_types = list(/atom/movable/lighting_overlay, /obj/abstract/landmark/test) + var/static/list/ignored_types = list( + /atom/movable/lighting_overlay, + /obj/effect/decal/cleanable/dirt, + /obj/abstract/landmark/test + ) var/z_levels = list() var/turf/safe = get_safe_turf() var/turf/space = get_space_turf() @@ -151,14 +155,6 @@ var/global/ascii_reset = "[ascii_esc]\[0m" /datum/unit_test/proc/subsystems_to_await() return list() -/proc/load_unit_test_changes() -/* - //This takes about 60 seconds to run during unit testing and is only used for the ZAS vacume check on The Asteroid. - if(config.roundstart_level_generation != 1) - log_unit_test("Overiding Configuration option for Asteroid Generation to ENABLED") - config.roundstart_level_generation = 1 // The default map requires it, the example config doesn't have this enabled. - */ - /proc/get_test_datums() . = list() for(var/test in subtypesof(/datum/unit_test)) diff --git a/code/unit_tests/~unit_test_subsystems.dm b/code/unit_tests/~unit_test_subsystems.dm index e26b3d16fe9..227deaa3dc2 100644 --- a/code/unit_tests/~unit_test_subsystems.dm +++ b/code/unit_tests/~unit_test_subsystems.dm @@ -16,6 +16,7 @@ SUBSYSTEM_DEF(unit_tests) MAP_TEMPLATE_CATEGORY_AWAYSITE, MAP_TEMPLATE_CATEGORY_PLANET, MAP_TEMPLATE_CATEGORY_EXOPLANET, + MAP_TEMPLATE_CATEGORY_LANDMARK_LOADED ) /datum/controller/subsystem/unit_tests/Initialize(timeofday) diff --git a/config/example/config.txt b/config/example/config.txt deleted file mode 100644 index d184bf408d3..00000000000 --- a/config/example/config.txt +++ /dev/null @@ -1,485 +0,0 @@ -## Server name: This appears at the top of the screen in-game. In this case it will read "tgstation: station_name" where station_name is the randomly generated name of the station for the round. Remove the # infront of SERVERNAME and replace 'tgstation' with the name of your choice -# SERVERNAME spacestation13 - -## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to "Visible." This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly. -# HUB - -## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system. -ADMIN_LEGACY_SYSTEM - -## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system. -BAN_LEGACY_SYSTEM - -## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments. -JOBS_HAVE_MINIMAL_ACCESS - -## Uncomment this and set it to a file path relative to the executing binary to prefix all custom item icon locations with this location ie. '[CUSTOM_ITEM_ICON_LOCATION]/[custom item icon path value]' -# CUSTOM_ITEM_ICON_LOCATION config/custom_items/icons - -## Uncomment this and set it to a file path relative to the executing binary to prefix all custom icon locations with this location ie. '[CUSTOM_ICON_ICON_LOCATION]/[custom icon path value]' -# CUSTOM_ICON_ICON_LOCATION config/custom_icons/icons - -## Unhash this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing -## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job. -## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up. -## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means -## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days. -#USE_AGE_RESTRICTION_FOR_JOBS - -## Unhash this entry to have certain antag roles require your account to be at least a certain number of days old for round start and auto-spawn selection. -## Non-automatic antagonist recruitment, such as being converted to cultism is not affected. Has the same database requirements and notes as USE_AGE_RESTRICTION_FOR_JOBS. -#USE_AGE_RESTRICTION_FOR_ANTAGS - -## Unhash this to use iterative explosions, keep it hashed to use circle explosions. -#USE_ITERATIVE_EXPLOSIONS - -# The power of explosion required for it to cross Z-levels. -#EXPLOSION_Z_THRESHOLD 10 - -# What to multiply power by when crossing Z-levels. -#EXPLOSION_Z_MULT 0.75 - -## Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage. Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT -# RADIATION_LOWER_LIMIT 0.35 - -## log OOC channel -LOG_OOC - -## log client Say -LOG_SAY - -## log admin actions -LOG_ADMIN - -## log client access (logon/logoff) -LOG_ACCESS - -## log game actions (start of round, results, etc.) -LOG_GAME - -## log player votes -LOG_VOTE - -## log client Whisper -LOG_WHISPER - -## log emotes -LOG_EMOTE - -## log attack messages -LOG_ATTACK - -## log pda messages -LOG_PDA - -## log world.log messages -# LOG_WORLD_OUTPUT - -## log all Topic() calls (for use by coders in tracking down Topic issues) -# LOG_HREFS - -## log world.log and runtime errors to a file -# LOG_RUNTIME - -## log admin warning messages -##LOG_ADMINWARN ## Also duplicates a bunch of other messages. - -## disconnect players who did nothing during the set amount of minutes -# KICK_INACTIVE 10 - -## Chooses whether mods have the ability to tempban or not -MODS_CAN_TEMPBAN - -## Chooses whether mods have the ability to issue tempbans for jobs or not -MODS_CAN_JOB_TEMPBAN - -## Maximum mod tempban duration (in minutes) -MOD_TEMPBAN_MAX 1440 - -## Maximum mod job tempban duration (in minutes) -MOD_JOB_TEMPBAN_MAX 1440 - - -## probablities for game modes chosen in "secret" and "random" modes -## -## default probablity is 1, increase to make that mode more likely to be picked -## set to 0 to disable that mode -PROBABILITY EXTENDED 1 -PROBABILITY MALFUNCTION 1 -PROBABILITY MERCENARY 1 -PROBABILITY WIZARD 1 -PROBABILITY CHANGELING 1 -PROBABILITY CULT 1 -PROBABILITY EXTEND-A-TRAITORMONGOUS 6 - -## if possible round types will be hidden from players for secret rounds -#SECRET_HIDE_POSSIBILITIES - -## Hash out to disable random events during the round. -ALLOW_RANDOM_EVENTS - -## if amount of traitors scales or not -TRAITOR_SCALING - -## if objectives are disabled -#OBJECTIVES_DISABLED - -## make ERT's be only called by admins -#ERT_ADMIN_ONLY - -## If uncommented, votes can be called to add extra antags to the round. -#ALLOW_EXTRA_ANTAGS - -## If security is prohibited from being most antagonists -#PROTECT_ROLES_FROM_ANTAGONIST - -## Comment this out to stop admins being able to choose their personal ooccolor -ALLOW_ADMIN_OOCCOLOR - -## allow players to initiate a restart vote -ALLOW_VOTE_RESTART - -## allow players to initate a mode-change start -ALLOW_VOTE_MODE - -## min delay (deciseconds) between voting sessions (default 10 minutes) -VOTE_DELAY 6000 - -## time period (deciseconds) which voting session will last (default 1 minute) -VOTE_PERIOD 600 - -## autovote initial delay (deciseconds) before first automatic transfer vote call (default 180 minutes) -VOTE_AUTOTRANSFER_INITIAL 108000 - -##autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes) -VOTE_AUTOTRANSFER_INTERVAL 18000 - -## Time left (seconds) before round start when automatic gamemote vote is called (default 160). -VOTE_AUTOGAMEMODE_TIMELEFT 160 - -## prevents dead players from voting or starting votes -#NO_DEAD_VOTE - -## Prevents players not in-round from voting on crew transfer votes. -#NO_DEAD_VOTE_CREW_TRANSFER - -## players' votes default to "No vote" (otherwise, default to "No change") -DEFAULT_NO_VOTE - -## Allow ghosts to see antagonist through AntagHUD -ALLOW_ANTAG_HUD - -## If ghosts use antagHUD they are no longer allowed to join the round. -ANTAG_HUD_RESTRICTED - -## allow AI job -ALLOW_AI - -## disable abandon mob -# NORESPAWN - -## disables calling del(src) on newmobs if they logout before spawnin in -# DONT_DEL_NEWMOB - -## set a hosted by name for unix platforms -HOSTEDBY yournamehere - -## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. -## Set to 1 to jobban them from those positions, set to 0 to allow them. -GUEST_JOBBAN - -## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting) -GUEST_BAN -## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. -## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans) -# USEWHITELIST - -## set a server location for world reboot. Don't include the byond://, just give the address and port. -#SERVER server.net:port - -## set a server URL for the IRC bot to use; like SERVER, don't include the byond:// -## Unlike SERVER, this one shouldn't break auto-reconnect -#SERVERURL server.net:port - -## forum address -# FORUMURL http://example.com - -## discord server permanent invite address -# DISCORDURL https://discord.gg/example - -## Wiki address -# WIKIURL http://example.com - -## GitHub address -# GITHUBURL https://github.com/example-user/example-repository - -## GitHub new issue address -# ISSUEREPORTURL https://github.com/example-user/example-repository/issues/new - -## Ban appeals URL - usually for a forum or wherever people should go to contact your admins. -# BANAPPEALS http://example.com - -## In-game features -## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard -# FEATURE_OBJECT_SPELL_SYSTEM - -##Toggle for having jobs load up from the .txt -# LOAD_JOBS_FROM_TXT - -##Remove the # mark infront of this to forbid admins from posssessing the singularity. -#FORBID_SINGULO_POSSESSION - -## Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM. -## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off) -#POPUP_ADMIN_PM - -## Remove the # to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR -ALLOW_HOLIDAYS - -##Defines the ticklag for the world. 0.9 is the normal one, 0.5 is smoother. -TICKLAG 0.7 - -##Defines world FPS. Defaults to 20. -# FPS 20 - -## Whether the server will talk to other processes through socket_talk -SOCKET_TALK 0 - -## Comment this out to disable automuting -#AUTOMUTE_ON - -## How long the delay is before the Away Mission gate opens. Default is half an hour. -GATEWAY_DELAY 18000 - -## Remove the # to give assistants maint access. -#ASSISTANT_MAINT - -## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked. -## Malf and Rev will let the shuttle be called when the antags/protags are dead. -#CONTINUOUS_ROUNDS - -## Uncomment to restrict non-admins from using humanoid alien races -USEALIENWHITELIST -## Uncomment to use the alien whitelist system with SQL instead. (requires the above uncommented aswell) -#USEALIENWHITELIST_SQL - -## Comment this to unrestrict the number of alien players allowed in the round. The number represents the number of alien players for every human player. -#ALIEN_PLAYER_RATIO 0.2 -##Remove the # to let ghosts spin chairs -#GHOST_INTERACTION - -## Password used for authorizing ircbot and other external tools. -#COMMS_PASSWORD - -## Password used for authorizing external tools that can apply bans -#BAN_COMMS_PASSWORD - -## BYOND builds that will result the client using them to be banned. -#FORBIDDEN_VERSIONS 512.0001;512.0002 - -## Export address where external tools that monitor logins are located -#LOGIN_EXPORT_ADDR - -## Uncomment to enable sending data to the IRC bot. -#USE_IRC_BOT - -## Host where the IRC bot is hosted. Port 45678 needs to be open. -#IRC_BOT_HOST localhost - -## IRC channel to send information to. Leave blank to disable. -#MAIN_IRC #main - -## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc. -#ADMIN_IRC #admin - -## Uncommen to allow ghosts to write in blood during Cult rounds. -ALLOW_CULT_GHOSTWRITER - -## Sets the minimum number of cultists needed for ghosts to write in blood. -REQ_CULT_GHOSTWRITER 6 - -## Sets the number of available character slots -CHARACTER_SLOTS 10 - -## Sets the number of loadout slots per character -LOADOUT_SLOTS 3 - -## Expected round length in minutes -EXPECTED_ROUND_LENGTH 180 - -## The lower delay between events in minutes. -## Affect mundane, moderate, and major events respectively -EVENT_DELAY_LOWER 10;30;50 - -## The upper delay between events in minutes. -## Affect mundane, moderate, and major events respectively -EVENT_DELAY_UPPER 15;45;70 - -## The delay until the first time an event of the given severity runs in minutes. -## Unset setting use the EVENT_DELAY_LOWER and EVENT_DELAY_UPPER values instead. -# EVENT_CUSTOM_START_MINOR 10;15 -# EVENT_CUSTOM_START_MODERATE 30;45 -EVENT_CUSTOM_START_MAJOR 80;100 - -## Uncomment to make proccall require R_ADMIN instead of R_DEBUG -## designed for environments where you have testers but don't want them -## able to use the more powerful debug options. -#DEBUG_PARANOID - -## Uncomment to allow aliens to spawn. -#ALIENS_ALLOWED - -## Uncomment to allow alien xenomorph queens to lay eggs. -#ALIEN_EGGS_ALLOWED - -## Uncomment to allow xenos to spawn. -#NINJAS_ALLOWED - -## Uncomment to disable the restrictive weldervision overlay. -#DISABLE_WELDER_VISION - -## Uncomment to prevent anyone from joining the round by default. -#DISABLE_ENTRY - -## Uncomment to disable the OOC channel by default. -#DISABLE_OOC - -## Uncomment to disable the LOOC channel by default. -#DISABLE_LOOC - -## Uncomment to disable the dead OOC channel by default. -#DISABLE_DEAD_OOC - -## Uncomment to disable the AOOC channel by default. -#DISABLE_AOOC - -## Uncomment to disable ghost chat by default. -#DISABLE_DSAY - -## Uncomment to disable respawning by default. -#DISABLE_RESPAWN - -## Respawn delay in minutes before one may respawn as a crew member. -#RESPAWN_DELAY 30 - -## Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit. -EXTERIOR_AMBIENT_LIGHT 0 - - -## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode. -# LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010 - - -## Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on. -#ROUNDSTART_LEVEL_GENERATION 1 - -## Uncomment to enable organ decay outside of a body or storage item. -#ORGANS_CAN_DECAY - -## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog -#AGGRESSIVE_CHANGELOG - -## Uncomment to make Discord webhooks send in plaintext rather than as embeds. -# DISABLE_WEBHOOK_EMBEDS - -## Uncomment to override default brain health. -#DEFAULT_BRAIN_HEALTH 400 - -## Uncomment this line to announce shuttle dock announcements to the main IRC channel, if MAIN_IRC has also been setup. -# ANNOUNCE_SHUTTLE_DOCK_TO_IRC - -## Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect -## You'll also likely need to enable WAIT_FOR_SIGUSR1 below -# MAP_SWITCHING - -## Uncomment to enable an automatic map vote and switch at end of round. MAP_SWITCHING must also be enabled. -# AUTO_MAP_VOTE - -## Uncomment to make Dream Daemon refuse to reboot for any reason other than SIGUSR1 -# WAIT_FOR_SIGUSR1 - -## Uncomment to enable auto-stealthing staff who are AFK for more than specified minutes -# AUTOSTEALTH 30 - -## Set to 0/1 to disable/enable automatic admin rights for users connecting from the host the server is running on. -AUTO_LOCAL_ADMIN 0 - -## How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points. -MAX_GEAR_COST 10 - -## How much radiation levels self-reduce by each tick. -RADIATION_DECAY_RATE 1 - -## The amount of radiation resistance on a turf is multiplied by this value -RADIATION_RESISTANCE_MULTIPLIER 1.25 - -## General material radiation resistance is divided by this value -RADIATION_MATERIAL_RESISTANCE_DIVISOR 2 - -## Below this point, radiation is ignored -RADIATION_LOWER_LIMIT 0.15 - -## Uncomment this to prevent players from printing copy/pasted circuits -#DISABLE_CIRCUIT_PRINTING - -## Uncomment this to allow admins to narrate using HTML tags -#ALLOW_UNSAFE_NARRATES - -## Uncomment this to DISABLE action spam kicking. Not recommended; this helps protect from spam attacks. -#DO_NOT_PREVENT_SPAM - -## Uncomment this to modify the length of the spam kicking interval in seconds. -#ACT_INTERVAL 0.1 - -## Uncomment this to modify the number of actions permitted per interval before being kicked for spam. -#MAX_ACTS_PER_INTERVAL 140 - -## Is the panic bunker currently on by default. -#PANIC_BUNKER - -## A message when user did not pass the panic bunker. -#PANIC_BUNKER_MESSAGE Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass. - -##Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511) -#MINIMUM_BYOND_VERSION - -## Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000) -#MINIMUM_BYOND_BUILD - -## Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512), -## the client/resource_rsc var does not function as one would expect. See client_defines.dm, the "preload_rsc" var's -## comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or -## clients will still download from the server *too*. This will randomly select one URL if more than one is provided. -## Spaces are prohibited in each URL by spec, you must use encoded spaces. -#RESOURCE_URLS URL URL2 URL3 - -## Whether or not to make localhost immune to throttling. -## Localhost will still be throttled internally; it just won't be affected by it. -#NO_THROTTLE_LOCALHOST - -## Uncomment this to enable expanded alt interactions with objects. -#EXPANDED_ALT_INTERACTIONS - -## Uncomment this to show a typing indicator for people writing whispers. -#SHOW_TYPING_INDICATOR_FOR_WHISPERS - -## Set this to 0 to hide visible examine messages. -VISIBLE_EXAMINE 1 -## Uncomment this to allow loadout name/desc customization by default. -#ALLOW_LOADOUT_CUSTOMIZATION - -################################ -## Persistence Stuff -################################ - -## Time in minutes between automated world saves. Default is every 120 minutes. -#AUTOSAVE_INTERVAL 120 - -## Uptime in hours after which the next autosave will force a server reboot. Default is 12 Hours. Setting to 0 disables it. -#AUTOSAVE_AUTO_RESTART 12 - -## !! - Use With Caution - !! -## Set what kind of errors will be skipped over during saving/loading if encountered. Default is "NONE". -## This value is meant to be used for rescuing a broken save, or forcing a broken save to work. As it will most likely cause problems if used constantly. -## The possible values are: "NONE"->No errors allowed at all, "RECOVERABLE"->Only recoverable errors allowed, "ANY"->Any error, even connection error will be ignored. -#SAVE_ERROR_TOLERANCE NONE diff --git a/config/example/configuration.txt b/config/example/configuration.txt new file mode 100644 index 00000000000..8fee2ebc2e8 --- /dev/null +++ b/config/example/configuration.txt @@ -0,0 +1,679 @@ +## +# ADMIN +# Configuration options relating to administration. +## + +## Allows admin jumping. +#ALLOW_ADMIN_JUMP 1 + +## Comment this out to stop admins being able to choose their personal OOC color. Uncomment to enable. +#ALLOW_ADMIN_OOCCOLOR + +## Allows admin revives. +#ALLOW_ADMIN_REV 1 + +## Allows admin item spawning. +#ALLOW_ADMIN_SPAWNING 1 + +## Determines if admins are allowed to narrate using HTML tags. Uncomment to enable. +#ALLOW_UNSAFE_NARRATES + +## Sets a value in minutes after which to auto-hide staff who are AFK. +#AUTOSTEALTH 0 + +## Set to 0/1 to disable/enable automatic admin rights for users connecting from the host the server is running on. +#AUTO_LOCAL_ADMIN 1 + +## Set to jobban 'Guest-' accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. +## Set to 1 to jobban them from those positions, set to 0 to allow them. +#GUEST_JOBBAN 1 + +## Chooses whether mods have the ability to issue tempbans for jobs or not. Uncomment to enable. +#MODS_CAN_JOB_TEMPBAN + +## Chooses whether mods have the ability to tempban or not. Uncomment to enable. +#MODS_CAN_TEMPBAN + +## Maximum mod job tempban duration (in minutes). +#MOD_JOB_TEMPBAN_MAX 1440 + +## Maximum mod tempban duration (in minutes). +#MOD_TEMPBAN_MAX 1440 + +## +# DEBUG +# Configuration options relating to error reporting. +## + +## Uncomment to make proccall require R_ADMIN instead of R_DEBUG +## designed for environments where you have testers but don't want them +## able to use the more powerful debug options. +## Uncomment to enable. +#DEBUG_PARANOID + +## The "cooldown" time for each occurrence of a unique error. +#ERROR_COOLDOWN 600 + +## How many occurrences before the next will silence them. +#ERROR_LIMIT 50 + +## How long to wait between messaging admins about occurrences of a unique error. +#ERROR_MSG_DELAY 50 + +## How long a unique error will be silenced for. +#ERROR_SILENCE_TIME 6000 + +## +# EVENTS +# Configuration options relating to event timers and probabilities. +## + +## Hash out to disable random events during the round. Uncomment to enable. +#ALLOW_RANDOM_EVENTS + +## The lower delay between events in minutes. +## Affect mundane, moderate, and major events respectively. +#EVENT_DELAY_LOWER [10,30,50] + +## The upper delay between events in minutes. +## Affect mundane, moderate, and major events respectively. +#EVENT_DELAY_UPPER [15,45,70] + +## If the first delay has a custom start time. Defined in minutes. +#EVENT_FIRST_RUN [null,null,{"lower":80,"upper":100}] + +## Determines if objectives are disabled. Valid values: none, verb, and all. +OBJECTIVES_DISABLED all + +## +# GAME OPTIONS +# Configuration options relating to gameplay, such as movement, health and stamina. +## + +## Determines the length of the spam kicking interval in seconds. +#ACT_INTERVAL 0.1 + +## Remove the # to let aliens spawn. Uncomment to enable. +#ALIENS_ALLOWED + +## Remove the # to allow people to leave public comments on each other's characters via the comments system. Uncomment to enable. +#ALLOW_CHARACTER_COMMENTS + +## Allow multiple input keys to be pressed for diagonal movement. Uncomment to enable. +#ALLOW_DIAGONAL_MOVEMENT + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#ANIMAL_DELAY 0 + +## Remove the # to give assistants maint access. Uncomment to enable. +#ASSISTANT_MAINT + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#CREEP_DELAY 6 + +## The effectiveness of default darksight if above is uncommented. +#DEFAULT_DARKSIGHT_EFFECTIVENESS 0.05 + +## The range of default darksight if above is uncommented. +#DEFAULT_DARKSIGHT_RANGE 2 + +## Threshold of where brain damage begins to affect dexterity (70 brainloss above this means zero dexterity). Default is 30. +#DEX_MALUS_BRAINLOSS_THRESHOLD 30 + +## Restricted ERT to be only called by admins. Uncomment to enable. +#ERT_ADMIN_CALL_ONLY + +## Determines if objects should provide expanded alt interactions when alt-clicked, such as use or grab. Uncomment to enable. +#EXPANDED_ALT_INTERACTIONS + +## Expected round length in hours. +#EXPECTED_ROUND_LENGTH 3 + +## Determines of ghosts are allowed to possess any animal. Uncomment to enable. +#GHOSTS_CAN_POSSESS_ANIMALS + +## Remove the # to let ghosts spin chairs. Uncomment to enable. +#GHOST_INTERACTION + +## Set this to 0 for perfectly smooth movement gliding, or 1 or more for delayed chess move style movements. +#GLIDE_SIZE_DELAY 1 + +## Whether or not all human mobs have very basic darksight by default. Uncomment to enable. +#GRANT_DEFAULT_DARKSIGHT + +## Specify a number of days after which to hide comments on public profiles (to avoid bloat from retired characters). +#HIDE_COMMENTS_OLDER_THAN 0 + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#HUMAN_DELAY 0 + +## Maximum stamina recovered per tick when resting. +#MAXIMUM_STAMINA_RECOVERY 3 + +## Defines the number of actions permitted per interval before a user is kicked for spam. +#MAX_ACTS_PER_INTERVAL 140 + +## How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points. +#MAX_GEAR_COST 10 + +## Value used for expending stamina during sprinting. +#MINIMUM_SPRINT_COST 0.8 + +## Minimum stamina recovered per tick when resting. +#MINIMUM_STAMINA_RECOVERY 1 + +## Remove the # to let ninjas spawn. Uncomment to enable. +#NINJAS_ALLOWED + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#ROBOT_DELAY 0 + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#RUN_DELAY 2 + +## Determines the severity of athletics skill when applied to stamina cost. +#SKILL_SPRINT_COST_RANGE 0.8 + +## Enables or disables checking for specific tool types by some stack crafting recipes. Uncomment to enable. +#STACK_CRAFTING_USES_TOOLS + +## Enables or disables checking for specific stack types by some stack crafting recipes. +#STACK_CRAFTING_USES_TYPES 1 + +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +#WALK_DELAY 4 + +## +# GAME WORLD +# Configuration options relating to the game world and simulation. +## + +## Determines if special 'Easter-egg' events are active on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR Uncomment to enable. +#ALLOW_HOLIDAYS + +## Determines if players can print copy/pasted integrated circuits. +#ALLOW_IC_PRINTING 1 + +## Determines if ghosts are permitted to write in blood during cult rounds. +#CULT_GHOSTWRITER 1 + +## The maximum duration of an exoplanet day, in minutes. +#EXOPLANET_MAX_DAY_DURATION 40 + +## The minimum duration of an exoplanet day, in minutes. +#EXOPLANET_MIN_DAY_DURATION 10 + +## Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit. +#EXTERIOR_AMBIENT_LIGHT 0 + +## How long the delay is before the Away Mission gate opens. Default is half an hour. +#GATEWAY_DELAY 18000 + +## Humans are forced to have surnames if this is uncommented. Uncomment to enable. +#HUMANS_NEED_SURNAMES + +## What to multiply power by when crossing Z-levels. +#ITERATIVE_EXPLOSIVES_Z_MULTIPLIER 0.75 + +## The power of explosion required for it to cross Z-levels. +#ITERATIVE_EXPLOSIVES_Z_THRESHOLD 10 + +## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode. +#LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010 + +## After this amount alive, walking mushrooms spawned from botany will not reproduce. +#MAXIMUM_MUSHROOMS 15 + +## How much radiation levels self-reduce by each tick. +#RADIATION_DECAY_RATE 1 + +## Below this point, radiation is ignored. +## Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage. +## Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT +#RADIATION_LOWER_LIMIT 0.15 + +## General material radiation resistance is divided by this value. +#RADIATION_MATERIAL_RESISTANCE_DIVISOR 2 + +## The amount of radiation resistance on a turf is multiplied by this value. +#RADIATION_RESISTANCE_MULTIPLIER 1.25 + +## Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on. Uncomment to enable. +ROUNDSTART_LEVEL_GENERATION + +## Unhash this to use iterative explosions, keep it hashed to use circle explosions. Uncomment to enable. +#USE_ITERATIVE_EXPLOSIONS + +## Toggles the restrictive weldervision overlay when wearing welding goggles or a welding helmet. +#WELDER_VISION 1 + +## +# Game Economy +# Configuration options relating to the game economy. +## + +## Duration in deciseconds. Default is 24h (864,000 deciseconds) +#WITHDRAW_PERIOD 864000 + +## Duration in deciseconds. Default is 24h (864,000 deciseconds) +#INTEREST_PERIOD 864000 + +## Duration in deciseconds. Default is 48h (1,728,000 deciseconds) +#INTEREST_MOD_DELAY 1728000 + +## Duration in deciseconds. Default is 72h (2,592,000 deciseconds) +#WITHDRAW_MOD_DELAY 2592000 + +## Duration in deciseconds. Default is 48h (1,728,000 deciseconds) +#TRANSACTION_MOD_DELAY 1728000 + +## Duration in deciseconds. Default is 72h (2,592,000 deciseconds) +FRACTIONAL_RESERVE_MOD_DELAY 2592000 + +## Duration in deciseconds. Default is 48h (1,728,000 deciseconds) +#ANTI_TAMPER_MOD_DELAY 1728000 + +## +# HEALTH +# Configuration options relating to the health simulation. +## + +## Determines whether bones can be broken through excessive damage to the organ. +## 0 means bones can't break, 1 means they can. +#BONES_CAN_BREAK 1 + +## Level of health at which a mob becomes dead. +#HEALTH_THRESHOLD_DEAD -100 + +## Determines whether limbs can be amputated through excessive damage to the organ. +## 0 means limbs can't be amputated, 1 means they can. +#LIMBS_CAN_BREAK 1 + +## Percentage multiplier that influences how damage spreads around organs. 100 means normal, 50 means half. +#ORGAN_DAMAGE_SPILLOVER_MULTIPLIER 0.5 + +## Percentage multiplier which enables organs to take more damage before bones breaking or limbs being destroyed. +#ORGAN_HEALTH_MULTIPLIER 0.9 + +## Percentage multiplier which influences how fast organs regenerate naturally. +#ORGAN_REGENERATION_MULTIPLIER 0.25 + +## Amount of time (in hundredths of seconds) for which a brain retains the 'spark of life' after the person's death (set to -1 for infinite). +#REVIVAL_BRAIN_LIFE -1 + +## A multiplier for the impact stress has on blood regeneration, as above. +#STRESS_BLOOD_RECOVERY_CONSTANT 0.3 + +## A multiplier for the impact stress has on wound passive healing, as above. +#STRESS_HEALING_RECOVERY_CONSTANT 0.3 + +## A multiplier for the impact stress has on shock recovery - 0.3 means maximum stress imposes a 30% penalty on shock recovery. +#STRESS_SHOCK_RECOVERY_CONSTANT 0.5 + +## +# LOGGING +# Configuration options relating to logging. +## + +## log client access (logon/logoff) Uncomment to enable. +#LOG_ACCESS + +## log admin actions Uncomment to enable. +#LOG_ADMIN + +## log admin chat Uncomment to enable. +#LOG_ADMINCHAT + +## Log admin warning messages. Also duplicates a bunch of other messages. Uncomment to enable. +#LOG_ADMINWARN + +## log attack messages Uncomment to enable. +#LOG_ATTACK + +## log debug output Uncomment to enable. +#LOG_DEBUG + +## log emotes Uncomment to enable. +#LOG_EMOTE + +## log game actions (start of round, results, etc.) Uncomment to enable. +#LOG_GAME + +## Log all Topic() calls (for use by coders in tracking down Topic issues). Uncomment to enable. +#LOG_HREFS + +## log OOC channel Uncomment to enable. +#LOG_OOC + +## Log PDA messages. Uncomment to enable. +#LOG_PDA + +## Log world.log and runtime errors to a file. Uncomment to enable. +#LOG_RUNTIME + +## log client Say Uncomment to enable. +#LOG_SAY + +## log player votes Uncomment to enable. +#LOG_VOTE + +## log client Whisper Uncomment to enable. +#LOG_WHISPER + +## Log world.log messages. Uncomment to enable. +#LOG_WORLD_OUTPUT + +## +# MODES +# Configuration options relating to game modes. +## + +## If uncommented, votes can be called to add extra antags to the round. Uncomment to enable. +#ALLOW_EXTRA_ANTAGS + +## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked. +## Malf and Rev will let the shuttle be called when the antags/protags are dead. +## Uncomment to enable. +#CONTINUOUS_ROUNDS + +## Spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard. Uncomment to enable. +#FEATURE_OBJECT_SPELL_SYSTEM + +## Allowed modes. +#MODES ["crossfire","cult","extended","god","heist","mercenary","ninja","revolution","siege","spyvspy","traitor","uprising","wizard"] + +## Mode names. +#MODE_NAMES {"calamity":"Calamity","cult":"Cult","extended":"Extended","god":"Deity","heist":"Heist","meteor":"Meteor","crossfire":"Mercenary & heist","siege":"Mercenary & revolution","spyvspy":"Spy v. spy","uprising":"Cult & revolution","ninja":"Ninja","mercenary":"Mercenary","revolution":"Revolution","traitor":"Traitor","wizard":"Wizard"} + +## Relative probability of each mode. +#PROBABILITIES {"calamity":0,"cult":1,"extended":1,"god":0,"heist":0,"meteor":0,"crossfire":0,"siege":0,"spyvspy":0,"uprising":0,"ninja":0,"mercenary":1,"revolution":0,"traitor":0,"wizard":1} + +## If security is prohibited from being most antagonists. Uncomment to enable. +#PROTECT_ROLES_FROM_ANTAGONIST + +## If amount of traitors scales or not. Uncomment to enable. +#TRAITOR_SCALING + +## A list of modes that should be votable. +#VOTABLE_MODES ["crossfire","cult","extended","god","heist","mercenary","meteor","ninja","revolution","secret","siege","spyvspy","traitor","uprising","wizard"] + +## +# PROTECTED +# Configuration options protected from manipulation on-server. +## + +## Password used for authorizing external tools that can apply bans. +#BAN_COMMS_PASSWORD + +## Password used for authorizing ircbot and other external tools. +#COMMS_PASSWORD + +## Export address where external tools that monitor logins are located. +#LOGIN_EXPORT_ADDR + +## +# RESOURCES +# Configuration options relating to server resources. +## + +## Set this to a file path relative to the executing binary to prefix all custom icon locations with this location ie. '[CUSTOM_ICON_ICON_LOCATION]/[custom icon path value]' +#CUSTOM_ICON_ICON_LOCATION config/custom_icons/icons + +## Set this to a file path relative to the executing binary to prefix all custom item icon locations with this location ie. '[CUSTOM_ITEM_ICON_LOCATION]/[custom item icon path value]' +#CUSTOM_ITEM_ICON_LOCATION config/custom_items/icons + +## Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512), +## the client/resource_rsc var does not function as one would expect. See client_defines.dm, the 'preload_rsc' var's +## comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or +## clients will still download from the server *too*. This will randomly select one URL if more than one is provided. +## Spaces are prohibited in each URL by spec, you must use encoded spaces. +## ex. RESOURCE_URLS URL URL2 URL3 +#RESOURCE_URLS [] + +## +# SERVER +# Configuration options relating to the server itself. +## + +## Comment to disable respawning by default. +#ABANDON_ALLOWED 1 + +## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc. +#ADMIN_IRC + +## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system. +#ADMIN_LEGACY_SYSTEM 1 + +## Allow AI job. +#ALLOW_AI 1 + +## Allow ghosts to join as maintenance drones. +#ALLOW_DRONE_SPAWN 1 + +## Determines if announce shuttle dock announcements are sent to the main IRC channel, if MAIN_IRC has also been setup. Uncomment to enable. +#ANNOUNCE_SHUTTLE_DOCK_TO_IRC + +## Comment to disable the AOOC channel by default. +#AOOC_ALLOWED 1 + +## Ban appeals URL - usually for a forum or wherever people should go to contact your admins. +#BANAPPEALS + +## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system. +#BAN_LEGACY_SYSTEM 1 + +## Sets the number of available character slots. +#CHARACTER_SLOTS 10 + +## Sets the minimum number of cultists needed for ghosts to write in blood. +#CULT_GHOSTWRITER_REQ_CULTISTS 10 + +## Determines if the server should hide itself from the hub when no admins are online.. Uncomment to enable. +#DELIST_WHEN_NO_ADMINS + +## Uncomment to enable. +#DISABLE_PLAYER_MICE + +## Determines if Discord webhooks should be sent in plaintext rather than as embeds. Uncomment to enable. +#DISABLE_WEBHOOK_EMBEDS + +## Discord server permanent invite address. +#DISCORDURL + +## Comment to disable the dead OOC channel by default. +#DOOC_ALLOWED 1 + +## Determines if action spam kicking should be DISABLED. Not recommended; this helps protect from spam attacks. Uncomment to enable. +#DO_NOT_PREVENT_SPAM + +## A drone will become available every X ticks since last drone spawn. Default is 2 minutes. +#DRONE_BUILD_TIME 1200 + +## Comment to disable ghost chat by default. +#DSAY_ALLOWED 1 + +## Comment to prevent anyone from joining the round by default. +#ENTER_ALLOWED 1 + +## Remove the # mark infront of this to forbid admins from posssessing the singularity. Uncomment to enable. +#FORBID_SINGULO_POSSESSION + +## Discussion forum address. +#FORUMURL + +## Defines world FPS. Defaults to 20. +## Can also accept ticklag values (0.9, 0.5, etc) which will automatically be converted to FPS. +#FPS 20 + +## GitHub address. +#GITHUBURL + +## Determines whether or not people without a registered ckey (i.e. guest-*) can connect to your server. Uncomment to enable. +#GUESTS_ALLOWED + +## Set a hosted by name for UNIX platforms. +#HOSTEDBY + +## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to visible. This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly. Uncomment to enable. +#HUB_VISIBILITY + +## Host where the IRC bot is hosted. Port 45678 needs to be open. +#IRC_BOT_HOST localhost + +## GitHub new issue address. +#ISSUEREPORTURL + +## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments. +#JOBS_HAVE_MINIMAL_ACCESS 1 + +## Disconnect players who did nothing during the set amount of minutes. +#KICK_INACTIVE 0 + +## Sets the number of loadout slots per character. +#LOADOUT_SLOTS 3 + +## Toggle for having jobs load up from the .txt Uncomment to enable. +#LOAD_JOBS_FROM_TXT + +## Comment to disable the LOOC channel by default. +#LOOC_ALLOWED 1 + +## IRC channel to send information to. Leave blank to disable. +#MAIN_IRC #main + +## Remove the # to define a different cap for aspect points in chargen. +#MAX_CHARACTER_ASPECTS 5 + +## This many drones can be active at the same time. +#MAX_MAINT_DRONES 5 + +## Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000). +#MINIMUM_BYOND_BUILD 0 + +## Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511). +#MINIMUM_BYOND_VERSION 0 + +## Uncomment to enable. +#NO_CLICK_COOLDOWN + +## Whether or not to make localhost immune to throttling. +## Localhost will still be throttled internally; it just won't be affected by it. +## Uncomment to enable. +#NO_THROTTLE_LOCALHOST + +## Comment to disable the OOC channel by default. +#OOC_ALLOWED 1 + +## Is the panic bunker currently on by default? Uncomment to enable. +#PANIC_BUNKER + +## A message when user did not pass the panic bunker. +#PANIC_BUNKER_MESSAGE Sorry! The panic bunker is enabled. Please head to our Discord or forum to get yourself added to the panic bunker bypass. + +## The maximum number of non-admin players online. +#PLAYER_LIMIT 0 + +## Respawn delay in minutes before one may respawn as a crew member. +#RESPAWN_DELAY 30 + +## Set a server location for world reboot. Don't include the byond://, just give the address and port. +#SERVER + +## Set a server URL for the IRC bot to use; like SERVER, don't include the byond:// +## Unlike SERVER, this one shouldn't break auto-reconnect. +#SERVERURL + +## Server name: This appears at the top of the screen in-game. +#SERVER_NAME Nebula 13 + +## Determinese if a typing indicator shows overhead for people currently writing whispers. Uncomment to enable. +#SHOW_TYPING_INDICATOR_FOR_WHISPERS + +## SSinitialization throttling. +#TICK_LIMIT_MC_INIT 98 + +## Set to 1 to prevent newly-spawned mice from understanding human speech. Uncomment to enable. +#UNEDUCATED_MICE + +## Determines if non-admins are restricted from using humanoid alien races. Uncomment to enable. +#USEALIENWHITELIST + +## Determines if the alien whitelist should use SQL instead of the legacy system. (requires the above uncommented as well). Uncomment to enable. +#USEALIENWHITELIST_SQL + +## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. +## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans). +## Uncomment to enable. +#USEWHITELIST + +## Determines if data is sent to the IRC bot. Generally requires MAIN_IRC and associated setup. Uncomment to enable. +#USE_IRC_BOT + +## Remove the # in front of this config option to have loyalty implants spawn by default on your server. Uncomment to enable. +#USE_LOYALTY_IMPLANTS + +## Determines if Dream Daemon should refuse to reboot for any reason other than SIGUSR1. Uncomment to enable. +#WAIT_FOR_SIGUSR1_REBOOT + +## Wiki address. +#WIKIURL + +## +# VOTING +# Configuration options relating to votes at runtime. +## + +## Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect. +## You'll also likely need to enable WAIT_FOR_SIGUSR1 below. +## Uncomment to enable. +#ALLOW_MAP_SWITCHING + +## Allow players to initate a mode-change start. Uncomment to enable. +#ALLOW_VOTE_MODE + +## Allow players to initiate a restart vote. Uncomment to enable. +#ALLOW_VOTE_RESTART + +## Determines if the automatic map vote and switch are called at end of round. MAP_SWITCHING must also be enabled. Uncomment to enable. +#AUTO_MAP_VOTE + +## Time left (seconds) before round start when automatic gamemote vote is called (default 160). +#VOTE_AUTOGAMEMODE_TIMELEFT 100 + +## Autovote initial delay (deciseconds) before first automatic transfer vote call (default 180 minutes). +#VOTE_AUTOTRANSFER_INITIAL 108000 + +## Autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes). +#VOTE_AUTOTRANSFER_INTERVAL 18000 + +## Min delay (deciseconds) between voting sessions (default 10 minutes). +#VOTE_DELAY 6000 + +## Prevents dead players from voting or starting votes. +#VOTE_NO_DEAD 0 + +## Prevents players not in-round from voting on crew transfer votes. +#VOTE_NO_DEAD_CREW_TRANSFER 0 + +## Players' votes default to 'No vote' (otherwise, default to 'No change'). +#VOTE_NO_DEFAULT 0 + +## Time period (deciseconds) which voting session will last (default 1 minute). +#VOTE_PERIOD 600 + +## +# Serialization +# Configuration options relating to serialization and autosave. +## + +## Time in deciseconds between automated world saves. Default is every 120 minutes (72,000 deciseconds). +#AUTOSAVE_INTERVAL 72000 + +## Uptime in deciseconds after which the next autosave will force a server reboot. Default is 12 Hours (432,000 deciseconds). Setting to 0 disables it. +#AUTOSAVE_AUTO_RESTART 432000 + +## !! - Use With Caution - !! +## Set what kind of errors will be skipped over during saving/loading if encountered. Default is "NONE". +## This value is meant to be used for rescuing a broken save, or forcing a broken save to work. As it will most likely cause problems if used constantly. +## The possible values are: "NONE"->No errors allowed at all, "RECOVERABLE"->Only recoverable errors allowed, "ANY"->Any error, even connection error will be ignored. +#SAVE_ERROR_TOLERANCE NONE \ No newline at end of file diff --git a/config/example/dbconfig_docker.txt b/config/example/dbconfig_docker.txt index 7f3fe3ba666..c38b070799e 100644 --- a/config/example/dbconfig_docker.txt +++ b/config/example/dbconfig_docker.txt @@ -1,6 +1,9 @@ # For running on the included Dockerized database + gameserver # MySQL Connection Configuration +# First of all, should SQL be used at all. Unhash next line, if yes +# ENABLED + # Server the MySQL database can be found at # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. ADDRESS db diff --git a/config/example/game_options.txt b/config/example/game_options.txt deleted file mode 100644 index 31e364d83e4..00000000000 --- a/config/example/game_options.txt +++ /dev/null @@ -1,122 +0,0 @@ -### HEALTH ### - -## level of health at which a mob goes into continual shock (soft crit) -HEALTH_THRESHOLD_SOFTCRIT 0 - -## level of health at which a mob becomes unconscious (crit) -HEALTH_THRESHOLD_CRIT -50 - -## level of health at which a mob becomes dead -HEALTH_THRESHOLD_DEAD -100 - -## Uncomment this line to enable humans showing a visible message upon death ('X seizes up then falls limp, eyes dead and lifeless'). -# SHOW_HUMAN_DEATH_MESSAGE - -## Determines whether bones can be broken through excessive damage to the organ -## 0 means bones can't break, 1 means they can -BONES_CAN_BREAK 1 -## Determines whether limbs can be amputated through excessive damage to the organ -## 0 means limbs can't be amputated, 1 means they can -LIMBS_CAN_BREAK 1 - -## multiplier which enables organs to take more damage before bones breaking or limbs being destroyed -## 100 means normal, 50 means half -ORGAN_HEALTH_MULTIPLIER 90 - -## multiplier which influences how fast organs regenerate naturally -## 100 means normal, 50 means half -ORGAN_REGENERATION_MULTIPLIER 25 - -### REVIVAL ### - -## whether pod plants work or not -REVIVAL_POD_PLANTS 1 - -## whether cloning tubes work or not -REVIVAL_CLONING 1 - -## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) -REVIVAL_BRAIN_LIFE -1 - - - -### MOB MOVEMENT ### - -## We suggest editing these variabled in-game to find a good speed for your server. To do this you must be a high level admin. Open the 'debug' tab ingame. Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name. - -## These values get directly added to values and totals in-game. To speed things up make the number negative, to slow things down, make the number positive. - - -## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_DELAY 2 -WALK_DELAY 4 -CREEP_DELAY 6 - -## Set this to 0 for perfectly smooth movement gliding, or 1 or more for delayed chess move style movements. -#GLIDE_SIZE_DELAY 0 - -MINIMUM_SPRINT_COST 0.8 -SKILL_SPRINT_COST_RANGE 0.8 -MINIMUM_STAMINA_RECOVERY 5 -MAXIMUM_STAMINA_RECOVERY 5 - -## The variables below affect the movement of specific mob types. -HUMAN_DELAY 0 -ROBOT_DELAY 0 -MONKEY_DELAY 0 -ALIEN_DELAY 0 -ANIMAL_DELAY 0 - -### Economy ### - -## Values for these settings are given in days. - -WITHDRAW_PERIOD 1 -INTEREST_PERIOD 1 - -## Delays for modifications to accounts. -INTEREST_MOD_DELAY 2 -WITHDRAW_MOD_DELAY 3 -TRANSACTION_MOD_DELAY 2 -FRACTIONAL_RESERVE_MOD_DELAY 3 -ANTI_TAMPER_MOD_DELAY 2 - -### Miscellaneous ### - -## Config options which, of course, don't fit into previous categories. - -## Remove the # in front of this config option to have loyalty implants spawn by default on your server. -#USE_LOYALTY_IMPLANTS - -## Uncomment to lock the automatic client view scaling on the X or Y boundary. -#LOCK_CLIENT_VIEW_X 15 -#LOCK_CLIENT_VIEW_Y 15 - -## Change to set a maximum size for the client view scaling. -MAX_CLIENT_VIEW_X 30 -MAX_CLIENT_VIEW_Y 30 - -## Remove the # to define a different cap for aspect points in chargen. -#MAX_CHARACTER_ASPECTS 5 - -## Allow multiple input keys to be pressed for diagonal movement. -#ALLOW_DIAGONAL_MOVEMENT - -## Threshold of where brain damage begins to affect dexterity (70 brainloss above this means zero dexterity). Default is 30. -#DEXTERITY_MALUS_BRAINLOSS_THRESHOLD 30 - -## Whether or not all human mobs have very basic darksight by default. -#GRANT_DEFAULT_DARKSIGHT - -## The range and effectiveness of default darksight if above is uncommented. -#DEFAULT_DARKSIGHT_EFFECTIVENESS 0.05 -#DEFAULT_DARKSIGHT_RANGE 2 - -## Uncomment to allow stressors to impact shock, healing and blood recovery. -#ADJUST_HEALING_FROM_STRESS -## A multiplier for the impact stress has on shock recovery - 0.3 means maximum stress imposes a 30% penalty on shock recovery. -#STRESS_SHOCK_RECOVERY_CONSTANT 0.5 -## A multiplier for the impact stress has on wound passive healing, as above. -#STRESS_HEALING_RECOVERY_CONSTANT 0.3 -## A multiplier for the impact stress has on blood regeneration, as above. -#STRESS_BLOOD_RECOVERY_CONSTANT 0.3 diff --git a/data/character_info/.gitkeep b/data/character_info/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/html/browser/common.css b/html/browser/common.css index 29ea058136d..68579cf39ad 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -135,10 +135,8 @@ h4 .uiWrapper { - width: 100%; height: 100%; - padding-top:32px; } .uiTitle @@ -153,19 +151,11 @@ h4 .uiTitleWrapper { - position:fixed; - top:0px; - left:0px; - right:0px; - z-index: 10 + z-index: 10; } .uiTitleButtons { - position:fixed; - top:0px; - right:0px; - height:32px; z-index:11; } diff --git a/html/changelog.html b/html/changelog.html index dcace87a995..b9cc20c478d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -97,56 +97,129 @@

    Penelope Haze updated:

    06 July 2023

    24 October 2023

    +

    08 March 2024

    MistakeNot4892 updated:

      -
    • Exterior turfs and lighting blend across z-level transitions now.
    • +
    • Combs, brushes and files are available in loadout.
    • +
    • New grooming activities added.
    • +
    • Long grass will partially mask things inside it.
    -

    20 October 2023

    +

    06 March 2024

    MistakeNot4892 updated:

      -
    • Acid resistance has been tweaked; report things melting or not melting unexpectedly on the bug tracker.
    • -
    • Flashlights, flares and lamps have new overlays and some new states.
    • +
    • Silver/gold/diamond pickaxes are now steel/plasteel/titanium.
    -

    18 October 2023

    +

    03 March 2024

    MistakeNot4892 updated:

      -
    • Falling a longer distance will now cause more damage.
    • +
    • Snow and grass can be removed with a shovel.
    -

    15 October 2023

    +

    02 March 2024

    MistakeNot4892 updated:

      -
    • You will now be able to tell if you can equip an item by mousing over the equipment slot with the item in your active hand.
    • +
    • Trees and logs give more logs/planks.
    • +
    • Static fluid turfs are now dynamic fluid turfs.
    -

    05 October 2023

    +

    29 February 2024

    MistakeNot4892 updated:

      -
    • Surgery now has more/different sounds.
    • +
    • Hot temperatures can now melt items.
    -

    01 October 2023

    -

    John updated:

    +

    28 February 2024

    +

    MistakeNot4892 updated:

    +
      +
    • The Chinese food vendor has slightly different wares.
    • +
    + +

    27 February 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Tails may not be covered by some clothing anymore.
    • +
    + +

    19 February 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Trees can be cut down into logs.
    • +
    + +

    17 February 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Bricks can now be used to build walls without girders.
    • +
    + +

    16 February 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Plates are no longer part of food when it emerges from the microwave, and must be retrieved from the dinnerware vendor and used to plate food.
    • +
    + +

    10 February 2024

    +

    MistakeNot4892 updated:

      -
    • Lifepods avoid location they are escaping from.
    • +
    • Loot piles have been added to the Tradeship underside.
    -

    11 September 2023

    -

    LenSkozzy updated:

    +

    01 February 2024

    +

    MistakeNot4892 updated:

      -
    • Fixed ID object initialization
    • +
    • Bearcat wreck now has network infrastructure.
    • +
    • Egg and donut boxes are slightly fancier.
    • +
    • Pizza stacks have been enhanced to dangerous levels.
    + +

    24 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • All living mobs can now hallucinate.
    • +
    + +

    23 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • All living mobs can now dream.
    • +
    + +

    16 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Configuration has been rewritten to a new format. Servers with configuration changes from defaults will need to run the server to generate the new config file, then mirror their configuration changes in the new config system. Check the PR body for details.
    • +
    + +

    15 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • You can now use arrow buttons to adjust markings and hair in character setup.
    • +
    + +

    14 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Manuals have been rewritten to pull information from the codex instead of the wiki.
    • +
    + +

    12 January 2024

    NataKilar updated:

      -
    • Fixed water tanks being unable to be refilled
    • +
    • Eases contamination protection requirements slightly
    • +
    + +

    09 January 2024

    +

    MistakeNot4892 updated:

    +
      +
    • Simple mobs will now show a windup before hitting you in melee, allowing you to dodge.
    -

    04 September 2023

    -

    LenSkozzy updated:

    +

    08 January 2024

    +

    Greenjoe12345 updated:

      -
    • fixed folding@home
    • +
    • Pew sprites from Aurorastation
    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ec041fa9881..089dd24d0a9 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14549,3 +14549,108 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2023-10-24: MistakeNot4892: - tweak: Exterior turfs and lighting blend across z-level transitions now. +2023-11-09: + MistakeNot4892: + - tweak: Taj can now cycle voidsuits and have custom icons for them. +2023-12-07: + MistakeNot4892: + - tweak: Suit sensors are now an accessory on your uniform that can be removed. +2023-12-09: + MistakeNot4892: + - tweak: Examining batons and energy guns should now show you the cell they have + loaded, or require loading. +2023-12-14: + MistakeNot4892: + - tweak: Neo-avian icons have been reindexed so may look slightly different. + - tweak: Drills now function as shovels. + - tweak: Clay can now be dug up from stationary drills. + - tweak: Duct tape can be used to repair prosthetic faults. +2023-12-18: + MistakeNot4892: + - tweak: Updated ministation from ScavStation. Lots of changes, see PR. + - tweak: Jump is now handled by selecting jump from the prepare button on the bottom + right of the UI, then clicking the target. +2023-12-19: + CheeseDogg0: + - tweak: Changed some of the more ridiculous numbers to bring them more in line + with real life +2023-12-27: + MistakeNot4892: + - tweak: Heating atoms like beakers with fire or a welding torch should be more + consistent now. +2023-12-28: + MistakeNot4892: + - tweak: Some mech equipment origin tech has changed. Please report any missing + or odd values. +2024-01-08: + Greenjoe12345: + - imageadd: Pew sprites from Aurorastation +2024-01-09: + MistakeNot4892: + - tweak: Simple mobs will now show a windup before hitting you in melee, allowing + you to dodge. +2024-01-12: + NataKilar: + - tweak: Eases contamination protection requirements slightly +2024-01-14: + MistakeNot4892: + - tweak: Manuals have been rewritten to pull information from the codex instead + of the wiki. +2024-01-15: + MistakeNot4892: + - tweak: You can now use arrow buttons to adjust markings and hair in character + setup. +2024-01-16: + MistakeNot4892: + - tweak: Configuration has been rewritten to a new format. Servers with configuration + changes from defaults will need to run the server to generate the new config + file, then mirror their configuration changes in the new config system. Check + the PR body for details. +2024-01-23: + MistakeNot4892: + - tweak: All living mobs can now dream. +2024-01-24: + MistakeNot4892: + - tweak: All living mobs can now hallucinate. +2024-02-01: + MistakeNot4892: + - tweak: Bearcat wreck now has network infrastructure. + - tweak: Egg and donut boxes are slightly fancier. + - tweak: Pizza stacks have been enhanced to dangerous levels. +2024-02-10: + MistakeNot4892: + - tweak: Loot piles have been added to the Tradeship underside. +2024-02-16: + MistakeNot4892: + - tweak: Plates are no longer part of food when it emerges from the microwave, and + must be retrieved from the dinnerware vendor and used to plate food. +2024-02-17: + MistakeNot4892: + - tweak: Bricks can now be used to build walls without girders. +2024-02-19: + MistakeNot4892: + - tweak: Trees can be cut down into logs. +2024-02-27: + MistakeNot4892: + - tweak: Tails may not be covered by some clothing anymore. +2024-02-28: + MistakeNot4892: + - tweak: The Chinese food vendor has slightly different wares. +2024-02-29: + MistakeNot4892: + - tweak: Hot temperatures can now melt items. +2024-03-02: + MistakeNot4892: + - tweak: Trees and logs give more logs/planks. + - tweak: Static fluid turfs are now dynamic fluid turfs. +2024-03-03: + MistakeNot4892: + - tweak: Snow and grass can be removed with a shovel. +2024-03-06: + MistakeNot4892: + - tweak: Silver/gold/diamond pickaxes are now steel/plasteel/titanium. +2024-03-08: + MistakeNot4892: + - tweak: Combs, brushes and files are available in loadout. + - tweak: New grooming activities added. + - tweak: Long grass will partially mask things inside it. diff --git a/icons/atmos/tank.dmi b/icons/atmos/tank.dmi index c36c231a14e..78b09180404 100644 Binary files a/icons/atmos/tank.dmi and b/icons/atmos/tank.dmi differ diff --git a/icons/clothing/accessories/vitals_sensor.dmi b/icons/clothing/accessories/vitals_sensor.dmi new file mode 100644 index 00000000000..173a293306a Binary files /dev/null and b/icons/clothing/accessories/vitals_sensor.dmi differ diff --git a/icons/clothing/head/hardhat/medic.dmi b/icons/clothing/head/hardhat/medic.dmi index 92c875a6d31..d6a350b74c0 100644 Binary files a/icons/clothing/head/hardhat/medic.dmi and b/icons/clothing/head/hardhat/medic.dmi differ diff --git a/icons/clothing/head/pumpkin.dmi b/icons/clothing/head/pumpkin.dmi index c38d51b6d7f..de6ac8af04e 100644 Binary files a/icons/clothing/head/pumpkin.dmi and b/icons/clothing/head/pumpkin.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet.dmi b/icons/clothing/rigs/helmets/helmet.dmi index e1c45ca7a4c..14285e33acf 100644 Binary files a/icons/clothing/rigs/helmets/helmet.dmi and b/icons/clothing/rigs/helmets/helmet.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_engineering.dmi b/icons/clothing/rigs/helmets/helmet_engineering.dmi index 1e8b629140d..7e29a7f6a6d 100644 Binary files a/icons/clothing/rigs/helmets/helmet_engineering.dmi and b/icons/clothing/rigs/helmets/helmet_engineering.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_eva.dmi b/icons/clothing/rigs/helmets/helmet_eva.dmi index 1f857d75eba..f121efa0475 100644 Binary files a/icons/clothing/rigs/helmets/helmet_eva.dmi and b/icons/clothing/rigs/helmets/helmet_eva.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_hacker.dmi b/icons/clothing/rigs/helmets/helmet_hacker.dmi index 2c9bd94cc48..7a281642597 100644 Binary files a/icons/clothing/rigs/helmets/helmet_hacker.dmi and b/icons/clothing/rigs/helmets/helmet_hacker.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_hazard.dmi b/icons/clothing/rigs/helmets/helmet_hazard.dmi index 9cad81f4e81..1d43df8e1ed 100644 Binary files a/icons/clothing/rigs/helmets/helmet_hazard.dmi and b/icons/clothing/rigs/helmets/helmet_hazard.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_light.dmi b/icons/clothing/rigs/helmets/helmet_light.dmi index f5a47e560fb..bf6d09979b8 100644 Binary files a/icons/clothing/rigs/helmets/helmet_light.dmi and b/icons/clothing/rigs/helmets/helmet_light.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_medical.dmi b/icons/clothing/rigs/helmets/helmet_medical.dmi index e67ac770e0f..be2e63201bd 100644 Binary files a/icons/clothing/rigs/helmets/helmet_medical.dmi and b/icons/clothing/rigs/helmets/helmet_medical.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_merc.dmi b/icons/clothing/rigs/helmets/helmet_merc.dmi index 9983084a717..ca3c374bfbe 100644 Binary files a/icons/clothing/rigs/helmets/helmet_merc.dmi and b/icons/clothing/rigs/helmets/helmet_merc.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi b/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi index 4709c046408..ce785a1ffeb 100644 Binary files a/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi and b/icons/clothing/rigs/helmets/helmet_merc_heavy.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_military.dmi b/icons/clothing/rigs/helmets/helmet_military.dmi index 0d5a6fde18c..47087a31ca3 100644 Binary files a/icons/clothing/rigs/helmets/helmet_military.dmi and b/icons/clothing/rigs/helmets/helmet_military.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_ninja.dmi b/icons/clothing/rigs/helmets/helmet_ninja.dmi index 2a8bd061c63..7ca2eb42227 100644 Binary files a/icons/clothing/rigs/helmets/helmet_ninja.dmi and b/icons/clothing/rigs/helmets/helmet_ninja.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_null.dmi b/icons/clothing/rigs/helmets/helmet_null.dmi index 8911b076d16..ceb0366983c 100644 Binary files a/icons/clothing/rigs/helmets/helmet_null.dmi and b/icons/clothing/rigs/helmets/helmet_null.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_science.dmi b/icons/clothing/rigs/helmets/helmet_science.dmi index b3d88ce7053..269036f0438 100644 Binary files a/icons/clothing/rigs/helmets/helmet_science.dmi and b/icons/clothing/rigs/helmets/helmet_science.dmi differ diff --git a/icons/clothing/rigs/helmets/helmet_security.dmi b/icons/clothing/rigs/helmets/helmet_security.dmi index cf8b399e9d3..d121e4748fa 100644 Binary files a/icons/clothing/rigs/helmets/helmet_security.dmi and b/icons/clothing/rigs/helmets/helmet_security.dmi differ diff --git a/icons/effects/alpha_mask.dmi b/icons/effects/alpha_mask.dmi new file mode 100644 index 00000000000..020370f1662 Binary files /dev/null and b/icons/effects/alpha_mask.dmi differ diff --git a/icons/effects/landmarks.dmi b/icons/effects/landmarks.dmi index ee024440fb3..c69935c2a6d 100644 Binary files a/icons/effects/landmarks.dmi and b/icons/effects/landmarks.dmi differ diff --git a/icons/effects/liquids.dmi b/icons/effects/liquids.dmi index 4712a35a852..965e319bc4a 100644 Binary files a/icons/effects/liquids.dmi and b/icons/effects/liquids.dmi differ diff --git a/icons/effects/markers.dmi b/icons/effects/markers.dmi new file mode 100644 index 00000000000..d3a3912b85c Binary files /dev/null and b/icons/effects/markers.dmi differ diff --git a/icons/mecha/mecha_preview.dmi b/icons/mecha/mecha_preview.dmi new file mode 100644 index 00000000000..98f4a9985de Binary files /dev/null and b/icons/mecha/mecha_preview.dmi differ diff --git a/icons/mob/human_races/species/default_cosmetics.dmi b/icons/mob/human_races/species/default_cosmetics.dmi new file mode 100644 index 00000000000..f2e9eb20b07 Binary files /dev/null and b/icons/mob/human_races/species/default_cosmetics.dmi differ diff --git a/icons/mob/human_races/species/default_damage_overlays.dmi b/icons/mob/human_races/species/default_damage_overlays.dmi index 31986efb86e..76110a61235 100644 Binary files a/icons/mob/human_races/species/default_damage_overlays.dmi and b/icons/mob/human_races/species/default_damage_overlays.dmi differ diff --git a/icons/mob/human_races/species/default_frills.dmi b/icons/mob/human_races/species/default_frills.dmi new file mode 100644 index 00000000000..4e445d46e06 Binary files /dev/null and b/icons/mob/human_races/species/default_frills.dmi differ diff --git a/icons/mob/human_races/species/default_horns.dmi b/icons/mob/human_races/species/default_horns.dmi new file mode 100644 index 00000000000..4e445d46e06 Binary files /dev/null and b/icons/mob/human_races/species/default_horns.dmi differ diff --git a/icons/mob/human_races/species/human/facial.dmi b/icons/mob/human_races/species/human/facial.dmi index 25fde2d870d..d3e78a757bf 100644 Binary files a/icons/mob/human_races/species/human/facial.dmi and b/icons/mob/human_races/species/human/facial.dmi differ diff --git a/icons/mob/human_races/species/human/hair.dmi b/icons/mob/human_races/species/human/hair.dmi index 459e4531714..b7b020740f3 100644 Binary files a/icons/mob/human_races/species/human/hair.dmi and b/icons/mob/human_races/species/human/hair.dmi differ diff --git a/icons/mob/human_races/species/lips.dmi b/icons/mob/human_races/species/lips.dmi deleted file mode 100644 index 42e9e7f2b6f..00000000000 Binary files a/icons/mob/human_races/species/lips.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/monkey_body.dmi b/icons/mob/human_races/species/monkey/monkey_body.dmi index 11779ee5b99..37d59e1ceeb 100644 Binary files a/icons/mob/human_races/species/monkey/monkey_body.dmi and b/icons/mob/human_races/species/monkey/monkey_body.dmi differ diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi deleted file mode 100644 index 904cefc9679..00000000000 Binary files a/icons/mob/light_overlays.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand.dmi b/icons/mob/onmob/items/lefthand.dmi index 325eb614446..4429d9a1fac 100644 Binary files a/icons/mob/onmob/items/lefthand.dmi and b/icons/mob/onmob/items/lefthand.dmi differ diff --git a/icons/mob/onmob/items/righthand.dmi b/icons/mob/onmob/items/righthand.dmi index 2638b0bf92a..0c19d13dce4 100644 Binary files a/icons/mob/onmob/items/righthand.dmi and b/icons/mob/onmob/items/righthand.dmi differ diff --git a/icons/mob/screen_ai.dmi b/icons/mob/screen/ai.dmi similarity index 100% rename from icons/mob/screen_ai.dmi rename to icons/mob/screen/ai.dmi diff --git a/icons/mob/screen/effects.dmi b/icons/mob/screen/effects.dmi new file mode 100644 index 00000000000..955eff3e194 Binary files /dev/null and b/icons/mob/screen/effects.dmi differ diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen/full.dmi similarity index 100% rename from icons/mob/screen_full.dmi rename to icons/mob/screen/full.dmi diff --git a/icons/mob/screen/grabs.dmi b/icons/mob/screen/grabs.dmi new file mode 100644 index 00000000000..fab4a611566 Binary files /dev/null and b/icons/mob/screen/grabs.dmi differ diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi deleted file mode 100644 index 01dbd6c6479..00000000000 Binary files a/icons/mob/screen/midnight.dmi and /dev/null differ diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi deleted file mode 100644 index e87aebf1312..00000000000 Binary files a/icons/mob/screen/minimalist.dmi and /dev/null differ diff --git a/icons/mob/screen/old-noborder.dmi b/icons/mob/screen/old-noborder.dmi deleted file mode 100644 index 18e49fc9c88..00000000000 Binary files a/icons/mob/screen/old-noborder.dmi and /dev/null differ diff --git a/icons/mob/screen/old.dmi b/icons/mob/screen/old.dmi deleted file mode 100644 index cc52abc3909..00000000000 Binary files a/icons/mob/screen/old.dmi and /dev/null differ diff --git a/icons/mob/screen/orange.dmi b/icons/mob/screen/orange.dmi deleted file mode 100644 index cb94ada06c8..00000000000 Binary files a/icons/mob/screen/orange.dmi and /dev/null differ diff --git a/icons/mob/screen_phenomena.dmi b/icons/mob/screen/phenomena.dmi similarity index 100% rename from icons/mob/screen_phenomena.dmi rename to icons/mob/screen/phenomena.dmi diff --git a/icons/mob/screen/spells.dmi b/icons/mob/screen/spells.dmi new file mode 100644 index 00000000000..d574921544d Binary files /dev/null and b/icons/mob/screen/spells.dmi differ diff --git a/icons/mob/screen/storage.dmi b/icons/mob/screen/storage.dmi new file mode 100644 index 00000000000..dd0313f518e Binary files /dev/null and b/icons/mob/screen/storage.dmi differ diff --git a/icons/mob/screen/styles/charge.dmi b/icons/mob/screen/styles/charge.dmi new file mode 100644 index 00000000000..265c213516d Binary files /dev/null and b/icons/mob/screen/styles/charge.dmi differ diff --git a/icons/mob/screen/styles/constructs/artificer/health.dmi b/icons/mob/screen/styles/constructs/artificer/health.dmi new file mode 100644 index 00000000000..04e75e41ab3 Binary files /dev/null and b/icons/mob/screen/styles/constructs/artificer/health.dmi differ diff --git a/icons/mob/screen/styles/constructs/harvester/health.dmi b/icons/mob/screen/styles/constructs/harvester/health.dmi new file mode 100644 index 00000000000..be13fae9125 Binary files /dev/null and b/icons/mob/screen/styles/constructs/harvester/health.dmi differ diff --git a/icons/mob/screen/styles/constructs/juggernaut/health.dmi b/icons/mob/screen/styles/constructs/juggernaut/health.dmi new file mode 100644 index 00000000000..aaec933b19e Binary files /dev/null and b/icons/mob/screen/styles/constructs/juggernaut/health.dmi differ diff --git a/icons/mob/screen/styles/constructs/status_fire.dmi b/icons/mob/screen/styles/constructs/status_fire.dmi new file mode 100644 index 00000000000..d25bae5b1f0 Binary files /dev/null and b/icons/mob/screen/styles/constructs/status_fire.dmi differ diff --git a/icons/mob/screen/styles/constructs/wraith/health.dmi b/icons/mob/screen/styles/constructs/wraith/health.dmi new file mode 100644 index 00000000000..43000b7c72b Binary files /dev/null and b/icons/mob/screen/styles/constructs/wraith/health.dmi differ diff --git a/icons/mob/screen/styles/constructs/zone_selector.dmi b/icons/mob/screen/styles/constructs/zone_selector.dmi new file mode 100644 index 00000000000..698da564e03 Binary files /dev/null and b/icons/mob/screen/styles/constructs/zone_selector.dmi differ diff --git a/icons/mob/screen1_health.dmi b/icons/mob/screen/styles/crit_markers.dmi similarity index 100% rename from icons/mob/screen1_health.dmi rename to icons/mob/screen/styles/crit_markers.dmi diff --git a/icons/mob/screen/styles/health.dmi b/icons/mob/screen/styles/health.dmi new file mode 100644 index 00000000000..efb0feed226 Binary files /dev/null and b/icons/mob/screen/styles/health.dmi differ diff --git a/icons/mob/screen/styles/hydration.dmi b/icons/mob/screen/styles/hydration.dmi new file mode 100644 index 00000000000..9abddcf6305 Binary files /dev/null and b/icons/mob/screen/styles/hydration.dmi differ diff --git a/icons/mob/screen/styles/intents.dmi b/icons/mob/screen/styles/intents.dmi new file mode 100644 index 00000000000..3c26214b74e Binary files /dev/null and b/icons/mob/screen/styles/intents.dmi differ diff --git a/icons/mob/screen/styles/internals.dmi b/icons/mob/screen/styles/internals.dmi new file mode 100644 index 00000000000..0ddffa7023c Binary files /dev/null and b/icons/mob/screen/styles/internals.dmi differ diff --git a/icons/mob/screen/styles/midnight/attack_selector.dmi b/icons/mob/screen/styles/midnight/attack_selector.dmi new file mode 100644 index 00000000000..7b9149d4d98 Binary files /dev/null and b/icons/mob/screen/styles/midnight/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/midnight/fire_intent.dmi b/icons/mob/screen/styles/midnight/fire_intent.dmi new file mode 100644 index 00000000000..dad75b05488 Binary files /dev/null and b/icons/mob/screen/styles/midnight/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/midnight/hands.dmi b/icons/mob/screen/styles/midnight/hands.dmi new file mode 100644 index 00000000000..a55f123b2f9 Binary files /dev/null and b/icons/mob/screen/styles/midnight/hands.dmi differ diff --git a/icons/mob/screen/styles/midnight/interaction.dmi b/icons/mob/screen/styles/midnight/interaction.dmi new file mode 100644 index 00000000000..f43b95ad2ee Binary files /dev/null and b/icons/mob/screen/styles/midnight/interaction.dmi differ diff --git a/icons/mob/screen/styles/midnight/inventory.dmi b/icons/mob/screen/styles/midnight/inventory.dmi new file mode 100644 index 00000000000..6bc91ff98ad Binary files /dev/null and b/icons/mob/screen/styles/midnight/inventory.dmi differ diff --git a/icons/mob/screen/styles/midnight/movement.dmi b/icons/mob/screen/styles/midnight/movement.dmi new file mode 100644 index 00000000000..443fe61eb20 Binary files /dev/null and b/icons/mob/screen/styles/midnight/movement.dmi differ diff --git a/icons/mob/screen/styles/midnight/uphint.dmi b/icons/mob/screen/styles/midnight/uphint.dmi new file mode 100644 index 00000000000..548946e06e4 Binary files /dev/null and b/icons/mob/screen/styles/midnight/uphint.dmi differ diff --git a/icons/mob/screen/styles/midnight/zone_selector.dmi b/icons/mob/screen/styles/midnight/zone_selector.dmi new file mode 100644 index 00000000000..93ff92e47e3 Binary files /dev/null and b/icons/mob/screen/styles/midnight/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/minimalist/attack_selector.dmi b/icons/mob/screen/styles/minimalist/attack_selector.dmi new file mode 100644 index 00000000000..c5a7e57c522 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/minimalist/fire_intent.dmi b/icons/mob/screen/styles/minimalist/fire_intent.dmi new file mode 100644 index 00000000000..62efd8ca867 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/minimalist/hands.dmi b/icons/mob/screen/styles/minimalist/hands.dmi new file mode 100644 index 00000000000..28264b0635f Binary files /dev/null and b/icons/mob/screen/styles/minimalist/hands.dmi differ diff --git a/icons/mob/screen/styles/minimalist/intents.dmi b/icons/mob/screen/styles/minimalist/intents.dmi new file mode 100644 index 00000000000..4f4dbaa0b84 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/intents.dmi differ diff --git a/icons/mob/screen/styles/minimalist/interaction.dmi b/icons/mob/screen/styles/minimalist/interaction.dmi new file mode 100644 index 00000000000..8a4875e964f Binary files /dev/null and b/icons/mob/screen/styles/minimalist/interaction.dmi differ diff --git a/icons/mob/screen/styles/minimalist/inventory.dmi b/icons/mob/screen/styles/minimalist/inventory.dmi new file mode 100644 index 00000000000..d2d055fe753 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/inventory.dmi differ diff --git a/icons/mob/screen/styles/minimalist/movement.dmi b/icons/mob/screen/styles/minimalist/movement.dmi new file mode 100644 index 00000000000..3a3115d5b88 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/movement.dmi differ diff --git a/icons/mob/screen/styles/minimalist/uphint.dmi b/icons/mob/screen/styles/minimalist/uphint.dmi new file mode 100644 index 00000000000..fc54e68b933 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/uphint.dmi differ diff --git a/icons/mob/screen/styles/minimalist/zone_selector.dmi b/icons/mob/screen/styles/minimalist/zone_selector.dmi new file mode 100644 index 00000000000..9a35a9acd27 Binary files /dev/null and b/icons/mob/screen/styles/minimalist/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/nutrition.dmi b/icons/mob/screen/styles/nutrition.dmi new file mode 100644 index 00000000000..b34a0abc49f Binary files /dev/null and b/icons/mob/screen/styles/nutrition.dmi differ diff --git a/icons/mob/screen/styles/old/attack_selector.dmi b/icons/mob/screen/styles/old/attack_selector.dmi new file mode 100644 index 00000000000..ec4c8b8a4fe Binary files /dev/null and b/icons/mob/screen/styles/old/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/old/fire_intent.dmi b/icons/mob/screen/styles/old/fire_intent.dmi new file mode 100644 index 00000000000..a8c74500c40 Binary files /dev/null and b/icons/mob/screen/styles/old/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/old/hands.dmi b/icons/mob/screen/styles/old/hands.dmi new file mode 100644 index 00000000000..b4472e2587c Binary files /dev/null and b/icons/mob/screen/styles/old/hands.dmi differ diff --git a/icons/mob/screen/styles/old/interaction.dmi b/icons/mob/screen/styles/old/interaction.dmi new file mode 100644 index 00000000000..dcd99248921 Binary files /dev/null and b/icons/mob/screen/styles/old/interaction.dmi differ diff --git a/icons/mob/screen/styles/old/inventory.dmi b/icons/mob/screen/styles/old/inventory.dmi new file mode 100644 index 00000000000..c25d1699c1e Binary files /dev/null and b/icons/mob/screen/styles/old/inventory.dmi differ diff --git a/icons/mob/screen/styles/old/movement.dmi b/icons/mob/screen/styles/old/movement.dmi new file mode 100644 index 00000000000..3a7bef90715 Binary files /dev/null and b/icons/mob/screen/styles/old/movement.dmi differ diff --git a/icons/mob/screen/styles/old/uphint.dmi b/icons/mob/screen/styles/old/uphint.dmi new file mode 100644 index 00000000000..af81f73848d Binary files /dev/null and b/icons/mob/screen/styles/old/uphint.dmi differ diff --git a/icons/mob/screen/styles/old/zone_selector.dmi b/icons/mob/screen/styles/old/zone_selector.dmi new file mode 100644 index 00000000000..76fd6cf7272 Binary files /dev/null and b/icons/mob/screen/styles/old/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/old_noborder/inventory.dmi b/icons/mob/screen/styles/old_noborder/inventory.dmi new file mode 100644 index 00000000000..6b31c0bd4f6 Binary files /dev/null and b/icons/mob/screen/styles/old_noborder/inventory.dmi differ diff --git a/icons/mob/screen/styles/old_noborder/uphint.dmi b/icons/mob/screen/styles/old_noborder/uphint.dmi new file mode 100644 index 00000000000..d97704b0295 Binary files /dev/null and b/icons/mob/screen/styles/old_noborder/uphint.dmi differ diff --git a/icons/mob/screen/styles/old_noborder/zone_selector.dmi b/icons/mob/screen/styles/old_noborder/zone_selector.dmi new file mode 100644 index 00000000000..31b4bf66cb4 Binary files /dev/null and b/icons/mob/screen/styles/old_noborder/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/orange/attack_selector.dmi b/icons/mob/screen/styles/orange/attack_selector.dmi new file mode 100644 index 00000000000..4b9cfe05fc4 Binary files /dev/null and b/icons/mob/screen/styles/orange/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/orange/fire_intent.dmi b/icons/mob/screen/styles/orange/fire_intent.dmi new file mode 100644 index 00000000000..5ab217edcd5 Binary files /dev/null and b/icons/mob/screen/styles/orange/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/orange/hands.dmi b/icons/mob/screen/styles/orange/hands.dmi new file mode 100644 index 00000000000..e9223ae6cfb Binary files /dev/null and b/icons/mob/screen/styles/orange/hands.dmi differ diff --git a/icons/mob/screen/styles/orange/interaction.dmi b/icons/mob/screen/styles/orange/interaction.dmi new file mode 100644 index 00000000000..e750e6fb45d Binary files /dev/null and b/icons/mob/screen/styles/orange/interaction.dmi differ diff --git a/icons/mob/screen/styles/orange/inventory.dmi b/icons/mob/screen/styles/orange/inventory.dmi new file mode 100644 index 00000000000..ecaacdf9b32 Binary files /dev/null and b/icons/mob/screen/styles/orange/inventory.dmi differ diff --git a/icons/mob/screen/styles/orange/movement.dmi b/icons/mob/screen/styles/orange/movement.dmi new file mode 100644 index 00000000000..29520e40647 Binary files /dev/null and b/icons/mob/screen/styles/orange/movement.dmi differ diff --git a/icons/mob/screen/styles/orange/uphint.dmi b/icons/mob/screen/styles/orange/uphint.dmi new file mode 100644 index 00000000000..01ad7421217 Binary files /dev/null and b/icons/mob/screen/styles/orange/uphint.dmi differ diff --git a/icons/mob/screen/styles/orange/zone_selector.dmi b/icons/mob/screen/styles/orange/zone_selector.dmi new file mode 100644 index 00000000000..30ae1b66463 Binary files /dev/null and b/icons/mob/screen/styles/orange/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/robot/drop_grab.dmi b/icons/mob/screen/styles/robot/drop_grab.dmi new file mode 100644 index 00000000000..7a1ecce37df Binary files /dev/null and b/icons/mob/screen/styles/robot/drop_grab.dmi differ diff --git a/icons/mob/screen/styles/robot/health.dmi b/icons/mob/screen/styles/robot/health.dmi new file mode 100644 index 00000000000..4c54b971dd1 Binary files /dev/null and b/icons/mob/screen/styles/robot/health.dmi differ diff --git a/icons/mob/screen/styles/robot/inventory.dmi b/icons/mob/screen/styles/robot/inventory.dmi new file mode 100644 index 00000000000..23229b34424 Binary files /dev/null and b/icons/mob/screen/styles/robot/inventory.dmi differ diff --git a/icons/mob/screen/styles/robot/module.dmi b/icons/mob/screen/styles/robot/module.dmi new file mode 100644 index 00000000000..042f304f436 Binary files /dev/null and b/icons/mob/screen/styles/robot/module.dmi differ diff --git a/icons/mob/screen/styles/robot/modules_background.dmi b/icons/mob/screen/styles/robot/modules_background.dmi new file mode 100644 index 00000000000..8c9e1bb82d8 Binary files /dev/null and b/icons/mob/screen/styles/robot/modules_background.dmi differ diff --git a/icons/mob/screen/styles/robot/panel.dmi b/icons/mob/screen/styles/robot/panel.dmi new file mode 100644 index 00000000000..779876900d5 Binary files /dev/null and b/icons/mob/screen/styles/robot/panel.dmi differ diff --git a/icons/mob/screen/styles/robot/status_fire.dmi b/icons/mob/screen/styles/robot/status_fire.dmi new file mode 100644 index 00000000000..9c8981958b4 Binary files /dev/null and b/icons/mob/screen/styles/robot/status_fire.dmi differ diff --git a/icons/mob/screen/styles/robot/uphint.dmi b/icons/mob/screen/styles/robot/uphint.dmi new file mode 100644 index 00000000000..061c13f2675 Binary files /dev/null and b/icons/mob/screen/styles/robot/uphint.dmi differ diff --git a/icons/mob/screen/styles/robot/zone_selector.dmi b/icons/mob/screen/styles/robot/zone_selector.dmi new file mode 100644 index 00000000000..a7b3550559c Binary files /dev/null and b/icons/mob/screen/styles/robot/zone_selector.dmi differ diff --git a/icons/mob/screen/styles/status.dmi b/icons/mob/screen/styles/status.dmi new file mode 100644 index 00000000000..ccb0b383679 Binary files /dev/null and b/icons/mob/screen/styles/status.dmi differ diff --git a/icons/mob/screen/styles/status_fire.dmi b/icons/mob/screen/styles/status_fire.dmi new file mode 100644 index 00000000000..750adcf4a27 Binary files /dev/null and b/icons/mob/screen/styles/status_fire.dmi differ diff --git a/icons/mob/screen/styles/white/attack_selector.dmi b/icons/mob/screen/styles/white/attack_selector.dmi new file mode 100644 index 00000000000..6aa6118a743 Binary files /dev/null and b/icons/mob/screen/styles/white/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/white/fire_intent.dmi b/icons/mob/screen/styles/white/fire_intent.dmi new file mode 100644 index 00000000000..5ab217edcd5 Binary files /dev/null and b/icons/mob/screen/styles/white/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/white/hands.dmi b/icons/mob/screen/styles/white/hands.dmi new file mode 100644 index 00000000000..59702d43b99 Binary files /dev/null and b/icons/mob/screen/styles/white/hands.dmi differ diff --git a/icons/mob/screen/styles/white/interaction.dmi b/icons/mob/screen/styles/white/interaction.dmi new file mode 100644 index 00000000000..e11d10d2c13 Binary files /dev/null and b/icons/mob/screen/styles/white/interaction.dmi differ diff --git a/icons/mob/screen/styles/white/inventory.dmi b/icons/mob/screen/styles/white/inventory.dmi new file mode 100644 index 00000000000..0ce80198e6b Binary files /dev/null and b/icons/mob/screen/styles/white/inventory.dmi differ diff --git a/icons/mob/screen/styles/white/movement.dmi b/icons/mob/screen/styles/white/movement.dmi new file mode 100644 index 00000000000..17faaf9413d Binary files /dev/null and b/icons/mob/screen/styles/white/movement.dmi differ diff --git a/icons/mob/screen/styles/white/uphint.dmi b/icons/mob/screen/styles/white/uphint.dmi new file mode 100644 index 00000000000..d3e9075d704 Binary files /dev/null and b/icons/mob/screen/styles/white/uphint.dmi differ diff --git a/icons/mob/screen/styles/white/zone_selector.dmi b/icons/mob/screen/styles/white/zone_selector.dmi new file mode 100644 index 00000000000..fe86e824f98 Binary files /dev/null and b/icons/mob/screen/styles/white/zone_selector.dmi differ diff --git a/icons/mob/screen/white.dmi b/icons/mob/screen/white.dmi deleted file mode 100644 index 10d35d02cff..00000000000 Binary files a/icons/mob/screen/white.dmi and /dev/null differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi deleted file mode 100644 index 7f8db4256da..00000000000 Binary files a/icons/mob/screen1.dmi and /dev/null differ diff --git a/icons/mob/screen1_construct.dmi b/icons/mob/screen1_construct.dmi deleted file mode 100644 index 67a37ccd738..00000000000 Binary files a/icons/mob/screen1_construct.dmi and /dev/null differ diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi deleted file mode 100644 index c6aa98f2b1f..00000000000 Binary files a/icons/mob/screen1_robot.dmi and /dev/null differ diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi deleted file mode 100644 index 436fb1169a2..00000000000 Binary files a/icons/mob/screen_gen.dmi and /dev/null differ diff --git a/icons/mob/screen_spells.dmi b/icons/mob/screen_spells.dmi deleted file mode 100644 index 50be07d787b..00000000000 Binary files a/icons/mob/screen_spells.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/crow.dmi b/icons/mob/simple_animal/crow.dmi index 965a19a2f3d..3841efb01ba 100644 Binary files a/icons/mob/simple_animal/crow.dmi and b/icons/mob/simple_animal/crow.dmi differ diff --git a/icons/mob/simple_animal/duck_brown.dmi b/icons/mob/simple_animal/duck_brown.dmi new file mode 100644 index 00000000000..5bcb6bc0e66 Binary files /dev/null and b/icons/mob/simple_animal/duck_brown.dmi differ diff --git a/icons/mob/simple_animal/duck_mallard.dmi b/icons/mob/simple_animal/duck_mallard.dmi new file mode 100644 index 00000000000..e03ae0e4df4 Binary files /dev/null and b/icons/mob/simple_animal/duck_mallard.dmi differ diff --git a/icons/mob/simple_animal/duck_white.dmi b/icons/mob/simple_animal/duck_white.dmi new file mode 100644 index 00000000000..b036096f4a8 Binary files /dev/null and b/icons/mob/simple_animal/duck_white.dmi differ diff --git a/icons/mob/status_hunger.dmi b/icons/mob/status_hunger.dmi deleted file mode 100644 index db92eb35581..00000000000 Binary files a/icons/mob/status_hunger.dmi and /dev/null differ diff --git a/icons/mob/status_indicators.dmi b/icons/mob/status_indicators.dmi deleted file mode 100644 index 80baa88177f..00000000000 Binary files a/icons/mob/status_indicators.dmi and /dev/null differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index aed58717933..a065abe14e4 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi index 93f5bb50f6f..26ee3a4c8d6 100644 Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 2428e66d5e4..f9309d2285c 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/doors/Doorglass.dmi b/icons/obj/doors/Doorglass.dmi index f4afd02c99d..5582b2739b6 100644 Binary files a/icons/obj/doors/Doorglass.dmi and b/icons/obj/doors/Doorglass.dmi differ diff --git a/icons/obj/doors/blast_doors/door.dmi b/icons/obj/doors/blast_doors/door.dmi index 2d5f56b079e..f339de89e21 100644 Binary files a/icons/obj/doors/blast_doors/door.dmi and b/icons/obj/doors/blast_doors/door.dmi differ diff --git a/icons/obj/doors/centcomm/door.dmi b/icons/obj/doors/centcomm/door.dmi index 49f386ff380..58c8af1f6e2 100644 Binary files a/icons/obj/doors/centcomm/door.dmi and b/icons/obj/doors/centcomm/door.dmi differ diff --git a/icons/obj/doors/elevator/door.dmi b/icons/obj/doors/elevator/door.dmi index 3cfbc002d33..53e6937830e 100644 Binary files a/icons/obj/doors/elevator/door.dmi and b/icons/obj/doors/elevator/door.dmi differ diff --git a/icons/obj/doors/shutters/door.dmi b/icons/obj/doors/shutters/door.dmi index a87a4c14d22..84639f15fcc 100644 Binary files a/icons/obj/doors/shutters/door.dmi and b/icons/obj/doors/shutters/door.dmi differ diff --git a/icons/obj/flora/deadtrees.dmi b/icons/obj/flora/deadtrees.dmi index f76ffd442f9..2afd9416cbf 100644 Binary files a/icons/obj/flora/deadtrees.dmi and b/icons/obj/flora/deadtrees.dmi differ diff --git a/icons/obj/flora/hardwood.dmi b/icons/obj/flora/hardwood.dmi new file mode 100644 index 00000000000..6e5976eb3d3 Binary files /dev/null and b/icons/obj/flora/hardwood.dmi differ diff --git a/icons/obj/flora/softwood.dmi b/icons/obj/flora/softwood.dmi new file mode 100644 index 00000000000..efbc33beba5 Binary files /dev/null and b/icons/obj/flora/softwood.dmi differ diff --git a/icons/obj/flora/tree_stumps.dmi b/icons/obj/flora/tree_stumps.dmi index 744771942f1..c79500d1786 100644 Binary files a/icons/obj/flora/tree_stumps.dmi and b/icons/obj/flora/tree_stumps.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index a6817ec4a00..c84284efeb2 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/food/containers/crackerbag.dmi b/icons/obj/food/containers/crackerbag.dmi new file mode 100644 index 00000000000..cb98badfa6c Binary files /dev/null and b/icons/obj/food/containers/crackerbag.dmi differ diff --git a/icons/obj/food/containers/donutbox.dmi b/icons/obj/food/containers/donutbox.dmi new file mode 100644 index 00000000000..6ca555b434e Binary files /dev/null and b/icons/obj/food/containers/donutbox.dmi differ diff --git a/icons/obj/food/containers/eggbox.dmi b/icons/obj/food/containers/eggbox.dmi new file mode 100644 index 00000000000..e90b439e1c9 Binary files /dev/null and b/icons/obj/food/containers/eggbox.dmi differ diff --git a/icons/obj/food/containers/pizzabox.dmi b/icons/obj/food/containers/pizzabox.dmi new file mode 100644 index 00000000000..38845bea26a Binary files /dev/null and b/icons/obj/food/containers/pizzabox.dmi differ diff --git a/icons/obj/food/cracker.dmi b/icons/obj/food/cracker.dmi new file mode 100644 index 00000000000..096c812145a Binary files /dev/null and b/icons/obj/food/cracker.dmi differ diff --git a/icons/obj/food/donuts/donut.dmi b/icons/obj/food/donuts/donut.dmi new file mode 100644 index 00000000000..31f7bece8a4 Binary files /dev/null and b/icons/obj/food/donuts/donut.dmi differ diff --git a/icons/obj/food/donuts/donut_iced.dmi b/icons/obj/food/donuts/donut_iced.dmi new file mode 100644 index 00000000000..c6cc1b7a8b7 Binary files /dev/null and b/icons/obj/food/donuts/donut_iced.dmi differ diff --git a/icons/obj/food/donuts/donut_jelly.dmi b/icons/obj/food/donuts/donut_jelly.dmi new file mode 100644 index 00000000000..a4632cc9d52 Binary files /dev/null and b/icons/obj/food/donuts/donut_jelly.dmi differ diff --git a/icons/obj/food/donuts/donut_jelly_iced.dmi b/icons/obj/food/donuts/donut_jelly_iced.dmi new file mode 100644 index 00000000000..a6581ed9a6a Binary files /dev/null and b/icons/obj/food/donuts/donut_jelly_iced.dmi differ diff --git a/icons/obj/food/eggs/egg.dmi b/icons/obj/food/eggs/egg.dmi new file mode 100644 index 00000000000..ca50ab06bb4 Binary files /dev/null and b/icons/obj/food/eggs/egg.dmi differ diff --git a/icons/obj/food/eggs/egg_blue.dmi b/icons/obj/food/eggs/egg_blue.dmi new file mode 100644 index 00000000000..88410742e3b Binary files /dev/null and b/icons/obj/food/eggs/egg_blue.dmi differ diff --git a/icons/obj/food/eggs/egg_chocolate.dmi b/icons/obj/food/eggs/egg_chocolate.dmi new file mode 100644 index 00000000000..3bad377aea6 Binary files /dev/null and b/icons/obj/food/eggs/egg_chocolate.dmi differ diff --git a/icons/obj/food/eggs/egg_green.dmi b/icons/obj/food/eggs/egg_green.dmi new file mode 100644 index 00000000000..11d19c48290 Binary files /dev/null and b/icons/obj/food/eggs/egg_green.dmi differ diff --git a/icons/obj/food/eggs/egg_lizard.dmi b/icons/obj/food/eggs/egg_lizard.dmi new file mode 100644 index 00000000000..475dcb8d625 Binary files /dev/null and b/icons/obj/food/eggs/egg_lizard.dmi differ diff --git a/icons/obj/food/eggs/egg_mime.dmi b/icons/obj/food/eggs/egg_mime.dmi new file mode 100644 index 00000000000..3b512981a9f Binary files /dev/null and b/icons/obj/food/eggs/egg_mime.dmi differ diff --git a/icons/obj/food/eggs/egg_orange.dmi b/icons/obj/food/eggs/egg_orange.dmi new file mode 100644 index 00000000000..12288907222 Binary files /dev/null and b/icons/obj/food/eggs/egg_orange.dmi differ diff --git a/icons/obj/food/eggs/egg_purple.dmi b/icons/obj/food/eggs/egg_purple.dmi new file mode 100644 index 00000000000..eaab67ae244 Binary files /dev/null and b/icons/obj/food/eggs/egg_purple.dmi differ diff --git a/icons/obj/food/eggs/egg_rainbow.dmi b/icons/obj/food/eggs/egg_rainbow.dmi new file mode 100644 index 00000000000..c7cf6648904 Binary files /dev/null and b/icons/obj/food/eggs/egg_rainbow.dmi differ diff --git a/icons/obj/food/eggs/egg_red.dmi b/icons/obj/food/eggs/egg_red.dmi new file mode 100644 index 00000000000..40baf4c7605 Binary files /dev/null and b/icons/obj/food/eggs/egg_red.dmi differ diff --git a/icons/obj/food/eggs/egg_yellow.dmi b/icons/obj/food/eggs/egg_yellow.dmi new file mode 100644 index 00000000000..4d55493625d Binary files /dev/null and b/icons/obj/food/eggs/egg_yellow.dmi differ diff --git a/icons/obj/food/pizzas/pizza_margherita.dmi b/icons/obj/food/pizzas/pizza_margherita.dmi new file mode 100644 index 00000000000..598370a7c77 Binary files /dev/null and b/icons/obj/food/pizzas/pizza_margherita.dmi differ diff --git a/icons/obj/food/pizzas/pizza_meat.dmi b/icons/obj/food/pizzas/pizza_meat.dmi new file mode 100644 index 00000000000..6d7c4848721 Binary files /dev/null and b/icons/obj/food/pizzas/pizza_meat.dmi differ diff --git a/icons/obj/food/pizzas/pizza_mushroom.dmi b/icons/obj/food/pizzas/pizza_mushroom.dmi new file mode 100644 index 00000000000..411b5e2923a Binary files /dev/null and b/icons/obj/food/pizzas/pizza_mushroom.dmi differ diff --git a/icons/obj/food/pizzas/pizza_slices.dmi b/icons/obj/food/pizzas/pizza_slices.dmi new file mode 100644 index 00000000000..002ef375903 Binary files /dev/null and b/icons/obj/food/pizzas/pizza_slices.dmi differ diff --git a/icons/obj/food/pizzas/pizza_vegetable.dmi b/icons/obj/food/pizzas/pizza_vegetable.dmi new file mode 100644 index 00000000000..672c5f27bcc Binary files /dev/null and b/icons/obj/food/pizzas/pizza_vegetable.dmi differ diff --git a/icons/obj/food/plates/bowl.dmi b/icons/obj/food/plates/bowl.dmi new file mode 100644 index 00000000000..91fc9bd18ba Binary files /dev/null and b/icons/obj/food/plates/bowl.dmi differ diff --git a/icons/obj/food/plates/platter.dmi b/icons/obj/food/plates/platter.dmi new file mode 100644 index 00000000000..1c278ed82b8 Binary files /dev/null and b/icons/obj/food/plates/platter.dmi differ diff --git a/icons/obj/food/plates/small_plate.dmi b/icons/obj/food/plates/small_plate.dmi new file mode 100644 index 00000000000..1d73c7d1d61 Binary files /dev/null and b/icons/obj/food/plates/small_plate.dmi differ diff --git a/icons/obj/food/plates/tray.dmi b/icons/obj/food/plates/tray.dmi new file mode 100644 index 00000000000..86a5033a69c Binary files /dev/null and b/icons/obj/food/plates/tray.dmi differ diff --git a/icons/obj/food/utensils/chopsticks.dmi b/icons/obj/food/utensils/chopsticks.dmi new file mode 100644 index 00000000000..c737bb3fa16 Binary files /dev/null and b/icons/obj/food/utensils/chopsticks.dmi differ diff --git a/icons/obj/food/utensils/foon.dmi b/icons/obj/food/utensils/foon.dmi new file mode 100644 index 00000000000..41a111958bb Binary files /dev/null and b/icons/obj/food/utensils/foon.dmi differ diff --git a/icons/obj/food/utensils/fork.dmi b/icons/obj/food/utensils/fork.dmi new file mode 100644 index 00000000000..9508ea4c236 Binary files /dev/null and b/icons/obj/food/utensils/fork.dmi differ diff --git a/icons/obj/food/utensils/spoon.dmi b/icons/obj/food/utensils/spoon.dmi new file mode 100644 index 00000000000..38fd36ad66a Binary files /dev/null and b/icons/obj/food/utensils/spoon.dmi differ diff --git a/icons/obj/food/utensils/spork.dmi b/icons/obj/food/utensils/spork.dmi new file mode 100644 index 00000000000..81ec065937d Binary files /dev/null and b/icons/obj/food/utensils/spork.dmi differ diff --git a/icons/obj/food/utensils/steak_knife.dmi b/icons/obj/food/utensils/steak_knife.dmi new file mode 100644 index 00000000000..1484afe56d3 Binary files /dev/null and b/icons/obj/food/utensils/steak_knife.dmi differ diff --git a/icons/obj/food/utensils/table_knife.dmi b/icons/obj/food/utensils/table_knife.dmi new file mode 100644 index 00000000000..87f33b6151d Binary files /dev/null and b/icons/obj/food/utensils/table_knife.dmi differ diff --git a/icons/obj/food_ingredients.dmi b/icons/obj/food_ingredients.dmi index ad4ecd8d83f..5e34ee4eff5 100644 Binary files a/icons/obj/food_ingredients.dmi and b/icons/obj/food_ingredients.dmi differ diff --git a/icons/obj/food_trays.dmi b/icons/obj/food_trays.dmi new file mode 100644 index 00000000000..9fc471af6fe Binary files /dev/null and b/icons/obj/food_trays.dmi differ diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index 5b98322c935..fa465cbfe4c 100644 Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ diff --git a/icons/obj/guns/capacitor_rifle.dmi b/icons/obj/guns/capacitor_rifle.dmi index 02e0ccc712b..442f54df852 100644 Binary files a/icons/obj/guns/capacitor_rifle.dmi and b/icons/obj/guns/capacitor_rifle.dmi differ diff --git a/icons/obj/guns/lmg.dmi b/icons/obj/guns/lmg.dmi new file mode 100644 index 00000000000..6f9725faa69 Binary files /dev/null and b/icons/obj/guns/lmg.dmi differ diff --git a/icons/obj/guns/pistol.dmi b/icons/obj/guns/pistol.dmi index cc84d7e40ef..e6e1deb6149 100644 Binary files a/icons/obj/guns/pistol.dmi and b/icons/obj/guns/pistol.dmi differ diff --git a/icons/obj/guns/shotgun/combat.dmi b/icons/obj/guns/shotgun/combat.dmi new file mode 100644 index 00000000000..fb549dcd865 Binary files /dev/null and b/icons/obj/guns/shotgun/combat.dmi differ diff --git a/icons/obj/guns/shotgun/magshot.dmi b/icons/obj/guns/shotgun/magshot.dmi new file mode 100644 index 00000000000..6d260540188 Binary files /dev/null and b/icons/obj/guns/shotgun/magshot.dmi differ diff --git a/icons/obj/items/brain_interface_organic.dmi b/icons/obj/items/brain_interface_organic.dmi new file mode 100644 index 00000000000..940f246aecd Binary files /dev/null and b/icons/obj/items/brain_interface_organic.dmi differ diff --git a/icons/obj/items/brain_interface_robotic.dmi b/icons/obj/items/brain_interface_robotic.dmi new file mode 100644 index 00000000000..065f7a2cf2f Binary files /dev/null and b/icons/obj/items/brain_interface_robotic.dmi differ diff --git a/icons/obj/items/comb.dmi b/icons/obj/items/comb.dmi deleted file mode 100644 index 4f29f686ac6..00000000000 Binary files a/icons/obj/items/comb.dmi and /dev/null differ diff --git a/icons/obj/items/cosmetics/eyeshadow.dmi b/icons/obj/items/cosmetics/eyeshadow.dmi new file mode 100644 index 00000000000..ff06f346f4c Binary files /dev/null and b/icons/obj/items/cosmetics/eyeshadow.dmi differ diff --git a/icons/obj/items/cosmetics/lipstick.dmi b/icons/obj/items/cosmetics/lipstick.dmi new file mode 100644 index 00000000000..5715e4b1c7c Binary files /dev/null and b/icons/obj/items/cosmetics/lipstick.dmi differ diff --git a/icons/obj/items/crayon.dmi b/icons/obj/items/crayon.dmi new file mode 100644 index 00000000000..f65e4503f32 Binary files /dev/null and b/icons/obj/items/crayon.dmi differ diff --git a/icons/obj/items/crayon_box.dmi b/icons/obj/items/crayon_box.dmi new file mode 100644 index 00000000000..f8fc5497b38 Binary files /dev/null and b/icons/obj/items/crayon_box.dmi differ diff --git a/icons/obj/items/crayon_mime.dmi b/icons/obj/items/crayon_mime.dmi new file mode 100644 index 00000000000..e5f136ffca3 Binary files /dev/null and b/icons/obj/items/crayon_mime.dmi differ diff --git a/icons/obj/items/crayon_rainbow.dmi b/icons/obj/items/crayon_rainbow.dmi new file mode 100644 index 00000000000..c16ddbc5218 Binary files /dev/null and b/icons/obj/items/crayon_rainbow.dmi differ diff --git a/icons/obj/items/crayons.dmi b/icons/obj/items/crayons.dmi index 7ebabd5a81e..1f1a9982024 100644 Binary files a/icons/obj/items/crayons.dmi and b/icons/obj/items/crayons.dmi differ diff --git a/icons/obj/items/device/boombox.dmi b/icons/obj/items/device/boombox.dmi index e49b198a7b0..41efdeca09a 100644 Binary files a/icons/obj/items/device/boombox.dmi and b/icons/obj/items/device/boombox.dmi differ diff --git a/icons/obj/items/device/radio/key.dmi b/icons/obj/items/device/radio/key.dmi index 458a6376067..565d78b8e0f 100644 Binary files a/icons/obj/items/device/radio/key.dmi and b/icons/obj/items/device/radio/key.dmi differ diff --git a/icons/obj/items/device/radio/spybug.dmi b/icons/obj/items/device/radio/spybug.dmi new file mode 100644 index 00000000000..549907f2a59 Binary files /dev/null and b/icons/obj/items/device/radio/spybug.dmi differ diff --git a/icons/obj/items/grooming/comb.dmi b/icons/obj/items/grooming/comb.dmi new file mode 100644 index 00000000000..1f66552ea09 Binary files /dev/null and b/icons/obj/items/grooming/comb.dmi differ diff --git a/icons/obj/items/grooming/comb_butterfly.dmi b/icons/obj/items/grooming/comb_butterfly.dmi new file mode 100644 index 00000000000..e560aedfd1e Binary files /dev/null and b/icons/obj/items/grooming/comb_butterfly.dmi differ diff --git a/icons/obj/items/grooming/file.dmi b/icons/obj/items/grooming/file.dmi new file mode 100644 index 00000000000..6801ce79c71 Binary files /dev/null and b/icons/obj/items/grooming/file.dmi differ diff --git a/icons/obj/items/grooming/hairbrush.dmi b/icons/obj/items/grooming/hairbrush.dmi new file mode 100644 index 00000000000..3df1e5ccd0b Binary files /dev/null and b/icons/obj/items/grooming/hairbrush.dmi differ diff --git a/icons/obj/items/hairbrush.dmi b/icons/obj/items/hairbrush.dmi deleted file mode 100644 index a11a1705d49..00000000000 Binary files a/icons/obj/items/hairbrush.dmi and /dev/null differ diff --git a/icons/obj/items/lipstick.dmi b/icons/obj/items/lipstick.dmi deleted file mode 100644 index 6d5c07d6d1a..00000000000 Binary files a/icons/obj/items/lipstick.dmi and /dev/null differ diff --git a/icons/obj/items/messenger_bag.dmi b/icons/obj/items/messenger_bag.dmi deleted file mode 100644 index d558e52a5f1..00000000000 Binary files a/icons/obj/items/messenger_bag.dmi and /dev/null differ diff --git a/icons/obj/items/rock.dmi b/icons/obj/items/rock.dmi new file mode 100644 index 00000000000..652da957065 Binary files /dev/null and b/icons/obj/items/rock.dmi differ diff --git a/icons/obj/items/storage/backpack/corvid.dmi b/icons/obj/items/storage/backpack/corvid.dmi new file mode 100644 index 00000000000..9435ec56523 Binary files /dev/null and b/icons/obj/items/storage/backpack/corvid.dmi differ diff --git a/icons/obj/items/storage/box.dmi b/icons/obj/items/storage/box.dmi index 5f714cb5d69..64c17b831c3 100644 Binary files a/icons/obj/items/storage/box.dmi and b/icons/obj/items/storage/box.dmi differ diff --git a/icons/obj/items/storage/lunchbox.dmi b/icons/obj/items/storage/lunchbox.dmi deleted file mode 100644 index 8d283cc8369..00000000000 Binary files a/icons/obj/items/storage/lunchbox.dmi and /dev/null differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi new file mode 100644 index 00000000000..c1f76eb3d6f Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_cat.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi new file mode 100644 index 00000000000..012aa094669 Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_cti.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi new file mode 100644 index 00000000000..0c8fea6284c Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_evil.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi new file mode 100644 index 00000000000..4410d4f354a Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_heart.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi new file mode 100644 index 00000000000..d5842898985 Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_mars.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi new file mode 100644 index 00000000000..de5a0587e2d Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_rainbow.dmi differ diff --git a/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi b/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi new file mode 100644 index 00000000000..4d008c3237d Binary files /dev/null and b/icons/obj/items/storage/lunchboxes/lunchbox_tcc.dmi differ diff --git a/icons/obj/items/storage/toolbox.dmi b/icons/obj/items/storage/toolbox.dmi deleted file mode 100644 index f3b61cd4763..00000000000 Binary files a/icons/obj/items/storage/toolbox.dmi and /dev/null differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi b/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi new file mode 100644 index 00000000000..b04e3356d9f Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_black_red.dmi differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_blue.dmi b/icons/obj/items/storage/toolboxes/toolbox_blue.dmi new file mode 100644 index 00000000000..94dc99ec379 Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_blue.dmi differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_green.dmi b/icons/obj/items/storage/toolboxes/toolbox_green.dmi new file mode 100644 index 00000000000..37c24f0e718 Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_green.dmi differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_red.dmi b/icons/obj/items/storage/toolboxes/toolbox_red.dmi new file mode 100644 index 00000000000..f26ba27fab1 Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_red.dmi differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi b/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi new file mode 100644 index 00000000000..6a68ee9fd47 Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_yellow.dmi differ diff --git a/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi b/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi new file mode 100644 index 00000000000..559fcabba2a Binary files /dev/null and b/icons/obj/items/storage/toolboxes/toolbox_yellow_striped.dmi differ diff --git a/icons/obj/items/tool/components/tool_handle.dmi b/icons/obj/items/tool/components/tool_handle.dmi new file mode 100644 index 00000000000..15ef1f12f12 Binary files /dev/null and b/icons/obj/items/tool/components/tool_handle.dmi differ diff --git a/icons/obj/items/tool/components/tool_head.dmi b/icons/obj/items/tool/components/tool_head.dmi new file mode 100644 index 00000000000..462edb5cdb1 Binary files /dev/null and b/icons/obj/items/tool/components/tool_head.dmi differ diff --git a/icons/obj/items/tool/drills/drill_advanced.dmi b/icons/obj/items/tool/drills/drill_advanced.dmi new file mode 100644 index 00000000000..19a13b507a4 Binary files /dev/null and b/icons/obj/items/tool/drills/drill_advanced.dmi differ diff --git a/icons/obj/items/tool/drills/drill_hand.dmi b/icons/obj/items/tool/drills/drill_hand.dmi deleted file mode 100644 index 4be78e31c27..00000000000 Binary files a/icons/obj/items/tool/drills/drill_hand.dmi and /dev/null differ diff --git a/icons/obj/items/tool/drills/jackhammer.dmi b/icons/obj/items/tool/drills/jackhammer.dmi deleted file mode 100644 index 8794bbea121..00000000000 Binary files a/icons/obj/items/tool/drills/jackhammer.dmi and /dev/null differ diff --git a/icons/obj/items/tool/drills/pickaxe.dmi b/icons/obj/items/tool/drills/pickaxe.dmi deleted file mode 100644 index 7d556ede2f5..00000000000 Binary files a/icons/obj/items/tool/drills/pickaxe.dmi and /dev/null differ diff --git a/icons/obj/items/tool/drills/sledgehammer.dmi b/icons/obj/items/tool/drills/sledgehammer.dmi deleted file mode 100644 index 3c02eccf5ad..00000000000 Binary files a/icons/obj/items/tool/drills/sledgehammer.dmi and /dev/null differ diff --git a/icons/obj/items/tool/hammers/hammer.dmi b/icons/obj/items/tool/hammers/hammer.dmi new file mode 100644 index 00000000000..51689bacefb Binary files /dev/null and b/icons/obj/items/tool/hammers/hammer.dmi differ diff --git a/icons/obj/items/tool/hammers/jackhammer.dmi b/icons/obj/items/tool/hammers/jackhammer.dmi new file mode 100644 index 00000000000..727f2f56fa1 Binary files /dev/null and b/icons/obj/items/tool/hammers/jackhammer.dmi differ diff --git a/icons/obj/items/tool/hammers/sledgehammer.dmi b/icons/obj/items/tool/hammers/sledgehammer.dmi new file mode 100644 index 00000000000..56eb6bc4493 Binary files /dev/null and b/icons/obj/items/tool/hammers/sledgehammer.dmi differ diff --git a/icons/obj/items/tool/pickaxe.dmi b/icons/obj/items/tool/pickaxe.dmi new file mode 100644 index 00000000000..bd0c1a8a23c Binary files /dev/null and b/icons/obj/items/tool/pickaxe.dmi differ diff --git a/icons/obj/items/tool/shovels/shovel.dmi b/icons/obj/items/tool/shovels/shovel.dmi index 96b7df3e4d0..4c551068474 100644 Binary files a/icons/obj/items/tool/shovels/shovel.dmi and b/icons/obj/items/tool/shovels/shovel.dmi differ diff --git a/icons/obj/items/tool/shovels/spade.dmi b/icons/obj/items/tool/shovels/spade.dmi index b3b376ac720..d4767d6e38c 100644 Binary files a/icons/obj/items/tool/shovels/spade.dmi and b/icons/obj/items/tool/shovels/spade.dmi differ diff --git a/icons/obj/items/weapon/knives/table.dmi b/icons/obj/items/weapon/knives/table.dmi deleted file mode 100644 index d5ee2f220a0..00000000000 Binary files a/icons/obj/items/weapon/knives/table.dmi and /dev/null differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 44e43e52b0c..930272cdd80 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/light_overlays.dmi b/icons/obj/light_overlays.dmi deleted file mode 100644 index 4440f265523..00000000000 Binary files a/icons/obj/light_overlays.dmi and /dev/null differ diff --git a/icons/obj/machines/bank_controller.dmi b/icons/obj/machines/bank_controller.dmi new file mode 100644 index 00000000000..8c7fe8474c3 Binary files /dev/null and b/icons/obj/machines/bank_controller.dmi differ diff --git a/icons/obj/machines/medical/operating_table.dmi b/icons/obj/machines/medical/operating_table.dmi new file mode 100644 index 00000000000..e244645f1e4 Binary files /dev/null and b/icons/obj/machines/medical/operating_table.dmi differ diff --git a/icons/obj/machines/power/portable_generators.dmi b/icons/obj/machines/power/portable_generators.dmi new file mode 100644 index 00000000000..6bf61818b92 Binary files /dev/null and b/icons/obj/machines/power/portable_generators.dmi differ diff --git a/icons/obj/machines/trade_controller.dmi b/icons/obj/machines/trade_controller.dmi new file mode 100644 index 00000000000..bb941b17ff7 Binary files /dev/null and b/icons/obj/machines/trade_controller.dmi differ diff --git a/icons/obj/machines/wall/atm.dmi b/icons/obj/machines/wall/atm.dmi new file mode 100644 index 00000000000..ae90c862cbb Binary files /dev/null and b/icons/obj/machines/wall/atm.dmi differ diff --git a/icons/obj/machines/wall/dorm_console.dmi b/icons/obj/machines/wall/dorm_console.dmi new file mode 100644 index 00000000000..e36fdf2b8d3 Binary files /dev/null and b/icons/obj/machines/wall/dorm_console.dmi differ diff --git a/icons/obj/machines/wall/newscaster.dmi b/icons/obj/machines/wall/newscaster.dmi new file mode 100644 index 00000000000..fae0646ff0e Binary files /dev/null and b/icons/obj/machines/wall/newscaster.dmi differ diff --git a/icons/obj/machines/wall/request_console.dmi b/icons/obj/machines/wall/request_console.dmi new file mode 100644 index 00000000000..03e7988cc9e Binary files /dev/null and b/icons/obj/machines/wall/request_console.dmi differ diff --git a/icons/obj/materials.dmi b/icons/obj/materials.dmi index 33343d3eb1a..c73049ec113 100644 Binary files a/icons/obj/materials.dmi and b/icons/obj/materials.dmi differ diff --git a/icons/obj/melted_thing.dmi b/icons/obj/melted_thing.dmi new file mode 100644 index 00000000000..c039083a449 Binary files /dev/null and b/icons/obj/melted_thing.dmi differ diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi deleted file mode 100644 index d156a15cdd7..00000000000 Binary files a/icons/obj/pipes/disposal.dmi and /dev/null differ diff --git a/icons/obj/pipes/disposal_bin.dmi b/icons/obj/pipes/disposal_bin.dmi new file mode 100644 index 00000000000..4760d29f4a0 Binary files /dev/null and b/icons/obj/pipes/disposal_bin.dmi differ diff --git a/icons/obj/pipes/disposal_chute.dmi b/icons/obj/pipes/disposal_chute.dmi new file mode 100644 index 00000000000..277338f9bc9 Binary files /dev/null and b/icons/obj/pipes/disposal_chute.dmi differ diff --git a/icons/obj/pipes/disposal_outlet.dmi b/icons/obj/pipes/disposal_outlet.dmi new file mode 100644 index 00000000000..61c2ae36ae3 Binary files /dev/null and b/icons/obj/pipes/disposal_outlet.dmi differ diff --git a/icons/obj/pipes/disposal_pipe.dmi b/icons/obj/pipes/disposal_pipe.dmi new file mode 100644 index 00000000000..85485f56b99 Binary files /dev/null and b/icons/obj/pipes/disposal_pipe.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 7225f19d780..68afa842cd2 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi index e850f6b68a8..d75c2c0aa4a 100644 Binary files a/icons/obj/stairs.dmi and b/icons/obj/stairs.dmi differ diff --git a/icons/obj/stairs_64.dmi b/icons/obj/stairs_64.dmi index b0c14147e5f..7b5d4b7c57e 100644 Binary files a/icons/obj/stairs_64.dmi and b/icons/obj/stairs_64.dmi differ diff --git a/icons/obj/structures/pit.dmi b/icons/obj/structures/pit.dmi index 76ac50d185a..dcd845908e0 100644 Binary files a/icons/obj/structures/pit.dmi and b/icons/obj/structures/pit.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 42a982c0848..d7f0d5d9c6e 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/obj/turbolift_preview_5x5.dmi b/icons/obj/turbolift_preview_5x5.dmi new file mode 100644 index 00000000000..e054a6b9aac Binary files /dev/null and b/icons/obj/turbolift_preview_5x5.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 91cf6530e50..2946468a97e 100644 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/vialbox.dmi b/icons/obj/vialbox.dmi index c08b5cfeabb..efe341684d0 100644 Binary files a/icons/obj/vialbox.dmi and b/icons/obj/vialbox.dmi differ diff --git a/icons/screen/maneuver.dmi b/icons/screen/maneuver.dmi new file mode 100644 index 00000000000..0a4676979c2 Binary files /dev/null and b/icons/screen/maneuver.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 0fc80f9ed85..73d3d62ab4d 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/exterior/cobblestone.dmi b/icons/turf/exterior/cobblestone.dmi new file mode 100644 index 00000000000..65aff20c40f Binary files /dev/null and b/icons/turf/exterior/cobblestone.dmi differ diff --git a/icons/turf/exterior/concrete.dmi b/icons/turf/exterior/concrete.dmi index 87b00e1bf41..7bf28be6e91 100644 Binary files a/icons/turf/exterior/concrete.dmi and b/icons/turf/exterior/concrete.dmi differ diff --git a/icons/turf/exterior/dirt.dmi b/icons/turf/exterior/dirt.dmi index eacfc7469d8..f9d04c95f90 100644 Binary files a/icons/turf/exterior/dirt.dmi and b/icons/turf/exterior/dirt.dmi differ diff --git a/icons/turf/exterior/grass.dmi b/icons/turf/exterior/grass.dmi index ac27d616def..17e49330596 100644 Binary files a/icons/turf/exterior/grass.dmi and b/icons/turf/exterior/grass.dmi differ diff --git a/icons/turf/exterior/herringbone.dmi b/icons/turf/exterior/herringbone.dmi new file mode 100644 index 00000000000..b070fb59b06 Binary files /dev/null and b/icons/turf/exterior/herringbone.dmi differ diff --git a/icons/turf/exterior/ice.dmi b/icons/turf/exterior/ice.dmi index 6e6b27311a4..930efd22362 100644 Binary files a/icons/turf/exterior/ice.dmi and b/icons/turf/exterior/ice.dmi differ diff --git a/icons/turf/exterior/running_bond.dmi b/icons/turf/exterior/running_bond.dmi new file mode 100644 index 00000000000..122d41f2d73 Binary files /dev/null and b/icons/turf/exterior/running_bond.dmi differ diff --git a/icons/turf/exterior/water.dmi b/icons/turf/exterior/water.dmi deleted file mode 100644 index 61e1630c613..00000000000 Binary files a/icons/turf/exterior/water.dmi and /dev/null differ diff --git a/icons/turf/exterior/water_still.dmi b/icons/turf/exterior/water_still.dmi deleted file mode 100644 index 014d851c8d9..00000000000 Binary files a/icons/turf/exterior/water_still.dmi and /dev/null differ diff --git a/icons/turf/exterior/wildgrass.dmi b/icons/turf/exterior/wildgrass.dmi index 69ce52d93af..edb455f7b78 100644 Binary files a/icons/turf/exterior/wildgrass.dmi and b/icons/turf/exterior/wildgrass.dmi differ diff --git a/icons/turf/flooring/concrete.dmi b/icons/turf/flooring/concrete.dmi new file mode 100644 index 00000000000..2e102d7b832 Binary files /dev/null and b/icons/turf/flooring/concrete.dmi differ diff --git a/icons/turf/flooring/crystal.dmi b/icons/turf/flooring/crystal.dmi index 00c7a13cb7e..7ff20fb8744 100644 Binary files a/icons/turf/flooring/crystal.dmi and b/icons/turf/flooring/crystal.dmi differ diff --git a/icons/turf/flooring/linoleum.dmi b/icons/turf/flooring/linoleum.dmi index 50bdfe87898..d50d7461330 100644 Binary files a/icons/turf/flooring/linoleum.dmi and b/icons/turf/flooring/linoleum.dmi differ diff --git a/icons/turf/flooring/tiles.dmi b/icons/turf/flooring/tiles.dmi index 18aa84793d8..b139f18cd66 100644 Binary files a/icons/turf/flooring/tiles.dmi and b/icons/turf/flooring/tiles.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index ab24d9266ab..a6edc47a759 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/shuttle.dmi b/icons/turf/shuttle.dmi index 12b1b6d038b..2d201155326 100644 Binary files a/icons/turf/shuttle.dmi and b/icons/turf/shuttle.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index 9c821ae2d4a..6352c36cd57 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/icons/turf/walls/_previews.dmi b/icons/turf/walls/_previews.dmi index 9089954cdd2..4313a24e990 100644 Binary files a/icons/turf/walls/_previews.dmi and b/icons/turf/walls/_previews.dmi differ diff --git a/icons/turf/walls/brick.dmi b/icons/turf/walls/brick.dmi new file mode 100644 index 00000000000..ed1a7a29d6b Binary files /dev/null and b/icons/turf/walls/brick.dmi differ diff --git a/icons/turf/walls/cult.dmi b/icons/turf/walls/cult.dmi index 1a790b768c1..5b2dd836c3b 100644 Binary files a/icons/turf/walls/cult.dmi and b/icons/turf/walls/cult.dmi differ diff --git a/icons/turf/walls/debug.dmi b/icons/turf/walls/debug.dmi index 2de94776c40..76e8845f752 100644 Binary files a/icons/turf/walls/debug.dmi and b/icons/turf/walls/debug.dmi differ diff --git a/icons/turf/walls/log.dmi b/icons/turf/walls/log.dmi new file mode 100644 index 00000000000..4e95efb78e7 Binary files /dev/null and b/icons/turf/walls/log.dmi differ diff --git a/icons/turf/walls/metal.dmi b/icons/turf/walls/metal.dmi index a8ab0f10d86..8199a29f39d 100644 Binary files a/icons/turf/walls/metal.dmi and b/icons/turf/walls/metal.dmi differ diff --git a/icons/turf/walls/natural.dmi b/icons/turf/walls/natural.dmi index 40cf525581f..d8509d2f1ba 100644 Binary files a/icons/turf/walls/natural.dmi and b/icons/turf/walls/natural.dmi differ diff --git a/icons/turf/walls/plastic.dmi b/icons/turf/walls/plastic.dmi index 899f2a30a72..034c494a357 100644 Binary files a/icons/turf/walls/plastic.dmi and b/icons/turf/walls/plastic.dmi differ diff --git a/icons/turf/walls/reinforced.dmi b/icons/turf/walls/reinforced.dmi index b889f3c8327..ec9936fe157 100644 Binary files a/icons/turf/walls/reinforced.dmi and b/icons/turf/walls/reinforced.dmi differ diff --git a/icons/turf/walls/solid.dmi b/icons/turf/walls/solid.dmi index d961715cf64..ea504b65330 100644 Binary files a/icons/turf/walls/solid.dmi and b/icons/turf/walls/solid.dmi differ diff --git a/icons/turf/walls/stone.dmi b/icons/turf/walls/stone.dmi index 313bca3b564..285201a5e8b 100644 Binary files a/icons/turf/walls/stone.dmi and b/icons/turf/walls/stone.dmi differ diff --git a/icons/turf/walls/wood.dmi b/icons/turf/walls/wood.dmi index c1ee1f9eec1..9b2304dcec8 100644 Binary files a/icons/turf/walls/wood.dmi and b/icons/turf/walls/wood.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index d3bc6dcb54d..9f1e923dc44 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -3,10 +3,10 @@ set name = "Wiki" set desc = "Visit the wiki." set hidden = 1 - if(config.wikiurl) + if(get_config_value(/decl/config/text/wikiurl)) if(alert("This will open the wiki in your browser. Are you sure?",,"Yes","No")=="No") return - send_link(src, config.wikiurl) + send_link(src, get_config_value(/decl/config/text/wikiurl)) else to_chat(src, SPAN_WARNING("The wiki URL is not set in the server configuration.")) return @@ -15,10 +15,10 @@ set name = "GitHub" set desc = "Visit the GitHub repository." set hidden = 1 - if(config.githuburl) + if(get_config_value(/decl/config/text/githuburl)) if(alert("This will open GitHub in your browser. Are you sure?",,"Yes","No")=="No") return - send_link(src, config.githuburl) + send_link(src, get_config_value(/decl/config/text/githuburl)) else to_chat(src, SPAN_WARNING("The github URL is not set in the server configuration.")) return @@ -27,10 +27,10 @@ set name = "Bug Report" set desc = "Visit the GitHub repository to report an issue or bug." set hidden = 1 - if(config.issuereporturl) + if(get_config_value(/decl/config/text/issuereporturl)) if(alert("This will open GitHub in your browser. Are you sure?",,"Yes","No")=="No") return - send_link(src, config.issuereporturl) + send_link(src, get_config_value(/decl/config/text/issuereporturl)) else to_chat(src, SPAN_WARNING("The issue report URL is not set in the server configuration.")) return @@ -39,10 +39,10 @@ set name = "Forum" set desc = "Visit the forum." set hidden = 1 - if(config.forumurl) + if(get_config_value(/decl/config/text/forumurl)) if(alert("This will open the forum in your browser. Are you sure?",,"Yes","No")=="No") return - send_link(src, config.forumurl) + send_link(src, get_config_value(/decl/config/text/forumurl)) else to_chat(src, SPAN_WARNING("The forum URL is not set in the server configuration.")) return @@ -51,10 +51,10 @@ set name = "Discord" set desc = "Visit the Discord server." set hidden = 1 - if(config.discordurl) + if(get_config_value(/decl/config/text/discordurl)) if(alert("This will open the Discord invition link in your browser. Are you sure?",,"Yes","No")=="No") return - send_link(src, config.discordurl) + send_link(src, get_config_value(/decl/config/text/discordurl)) else to_chat(src, SPAN_WARNING("The Discord server URL is not set in the server configuration.")) return diff --git a/interface/skin.dmf b/interface/skin.dmf index 1201b778688..3778ffcd7c1 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -148,6 +148,7 @@ window "mainwindow" anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" + left = "mapwindow" right = "rpane" is-vert = true elem "asset_cache_browser" @@ -192,8 +193,6 @@ window "mapwindow" font-size = 7 is-default = true saved-params = "icon-size;zoom-mode" - on-show = ".winset\"mainwindow.split.left=mapwindow\"" - on-hide = ".winset\"mainwindow.split.left=\"" elem "lobbybrowser" type = BROWSER pos = 0,0 @@ -276,11 +275,12 @@ window "rpane" is-pane = true elem "rpanewindow" type = CHILD - pos = 0,0 - size = 640x474 + pos = 0,30 + size = 0x0 anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" + left = "infowindow" right = "outputwindow" is-vert = false elem "github" @@ -357,7 +357,6 @@ window "rpane" size = 60x15 anchor1 = none anchor2 = none - is-visible = false saved-params = "is-checked" text = "Text" command = ".winset \"rpanewindow.left=;\"" @@ -370,7 +369,6 @@ window "rpane" size = 60x15 anchor1 = none anchor2 = none - is-visible = false saved-params = "is-checked" text = "Info" command = ".winset \"rpanewindow.left=infowindow\"" @@ -432,6 +430,6 @@ window "infowindow" is-default = true saved-params = "" highlight-color = #00aa00 - on-show = ".winset\"rpane.infob.is-visible=true;rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" - on-hide = ".winset\"rpane.infob.is-visible=false;rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" + on-show = ".winset\"rpane.infob.is-checked=true\"" + on-hide = ".winset\"rpane.infob.is-checked=false\"" diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm index d8c6c1a36ef..b2bd6ed301a 100644 --- a/maps/antag_spawn/ert/ert_base.dmm +++ b/maps/antag_spawn/ert/ert_base.dmm @@ -1915,7 +1915,7 @@ /area/map_template/rescue_base/base) "dU" = ( /obj/structure/table/steel, -/obj/item/storage/fancy/cigar, +/obj/item/storage/box/fancy/cigar, /turf/unsimulated/floor{ icon_state = "dark" }, @@ -2194,8 +2194,8 @@ /obj/item/grenade/chem_grenade/metalfoam, /obj/item/inflatable_dispenser, /obj/item/inflatable_dispenser, -/obj/item/pickaxe/diamonddrill, -/obj/item/pickaxe/diamonddrill, +/obj/item/tool/drill/diamond, +/obj/item/tool/drill/diamond, /obj/item/storage/briefcase/inflatable{ pixel_x = 3; pixel_y = 3 @@ -2283,10 +2283,10 @@ pixel_x = 2; pixel_y = 2 }, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, @@ -2449,24 +2449,18 @@ /turf/simulated/wall/titanium, /area/map_template/rescue_base/start) "eV" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "rescuebridge"; name = "Cockpit Blast Shutters"; - opacity = 0 }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, /turf/simulated/floor/plating, /area/map_template/rescue_base/start) "eW" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "rescuedock"; name = "Blast Shutters"; - opacity = 0 }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2483,7 +2477,6 @@ "eY" = ( /obj/structure/table/steel_reinforced, /obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; id_tag = "rescuebridge"; name = "Window Shutters Control"; pixel_y = -4 @@ -2580,7 +2573,6 @@ /area/map_template/rescue_base/start) "fl" = ( /obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; id_tag = "rescuedock"; name = "Window Shutters Control"; pixel_x = 24; @@ -2697,13 +2689,10 @@ }, /area/map_template/rescue_base/base) "fC" = ( -/obj/machinery/door/blast/regular{ - density = 0; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "rescuebridge"; name = "Cockpit Blast Shutters"; - opacity = 0 }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2759,13 +2748,10 @@ /turf/simulated/floor/tiled/dark, /area/map_template/rescue_base/start) "fJ" = ( -/obj/machinery/door/blast/regular{ - density = 0; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "rescueeva"; name = "Blast Shutters"; - opacity = 0 }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2849,7 +2835,7 @@ /area/map_template/rescue_base/start) "fU" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /turf/simulated/floor/tiled/dark, /area/map_template/rescue_base/start) "fV" = ( @@ -2878,7 +2864,6 @@ /obj/item/tank/jetpack/carbondioxide, /obj/item/tank/jetpack/carbondioxide, /obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; id_tag = "rescueeva"; name = "Window Shutters Control"; pixel_x = 24; @@ -3150,7 +3135,6 @@ }, /obj/structure/iv_drip, /obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; id_tag = "rescueinfirm"; name = "Window Shutters Control"; pixel_x = 24; @@ -3166,13 +3150,10 @@ /area/map_template/rescue_base/base) "gU" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "rescuebridge"; name = "Blast Shutters"; - opacity = 0 }, /obj/effect/paint/blue, /turf/simulated/floor/plating, @@ -3219,19 +3200,16 @@ /area/map_template/rescue_base/start) "hb" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "rescueinfirm"; name = "Blast Shutters"; - opacity = 0 }, /obj/effect/paint/blue, /turf/simulated/floor/plating, /area/map_template/rescue_base/start) "hc" = ( -/obj/item/pickaxe/diamonddrill, +/obj/item/tool/drill/diamond, /turf/unsimulated/floor{ icon_state = "asteroid" }, diff --git a/maps/antag_spawn/heist/heist.dm b/maps/antag_spawn/heist/heist.dm index ef6b4c977f0..0405013a004 100644 --- a/maps/antag_spawn/heist/heist.dm +++ b/maps/antag_spawn/heist/heist.dm @@ -1,6 +1,10 @@ #include "heist_antag.dm" #include "heist_outfit.dm" +/mob/living/simple_animal/hostile/retaliate/parrot/pirate + name = "\proper Meatbag" + emote_speech = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") + /datum/map_template/ruin/antag_spawn/heist name = "Heist Base" suffixes = list("heist/heist_base.dmm") diff --git a/maps/antag_spawn/heist/heist_base.dmm b/maps/antag_spawn/heist/heist_base.dmm index a23708880ab..d676d49b2d3 100644 --- a/maps/antag_spawn/heist/heist_base.dmm +++ b/maps/antag_spawn/heist/heist_base.dmm @@ -449,7 +449,7 @@ /obj/structure/sign/warning/nosmoking_1/heist{ pixel_y = 32 }, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -856,7 +856,7 @@ /obj/machinery/vending/cigarette{ name = "hacked cigarette machine"; markup = 0; - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) + products = list(/obj/item/storage/box/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /turf/unsimulated/floor{ icon_state = "dark" @@ -896,10 +896,7 @@ }, /area/map_template/syndicate_mothership/raider_base) "cj" = ( -/mob/living/simple_animal/hostile/retaliate/parrot{ - name = "\proper Meatbag"; - speak = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") - }, +/mob/living/simple_animal/hostile/retaliate/parrot/pirate, /turf/unsimulated/floor{ icon_state = "asteroid" }, @@ -1002,7 +999,6 @@ /area/map_template/skipjack_station/start) "cx" = ( /obj/machinery/door/airlock/external{ - icon_state = "door_closed"; id_tag = "raider_northwest_lock" }, /obj/machinery/shield_diffuser, @@ -1017,12 +1013,9 @@ /turf/simulated/wall/raidershuttle, /area/map_template/skipjack_station/start) "cz" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "SkipjackShuttersNorth"; name = "Blast Doors"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1179,7 +1172,6 @@ /area/map_template/skipjack_station/start) "cS" = ( /obj/machinery/door/airlock/external{ - icon_state = "door_closed"; id_tag = "raider_southwest_lock" }, /obj/machinery/atmospherics/pipe/simple/visible, @@ -1309,7 +1301,7 @@ /area/map_template/skipjack_station/start) "di" = ( /obj/structure/table, -/obj/item/storage/fancy/cigarettes, +/obj/item/storage/box/fancy/cigarettes, /obj/item/flame/lighter/zippo/random, /obj/item/clothing/gloves/insulated, /obj/item/stack/material/sheet/mapped/steel/fifty, @@ -1383,13 +1375,10 @@ /turf/simulated/floor/plating, /area/map_template/skipjack_station/start) "dt" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1412,13 +1401,10 @@ /turf/simulated/floor/plating, /area/map_template/skipjack_station/start) "dy" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "SkipjackShuttersEast"; name = "Skipjack Shutters"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1486,13 +1472,10 @@ /turf/simulated/floor/plating, /area/map_template/skipjack_station/start) "dI" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, diff --git a/maps/antag_spawn/mercenary/mercenary_base.dmm b/maps/antag_spawn/mercenary/mercenary_base.dmm index ebbc1cf09d4..42c1f103b1b 100644 --- a/maps/antag_spawn/mercenary/mercenary_base.dmm +++ b/maps/antag_spawn/mercenary/mercenary_base.dmm @@ -44,8 +44,6 @@ }, /obj/effect/paint/red, /obj/machinery/door/blast/regular/open{ - density = FALSE; - icon_state = "pdoor0"; id_tag = "merc_external" }, /turf/simulated/floor/plating, @@ -60,8 +58,6 @@ }, /obj/effect/paint/red, /obj/machinery/door/blast/regular/open{ - density = FALSE; - icon_state = "pdoor0"; id_tag = "merc_external" }, /turf/simulated/floor/plating, @@ -83,9 +79,7 @@ icon_state = "0-2" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -136,9 +130,7 @@ icon_state = "1-4" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -194,9 +186,7 @@ icon_state = "0-8" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -211,9 +201,7 @@ icon_state = "0-2" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/black, @@ -228,9 +216,7 @@ "av" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_bsa_shutters" }, /obj/effect/paint/black, @@ -267,9 +253,7 @@ icon_state = "0-4" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/black, @@ -337,8 +321,6 @@ dir = 8 }, /obj/machinery/door/blast/regular/open{ - density = FALSE; - icon_state = "pdoor0"; id_tag = "merc_bsa" }, /turf/simulated/floor/reinforced, @@ -460,9 +442,7 @@ icon_state = "0-8" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -549,9 +529,7 @@ "aY" = ( /obj/effect/wallframe_spawn/reinforced_borosilicate, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 8; - icon_state = "pdoor0"; id_tag = "merc_fuel" }, /obj/effect/paint/black, @@ -612,9 +590,7 @@ /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/red, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_airlock" }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -637,9 +613,7 @@ "bi" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -835,9 +809,7 @@ "bz" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_airlock" }, /obj/effect/paint/red, @@ -1001,8 +973,6 @@ /obj/effect/wallframe_spawn/reinforced_borosilicate, /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, /obj/machinery/door/blast/regular/open{ - density = FALSE; - icon_state = "pdoor0"; id_tag = "merc_fuel" }, /obj/effect/paint/black, @@ -1015,8 +985,6 @@ dir = 4 }, /obj/machinery/door/blast/regular/open{ - density = FALSE; - icon_state = "pdoor0"; id_tag = "merc_fuel" }, /obj/effect/paint/black, @@ -1096,7 +1064,7 @@ }, /obj/machinery/light/small, /obj/item/stack/material/panel/mapped/plastic/ten, -/obj/item/stack/material/shiny/mapped/aluminium/ten, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/ten, /obj/item/stack/material/sheet/mapped/steel/ten, /obj/item/stack/material/pane/mapped/glass/ten, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -1118,9 +1086,7 @@ icon_state = "0-2" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -1239,7 +1205,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/stack/material/reinforced/mapped/plasteel/ten, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/rods/fifty, @@ -1288,9 +1254,7 @@ icon_state = "1-8" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -1432,9 +1396,7 @@ icon_state = "0-4" }, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/structure/cable{ @@ -1928,8 +1890,8 @@ /area/map_template/merc_spawn) "km" = ( /obj/structure/rack, -/obj/item/pickaxe/diamonddrill, -/obj/item/pickaxe/diamonddrill, +/obj/item/tool/drill/diamond, +/obj/item/tool/drill/diamond, /obj/structure/railing/mapped/no_density{ dir = 4 }, @@ -2285,7 +2247,7 @@ dir = 8; markup = 0; name = "hacked cigarette machine"; - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) + products = list(/obj/item/storage/box/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /obj/structure/railing/mapped/no_density{ dir = 8 @@ -2408,9 +2370,7 @@ "HZ" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "merc_external" }, /obj/effect/paint/red, @@ -2493,9 +2453,9 @@ /area/map_template/merc_spawn) "LY" = ( /obj/structure/closet/crate, -/obj/item/stack/material/reinforced/mapped/ocp/ten, -/obj/item/stack/material/reinforced/mapped/ocp/ten, -/obj/item/stack/material/reinforced/mapped/ocp/ten, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten, /obj/item/stack/material/pane/mapped/rborosilicate/ten, /obj/item/stack/material/pane/mapped/rborosilicate/ten, /obj/item/stack/material/pane/mapped/rborosilicate/ten, diff --git a/maps/antag_spawn/ninja/ninja_base.dmm b/maps/antag_spawn/ninja/ninja_base.dmm index 792bb0235cf..25dc5a784af 100644 --- a/maps/antag_spawn/ninja/ninja_base.dmm +++ b/maps/antag_spawn/ninja/ninja_base.dmm @@ -1232,12 +1232,9 @@ id_tag = "ninja_shuttle_outer"; name = "Ship External Access" }, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "ninjadoor"; name = "Blast Door"; - opacity = FALSE }, /turf/unsimulated/floor{ icon_state = "dark" diff --git a/maps/antag_spawn/wizard/wizard_base.dmm b/maps/antag_spawn/wizard/wizard_base.dmm index 188917eb63c..cbc1e7c6694 100644 --- a/maps/antag_spawn/wizard/wizard_base.dmm +++ b/maps/antag_spawn/wizard/wizard_base.dmm @@ -364,7 +364,7 @@ /area/map_template/wizard_station) "aY" = ( /obj/structure/table/woodentable, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /turf/unsimulated/floor{ dir = 8; icon_state = "wood" diff --git a/maps/away/bearcat/bearcat-1.dmm b/maps/away/bearcat/bearcat-1.dmm index 31f75001b57..a97d6e922c7 100644 --- a/maps/away/bearcat/bearcat-1.dmm +++ b/maps/away/bearcat/bearcat-1.dmm @@ -8,13 +8,10 @@ /area/space) "ac" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/space) @@ -43,8 +40,7 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/computer/cryopod/robot{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/broken1) @@ -58,11 +54,8 @@ /turf/simulated/wall, /area/ship/scrap/escape_port) "ai" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "engwindow" }, /turf/simulated/floor/airless, /area/ship/scrap/escape_port) @@ -93,13 +86,10 @@ /turf/simulated/wall/r_wall, /area/ship/scrap/cargo/lower) "am" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -109,11 +99,8 @@ /turf/simulated/wall, /area/ship/scrap/cargo/lower) "ap" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "engwindow" }, /turf/simulated/floor/airless, /area/ship/scrap/escape_star) @@ -130,13 +117,10 @@ /area/ship/scrap/escape_port) "at" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/ship/scrap/cargo/lower) @@ -146,13 +130,10 @@ pixel_x = 25 }, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/ship/scrap/cargo/lower) @@ -532,12 +513,9 @@ /turf/simulated/floor/tiled/dark/airless, /area/ship/scrap/crew/dorms1) "bi" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -702,12 +680,9 @@ /turf/simulated/floor/tiled/dark/airless, /area/ship/scrap/crew/dorms1) "bA" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -1057,12 +1032,9 @@ /turf/simulated/wall/r_wall, /area/ship/scrap/crew/dorms2) "cm" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -1208,12 +1180,9 @@ /turf/simulated/floor/tiled/dark/airless, /area/ship/scrap/crew/dorms2) "cC" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -1513,12 +1482,9 @@ /turf/simulated/floor/tiled/dark/airless, /area/ship/scrap/crew/dorms3) "dk" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -1628,12 +1594,9 @@ /turf/simulated/floor/tiled/dark/airless, /area/ship/scrap/crew/dorms3) "dw" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -1916,15 +1879,17 @@ req_access = newlist() }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/stock_parts/circuitboard/autolathe, +/obj/item/stock_parts/circuitboard/unary_atmos/heater, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/techstorage) "ed" = ( -/obj/item/stock_parts/circuitboard/autolathe, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/structure/rack, /obj/effect/floor_decal/corner/yellow{ dir = 5 }, +/obj/machinery/network/relay{ + initial_network_id = "freightnet_0451" +}, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/techstorage) "ee" = ( @@ -1955,7 +1920,7 @@ "ef" = ( /obj/structure/closet/crate/plastic, /obj/item/storage/ore, -/obj/item/pickaxe, +/obj/item/tool/pickaxe, /obj/item/stack/flag/yellow, /obj/item/storage/box/glowsticks, /obj/item/scanner/mining, @@ -2193,13 +2158,10 @@ pixel_x = -12; pixel_y = 20 }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/ship/scrap/maintenance/eva) @@ -2292,7 +2254,7 @@ /obj/structure/rack, /obj/item/stock_parts/circuitboard/pacman/super/potato, /obj/item/stack/material/pane/mapped/rborosilicate/ten, -/obj/item/stack/material/reinforced/mapped/ocp/ten, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten, /obj/item/stock_parts/circuitboard/unary_atmos/engine, /obj/item/stock_parts/circuitboard/unary_atmos/engine, /obj/item/stock_parts/circuitboard/unary_atmos/engine, @@ -2408,7 +2370,7 @@ /area/ship/scrap/maintenance/storage) "eS" = ( /obj/item/stack/tape_roll/duct_tape, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/rods/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, @@ -2418,7 +2380,7 @@ /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/storage) "eT" = ( @@ -2454,13 +2416,10 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/eva) "eY" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm index 5d23c3e7b54..2b2a16038d9 100644 --- a/maps/away/bearcat/bearcat-2.dmm +++ b/maps/away/bearcat/bearcat-2.dmm @@ -4,25 +4,19 @@ /area/space) "ab" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, /area/ship/scrap/command/bridge) "ac" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -30,13 +24,10 @@ "ad" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/ship/scrap/command/bridge) @@ -155,7 +146,9 @@ /obj/machinery/network/requests_console{ announcementConsole = 1; department = "Captain"; - pixel_x = 32 + pixel_x = 32; + initial_network_id = "freightnet_0451"; + dir = 4; }, /obj/structure/bed/chair{ dir = 1 @@ -207,13 +200,10 @@ /area/ship/scrap/command/captain) "aD" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -324,18 +314,17 @@ /area/ship/scrap/command/captain) "aN" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, /area/ship/scrap/comms) "aO" = ( -/obj/machinery/network/message_server, +/obj/machinery/network/message_server{ + initial_network_id = "freightnet_0451" +}, /turf/simulated/floor/bluegrid/airless, /area/ship/scrap/comms) "aP" = ( @@ -418,12 +407,9 @@ /area/ship/scrap/command/captain) "aW" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -503,13 +489,10 @@ /area/ship/scrap/command/captain) "bd" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -532,13 +515,10 @@ /area/space) "bh" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -586,12 +566,9 @@ /area/ship/scrap/dock) "bm" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/space) @@ -731,12 +708,9 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/dock) "bx" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/button/access/interior{ id_tag = "bearcat_dock_port"; @@ -834,12 +808,9 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/dock) "bF" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/button/access/interior{ id_tag = "bearcat_starboard_dock"; @@ -908,12 +879,9 @@ /area/ship/scrap/dock) "bK" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -925,12 +893,9 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/portable_atmospherics/canister/empty/air, /obj/structure/window/reinforced{ @@ -991,12 +956,9 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/portable_atmospherics/canister/empty/air, /obj/structure/window/reinforced{ @@ -1007,12 +969,9 @@ "bS" = ( /obj/structure/lattice, /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/usedup, /area/space) @@ -1028,12 +987,9 @@ /area/ship/scrap/dock) "bV" = ( /obj/structure/lattice, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/usedup, @@ -1051,12 +1007,9 @@ /turf/space, /area/space) "bZ" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/usedup, @@ -1065,23 +1018,17 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/crew/hallway/port) "cc" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/usedup, /area/ship/scrap/dock) "ce" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/usedup, @@ -1165,13 +1112,10 @@ /area/ship/scrap/crew/toilets) "cs" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -1219,7 +1163,7 @@ /obj/structure/sign/poster{ pixel_x = 32 }, -/obj/item/trash/tray, +/obj/item/plate/tray, /obj/item/circular_saw, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/crew/saloon) @@ -1239,13 +1183,10 @@ /area/ship/scrap/crew/cryo) "cC" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/usedup, @@ -1377,12 +1318,9 @@ /area/ship/scrap/crew/cryo) "cQ" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -1393,7 +1331,7 @@ dir = 4; icon_state = "right"; name = "Reception Window"; - opacity = TRUE + opacity = 1 }, /obj/machinery/light/small{ dir = 8; @@ -1409,7 +1347,7 @@ dir = 4; icon_state = "right"; name = "Reception Window"; - opacity = TRUE + opacity = 1 }, /obj/effect/floor_decal/corner/white/diagonal, /turf/simulated/floor/tiled/usedup, @@ -1572,12 +1510,9 @@ /area/ship/scrap/crew/cryo) "dh" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -1928,12 +1863,9 @@ /area/ship/scrap/maintenance/engine/port) "dS" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -2069,24 +2001,17 @@ /area/ship/scrap/crew/medbay) "eg" = ( /obj/structure/iv_drip, -/obj/structure/closet/medical_wall{ - name = "pill cabinet"; +/obj/structure/closet/secure_closet/medical_wall/pills{ + req_access = null; pixel_x = 26 }, -/obj/item/storage/pill_bottle/antibiotics, -/obj/item/storage/pill_bottle/painkillers, -/obj/item/storage/pill_bottle/antitoxins, -/obj/item/storage/pill_bottle/burn_meds, /turf/simulated/floor/tiled/white, /area/ship/scrap/crew/medbay) "ei" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -2331,12 +2256,9 @@ /area/ship/scrap/crew/medbay) "ez" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -2687,7 +2609,7 @@ pixel_x = 24; req_access = newlist() }, -/turf/simulated/open, +/turf/open, /area/ship/scrap/crew/hallway/starboard) "fg" = ( /obj/structure/lattice, @@ -2832,7 +2754,7 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/crew/hallway/port) "ft" = ( -/turf/simulated/open, +/turf/open, /area/ship/scrap/cargo) "fu" = ( /obj/structure/cable{ @@ -2917,6 +2839,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 10 }, +/obj/machinery/network/relay{ + initial_network_id = "freightnet_0451" +}, /turf/simulated/floor/usedup, /area/ship/scrap/unused) "fA" = ( @@ -2930,12 +2855,9 @@ /turf/simulated/wall, /area/ship/scrap/maintenance/engine/starboard) "fE" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/port) @@ -2948,12 +2870,9 @@ /area/space) "fH" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ @@ -3011,7 +2930,7 @@ /area/ship/scrap/crew/hallway/port) "fM" = ( /obj/effect/shuttle_landmark/lift/top, -/turf/simulated/open, +/turf/open, /area/ship/scrap/cargo) "fN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -3072,12 +2991,9 @@ /area/ship/scrap/unused) "fT" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ @@ -3338,12 +3254,9 @@ /area/space) "gy" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -4066,7 +3979,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/engineering) "hI" = ( @@ -4254,7 +4167,7 @@ /obj/effect/floor_decal/corner/yellow{ dir = 10 }, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/machinery/vending/cigarette, /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/engineering) @@ -4263,7 +4176,7 @@ /obj/effect/floor_decal/corner/yellow{ dir = 10 }, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/sign/warning/nosmoking_1{ pixel_y = -32 }, @@ -4300,12 +4213,9 @@ /area/ship/scrap/maintenance/power) "ic" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/usedup, @@ -4366,11 +4276,8 @@ /turf/simulated/wall/r_wall, /area/ship/scrap/maintenance/engine/aft) "ik" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "engwindow" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4392,7 +4299,7 @@ /turf/simulated/floor/tiled/usedup, /area/ship/scrap/maintenance/power) "in" = ( -/obj/machinery/shield_generator, +/obj/machinery/shield_generator/mapped, /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1 @@ -4594,9 +4501,7 @@ /obj/machinery/door/window/northleft, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = FALSE + id_tag = "radaway" }, /obj/structure/sign/warning/radioactive{ pixel_x = -32 @@ -4607,7 +4512,7 @@ /turf/simulated/floor/usedup, /area/ship/scrap/maintenance/power) "iN" = ( -/obj/item/stack/material/reinforced/mapped/plasteel, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel, /turf/simulated/floor/usedup, /area/ship/scrap/maintenance/power) "iO" = ( @@ -4621,7 +4526,7 @@ /turf/space, /area/ship/scrap/maintenance/atmos) "iQ" = ( -/obj/item/stack/material/reinforced/mapped/plasteel, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/atmos) "iR" = ( @@ -4749,9 +4654,7 @@ }, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = FALSE + id_tag = "radaway" }, /obj/machinery/meter/turf, /turf/simulated/floor/usedup, @@ -4770,7 +4673,7 @@ }, /obj/effect/floor_decal/corner/red/diagonal, /obj/structure/window/reinforced{ - health = 1e+007 + current_health = 1e+007 }, /turf/simulated/floor/reinforced/airless, /area/ship/scrap/maintenance/atmos) @@ -5059,7 +4962,7 @@ /turf/space, /area/ship/scrap/maintenance/engine/aft) "jU" = ( -/obj/item/stack/material/reinforced/mapped/plasteel, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel, /obj/structure/lattice, /turf/space, /area/ship/scrap/maintenance/engine/aft) @@ -5078,12 +4981,9 @@ /turf/space, /area/ship/scrap/maintenance/engine/aft) "jY" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/structure/sign/warning/hot_exhaust{ pixel_y = 32 @@ -5091,12 +4991,9 @@ /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/aft) "jZ" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/aft) @@ -5164,12 +5061,9 @@ /turf/simulated/wall/r_wall, /area/ship/scrap/crew/hallway/port) "oR" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/starboard) @@ -5284,6 +5178,12 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/reinforced/airless, /area/ship/scrap/maintenance/atmos) +"Ix" = ( +/obj/machinery/network/router{ + initial_network_id = "freightnet_0451" +}, +/turf/simulated/floor/bluegrid/airless, +/area/ship/scrap/comms) "IG" = ( /obj/item/shard, /obj/machinery/atmospherics/unary/outlet_injector{ @@ -12068,7 +11968,7 @@ xU Yv Yv ar -aH +Ix aO aX Yv diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm index 746b91d1478..105f967f67c 100644 --- a/maps/away/bearcat/bearcat.dm +++ b/maps/away/bearcat/bearcat.dm @@ -117,9 +117,10 @@ corpse.name = "Captain" var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/deadcap) outfit.equip_outfit(corpse) - corpse.adjustOxyLoss(corpse.maxHealth) - corpse.setBrainLoss(corpse.maxHealth) - corpse.death(FALSE, deathmessage = "no message", show_dead_message = FALSE) + var/corpse_health = corpse.get_max_health() + corpse.adjustOxyLoss(corpse_health) + corpse.setBrainLoss(corpse_health) + corpse.death() var/obj/structure/bed/chair/C = locate() in T if(C) C.buckle_mob(corpse) diff --git a/maps/away/bearcat/bearcat_areas.dm b/maps/away/bearcat/bearcat_areas.dm index afb062f609b..4d7c5c2eb3b 100644 --- a/maps/away/bearcat/bearcat_areas.dm +++ b/maps/away/bearcat/bearcat_areas.dm @@ -168,4 +168,4 @@ /area/ship/scrap/shuttle/lift name = "Cargo Lift" icon_state = "shuttle3" - base_turf = /turf/simulated/open \ No newline at end of file + base_turf = /turf/open \ No newline at end of file diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm index 2cc2841c9cd..9250fb2a347 100644 --- a/maps/away/casino/casino.dmm +++ b/maps/away/casino/casino.dmm @@ -106,13 +106,10 @@ "an" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "casino_bridge"; name = "Casino Bridge Blast Doors"; - opacity = FALSE }, /turf/simulated/floor/plating, /area/casino/casino_bridge) @@ -138,13 +135,10 @@ "at" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "casino_bridge"; name = "Casino Bridge Blast Doors"; - opacity = FALSE }, /turf/simulated/floor/plating, /area/casino/casino_bridge) @@ -192,7 +186,6 @@ /area/casino/casino_maintenance) "aD" = ( /obj/machinery/door/airlock/external{ - icon_state = "door_closed"; id_tag = "casino_dock_outer"; name = "Docking Port Airlock" }, @@ -284,7 +277,6 @@ "aU" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/door/airlock/external{ - icon_state = "door_closed"; id_tag = "casino_dock_inner"; name = "Docking Port Airlock" }, @@ -926,7 +918,6 @@ "cD" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "casino_shuttle_control" }, /obj/machinery/door/firedoor, @@ -1308,19 +1299,19 @@ /area/casino/casino_storage) "dQ" = ( /obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, /obj/random/tool, @@ -1813,13 +1804,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "casino_checkpoint"; name = "Casino Checkpoint Blast Doors"; - opacity = FALSE }, /turf/simulated/floor/tiled, /area/casino/casino_security) @@ -1907,12 +1895,9 @@ icon_state = "4-8" }, /obj/machinery/door/blast/regular{ - density = FALSE; dir = 4; - icon_state = "pdoor0"; id_tag = "casino_checkpoint"; name = "Casino Checkpoint Blast Doors"; - opacity = FALSE }, /turf/simulated/floor/tiled, /area/casino/casino_security) @@ -1949,9 +1934,7 @@ "fA" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ - density = FALSE; dir = 8; - icon_state = "pdoor0"; id_tag = "casino_main" }, /obj/machinery/door/firedoor, @@ -2070,7 +2053,7 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/casino/casino_crew_cantina) "fT" = ( @@ -2080,7 +2063,7 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/casino/casino_crew_cantina) "fU" = ( @@ -2108,7 +2091,7 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/trash/plate, +/obj/item/plate, /obj/random/snack, /obj/random/snack, /turf/simulated/floor/tiled, @@ -2153,13 +2136,10 @@ /obj/machinery/door/airlock{ name = "Casino" }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "casino_checkpoint"; name = "Casino Checkpoint Blast Doors"; - opacity = FALSE }, /turf/simulated/floor/plating, /area/casino/casino_security) @@ -2285,8 +2265,8 @@ /area/casino/casino_mainfloor) "gv" = ( /obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar, +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, /turf/simulated/floor/carpet, @@ -2757,8 +2737,8 @@ /area/casino/casino_mainfloor) "ia" = ( /obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /turf/simulated/floor/carpet, /area/casino/casino_mainfloor) "ib" = ( @@ -2845,9 +2825,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, /obj/item/chems/condiment/flour, /obj/item/chems/condiment/sugar, /turf/simulated/floor/tiled, @@ -2884,13 +2864,13 @@ /area/casino/casino_mainfloor) "iq" = ( /obj/structure/table/woodentable, -/obj/item/trash/plate, +/obj/item/plate, /obj/item/chems/food/applepie, /turf/simulated/floor/carpet, /area/casino/casino_mainfloor) "ir" = ( /obj/structure/table/woodentable, -/obj/item/trash/plate, +/obj/item/plate, /obj/item/chems/food/bigbiteburger, /turf/simulated/floor/carpet, /area/casino/casino_mainfloor) @@ -3003,7 +2983,7 @@ /area/casino/casino_kitchen) "iG" = ( /obj/structure/table/marble, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/casino/casino_kitchen) "iH" = ( @@ -3071,14 +3051,14 @@ "iQ" = ( /obj/machinery/door/firedoor, /obj/structure/table/marble, -/obj/item/trash/tray, +/obj/item/plate/tray, /obj/item/chems/food/stew, /turf/simulated/floor/tiled, /area/casino/casino_kitchen) "iR" = ( /obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/spoon, +/obj/item/plate, +/obj/item/utensil/spoon, /turf/simulated/floor/carpet, /area/casino/casino_mainfloor) "iS" = ( @@ -3492,7 +3472,7 @@ /area/casino/casino_mainfloor) "jU" = ( /obj/structure/table/woodentable, -/obj/item/trash/plate, +/obj/item/plate, /obj/item/chems/food/waffles, /obj/item/chems/drinks/cans/iced_tea, /turf/simulated/floor/carpet, @@ -3639,7 +3619,7 @@ /area/casino/casino_mainfloor) "kp" = ( /obj/structure/table/marble, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, /turf/simulated/floor/tiled, @@ -4248,7 +4228,7 @@ /area/casino/casino_private_vip) "lZ" = ( /obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar{ +/obj/item/storage/box/fancy/cigar{ pixel_y = 5 }, /turf/simulated/floor/wood, @@ -4574,7 +4554,6 @@ "mZ" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "Starboard wide window BD" }, /turf/simulated/floor/plating, diff --git a/maps/away/derelict/derelict-station.dmm b/maps/away/derelict/derelict-station.dmm index 1ab3d8db311..c4af6e094ff 100644 --- a/maps/away/derelict/derelict-station.dmm +++ b/maps/away/derelict/derelict-station.dmm @@ -1253,7 +1253,7 @@ /area/constructionsite/teleporter) "ep" = ( /obj/structure/table/reinforced, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/random/tech_supply, /obj/random/maintenance, /turf/simulated/floor/tiled/dark, @@ -1829,7 +1829,6 @@ /area/constructionsite/maintenance) "gf" = ( /obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; name = "AI Upload Access" }, /turf/simulated/floor/bluegrid/airless, @@ -1861,7 +1860,6 @@ /area/constructionsite/ai) "gn" = ( /obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; name = "AI Upload" }, /turf/simulated/floor/bluegrid/airless, @@ -2043,7 +2041,6 @@ /area/constructionsite/hallway/aft) "gZ" = ( /obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; name = "AI Upload Access" }, /turf/simulated/floor/bluegrid/airless, @@ -2961,7 +2958,7 @@ /turf/simulated/floor/airless, /area/constructionsite) "kr" = ( -/obj/machinery/shield_generator{ +/obj/machinery/shield_generator/mapped{ desc = "A heavy-duty shield generator and capacitor, capable of generating energy shields at large distances. This one seems to be in a state of disrepair."; name = "disused shield generator" }, @@ -3382,7 +3379,7 @@ /area/AIsattele) "lZ" = ( /obj/machinery/emitter{ - anchored = TRUE; + anchored = 1; dir = 4; state = 2 }, @@ -3394,7 +3391,7 @@ /area/constructionsite/engineering) "mb" = ( /obj/machinery/emitter{ - anchored = TRUE; + anchored = 1; dir = 8; state = 2 }, diff --git a/maps/away/errant_pisces/errant_pisces.dm b/maps/away/errant_pisces/errant_pisces.dm index 49a0ecdb69e..19aceede1f6 100644 --- a/maps/away/errant_pisces/errant_pisces.dm +++ b/maps/away/errant_pisces/errant_pisces.dm @@ -24,8 +24,7 @@ turns_per_move = 5 meat_type = /obj/item/chems/food/sharkmeat speed = 2 - maxHealth = 100 - health = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/bite/strong break_stuff_probability = 35 faction = "shark" @@ -33,14 +32,15 @@ /mob/living/simple_animal/hostile/carp/shark/carp_randomify() return -/mob/living/simple_animal/hostile/carp/shark/death() +/mob/living/simple_animal/hostile/carp/shark/death(gibbed) ..() - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - var/datum/gas_mixture/sharkmaw_chlorine = new - sharkmaw_chlorine.adjust_gas(/decl/material/gas/chlorine, 10) - environment.merge(sharkmaw_chlorine) - visible_message(SPAN_WARNING("\The [src]'s body releases some gas from the gills with a quiet fizz!")) + if(. && !gibbed) + var/datum/gas_mixture/environment = loc.return_air() + if (environment) + var/datum/gas_mixture/sharkmaw_chlorine = new + sharkmaw_chlorine.adjust_gas(/decl/material/gas/chlorine, 10) + environment.merge(sharkmaw_chlorine) + visible_message(SPAN_WARNING("\The [src]'s body releases some gas from the gills with a quiet fizz!")) /mob/living/simple_animal/hostile/carp/shark/AttackingTarget() set waitfor = 0//to deal with sleep() possibly stalling other procs @@ -64,14 +64,14 @@ desc = "A fillet of cosmoshark meat." icon_state = "fishfillet" filling_color = "#cecece" - center_of_mass = @"{'x':17,'y':13}" + center_of_mass = @'{"x":17,"y":13}' bitesize = 8 /obj/item/chems/food/sharkmeat/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/nutriment/protein, 5) - reagents.add_reagent(/decl/material/liquid/psychoactives, 1) - reagents.add_reagent(/decl/material/gas/chlorine, 1) + add_to_reagents(/decl/material/liquid/nutriment/protein, 5) + add_to_reagents(/decl/material/liquid/psychoactives, 1) + add_to_reagents(/decl/material/gas/chlorine, 1) /obj/structure/net//if you want to have fun, make them to be draggable as a whole unless at least one piece is attached to a non-space turf or anchored object name = "industrial net" @@ -80,7 +80,7 @@ icon_state = "net_f" anchored = TRUE layer = CATWALK_LAYER//probably? Should cover cables, pipes and the rest of objects that are secured on the floor - maxhealth = 100 + max_health = 100 /obj/structure/net/Initialize(var/mapload) . = ..() @@ -93,16 +93,17 @@ continue N.update_connections() -/obj/structure/net/get_examined_damage_string(health_ratio) - if(maxhealth == -1) +/obj/structure/net/get_examined_damage_string() + if(!can_take_damage()) return - if(health_ratio >= 1) + var/health_percent = get_percent_health() + if(health_percent >= 100) return SPAN_NOTICE("It looks fully intact.") - else if (health_ratio < 0.2) + else if (health_percent < 20) return SPAN_DANGER("\The [src] is barely hanging on by the last few threads.") - else if (health_ratio < 0.5) + else if (health_percent < 50) return SPAN_WARNING("Large swathes of \the [src] have been cut.") - else if (health_ratio < 0.9) + else return SPAN_NOTICE("A few strands of \the [src] have been severed.") /obj/structure/net/attackby(obj/item/W, mob/user) @@ -112,7 +113,7 @@ to_chat(user,"You can't cut throught \the [src] with \the [W], it's too dull.") return visible_message("[user] starts to cut through \the [src] with \the [W]!") - while(health > 0 && !QDELETED(src) && !QDELETED(user)) + while(current_health > 0 && !QDELETED(src) && !QDELETED(user)) if (!do_after(user, 20, src)) visible_message("[user] stops cutting through \the [src] with \the [W]!") return diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm index e1ecd33f77a..232a2668b69 100644 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ b/maps/away/errant_pisces/errant_pisces.dmm @@ -1289,7 +1289,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /turf/simulated/floor/plating, @@ -1411,7 +1410,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /turf/simulated/floor/plating, @@ -1503,7 +1501,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /obj/machinery/button/access/exterior{ @@ -1717,7 +1714,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /obj/machinery/button/access/exterior{ @@ -2046,7 +2042,6 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /turf/simulated/floor/plating, @@ -2232,7 +2227,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /turf/simulated/floor/plating, @@ -3120,7 +3114,7 @@ /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "ih" = ( -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "ii" = ( @@ -3242,8 +3236,8 @@ /area/errant_pisces/infirmary) "iF" = ( /obj/structure/table, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "iG" = ( @@ -3253,7 +3247,7 @@ /area/errant_pisces/dorms) "iH" = ( /obj/structure/table/marble, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "iI" = ( @@ -3523,7 +3517,7 @@ /area/errant_pisces/hallway) "js" = ( /obj/structure/table, -/obj/item/kitchen/utensil/fork/plastic, +/obj/item/utensil/fork/plastic, /obj/random/snack, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) @@ -3652,7 +3646,7 @@ /area/errant_pisces/infirmary) "jK" = ( /obj/structure/table, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /obj/machinery/light, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) @@ -3956,8 +3950,8 @@ dir = 1 }, /obj/structure/bookcase, -/obj/item/book/manual/anomaly_testing, -/obj/item/book/manual/anomaly_spectroscopy, +/obj/item/book/fluff/anomaly_testing, +/obj/item/book/fluff/anomaly_spectroscopy, /turf/simulated/floor/tiled, /area/errant_pisces/science_wing) "kB" = ( @@ -3968,7 +3962,7 @@ /area/errant_pisces/science_wing) "kC" = ( /obj/structure/bookcase, -/obj/item/book/manual/materials_chemistry_analysis, +/obj/item/book/fluff/materials_chemistry_analysis, /turf/simulated/floor/tiled, /area/errant_pisces/science_wing) "kD" = ( @@ -4308,7 +4302,7 @@ /obj/structure/closet/secure_closet/hydroponics, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled, /area/errant_pisces/science_wing) @@ -4320,7 +4314,7 @@ /obj/machinery/vending/hydronutrients, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/window/reinforced{ dir = 4 @@ -4884,7 +4878,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /obj/machinery/door/firedoor, @@ -5443,7 +5436,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /obj/machinery/door/firedoor, @@ -5789,7 +5781,6 @@ "pp" = ( /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /turf/simulated/floor/reinforced/airless, @@ -6335,7 +6326,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Harpoon_perimeter_blast" }, /obj/machinery/door/firedoor, diff --git a/maps/away/liberia/liberia.dmm b/maps/away/liberia/liberia.dmm index 7546bed83aa..0cbe8de8a82 100644 --- a/maps/away/liberia/liberia.dmm +++ b/maps/away/liberia/liberia.dmm @@ -177,9 +177,7 @@ "ay" = ( /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "merch_radaway"; - opacity = FALSE }, /obj/machinery/door/window/northleft{ dir = 8; @@ -207,9 +205,7 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "merch_radaway"; - opacity = FALSE }, /turf/simulated/floor, /area/liberia/engineeringreactor) @@ -324,7 +320,7 @@ dir = 9 }, /obj/structure/closet/emcloset{ - anchored = TRUE; + anchored = 1; name = "anchored emergency closet" }, /turf/simulated/floor/tiled/techfloor/grid, @@ -375,7 +371,7 @@ /turf/simulated/floor/tiled/techfloor, /area/liberia/merchantstorage) "aR" = ( -/obj/machinery/shield_generator, +/obj/machinery/shield_generator/mapped, /obj/structure/cable, /obj/structure/cable/blue{ icon_state = "1-2" @@ -643,13 +639,10 @@ /area/liberia/hallway) "bo" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "merchantshuttle"; name = "Merchant Window Shutters"; - opacity = FALSE }, /obj/effect/paint/silver, /obj/effect/paint_stripe/yellow, @@ -751,7 +744,7 @@ "bv" = ( /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/structure/closet/crate/medical, /obj/random/medical, @@ -819,7 +812,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/door/window/brigdoor/southright{ @@ -835,13 +828,10 @@ /area/liberia/mule) "bC" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "merchantshuttle"; name = "Merchant Window Shutters"; - opacity = FALSE }, /obj/effect/paint/silver, /obj/effect/paint_stripe/yellow, @@ -1270,13 +1260,10 @@ /area/liberia/mule) "cp" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "merchantdesk"; name = "Merchant Desk Shutters"; - opacity = FALSE }, /obj/effect/paint/silver, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1578,13 +1565,10 @@ }, /obj/structure/table/steel, /obj/effect/paint/silver, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "merchantdesk"; name = "Merchant Desk Shutters"; - opacity = FALSE }, /obj/structure/cable/blue{ icon_state = "4-8" @@ -1747,7 +1731,7 @@ }, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/structure/window/reinforced{ dir = 1 @@ -2347,10 +2331,10 @@ }, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/stack/material/rods/fifty, /obj/item/stack/material/rods/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/forty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/forty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, @@ -2364,9 +2348,9 @@ /obj/machinery/door/window/brigdoor/northleft{ req_access = newlist() }, -/obj/item/stack/material/reinforced/mapped/titanium/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/titanium/fifty, /obj/item/stack/material/panel/mapped/plastic/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, /turf/simulated/floor/tiled/steel_grid, /area/liberia/mule) "ed" = ( @@ -2396,7 +2380,7 @@ "ef" = ( /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/structure/closet/crate/secure{ name = "resources crate"; @@ -2454,7 +2438,7 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset{ - anchored = TRUE; + anchored = 1; name = "anchored emergency closet" }, /turf/simulated/floor/tiled/monotile, @@ -2735,7 +2719,7 @@ /obj/item/paint_sprayer, /obj/item/clothing/gloves/insulated, /obj/item/suit_cooling_unit, -/obj/item/stack/material/shiny/mapped/aluminium/ten, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/ten, /obj/effect/floor_decal/borderfloor{ dir = 8 }, @@ -3358,7 +3342,7 @@ /obj/random/drinkbottle, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /turf/simulated/floor/wood/ebony, /area/liberia/bar) @@ -3649,7 +3633,7 @@ /obj/structure/table/woodentable/walnut, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4196,7 +4180,7 @@ "hz" = ( /obj/machinery/vending/cigarette{ dir = 1; - products = list(/obj/item/storage/fancy/cigarettes=10,/obj/item/storage/box/matches=10,/obj/item/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) + products = list(/obj/item/storage/box/fancy/cigarettes=10,/obj/item/storage/box/matches=10,/obj/item/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) }, /turf/simulated/floor/wood/walnut, /area/liberia/bar) @@ -4711,7 +4695,7 @@ /obj/structure/table/steel_reinforced, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/effect/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, @@ -4993,7 +4977,7 @@ /obj/structure/table/steel_reinforced, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/structure/window/reinforced, /obj/effect/floor_decal/corner/blue/mono, @@ -5258,7 +5242,7 @@ /area/liberia/library) "kc" = ( /obj/structure/table/woodentable/walnut, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, @@ -6445,7 +6429,7 @@ }, /obj/structure/window/reinforced{ dir = 8; - health = null + current_health = null }, /obj/machinery/door/window/brigdoor/northleft{ req_access = newlist() @@ -6534,7 +6518,7 @@ /obj/effect/floor_decal/industrial/outline/grey, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /turf/simulated/floor/tiled/techfloor/grid, /area/liberia/merchantstorage) "rc" = ( @@ -6762,7 +6746,7 @@ pixel_x = -4; pixel_y = -4 }, -/obj/item/stack/material/shiny/mapped/aluminium/ten{ +/obj/item/stack/material/sheet/shiny/mapped/aluminium/ten{ pixel_y = -4 }, /obj/item/stack/material/pane/mapped/glass/ten{ @@ -7060,7 +7044,7 @@ dir = 1 }, /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, @@ -7249,9 +7233,9 @@ /obj/structure/rack/dark, /obj/structure/railing/mapped, /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /turf/simulated/floor/tiled/techfloor/grid, /area/liberia/merchantstorage) @@ -7538,14 +7522,14 @@ /obj/item/stack/material/rods/fifty, /obj/item/stack/material/rods/fifty, /obj/item/stack/material/panel/mapped/plastic/fifty, -/obj/item/stack/material/reinforced/mapped/titanium/fifty, -/obj/item/stack/material/reinforced/mapped/ocp/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/titanium/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light/small, @@ -7984,7 +7968,7 @@ dir = 6 }, /obj/structure/closet/emcloset{ - anchored = TRUE; + anchored = 1; name = "anchored emergency closet" }, /turf/simulated/floor/tiled/techfloor, @@ -8094,13 +8078,10 @@ /area/liberia/dockinghall) "QE" = ( /obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "merchantshuttle"; name = "Merchant Window Shutters"; - opacity = FALSE }, /obj/effect/paint/silver, /obj/effect/paint_stripe/yellow, diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm index ef689993464..41675db3394 100644 --- a/maps/away/lost_supply_base/lost_supply_base.dmm +++ b/maps/away/lost_supply_base/lost_supply_base.dmm @@ -1069,10 +1069,10 @@ /area/lost_supply_base/common) "dc" = ( /obj/structure/table, -/obj/item/trash/tray{ +/obj/item/plate/tray{ pixel_x = 10 }, -/obj/item/trash/tray, +/obj/item/plate/tray, /turf/simulated/floor/tiled/airless, /area/lost_supply_base/common) "dd" = ( @@ -1081,7 +1081,7 @@ /area/lost_supply_base/common) "de" = ( /obj/structure/table, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/tiled/airless, /area/lost_supply_base/common) "df" = ( @@ -1197,7 +1197,7 @@ /turf/simulated/wall, /area/lost_supply_base) "dx" = ( -/obj/item/kitchen/utensil/spoon, +/obj/item/utensil/spoon, /turf/simulated/floor/tiled/airless, /area/lost_supply_base/common) "dy" = ( @@ -1210,7 +1210,7 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled/airless, /area/lost_supply_base/common) "dA" = ( @@ -1220,7 +1220,7 @@ /turf/simulated/floor/tiled/airless, /area/lost_supply_base/common) "dB" = ( -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /obj/structure/bed/chair{ dir = 8 }, @@ -1329,7 +1329,7 @@ "dX" = ( /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/airless, /area/lost_supply_base) @@ -1337,7 +1337,7 @@ /obj/item/stack/tile/floor_dark, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/airless, /area/lost_supply_base) @@ -2102,7 +2102,7 @@ /turf/unsimulated/mask, /area/mine/unexplored) "gu" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ib" = ( /obj/structure/hygiene/sink{ diff --git a/maps/away/magshield/magshield.dm b/maps/away/magshield/magshield.dm index 5a32a7b5dfe..73400dc32c4 100644 --- a/maps/away/magshield/magshield.dm +++ b/maps/away/magshield/magshield.dm @@ -103,9 +103,10 @@ sleep(50) visible_message(SPAN_DANGER("\The [src] explodes!")) var/turf/T = get_turf(src) - explosion(T, 2, 3, 4, 10, 1) empulse(src, heavy_range*2, lighter_range*2, 1) - qdel(src) + explosion(T, 2, 3, 4, 10, 1) + if(!QDELETED(src)) + qdel(src) if(istype(W, /obj/item/mop)) to_chat(user, SPAN_NOTICE("You stick \the [W] into the rotating spokes, and it immediately breaks into tiny pieces.")) qdel(W) @@ -141,40 +142,24 @@ icon_state = "nav_light_red" -/obj/item/book/manual/magshield_manual +/obj/item/book/fluff/magshield_manual name = "SOP for Planetary Shield Orbital Station" icon = 'magshield_sprites.dmi' icon_state = "mg_guide" author = "Terraforms Industrial" title = "Standard operating procedures for Planetary Shield Orbital Station" - - dat = {" - - - - - -

    Introduction

    - Terraforms Industrial is happy to see you as our customer! Please read this guide before using and operating with your custom PSOS - Planetary Shield Orbital Statiion. -

    Best uses for PSOS

    - PSOS is intended for protecting exoplanets from high energy space radiation rays and particles. Best used for planets lacking active geomagnetic field so PSOS would compensate its absence.
    -

    Applied technologies

    - Terraforms Industrial is delivering you your new PSOS with set of four (4) high-strength magnetic field generators. Those devices use rotating supeconducter hands to create magnetic field with strength up to 5 Tesla effectively deflecting up to 99% of space radiation spectrum.
    -
    - Special modified vacuum radiation sensors will help you evaluate radiation level and adjust power input of PSOS magnetic generators for best efficiency and power saving. -


    - rest of the book pages are gone - - - "} + fluff_text = {" +

    Introduction

    + Terraforms Industrial is happy to see you as our customer! Please read this guide before using and operating with your custom PSOS - Planetary Shield Orbital Statiion. +

    Best uses for PSOS

    + PSOS is intended for protecting exoplanets from high energy space radiation rays and particles. Best used for planets lacking active geomagnetic field so PSOS would compensate its absence.
    +

    Applied technologies

    + Terraforms Industrial is delivering you your new PSOS with set of four (4) high-strength magnetic field generators. Those devices use rotating supeconducter hands to create magnetic field with strength up to 5 Tesla effectively deflecting up to 99% of space radiation spectrum.
    +
    + Special modified vacuum radiation sensors will help you evaluate radiation level and adjust power input of PSOS magnetic generators for best efficiency and power saving. +


    + The rest of the pages have been torn out... + "} /obj/item/paper/magshield/tornpage name = "torn book page" diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm index 213b07ec325..7e5649f65c7 100644 --- a/maps/away/magshield/magshield.dmm +++ b/maps/away/magshield/magshield.dmm @@ -214,7 +214,6 @@ /obj/effect/wingrille_spawn/reinforced_borosilicate/full, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /turf/simulated/floor/airless, @@ -341,7 +340,6 @@ /obj/machinery/door/airlock/hatch, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /turf/simulated/floor/airless, @@ -355,7 +353,6 @@ /area/magshield/engine) "bb" = ( /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /turf/simulated/floor/airless, @@ -466,7 +463,6 @@ "bu" = ( /obj/effect/wingrille_spawn/reinforced_borosilicate/full, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, @@ -475,7 +471,6 @@ "bv" = ( /obj/effect/wingrille_spawn/reinforced_borosilicate/full, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /turf/simulated/floor/airless, @@ -674,20 +669,17 @@ /turf/simulated/floor/airless, /area/magshield/engine) "cc" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/magshield/engine) "cd" = ( /obj/machinery/atmospherics/binary/circulator{ - anchored = TRUE; + anchored = 1; dir = 4 }, /turf/simulated/floor/plating, @@ -736,13 +728,10 @@ /turf/simulated/floor/airless, /area/magshield/engine) "ck" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; - opacity = FALSE }, /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ @@ -775,7 +764,7 @@ icon_state = "0-8" }, /obj/machinery/generator{ - anchored = TRUE + anchored = 1 }, /turf/simulated/floor/plating, /area/magshield/engine) @@ -856,7 +845,7 @@ /area/magshield/engine) "cx" = ( /obj/machinery/atmospherics/binary/circulator{ - anchored = TRUE; + anchored = 1; dir = 8 }, /turf/simulated/floor/plating, @@ -2570,7 +2559,7 @@ /turf/simulated/floor/tiled, /area/magshield/west) "hD" = ( -/obj/item/book/manual/magshield_manual, +/obj/item/book/fluff/magshield_manual, /turf/simulated/floor/tiled/white, /area/magshield/west) "hE" = ( @@ -3172,7 +3161,7 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/trash/plate, +/obj/item/plate, /obj/item/chems/food/flatbread, /turf/simulated/floor/tiled, /area/magshield/south) @@ -3328,14 +3317,14 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/magshield/south) "jT" = ( /obj/structure/table{ name = "plastic table frame" }, -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/simulated/floor/tiled, /area/magshield/south) "jU" = ( @@ -3570,7 +3559,7 @@ /turf/simulated/floor/tiled, /area/magshield/south) "kD" = ( -/obj/item/kitchen/utensil/fork/plastic, +/obj/item/utensil/fork/plastic, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3619,7 +3608,7 @@ /area/magshield/south) "kJ" = ( /obj/structure/table/marble, -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/simulated/floor/tiled/white, /area/magshield/south) "kK" = ( @@ -3686,7 +3675,7 @@ /area/magshield/south) "kT" = ( /obj/structure/curtain/open/bed, -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/simulated/floor/tiled, /area/magshield/south) "kU" = ( @@ -3746,8 +3735,8 @@ /obj/structure/table{ name = "plastic table frame" }, -/obj/item/kitchen/utensil/fork/plastic, -/obj/item/trash/plate, +/obj/item/utensil/fork/plastic, +/obj/item/plate, /turf/simulated/floor/tiled, /area/magshield/south) "le" = ( diff --git a/maps/away/mining/mining-asteroid.dmm b/maps/away/mining/mining-asteroid.dmm index 87803c1ff6b..92ee0802a51 100644 --- a/maps/away/mining/mining-asteroid.dmm +++ b/maps/away/mining/mining-asteroid.dmm @@ -6,14 +6,14 @@ /turf/unsimulated/mask, /area/mine/unexplored) "af" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "aj" = ( /turf/simulated/wall/r_wall, /area/djstation) "ak" = ( /obj/random/junk, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "al" = ( /obj/random/trash, @@ -204,15 +204,15 @@ /area/djstation) "be" = ( /obj/random/maintenance, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "bf" = ( /obj/effect/overmap/visitable/sector/cluster, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "cb" = ( /obj/effect/shuttle_landmark/cluster/nav5, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "db" = ( /obj/effect/shuttle_landmark/cluster/nav6, @@ -236,7 +236,7 @@ /area/space) "ib" = ( /obj/effect/shuttle_landmark/cluster/nav7, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "jb" = ( /obj/machinery/button/access/exterior{ @@ -244,7 +244,7 @@ name = "exterior access button"; pixel_y = -24 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "kb" = ( /obj/machinery/door/airlock/external{ @@ -340,7 +340,7 @@ pixel_x = -24; req_access = null }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "wb" = ( /obj/machinery/door/airlock/external{ diff --git a/maps/away/mining/mining-orb.dmm b/maps/away/mining/mining-orb.dmm index c11811d5a8b..be0b347591b 100644 --- a/maps/away/mining/mining-orb.dmm +++ b/maps/away/mining/mining-orb.dmm @@ -14,10 +14,10 @@ /turf/unsimulated/mask, /area/mine/unexplored) "ae" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "af" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/unexplored) "ag" = ( /turf/exterior/wall/random/high_chance, @@ -26,7 +26,7 @@ /turf/exterior/wall/random, /area/mine/unexplored) "ai" = ( -/turf/simulated/wall/sandstone, +/turf/simulated/wall/brick/sandstone, /area/mine/unexplored) "aj" = ( /turf/simulated/floor/airless/stone, @@ -48,14 +48,14 @@ /turf/simulated/wall/alium, /area/mine/explored) "ap" = ( -/turf/simulated/wall/sandstone, +/turf/simulated/wall/brick/sandstone, /area/mine/explored) "aq" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "as" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -64,7 +64,7 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "au" = ( /obj/effect/shuttle_landmark/orb/nav4, @@ -72,25 +72,25 @@ /area/space) "ax" = ( /obj/effect/floor_decal/spline/fancy/wood, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aB" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aD" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aF" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aI" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -110,7 +110,7 @@ /turf/simulated/floor/airless/stone, /area/mine/explored) "aP" = ( -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aQ" = ( /obj/structure/door/sandstone, @@ -131,20 +131,20 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aV" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aW" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aX" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -153,7 +153,7 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aY" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -162,7 +162,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "aZ" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -171,7 +171,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "ba" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -180,7 +180,7 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "bb" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -189,19 +189,19 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "bc" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "bd" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "be" = ( /turf/unsimulated/mask, @@ -218,26 +218,26 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "eM" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "fA" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 }, /obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "ma" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "pz" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -246,17 +246,17 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "st" = ( /obj/effect/shuttle_landmark/orb/nav7, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "vc" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "wM" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -265,29 +265,29 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "yQ" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "yR" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "Aj" = ( /obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "DJ" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "EM" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -299,7 +299,7 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "Gl" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -308,29 +308,29 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "Le" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "LT" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/effect/floor_decal/spline/fancy/wood, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/explored) "MX" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 8 }, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "NQ" = ( -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "Ol" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -339,11 +339,11 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 4 }, -/turf/simulated/wall/sandstone, +/turf/simulated/wall/brick/sandstone, /area/mine/explored) "Rr" = ( /obj/effect/floor_decal/spline/fancy/wood, -/turf/exterior/water, +/turf/exterior/sand/water, /area/mine/unexplored) "SY" = ( /obj/structure/fountain, diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm index 82df10e9087..7e17e85c7b2 100644 --- a/maps/away/mining/mining-signal.dmm +++ b/maps/away/mining/mining-signal.dmm @@ -3,7 +3,7 @@ /turf/unsimulated/mask, /area/mine/unexplored) "ab" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "af" = ( /turf/simulated/wall/titanium, @@ -965,17 +965,13 @@ /turf/simulated/floor/tiled/dark, /area/outpost/abandoned) "ds" = ( -/obj/machinery/door/airlock/medical{ - density = FALSE; - icon_state = "door_open"; - opacity = FALSE - }, +/obj/machinery/door/airlock/medical/open, /obj/machinery/holosign/surgery, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "dt" = ( /obj/structure/door_assembly{ - anchored = TRUE + anchored = 1 }, /turf/simulated/floor, /area/outpost/abandoned) @@ -984,7 +980,7 @@ /turf/simulated/wall/titanium, /area/outpost/abandoned) "dv" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /turf/simulated/shuttle/wall{ icon_state = "diagonalWall3" }, @@ -1028,7 +1024,7 @@ /turf/simulated/floor/carpet, /area/outpost/abandoned) "dB" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /turf/simulated/shuttle/wall{ dir = 4; icon_state = "diagonalWall3" @@ -1083,18 +1079,18 @@ /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "dJ" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/table/steel, /obj/random/bomb_supply, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "dK" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/bed/chair, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "dL" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/bed/chair, /obj/machinery/light/small/emergency{ dir = 1; @@ -1177,7 +1173,7 @@ /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "dZ" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/sign/directions/medical{ dir = 8 }, @@ -1185,8 +1181,8 @@ /area/outpost/abandoned) "ea" = ( /obj/effect/decal/cleanable/dirt, -/obj/abstract/fluid_mapped/fuel, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "eb" = ( @@ -1198,11 +1194,11 @@ /area/outpost/abandoned) "ec" = ( /obj/effect/decal/cleanable/dirt, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "ed" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) @@ -1224,26 +1220,26 @@ /area/outpost/abandoned) "eh" = ( /obj/structure/hygiene/sink/puddle, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ei" = ( /obj/random/trash, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ej" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ek" = ( /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "el" = ( /obj/structure/firedoor_assembly{ - anchored = TRUE + anchored = 1 }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -1286,7 +1282,7 @@ /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "et" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/table, /obj/structure/window/reinforced{ dir = 1 @@ -1298,14 +1294,14 @@ /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "eu" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /mob/living/bot/medbot, /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "ev" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "ex" = ( @@ -1314,7 +1310,7 @@ /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "ey" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/effect/floor_decal/corner/paleblue{ dir = 9 }, @@ -1362,7 +1358,7 @@ /obj/effect/floor_decal/industrial/warning/dust{ dir = 4 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "eG" = ( /obj/machinery/door/airlock/external, @@ -1472,7 +1468,7 @@ "eW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, @@ -1541,7 +1537,7 @@ /obj/effect/floor_decal/industrial/warning/dust{ dir = 4 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "fg" = ( /obj/effect/decal/cleanable/dirt, @@ -1640,7 +1636,7 @@ /area/outpost/abandoned) "fy" = ( /obj/effect/floor_decal/asteroid, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "fz" = ( /obj/effect/floor_decal/asteroid, @@ -1739,7 +1735,8 @@ /obj/machinery/network/requests_console{ icon_state = "req_comp_rewired"; pixel_y = -32; - stat = 1 + stat = 1; + dir = 2; }, /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) @@ -1841,11 +1838,11 @@ "gc" = ( /obj/item/solar_assembly, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "gd" = ( /obj/structure/windoor_assembly{ - anchored = TRUE; + anchored = 1; dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -1944,12 +1941,12 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "gt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "gu" = ( /obj/effect/decal/cleanable/dirt, @@ -1987,11 +1984,7 @@ /turf/simulated/floor/tiled/airless, /area/outpost/abandoned) "gz" = ( -/obj/machinery/door/airlock/external{ - density = FALSE; - icon_state = "door_open"; - opacity = FALSE - }, +/obj/machinery/door/airlock/external/open, /obj/machinery/door/blast/regular/open, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -2066,7 +2059,7 @@ /area/outpost/abandoned) "gM" = ( /obj/item/solar_assembly, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "gN" = ( /obj/effect/decal/cleanable/dirt, @@ -2080,7 +2073,7 @@ /obj/effect/decal/cleanable/blood/tracks/footprints, /obj/effect/decal/cleanable/dirt, /obj/structure/firedoor_assembly{ - anchored = TRUE + anchored = 1 }, /turf/simulated/floor/plating{ icon_state = "dmg2" @@ -2096,7 +2089,7 @@ dir = 1 }, /obj/machinery/power/tracker, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/outpost/abandoned) "gR" = ( /obj/effect/decal/cleanable/dirt, @@ -2140,7 +2133,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/outpost/abandoned) "gX" = ( /obj/structure/cable/orange{ @@ -2268,7 +2261,7 @@ /area/outpost/abandoned) "hp" = ( /obj/effect/decal/cleanable/dirt, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/plating, /area/outpost/abandoned) "hq" = ( @@ -2369,13 +2362,13 @@ "hD" = ( /obj/random/junk, /obj/effect/decal/cleanable/dirt, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/plating, /area/outpost/abandoned) "hE" = ( /obj/structure/table/reinforced, /obj/random/material, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/plating, /area/outpost/abandoned) "hF" = ( @@ -2384,7 +2377,7 @@ /turf/simulated/floor/plating, /area/outpost/abandoned) "hG" = ( -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /obj/structure/closet/crate/radiation, /obj/random/voidsuit, /obj/random/voidhelmet, @@ -2392,7 +2385,7 @@ /area/outpost/abandoned) "hH" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/plating, /area/outpost/abandoned) "hL" = ( @@ -2402,31 +2395,31 @@ /area/outpost/abandoned) "ib" = ( /obj/effect/shuttle_landmark/away/nav7, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "jb" = ( /obj/effect/shuttle_landmark/away/nav1, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "kb" = ( /obj/effect/shuttle_landmark/away/nav2, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "lb" = ( /obj/effect/shuttle_landmark/away/nav3, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "mb" = ( /obj/effect/shuttle_landmark/away/nav6, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "nb" = ( /obj/effect/shuttle_landmark/away/nav5, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ob" = ( /obj/effect/shuttle_landmark/away/nav4, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "pb" = ( /obj/effect/gibspawner/human, diff --git a/maps/away/mining/mining_areas.dm b/maps/away/mining/mining_areas.dm index 36c8441c409..bc66bfff387 100644 --- a/maps/away/mining/mining_areas.dm +++ b/maps/away/mining/mining_areas.dm @@ -3,7 +3,7 @@ icon_state = "mining" ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') sound_env = ASTEROID - base_turf = /turf/simulated/floor/asteroid + base_turf = /turf/exterior/barren area_flags = AREA_FLAG_IS_BACKGROUND | AREA_FLAG_HIDE_FROM_HOLOMAP /area/mine/explored diff --git a/maps/away/mobius_rift/mobius_rift.dmm b/maps/away/mobius_rift/mobius_rift.dmm index bc3aca0671d..5988f633995 100644 --- a/maps/away/mobius_rift/mobius_rift.dmm +++ b/maps/away/mobius_rift/mobius_rift.dmm @@ -33,7 +33,7 @@ /turf/simulated/floor/grass, /area/mobius_rift) "k" = ( -/turf/exterior/water, +/turf/exterior/sand/water, /area/mobius_rift) "l" = ( /obj/structure/flora/bush/fullgrass, diff --git a/maps/away/slavers/slavers_base.dm b/maps/away/slavers/slavers_base.dm index b7b2cf50157..0c120c0edc5 100644 --- a/maps/away/slavers/slavers_base.dm +++ b/maps/away/slavers/slavers_base.dm @@ -134,25 +134,25 @@ turns_per_move = 5 speed = 4 stop_automated_movement_when_pulled = 0 - maxHealth = 100 - health = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/punch can_escape = TRUE unsuitable_atmos_damage = 15 - var/corpse = /obj/abstract/landmark/corpse/abolitionist - var/weapon = /obj/item/gun/energy/laser projectilesound = 'sound/weapons/laser.ogg' ranged = 1 projectiletype = /obj/item/projectile/beam faction = "extremist abolitionists" + var/corpse = /obj/abstract/landmark/corpse/abolitionist + var/weapon = /obj/item/gun/energy/laser -/mob/living/simple_animal/hostile/abolition_extremist/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse(loc) - if(weapon) - new weapon(loc) - qdel(src) +/mob/living/simple_animal/hostile/abolition_extremist/death(gibbed) + . = ..() + if(. && !gibbed) + if(corpse) + new corpse(loc) + if(weapon) + new weapon(loc) + qdel(src) /obj/abstract/landmark/corpse/abolitionist name = "abolitionist" diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm index 6d909a76135..f7dfb57e239 100644 --- a/maps/away/slavers/slavers_base.dmm +++ b/maps/away/slavers/slavers_base.dmm @@ -21,7 +21,7 @@ /turf/exterior/wall, /area/space) "ag" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/space) "ah" = ( /turf/simulated/wall, @@ -35,34 +35,34 @@ desc = "A heavy box covered with dried blood."; name = "Big dirty box" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "ak" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "al" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "am" = ( /obj/structure/morgue, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "an" = ( /obj/effect/decal/cleanable/ash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "ao" = ( /obj/structure/table, /obj/item/wirecutters, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "ap" = ( /obj/structure/table, /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aq" = ( /obj/structure/table, @@ -73,62 +73,62 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "ar" = ( /obj/structure/table, -/obj/item/knife/table, -/turf/simulated/floor/airless/ceiling, +/obj/item/utensil/knife, +/turf/simulated/floor/airless, /area/slavers_base/mort) "as" = ( /obj/structure/rack, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "at" = ( /obj/effect/gibspawner/human, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/space) "au" = ( /obj/structure/rack, /obj/item/wirecutters, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "av" = ( -/obj/item/shovel, -/turf/simulated/floor/asteroid, +/obj/item/tool/shovel, +/turf/exterior/barren, /area/space) "aw" = ( /obj/item/remains/human, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/space) "ax" = ( /obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "ay" = ( /obj/item/bodybag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "az" = ( -/obj/item/knife/table, -/turf/simulated/floor/airless/ceiling, +/obj/item/utensil/knife, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aA" = ( /obj/structure/rack, /obj/item/hatchet, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aB" = ( /obj/structure/closet/crate/freezer, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aC" = ( /obj/effect/gibspawner/human, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aE" = ( /obj/structure/cable{ @@ -140,30 +140,30 @@ pixel_x = 24 }, /obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aF" = ( /obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aG" = ( /obj/machinery/gibber, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aH" = ( /obj/structure/kitchenspike, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aI" = ( /obj/structure/kitchenspike, /obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aK" = ( /obj/structure/cable{ @@ -173,13 +173,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aL" = ( /obj/machinery/door/airlock{ name = "Mortuary backyard" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/mort) "aM" = ( /turf/simulated/wall, @@ -199,25 +199,25 @@ /obj/structure/hygiene/toilet{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aP" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aQ" = ( /obj/machinery/light/small/red{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aR" = ( /obj/structure/mattress/dirty, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aS" = ( /obj/structure/mattress/dirty, /obj/item/chems/glass/rag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aT" = ( /obj/effect/decal/cleanable/dirt, @@ -235,31 +235,31 @@ /area/slavers_base/cells) "aV" = ( /obj/random/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aW" = ( /obj/item/chems/glass/rag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aX" = ( /obj/structure/hygiene/shower{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aY" = ( /obj/item/chems/glass/rag, /obj/random/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "aZ" = ( /obj/structure/mattress/dirty, /obj/item/chems/drinks/cans/waterbottle, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "ba" = ( /obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bb" = ( /obj/effect/decal/cleanable/dirt, @@ -276,24 +276,24 @@ name = "Floor mounted flash" }, /obj/item/chems/glass/rag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bd" = ( /obj/structure/mattress/dirty, /obj/item/trash/liquidfood, /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "be" = ( /obj/machinery/flasher{ id_tag = "permentryflash"; name = "Floor mounted flash" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bf" = ( /obj/item/chems/drinks/cans/waterbottle, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bg" = ( /obj/machinery/flasher{ @@ -301,7 +301,7 @@ name = "Floor mounted flash" }, /obj/random/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bh" = ( /obj/structure/mattress/dirty, @@ -309,27 +309,27 @@ id_tag = "permentryflash"; name = "Floor mounted flash" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bi" = ( /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bj" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/cyan{ icon_state = "0-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bk" = ( /obj/machinery/door/window/brigdoor/southright, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bl" = ( /obj/machinery/door/window/brigdoor/southright, /obj/random/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bm" = ( /obj/effect/decal/cleanable/dirt, @@ -439,18 +439,18 @@ "bu" = ( /obj/structure/mattress/dirty, /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bv" = ( /obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bw" = ( /obj/item/paper{ info = "Tonight, when lights are out. Prepare shivs, pieces of glass, whatever you might find."; name = "Note" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bx" = ( /obj/effect/decal/cleanable/dirt, @@ -462,7 +462,7 @@ "by" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black, /obj/abstract/landmark/allowed_leak, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "bz" = ( /obj/structure/closet/crate/freezer/rations, @@ -500,11 +500,11 @@ /area/slavers_base/cells) "bD" = ( /obj/random/shoes, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bE" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bF" = ( /obj/effect/decal/cleanable/dirt, @@ -518,28 +518,28 @@ "bG" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/cyan, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bH" = ( /obj/machinery/door/window/brigdoor/northright, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bI" = ( /obj/random/trash, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bJ" = ( /obj/item/storage/bag/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bK" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/cyan{ icon_state = "0-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bL" = ( /obj/effect/wallframe_spawn/reinforced, @@ -552,14 +552,14 @@ /obj/structure/cable/cyan{ icon_state = "0-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bM" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/cyan{ icon_state = "0-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bN" = ( /obj/machinery/door/airlock{ @@ -567,22 +567,22 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bO" = ( /obj/machinery/light/small/red, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bP" = ( /obj/machinery/light/small/red, /obj/structure/mattress/dirty, /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bQ" = ( /obj/structure/mattress/dirty, /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "bR" = ( /obj/machinery/light{ @@ -718,7 +718,7 @@ /obj/structure/cable/cyan{ icon_state = "0-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cb" = ( /obj/machinery/door/airlock{ @@ -726,7 +726,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cc" = ( /obj/effect/decal/cleanable/dirt, @@ -743,48 +743,48 @@ dir = 4 }, /obj/item/chems/food/liquidfood, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "ce" = ( /obj/machinery/light/small/red{ dir = 1 }, /obj/structure/mattress/dirty, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cf" = ( /obj/structure/mattress/dirty, /obj/random/snack, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cg" = ( /obj/machinery/light/small/red{ dir = 1 }, /obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "ch" = ( /obj/structure/mattress/dirty, /obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "ci" = ( /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "ck" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cl" = ( /obj/effect/decal/cleanable/dirt, @@ -878,23 +878,23 @@ /turf/simulated/floor/tiled/airless, /area/slavers_base/cells) "cs" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "ct" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cu" = ( /obj/machinery/door/blast/regular{ id_tag = "service_hangar" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cv" = ( /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cw" = ( /obj/effect/decal/cleanable/dirt, @@ -913,7 +913,7 @@ /area/slavers_base/cells) "cy" = ( /obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cz" = ( /obj/effect/decal/cleanable/dirt, @@ -946,96 +946,96 @@ "cB" = ( /obj/machinery/door/window/brigdoor/northright, /obj/item/chems/glass/rag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cC" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cD" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cE" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5; icon_state = "warning" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cF" = ( /obj/item/paper, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cG" = ( /obj/item/trash/liquidfood, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cH" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cI" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "cJ" = ( /obj/item/paper{ info = "Doc who checked us told implants won't explode our heads. Gotta make guys know. Seems I see a silver lining."; name = "Note" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cK" = ( /obj/machinery/light/small/red, /obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cL" = ( /obj/random/snack, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cM" = ( /obj/structure/mattress/dirty, /obj/item/chems/drinks/cans/waterbottle, /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cN" = ( /obj/machinery/light/small/red, /obj/random/trash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cO" = ( /obj/structure/mattress/dirty, /obj/item/chems/glass/rag, /obj/item/chems/drinks/cans/waterbottle, /obj/abstract/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cP" = ( /obj/structure/hygiene/toilet{ dir = 4 }, /obj/item/trash/liquidfood, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cQ" = ( /obj/machinery/light/small/red, /obj/structure/mattress/dirty, /obj/item/chems/glass/rag, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/cells) "cR" = ( /turf/simulated/wall, @@ -1074,31 +1074,31 @@ /area/space) "cX" = ( /obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "cY" = ( /obj/machinery/atmospherics/unary/tank/air, /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "cZ" = ( /obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "da" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "db" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dc" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dd" = ( /obj/structure/bed, @@ -1292,51 +1292,51 @@ /turf/simulated/floor/tiled/airless, /area/slavers_base/med) "dB" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "dC" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "dD" = ( /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "dE" = ( /obj/structure/closet/crate/freezer/rations, /obj/item/chems/food/liquidfood, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "dF" = ( /obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "dG" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dH" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dI" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dJ" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 10 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dK" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "dL" = ( /turf/simulated/floor/tiled/airless, @@ -1446,43 +1446,43 @@ /area/slavers_base/med) "dZ" = ( /obj/item/chems/food/liquidfood, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "ea" = ( /obj/structure/closet/crate/trashcart, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "eb" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10; icon_state = "warning" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "ec" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "ed" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "ee" = ( /obj/machinery/atmospherics/binary/pump{ dir = 1; name = "waste pump" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "ef" = ( /obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eg" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eh" = ( /obj/random/junk, @@ -1597,16 +1597,16 @@ /area/slavers_base/med) "eA" = ( /obj/item/beartrap, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "eB" = ( /obj/item/mop, /obj/structure/mopbucket, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "eC" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "eD" = ( /obj/machinery/atmospherics/portables_connector{ @@ -1615,47 +1615,47 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eE" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eF" = ( /obj/random/tool, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eG" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eH" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eK" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "eL" = ( /obj/structure/cable/green{ @@ -1811,26 +1811,26 @@ /obj/structure/table, /obj/item/storage/box/handcuffs, /obj/item/storage/box/handcuffs, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "fe" = ( /obj/structure/table, /obj/item/storage/box/bodybags, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "ff" = ( /obj/structure/table, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "fg" = ( /obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/med) "fh" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fi" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -1839,7 +1839,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fj" = ( /obj/structure/cable{ @@ -1849,11 +1849,11 @@ name = "Slavers hangar"; pixel_y = -24 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fk" = ( /obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fl" = ( /obj/effect/decal/cleanable/generic, @@ -1861,14 +1861,14 @@ dir = 4; level = 2 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fm" = ( /obj/effect/decal/cleanable/generic, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1888,14 +1888,14 @@ "fp" = ( /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fq" = ( /obj/machinery/door/airlock/external, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hangar) "fr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1905,7 +1905,7 @@ dir = 5 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1917,7 +1917,7 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "ft" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1933,7 +1933,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hallway) "fu" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -2028,7 +2028,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2038,13 +2038,13 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2053,13 +2053,13 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fF" = ( /obj/machinery/atmospherics/binary/pump{ @@ -2068,38 +2068,38 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fG" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fH" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fI" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fJ" = ( /turf/simulated/wall, /area/slavers_base/maint) "fK" = ( /obj/machinery/atmospherics/unary/tank/carbon_dioxide, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fL" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 6 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fM" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, @@ -2107,39 +2107,39 @@ dir = 4 }, /obj/abstract/landmark/allowed_leak, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fN" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 10 }, /obj/abstract/landmark/allowed_leak, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fO" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fP" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fQ" = ( /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "fR" = ( /obj/machinery/door/airlock{ name = "Power/atmos" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/hallway) "fS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -2180,7 +2180,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fY" = ( /obj/structure/cable{ @@ -2190,49 +2190,49 @@ icon_state = "0-4" }, /obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "fZ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "ga" = ( /obj/structure/cable{ icon_state = "1-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gb" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gc" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gd" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "ge" = ( /obj/machinery/atmospherics/omni/filter{ dir = 8 }, /obj/abstract/landmark/allowed_leak, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2241,7 +2241,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gh" = ( /obj/structure/cable/green{ @@ -2255,7 +2255,7 @@ name = "Slavers atmos and power room"; pixel_x = 24 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gi" = ( /turf/simulated/wall, @@ -2294,28 +2294,28 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gn" = ( /obj/machinery/atmospherics/binary/pump, /obj/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "go" = ( /obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gp" = ( /obj/item/crowbar, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gq" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gr" = ( /obj/structure/table/steel, @@ -2328,7 +2328,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gs" = ( /obj/structure/cable/green{ @@ -2424,30 +2424,30 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gI" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gJ" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gK" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gL" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 }, /obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gM" = ( /obj/structure/table/steel, @@ -2455,7 +2455,7 @@ icon_state = "1-2" }, /obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gN" = ( /obj/random/junk, @@ -2475,7 +2475,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2487,7 +2487,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gQ" = ( /obj/random/junk, @@ -2504,7 +2504,7 @@ name = "Slavers Maintenance"; pixel_y = -24 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2513,7 +2513,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2523,7 +2523,7 @@ dir = 4 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gT" = ( /obj/machinery/door/airlock{ @@ -2535,7 +2535,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2544,24 +2544,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gV" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "gW" = ( /obj/machinery/floodlight, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gX" = ( /obj/structure/table/steel, /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "gY" = ( /obj/machinery/light{ @@ -2600,7 +2600,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hd" = ( /turf/simulated/wall, @@ -2609,22 +2609,22 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hf" = ( /obj/machinery/light/small{ dir = 4; pixel_y = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hg" = ( /obj/item/coilgun_assembly, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hh" = ( /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2675,7 +2675,7 @@ /area/slavers_base/dorms) "hr" = ( /obj/structure/safe, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hs" = ( /obj/machinery/light{ @@ -2683,12 +2683,12 @@ }, /obj/structure/safe, /obj/item/storage/bag/cash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "ht" = ( /obj/structure/safe, /obj/item/storage/bag/cash, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hu" = ( /obj/machinery/light{ @@ -2716,27 +2716,27 @@ /area/slavers_base/demo) "hy" = ( /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hz" = ( /obj/machinery/vending/engineering{ req_access = list() }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hA" = ( /obj/item/stock_parts/computer/card_slot, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hB" = ( /obj/structure/cable{ icon_state = "1-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hC" = ( /obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2756,7 +2756,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2765,7 +2765,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "hG" = ( /obj/machinery/door/airlock{ @@ -2777,7 +2777,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2786,7 +2786,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hI" = ( /obj/random/coin, @@ -2796,7 +2796,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hJ" = ( /obj/machinery/door/airlock{ @@ -2808,7 +2808,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "hK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2830,7 +2830,6 @@ /obj/structure/table/reinforced, /obj/random/coin, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "SC BD" }, /turf/simulated/floor/tiled/airless, @@ -2867,7 +2866,7 @@ /obj/structure/cable/green{ icon_state = "0-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "hS" = ( /obj/structure/cable/green{ @@ -2937,7 +2936,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/slavers_base/dorms) "ib" = ( @@ -2956,19 +2955,19 @@ /obj/structure/closet/secure_closet/guncabinet, /obj/random/projectile, /obj/random/projectile, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "if" = ( /obj/structure/closet/secure_closet/guncabinet, /obj/random/projectile, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "ig" = ( /obj/random/coin, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "ih" = ( -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/demo) "ii" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -2988,23 +2987,23 @@ /area/slavers_base/demo) "il" = ( /obj/structure/ore_box, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "in" = ( /obj/structure/closet/crate, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "io" = ( /obj/structure/closet/crate, /obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "iq" = ( /obj/machinery/port_gen/pacman/super, /obj/structure/cable/green{ icon_state = "0-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "ir" = ( /obj/machinery/port_gen/pacman/super, @@ -3014,7 +3013,7 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "is" = ( /obj/machinery/port_gen/pacman/super, @@ -3025,13 +3024,13 @@ icon_state = "0-8" }, /obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "it" = ( /obj/structure/cable/green{ icon_state = "1-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) "iu" = ( /obj/structure/cable/green{ @@ -3119,7 +3118,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "iI" = ( /obj/effect/decal/cleanable/dirt, @@ -3198,8 +3197,8 @@ /area/slavers_base/dorms) "iR" = ( /obj/structure/table, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /obj/structure/cable{ icon_state = "4-8" }, @@ -3223,7 +3222,7 @@ /turf/simulated/floor/tiled, /area/slavers_base/dorms) "iU" = ( -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /obj/structure/cable{ icon_state = "4-8" }, @@ -3246,7 +3245,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "iX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3258,7 +3257,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "iY" = ( /obj/machinery/door/airlock{ @@ -3313,7 +3312,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/dorms) "jf" = ( /obj/structure/cable{ @@ -3333,13 +3332,13 @@ /area/slavers_base/dorms) "ji" = ( /obj/structure/table, -/obj/item/trash/plate, +/obj/item/plate, /obj/random/snack, /turf/simulated/floor/tiled, /area/slavers_base/dorms) "jj" = ( /obj/structure/table, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/slavers_base/dorms) "jk" = ( @@ -3375,7 +3374,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/dorms) "jq" = ( /obj/structure/table, @@ -3383,7 +3382,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/dorms) "jr" = ( /obj/structure/bed/chair{ @@ -3440,12 +3439,12 @@ /obj/machinery/power/terminal{ dir = 4 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/dorms) "jz" = ( /obj/structure/cable, /obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/dorms) "jA" = ( /obj/effect/decal/cleanable/blood, @@ -3766,98 +3765,98 @@ dir = 6 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kE" = ( /obj/machinery/door/airlock{ name = "Exchange area" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kF" = ( /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kH" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kI" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kJ" = ( /obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kK" = ( /obj/machinery/door/airlock{ name = "Exchange point" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kL" = ( /obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kM" = ( /obj/structure/table, /obj/item/radio/shortwave, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kN" = ( /obj/structure/table, /obj/random/handgun, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kO" = ( /obj/machinery/door/airlock/external, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kP" = ( /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kQ" = ( /obj/structure/table, /obj/random/junk, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kR" = ( /obj/structure/bed/chair{ dir = 1 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kS" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kT" = ( /obj/structure/table, /obj/random/loot, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kU" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 1; id_tag = "solar_port_pump" }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/maint) "kW" = ( /obj/effect/overmap/visitable/sector/slavers_base, @@ -3901,7 +3900,7 @@ dir = 4 }, /obj/abstract/landmark/allowed_leak, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/slavers_base/powatm) (1,1,1) = {" diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm index 45fbf96aa14..3551ef0e0b7 100644 --- a/maps/away/smugglers/smugglers.dmm +++ b/maps/away/smugglers/smugglers.dmm @@ -3,7 +3,7 @@ /turf/space, /area/space) "ab" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ac" = ( /turf/unsimulated/mask, @@ -20,13 +20,11 @@ /turf/simulated/wall/r_wall, /area/smugglers/base) "ag" = ( -/obj/machinery/door/airlock/external{ - icon_state = "door_closed" - }, +/obj/machinery/door/airlock/external, /turf/simulated/floor, /area/smugglers/base) "ah" = ( -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/space) "aj" = ( /obj/item/ammo_casing/pistol/magnum{ @@ -34,16 +32,16 @@ pixel_y = 5 }, /obj/item/ammo_casing/pistol/magnum, -/obj/item/shovel{ +/obj/item/tool/shovel{ pixel_x = 10; pixel_y = -5 }, /obj/effect/decal/cleanable/blood, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "ak" = ( /obj/effect/decal/cleanable/blood, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "al" = ( /obj/effect/wallframe_spawn/reinforced, @@ -59,7 +57,7 @@ }, /obj/effect/floor_decal/industrial/warning/full, /obj/item/beartrap{ - anchored = TRUE; + anchored = 1; deployed = 1; icon_state = "beartrap1" }, @@ -80,7 +78,6 @@ /area/space) "aq" = ( /obj/machinery/door/airlock/external{ - icon_state = "door_closed"; name = "Internal Airlock" }, /obj/machinery/atmospherics/pipe/simple/visible/black, @@ -100,7 +97,7 @@ pixel_y = 7 }, /obj/item/flashlight/flare/glowstick/yellow, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "av" = ( /obj/effect/decal/cleanable/blood/drip, @@ -252,7 +249,7 @@ /area/smugglers/base) "aJ" = ( /obj/item/beartrap{ - anchored = TRUE; + anchored = 1; deployed = 1; icon_state = "beartrap1" }, @@ -282,11 +279,11 @@ pixel_x = -25; pixel_y = 25 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "aM" = ( /obj/random/trash, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "aN" = ( /obj/machinery/light/small{ @@ -430,10 +427,10 @@ /turf/simulated/floor, /area/smugglers/base) "bg" = ( -/obj/item/pickaxe/xeno/hand{ +/obj/item/tool/xeno/hand{ pixel_x = -15 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "bh" = ( /obj/effect/floor_decal/industrial/warning{ @@ -477,7 +474,7 @@ /area/smugglers/base) "bn" = ( /obj/structure/boulder, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "bo" = ( /obj/item/stack/material/ore/silver, @@ -485,7 +482,7 @@ pixel_x = 10; pixel_y = -5 }, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "bp" = ( /obj/structure/cable{ @@ -826,7 +823,7 @@ /area/smugglers/dorms) "cj" = ( /obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/smugglers/dorms) "cl" = ( /obj/effect/decal/cleanable/dirt, @@ -857,13 +854,13 @@ "cp" = ( /obj/effect/decal/cleanable/vomit, /obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/smugglers/dorms) "cq" = ( /obj/structure/hygiene/toilet{ dir = 8 }, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/smugglers/dorms) "cr" = ( /obj/structure/bed/chair{ @@ -947,7 +944,7 @@ "db" = ( /obj/effect/decal/cleanable/blood, /obj/abstract/landmark/corpse/doctor, -/turf/simulated/floor/asteroid, +/turf/exterior/barren, /area/mine/explored) "eb" = ( /obj/machinery/light/small{ @@ -960,7 +957,7 @@ pixel_y = 30 }, /obj/random/soap, -/turf/simulated/floor/airless/ceiling, +/turf/simulated/floor/airless, /area/smugglers/dorms) (1,1,1) = {" diff --git a/maps/away/unishi/unishi-2.dmm b/maps/away/unishi/unishi-2.dmm index 8083742473d..e602566dfdd 100644 --- a/maps/away/unishi/unishi-2.dmm +++ b/maps/away/unishi/unishi-2.dmm @@ -593,7 +593,7 @@ /obj/structure/cable/yellow{ icon_state = "32-1" }, -/turf/simulated/open, +/turf/open, /area/unishi/common) "bO" = ( /obj/machinery/floodlight, @@ -897,7 +897,6 @@ /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /obj/structure/cable/yellow{ @@ -992,7 +991,6 @@ /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /turf/simulated/floor, @@ -1121,7 +1119,6 @@ "dk" = ( /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /obj/machinery/door/airlock/glass/research{ @@ -1183,7 +1180,6 @@ "ds" = ( /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /obj/effect/wingrille_spawn/reinforced, @@ -1432,7 +1428,7 @@ /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/ingot/mapped/silver/ten, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /turf/simulated/floor/tiled, /area/unishi/rnd) "eb" = ( @@ -2070,12 +2066,9 @@ /turf/simulated/wall/r_wall, /area/unishi/smresearch) "fM" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Biohazard"; name = "Biohazard Shutter"; - opacity = FALSE }, /obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2218,13 +2211,10 @@ /turf/simulated/floor, /area/unishi/smresearch) "gf" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; - opacity = FALSE }, /turf/simulated/floor, /area/unishi/smresearch) @@ -2349,13 +2339,10 @@ /turf/space, /area/space) "gx" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; - opacity = FALSE }, /obj/item/remains, /turf/simulated/floor, @@ -2743,13 +2730,10 @@ /turf/simulated/floor/reinforced/nitrogen/engine, /area/unishi/smresearch) "hp" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; - opacity = FALSE }, /obj/item/remains, /obj/random/shoes, diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm index 3156725ec11..49ebdbf1d77 100644 --- a/maps/away/unishi/unishi-3.dmm +++ b/maps/away/unishi/unishi-3.dmm @@ -357,7 +357,7 @@ dir = 8; icon_state = "railing0" }, -/turf/simulated/open, +/turf/open, /area/unishi/living) "bp" = ( /turf/simulated/floor/tiled, @@ -430,7 +430,7 @@ /obj/structure/cable{ icon_state = "32-1" }, -/turf/simulated/open, +/turf/open, /area/unishi/living) "bB" = ( /obj/structure/reagent_dispensers/fueltank, @@ -619,7 +619,7 @@ dir = 4 }, /obj/structure/window/reinforced{ - health = 1e+007 + current_health = 1e+007 }, /obj/random/medical, /obj/random/medical, @@ -930,7 +930,7 @@ /obj/structure/table/woodentable, /obj/item/board, /obj/item/book/manual/mass_spectrometry, -/obj/item/book/manual/stasis, +/obj/item/book/fluff/stasis, /turf/simulated/floor/tiled, /area/unishi/living) "cM" = ( @@ -1382,7 +1382,7 @@ /turf/simulated/floor/tiled, /area/unishi/living) "dT" = ( -/obj/item/trash/plate, +/obj/item/plate, /obj/machinery/light/small{ dir = 8 }, @@ -1442,7 +1442,7 @@ "eb" = ( /obj/structure/table/woodentable, /obj/item/poster, -/obj/item/haircomb/random, +/obj/item/grooming/comb/colorable/random, /obj/random/advdevice, /turf/simulated/floor/tiled, /area/unishi/living) @@ -1720,10 +1720,10 @@ /area/unishi/living) "eJ" = ( /obj/structure/table/woodentable, -/obj/item/haircomb/brush, -/obj/item/lipstick/black, -/obj/item/lipstick/green, -/obj/item/lipstick/violet, +/obj/item/grooming/brush, +/obj/item/cosmetics/lipstick/black, +/obj/item/cosmetics/lipstick/green, +/obj/item/cosmetics/lipstick/violet, /obj/random/drinkbottle, /turf/simulated/floor/wood, /area/unishi/living) @@ -2009,7 +2009,7 @@ /area/unishi/living) "XA" = ( /obj/structure/railing/mapped, -/turf/simulated/open, +/turf/open, /area/unishi/living) (1,1,1) = {" diff --git a/maps/away/unishi/unishi.dm b/maps/away/unishi/unishi.dm index 6dd30665b71..1f7f05fce38 100644 --- a/maps/away/unishi/unishi.dm +++ b/maps/away/unishi/unishi.dm @@ -28,7 +28,7 @@ /datum/map_template/ruin/away_site/unishi name = "University Ship" - description = "CTI research ship.." + description = "CTI research ship." suffixes = list("unishi/unishi-1.dmm", "unishi/unishi-2.dmm", "unishi/unishi-3.dmm") cost = 2 area_usage_test_exempted_root_areas = list(/area/unishi) diff --git a/maps/away/yacht/yacht.dmm b/maps/away/yacht/yacht.dmm index 0a78abc3746..11bd2aa5ad7 100644 --- a/maps/away/yacht/yacht.dmm +++ b/maps/away/yacht/yacht.dmm @@ -413,11 +413,11 @@ dir = 8 }, /obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "bm" = ( /obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "bn" = ( /obj/effect/spider/stickyweb, @@ -449,7 +449,7 @@ "bs" = ( /obj/item/inflatable_duck, /obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "bt" = ( /obj/machinery/light{ @@ -473,11 +473,11 @@ /turf/simulated/floor/carpet/purple, /area/yacht/living) "bx" = ( -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "by" = ( /mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "bz" = ( /obj/effect/decal/cleanable/dirt, @@ -553,7 +553,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/beach/water/ocean, +/turf/exterior/sand/water, /area/yacht/living) "bI" = ( /obj/machinery/light, @@ -938,7 +938,7 @@ dir = 1; level = 2 }, -/obj/item/shovel/spade, +/obj/item/tool/spade, /obj/item/chems/glass/bucket, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/yew, diff --git a/maps/chargen/chargen_areas.dm b/maps/chargen/chargen_areas.dm deleted file mode 100644 index 88df089c2df..00000000000 --- a/maps/chargen/chargen_areas.dm +++ /dev/null @@ -1,31 +0,0 @@ -/area/chargen - name = "\improper Colony Pod" - icon_state = "crew_quarters" - requires_power = FALSE - sound_env = SMALL_ENCLOSED - var/obj/abstract/landmark/chargen_spawn/chargen_landmark //Cached landmark for the current pod - var/static/chargen_area_counter = 0 - -//Clear an entire chargen pod from any random trash left -/area/chargen/proc/run_chargen_cleanup() - var/junkcounter = 0 - for(var/obj/item/junk in src) - junkcounter++ - if(!QDELETED(junk)) - qdel(junk) - log_debug("area/chargen/run_chargen_cleanup(): Cleared [junkcounter] junk item(s) from [src]!") - -/area/chargen/Initialize() - . = ..() - name = "[name] #[chargen_area_counter]" - chargen_area_counter++ - -/area/chargen/Destroy() - chargen_landmark = null - . = ..() - -//Don't test these areas, since they have special behaviors -/datum/map/New() - . = ..() - LAZYDISTINCTADD(area_purity_test_exempt_areas, /area/chargen) - LAZYDISTINCTADD(area_usage_test_exempted_areas, /area/chargen) diff --git a/maps/chargen/chargen_objects.dm b/maps/chargen/chargen_objects.dm index f5c23ad34dc..f524fe32f35 100644 --- a/maps/chargen/chargen_objects.dm +++ b/maps/chargen/chargen_objects.dm @@ -1,6 +1,10 @@ /obj/chargen anchored = TRUE +///////////////////////////////////////////////////////////////////// +// Fake Atmos +///////////////////////////////////////////////////////////////////// + /obj/chargen/supply_pipe name = "Air supply pipe" desc = "A length of pipe." @@ -27,18 +31,6 @@ density = TRUE layer = STRUCTURE_LAYER -/obj/chargen/airlock - name = "Secure Airlock" - desc = "It opens and closes." - icon = 'icons/obj/doors/secure/door.dmi' - icon_state = "closed" - opacity = TRUE - density = TRUE -/obj/chargen/airlock/Initialize() - . = ..() - if(!(/obj/chargen/airlock in global.wall_blend_objects)) - global.wall_blend_objects += /obj/chargen/airlock - /obj/chargen/pump name = "Colony Pod Vent Pump #1" desc = "Has a valve and pump attached to it." @@ -53,13 +45,30 @@ icon_state = "on" layer = ABOVE_TILE_LAYER +///////////////////////////////////////////////////////////////////// +// Fake Deco +///////////////////////////////////////////////////////////////////// + +/obj/chargen/airlock + name = "Secure Airlock" + desc = "It opens and closes." + icon = 'icons/obj/doors/secure/door.dmi' + icon_state = "closed" + opacity = TRUE + density = TRUE + +/obj/chargen/airlock/Initialize(mapload) + . = ..() + if(!(/obj/chargen/airlock in global.wall_blend_objects)) + global.wall_blend_objects += /obj/chargen/airlock + /obj/chargen/light name = "light fixture" desc = "A lighting fixture" icon = 'icons/obj/lighting.dmi' icon_state = "tube_map" -/obj/chargen/light/Initialize() +/obj/chargen/light/Initialize(mapload) . = ..() set_light(5, 0.9, LIGHT_COLOR_TUNGSTEN) @@ -70,114 +79,3 @@ icon_state = "nozzle" opacity = TRUE density = TRUE - -/obj/chargen/screen - name = "status display" - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" -/obj/chargen/screen/Initialize() - .=..() - set_light(2, 0.5, COLOR_WHITE) - update_icon() -/obj/chargen/screen/on_update_icon() - cut_overlays() - add_overlay(image('icons/obj/status_display.dmi', icon_state="ai_shipscan")) - -// -/obj/chargen/status_light - name = "launch clearance indicator" - desc = "Will light up green when you're cleared for launch." - icon = 'icons/obj/machines/door_timer.dmi' - icon_state = "doortimer1" - var/completed_chargen = FALSE - -/obj/chargen/status_light/Initialize() - . = ..() - update_icon() - -/obj/chargen/status_light/on_update_icon() - icon_state = "doortimer[completed_chargen? "2" : "1"]" - if(completed_chargen) - set_light(2, 0.5, COLOR_GREEN) - else - set_light(1, 0.3, COLOR_RED) - -//Indestructible walls -/turf/simulated/wall/chargen - name = "sturdy wall" - atom_flags = 0 - -/turf/simulated/wall/chargen/take_damage() - return -/turf/simulated/wall/chargen/update_damage() - return -/turf/simulated/wall/chargen/melt() - return -/turf/simulated/wall/chargen/dismantle_wall() - return -/turf/simulated/wall/chargen/explosion_act() - return -/turf/simulated/wall/chargen/rot() - return -/turf/simulated/wall/chargen/can_melt() - return FALSE -/turf/simulated/wall/chargen/burn(temperature) - return -/turf/simulated/wall/chargen/can_engrave() - return FALSE -/turf/simulated/wall/chargen/success_smash(mob/user) - return -/turf/simulated/wall/chargen/try_graffiti() - return -/turf/simulated/wall/chargen/attackby(obj/item/W, mob/user, click_params) - // Attack the wall with items - if(!W.force) - return TRUE - if(isliving(user)) - var/mob/living/L = user - if(L.a_intent == I_HELP) - return - - user.do_attack_animation(src) - visible_message(SPAN_DANGER("\The [user] [pick(W.attack_verb)] \the [src] with \the [W], but it had no effect!")) - playsound(src, hitsound, 25, 1) - return TRUE -/turf/simulated/wall/chargen/paint_wall(new_paint_color) - return -/turf/simulated/wall/chargen/stripe_wall(new_paint_color) - return - -// -//Wall types -// -/turf/simulated/wall/chargen/prepainted - paint_color = COLOR_WALL_GUNMETAL - stripe_color = COLOR_GUNMETAL - -/turf/simulated/wall/chargen/r_wall - icon_state = "reinforced_solid" - material = /decl/material/solid/metal/plasteel - reinf_material = /decl/material/solid/metal/plasteel - -/turf/simulated/wall/chargen/r_wall/prepainted - paint_color = COLOR_WALL_GUNMETAL - stripe_color = COLOR_GUNMETAL - -/turf/simulated/wall/chargen/r_wall/hull - name = "hull" - paint_color = COLOR_HULL - stripe_color = COLOR_HULL - -/turf/simulated/wall/chargen/titanium - color = COLOR_SILVER - material = /decl/material/solid/metal/titanium - -/turf/simulated/wall/chargen/r_titanium - icon_state = "reinforced_solid" - material = /decl/material/solid/metal/titanium - reinf_material = /decl/material/solid/metal/titanium - -/turf/simulated/wall/chargen/ocp_wall - color = COLOR_GUNMETAL - material = /decl/material/solid/metal/plasteel/ocp - reinf_material = /decl/material/solid/metal/plasteel/ocp diff --git a/maps/chargen/chargen_template.dm b/maps/chargen/chargen_template.dm new file mode 100644 index 00000000000..a92d7671f29 --- /dev/null +++ b/maps/chargen/chargen_template.dm @@ -0,0 +1,12 @@ +#include "chargen_objects.dm" +#include "chargen_turfs.dm" + +//////////////////////////////////////////////////////////////// +// Chargen Map Template +//////////////////////////////////////////////////////////////// +/** + Template for spawning chargen room prefabs in multiple rows and columns + */ +/datum/map_template/chargen/pods + name = "chargen pods" + chargen_prefab_path = "maps/chargen/chargen.dmm" diff --git a/maps/chargen/chargen_turfs.dm b/maps/chargen/chargen_turfs.dm new file mode 100644 index 00000000000..6b44bb75cd5 --- /dev/null +++ b/maps/chargen/chargen_turfs.dm @@ -0,0 +1,83 @@ +///////////////////////////////////////////////////////////// +//Indestructible walls +///////////////////////////////////////////////////////////// + +/turf/simulated/wall/chargen + name = "sturdy wall" + atom_flags = 0 + +/turf/simulated/wall/chargen/take_damage() + return +/turf/simulated/wall/chargen/update_damage() + return +/turf/simulated/wall/chargen/handle_melting() + SHOULD_CALL_PARENT(FALSE) + return +/turf/simulated/wall/chargen/dismantle_wall() + return +/turf/simulated/wall/chargen/explosion_act() + return +/turf/simulated/wall/chargen/rot() + return +/turf/simulated/wall/chargen/can_melt() + return FALSE +/turf/simulated/wall/chargen/burn(temperature) + return +/turf/simulated/wall/chargen/can_engrave() + return FALSE +/turf/simulated/wall/chargen/success_smash(mob/user) + return +/turf/simulated/wall/chargen/try_graffiti() + return +/turf/simulated/wall/chargen/attackby(obj/item/W, mob/user, click_params) + // Attack the wall with items + if(!W.force) + return TRUE + if(isliving(user)) + var/mob/living/L = user + if(L.a_intent == I_HELP) + return + + user.do_attack_animation(src) + visible_message(SPAN_DANGER("\The [user] [pick(W.attack_verb)] \the [src] with \the [W], but it had no effect!")) + playsound(src, hitsound, 25, 1) + return TRUE +/turf/simulated/wall/chargen/paint_wall(new_paint_color) + return +/turf/simulated/wall/chargen/stripe_wall(new_paint_color) + return + +///////////////////////////////////////////////////////////// +// Wall types +///////////////////////////////////////////////////////////// +/turf/simulated/wall/chargen/prepainted + paint_color = COLOR_WALL_GUNMETAL + stripe_color = COLOR_GUNMETAL + +/turf/simulated/wall/chargen/r_wall + icon_state = "reinforced_solid" + material = /decl/material/solid/metal/plasteel + reinf_material = /decl/material/solid/metal/plasteel + +/turf/simulated/wall/chargen/r_wall/prepainted + paint_color = COLOR_WALL_GUNMETAL + stripe_color = COLOR_GUNMETAL + +/turf/simulated/wall/chargen/r_wall/hull + name = "hull" + paint_color = COLOR_HULL + stripe_color = COLOR_HULL + +/turf/simulated/wall/chargen/titanium + color = COLOR_SILVER + material = /decl/material/solid/metal/titanium + +/turf/simulated/wall/chargen/r_titanium + icon_state = "reinforced_solid" + material = /decl/material/solid/metal/titanium + reinf_material = /decl/material/solid/metal/titanium + +/turf/simulated/wall/chargen/ocp_wall + color = COLOR_GUNMETAL + material = /decl/material/solid/metal/plasteel/ocp + reinf_material = /decl/material/solid/metal/plasteel/ocp diff --git a/maps/example/example-1.dmm b/maps/example/example-1.dmm index 338043f0280..f800c502d2d 100644 --- a/maps/example/example-1.dmm +++ b/maps/example/example-1.dmm @@ -77,11 +77,11 @@ /area/example/first) "dE" = ( /obj/structure/rack, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/stack/material/ingot/mapped/gold/ten, /obj/item/stack/material/segment/mapped/mhydrogen/ten, /obj/item/stack/material/ingot/mapped/silver/ten, @@ -195,7 +195,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/example/first) "kw" = ( -/obj/abstract/landmark/start, +/obj/abstract/landmark/latejoin, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -205,10 +205,6 @@ /obj/machinery/door/airlock/external/bolted{ id_tag = "lower_level_dock_hatch_internal" }, -/obj/machinery/button/access/interior{ - id_tag = "lower_level_dock"; - pixel_x = -21 - }, /turf/simulated/floor, /area/example/first) "lJ" = ( @@ -402,7 +398,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "lower_level_dock_sensor_chamber"; - pixel_x = -24 + pixel_x = -22; + dir = 4 }, /obj/machinery/embedded_controller/radio/airlock/docking_port{ id_tag = "lower_level_dock"; @@ -545,6 +542,14 @@ }, /turf/simulated/floor, /area/example/first) +"Ae" = ( +/obj/machinery/button/access/interior{ + id_tag = "lower_level_dock"; + pixel_x = -24; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/example/first) "AF" = ( /obj/effect/floor_decal/corner/orange{ dir = 10 @@ -693,7 +698,10 @@ }, /obj/machinery/button/access/exterior{ id_tag = "lower_level_dock"; - pixel_y = -21 + pixel_y = -24; + dir = 8; + pixel_x = -12; + directional_offset = null }, /turf/simulated/floor, /area/example/first) @@ -2501,7 +2509,7 @@ XZ tq ZV la -CU +Ae CU XZ mu diff --git a/maps/example/example-2.dmm b/maps/example/example-2.dmm index 4785364c620..7008c74e662 100644 --- a/maps/example/example-2.dmm +++ b/maps/example/example-2.dmm @@ -39,7 +39,7 @@ /area/example/second) "es" = ( /obj/machinery/light, -/turf/simulated/open, +/turf/open, /area/example/second) "fJ" = ( /obj/machinery/light/small{ @@ -143,7 +143,10 @@ }, /obj/machinery/button/access/exterior{ id_tag = "upper_level_dock"; - pixel_y = -21 + pixel_y = -24; + dir = 4; + pixel_x = 12; + directional_offset = null }, /turf/simulated/floor, /area/example/second) @@ -178,7 +181,7 @@ /area/example/second) "nB" = ( /obj/effect/shuttle_landmark/upper_level, -/turf/simulated/open, +/turf/open, /area/space) "nC" = ( /obj/effect/floor_decal/corner/mauve/mono, @@ -206,7 +209,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/example/second) "oS" = ( -/turf/simulated/open, +/turf/open, /area/space) "pc" = ( /obj/effect/wallframe_spawn/reinforced, @@ -231,7 +234,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "upper_level_dock_sensor_chamber"; - pixel_x = 24 + pixel_x = 22; + dir = 8 }, /obj/machinery/embedded_controller/radio/airlock/docking_port{ id_tag = "upper_level_dock"; @@ -310,8 +314,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/button/access/interior{ id_tag = "upper_level_dock"; - pixel_x = 22; - pixel_y = 28 + pixel_x = 24; + pixel_y = 24 }, /turf/simulated/floor/tiled/steel_grid, /area/example/second) @@ -329,8 +333,8 @@ /area/example/second) "ug" = ( /obj/abstract/level_data_spawner/main_level{ - name = "Example Second Deck"; -}, + name = "Example Second Deck" + }, /turf/space, /area/space) "uk" = ( @@ -355,13 +359,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/example/second) "wP" = ( -/turf/simulated/open, +/turf/open, /area/example/second) "xk" = ( /obj/machinery/light{ dir = 4 }, -/turf/simulated/open, +/turf/open, /area/example/second) "xs" = ( /turf/space, @@ -505,7 +509,7 @@ /area/example/second) "GG" = ( /obj/structure/railing/mapped, -/turf/simulated/open, +/turf/open, /area/example/second) "GP" = ( /obj/machinery/light{ @@ -581,7 +585,7 @@ /area/example/second) "NY" = ( /obj/structure/ladder, -/turf/simulated/open, +/turf/open, /area/example/second) "Pc" = ( /obj/effect/floor_decal/corner/orange{ @@ -605,11 +609,11 @@ /area/example/second) "QU" = ( /obj/structure/rack, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/stack/material/ingot/mapped/gold/ten, /obj/item/stack/material/segment/mapped/mhydrogen/ten, /obj/item/stack/material/ingot/mapped/silver/ten, @@ -651,7 +655,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/example/second) "VL" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/example/second) "Xm" = ( /obj/structure/iv_drip, @@ -665,7 +669,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/open, +/turf/open, /area/example/second) "XE" = ( /turf/simulated/wall/r_wall/prepainted, diff --git a/maps/example/example-3.dmm b/maps/example/example-3.dmm index 9a4f9d2dd89..f245656f85e 100644 --- a/maps/example/example-3.dmm +++ b/maps/example/example-3.dmm @@ -11,7 +11,7 @@ /turf/simulated/floor, /area/example/third) "cj" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/example/third) "cw" = ( /obj/machinery/atmospherics/portables_connector, @@ -61,7 +61,7 @@ /area/example/third) "jb" = ( /obj/machinery/light, -/turf/simulated/open, +/turf/open, /area/example/third) "lK" = ( /turf/simulated/floor/glass, @@ -71,7 +71,7 @@ /turf/simulated/floor, /area/example/third) "nG" = ( -/turf/simulated/open, +/turf/open, /area/space) "nN" = ( /obj/effect/floor_decal/industrial/warning/dust{ @@ -132,7 +132,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/open, +/turf/open, /area/example/third) "wD" = ( /obj/effect/floor_decal/industrial/warning/dust{ @@ -209,7 +209,7 @@ /turf/simulated/floor, /area/example/third) "Ke" = ( -/turf/simulated/open, +/turf/open, /area/example/third) "KS" = ( /obj/effect/floor_decal/industrial/warning/dust{ @@ -275,7 +275,7 @@ /area/example/third) "TM" = ( /obj/structure/catwalk, -/turf/simulated/open, +/turf/open, /area/example/third) "TO" = ( /obj/machinery/atmospherics/pipe/simple/hidden, @@ -286,7 +286,7 @@ /area/example/third) "UC" = ( /obj/structure/ladder, -/turf/simulated/open, +/turf/open, /area/example/third) "UM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ diff --git a/maps/example/example.dm b/maps/example/example.dm index 72a8676b951..955f65f1cf4 100644 --- a/maps/example/example.dm +++ b/maps/example/example.dm @@ -1,5 +1,9 @@ #if !defined(USING_MAP_DATUM) + #ifdef UNIT_TEST + #include "../../code/unit_tests/offset_tests.dm" + #endif + #include "example_areas.dm" #include "example_shuttles.dm" #include "example_departments.dm" diff --git a/maps/example/example_areas.dm b/maps/example/example_areas.dm index 2391adc3a8d..029ab553e01 100644 --- a/maps/example/example_areas.dm +++ b/maps/example/example_areas.dm @@ -35,7 +35,7 @@ arrival_sound = null lift_announce_str = null - base_turf = /turf/simulated/open + base_turf = /turf/open /area/turbolift/example/first name = "Testing Site First Floor Lift" diff --git a/maps/exodus/exodus-1.dmm b/maps/exodus/exodus-1.dmm index 33909743bb5..17f78a1646a 100644 --- a/maps/exodus/exodus-1.dmm +++ b/maps/exodus/exodus-1.dmm @@ -21,7 +21,7 @@ /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, /obj/structure/sign/warning/vacuum{ - dir = 4; + dir = 8; pixel_x = 32 }, /turf/simulated/floor/plating, @@ -50,8 +50,9 @@ /obj/machinery/button/access/interior{ id_tag = "sub_sec_airlock"; name = "interior access button"; - pixel_x = 25; - pixel_y = -25 + pixel_x = 20; + pixel_y = -25; + dir = 8 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/fore) @@ -71,16 +72,19 @@ }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "sub_sec_airlock"; - pixel_y = -25; + pixel_y = -22; tag_airpump = "sub_sec_pump"; tag_chamber_sensor = "sub_sec_sensor"; tag_exterior_door = "sub_sec_outer"; - tag_interior_door = "sub_sec_inner" + tag_interior_door = "sub_sec_inner"; + dir = 1; + pixel_x = -6 }, /obj/machinery/airlock_sensor{ id_tag = "sub_sec_sensor"; - pixel_x = 12; - pixel_y = -25 + pixel_x = 6; + pixel_y = -18; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/fore) @@ -97,8 +101,9 @@ /obj/machinery/button/access/exterior{ id_tag = "sub_sec_airlock"; name = "exterior access button"; - pixel_x = -25; - pixel_y = 25 + pixel_x = -20; + pixel_y = 25; + dir = 4 }, /turf/simulated/floor/airless, /area/exodus/maintenance/sub/fore) @@ -171,16 +176,22 @@ /turf/space, /area/exodus/maintenance/sub/fore) "aC" = ( -/obj/structure/sign/directions/security{ - dir = 1 +/obj/structure/sign/warning/lethal_turrets{ + dir = 4; + pixel_x = -34; + pixel_y = 32 }, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/maintenance/sub/fore) +/turf/space, +/area/space) "aD" = ( /obj/machinery/light{ dir = 8; icon_state = "tube1" }, +/obj/structure/sign/directions/security{ + dir = 1; + pixel_x = -32 + }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/fore) "aE" = ( @@ -927,9 +938,11 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/sub/central) "dd" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/maintenance/exterior) +/obj/structure/sign/warning/lethal_turrets{ + pixel_y = 32 + }, +/turf/space, +/area/space) "de" = ( /obj/machinery/alarm{ dir = 4; @@ -1100,7 +1113,8 @@ id_tag = "sub_cargo_airlock"; name = "exterior access button"; pixel_x = 25; - pixel_y = 25 + pixel_y = 25; + dir = 8 }, /turf/simulated/floor/airless, /area/exodus/maintenance/sub/port) @@ -1117,16 +1131,19 @@ }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "sub_cargo_airlock"; - pixel_y = -25; + pixel_y = -22; tag_airpump = "sub_cargo_pump"; tag_chamber_sensor = "sub_cargo_sensor"; tag_exterior_door = "sub_cargo_outer"; - tag_interior_door = "sub_cargo_inner" + tag_interior_door = "sub_cargo_inner"; + dir = 1; + pixel_x = -6 }, /obj/machinery/airlock_sensor{ id_tag = "sub_cargo_sensor"; - pixel_x = 12; - pixel_y = -25 + pixel_x = 6; + pixel_y = -18; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/port) @@ -1150,7 +1167,8 @@ id_tag = "sub_cargo_airlock"; name = "interior access button"; pixel_x = -25; - pixel_y = 25 + pixel_y = 25; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/port) @@ -1228,7 +1246,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/sign/warning/vacuum{ - dir = 8; + dir = 4; pixel_x = -32 }, /turf/simulated/floor/plating, @@ -1537,7 +1555,7 @@ /area/exodus/maintenance/sub/command) "eL" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/bluegrid, /area/exodus/maintenance/sub/command) @@ -1625,8 +1643,8 @@ /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, /obj/structure/sign/warning/vacuum{ - dir = 8; - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/starboard) @@ -1677,8 +1695,8 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/ladder, /obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = -22 + pixel_y = -20; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -1714,10 +1732,11 @@ icon_state = "0-2" }, /obj/structure/sign/warning/vacuum{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/structure/sign/warning/high_voltage{ - dir = 4; + dir = 8; pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1744,8 +1763,9 @@ /obj/machinery/button/access/exterior{ id_tag = "sub_research_airlock"; name = "exterior access button"; - pixel_x = 25; - pixel_y = 25 + pixel_x = 20; + pixel_y = 24; + dir = 8 }, /turf/simulated/floor/airless, /area/exodus/maintenance/sub/starboard) @@ -1762,16 +1782,19 @@ }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "sub_research_airlock"; - pixel_y = -25; + pixel_y = -22; tag_airpump = "sub_research_pump"; tag_chamber_sensor = "sub_research_sensor"; tag_exterior_door = "sub_research_outer"; - tag_interior_door = "sub_research_inner" + tag_interior_door = "sub_research_inner"; + dir = 1; + pixel_x = -6 }, /obj/machinery/airlock_sensor{ id_tag = "sub_research_sensor"; - pixel_x = 12; - pixel_y = -25 + pixel_x = 6; + pixel_y = -18; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/starboard) @@ -1789,8 +1812,9 @@ /obj/machinery/button/access/interior{ id_tag = "sub_research_airlock"; name = "interior access button"; - pixel_x = -25; - pixel_y = -25 + pixel_x = -20; + pixel_y = -24; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/starboard) @@ -1805,11 +1829,12 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/sub/starboard) "fo" = ( -/obj/structure/sign/directions/science{ - dir = 1 +/obj/structure/sign/warning/lethal_turrets{ + dir = 1; + pixel_y = -32 }, -/turf/simulated/wall/prepainted, -/area/exodus/maintenance/sub/starboard) +/turf/space, +/area/space) "fp" = ( /turf/space, /area/exodus/maintenance/sub/starboard) @@ -2123,7 +2148,6 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/sub/central) "gd" = ( -/obj/structure/sign/warning/lethal_turrets, /obj/structure/cable{ icon_state = "1-2" }, @@ -3471,7 +3495,8 @@ /obj/machinery/network/requests_console{ department = "Atmospherics"; name = "Atmos RC"; - pixel_y = 28 + pixel_y = 32; + dir = 1; }, /obj/structure/table/steel, /turf/simulated/floor/tiled/steel_grid, @@ -3520,7 +3545,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/atmos) @@ -4164,12 +4189,6 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/sub/aft) "lb" = ( -/obj/machinery/button/access/interior{ - id_tag = "sub_engineering_airlock"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25 - }, /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 }, @@ -4182,6 +4201,11 @@ /obj/machinery/door/airlock/external/bolted{ id_tag = "sub_engineering_inner" }, +/obj/machinery/button/access/interior{ + id_tag = "sub_engineering_airlock"; + name = "interior access button"; + pixel_y = 24 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/maintenance/sub/aft) "ld" = ( @@ -4191,16 +4215,18 @@ }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "sub_engineering_airlock"; - pixel_y = -25; + pixel_y = -22; tag_airpump = "sub_engineering_pump"; tag_chamber_sensor = "sub_engineering_sensor"; tag_exterior_door = "sub_engineering_outer"; - tag_interior_door = "sub_engineering_inner" + tag_interior_door = "sub_engineering_inner"; + dir = 1 }, /obj/machinery/airlock_sensor{ id_tag = "sub_engineering_sensor"; pixel_x = 12; - pixel_y = -25 + pixel_y = -18; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/maintenance/sub/aft) @@ -4208,15 +4234,14 @@ /obj/machinery/door/airlock/external/bolted{ id_tag = "sub_engineering_outer" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exodus/maintenance/sub/aft) -"lf" = ( /obj/machinery/button/access/exterior{ id_tag = "sub_engineering_airlock"; name = "exterior access button"; - pixel_x = -25; - pixel_y = 25 + pixel_y = 24 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exodus/maintenance/sub/aft) +"lf" = ( /turf/simulated/floor/airless, /area/exodus/maintenance/sub/aft) "lg" = ( @@ -4340,7 +4365,7 @@ /area/exodus/maintenance/sub/aft) "lw" = ( /obj/structure/sign/warning/vacuum{ - dir = 4; + dir = 8; pixel_x = 32 }, /obj/machinery/atmospherics/portables_connector{ @@ -5398,7 +5423,7 @@ "oE" = ( /obj/item/radio/intercom{ dir = 8; - pixel_x = 21 + pixel_x = 22 }, /turf/simulated/floor/tiled/dark, /area/exodus/maintenance/telecomms) @@ -5410,10 +5435,18 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_y = -32 + pixel_y = -29; + dir = 1 }, /turf/simulated/floor/tiled/dark, /area/exodus/maintenance/telecomms) +"pI" = ( +/obj/structure/sign/warning/lethal_turrets{ + pixel_y = 32; + pixel_x = 34 + }, +/turf/space, +/area/space) "qe" = ( /obj/machinery/light{ dir = 8 @@ -5440,6 +5473,18 @@ }, /turf/simulated/floor/bluegrid, /area/exodus/maintenance/telecomms) +"rK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/warning/lethal_turrets{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/airless, +/area/space) "rL" = ( /obj/item/stock_parts/subspace/analyzer, /obj/item/stock_parts/subspace/analyzer, @@ -5567,6 +5612,13 @@ /obj/structure/closet/toolcloset, /turf/simulated/floor/tiled/dark/monotile, /area/exodus/maintenance/telecomms) +"zy" = ( +/obj/structure/sign/warning/lethal_turrets{ + dir = 4; + pixel_x = -34 + }, +/turf/space, +/area/space) "zH" = ( /obj/structure/cable{ icon_state = "4-8" @@ -5622,8 +5674,8 @@ /area/exodus/maintenance/telecomms) "AE" = ( /obj/abstract/level_data_spawner/main_level{ - name = "Exodus Underlevel"; -}, + name = "Exodus Underlevel" + }, /turf/space, /area/space) "AG" = ( @@ -5694,7 +5746,7 @@ /obj/structure/rack, /obj/item/radio/intercom{ dir = 4; - pixel_x = -21 + pixel_x = -22 }, /turf/simulated/floor/tiled/monotile, /area/exodus/maintenance/telecomms) @@ -5724,6 +5776,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_grid, /area/exodus/maintenance/sub/aft) +"CW" = ( +/obj/structure/sign/warning/lethal_turrets{ + dir = 8; + pixel_x = 34 + }, +/turf/space, +/area/space) "Dm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -5842,7 +5901,7 @@ "LF" = ( /obj/item/radio/intercom{ dir = 4; - pixel_x = -21 + pixel_x = -22 }, /turf/simulated/floor/tiled/dark, /area/exodus/maintenance/telecomms) @@ -6016,11 +6075,12 @@ /area/exodus/maintenance/telecomms) "Se" = ( /obj/machinery/newscaster{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/item/radio/intercom{ dir = 4; - pixel_x = -21 + pixel_x = -22 }, /turf/simulated/floor/lino, /area/exodus/maintenance/telecomms) @@ -6097,6 +6157,13 @@ }, /turf/simulated/floor/tiled/dark, /area/exodus/maintenance/telecomms) +"Wa" = ( +/obj/structure/sign/directions/science{ + dir = 1; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exodus/maintenance/sub/starboard) "Xu" = ( /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/maintenance/sub/fore) @@ -31445,25 +31512,25 @@ aa aa aa aa -dd ab ab ab ab ab -dd ab ab ab ab ab -dd ab ab ab ab ab -dd +ab +ab +ab +ab aa cv eG @@ -31703,18 +31770,18 @@ aa aa aa ab -aa +aC aa ac aa ac -aa +zy aa aa ac aa aa -aa +zy aa aa aa @@ -32167,7 +32234,7 @@ ad ad Xu Xu -aC +ad ad aw am @@ -32212,7 +32279,7 @@ cv cv cv ac -dd +ab ab ab ab @@ -32470,7 +32537,7 @@ aa aa aa ab -aa +aC aa ac aa @@ -33261,8 +33328,8 @@ aa aa aa aa -aa -dd +fo +ab ac cv gm @@ -33494,7 +33561,7 @@ cv eG cv ac -dd +ab ab ab ac @@ -33752,7 +33819,7 @@ cS cv aa ab -aa +aC aa ac aa @@ -35036,8 +35103,8 @@ cL eG cv ac +ab dd -aa di di dn @@ -35060,7 +35127,7 @@ fI fV fV fV -fV +rK gd fV gk @@ -36322,7 +36389,7 @@ eG cv aa ab -aa +pI aa ac aa @@ -36578,7 +36645,7 @@ cv eG cv ac -dd +ab ab ab ac @@ -36859,8 +36926,8 @@ aa aa aa aa -aa -dd +fo +ab ac cv eG @@ -37610,7 +37677,7 @@ aa aa aa ab -aa +pI aa ac aa @@ -37866,7 +37933,7 @@ cv cv cv aa -dd +ab ab ab ab @@ -38385,18 +38452,18 @@ cv cv aa ab -aa +pI aa ac aa ac -aa +CW aa aa ac aa aa -aa +CW aa aa aa @@ -38641,25 +38708,25 @@ cw do cv aa -dd ab ab ab ab ab -dd ab ab ab ab ab -dd ab ab ab ab ab -dd +ab +ab +ab +ab aa cv eG @@ -55612,8 +55679,8 @@ aa aa ez ct -fo -NK +ch +Wa NK ch ct diff --git a/maps/exodus/exodus-2.dmm b/maps/exodus/exodus-2.dmm index 0345f854d1e..ac3ac6a36c4 100644 --- a/maps/exodus/exodus-2.dmm +++ b/maps/exodus/exodus-2.dmm @@ -240,7 +240,8 @@ /area/space) "aaK" = ( /obj/structure/sign/warning/airlock{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/air/airlock, @@ -456,7 +457,8 @@ /area/exodus/security/range) "abl" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -676,12 +678,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -722,11 +721,11 @@ /area/exodus/security/range) "abL" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/range) @@ -953,7 +952,8 @@ /obj/machinery/airlock_sensor{ id_tag = "brig_solar_sensor"; pixel_x = 12; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -988,7 +988,8 @@ id_tag = "brig_solar_airlock"; name = "interior access button"; pixel_x = -25; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1037,7 +1038,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/light/small/emergency{ dir = 1 @@ -1267,7 +1268,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/main) @@ -1277,7 +1279,7 @@ }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/table, /obj/item/megaphone, @@ -1354,7 +1356,7 @@ dir = 1 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/meeting) @@ -1975,7 +1977,8 @@ /obj/machinery/network/requests_console{ department = "Security"; name = "Security RC"; - pixel_x = 30 + pixel_x = 32; + dir = 4; }, /obj/effect/floor_decal/corner/red{ dir = 4 @@ -2483,7 +2486,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /obj/effect/floor_decal/corner/red, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/main) @@ -2796,12 +2799,9 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -3109,8 +3109,8 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/main) "agN" = ( -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/navbeacon/SecurityD, /obj/machinery/door/firedoor, @@ -3186,7 +3186,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/plating, /area/exodus/maintenance/security_starboard) @@ -3235,13 +3236,10 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /turf/simulated/floor/plating, /area/exodus/security/brig) @@ -3261,7 +3259,8 @@ announcementConsole = 1; department = "Head of Security's Desk"; name = "Head of Security RC"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /turf/simulated/floor/tiled/dark, /area/exodus/crew_quarters/heads/hos) @@ -3277,12 +3276,9 @@ /turf/simulated/floor/tiled/dark, /area/exodus/crew_quarters/heads/hos) "ahg" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -3312,13 +3308,10 @@ /area/exodus/security/brig/processing) "ahk" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "lawyer_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/security/brig) @@ -3389,7 +3382,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/alarm{ pixel_y = 22 @@ -3401,7 +3394,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/brig/processing) @@ -3641,12 +3634,10 @@ dir = 1 }, /obj/structure/window/reinforced/tinted{ - dir = 4; - icon_state = "twindow" + dir = 4 }, /obj/structure/window/reinforced/tinted{ - dir = 8; - icon_state = "twindow" + dir = 8 }, /obj/structure/grille, /obj/structure/cable/green{ @@ -3671,7 +3662,7 @@ c_tag = "Security - Interrogation" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/dark, /area/exodus/security/brig/interrogation) @@ -3904,12 +3895,10 @@ /area/exodus/security/brig/interrogation) "aiF" = ( /obj/structure/window/reinforced/tinted{ - dir = 4; - icon_state = "twindow" + dir = 4 }, /obj/structure/window/reinforced/tinted{ - dir = 8; - icon_state = "twindow" + dir = 8 }, /obj/structure/grille, /obj/structure/cable/green{ @@ -4089,7 +4078,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/brig/interrogation) @@ -4102,12 +4091,10 @@ "aja" = ( /obj/structure/window/reinforced/tinted, /obj/structure/window/reinforced/tinted{ - dir = 4; - icon_state = "twindow" + dir = 4 }, /obj/structure/window/reinforced/tinted{ - dir = 8; - icon_state = "twindow" + dir = 8 }, /obj/structure/grille, /obj/structure/cable/green, @@ -4125,13 +4112,10 @@ /area/exodus/security/brig/interrogation) "ajc" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "lawyer_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/lawoffice) @@ -4202,13 +4186,10 @@ "ajh" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -4303,13 +4284,10 @@ "ajp" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/structure/cable/green{ icon_state = "0-8" @@ -4318,13 +4296,10 @@ /area/exodus/security/prison) "ajq" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "brigobs"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -4341,13 +4316,10 @@ /area/exodus/security/brig/processing) "ajs" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "brigobs"; - name = "Security Blast Door"; - opacity = FALSE + name = "brigobs" }, /obj/structure/cable/green{ icon_state = "0-8" @@ -4370,12 +4342,9 @@ /area/exodus/security/main) "aju" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "brigobs"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/structure/cable/green, /obj/structure/cable/green{ @@ -4475,13 +4444,10 @@ /area/exodus/maintenance/evahallway) "ajG" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green{ icon_state = "0-2" @@ -4536,7 +4502,8 @@ dir = 4 }, /obj/machinery/newscaster{ - pixel_x = -30 + pixel_x = -30; + dir = 8 }, /obj/machinery/camera/network/security{ c_tag = "Security - HoS' Office"; @@ -4587,7 +4554,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/light, /turf/simulated/floor/tiled/dark, @@ -4672,7 +4639,7 @@ dir = 5 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/brig) @@ -4771,7 +4738,7 @@ "akg" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/light, /obj/machinery/light_switch{ @@ -4918,7 +4885,7 @@ dir = 5 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/brig) @@ -5091,7 +5058,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/brig) @@ -5173,7 +5140,7 @@ "akU" = ( /obj/structure/table/woodentable, /obj/item/ashtray/plastic, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /obj/item/clothing/gloves/forensic, /turf/simulated/floor/carpet, /area/exodus/security/detectives_office) @@ -5410,7 +5377,7 @@ "alo" = ( /obj/structure/rack, /obj/item/flame/lighter/random, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /obj/random/maintenance, /obj/random/maintenance, /turf/simulated/floor/plating, @@ -5467,7 +5434,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -5483,13 +5451,10 @@ /area/exodus/security/detectives_office) "alx" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green, /obj/structure/cable/green{ @@ -5677,7 +5642,8 @@ /area/exodus/security/brig/processing) "alT" = ( /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /turf/simulated/floor/lino, /area/exodus/security/detectives_office) @@ -5893,7 +5859,8 @@ /obj/machinery/button/blast_door{ id_tag = "lawyer_blast"; name = "Privacy Shutters"; - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/item/clipboard, /obj/item/hand_labeler, @@ -5931,13 +5898,10 @@ /area/exodus/security/lobby) "amw" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -5961,12 +5925,9 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/substation/security) "amy" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/airlock/atmos{ name = "Atmospherics Maintenance" @@ -6107,13 +6068,10 @@ /area/exodus/security/brig) "amO" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green, /obj/structure/disposalpipe/segment{ @@ -6223,7 +6181,8 @@ /obj/machinery/button/flasher{ id_tag = "permflash"; name = "Brig flashes"; - pixel_y = -27 + pixel_y = -27; + dir = 1 }, /obj/structure/cable/green{ icon_state = "1-4" @@ -6274,12 +6233,9 @@ "anc" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /turf/simulated/floor/plating, /area/exodus/security/prison) @@ -6316,13 +6272,10 @@ /area/exodus/security/brig) "ang" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "lawyer_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -6342,12 +6295,9 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/dormitory) "ani" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -6431,7 +6381,7 @@ /area/exodus/security/detectives_office) "anr" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/prison) @@ -6453,13 +6403,10 @@ "ant" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green, /turf/simulated/floor/plating, @@ -6516,12 +6463,9 @@ /area/exodus/security/prison) "any" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, @@ -6710,7 +6654,7 @@ pixel_x = 4; pixel_y = 6 }, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /turf/simulated/floor/tiled/dark, /area/exodus/lawoffice) "anU" = ( @@ -6808,7 +6752,8 @@ /obj/machinery/network/requests_console{ department = "Security"; name = "Security RC"; - pixel_x = 30 + pixel_x = 32; + dir = 4; }, /turf/simulated/floor/lino, /area/exodus/security/detectives_office) @@ -6845,7 +6790,8 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/exodus/lawoffice) @@ -7061,7 +7007,7 @@ /area/exodus/maintenance/auxsolarstarboard) "aoK" = ( /obj/machinery/faxmachine/mapped{ - anchored = FALSE; + anchored = 0 }, /obj/structure/table/reinforced, /obj/machinery/newscaster{ @@ -7218,7 +7164,8 @@ /obj/machinery/network/requests_console{ department = "Internal Affairs"; name = "Internal Affairs RC"; - pixel_x = 30 + pixel_x = 32; + dir = 4; }, /turf/simulated/floor/tiled/dark, /area/exodus/lawoffice) @@ -7316,6 +7263,10 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/engine_setup/empty_canister, +/obj/structure/sign/warning/radioactive{ + dir = 4; + pixel_x = -32 + }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) "apn" = ( @@ -7456,7 +7407,8 @@ dir = 1 }, /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ dir = 4; @@ -8005,20 +7957,17 @@ pixel_x = 4; pixel_y = 6 }, -/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/box/fancy/cigarettes/dromedaryco, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/exodus/lawoffice) "aqH" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "lawyer_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -8063,7 +8012,8 @@ /obj/machinery/airlock_sensor{ id_tag = "dorm_sensor"; pixel_x = 25; - pixel_y = -8 + pixel_y = -8; + dir = 8 }, /obj/effect/floor_decal/industrial/warning{ dir = 5 @@ -8182,7 +8132,8 @@ /obj/machinery/button/alternate/door{ id_tag = "visitdoor"; name = "Visitation Access"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -8331,7 +8282,7 @@ "arl" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/forensic/dnascanner, /obj/structure/disposalpipe/segment{ @@ -8371,7 +8322,8 @@ pixel_y = -25 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/structure/filing_cabinet, /turf/simulated/floor/tiled/dark, @@ -8381,7 +8333,8 @@ /obj/machinery/button/blast_door{ id_tag = "lawyer_blast"; name = "Privacy Shutters"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/item/pen/blue{ pixel_x = -5; @@ -8573,13 +8526,10 @@ /area/exodus/maintenance/library) "arL" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/structure/cable/green{ icon_state = "0-8" @@ -8605,12 +8555,9 @@ /turf/simulated/floor/wood, /area/exodus/maintenance/dormitory) "arO" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/security{ @@ -8623,12 +8570,9 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/hallway/primary/fore) "arP" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/security{ @@ -8655,7 +8599,8 @@ /area/exodus/maintenance/evahallway) "arS" = ( /obj/machinery/light_switch{ - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -8744,13 +8689,10 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/evahallway) "asc" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -8954,7 +8896,8 @@ dir = 1 }, /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ dir = 4; @@ -8990,7 +8933,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/steel_grid, @@ -9226,13 +9169,10 @@ "asY" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/green, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "visit_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/security/prison/dorm) @@ -9279,20 +9219,14 @@ /area/exodus/maintenance/evahallway) "ate" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Security Blast Door" }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "visit_blast"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /obj/structure/cable/green, /obj/structure/cable/green{ @@ -9301,11 +9235,12 @@ /turf/simulated/floor/plating, /area/exodus/security/prison/dorm) "atf" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/exodus/hallway/secondary/entry/fore) +/obj/structure/lattice, +/obj/structure/sign/warning/biohazard{ + pixel_y = 32 + }, +/turf/space, +/area/space) "atg" = ( /turf/simulated/wall/r_wall/prepainted, /area/exodus/security/prison/dorm) @@ -9509,7 +9444,8 @@ }, /obj/machinery/network/requests_console{ department = "Crew Quarters"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /turf/simulated/floor/tiled/white/monotile, /area/exodus/crew_quarters/sleep/cryo) @@ -9547,9 +9483,7 @@ /turf/simulated/floor/plating, /area/exodus/hallway/secondary/entry/pods) "atR" = ( -/obj/machinery/computer/cryopod{ - dir = 2 - }, +/obj/machinery/computer/cryopod, /obj/machinery/camera/network/civilian_east{ c_tag = "Dormitory Cryo Storage" }, @@ -9694,13 +9628,10 @@ /turf/simulated/floor/plating, /area/exodus/chapel/main) "aun" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -9776,7 +9707,8 @@ /area/exodus/hallway/primary/fore) "auw" = ( /obj/machinery/atm{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -9889,7 +9821,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "auK" = ( /obj/structure/disposalpipe/segment{ @@ -9991,9 +9923,7 @@ /area/exodus/hallway/primary/port) "auU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/computer/cryopod{ - dir = 2 - }, +/obj/machinery/computer/cryopod, /obj/machinery/light_switch{ pixel_x = -25; pixel_y = 24 @@ -10023,7 +9953,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/pods) "auX" = ( -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "auY" = ( /obj/structure/window/basic{ @@ -10032,7 +9962,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 4 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "auZ" = ( /obj/effect/floor_decal/corner/grey{ @@ -10125,13 +10055,10 @@ /area/exodus/maintenance/auxsolarport) "avj" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/machinery/door/firedoor, /obj/structure/cable/green{ @@ -10157,7 +10084,7 @@ /obj/machinery/status_display{ pixel_y = 32 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "avn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -10273,7 +10200,7 @@ /obj/machinery/cryopod, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/white/monotile, /area/exodus/crew_quarters/sleep/cryo) @@ -10581,7 +10508,7 @@ c_tag = "Arrivals Escape Pods" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -10638,13 +10565,10 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/prison/dorm) "awl" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = FALSE + name = "Secure Gate" }, /obj/machinery/door/firedoor, /obj/machinery/door/window/brigdoor/eastleft{ @@ -10692,9 +10616,14 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/prison) "awq" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/hallway/secondary/entry/fore) +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/structure/sign/warning/radioactive{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/exodus/engineering/engine_room) "awr" = ( /obj/machinery/seed_storage/garden{ dir = 1 @@ -10715,12 +10644,14 @@ "awu" = ( /obj/machinery/button/flasher{ id_tag = "IAflash"; - pixel_y = -30 + pixel_y = -30; + dir = 1 }, /obj/machinery/button/blast_door{ id_tag = "visit_blast"; name = "Privacy Shutters"; - pixel_x = 25 + pixel_x = 25; + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -10762,7 +10693,8 @@ /area/exodus/hallway/primary/fore) "awA" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/red{ dir = 6 @@ -10951,7 +10883,8 @@ id_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = -25; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -11057,7 +10990,7 @@ /area/exodus/hallway/primary/fore) "axg" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/camera/network/civilian_east{ c_tag = "Dormitories Central" @@ -11540,7 +11473,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/dark, /area/exodus/crew_quarters/sleep) @@ -11581,8 +11514,7 @@ /area/exodus/hallway/secondary/entry/pods) "ays" = ( /obj/structure/bed/chair/comfy/beige{ - dir = 1; - icon_state = "comfychair_preview" + dir = 1 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/steel_grid, @@ -11985,7 +11917,8 @@ "ayZ" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/sign/warning/airlock{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/fore) @@ -12167,7 +12100,8 @@ /area/exodus/hallway/secondary/entry/fore) "azr" = ( /obj/machinery/status_display{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/steel_grid, @@ -12436,7 +12370,7 @@ /obj/effect/floor_decal/corner/grey/three_quarters, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/crew_quarters/fitness) @@ -12543,8 +12477,9 @@ }, /obj/machinery/airlock_sensor{ id_tag = "admin_shuttle_dock_sensor"; - pixel_x = -30; - pixel_y = 8 + pixel_x = -20; + pixel_y = 8; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/hallway/secondary/entry/fore) @@ -12649,7 +12584,8 @@ /obj/machinery/airlock_sensor{ id_tag = "solar_tool_sensor"; pixel_x = 25; - pixel_y = 12 + pixel_y = 12; + dir = 8 }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ dir = 8; @@ -12717,7 +12653,8 @@ /area/exodus/gateway) "aAH" = ( /obj/structure/sign/warning/airlock{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/effect/floor_decal/industrial/outline/yellow, @@ -12863,7 +12800,8 @@ /area/exodus/crew_quarters/sleep) "aAU" = ( /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/undies_wardrobe, /obj/effect/floor_decal/corner/grey{ @@ -12990,7 +12928,8 @@ /area/exodus/crew_quarters/fitness) "aBi" = ( /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/closet/athletic_mixed, /obj/effect/floor_decal/corner/grey{ @@ -13014,7 +12953,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "aBm" = ( /obj/structure/disposalpipe/segment, @@ -13301,7 +13240,8 @@ "aBZ" = ( /obj/machinery/network/requests_console{ department = "EVA"; - pixel_x = -32 + pixel_x = -32; + dir = 8; }, /obj/machinery/light{ dir = 8 @@ -13372,7 +13312,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/monotile, /area/exodus/storage/primary) @@ -13642,7 +13582,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/dark/monotile, /area/exodus/gateway) @@ -13656,7 +13596,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/dark/monotile, /area/exodus/gateway) @@ -13703,7 +13643,7 @@ /area/exodus/ai_monitored/storage/eva) "aCW" = ( /obj/structure/table/reinforced, -/obj/item/stack/material/reinforced/mapped/plasteel{ +/obj/item/stack/material/sheet/reinforced/mapped/plasteel{ amount = 10 }, /obj/item/stack/material/sheet/mapped/steel{ @@ -13836,7 +13776,7 @@ }, /obj/structure/lattice, /turf/simulated/floor/plating, -/turf/simulated/open, +/turf/open, /area/exodus/engineering/sublevel_access) "aDl" = ( /obj/machinery/atmospherics/pipe/zpipe/down/red{ @@ -13844,7 +13784,7 @@ }, /obj/structure/lattice, /turf/simulated/floor/plating, -/turf/simulated/open, +/turf/open, /area/exodus/engineering/sublevel_access) "aDm" = ( /obj/structure/reagent_dispensers/beerkeg, @@ -14062,7 +14002,8 @@ /obj/structure/table, /obj/machinery/network/requests_console{ department = "Tool Storage"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/random/tech_supply, /obj/random/tech_supply, @@ -14448,13 +14389,10 @@ /area/exodus/hallway/secondary/entry/port) "aEA" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = FALSE + name = "Meeting Room Window Shutters" }, /obj/structure/cable/green{ icon_state = "0-2" @@ -14521,13 +14459,10 @@ /area/exodus/library) "aEG" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = FALSE + name = "Meeting Room Window Shutters" }, /obj/structure/cable/green{ icon_state = "0-2" @@ -14552,7 +14487,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/turf/simulated/open, +/turf/open, /area/exodus/engineering/sublevel_access) "aEI" = ( /obj/structure/shuttle/engine/propulsion/burst{ @@ -14562,13 +14497,10 @@ /area/shuttle/arrival/station) "aEK" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = FALSE + name = "Meeting Room Window Shutters" }, /obj/structure/cable/green, /obj/machinery/door/firedoor, @@ -14738,13 +14670,10 @@ /area/exodus/maintenance/disposal) "aFb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/door/airlock/research{ name = "Mech Bay" @@ -14976,13 +14905,10 @@ /area/exodus/security/nuke_storage) "aFz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/door/blast/shutters{ dir = 2; @@ -14999,7 +14925,8 @@ /area/exodus/gateway) "aFB" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -15022,6 +14949,9 @@ name = "Docking Port Airlock" }, /obj/machinery/shield_diffuser, +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/hallway/secondary/entry/fore) "aFE" = ( @@ -15060,10 +14990,12 @@ "aFH" = ( /obj/machinery/network/requests_console{ department = "Security"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/machinery/light{ dir = 1 @@ -15293,13 +15225,10 @@ /area/shuttle/arrival/station) "aGc" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/plating, /area/exodus/research/robotics) @@ -15332,13 +15261,10 @@ name = "Robotics Desk" }, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/plating, /area/exodus/research/robotics) @@ -15360,13 +15286,10 @@ "aGg" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/plating, /area/exodus/research/lab) @@ -15391,13 +15314,10 @@ name = "plastic table frame" }, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/plating, /area/exodus/research/lab) @@ -15512,9 +15432,7 @@ /obj/effect/floor_decal/corner/white{ dir = 5 }, -/obj/machinery/computer/cryopod{ - dir = 2 - }, +/obj/machinery/computer/cryopod, /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/arrival/station) "aGy" = ( @@ -15640,7 +15558,7 @@ /obj/item/dice/d20, /obj/item/dice, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/wood/walnut, /area/exodus/library) @@ -15650,13 +15568,10 @@ /area/exodus/gateway) "aGO" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "chemwindow"; - name = "Chemistry Window Shutters"; - opacity = FALSE + name = "Chemistry Window Shutters" }, /turf/simulated/floor/plating, /area/exodus/hallway/primary/central_two) @@ -15743,9 +15658,11 @@ /turf/simulated/floor/tiled/dark, /area/exodus/ai_monitored/storage/eva) "aGX" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/hallway/primary/starboard) +/obj/structure/sign/warning/docking_area{ + pixel_y = 32 + }, +/turf/space, +/area/space) "aGY" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -15799,7 +15716,8 @@ id_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 26; - pixel_y = -26 + pixel_y = -26; + dir = 1 }, /obj/effect/floor_decal/corner/white{ dir = 4 @@ -15870,7 +15788,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/dark, /area/exodus/security/checkpoint2) @@ -15901,7 +15819,8 @@ /area/exodus/crew_quarters/toilet) "aHm" = ( /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/tiled/freezer, /area/exodus/crew_quarters/toilet) @@ -15971,7 +15890,7 @@ "aHv" = ( /obj/structure/closet/wardrobe/chaplain_black, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/lino, /area/exodus/chapel/office) @@ -15990,7 +15909,8 @@ }, /obj/machinery/network/requests_console{ department = "Chapel"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/lino, @@ -16000,13 +15920,10 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "chapel"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /turf/simulated/floor/tiled/dark, /area/exodus/chapel/office) @@ -16403,7 +16320,7 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/starboard) @@ -16475,7 +16392,8 @@ /area/shuttle/arrival/station) "aIl" = ( /obj/structure/sign/warning/secure_area{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -16547,7 +16465,8 @@ /obj/machinery/button/access/exterior{ id_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /obj/machinery/door/airlock/research{ autoclose = 0; @@ -16803,8 +16722,8 @@ /area/exodus/crew_quarters/toilet) "aJb" = ( /obj/machinery/navbeacon/Bar, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading{ @@ -16823,8 +16742,8 @@ /turf/simulated/floor/tiled/dark/monotile, /area/exodus/gateway) "aJd" = ( -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/navbeacon/Kitchen, /obj/machinery/door/firedoor, @@ -16858,7 +16777,7 @@ pixel_x = -2; pixel_y = 5 }, -/obj/item/storage/fancy/crayons, +/obj/item/storage/box/fancy/crayons, /turf/simulated/floor/lino, /area/exodus/chapel/office) "aJk" = ( @@ -17528,7 +17447,8 @@ /area/exodus/hallway/primary/central_two) "aKI" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/machinery/light{ dir = 4 @@ -17606,7 +17526,7 @@ c_tag = "Bar North" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/light{ dir = 1 @@ -17642,7 +17562,8 @@ /obj/machinery/network/requests_console{ department = "Bar"; name = "Bar RC"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/machinery/vending/boozeomat, /turf/simulated/floor/lino, @@ -17667,8 +17588,8 @@ /area/exodus/maintenance/locker) "aKW" = ( /obj/machinery/navbeacon/Hydroponics, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading, @@ -17677,7 +17598,8 @@ "aKX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/button/crematorium{ - pixel_x = 25 + pixel_x = 25; + dir = 8 }, /obj/machinery/light/small{ dir = 4 @@ -17755,12 +17677,9 @@ "aLg" = ( /obj/structure/closet/coffin, /obj/machinery/door/blast/shutters{ - density = FALSE; dir = 2; - icon_state = "shutter0"; id_tag = "chapel"; - name = "Privacy Shutters"; - opacity = FALSE + name = "Privacy Shutters" }, /obj/machinery/door/window/westleft{ name = "Coffin Storage" @@ -17808,7 +17727,8 @@ /area/exodus/chapel/main) "aLo" = ( /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 30; + dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -17821,7 +17741,7 @@ }, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/dark, /area/exodus/hydroponics) @@ -18115,9 +18035,13 @@ id_tag = "escape_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; - pixel_y = -26 + pixel_y = -26; + dir = 1 }, /obj/machinery/shield_diffuser, +/obj/structure/sign/warning/docking_area{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/hallway/secondary/exit) "aLX" = ( @@ -18228,7 +18152,7 @@ icon_state = "4-8" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/effect/floor_decal/corner/blue{ dir = 5 @@ -18966,6 +18890,10 @@ pixel_y = 26 }, /obj/machinery/shield_diffuser, +/obj/structure/sign/warning/docking_area{ + dir = 1; + pixel_y = -32 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/hallway/secondary/exit) "aNN" = ( @@ -18974,7 +18902,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/ai_monitored/storage/eva) @@ -18999,7 +18928,7 @@ icon_state = "4-8" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/effect/floor_decal/corner/lime{ dir = 5 @@ -19165,7 +19094,6 @@ /obj/structure/table/woodentable, /obj/item/chems/food/chips, /obj/random/single{ - icon_state = "cola"; name = "randomly spawned cola"; spawn_object = /obj/item/chems/drinks/cans/cola }, @@ -19443,7 +19371,8 @@ /area/exodus/chapel/office) "aOH" = ( /obj/machinery/newscaster{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -19989,13 +19918,10 @@ /turf/simulated/floor/lino, /area/exodus/crew_quarters/bar) "aPL" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -20081,7 +20007,8 @@ /area/exodus/hydroponics) "aPX" = ( /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/effect/floor_decal/corner/lime{ dir = 6 @@ -20106,7 +20033,7 @@ name = "Prisoner's Locker" }, /obj/item/flame/lighter/zippo, -/obj/item/storage/fancy/cigarettes, +/obj/item/storage/box/fancy/cigarettes, /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/prison/dorm) "aQb" = ( @@ -20176,11 +20103,10 @@ /area/exodus/maintenance/arrivals) "aQj" = ( /obj/structure/table/woodentable, -/obj/item/storage/fancy/cigarettes{ +/obj/item/storage/box/fancy/cigarettes{ pixel_y = 2 }, /obj/random/single{ - icon_state = "lighter-g"; name = "randomly spawned lighter"; spawn_object = /obj/item/flame/lighter }, @@ -20215,19 +20141,17 @@ /area/exodus/security/prison/dorm) "aQo" = ( /obj/structure/sign/warning/airlock{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/exit) "aQp" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 8; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -20242,7 +20166,7 @@ /obj/structure/closet/emcloset, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/monotile, /area/exodus/hallway/primary/port) @@ -20462,11 +20386,13 @@ /turf/simulated/floor/wood/walnut, /area/exodus/library) "aQU" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/docking_area, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/exodus/hallway/secondary/exit) +/obj/effect/floor_decal/corner/purple/full, +/obj/structure/sign/warning/secure_area{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/exodus/hallway/primary/starboard) "aQV" = ( /obj/item/chems/glass/bucket, /obj/effect/floor_decal/corner/lime{ @@ -20599,7 +20525,8 @@ dir = 8 }, /obj/machinery/button/windowtint{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for the research doors."; @@ -20678,13 +20605,10 @@ "aRt" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "acute1"; - name = "EMT Storage Privacy Shutters"; - opacity = FALSE + name = "EMT Storage Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/sleeper) @@ -20740,12 +20664,10 @@ }, /obj/structure/window/reinforced/tinted, /obj/structure/window/reinforced/tinted{ - dir = 4; - icon_state = "twindow" + dir = 4 }, /obj/structure/window/reinforced/tinted{ - dir = 8; - icon_state = "twindow" + dir = 8 }, /turf/simulated/floor/plating, /area/exodus/chapel/main) @@ -20777,7 +20699,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -20816,8 +20738,7 @@ /area/exodus/hallway/secondary/entry/port) "aRJ" = ( /obj/structure/bed/chair/comfy/beige{ - dir = 1; - icon_state = "comfychair_preview" + dir = 1 }, /turf/simulated/floor/lino, /area/exodus/hallway/secondary/entry/starboard) @@ -20939,13 +20860,10 @@ /area/exodus/hallway/secondary/exit) "aSa" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay3) @@ -20957,25 +20875,19 @@ /area/exodus/hallway/primary/central_two) "aSc" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay) "aSd" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay2) @@ -21051,13 +20963,10 @@ /area/exodus/library) "aSk" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay) @@ -21103,25 +21012,19 @@ /area/exodus/chapel/main) "aSp" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay2) "aSq" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 0; - icon_state = "shutter0"; id_tag = "staffroom"; - name = "Staff Room Privacy Shutters"; - opacity = FALSE + name = "Staff Room Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/cryo) @@ -21203,13 +21106,10 @@ /area/exodus/hallway/primary/port) "aSA" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "staffroom"; - name = "Staff Room Privacy Shutters"; - opacity = FALSE + name = "Staff Room Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay2) @@ -21261,7 +21161,8 @@ /area/exodus/maintenance/auxsolarport) "aSF" = ( /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -21297,7 +21198,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/port) @@ -21466,18 +21367,15 @@ icon_state = "left"; name = "Research Division Delivery" }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/research) @@ -21485,13 +21383,10 @@ /turf/simulated/wall/prepainted, /area/exodus/hydroponics/garden) "aTf" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -21694,7 +21589,8 @@ /area/exodus/storage/tech) "aTy" = ( /obj/machinery/atm{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/effect/floor_decal/corner/lime{ dir = 6 @@ -21748,26 +21644,20 @@ /area/exodus/research/mixing) "aTH" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/exodus/medical/medbay4) "aTI" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "cmooffice"; - name = "CMO Office Privacy Shutters"; - opacity = FALSE + name = "CMO Office Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay4) @@ -21884,26 +21774,20 @@ /turf/simulated/floor/wood/walnut, /area/exodus/crew_quarters/bar) "aTY" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = FALSE + name = "misclab" }, /obj/effect/wallframe_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/exodus/research/misc_lab) "aTZ" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = FALSE + name = "misclab" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -21950,13 +21834,10 @@ /area/exodus/crew_quarters/bar) "aUg" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "scanhideside"; - name = "Diagnostics Room Privacy Shutters"; - opacity = FALSE + name = "Diagnostics Room Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/medbay4) @@ -22049,7 +21930,7 @@ c_tag = "Kitchen" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/light{ dir = 1 @@ -22266,7 +22147,8 @@ /area/exodus/chapel/main) "aUT" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, @@ -22276,7 +22158,8 @@ dir = 8 }, /obj/machinery/vending/wallmed1{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /turf/simulated/floor/wood/walnut, /area/exodus/crew_quarters/bar) @@ -22303,7 +22186,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/random/tech_supply, /obj/random/tech_supply, @@ -22591,7 +22474,8 @@ pixel_y = 28 }, /obj/structure/closet/hydrant{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/storage/emergency2) @@ -23107,26 +22991,20 @@ /area/exodus/crew_quarters/heads/chief) "aWW" = ( /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research) "aWX" = ( /obj/machinery/light, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research) @@ -23141,8 +23019,8 @@ /area/exodus/storage/art) "aWZ" = ( /obj/structure/table, -/obj/item/storage/fancy/crayons, -/obj/item/storage/fancy/crayons, +/obj/item/storage/box/fancy/crayons, +/obj/item/storage/box/fancy/crayons, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -23160,13 +23038,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research) @@ -23187,7 +23062,8 @@ /area/exodus/turret_protected/ai_upload) "aXd" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/storage/tools) @@ -23304,7 +23180,8 @@ /area/exodus/storage/emergency2) "aXs" = ( /obj/machinery/status_display{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -23352,13 +23229,10 @@ /turf/simulated/floor/plating, /area/exodus/medical/patient_c) "aXx" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -23368,13 +23242,10 @@ /area/exodus/research) "aXy" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/door/airlock/research{ name = "Toxins Launch Room Access" @@ -23389,8 +23260,8 @@ /area/exodus/research/mixing) "aXz" = ( /obj/structure/table/woodentable, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/wood/walnut, /area/exodus/crew_quarters/bar) "aXA" = ( @@ -23466,13 +23337,10 @@ /area/exodus/maintenance/substation/medical) "aXL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/machinery/door/airlock/research{ name = "Toxins Launch Room" @@ -23515,7 +23383,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/bridge) @@ -23546,7 +23414,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/bridge) @@ -23634,13 +23502,10 @@ /area/exodus/turret_protected/ai_upload) "aYe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "chemcounter"; - name = "Pharmacy Counter Shutters"; - opacity = FALSE + name = "Pharmacy Counter Shutters" }, /obj/structure/table/reinforced, /obj/machinery/door/window/westright{ @@ -23676,7 +23541,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "nuke_shuttle_dock_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -23804,7 +23670,8 @@ /area/exodus/security/vacantoffice) "aYy" = ( /obj/machinery/atm{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/machinery/camera/network/civilian_east{ c_tag = "Bar West"; @@ -23862,7 +23729,8 @@ /obj/structure/closet/wardrobe/grey, /obj/machinery/network/requests_console{ department = "Locker Room"; - pixel_x = -32 + pixel_x = -32; + dir = 8; }, /turf/simulated/floor/tiled/monotile, /area/exodus/crew_quarters/locker) @@ -23917,13 +23785,10 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology/xenoflora_storage) @@ -24009,7 +23874,8 @@ dir = 4 }, /obj/machinery/newscaster{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -24054,7 +23920,8 @@ announcementConsole = 1; department = "Bridge"; name = "Bridge RC"; - pixel_y = -30 + pixel_y = -32; + dir = 2; }, /obj/structure/cable/green{ icon_state = "4-8" @@ -24201,7 +24068,8 @@ /area/exodus/hallway/primary/central_one) "aZi" = ( /obj/structure/sign/warning/secure_area{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/machinery/door/blast/regular/open{ dir = 4; @@ -24277,13 +24145,10 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology/xenoflora) @@ -24497,13 +24362,10 @@ /area/exodus/construction) "aZS" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "surgeryobs"; - name = "Operating Theatre Privacy Shutters"; - opacity = FALSE + name = "Operating Theatre Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/surgeryobs) @@ -25070,7 +24932,7 @@ "bbc" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -25109,12 +24971,12 @@ /area/exodus/hallway/primary/starboard) "bbg" = ( /obj/structure/table/woodentable, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/wood/walnut, /area/exodus/crew_quarters/bar) "bbh" = ( @@ -25322,7 +25184,8 @@ dir = 4 }, /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/exodus/security/vacantoffice) @@ -25476,7 +25339,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/dark, /area/exodus/security/vacantoffice) @@ -25520,7 +25383,7 @@ /obj/structure/cable/green{ icon_state = "0-4" }, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /obj/effect/floor_decal/corner/blue/three_quarters, /turf/simulated/floor/tiled/steel_grid, /area/exodus/bridge) @@ -25557,13 +25420,10 @@ /area/exodus/bridge) "bce" = ( /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research/xenobiology) @@ -25619,13 +25479,10 @@ /area/exodus/bridge) "bck" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "surgeryobs"; - name = "Operating Theatre Privacy Shutters"; - opacity = FALSE + name = "Operating Theatre Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/surgery) @@ -25736,13 +25593,10 @@ /area/exodus/hallway/primary/starboard) "bcx" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "surgeryobs2"; - name = "Operating Theatre Privacy Shutters"; - opacity = FALSE + name = "Operating Theatre Privacy Shutters" }, /turf/simulated/floor/plating, /area/exodus/medical/surgery2) @@ -26244,6 +26098,10 @@ id_tag = "admin_shuttle_dock_inner"; name = "Docking Port Airlock" }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/hallway/secondary/entry/fore) "bdz" = ( @@ -26374,7 +26232,7 @@ /obj/structure/cable/green{ icon_state = "0-4" }, -/obj/item/storage/fancy/cigarettes{ +/obj/item/storage/box/fancy/cigarettes{ pixel_y = 2 }, /turf/simulated/floor/tiled/dark/monotile, @@ -26436,7 +26294,7 @@ dir = 4; id_tag = "packageSort2" }, -/obj/structure/plasticflaps, +/obj/structure/flaps, /turf/simulated/floor/plating, /area/exodus/quartermaster/office) "bdU" = ( @@ -26601,7 +26459,8 @@ /area/exodus/security/vacantoffice) "bet" = ( /obj/machinery/newscaster{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/structure/table{ name = "plastic table frame" @@ -26641,7 +26500,9 @@ /turf/simulated/floor/carpet, /area/exodus/bridge/meeting_room) "bey" = ( -/obj/machinery/vending/coffee, +/obj/machinery/vending/coffee{ + dir = 1 + }, /turf/simulated/floor/wood/walnut, /area/exodus/library) "bez" = ( @@ -26650,7 +26511,7 @@ /obj/item/storage/box, /obj/item/storage/box, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/effect/floor_decal/corner/white{ dir = 4 @@ -26829,7 +26690,8 @@ /area/exodus/hallway/primary/central_two) "beU" = ( /obj/machinery/atm{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -26877,7 +26739,8 @@ /area/exodus/hydroponics/garden) "beZ" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /obj/structure/flora/pottedplant{ icon_state = "plant-22" @@ -26918,7 +26781,8 @@ "bfc" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -7; - pixel_y = -32 + pixel_y = -29; + dir = 1 }, /obj/effect/floor_decal/corner/white{ dir = 8 @@ -26926,7 +26790,8 @@ /obj/effect/floor_decal/corner/red, /obj/machinery/vending/wallmed1{ pixel_x = 7; - pixel_y = -32 + pixel_y = -24; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/exit) @@ -26965,7 +26830,8 @@ /obj/machinery/network/requests_console{ department = "Kitchen"; name = "Kitchen RC"; - pixel_y = -30 + pixel_y = -32; + dir = 2; }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -27211,7 +27077,7 @@ /area/exodus/crew_quarters/captain) "bfK" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/effect/floor_decal/corner/lime{ dir = 5 @@ -27272,7 +27138,8 @@ /area/exodus/hallway/primary/starboard) "bfR" = ( /obj/machinery/status_display{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /obj/machinery/light{ dir = 8 @@ -27364,7 +27231,8 @@ /obj/machinery/button/mass_driver{ id_tag = "enginecore"; name = "Emergency Core Eject"; - pixel_x = -20 + pixel_x = -20; + dir = 4 }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/window/basic{ @@ -27377,13 +27245,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "Containment Blast Doors" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -27423,7 +27288,8 @@ /obj/item/stack/package_wrap/fifty, /obj/machinery/network/requests_console{ department = "Cargo Bay"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/effect/floor_decal/corner/white{ dir = 4 @@ -27460,7 +27326,8 @@ "bgn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/status_display{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /obj/machinery/light{ dir = 8 @@ -27747,7 +27614,7 @@ }, /obj/structure/sign/directions/medical{ dir = 8; - pixel_y = 32 + pixel_y = 40 }, /obj/effect/floor_decal/corner/lime{ dir = 5 @@ -27773,7 +27640,8 @@ /area/exodus/turret_protected/ai) "bgY" = ( /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -27876,11 +27744,11 @@ icon_state = "0-4" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/item/radio/intercom{ dir = 4; @@ -27899,7 +27767,8 @@ /area/exodus/hallway/primary/starboard) "bhn" = ( /obj/structure/sign/warning/airlock{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/effect/floor_decal/corner/white{ dir = 8 @@ -27931,7 +27800,8 @@ "bhq" = ( /obj/machinery/airlock_sensor{ id_tag = "escape_dock_north_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/hallway/secondary/exit) @@ -27946,7 +27816,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "centcom_shuttle_dock_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 4; @@ -28230,7 +28101,7 @@ /area/exodus/turret_protected/ai) "bhU" = ( /obj/structure/table/woodentable, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -28784,8 +28655,8 @@ }, /obj/machinery/network/requests_console{ department = "AI"; - pixel_x = -32; - pixel_y = 32 + pixel_y = 32; + dir = 1; }, /obj/structure/cable/cyan{ icon_state = "0-2" @@ -28806,7 +28677,7 @@ pixel_y = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/abstract/landmark/start/ai, /turf/simulated/floor/bluegrid, @@ -28840,10 +28711,10 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/radio/intercom{ dir = 8; @@ -28870,7 +28741,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -28997,7 +28868,8 @@ /area/exodus/security/prison/dorm) "bjs" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29032,7 +28904,7 @@ "bjv" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -29124,7 +28996,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/carpet, /area/exodus/bridge/meeting_room) @@ -29202,7 +29074,8 @@ /area/exodus/bridge/meeting_room) "bjN" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -29311,7 +29184,8 @@ /area/exodus/turret_protected/ai) "bjZ" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -29394,7 +29268,8 @@ /area/exodus/hallway/secondary/exit) "bkh" = ( /obj/machinery/newscaster{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/effect/floor_decal/corner/white{ dir = 8 @@ -29701,7 +29576,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/wood/walnut, /area/exodus/bridge/meeting_room) @@ -29762,7 +29638,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -29816,13 +29693,10 @@ /area/exodus/research/docking) "bkV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, @@ -29845,13 +29719,10 @@ "bkX" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, @@ -29932,7 +29803,8 @@ /area/exodus/quartermaster/storage) "blg" = ( /obj/structure/sign/warning/secure_area{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/effect/floor_decal/corner/lime/full, /obj/effect/floor_decal/industrial/loading{ @@ -30005,7 +29877,8 @@ announcementConsole = 1; department = "Bridge"; name = "Bridge RC"; - pixel_y = -30 + pixel_y = -32; + dir = 2; }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30014,7 +29887,7 @@ /area/exodus/bridge/meeting_room) "blt" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/carpet, /area/exodus/crew_quarters/captain) @@ -30227,7 +30100,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "specops_dock_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 4; @@ -30260,7 +30134,7 @@ /area/exodus/medical/chemistry) "blX" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 30 + pixel_y = 29 }, /obj/machinery/camera/network/medbay{ c_tag = "Medbay - Chemistry" @@ -30451,13 +30325,10 @@ /area/exodus/medical/genetics) "bmq" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "Containment Blast Doors" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -30616,7 +30487,7 @@ dir = 4 }, /obj/structure/table/woodentable, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /turf/simulated/floor/wood/walnut, /area/exodus/bridge/meeting_room) "bmF" = ( @@ -30708,7 +30579,8 @@ announcementConsole = 1; department = "Captain's Desk"; name = "Captain RC"; - pixel_x = -30 + pixel_x = -32; + dir = 8; }, /obj/structure/filing_cabinet, /turf/simulated/floor/wood/walnut, @@ -30853,7 +30725,8 @@ pixel_y = 25 }, /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/structure/table{ name = "plastic table frame" @@ -30879,7 +30752,8 @@ /obj/machinery/network/requests_console{ department = "Robotics"; name = "Robotics RC"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/machinery/light{ dir = 1 @@ -30896,7 +30770,7 @@ }, /obj/item/chems/glass/beaker/sulphuric, /obj/structure/reagent_dispensers/acid{ - density = FALSE; + density = 0; pixel_y = 32 }, /turf/simulated/floor/tiled/white/monotile, @@ -30913,13 +30787,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "Containment Blast Doors" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -30932,13 +30803,14 @@ dir = 8 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/reception) "bnm" = ( /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 30; + dir = 4 }, /obj/structure/flora/pottedplant{ icon_state = "plant-10" @@ -30947,7 +30819,7 @@ dir = 1 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/reception) @@ -31112,7 +30984,8 @@ /area/exodus/quartermaster/office) "bnB" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/blue{ dir = 6 @@ -31162,7 +31035,7 @@ "bnF" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -31567,13 +31440,13 @@ /area/exodus/research/robotics) "boJ" = ( /obj/structure/table/steel_reinforced, -/obj/item/stack/material/reinforced/mapped/plasteel{ +/obj/item/stack/material/sheet/reinforced/mapped/plasteel{ amount = 10 }, -/obj/item/stack/material/reinforced/mapped/plasteel{ +/obj/item/stack/material/sheet/reinforced/mapped/plasteel{ amount = 10 }, -/obj/item/stack/material/reinforced/mapped/plasteel{ +/obj/item/stack/material/sheet/reinforced/mapped/plasteel{ amount = 10 }, /obj/item/stack/material/panel/mapped/plastic{ @@ -31584,7 +31457,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) @@ -31617,7 +31490,8 @@ "boN" = ( /obj/structure/filing_cabinet/chestdrawer, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/purple{ dir = 5 @@ -31650,7 +31524,8 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/extinguisher_cabinet{ - pixel_x = -25 + pixel_x = -29; + dir = 4 }, /obj/machinery/cell_charger, /turf/simulated/floor/tiled/white, @@ -31735,7 +31610,7 @@ /obj/structure/table/steel_reinforced, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) @@ -31758,7 +31633,8 @@ /area/exodus/hallway/secondary/entry/aft) "bpa" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/lime{ dir = 6 @@ -31807,7 +31683,8 @@ }, /obj/machinery/network/requests_console{ department = "Cargo Bay"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel_grid, @@ -32037,7 +31914,8 @@ /area/exodus/maintenance/substation/command) "bpE" = ( /obj/structure/closet/hydrant{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/structure/cable{ icon_state = "1-2" @@ -32147,7 +32025,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/wood/walnut, /area/exodus/crew_quarters/captain) @@ -32177,7 +32056,8 @@ /area/exodus/medical/chemistry) "bpR" = ( /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/green{ icon_state = "1-4" @@ -32253,13 +32133,10 @@ /area/exodus/medical/patient_wing/washroom) "bpX" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "Containment Blast Doors" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -32300,7 +32177,7 @@ dir = 6 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/office) @@ -32515,7 +32392,8 @@ /obj/item/clothing/suit/armor/captain, /obj/item/clothing/head/helmet/space/capspace, /obj/machinery/newscaster{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /obj/random_multi/single_item/captains_spare_id, /turf/simulated/floor/wood/walnut, @@ -32586,7 +32464,8 @@ /area/exodus/maintenance/locker) "bqH" = ( /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -32829,7 +32708,8 @@ dir = 4 }, /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/machinery/porta_turret{ dir = 8 @@ -32919,13 +32799,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "Containment Blast Doors" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -32978,8 +32855,8 @@ dir = 4; id_tag = "packageExternal" }, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/structure/cable{ icon_state = "4-8" @@ -33231,13 +33108,10 @@ /area/exodus/medical/reception) "brW" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio1" }, /obj/structure/cable/green{ icon_state = "0-4" @@ -33245,13 +33119,11 @@ /turf/simulated/floor/plating, /area/exodus/research/xenobiology) "brX" = ( -/obj/structure/closet/secure_closet/medical_wall{ - name = "Pill Cabinet"; - pixel_y = -32 +/obj/structure/closet/secure_closet/medical_wall/pills{ + pixel_y = -32; + dir = 1 }, /obj/item/chems/syringe/antibiotic, -/obj/item/storage/pill_bottle/antitoxins, -/obj/item/storage/pill_bottle/painkillers, /obj/structure/table{ name = "plastic table frame" }, @@ -33542,7 +33414,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -33909,7 +33781,8 @@ dir = 8 }, /obj/machinery/vending/wallmed1{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/exodus/research) @@ -33959,7 +33832,7 @@ "btA" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/table/woodentable, /obj/item/deck/cards{ @@ -34000,7 +33873,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/white, /area/exodus/research/xenobiology) @@ -34036,7 +33909,8 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/structure/sign/warning/airlock{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/research/docking) @@ -34175,7 +34049,7 @@ "btW" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -34185,7 +34059,8 @@ "btX" = ( /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -34235,7 +34110,8 @@ }, /obj/machinery/recharge_station, /obj/structure/extinguisher_cabinet{ - pixel_y = -29 + pixel_y = -29; + dir = 1 }, /turf/simulated/floor/tiled/dark, /area/exodus/research/chargebay) @@ -34251,7 +34127,7 @@ /turf/simulated/floor/tiled/white, /area/exodus/research/robotics) "bug" = ( -/obj/item/stack/material/reinforced/mapped/plasteel{ +/obj/item/stack/material/sheet/reinforced/mapped/plasteel{ amount = 10 }, /obj/item/stack/cable_coil, @@ -34306,9 +34182,12 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/primary/starboard) "bun" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/research) +/obj/structure/sign/warning/docking_area{ + dir = 8; + pixel_x = 32 + }, +/turf/space, +/area/space) "buo" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -34333,7 +34212,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/white, /area/exodus/research/xenobiology) @@ -34442,7 +34321,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/white, /area/exodus/research/xenobiology) @@ -34850,7 +34729,7 @@ "bvi" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/dark, /area/exodus/turret_protected/ai_upload) @@ -34878,13 +34757,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/medical/chemistry) "bvl" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayrecquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -34895,13 +34771,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/reception) "bvm" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayrecquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, @@ -34938,7 +34811,8 @@ }, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -34965,13 +34839,10 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/incinerator) "bvt" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayrecquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/structure/cable/green{ icon_state = "2-8" @@ -34980,13 +34851,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/reception) "bvu" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "medbayrecquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/structure/cable/green{ icon_state = "4-8" @@ -35005,7 +34873,8 @@ pixel_y = 5 }, /obj/machinery/light_switch{ - pixel_x = -23 + pixel_x = -23; + dir = 4 }, /obj/random/firstaid{ pixel_y = 1 @@ -35047,9 +34916,9 @@ "bvA" = ( /obj/effect/floor_decal/corner/paleblue, /obj/structure/table, -/obj/item/mmi, -/obj/item/mmi, -/obj/item/mmi, +/obj/item/organ/internal/brain_interface/empty, +/obj/item/organ/internal/brain_interface/empty, +/obj/item/organ/internal/brain_interface/empty, /turf/simulated/floor/tiled/dark, /area/exodus/research/robotics) "bvB" = ( @@ -35095,13 +34964,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techfloor/grid, @@ -35221,25 +35087,19 @@ /obj/effect/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment, /obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio4" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology) "bvX" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio4" }, /obj/structure/cable/green, /turf/simulated/floor/plating, @@ -35261,13 +35121,10 @@ /area/exodus/hallway/secondary/entry/fore) "bvZ" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio5"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio5" }, /obj/structure/disposalpipe/segment, /obj/structure/cable/green, @@ -35275,13 +35132,10 @@ /area/exodus/research/xenobiology) "bwa" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio5"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio5" }, /obj/structure/cable/green, /turf/simulated/floor/plating, @@ -35365,13 +35219,10 @@ /obj/effect/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment, /obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio6"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio6" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology) @@ -35399,13 +35250,10 @@ "bwq" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio6"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio6" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology) @@ -35470,13 +35318,13 @@ pixel_x = 24 }, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" + }, +/obj/structure/sign/warning/secure_area{ + pixel_y = 32 }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research) @@ -35648,7 +35496,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/carpet, /area/exodus/crew_quarters/captain) @@ -35670,7 +35518,7 @@ c_tag = "Medbay Fore Starboard Corridor" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay2) @@ -36073,7 +35921,8 @@ /obj/machinery/network/requests_console{ department = "Science"; name = "Science Requests Console"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/structure/table{ name = "plastic table frame" @@ -36086,7 +35935,7 @@ /obj/item/stack/material/sheet/mapped/steel{ amount = 50 }, -/obj/item/stack/material/shiny/mapped/aluminium, +/obj/item/stack/material/sheet/shiny/mapped/aluminium, /obj/item/clothing/glasses/welding, /turf/simulated/floor/tiled/white, /area/exodus/research/lab) @@ -36185,7 +36034,8 @@ "bxY" = ( /obj/machinery/fabricator, /obj/machinery/light_switch{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/office) @@ -36731,7 +36581,7 @@ /obj/item/flash/synthetic, /obj/item/flash/synthetic, /obj/item/flash/synthetic, -/obj/item/organ/internal/posibrain, +/obj/item/organ/internal/brain/robotic, /obj/item/robotanalyzer, /obj/effect/floor_decal/corner/paleblue{ dir = 10 @@ -36866,7 +36716,8 @@ "bzv" = ( /obj/machinery/network/requests_console{ department = "Cargo Bay"; - pixel_x = -30 + pixel_x = -32; + dir = 8; }, /obj/machinery/camera/network/civilian_west{ c_tag = "Cargo Office"; @@ -36880,7 +36731,7 @@ pixel_y = 3 }, /obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, /obj/item/multitool, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/office) @@ -36913,7 +36764,7 @@ /obj/structure/table, /obj/item/storage/firstaid/surgery, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/dark, /area/exodus/research/robotics) @@ -36988,7 +36839,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/closet/secure_closet/RD, +/obj/structure/closet/secure_closet/research_director, /obj/item/paper/monitorkey, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/heads/hor) @@ -37068,7 +36919,7 @@ /area/exodus/turret_protected/ai_upload_foyer) "bzQ" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/teleport/hub, /turf/simulated/floor/tiled/dark/monotile, @@ -37146,7 +36997,8 @@ /area/exodus/teleporter) "bAa" = ( /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -37612,7 +37464,8 @@ /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, /obj/machinery/light_switch{ - pixel_x = 25 + pixel_x = 25; + dir = 8 }, /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -37620,13 +37473,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/research/robotics) "bAP" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = FALSE + name = "EngineBlast" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -37762,12 +37612,9 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/security/prison/dorm) "bBb" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = FALSE + name = "Engine Monitoring Room Blast Doors" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -37985,7 +37832,8 @@ }, /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/medbreak) @@ -38161,9 +38009,7 @@ /turf/simulated/floor/tiled/white, /area/exodus/medical/chemistry) "bBV" = ( -/obj/machinery/computer/modular/telescreen/preset/generic{ - dir = 2 - }, +/obj/machinery/computer/modular/telescreen/preset/generic, /obj/effect/floor_decal/corner/lime{ dir = 5 }, @@ -38234,7 +38080,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/office) @@ -38258,7 +38104,8 @@ dir = 9 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay2) @@ -38314,13 +38161,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/research) "bCl" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "researchlockdown"; - name = "Research Division Blast Doors"; - opacity = FALSE + name = "researchlockdown" }, /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -38392,7 +38236,8 @@ "bCt" = ( /obj/machinery/light_switch{ pixel_x = -23; - pixel_y = -23 + pixel_y = -23; + dir = 4 }, /obj/structure/cable/green{ icon_state = "2-8" @@ -38466,11 +38311,11 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) "bCA" = ( @@ -38524,7 +38369,7 @@ /obj/structure/table/steel_reinforced, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) @@ -38555,8 +38400,8 @@ /area/exodus/turret_protected/ai_server_room) "bCL" = ( /obj/machinery/navbeacon/Research, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading{ @@ -38719,7 +38564,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/wrench, /obj/machinery/camera/network/medbay{ @@ -38915,7 +38760,8 @@ /obj/item/clothing/accessory/stethoscope, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/machinery/camera/network/medbay{ c_tag = "Medbay Equipment Storage"; @@ -38947,11 +38793,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/storage/primary) "bDv" = ( -/obj/structure/closet/secure_closet/medical_wall{ - name = "Pill Cabinet" - }, -/obj/item/storage/pill_bottle/antitoxins, -/obj/item/storage/pill_bottle/painkillers, +/obj/structure/closet/secure_closet/medical_wall/pills, /obj/item/chems/syringe/antibiotic, /obj/item/chems/syringe/antibiotic, /obj/item/chems/syringe/stabilizer, @@ -38998,7 +38840,7 @@ /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/plating, /area/exodus/medical/genetics/cloning) @@ -39088,7 +38930,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/storage) @@ -39332,7 +39174,8 @@ id_tag = "QMLoad" }, /obj/machinery/status_display/supply_display{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/storage) @@ -39379,18 +39222,6 @@ "bEn" = ( /turf/simulated/wall/prepainted, /area/exodus/maintenance/research_shuttle) -"bEo" = ( -/obj/machinery/button/access/exterior{ - id_tag = "toxin_test_airlock"; - name = "exterior access button"; - pixel_x = -20; - pixel_y = -20 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/exodus/research/test_area) "bEp" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ @@ -39448,7 +39279,8 @@ /area/exodus/quartermaster/office) "bEu" = ( /obj/machinery/atm{ - pixel_x = -28 + pixel_x = -28; + dir = 4 }, /obj/effect/floor_decal/corner/brown{ dir = 9 @@ -39484,7 +39316,8 @@ announcementConsole = 1; department = "Head of Personnel's Desk"; name = "Head of Personnel RC"; - pixel_y = -30 + pixel_y = -32; + dir = 2; }, /obj/machinery/camera/network/command{ c_tag = "Bridge - HoP's Office"; @@ -39497,7 +39330,7 @@ dir = 5 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay3) @@ -39508,7 +39341,8 @@ /area/exodus/crew_quarters/heads/hop) "bEB" = ( /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/machinery/light{ dir = 4 @@ -39581,13 +39415,10 @@ /turf/simulated/floor/tiled/steel_grid, /area/exodus/teleporter) "bEJ" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 8; - icon_state = "shutter0"; id_tag = "medbayquar"; - name = "Medbay Emergency Quarantine Shutters"; - opacity = FALSE + name = "Medbay Emergency Quarantine Shutters" }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading{ @@ -39990,7 +39821,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/cable{ icon_state = "4-8" @@ -40025,7 +39856,7 @@ "bFF" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/janitor) @@ -40281,7 +40112,8 @@ tag_airpump = "tox_airlock_pump"; tag_chamber_sensor = "tox_airlock_sensor"; tag_exterior_door = "tox_airlock_exterior"; - tag_interior_door = "tox_airlock_interior" + tag_interior_door = "tox_airlock_interior"; + dir = 4 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -40557,7 +40389,7 @@ }, /obj/machinery/door/firedoor, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -40589,7 +40421,8 @@ /obj/machinery/network/requests_console{ department = "Medbay"; name = "Medbay RC"; - pixel_y = 30 + pixel_y = 32; + dir = 1; }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -40961,13 +40794,10 @@ "bHr" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology/xenoflora) @@ -41012,7 +40842,8 @@ "bHx" = ( /obj/machinery/airlock_sensor{ id_tag = "research_dock_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 1; @@ -41109,8 +40940,8 @@ "bHE" = ( /obj/machinery/network/requests_console{ department = "Cargo Bay"; - pixel_x = -30; - pixel_y = 32 + pixel_y = 32; + dir = 1; }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/steel_grid, @@ -41124,7 +40955,7 @@ preset_channels = list("Research","Miscellaneous Reseach") }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/reinforced, /area/exodus/research/misc_lab) @@ -41323,7 +41154,8 @@ "bHY" = ( /obj/machinery/disposal, /obj/structure/sign/warning/airlock{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/structure/disposalpipe/trunk, /obj/effect/floor_decal/industrial/warning/corner, @@ -41350,13 +41182,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor/grid, @@ -41416,13 +41245,10 @@ /area/exodus/hallway/primary/central_two) "bIh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "acute1"; - name = "EMT Storage Privacy Shutters"; - opacity = FALSE + name = "EMT Storage Privacy Shutters" }, /obj/effect/floor_decal/corner/paleblue{ dir = 10 @@ -41431,16 +41257,14 @@ /area/exodus/medical/sleeper) "bIi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "acute1"; - name = "EMT Storage Privacy Shutters"; - opacity = FALSE + name = "EMT Storage Privacy Shutters" }, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 22; + dir = 8 }, /obj/effect/floor_decal/corner/paleblue{ dir = 10 @@ -41633,7 +41457,8 @@ /area/exodus/research/docking) "bIC" = ( /obj/machinery/light_switch{ - pixel_x = -22 + pixel_x = -22; + dir = 4 }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/sleeper{ @@ -41849,7 +41674,8 @@ /obj/item/pen, /obj/machinery/network/requests_console{ department = "Cargo Bay"; - pixel_x = -30 + pixel_x = -32; + dir = 8; }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/miningdock) @@ -41863,10 +41689,10 @@ /obj/structure/rack{ dir = 1 }, -/obj/item/pickaxe{ +/obj/item/tool/pickaxe{ pixel_x = 5 }, -/obj/item/shovel{ +/obj/item/tool/shovel{ pixel_x = -5 }, /turf/simulated/floor/tiled/steel_grid, @@ -42387,7 +42213,8 @@ "bJX" = ( /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/machinery/constructable_frame/machine_frame, /obj/item/shard, @@ -42430,7 +42257,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/window/westleft{ name = "Server Room"; - opacity = TRUE + opacity = 1 }, /obj/machinery/door/window/eastleft{ name = "Server Room" @@ -42626,7 +42453,8 @@ }, /obj/effect/floor_decal/industrial/warning, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/machinery/network/relay, /turf/simulated/floor/tiled/steel_grid, @@ -42735,7 +42563,7 @@ "bKL" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -42775,7 +42603,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -42831,7 +42659,7 @@ "bKW" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/lime{ dir = 10 @@ -43171,7 +42999,8 @@ /area/exodus/research/storage) "bLL" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/research/storage) @@ -43238,7 +43067,8 @@ /area/exodus/maintenance/atmos_control) "bLQ" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/effect/floor_decal/corner/purple{ dir = 8 @@ -43252,7 +43082,7 @@ /obj/item/stool/padded, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/sleeper) @@ -43275,9 +43105,7 @@ /obj/effect/floor_decal/corner/purple/diagonal{ dir = 4 }, -/obj/machinery/keycard_auth{ - dir = 2 - }, +/obj/machinery/keycard_auth, /obj/machinery/computer/modular/preset/civilian, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/heads/hor) @@ -43339,7 +43167,8 @@ pixel_y = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/heads/hor) @@ -43580,7 +43409,7 @@ /obj/random/medical, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/item/stack/tape_roll/barricade_tape/medical, /turf/simulated/floor/tiled/white, @@ -43605,7 +43434,8 @@ /obj/machinery/button/blast_door{ id_tag = "acutesep"; name = "Acute Separation Shutters"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/abstract/landmark/start{ name = "Paramedic" @@ -43673,7 +43503,7 @@ /obj/structure/cable/green{ icon_state = "0-2" }, -/obj/structure/closet/secure_closet/CMO, +/obj/structure/closet/secure_closet/cmo, /obj/item/clothing/mask/gas, /obj/item/clothing/accessory/stethoscope, /obj/item/storage/belt/medical, @@ -43693,7 +43523,8 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 22; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay2) @@ -43719,7 +43550,8 @@ /obj/machinery/button/blast_door{ id_tag = "staffroom"; name = "Staff Room Shutters Control"; - pixel_x = -26 + pixel_x = -26; + dir = 4 }, /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, @@ -43783,7 +43615,7 @@ dir = 1 }, /obj/structure/bookcase/manuals/medical, -/obj/item/book/manual/stasis, +/obj/item/book/fluff/stasis, /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/medbreak) @@ -44284,20 +44116,17 @@ /area/exodus/janitor) "bNY" = ( /obj/machinery/navbeacon/Janitor, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/exodus/janitor) "bNZ" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "acutesep"; - name = "Acute Separation Shutters"; - opacity = FALSE + name = "Acute Separation Shutters" }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/corner/paleblue{ @@ -44522,7 +44351,7 @@ dir = 1 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/research/mixing) @@ -45160,8 +44989,8 @@ announcementConsole = 1; department = "Chief Medical Officer's Desk"; name = "Chief Medical Officer RC"; - pixel_x = -34; - pixel_y = 2 + pixel_x = -32; + dir = 8; }, /obj/machinery/camera/network/medbay{ c_tag = "Medbay - CMO's Office"; @@ -45193,7 +45022,8 @@ "bPK" = ( /obj/structure/disposalpipe/segment, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 30; + dir = 4 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -45202,7 +45032,8 @@ /area/exodus/medical/medbay2) "bPL" = ( /obj/machinery/light_switch{ - pixel_x = -22 + pixel_x = -22; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -45376,7 +45207,8 @@ /obj/machinery/network/requests_console{ department = "Science"; name = "Science Requests Console"; - pixel_x = 30 + pixel_x = 32; + dir = 4; }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, @@ -45429,7 +45261,7 @@ }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/research/mixing) @@ -45560,7 +45392,8 @@ }, /obj/item/multitool, /obj/machinery/status_display{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /obj/structure/table/steel, /obj/item/scanner/plant, @@ -45680,7 +45513,8 @@ /obj/item/grenade/chem_grenade/cleaner, /obj/machinery/network/requests_console{ department = "Janitorial"; - pixel_y = -29 + pixel_y = -32; + dir = 2; }, /obj/item/chems/spray/cleaner, /obj/structure/table/steel, @@ -45790,7 +45624,8 @@ /obj/item/chems/ivbag/blood/ominus, /obj/structure/closet/secure_closet/medical_wall{ name = "O- Blood Locker"; - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/effect/floor_decal/corner/pink{ dir = 9 @@ -45811,13 +45646,10 @@ /obj/machinery/door/firedoor{ dir = 4 }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "acute2"; - name = "Acute Privacy Shutters"; - opacity = FALSE + name = "Acute Privacy Shutters" }, /obj/effect/floor_decal/corner/pink{ dir = 9 @@ -46468,7 +46300,7 @@ /obj/machinery/papershredder, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/heads/cmo) @@ -46541,7 +46373,7 @@ /obj/effect/floor_decal/corner/grey/diagonal, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/medbreak) @@ -46584,7 +46416,7 @@ /obj/effect/floor_decal/corner/grey/diagonal, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/white, /area/exodus/crew_quarters/medbreak) @@ -46680,7 +46512,8 @@ }, /obj/machinery/network/requests_console{ department = "Tech storage"; - pixel_x = 28 + pixel_x = 32; + dir = 4; }, /turf/simulated/floor/plating, /area/exodus/storage/tech) @@ -46712,14 +46545,13 @@ /area/exodus/research/storage) "bSJ" = ( /obj/structure/bed/chair/comfy/teal{ - dir = 8; - icon_state = "comfychair_preview" + dir = 8 }, /obj/effect/floor_decal/corner/paleblue{ dir = 5 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay4) @@ -46810,7 +46642,8 @@ dir = 1 }, /obj/structure/sign/warning/secure_area{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/research/mixing) @@ -46966,7 +46799,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/effect/floor_decal/corner/yellow{ dir = 9 @@ -46989,13 +46823,10 @@ /turf/simulated/wall/r_wall/prepainted, /area/exodus/storage/tech) "bTs" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "scanhide"; - name = "Diagnostics Room Separation Shutters"; - opacity = FALSE + name = "Diagnostics Room Separation Shutters" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/sleeper) @@ -47007,31 +46838,26 @@ /turf/simulated/floor/tiled/white, /area/exodus/research) "bTu" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "scanhide"; - name = "Diagnostics Room Separation Shutters"; - opacity = FALSE + name = "Diagnostics Room Separation Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/sleeper) "bTw" = ( /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/plating, /area/exodus/storage/tech) "bTx" = ( -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 2; - icon_state = "shutter0"; id_tag = "scanhide"; - name = "Diagnostics Room Separation Shutters"; - opacity = FALSE + name = "Diagnostics Room Separation Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor/grid, @@ -47211,7 +47037,7 @@ /area/exodus/maintenance/medbay) "bTP" = ( /obj/machinery/shieldwallgen{ - anchored = TRUE + anchored = 1 }, /obj/structure/cable/green{ icon_state = "0-2" @@ -47254,13 +47080,10 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/medbay) "bTS" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = FALSE + name = "misclab" }, /obj/machinery/door/window/southright{ name = "Test Chamber" @@ -47289,13 +47112,10 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/medbay) "bTU" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = FALSE + name = "misclab" }, /obj/machinery/door/window/southleft{ name = "Test Chamber" @@ -47344,7 +47164,8 @@ /area/exodus/research/storage) "bTY" = ( /obj/machinery/light_switch{ - pixel_y = -23 + pixel_y = -23; + dir = 1 }, /obj/machinery/power/apc{ dir = 8; @@ -47458,7 +47279,7 @@ /area/exodus/engineering) "bUm" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -47679,8 +47500,7 @@ dir = 1 }, /obj/structure/bed/chair/comfy/teal{ - dir = 4; - icon_state = "comfychair_preview" + dir = 4 }, /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -47698,7 +47518,7 @@ /area/exodus/gateway) "bUP" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/hygiene/sink{ dir = 8; @@ -48041,7 +47861,8 @@ dir = 1 }, /obj/machinery/airlock_sensor{ - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /turf/simulated/floor/airless, /area/exodus/research/mixing) @@ -48153,7 +47974,7 @@ dir = 8 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/light/small/emergency, /obj/effect/shuttle_landmark/escape_pod/start/pod4, @@ -48249,7 +48070,8 @@ /area/exodus/engineering/engineering_monitoring) "bVZ" = ( /obj/structure/sign/warning/airlock{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 8; @@ -48270,8 +48092,8 @@ /area/exodus/maintenance/research_starboard) "bWa" = ( /obj/machinery/navbeacon/Medbay, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /turf/simulated/floor/plating, /area/exodus/medical/sleeper) @@ -48310,13 +48132,10 @@ /obj/machinery/door/firedoor{ dir = 4 }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "scanhideside"; - name = "Diagnostics Room Privacy Shutters"; - opacity = FALSE + name = "Diagnostics Room Privacy Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -48666,7 +48485,8 @@ /area/exodus/research/mixing) "bWR" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/wood/walnut, /area/exodus/engineering/break_room) @@ -48719,7 +48539,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/engine_airlock) @@ -48728,11 +48549,13 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/airlock_sensor{ id_tag = "engine_room_airlock"; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/machinery/atmospherics/portables_connector, /obj/effect/floor_decal/industrial/outline/yellow, @@ -48754,7 +48577,7 @@ "bXb" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/closet/bombcloset, /turf/simulated/floor/tiled/white, @@ -48775,7 +48598,8 @@ announcementConsole = 1; department = "Chief Engineer's Desk"; name = "Chief Engineer RC"; - pixel_y = 34 + pixel_y = 32; + dir = 1; }, /obj/machinery/newscaster{ pixel_x = -28; @@ -48837,7 +48661,8 @@ /obj/machinery/airlock_sensor{ id_tag = "robotics_solar_sensor"; pixel_x = 12; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -48909,13 +48734,10 @@ /obj/machinery/door/firedoor{ dir = 4 }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "scanhideside"; - name = "Diagnostics Room Privacy Shutters"; - opacity = FALSE + name = "Diagnostics Room Privacy Shutters" }, /obj/structure/cable/green{ icon_state = "4-8" @@ -48975,7 +48797,8 @@ /area/exodus/medical/medbay4) "bXA" = ( /obj/machinery/newscaster{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/structure/disposalpipe/sortjunction{ dir = 8; @@ -49050,7 +48873,8 @@ }, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -49141,7 +48965,8 @@ "bXO" = ( /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -49353,7 +49178,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/radio/intercom{ dir = 8; @@ -49551,7 +49376,8 @@ "bYA" = ( /obj/machinery/light, /obj/structure/extinguisher_cabinet{ - pixel_y = -29 + pixel_y = -29; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -49589,7 +49415,8 @@ /obj/machinery/button/access/exterior{ id_tag = "virology_airlock_control"; name = "Virology Access Button"; - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -49869,13 +49696,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "scanhideside"; - name = "Diagnostics Room Privacy Shutters"; - opacity = FALSE + name = "Diagnostics Room Privacy Shutters" }, /obj/effect/floor_decal/corner/pink{ dir = 9 @@ -49941,7 +49765,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/item/clothing/suit/space/void/engineering/prepared, /turf/simulated/floor/tiled/steel_grid, @@ -50011,7 +49835,8 @@ "bZC" = ( /obj/machinery/light_switch{ pixel_x = 22; - pixel_y = -10 + pixel_y = -10; + dir = 8 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -50078,7 +49903,8 @@ "bZJ" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/exodus/research/misc_lab) @@ -50130,7 +49956,7 @@ "bZO" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/bed/roller, /obj/machinery/camera/network/medbay{ @@ -50193,7 +50019,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/window/reinforced{ dir = 4 @@ -50360,7 +50186,8 @@ /area/exodus/engineering/break_room) "cal" = ( /obj/machinery/newscaster{ - pixel_x = 28 + pixel_x = 28; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -50443,7 +50270,8 @@ }, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/medical/sleeper) @@ -50482,8 +50310,7 @@ pixel_x = -22 }, /obj/structure/bed/chair/comfy/teal{ - dir = 4; - icon_state = "comfychair_preview" + dir = 4 }, /obj/effect/floor_decal/corner/pink/three_quarters{ dir = 8 @@ -50614,7 +50441,8 @@ "caM" = ( /obj/structure/iv_drip, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 22; + dir = 8 }, /obj/machinery/power/apc{ dir = 1; @@ -50640,7 +50468,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 29; + dir = 8 }, /obj/structure/bed/roller, /turf/simulated/floor/tiled/white, @@ -50780,7 +50609,8 @@ /obj/machinery/button/blast_door{ id_tag = "disvent"; name = "Incinerator Vent Control"; - pixel_y = -24 + pixel_y = -24; + dir = 1 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/steel_grid, @@ -50868,7 +50698,8 @@ /obj/machinery/network/requests_console{ department = "Science"; name = "Science Requests Console"; - pixel_y = 28 + pixel_y = 32; + dir = 1; }, /obj/machinery/camera/network/research{ c_tag = "Xenobiology North" @@ -50983,7 +50814,7 @@ pixel_y = 4 }, /obj/item/clothing/glasses/welding/superior, -/obj/item/storage/fancy/cigarettes, +/obj/item/storage/box/fancy/cigarettes, /obj/item/book/manual/supermatter_engine, /turf/simulated/floor/tiled/steel_grid, /area/exodus/crew_quarters/heads/chief) @@ -50998,7 +50829,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/machinery/door/window/southleft{ name = "Engineering Voidsuits" @@ -51093,7 +50924,8 @@ icon_state = "1-2" }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/medbay4) @@ -51151,7 +50983,6 @@ /area/exodus/medical/patient_wing) "cbW" = ( /obj/structure/closet/crate{ - icon_state = "crateopen"; name = "Grenade Crate"; opened = 1 }, @@ -51257,7 +51088,8 @@ dir = 4 }, /obj/machinery/newscaster{ - pixel_x = 28 + pixel_x = 28; + dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -51305,7 +51137,8 @@ /obj/machinery/button/access/exterior{ id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -51337,13 +51170,10 @@ "ccn" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /turf/simulated/floor/plating, /area/exodus/research/xenobiology) @@ -51358,13 +51188,10 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/obj/machinery/door/blast/shutters{ - density = FALSE; +/obj/machinery/door/blast/shutters/open{ dir = 4; - icon_state = "shutter0"; id_tag = "hop_office_desk"; - name = "HoP Office Privacy Shutters"; - opacity = FALSE + name = "HoP Office Privacy Shutters" }, /obj/structure/cable/green{ icon_state = "4-8" @@ -51425,6 +51252,12 @@ /obj/random/maintenance, /obj/random/maintenance, /obj/random/maintenance, +/obj/machinery/button/access/interior{ + id_tag = "toxin_test_airlock"; + name = "interior access button"; + pixel_x = 20; + dir = 8 + }, /turf/simulated/floor/plating, /area/exodus/maintenance/research_starboard) "ccw" = ( @@ -51473,7 +51306,8 @@ "ccC" = ( /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor, /area/exodus/maintenance/atmos_control) @@ -51506,7 +51340,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 29; + dir = 8 }, /obj/machinery/alarm{ dir = 1; @@ -51562,7 +51397,7 @@ dir = 5 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/medical/surgeryobs) @@ -51784,7 +51619,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/freezer, /area/exodus/crew_quarters/sleep/engi_wash) @@ -51925,7 +51760,8 @@ dir = 4 }, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 30; + dir = 4 }, /obj/machinery/computer/modular/preset/medical{ dir = 8 @@ -52019,14 +51855,16 @@ /obj/item/pen, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -36 + pixel_y = -36; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /obj/machinery/button/windowtint{ id_tag = "isoC_window_tint"; - pixel_y = -26 + pixel_y = -26; + dir = 1 }, /obj/effect/floor_decal/corner/pink/three_quarters{ dir = 4 @@ -52036,7 +51874,8 @@ "cdB" = ( /obj/machinery/light, /obj/machinery/newscaster{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -52366,7 +52205,8 @@ pixel_x = 24 }, /obj/machinery/button/windowtint{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/machinery/light_switch{ pixel_x = -25; @@ -52500,7 +52340,8 @@ /obj/effect/floor_decal/industrial/warning/full, /obj/machinery/airlock_sensor{ id_tag = "merchant_shuttle_station_sensor"; - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/hallway/secondary/entry/fore) @@ -52631,7 +52472,8 @@ dir = 9 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/medical/surgeryobs) @@ -52746,7 +52588,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/white/diagonal, /turf/simulated/floor/tiled/steel_grid, @@ -52800,7 +52642,7 @@ /area/exodus/engineering/workshop) "cfj" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil{ @@ -52832,7 +52674,8 @@ /area/exodus/medical/biostorage) "cfl" = ( /obj/structure/sign/warning/airlock{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -53085,7 +52928,7 @@ "cfT" = ( /obj/machinery/computer/modular/preset/cardslot/command, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/crew_quarters/heads/chief) @@ -53188,7 +53031,8 @@ dir = 1 }, /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/machinery/smartfridge/drying_rack, /obj/effect/floor_decal/corner/purple/three_quarters{ @@ -53216,7 +53060,8 @@ "cgh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 22; + dir = 8 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -54059,7 +53904,8 @@ pixel_y = -20 }, /obj/structure/sign/warning/airlock{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/visible{ @@ -54117,13 +53963,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/research/xenobiology) "chT" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -54237,7 +54080,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/freezer, /area/exodus/research/xenobiology/xenoflora_storage) @@ -54267,7 +54110,8 @@ "cih" = ( /obj/machinery/light_switch{ pixel_x = 26; - pixel_y = -6 + pixel_y = -6; + dir = 8 }, /obj/structure/table/glass, /turf/simulated/floor/tiled/white, @@ -54404,7 +54248,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/tiled/freezer, @@ -54429,7 +54273,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/foyer) @@ -54543,7 +54387,8 @@ /area/exodus/engineering/locker_room) "ciR" = ( /obj/machinery/light_switch{ - pixel_x = -22 + pixel_x = -22; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/surgery) @@ -54633,7 +54478,8 @@ /area/exodus/medical/surgery2) "cje" = ( /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 22; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/surgery2) @@ -54778,7 +54624,7 @@ /obj/structure/closet/secure_closet/atmos_personal, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/item/tank/emergency/oxygen/engi, /turf/simulated/floor/tiled/steel_grid, @@ -55391,7 +55237,8 @@ /obj/machinery/network/requests_console{ department = "Science"; name = "Science Requests Console"; - pixel_x = 30 + pixel_x = 32; + dir = 4; }, /obj/effect/floor_decal/corner/purple{ dir = 8 @@ -55403,7 +55250,8 @@ id_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 @@ -55566,8 +55414,8 @@ /area/exodus/engineering/foyer) "clg" = ( /obj/machinery/navbeacon/Engineering, -/obj/structure/plasticflaps{ - opacity = TRUE +/obj/structure/flaps{ + opacity = 1 }, /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading{ @@ -55678,7 +55526,7 @@ /area/exodus/research/xenobiology/xenoflora) "clt" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/exodus/medical/virology) @@ -55714,7 +55562,7 @@ }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering) @@ -55942,9 +55790,11 @@ /turf/simulated/floor/tiled/white, /area/exodus/medical/virology/access) "clS" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/maintenance/engi_shuttle) +/obj/structure/sign/warning/radioactive{ + pixel_y = 32 + }, +/turf/space, +/area/space) "clT" = ( /obj/structure/sign/warning/fire{ pixel_y = 32 @@ -55971,15 +55821,21 @@ /turf/simulated/floor/tiled/freezer, /area/exodus/research/xenobiology/xenoflora_storage) "clW" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/maintenance/engineering) +/obj/machinery/button/access/exterior{ + id_tag = "toxin_test_airlock"; + name = "exterior access button"; + pixel_x = -20; + dir = 4 + }, +/turf/space, +/area/space) "clX" = ( /obj/structure/cable/green{ icon_state = "1-2" }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/plating, /area/exodus/engineering/sublevel_access) @@ -55987,7 +55843,8 @@ /obj/machinery/light, /obj/machinery/light_switch{ name = "light switch "; - pixel_y = -22 + pixel_y = -22; + dir = 1 }, /obj/machinery/atmospherics/portables_connector{ dir = 4 @@ -56033,15 +55890,17 @@ /obj/item/radio/off, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/table/steel, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) "cmc" = ( -/obj/structure/sign/warning/radioactive, -/turf/simulated/wall/r_wall/prepainted, -/area/exodus/engineering/engine_room) +/obj/structure/sign/warning/biohazard{ + pixel_y = 32 + }, +/turf/space, +/area/space) "cmd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56163,7 +56022,7 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/starboardsolar) "cmq" = ( -/obj/item/storage/fancy/vials, +/obj/item/storage/box/fancy/vials, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56268,7 +56127,8 @@ /obj/machinery/network/requests_console{ department = "Engineering"; name = "Engineering RC"; - pixel_y = -32 + pixel_y = -32; + dir = 2; }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/foyer) @@ -56354,7 +56214,7 @@ /area/exodus/engineering/locker_room) "cmM" = ( /obj/machinery/door/blast/regular/open{ - density = FALSE; + density = 0; dir = 4; id_tag = "SupermatterPort"; name = "Reactor Blast Door" @@ -56479,7 +56339,8 @@ dir = 1 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/blue{ dir = 6 @@ -56532,7 +56393,8 @@ id_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -56607,7 +56469,8 @@ /obj/machinery/airlock_sensor{ id_tag = "solar_xeno_sensor"; pixel_x = 25; - pixel_y = 12 + pixel_y = 12; + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 1; @@ -56725,7 +56588,8 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/structure/sign/warning/compressed_gas{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) @@ -56995,7 +56859,8 @@ /area/exodus/research/xenobiology) "col" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, @@ -57055,11 +56920,12 @@ "cor" = ( /obj/machinery/airlock_sensor{ id_tag = "eng_al_c_snsr"; - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -57176,7 +57042,7 @@ "coE" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/structure/table/reinforced, /turf/simulated/floor/tiled/steel_grid, @@ -57185,7 +57051,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, @@ -57329,13 +57195,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/surgery2) "coW" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "virologyquar"; - name = "Virology Emergency Quarantine Blast Doors"; - opacity = FALSE + name = "virologyquar" }, /obj/structure/cable/green{ icon_state = "1-2" @@ -57346,13 +57209,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/medical/virology/access) "coX" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "virologyquar"; - name = "Virology Emergency Quarantine Blast Doors"; - opacity = FALSE + name = "virologyquar" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, @@ -57376,13 +57236,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/research/xenobiology) "cpb" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, @@ -57396,13 +57253,10 @@ /turf/simulated/wall/prepainted, /area/exodus/medical/surgery) "cpd" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio3" }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/westright{ @@ -57546,7 +57400,8 @@ /area/exodus/engineering/engineering_monitoring) "cpy" = ( /obj/machinery/vending/wallmed1{ - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/machinery/light{ dir = 8 @@ -57607,7 +57462,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -57687,13 +57543,10 @@ "cpV" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Biohazard"; - name = "Biohazard Blast Doors"; - opacity = FALSE + name = "Biohazard" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -57777,7 +57630,8 @@ /area/exodus/engineering) "cqg" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/structure/cable/green{ icon_state = "1-2" @@ -57867,7 +57721,8 @@ desc = "A remote control-switch for shutters."; id_tag = "virologyquar"; name = "Virology Emergency Lockdown Control"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -57885,7 +57740,8 @@ id_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = -30; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, @@ -57995,21 +57851,27 @@ desc = "A remote control-switch for the engine control room blast doors."; id_tag = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; - pixel_y = -3 + pixel_y = -3; + dir = 1; + directional_offset = null }, /obj/machinery/button/blast_door{ desc = "A remote control-switch for the engine charging port."; id_tag = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -6; - pixel_y = 7 + pixel_y = 7; + dir = 1; + directional_offset = null }, /obj/machinery/button/toggle{ desc = "A remote control-switch for the engine emitter."; id_tag = "EngineEmitter"; name = "Engine Emitter"; pixel_x = 6; - pixel_y = 7 + pixel_y = 7; + dir = 1; + directional_offset = null }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -58017,13 +57879,10 @@ /area/exodus/engineering/engine_monitoring) "cqO" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = FALSE + name = "EngineRadiatorViewport" }, /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 @@ -58114,7 +57973,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /obj/effect/floor_decal/corner/yellow{ dir = 6 @@ -58186,7 +58046,8 @@ /obj/machinery/airlock_sensor{ id_tag = "engineering_dock_sensor"; pixel_x = -25; - pixel_y = 8 + pixel_y = 8; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -58343,6 +58204,11 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/machinery/button/access/exterior{ + id_tag = "engineering_dock_airlock"; + name = "exterior access button"; + pixel_x = 25 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/exodus/maintenance/engi_shuttle) "crI" = ( @@ -58405,7 +58271,7 @@ "crR" = ( /obj/structure/table, /obj/item/storage/box/matches, -/obj/item/storage/fancy/cigarettes, +/obj/item/storage/box/fancy/cigarettes, /obj/machinery/light/small{ dir = 8 }, @@ -58420,7 +58286,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "crU" = ( /obj/effect/floor_decal/industrial/warning{ @@ -58433,7 +58299,7 @@ /area/exodus/engineering/engine_room) "crV" = ( /obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "crY" = ( /obj/structure/window/basic{ @@ -58443,7 +58309,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 4 }, -/turf/simulated/floor/beach/water/ocean, +/turf/simulated/floor/pool, /area/exodus/crew_quarters/fitness) "csb" = ( /obj/structure/rack{ @@ -58611,6 +58477,9 @@ /obj/machinery/camera/network/engine{ c_tag = "Engine Radiator" }, +/obj/structure/sign/warning/docking_area{ + pixel_y = 32 + }, /turf/space, /area/space) "csB" = ( @@ -58618,7 +58487,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/computer/robotics, /turf/simulated/floor/tiled/white, @@ -58678,13 +58547,10 @@ /area/exodus/medical/surgery2) "csI" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = FALSE + name = "EngineRadiatorViewport" }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) @@ -59015,25 +58881,19 @@ /area/exodus/medical/virology) "ctK" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = FALSE + name = "EngineRadiatorViewport" }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) "ctM" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = FALSE + name = "EngineRadiatorViewport" }, /obj/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/floor/plating, @@ -59073,13 +58933,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/medical/virology) "ctS" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio2" }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/westright{ @@ -59444,7 +59301,7 @@ icon_state = "0-2" }, /obj/machinery/generator{ - anchored = TRUE; + anchored = 1; dir = 4 }, /obj/structure/cable/yellow, @@ -59456,7 +59313,8 @@ id_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /turf/space, /area/space) @@ -60139,7 +59997,8 @@ announcementConsole = 1; department = "Research Director's Desk"; name = "Research Director RC"; - pixel_x = 32 + pixel_x = 32; + dir = 4; }, /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 @@ -60297,13 +60156,10 @@ /turf/simulated/floor/tiled/white, /area/exodus/medical/virology) "cxV" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio1" }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/westright{ @@ -60411,7 +60267,8 @@ /area/exodus/maintenance/incinerator) "cyG" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -29; + dir = 4 }, /obj/machinery/camera/network/exodus{ c_tag = "Arrivals Southeast"; @@ -60434,7 +60291,8 @@ /obj/machinery/network/requests_console{ department = "Virology"; name = "Virology Requests Console"; - pixel_x = -32 + pixel_x = -32; + dir = 8; }, /obj/structure/table/glass, /obj/effect/floor_decal/corner/lime{ @@ -60523,7 +60381,8 @@ /obj/machinery/network/requests_console{ department = "Engineering"; name = "Engineering RC"; - pixel_y = -32 + pixel_y = -32; + dir = 2; }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/engineering/workshop) @@ -60752,7 +60611,8 @@ }, /obj/machinery/airlock_sensor{ id_tag = "exodus_rescue_shuttle_dock_sensor"; - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /turf/simulated/floor/plating, /area/exodus/hallway/secondary/entry/aft) @@ -60946,13 +60806,10 @@ name = "Containment Pen"; req_access = list("ACCESS_XENOBIO") }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio4" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/reinforced, @@ -61140,7 +60997,8 @@ dir = 1 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 25 + pixel_x = 29; + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/pods) @@ -61150,13 +61008,10 @@ name = "Containment Pen"; req_access = list("ACCESS_XENOBIO") }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio5"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio5" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/reinforced, @@ -61177,9 +61032,7 @@ /turf/simulated/floor/plating, /area/exodus/engineering/drone_fabrication) "cDi" = ( -/obj/machinery/computer/cryopod/robot{ - dir = 2 - }, +/obj/machinery/computer/cryopod/robot, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, @@ -61281,12 +61134,6 @@ /turf/simulated/floor/plating, /area/exodus/maintenance/engineering) "cDE" = ( -/obj/machinery/button/access/interior{ - id_tag = "toxin_test_airlock"; - name = "interior access button"; - pixel_x = 20; - pixel_y = 20 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -61783,7 +61630,8 @@ "cGo" = ( /obj/structure/table/reinforced, /obj/machinery/light_switch{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/effect/floor_decal/corner/yellow{ dir = 6 @@ -61799,13 +61647,10 @@ name = "Containment Pen"; req_access = list("ACCESS_XENOBIO") }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "xenobio6"; - name = "Containment Blast Doors"; - opacity = FALSE + name = "xenobio6" }, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/reinforced, @@ -61995,7 +61840,8 @@ id_tag = "engine_electrical_maintenance"; name = "Door Bolt Control"; pixel_x = 5; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "0-4" @@ -62137,6 +61983,10 @@ dir = 9 }, /obj/effect/floor_decal/industrial/warning, +/obj/structure/sign/warning/radioactive{ + dir = 8; + pixel_x = 32 + }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_waste) "cHY" = ( @@ -62151,7 +62001,7 @@ /area/exodus/engineering/engine_room) "cIa" = ( /obj/machinery/emitter{ - anchored = TRUE; + anchored = 1; id_tag = "EngineEmitter"; state = 2 }, @@ -62317,7 +62167,7 @@ /area/exodus/engineering/engine_room) "cIF" = ( /obj/machinery/atmospherics/binary/circulator{ - anchored = TRUE; + anchored = 1; dir = 1 }, /turf/simulated/floor/plating, @@ -62333,7 +62183,7 @@ /area/exodus/engineering/engine_room) "cIH" = ( /obj/machinery/atmospherics/binary/circulator{ - anchored = TRUE + anchored = 1 }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) @@ -62564,6 +62414,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/structure/sign/warning/radioactive{ + dir = 8; + pixel_x = 32 + }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_waste) "cJF" = ( @@ -62686,7 +62540,7 @@ /area/exodus/maintenance/engi_engine) "cJZ" = ( /obj/machinery/generator{ - anchored = TRUE; + anchored = 1; dir = 4 }, /obj/structure/cable/yellow, @@ -62732,7 +62586,8 @@ desc = "A remote control-switch for the engine radiator viewport shutters."; id_tag = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutters"; - pixel_x = 25 + pixel_x = 25; + dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 4 @@ -62822,14 +62677,12 @@ /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) "cKH" = ( -/obj/machinery/button/access/exterior{ - id_tag = "engineering_dock_airlock"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = -8 +/obj/structure/sign/warning/radioactive{ + dir = 4; + pixel_x = -32 }, -/turf/space, -/area/space) +/turf/simulated/floor/plating, +/area/exodus/engineering/engine_room) "cKI" = ( /mob/living/simple_animal/mouse, /turf/simulated/floor/plating, @@ -63100,6 +62953,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/structure/sign/warning/radioactive{ + pixel_y = -32; + dir = 1 + }, /turf/simulated/floor/plating, /area/exodus/engineering/engine_room) "cLB" = ( @@ -63147,7 +63004,8 @@ /obj/machinery/button/blast_door{ id_tag = "EngineVent"; name = "Reactor Ventillatory Control"; - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/structure/window/reinforced, /turf/simulated/floor/plating, @@ -64326,7 +64184,8 @@ "oWh" = ( /obj/machinery/network/requests_console{ department = "Arrival shuttle"; - pixel_y = -30 + pixel_y = -32; + dir = 2; }, /obj/effect/floor_decal/corner/white{ dir = 10 @@ -64567,7 +64426,6 @@ backwards = 8; dir = 9; forwards = 2; - icon_state = "conveyor1"; id_tag = "cargo_mining_conveyor"; movedir = 6 }, @@ -64621,7 +64479,8 @@ /area/exodus/crew_quarters/kitchen) "sGZ" = ( /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -64938,7 +64797,7 @@ "wsi" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/white{ dir = 10 @@ -64996,7 +64855,8 @@ /obj/item/stack/material/ingot/mapped/osmium/ten, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/status_display{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/exodus/quartermaster/miningdock) @@ -72656,7 +72516,7 @@ crP cLU cLU cLU -atf +cec aFD cec cLU @@ -73169,7 +73029,7 @@ cLU cec cec cec -awq +atS cec ceI cec @@ -92016,11 +91876,11 @@ bZQ cDW cDW cGt -cmc +cGt cmo uGq cmr -cmc +cGt cGt cGt cGt @@ -92277,7 +92137,7 @@ apm cIC cIZ cJs -cHb +cKH cIQ cLI bIM @@ -92538,9 +92398,9 @@ cHb cHb cJo bIM -bIM -cmc -cLU +awq +cGt +clS cLU aaI cLU @@ -95623,8 +95483,8 @@ cuI cuH cJZ cLA -cmc -cLU +cGt +clS cLU aaI cLU @@ -96381,7 +96241,7 @@ cdW czA aaf cLU -cLU +bun ccp cHB cHB @@ -96638,7 +96498,7 @@ cCz byA byA byA -clS +byA rQB cKX gwY @@ -97666,7 +97526,7 @@ cFC byF aaf cLU -cKH +cLU rQB cpF cLj @@ -98182,11 +98042,11 @@ cea cea cea cea -clW +cea aQh aQh aQh -aIo +apc csA csX csX @@ -98954,7 +98814,7 @@ bNU bzX bzX bNU -cLU +aGX cGQ cHy cHP @@ -103320,8 +103180,8 @@ cqv cqv cqv cqv -cfQ -cLU +cqv +cmc aaf cLU cLU @@ -107427,8 +107287,8 @@ cqv cqv cqv cqv -cfQ -aaf +cqv +atf cCJ aap cLU @@ -108710,8 +108570,8 @@ cdO cdO cdO cdO -bXx -cLU +cdO +cmc cLU cLU cqD @@ -109744,8 +109604,8 @@ cdO cdO cdO cdO -bXx -aaf +cdO +atf cCJ cLU cLU @@ -111490,11 +111350,11 @@ bhl biK rkN brU -brU -aGX +aQU +blO bqN bst -bun +bww bwy aMd bCh @@ -112828,8 +112688,8 @@ cdO cdO cdO cdO -bXx -aaf +cdO +atf cCJ cLU aaf @@ -115591,7 +115451,7 @@ cLU cLU cLU cLU -aQU +azP aLW azP aaf @@ -115599,7 +115459,7 @@ cLU aaf azP aNM -aQU +azP aaf cLU cLU @@ -117172,8 +117032,8 @@ aaf cLU aaf cLU -bEo -cLU +ceq +clW aaf cLU cLU diff --git a/maps/exodus/exodus-admin.dmm b/maps/exodus/exodus-admin.dmm index 72de9b6805e..4f8d3ef69f6 100644 --- a/maps/exodus/exodus-admin.dmm +++ b/maps/exodus/exodus-admin.dmm @@ -218,7 +218,7 @@ /area/centcom) "ala" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/decoy{ name = "A.L.I.C.E." @@ -336,11 +336,11 @@ "ayi" = ( /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/showcase{ desc = "A self-contained autopilot that controls supply drones."; - icon_state = "comm_server"; + icon_state = "showcase_5"; name = "Supply Drone Virtual Intelligence" }, /turf/simulated/floor/plating, @@ -794,7 +794,7 @@ /obj/machinery/light, /obj/item/radio/intercom{ dir = 1; - pixel_y = -22 + pixel_y = -30 }, /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -1245,7 +1245,8 @@ /area/centcom/holding) "aLs" = ( /obj/structure/closet/hydrant{ - pixel_x = 30 + pixel_x = 30; + dir = 8 }, /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -1315,12 +1316,9 @@ /turf/space, /area/shuttle/escape_shuttle) "aLF" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "CentComPort"; - name = "Security Doors"; - opacity = FALSE + name = "Security Doors" }, /turf/unsimulated/floor{ icon_state = "steel" @@ -1472,7 +1470,8 @@ "aMg" = ( /obj/machinery/airlock_sensor{ id_tag = "centcom_escape_dock_north_sensor"; - pixel_y = -25 + pixel_y = -25; + dir = 1 }, /turf/simulated/floor/plating, /area/centcom/holding) @@ -1549,7 +1548,8 @@ /area/centcom/holding) "aMt" = ( /obj/machinery/status_display{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -1955,7 +1955,8 @@ /area/centcom/holding) "aOZ" = ( /obj/machinery/status_display{ - pixel_y = -30 + pixel_y = -30; + dir = 1 }, /obj/machinery/light, /obj/effect/floor_decal/industrial/warning{ @@ -2130,7 +2131,8 @@ /area/shuttle/escape_shuttle) "bpb" = ( /obj/structure/closet/hydrant{ - pixel_x = -30 + pixel_x = -30; + dir = 4 }, /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -2638,7 +2640,7 @@ /obj/item/chems/drinks/bottle/small/beer, /obj/item/chems/drinks/bottle/small/beer, /obj/item/flame/lighter/zippo/random, -/obj/item/storage/fancy/cigarettes, +/obj/item/storage/box/fancy/cigarettes, /turf/unsimulated/floor{ icon_state = "lino" }, @@ -3022,7 +3024,7 @@ name = "tdome2" }, /obj/machinery/camera/network/television{ - c_tag = "Thunderdome - Red Team"; + c_tag = "Thunderdome - Red Team" }, /turf/unsimulated/floor{ dir = 5; @@ -3059,7 +3061,7 @@ name = "tdome1" }, /obj/machinery/camera/network/television{ - c_tag = "Green Team"; + c_tag = "Green Team" }, /turf/unsimulated/floor{ dir = 5; @@ -3074,7 +3076,7 @@ /area/tdome) "pQZ" = ( /obj/machinery/camera/network/television{ - c_tag = "Thunderdome Arena"; + c_tag = "Thunderdome Arena" }, /turf/unsimulated/floor{ icon_state = "bcircuit" @@ -3156,8 +3158,8 @@ /area/tdome/tdomeadmin) "sKA" = ( /obj/abstract/level_data_spawner/admin_level{ - name = "Centcomm"; -}, + name = "Centcomm" + }, /turf/space, /area/space) "sMD" = ( @@ -3285,7 +3287,6 @@ "wOU" = ( /obj/machinery/button/blast_door{ dir = 1; - icon_state = "computer"; id_tag = "thunderdomeaxe"; name = "Thunderdome Axe Supply" }, diff --git a/maps/exodus/exodus-transit.dmm b/maps/exodus/exodus-transit.dmm index 991bdb2df5c..3561cf64477 100644 --- a/maps/exodus/exodus-transit.dmm +++ b/maps/exodus/exodus-transit.dmm @@ -22,7 +22,7 @@ /obj/effect/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; - opacity = FALSE; + opacity = 0; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; @@ -43,8 +43,8 @@ /area/space) "QP" = ( /obj/abstract/level_data_spawner/admin_level{ - name = "Exodus Transit Level"; -}, + name = "Exodus Transit Level" + }, /turf/space, /area/space) diff --git a/maps/exodus/exodus_loadout.dm b/maps/exodus/exodus_loadout.dm index 3e33b047a1f..324d7b450c3 100644 --- a/maps/exodus/exodus_loadout.dm +++ b/maps/exodus/exodus_loadout.dm @@ -3,6 +3,7 @@ path = /obj/item/clothing/accessory/chaplaininsignia cost = 1 allowed_roles = list(/datum/job/chaplain) + uid = "gear_accessory_insignia" /decl/loadout_option/accessory/chaplaininsignia/Initialize() . = ..() diff --git a/maps/exodus/jobs/civilian.dm b/maps/exodus/jobs/civilian.dm index ad474b024e4..6919061c901 100644 --- a/maps/exodus/jobs/civilian.dm +++ b/maps/exodus/jobs/civilian.dm @@ -11,10 +11,9 @@ department_types = list(/decl/department/civilian) /datum/job/assistant/get_access() - if(config.assistant_maint) + if(get_config_value(/decl/config/toggle/assistant_maint)) return list(access_maint_tunnels) - else - return list() + return list() /datum/job/chaplain title = "Chaplain" diff --git a/maps/exodus/jobs/synthetics.dm b/maps/exodus/jobs/synthetics.dm index 1c102582a2c..1cac23c65ae 100644 --- a/maps/exodus/jobs/synthetics.dm +++ b/maps/exodus/jobs/synthetics.dm @@ -76,4 +76,4 @@ /datum/job/robot/New() ..() alt_titles = SSrobots.robot_alt_titles.Copy() - alt_titles -= title // So the unit test doesn't flip out if a mob or mmi type is declared for our main title. + alt_titles -= title // So the unit test doesn't flip out if a mob or brain type is declared for our main title. diff --git a/maps/exodus/outfits/cargo.dm b/maps/exodus/outfits/cargo.dm index 8bfc82c1b2b..ecc6b53da97 100644 --- a/maps/exodus/outfits/cargo.dm +++ b/maps/exodus/outfits/cargo.dm @@ -28,7 +28,7 @@ id_type = /obj/item/card/id/cargo pda_type = /obj/item/modular_computer/pda/science backpack_contents = list(/obj/item/crowbar = 1, /obj/item/storage/ore = 1) - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR /decl/hierarchy/outfit/job/cargo/mining/Initialize() . = ..() diff --git a/maps/exodus/outfits/engineering.dm b/maps/exodus/outfits/engineering.dm index 2aee3512b41..02aefa0b167 100644 --- a/maps/exodus/outfits/engineering.dm +++ b/maps/exodus/outfits/engineering.dm @@ -4,7 +4,7 @@ l_ear = /obj/item/radio/headset/headset_eng shoes = /obj/item/clothing/shoes/workboots pda_slot = slot_l_store_str - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + outfit_flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR /decl/hierarchy/outfit/job/engineering/Initialize() . = ..() diff --git a/maps/kleibkhar/kleibkhar-2.dmm b/maps/kleibkhar/kleibkhar-2.dmm index fa473d97fb8..b526f35db86 100644 --- a/maps/kleibkhar/kleibkhar-2.dmm +++ b/maps/kleibkhar/kleibkhar-2.dmm @@ -24,7 +24,7 @@ /turf/exterior/barren/mining, /area/exoplanet/kleibkhar/mines/depth_1) "af" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/mines/exits) "ag" = ( /obj/structure/railing/mapped, @@ -565,14 +565,14 @@ /area/exoplanet/kleibkhar/mines/exits) "bm" = ( /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/mines/exits) "bn" = ( /obj/structure/lattice, /obj/structure/cable/yellow{ icon_state = "32-1" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/mines/exits) (1,1,1) = {" diff --git a/maps/kleibkhar/kleibkhar-3.dmm b/maps/kleibkhar/kleibkhar-3.dmm index d90e093f434..c5374dfc3df 100644 --- a/maps/kleibkhar/kleibkhar-3.dmm +++ b/maps/kleibkhar/kleibkhar-3.dmm @@ -14,8 +14,8 @@ /area/exoplanet/kleibkhar) "ad" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/structure/cable/blue{ icon_state = "4-8" @@ -84,15 +84,15 @@ output_turf = 4 }, /obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" + icon_state = "warning"; + dir = 9 }, /turf/simulated/floor/plating, /area/kleibkhar/outpost/mining) "ao" = ( /obj/machinery/conveyor{ - dir = 4; icon_state = "conveyor0"; + dir = 4; id_tag = "_k_mining_conveyor" }, /obj/effect/floor_decal/industrial/warning{ @@ -121,8 +121,8 @@ dir = 6 }, /obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" + icon_state = "warning"; + dir = 5 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/mining) @@ -163,15 +163,15 @@ output_turf = 4 }, /obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "stripe" + icon_state = "stripe"; + dir = 8 }, /turf/simulated/floor/plating, /area/kleibkhar/outpost/mining) "ax" = ( /obj/machinery/conveyor{ - dir = 4; icon_state = "conveyor0"; + dir = 4; id_tag = "_k_mining_conveyor" }, /turf/simulated/floor/plating, @@ -225,8 +225,8 @@ output_turf = 4 }, /obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" + icon_state = "warning"; + dir = 10 }, /turf/simulated/floor/plating, /area/kleibkhar/outpost/mining) @@ -247,8 +247,8 @@ /area/kleibkhar/outpost/mining) "aH" = ( /obj/machinery/conveyor{ - dir = 4; icon_state = "conveyor0"; + dir = 4; id_tag = "_k_mining_conveyor" }, /obj/effect/floor_decal/industrial/warning, @@ -263,12 +263,12 @@ /area/kleibkhar/outpost/mining) "aJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/effect/floor_decal/industrial/hatch/blue, /obj/structure/cable{ @@ -285,8 +285,8 @@ id_tag = "_k_mining_conveyor" }, /obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" + icon_state = "warning"; + dir = 6 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/mining) @@ -296,12 +296,12 @@ /area/kleibkhar/outpost/mining) "aM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -336,7 +336,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/infirmary/surgery) "aS" = ( /obj/effect/floor_decal/industrial/hatch/yellow, @@ -355,8 +355,8 @@ /area/kleibkhar/outpost/mining) "aU" = ( /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb_map" + icon_state = "bulb_map"; + dir = 1 }, /obj/structure/closet, /obj/item/storage/medical_lolli_jar, @@ -404,7 +404,7 @@ icon_state = "closed"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/it) "ba" = ( /obj/effect/floor_decal/industrial/warning/dust/corner{ @@ -451,7 +451,7 @@ /turf/simulated/floor, /area/kleibkhar/outpost/solar_array) "bg" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar) "bh" = ( /obj/structure/cable/yellow{ @@ -462,8 +462,8 @@ /area/kleibkhar/outpost/solar_array) "bi" = ( /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /obj/structure/rack, @@ -501,7 +501,7 @@ /obj/structure/cable/blue{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/computer) "bo" = ( /obj/structure/sign/warning/server_room, @@ -525,8 +525,8 @@ dir = 6 }, /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /turf/simulated/floor/bluegrid, /area/kleibkhar/outpost/it) @@ -536,8 +536,8 @@ /area/kleibkhar/outpost/infirmary/storage) "bt" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/cloning_pod, /turf/simulated/floor/tiled/white, @@ -549,8 +549,8 @@ "bv" = ( /obj/structure/morgue, /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb_map" + icon_state = "bulb_map"; + dir = 1 }, /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/infirmary/storage) @@ -562,8 +562,8 @@ /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/infirmary/storage) "bx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 8 }, /turf/simulated/floor/tiled/white, @@ -613,8 +613,8 @@ /area/kleibkhar/outpost/computer) "bF" = ( /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb_map" + icon_state = "bulb_map"; + dir = 1 }, /obj/structure/table, /turf/simulated/floor/tiled/techfloor, @@ -661,8 +661,8 @@ /area/kleibkhar/outpost/cloning) "bP" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/structure/cable/blue{ icon_state = "1-2" @@ -671,8 +671,8 @@ /area/kleibkhar/outpost/computer) "bQ" = ( /obj/structure/crematorium{ - dir = 1; icon_state = "crematorium_closed"; + dir = 1; id_tag = "kleb_crem" }, /obj/effect/floor_decal/industrial/fire/full, @@ -680,8 +680,8 @@ /area/kleibkhar/outpost/infirmary/storage) "bR" = ( /obj/machinery/atmospherics/binary/pump{ - dir = 1; icon_state = "map_off"; + dir = 1; target_pressure = 500; use_power = 1 }, @@ -707,8 +707,8 @@ use_power = 1 }, /obj/machinery/light{ - dir = 4; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) @@ -735,13 +735,16 @@ /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) "bY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/sleeproom) @@ -751,15 +754,15 @@ dir = 8 }, /obj/machinery/docking_beacon{ - anchored = 1; + icon_state = "injector0"; dir = 8; - icon_state = "injector0" + anchored = 1 }, /turf/exterior/barren, /area/exoplanet/kleibkhar) "ca" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /turf/simulated/floor/tiled/white, @@ -770,8 +773,8 @@ /area/kleibkhar/outpost/computer) "cc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, @@ -842,8 +845,8 @@ /area/kleibkhar/outpost/sleeproom) "cn" = ( /obj/machinery/cryopod/despawner{ - dir = 4; - icon_state = "body_scanner_0" + icon_state = "body_scanner_0"; + dir = 4 }, /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -868,20 +871,19 @@ /area/kleibkhar/outpost/computer) "cq" = ( /obj/machinery/cryopod/despawner{ - dir = 4; - icon_state = "body_scanner_0" + icon_state = "body_scanner_0"; + dir = 4 }, /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; dir = 6 }, -/obj/abstract/landmark/latejoin/observer, /turf/simulated/floor/tiled/techmaint, /area/kleibkhar/outpost/sleeproom) "cr" = ( /obj/machinery/cryopod/despawner{ - dir = 4; - icon_state = "body_scanner_0" + icon_state = "body_scanner_0"; + dir = 4 }, /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -901,6 +903,9 @@ "ct" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/sleeproom) "cu" = ( @@ -931,8 +936,8 @@ /area/kleibkhar/outpost/infirmary) "cy" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/structure/table, /obj/machinery/alarm, @@ -940,8 +945,8 @@ /area/kleibkhar/outpost/infirmary/surgery) "cz" = ( /obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" + icon_state = "railing0-1"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, @@ -952,8 +957,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/effect/floor_decal/industrial/hatch/blue, /obj/structure/cable{ @@ -964,8 +969,8 @@ "cB" = ( /obj/machinery/button/crematorium{ dir = 4; - id_tag = "kleb_crem"; - pixel_x = -20 + pixel_x = -20; + id_tag = "kleb_crem" }, /obj/effect/floor_decal/industrial/hatch/blue, /obj/effect/decal/cleanable/ash, @@ -1014,16 +1019,16 @@ /area/kleibkhar/outpost/infirmary) "cG" = ( /obj/machinery/cryopod/despawner{ - dir = 4; - icon_state = "body_scanner_0" + icon_state = "body_scanner_0"; + dir = 4 }, /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; dir = 4 }, /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/kleibkhar/outpost/sleeproom) @@ -1083,8 +1088,8 @@ /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) "cP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, /turf/simulated/floor/tiled/white, @@ -1102,8 +1107,8 @@ /area/kleibkhar/outpost/infirmary/storage) "cS" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/structure/table/reinforced, /obj/item/pen, @@ -1116,8 +1121,8 @@ dir = 8 }, /obj/machinery/light{ - dir = 4; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/kleibkhar/outpost/sleeproom) @@ -1142,18 +1147,18 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/cloning) "cY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ @@ -1186,8 +1191,8 @@ /area/kleibkhar/outpost/computer) "dc" = ( /obj/machinery/atmospherics/unary/freezer{ - dir = 1; icon_state = "freezer_0"; + dir = 1; temperature = 200; use_power = 1 }, @@ -1207,8 +1212,8 @@ /area/kleibkhar/outpost/mining) "de" = ( /obj/machinery/atmospherics/unary/freezer{ - dir = 1; icon_state = "freezer_0"; + dir = 1; temperature = 200; use_power = 1 }, @@ -1220,8 +1225,8 @@ /area/kleibkhar/outpost/infirmary/surgery) "dg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 2; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 2 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/cell_charger, @@ -1256,8 +1261,8 @@ /area/kleibkhar/outpost/hallway) "dl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) @@ -1274,21 +1279,21 @@ /area/kleibkhar/outpost/computer) "dn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 2; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 2 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/rack, -/obj/item/shovel, -/obj/item/shovel, +/obj/item/tool/shovel, +/obj/item/tool/shovel, /obj/item/stack/flag/red, /obj/item/storage/ore, /obj/item/storage/ore, -/obj/item/pickaxe, +/obj/item/tool/pickaxe, /obj/item/hoist_kit, /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/mining) @@ -1315,7 +1320,7 @@ dir = 8 }, /obj/effect/catwalk_plated, -/turf/simulated/floor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/hallway) "dq" = ( /turf/simulated/floor/plating, @@ -1336,8 +1341,8 @@ icon_state = "4-8" }, /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -1363,8 +1368,8 @@ /area/kleibkhar/outpost/computer) "dv" = ( /obj/machinery/light_switch/on{ - dir = 8; icon_state = "light0"; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/white, @@ -1400,21 +1405,21 @@ "dz" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 2; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 2 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/item/radio/intercom{ - dir = 4; icon_state = "intercom"; + dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/mining) "dA" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/vending/cigarette, /turf/simulated/floor/tiled, @@ -1450,8 +1455,8 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 2; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 2 }, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/mining) @@ -1582,17 +1587,20 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/sleeproom) "dW" = ( /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /obj/structure/hygiene/sink{ - dir = 4; icon_state = "sink"; + dir = 4; pixel_x = 12 }, /obj/machinery/light/small, @@ -1607,8 +1615,8 @@ icon_state = "0-8" }, /obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" + icon_state = "term"; + dir = 1 }, /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -1624,7 +1632,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/computer) "dZ" = ( /obj/machinery/door/airlock/double/glass/civilian{ @@ -1635,11 +1643,11 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/sleeproom) "ea" = ( /obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/mining) "eb" = ( /obj/structure/cable{ @@ -1654,9 +1662,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/monotile, /area/kleibkhar/outpost/hallway) -"ed" = ( -/turf/simulated/floor/plating, -/area/exoplanet/kleibkhar/supply_shuttle_dock) "ee" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1683,7 +1688,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/hallway) "eg" = ( /obj/structure/cable/yellow{ @@ -1783,7 +1788,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/mess_hall) "ep" = ( /obj/structure/cable{ @@ -1810,8 +1815,8 @@ /area/kleibkhar/outpost/infirmary) "er" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/vending/coffee, /turf/simulated/floor/tiled, @@ -1845,12 +1850,12 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/effect/catwalk_plated, /turf/simulated/floor, @@ -1880,7 +1885,7 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/washroom) "eA" = ( /obj/structure/cable/yellow{ @@ -1900,8 +1905,8 @@ /area/kleibkhar/outpost/washroom) "eC" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/structure/curtain/open/shower, /obj/structure/hygiene/shower{ @@ -1956,8 +1961,8 @@ /area/kleibkhar/outpost/mess_hall) "eJ" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/recharger/wallcharger{ pixel_y = 24 @@ -1972,8 +1977,8 @@ /area/kleibkhar/outpost/mess_hall) "eL" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/fabricator/replicator, /turf/simulated/floor/tiled, @@ -2025,8 +2030,8 @@ dir = 8 }, /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -2037,8 +2042,8 @@ /area/kleibkhar/outpost/infirmary) "eV" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/structure/iv_drip, /turf/simulated/floor/tiled/white, @@ -2053,7 +2058,7 @@ /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/custodial) "eY" = ( /turf/simulated/wall/concrete, @@ -2086,8 +2091,8 @@ /area/kleibkhar/outpost/hydroponics) "fc" = ( /obj/machinery/light{ - dir = 4; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 4 }, /obj/structure/table, /turf/simulated/floor/tiled, @@ -2095,8 +2100,8 @@ "fd" = ( /obj/structure/table, /obj/item/radio/intercom{ - dir = 8; icon_state = "intercom"; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled, @@ -2113,8 +2118,8 @@ /area/kleibkhar/outpost/it) "ff" = ( /obj/machinery/light{ - dir = 4; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 4 }, /obj/structure/curtain/open/privacy, /obj/structure/hygiene/toilet{ @@ -2178,7 +2183,7 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/hydroponics) "fn" = ( /obj/structure/cable{ @@ -2216,7 +2221,7 @@ /area/exoplanet/kleibkhar) "fu" = ( /obj/structure/table, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/mess_hall) "fv" = ( @@ -2239,8 +2244,8 @@ icon_state = "1-2" }, /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/mess_hall) @@ -2269,16 +2274,16 @@ /area/kleibkhar/outpost/custodial) "fz" = ( /obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" + icon_state = "railing0-1"; + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/kleibkhar) "fA" = ( /obj/structure/hygiene/sink/kitchen{ - dir = 8; icon_state = "sink_alt"; + dir = 8; pixel_x = 18 }, /turf/simulated/floor/tiled, @@ -2325,20 +2330,20 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/effect/catwalk_plated, /turf/simulated/floor, /area/kleibkhar/outpost/hallway) "fH" = ( /obj/machinery/light{ - dir = 1; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 1 }, /obj/machinery/seed_storage, /turf/simulated/floor/tiled, @@ -2359,12 +2364,12 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/effect/catwalk_plated, /turf/simulated/floor, @@ -2375,8 +2380,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/papershredder, /turf/simulated/floor/tiled, @@ -2394,8 +2399,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/mess_hall) @@ -2405,8 +2410,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -2526,8 +2531,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -2540,7 +2545,7 @@ /area/kleibkhar/outpost/mess_hall) "gd" = ( /obj/item/inflatable_duck, -/turf/exterior/water, +/turf/exterior/open_ocean, /area/exoplanet/kleibkhar) "ge" = ( /obj/machinery/light, @@ -2664,8 +2669,8 @@ "gx" = ( /obj/machinery/light, /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /turf/simulated/floor/tiled/monotile, @@ -2981,8 +2986,8 @@ /area/kleibkhar/outpost/hydroponics) "hj" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/structure/closet, /obj/item/storage/box/taperolls, @@ -3004,8 +3009,8 @@ /area/kleibkhar/outpost/cloning) "hn" = ( /obj/structure/hygiene/sink{ - dir = 8; icon_state = "sink"; + dir = 8; pixel_x = -12 }, /obj/machinery/alarm{ @@ -3049,8 +3054,8 @@ /area/kleibkhar/outpost/hydroponics) "hu" = ( /obj/structure/hygiene/sink{ - dir = 4; icon_state = "sink"; + dir = 4; pixel_x = 12 }, /turf/simulated/floor/tiled/old_tile, @@ -3063,8 +3068,8 @@ "hw" = ( /obj/machinery/computer/operating, /obj/item/radio/intercom{ - dir = 8; icon_state = "intercom"; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/white, @@ -3079,8 +3084,8 @@ /area/exoplanet/kleibkhar) "hy" = ( /obj/structure/hygiene/sink{ - dir = 8; icon_state = "sink"; + dir = 8; pixel_x = -12 }, /obj/effect/decal/cleanable/blood, @@ -3121,8 +3126,8 @@ /area/kleibkhar/outpost/infirmary/surgery) "hC" = ( /obj/item/radio/intercom{ - dir = 4; icon_state = "intercom"; + dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled/white, @@ -3133,8 +3138,8 @@ dir = 8 }, /obj/machinery/light_switch/on{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -18 }, /turf/simulated/floor/tiled/white, @@ -3167,16 +3172,16 @@ /area/kleibkhar/outpost/infirmary/surgery) "hH" = ( /obj/machinery/door/airlock/double/glass/mining{ - dir = 8; - icon_state = "closed" + icon_state = "closed"; + dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/mining) "hI" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/machinery/power/apc/super{ icon_state = "apc0"; @@ -3235,8 +3240,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -3259,8 +3264,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -3309,8 +3314,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -3327,8 +3332,8 @@ /area/kleibkhar/outpost/infirmary/exam) "hW" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/machinery/power/apc{ icon_state = "apc0"; @@ -3442,6 +3447,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/vomit, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled/white, /area/kleibkhar/outpost/sleeproom) "im" = ( @@ -3480,8 +3488,8 @@ /obj/machinery/computer/modular/preset/cardslot/command, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/item/radio/intercom{ - dir = 8; icon_state = "intercom"; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/techfloor, @@ -3496,16 +3504,16 @@ icon_state = "1-2" }, /obj/item/radio/intercom{ - dir = 4; icon_state = "intercom"; + dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/mess_hall) "is" = ( /obj/item/radio/intercom{ - dir = 4; icon_state = "intercom"; + dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled, @@ -3548,8 +3556,8 @@ /area/exoplanet/kleibkhar) "iy" = ( /obj/machinery/conveyor{ - dir = 8; icon_state = "conveyor0"; + dir = 8; id_tag = "_cargo_shuttle_conveyors" }, /turf/simulated/floor/plating, @@ -3563,8 +3571,8 @@ /area/exoplanet/kleibkhar) "iA" = ( /obj/structure/hygiene/sink{ - dir = 4; icon_state = "sink"; + dir = 4; pixel_x = 12 }, /obj/machinery/light_switch/on{ @@ -3608,8 +3616,8 @@ /area/exoplanet/kleibkhar) "iG" = ( /obj/structure/sign/warning/docking_area{ - dir = 8; icon_state = "securearea"; + dir = 8; pixel_x = 32 }, /turf/exterior/barren, @@ -3625,14 +3633,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/infirmary) "iK" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed"; dir = 2 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/cargo) "iL" = ( /turf/simulated/floor/tiled, @@ -3640,16 +3648,16 @@ "iM" = ( /obj/machinery/button/blast_door{ dir = 4; - id_tag = "_k_cargo_dock_shutter"; - pixel_x = -24 + pixel_x = -24; + id_tag = "_k_cargo_dock_shutter" }, /obj/effect/floor_decal/industrial/warning/dust, /turf/exterior/barren, /area/kleibkhar/outpost/cargo/warehouse) "iN" = ( /obj/machinery/button/blast_door{ - id_tag = "_k_cargo_outer_shutter"; - pixel_y = 24 + pixel_y = 24; + id_tag = "_k_cargo_outer_shutter" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, @@ -3663,14 +3671,14 @@ id_tag = "_k_cargo_outer_shutter" }, /obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/cargo) "iQ" = ( /obj/machinery/button/blast_door{ - dir = 1; icon_state = "blastctrl"; - id_tag = "_k_cargo_inner_shutter"; - pixel_y = -24 + dir = 1; + pixel_y = -24; + id_tag = "_k_cargo_inner_shutter" }, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; @@ -3702,7 +3710,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/cargo) "iT" = ( /turf/simulated/wall/concrete, @@ -3712,8 +3720,8 @@ /area/kleibkhar/outpost/cargo/warehouse) "iV" = ( /obj/machinery/button/blast_door{ - id_tag = "_k_cargo_inner_shutter"; - pixel_y = 24 + pixel_y = 24; + id_tag = "_k_cargo_inner_shutter" }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/cargo/warehouse) @@ -3725,13 +3733,13 @@ /area/kleibkhar/outpost/cargo/warehouse) "iX" = ( /obj/machinery/door/blast/shutters{ - dir = 8; icon_state = "shutter1"; + dir = 8; id_tag = "_k_cargo_dock_shutter" }, /obj/machinery/conveyor{ - dir = 8; icon_state = "conveyor0"; + dir = 8; id_tag = "_cargo_shuttle_conveyors" }, /turf/simulated/floor/tiled/steel_ridged, @@ -3739,8 +3747,8 @@ "iY" = ( /obj/machinery/button/blast_door{ dir = 4; - id_tag = "_k_cargo_dock_shutter"; - pixel_x = -24 + pixel_x = -24; + id_tag = "_k_cargo_dock_shutter" }, /obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; @@ -3754,13 +3762,13 @@ /area/kleibkhar/outpost/cargo/warehouse) "ja" = ( /obj/machinery/conveyor{ - dir = 8; icon_state = "conveyor0"; + dir = 8; id_tag = "_cargo_shuttle_conveyors" }, /obj/machinery/door/blast/shutters{ - dir = 8; icon_state = "shutter1"; + dir = 8; id_tag = "_k_cargo_dock_shutter" }, /turf/simulated/floor/tiled/steel_ridged, @@ -3817,12 +3825,12 @@ /area/exoplanet/kleibkhar) "jj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -3834,8 +3842,8 @@ /area/kleibkhar/outpost/cargo) "jk" = ( /obj/machinery/computer/modular/preset/supply_public{ - dir = 8; - icon_state = "console-off" + icon_state = "console-off"; + dir = 8 }, /obj/machinery/light{ icon_state = "tube_map"; @@ -3846,8 +3854,8 @@ "jl" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/cargo/warehouse) @@ -3867,8 +3875,8 @@ /area/exoplanet/kleibkhar) "jo" = ( /obj/structure/sign/warning/docking_area{ - dir = 1; icon_state = "securearea"; + dir = 1; pixel_y = -32 }, /turf/exterior/barren, @@ -3879,7 +3887,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/kleibkhar/outpost/cargo/warehouse) "jq" = ( /obj/effect/decal/cleanable/dirt, @@ -3901,7 +3909,7 @@ /area/exoplanet/kleibkhar) "js" = ( /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar) "jt" = ( /obj/structure/railing/mapped{ @@ -3919,20 +3927,20 @@ "jv" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/light_switch{ - dir = 1; icon_state = "light0"; + dir = 1; pixel_y = -24 }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/cargo/warehouse) "jw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - icon_state = "11-supply" + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "11-scrubbers" + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" @@ -3966,8 +3974,8 @@ /area/kleibkhar/outpost/cargo) "jz" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube_map" + icon_state = "tube_map"; + dir = 8 }, /obj/machinery/power/apc{ icon_state = "apc0"; @@ -3990,8 +3998,8 @@ }, /obj/machinery/button/blast_door{ dir = 8; - id_tag = "_k_cargo_dock_shutter"; - pixel_x = 24 + pixel_x = 24; + id_tag = "_k_cargo_dock_shutter" }, /turf/simulated/floor/tiled, /area/kleibkhar/outpost/cargo/warehouse) @@ -4099,7 +4107,7 @@ /obj/structure/cable/yellow{ icon_state = "32-4" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar) "jN" = ( /obj/structure/railing/mapped{ @@ -4131,9 +4139,47 @@ /obj/abstract/level_data_spawner/exoplanet/kleibkhar, /turf/exterior/kleibkhar_grass, /area/exoplanet/kleibkhar) +"oA" = ( +/obj/abstract/landmark/latejoin/observer, +/turf/exterior/concrete, +/area/exoplanet/kleibkhar) +"pi" = ( +/obj/machinery/door/airlock/double/glass/civilian{ + icon_state = "closed" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/kleibkhar/outpost/sleeproom) +"rp" = ( +/turf/simulated/floor, +/area/kleibkhar/outpost/sleeproom) "ry" = ( /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) +"uC" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"vb" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 + }, +/obj/effect/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) "wt" = ( /obj/machinery/power/tracker, /obj/structure/cable/yellow{ @@ -4141,6 +4187,82 @@ }, /turf/simulated/floor/plating, /area/exoplanet/kleibkhar) +"wu" = ( +/turf/simulated/wall/concrete, +/area/kleibkhar/outpost/arrivals) +"Ac" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"AQ" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/danger{ + icon_state = "danger"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"Bi" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"Cl" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/kleibkhar/outpost/sleeproom) +"CZ" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/danger/corner{ + icon_state = "dangercorner"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"Dl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark/latejoin/observer, +/turf/simulated/floor/tiled/white, +/area/kleibkhar/outpost/sleeproom) +"HN" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 + }, +/obj/effect/floor_decal/industrial/danger/corner{ + icon_state = "dangercorner"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) "JN" = ( /obj/machinery/power/solar, /obj/effect/floor_decal/solarpanel, @@ -4149,13 +4271,94 @@ }, /turf/simulated/floor/plating, /area/exoplanet/kleibkhar) +"Lh" = ( +/obj/machinery/arrival_spawner, +/turf/simulated/floor/greengrid, +/area/kleibkhar/outpost/arrivals) +"QP" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/danger{ + icon_state = "danger"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) "Rh" = ( -/turf/exterior/water, +/turf/exterior/open_ocean, /area/exoplanet/kleibkhar) +"RD" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/danger/corner{ + icon_state = "dangercorner"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"Uc" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 + }, +/obj/machinery/power/apc, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"Ud" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/decal/cleanable/vomit{ + icon_state = "vomit_2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) +"UQ" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 + }, +/obj/machinery/alarm{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) "XM" = ( /obj/machinery/computer/modular/preset/cardslot/command, /turf/simulated/floor/tiled/techfloor, /area/kleibkhar/outpost/computer) +"XO" = ( +/obj/abstract/landmark/latejoin/observer, +/turf/simulated/floor/tiled, +/area/kleibkhar/outpost/mess_hall) +"Yn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/kleibkhar/outpost/arrivals) (1,1,1) = {" aq @@ -14965,7 +15168,7 @@ aN aN aN jO -aN +oA aN aN aN @@ -16798,7 +17001,7 @@ dC dC dC dC -ed +dC dC dC dC @@ -21823,11 +22026,11 @@ ih ih ih ih -ih -ih -ih -ih -ih +wu +wu +wu +wu +wu as as as @@ -22025,11 +22228,11 @@ ih ih ih ih -ih -ih -ih -ih -ih +wu +vb +AQ +RD +Uc bk cP cr @@ -22227,19 +22430,19 @@ ih ih ih ih -ih -ih -ih -ih -ih -bC +wu +Ac +Lh +Bi +uC +pi bY il ct ct ct ct -ct +Dl dV dZ it @@ -22248,7 +22451,7 @@ dj bG eL dL -dL +XO dL hU hq @@ -22429,12 +22632,12 @@ ih ih ih ih -ih -ih -ih -ih -ih -bC +wu +Ac +Lh +Yn +Ud +rp ca fq fq @@ -22443,7 +22646,7 @@ im fq fq fq -fq +Cl dj fG dj @@ -22631,11 +22834,11 @@ ih ih ih ih -ih -ih -ih -ih -ih +wu +HN +QP +CZ +UQ bk bx cm diff --git a/maps/kleibkhar/kleibkhar-4.dmm b/maps/kleibkhar/kleibkhar-4.dmm index 9509ff71ed7..4727c21c6d5 100644 --- a/maps/kleibkhar/kleibkhar-4.dmm +++ b/maps/kleibkhar/kleibkhar-4.dmm @@ -3,11 +3,11 @@ /turf/unsimulated/dark_border, /area/exoplanet/kleibkhar/sky) "ab" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ac" = ( /obj/effect/overmap/visitable/sector/planetoid/exoplanet/kleibkhar, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ad" = ( /obj/structure/railing/mapped{ @@ -112,7 +112,7 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ao" = ( /obj/structure/cable{ @@ -193,7 +193,7 @@ dir = 4 }, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ax" = ( /obj/structure/railing/mapped{ @@ -201,7 +201,7 @@ dir = 8 }, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ay" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, @@ -230,7 +230,7 @@ "aB" = ( /obj/structure/lattice, /obj/structure/railing/mapped, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aC" = ( /obj/structure/railing/mapped{ @@ -239,7 +239,7 @@ }, /obj/structure/lattice, /obj/structure/railing/mapped, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aD" = ( /obj/structure/cable{ @@ -258,7 +258,7 @@ dir = 8; icon_state = "railing0-1" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aE" = ( /obj/structure/cable{ @@ -347,7 +347,7 @@ dir = 1; icon_state = "railing0-1" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aM" = ( /obj/structure/railing/mapped{ @@ -359,7 +359,7 @@ dir = 1; icon_state = "railing0-1" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aN" = ( /obj/structure/lattice, @@ -378,7 +378,7 @@ /obj/structure/cable{ icon_state = "32-4" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aO" = ( /obj/structure/cable{ @@ -401,12 +401,12 @@ }, /obj/structure/railing/mapped, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aQ" = ( /obj/structure/railing/mapped, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aR" = ( /obj/structure/cable{ @@ -455,7 +455,7 @@ icon_state = "railing0-1" }, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aV" = ( /obj/structure/railing/mapped{ @@ -463,7 +463,7 @@ icon_state = "railing0-1" }, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aW" = ( /obj/structure/railing/mapped, @@ -483,7 +483,7 @@ /area/exoplanet/kleibkhar/sky) "aY" = ( /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "aZ" = ( /obj/structure/lattice, @@ -491,7 +491,7 @@ icon_state = "railing_preview"; dir = 4 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "ba" = ( /obj/structure/lattice, @@ -499,7 +499,7 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bb" = ( /obj/structure/catwalk, @@ -512,7 +512,7 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bc" = ( /obj/structure/lattice, @@ -521,7 +521,7 @@ icon_state = "railing_preview"; dir = 1 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bd" = ( /obj/structure/railing/mapped{ @@ -548,24 +548,24 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bg" = ( /obj/structure/lattice, /obj/structure/ladder, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bh" = ( /obj/structure/cable{ icon_state = "32-4" }, /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bi" = ( /obj/structure/lattice, /obj/structure/catwalk, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bj" = ( /obj/structure/catwalk, @@ -575,13 +575,13 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bk" = ( /obj/structure/lattice, /obj/structure/catwalk, /obj/structure/railing/mapped, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bl" = ( /obj/structure/railing/mapped{ @@ -600,13 +600,13 @@ /area/kleibkhar/atmos_pump) "bn" = ( /obj/abstract/level_data_spawner/exoplanet/kleibkhar/sky, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) "bo" = ( /obj/abstract/map_data{ height = 4 }, -/turf/exterior/open, +/turf/open, /area/exoplanet/kleibkhar/sky) (1,1,1) = {" diff --git a/maps/kleibkhar/kleibkhar.dm b/maps/kleibkhar/kleibkhar.dm index 278fcaa520a..1bbe986e252 100644 --- a/maps/kleibkhar/kleibkhar.dm +++ b/maps/kleibkhar/kleibkhar.dm @@ -4,11 +4,10 @@ #include "../../mods/species/bayliens/_bayliens.dme" #include "../../mods/species/vox/_vox.dme" #include "../../mods/content/xenobiology/_xenobiology.dme" - #include "../chargen/chargen_areas.dm" - #include "../chargen/chargen_objects.dm" - //#include "../utility/cargo_shuttle_tmpl.dm" #include "kleibkhar_zlevels.dm" + #include "../chargen/chargen_template.dm" + //#include "../utility/cargo_shuttle_tmpl.dm" #include "kleibkhar_areas.dm" #include "kleibkhar_departments.dm" #include "kleibkhar_jobs.dm" diff --git a/maps/kleibkhar/kleibkhar_areas.dm b/maps/kleibkhar/kleibkhar_areas.dm index 32fda1333f3..206189f2816 100644 --- a/maps/kleibkhar/kleibkhar_areas.dm +++ b/maps/kleibkhar/kleibkhar_areas.dm @@ -10,6 +10,10 @@ name = "Outpost" base_turf = /turf/exterior/barren +/area/kleibkhar/outpost/arrivals + name = "Arrivals" + icon_state = "start" + /area/kleibkhar/outpost/sleeproom name = "Cyrogenic Storage" icon_state = "cryo" @@ -97,8 +101,8 @@ /area/exoplanet/kleibkhar/sky name = "Up Above" icon_state = "blueold" - base_turf = /turf/exterior/open - open_turf = /turf/exterior/open + base_turf = /turf/open + open_turf = /turf/open /area/exoplanet/kleibkhar/mines name = "Deep Underground" @@ -106,7 +110,7 @@ ignore_mining_regen = TRUE is_outside = OUTSIDE_NO base_turf = /turf/exterior/barren - open_turf = /turf/exterior/open + open_turf = /turf/open area_flags = AREA_FLAG_IS_NOT_PERSISTENT | AREA_FLAG_IS_BACKGROUND | AREA_FLAG_ION_SHIELDED | AREA_FLAG_RAD_SHIELDED /area/exoplanet/kleibkhar/mines/depth_1 diff --git a/maps/kleibkhar/kleibkhar_defines.dm b/maps/kleibkhar/kleibkhar_defines.dm index 8e132984167..7a5e9ab801c 100644 --- a/maps/kleibkhar/kleibkhar_defines.dm +++ b/maps/kleibkhar/kleibkhar_defines.dm @@ -28,7 +28,7 @@ /decl/music_track/inorbit ) - starting_money = 5000 + starting_money = 0 department_money = 0 salary_modifier = 0.2 num_exoplanets = 0 diff --git a/maps/kleibkhar/kleibkhar_jobs.dm b/maps/kleibkhar/kleibkhar_jobs.dm index a0ee709c803..34859689722 100644 --- a/maps/kleibkhar/kleibkhar_jobs.dm +++ b/maps/kleibkhar/kleibkhar_jobs.dm @@ -11,10 +11,6 @@ announced = FALSE forced_spawnpoint = /decl/spawnpoint/chargen -// Currently, we don't want colonists to spawn with cash on hand, so we return 0 credits. -/datum/job/colonist/create_cash_on_hand(var/mob/living/carbon/human/H, var/datum/money_account/M) - return 0 - /decl/hierarchy/outfit/job/kleibkhar name = "Job - Kleibkhar Colonist" id_type = /obj/item/card/id/network diff --git a/maps/kleibkhar/kleibkhar_turf.dm b/maps/kleibkhar/kleibkhar_turf.dm index 58f2225cc3c..7084b30de26 100644 --- a/maps/kleibkhar/kleibkhar_turf.dm +++ b/maps/kleibkhar/kleibkhar_turf.dm @@ -154,18 +154,6 @@ var/global/list/kleibkhar_possible_tree_seeds = list( return TRUE . = ..() -/turf/exterior/kleibkhar_grass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if((temperature > T0C + 200 && prob(5)) || temperature > T0C + 1000) - melt() - -/turf/exterior/kleibkhar_grass/melt() - if(icon_state != "scorched") - SetName("scorched ground") - icon_state = "scorched" - icon_edge_layer = -1 - footstep_type = /decl/footsteps/asteroid - color = null - /////////////////////////////////////////////////////////////////////////// // Mining Turfs /////////////////////////////////////////////////////////////////////////// @@ -176,7 +164,7 @@ var/global/list/kleibkhar_possible_tree_seeds = list( /turf/exterior/wall/kleibkhar material = /decl/material/solid/stone/sandstone floor_type = /turf/exterior/barren/mining - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open /////////////////////////////////////////////////////////////////////////// // Terraforming @@ -205,7 +193,7 @@ var/global/list/exterior_mud_dark_radial_choices to_chat(user, SPAN_WARNING("You can't manipulate the ground until you remove the plants here.")) return TRUE - var/obj/item/shovel/S = W + var/obj/item/tool/shovel/S = W if(!LAZYLEN(exterior_mud_dark_radial_choices)) cache_radial_shovel_interactions() diff --git a/maps/kleibkhar/kleibkhar_zlevels.dm b/maps/kleibkhar/kleibkhar_zlevels.dm index 5aa44daad61..ba3b28a3f04 100644 --- a/maps/kleibkhar/kleibkhar_zlevels.dm +++ b/maps/kleibkhar/kleibkhar_zlevels.dm @@ -37,7 +37,7 @@ level_id = "kleibkhar_sky" ambient_light_level = 1.0 base_area = /area/exoplanet/kleibkhar/sky - base_turf = /turf/exterior/open + base_turf = /turf/open /datum/level_data/planetoid/kleibkhar/underground name = "kleibkhar underground" diff --git a/maps/ministation/hud.dmi b/maps/ministation/hud.dmi index f5b80db1956..f6925d9b0d0 100644 Binary files a/maps/ministation/hud.dmi and b/maps/ministation/hud.dmi differ diff --git a/maps/ministation/icons/headset_cargo.dmi b/maps/ministation/icons/headset_cargo.dmi deleted file mode 100644 index fd3fceb7cfd..00000000000 Binary files a/maps/ministation/icons/headset_cargo.dmi and /dev/null differ diff --git a/maps/ministation/icons/headset_security.dmi b/maps/ministation/icons/headset_security.dmi deleted file mode 100644 index f03f1372501..00000000000 Binary files a/maps/ministation/icons/headset_security.dmi and /dev/null differ diff --git a/maps/ministation/jobs/civilian.dm b/maps/ministation/jobs/civilian.dm index 34acd1033fa..b35ccd1b202 100644 --- a/maps/ministation/jobs/civilian.dm +++ b/maps/ministation/jobs/civilian.dm @@ -6,16 +6,16 @@ economic_power = 1 access = list() minimal_access = list() - alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor") + hud_icon = "hudassistant" + alt_titles = list("Technical Recruit","Medical Recruit","Research Recruit","Visitor") outfit_type = /decl/hierarchy/outfit/job/ministation_assistant department_types = list(/decl/department/civilian) event_categories = list(ASSIGNMENT_GARDENER) /datum/job/ministation/assistant/get_access() - if(config.assistant_maint) + if(get_config_value(/decl/config/toggle/assistant_maint)) return list(access_maint_tunnels) - else - return list() + return list() /decl/hierarchy/outfit/job/ministation_assistant name = "Job - Ministation Assistant" @@ -24,7 +24,7 @@ title = "Bartender" alt_titles = list("Cook","Barista") supervisors = "the Lieutenant and the Captain" - total_positions = 1 + total_positions = 2 spawn_positions = 1 outfit_type = /decl/hierarchy/outfit/job/ministation/bartender department_types = list(/decl/department/service) @@ -49,13 +49,13 @@ SKILL_COOKING = SKILL_MAX, SKILL_BOTANY = SKILL_MAX ) - skill_points = 20 + skill_points = 30 /datum/job/ministation/cargo title = "Cargo Technician" alt_titles = list("Shaft Miner","Drill Technician","Prospector") supervisors = "the Lieutenant and the Captain" - total_positions = 2 + total_positions = 3 spawn_positions = 1 outfit_type = /decl/hierarchy/outfit/job/ministation/cargo department_types = list(/decl/department/service) @@ -68,7 +68,8 @@ access_mailsorting, access_mining, access_mining_station, - access_external_airlocks + access_external_airlocks, + access_eva ) minimal_access = list( access_cargo, @@ -92,7 +93,7 @@ SKILL_EVA = SKILL_MAX, SKILL_FINANCE = SKILL_MAX ) - skill_points = 20 + skill_points = 30 software_on_spawn = list( /datum/computer_file/program/supply, /datum/computer_file/program/deck_management, @@ -103,7 +104,7 @@ title = "Janitor" event_categories = list(ASSIGNMENT_JANITOR) department_types = list(/decl/department/service) - total_positions = 1 + total_positions = 2 spawn_positions = 1 supervisors = "the Lieutenant and the Captain" economic_power = 3 @@ -132,7 +133,7 @@ min_skill = list( SKILL_HAULING = SKILL_BASIC ) - skill_points = 18 + skill_points = 28 /datum/job/ministation/librarian title = "Librarian" diff --git a/maps/ministation/jobs/command.dm b/maps/ministation/jobs/command.dm index 235063381df..d5404a9bb46 100644 --- a/maps/ministation/jobs/command.dm +++ b/maps/ministation/jobs/command.dm @@ -1,6 +1,6 @@ /datum/job/ministation/captain title = "Captain" - supervisors = "your profit margin, your conscience, and the Trademaster" + supervisors = "your profit margin, your conscience, and the watchful eye of the Company Rep" outfit_type = /decl/hierarchy/outfit/job/ministation/captain min_skill = list( SKILL_LITERACY = SKILL_ADEPT, @@ -12,12 +12,13 @@ SKILL_PILOT = SKILL_MAX, SKILL_WEAPONS = SKILL_MAX ) - skill_points = 30 + skill_points = 40 head_position = 1 department_types = list(/decl/department/command) total_positions = 1 spawn_positions = 1 selection_color = "#1d1d4f" + hud_icon = "hudcaptain" req_admin_notify = 1 access = list() minimal_access = list() @@ -37,7 +38,7 @@ return get_all_station_access() /mob/proc/freetradeunion_rename_company() - set name = "Rename Free Trade Union" + set name = "Defect from Corporate Control" set category = "Captain's Powers" var/company = sanitize(input(src, "What should your enterprise be called?", "Company name", global.using_map.company_name), MAX_NAME_LEN) if(!company) @@ -63,6 +64,7 @@ total_positions = 1 spawn_positions = 1 selection_color = "#2f2f7f" + hud_icon = "hudlieutenant" req_admin_notify = 1 minimal_player_age = 14 economic_power = 10 @@ -74,9 +76,11 @@ access_sec_doors, access_brig, access_forensics_lockers, + access_armory, access_heads, access_medical, access_engine, + access_atmospherics, access_change_ids, access_ai_upload, access_eva, @@ -89,6 +93,10 @@ access_morgue, access_crematorium, access_kitchen, + access_mining, + access_xenobiology, + access_robotics, + access_engine_equip, access_cargo, access_cargo_bot, access_mailsorting, @@ -111,9 +119,11 @@ access_sec_doors, access_brig, access_forensics_lockers, + access_armory, access_heads, access_medical, access_engine, + access_atmospherics, access_change_ids, access_ai_upload, access_eva, @@ -123,6 +133,10 @@ access_bar, access_janitor, access_construction, + access_mining, + access_xenobiology, + access_robotics, + access_engine_equip, access_morgue, access_crematorium, access_kitchen, @@ -154,5 +168,4 @@ SKILL_PILOT = SKILL_MAX, SKILL_FINANCE = SKILL_MAX ) - skill_points = 30 - alt_titles = list() + skill_points = 40 diff --git a/maps/ministation/jobs/corporate.dm b/maps/ministation/jobs/corporate.dm new file mode 100644 index 00000000000..885feaeb542 --- /dev/null +++ b/maps/ministation/jobs/corporate.dm @@ -0,0 +1,96 @@ +/datum/job/ministation/corporate/rep + title = "Company Representative" + alt_titles = list("Narc") + hud_icon = "hudnarc" + spawn_positions = 1 + total_positions = 2 + req_admin_notify = 1 + guestbanned = 1 + supervisors = "the Board of Directors" + outfit_type = /decl/hierarchy/outfit/job/ministation/corporate + min_skill = list( + SKILL_WEAPONS = SKILL_BASIC, + SKILL_FINANCE = SKILL_EXPERT, + SKILL_LITERACY = SKILL_ADEPT, + SKILL_PILOT = SKILL_ADEPT, + SKILL_MEDICAL = SKILL_ADEPT + ) + max_skill = list( + SKILL_PILOT = SKILL_MAX, + SKILL_FINANCE = SKILL_MAX, + SKILL_MEDICAL = SKILL_MAX, + SKILL_ANATOMY = SKILL_EXPERT + ) + skill_points = 35 + department_types = list(/decl/department/corporate) + selection_color = "#a89004" + access = list( + access_lawyer, + access_security, + access_sec_doors, + access_brig, + access_heads, + access_medical, + access_engine, + access_atmospherics, + access_ai_upload, + access_eva, + access_bridge, + access_all_personal_lockers, + access_maint_tunnels, + access_bar, + access_janitor, + access_construction, + access_morgue, + access_crematorium, + access_kitchen, + access_cargo, + access_cargo_bot, + access_qm, + access_hydroponics, + access_lawyer, + access_chapel_office, + access_library, + access_research, + access_mining, + access_heads_vault, + access_mining_station, + access_hop, + access_RC_announce, + access_keycard_auth, + access_gateway + ) + + minimal_access = list( + access_lawyer, + access_security, + access_sec_doors, + access_brig, + access_medical, + access_heads, + access_engine, + access_atmospherics, + access_ai_upload, + access_eva, + access_bridge, + access_maint_tunnels, + access_bar, + access_janitor, + access_construction, + access_morgue, + access_crematorium, + access_kitchen, + access_cargo, + access_cargo_bot, + access_hydroponics, + access_chapel_office, + access_library, + access_research, + access_mining, + access_heads_vault, + access_mining_station, + access_hop, + access_RC_announce, + access_keycard_auth, + access_gateway + ) \ No newline at end of file diff --git a/maps/ministation/jobs/engineering.dm b/maps/ministation/jobs/engineering.dm index 6f99b0e04e1..eb0bf13f265 100644 --- a/maps/ministation/jobs/engineering.dm +++ b/maps/ministation/jobs/engineering.dm @@ -1,6 +1,6 @@ /datum/job/ministation/engineer title = "Station Engineer" - supervisors = "the Lieutenant and the Captain" + supervisors = "the Head Engineer" total_positions = 2 spawn_positions = 2 outfit_type = /decl/hierarchy/outfit/job/ministation/engineer @@ -45,6 +45,91 @@ SKILL_ATMOS = SKILL_MAX, SKILL_ENGINES = SKILL_MAX ) - skill_points = 20 - alt_titles = list("Atmospheric Technician") + skill_points = 30 + alt_titles = list("Atmospheric Technician", "Electrician", "Maintenance Technician") + event_categories = list(ASSIGNMENT_ENGINEER) + +/datum/job/ministation/engineer/head + title = "Head Engineer" + head_position = 1 + department_types = list( + /decl/department/engineering, + /decl/department/command + ) + total_positions = 1 + spawn_positions = 1 + selection_color = "#7f6e2c" + req_admin_notify = 1 + economic_power = 10 + ideal_character_age = 50 + guestbanned = 1 + must_fill = 1 + not_random_selectable = 1 + hud_icon = "hudchiefengineer" + access = list( + access_engine, + access_engine_equip, + access_tech_storage, + access_maint_tunnels, + access_heads, + access_teleporter, + access_external_airlocks, + access_atmospherics, + access_emergency_storage, + access_eva, + access_bridge, + access_construction, access_sec_doors, + access_ce, + access_RC_announce, + access_keycard_auth, + access_tcomsat, + access_mining, + access_kitchen, + access_robotics, + access_hydroponics, + access_ai_upload + ) + minimal_access = list( + access_engine, + access_engine_equip, + access_tech_storage, + access_maint_tunnels, + access_heads, + access_teleporter, + access_external_airlocks, + access_atmospherics, + access_emergency_storage, + access_eva, + access_bridge, + access_construction, + access_sec_doors, + access_ce, access_RC_announce, + access_keycard_auth, + access_tcomsat, + access_mining, + access_kitchen, + access_robotics, + access_hydroponics, + access_ai_upload + ) + minimal_player_age = 14 + supervisors = "the Captain" + outfit_type = /decl/hierarchy/outfit/job/ministation/engineer/head + min_skill = list( + SKILL_LITERACY = SKILL_ADEPT, + SKILL_COMPUTER = SKILL_ADEPT, + SKILL_EVA = SKILL_ADEPT, + SKILL_CONSTRUCTION = SKILL_ADEPT, + SKILL_ELECTRICAL = SKILL_ADEPT, + SKILL_ATMOS = SKILL_ADEPT, + SKILL_ENGINES = SKILL_EXPERT + ) + max_skill = list( + SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX + ) + skill_points = 40 + alt_titles = list("Chief of Engineering") event_categories = list(ASSIGNMENT_ENGINEER) \ No newline at end of file diff --git a/maps/ministation/jobs/medical.dm b/maps/ministation/jobs/medical.dm index d1f1d31fcb5..49d615c041f 100644 --- a/maps/ministation/jobs/medical.dm +++ b/maps/ministation/jobs/medical.dm @@ -2,11 +2,11 @@ title = "Medical Doctor" department_types = list(/decl/department/medical) head_position = 0 - supervisors = "the Lieutenant and the Captain" + supervisors = "the Head Doctor" total_positions = 2 spawn_positions = 2 - alt_titles = list("Surgeon","Chemist","Nurse") - skill_points = 24 + alt_titles = list("Chemist", "Nurse", "Surgeon") + skill_points = 34 min_skill = list( SKILL_LITERACY = SKILL_ADEPT, SKILL_MEDICAL = SKILL_EXPERT, @@ -38,3 +38,77 @@ outfit_type = /decl/hierarchy/outfit/job/ministation/doctor minimal_player_age = 3 event_categories = list(ASSIGNMENT_MEDICAL) + +/datum/job/ministation/doctor/head + title = "Head Doctor" + head_position = 1 + department_types = list( + /decl/department/medical, + /decl/department/command + ) + supervisors = "the Captain and your own ethics" + outfit_type = /decl/hierarchy/outfit/job/ministation/doctor/head + alt_titles = list("Chief Medical Officer", "Head Surgeon") + total_positions = 1 + spawn_positions = 1 + skill_points = 38 + guestbanned = 1 + must_fill = 1 + not_random_selectable = 1 + selection_color = "#026865" + req_admin_notify = 1 + economic_power = 10 + hud_icon = "hudheaddoctor" + access = list( + access_medical, + access_medical_equip, + access_morgue, + access_bridge, + access_heads, + access_engine_equip, + access_eva, + access_chemistry, + access_virology, + access_cmo, + access_surgery, + access_RC_announce, + access_keycard_auth, + access_sec_doors, + access_psychiatrist, + access_eva, + access_mining, + access_kitchen, + access_xenobiology, + access_robotics, + access_hydroponics, + access_maint_tunnels, + access_external_airlocks + ) + minimal_access = list( + access_medical, + access_medical_equip, + access_morgue, + access_bridge, + access_heads, + access_engine_equip, + access_eva, + access_chemistry, + access_virology, + access_cmo, + access_surgery, + access_RC_announce, + access_keycard_auth, + access_sec_doors, + access_psychiatrist, + access_eva, + access_mining, + access_kitchen, + access_xenobiology, + access_robotics, + access_hydroponics, + access_maint_tunnels, + access_external_airlocks + ) + minimal_player_age = 14 + ideal_character_age = 50 + event_categories = list(ASSIGNMENT_MEDICAL) \ No newline at end of file diff --git a/maps/ministation/jobs/science.dm b/maps/ministation/jobs/science.dm index e0c020a2309..cce6f36589e 100644 --- a/maps/ministation/jobs/science.dm +++ b/maps/ministation/jobs/science.dm @@ -1,11 +1,12 @@ /datum/job/ministation/scientist - title = "Scientist" - alt_titles = list("Researcher","Xenobiologist","Roboticist","Xenobotanist") - supervisors = "the Lieutenant and the Captain" + title = "Researcher" + alt_titles = list("Scientist","Xenobiologist","Roboticist","Xenobotanist") + supervisors = "the Head Researcher" spawn_positions = 1 total_positions = 2 department_types = list(/decl/department/science) outfit_type = /decl/hierarchy/outfit/job/ministation/scientist + hud_icon = "hudscientist" min_skill = list( SKILL_LITERACY = SKILL_ADEPT, SKILL_COMPUTER = SKILL_BASIC, @@ -17,7 +18,7 @@ SKILL_DEVICES = SKILL_MAX, SKILL_SCIENCE = SKILL_MAX ) - skill_points = 24 + skill_points = 34 access = list( access_robotics, access_tox, @@ -37,3 +38,94 @@ selection_color = "#633d63" economic_power = 7 event_categories = list(ASSIGNMENT_SCIENTIST) + +/datum/job/ministation/scientist/head + title = "Research Director" + supervisors = "the Captain" + spawn_positions = 1 + total_positions = 1 + alt_titles = list("Head Researcher", "Chief Researcher") + outfit_type = /decl/hierarchy/outfit/job/ministation/scientist/head + min_skill = list( + SKILL_LITERACY = SKILL_ADEPT, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_FINANCE = SKILL_ADEPT, + SKILL_BOTANY = SKILL_BASIC, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_DEVICES = SKILL_BASIC, + SKILL_SCIENCE = SKILL_ADEPT + ) + max_skill = list( + SKILL_ANATOMY = SKILL_MAX, + SKILL_DEVICES = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX + ) + skill_points = 40 + head_position = 1 + department_types = list( + /decl/department/science, + /decl/department/command + ) + selection_color = "#ad6bad" + req_admin_notify = 1 + economic_power = 15 + hud_icon = "hudheadscientist" + access = list( + access_rd, + access_bridge, + access_tox, + access_morgue, + access_tox_storage, + access_teleporter, + access_sec_doors, + access_heads, + access_eva, + access_research, + access_robotics, + access_xenobiology, + access_ai_upload, + access_tech_storage, + access_RC_announce, + access_keycard_auth, + access_tcomsat, + access_gateway, + access_xenoarch, + access_engine_equip, + access_mining, + access_kitchen, + access_hydroponics, + access_network + ) + minimal_access = list( + access_rd, + access_bridge, + access_tox, + access_morgue, + access_tox_storage, + access_teleporter, + access_sec_doors, + access_heads, + access_eva, + access_research, + access_robotics, + access_xenobiology, + access_ai_upload, + access_tech_storage, + access_RC_announce, + access_keycard_auth, + access_tcomsat, + access_gateway, + access_xenoarch, + access_engine_equip, + access_mining, + access_kitchen, + access_hydroponics, + access_network + ) + minimal_player_age = 14 + ideal_character_age = 50 + guestbanned = 1 + must_fill = 1 + not_random_selectable = 1 + event_categories = list(ASSIGNMENT_SCIENTIST) + diff --git a/maps/ministation/jobs/security.dm b/maps/ministation/jobs/security.dm index ad6e2324b57..b1e691ccb99 100644 --- a/maps/ministation/jobs/security.dm +++ b/maps/ministation/jobs/security.dm @@ -1,21 +1,25 @@ /datum/job/ministation/security title = "Security Officer" alt_titles = list("Warden") - supervisors = "the Lieutenant and the Captain" + supervisors = "the Head of Security" spawn_positions = 1 total_positions = 2 outfit_type = /decl/hierarchy/outfit/job/ministation/security department_types = list(/decl/department/security) - selection_color = "#990000" + selection_color = COLOR_BLOOD_RED economic_power = 7 minimal_player_age = 7 access = list( access_security, - access_brig + access_brig, + access_lawyer, + access_maint_tunnels ) minimal_access = list( access_security, access_forensics_lockers, + access_maint_tunnels, + access_lawyer, access_brig ) min_skill = list( @@ -28,13 +32,13 @@ SKILL_COMBAT = SKILL_MAX, SKILL_WEAPONS = SKILL_MAX ) - skill_points = 20 + skill_points = 30 event_categories = list(ASSIGNMENT_SECURITY) /datum/job/ministation/detective title = "Detective" alt_titles = list("Inspector") - supervisors = "Justice... and the Trademaster" + supervisors = "Justice... and the Captain" spawn_positions = 1 total_positions = 1 outfit_type = /decl/hierarchy/outfit/job/ministation/detective @@ -43,11 +47,18 @@ economic_power = 7 minimal_player_age = 3 access = list( - access_forensics_lockers + access_forensics_lockers, + access_brig, + access_security, + access_lawyer, + access_maint_tunnels ) minimal_access = list( access_security, - access_forensics_lockers + access_brig, + access_lawyer, + access_forensics_lockers, + access_maint_tunnels ) min_skill = list( SKILL_LITERACY = SKILL_BASIC, @@ -61,4 +72,70 @@ SKILL_WEAPONS = SKILL_MAX, SKILL_FORENSICS = SKILL_MAX ) - skill_points = 24 \ No newline at end of file + skill_points = 34 + +/datum/job/ministation/security/head + title = "Head of Security" + supervisors = "the Captain" + outfit_type = /decl/hierarchy/outfit/job/ministation/security/head + head_position = 1 + department_types = list( + /decl/department/security, + /decl/department/command + ) + total_positions = 1 + spawn_positions = 1 + selection_color = "#9d2300" + req_admin_notify = 1 + minimal_player_age = 14 + economic_power = 10 + ideal_character_age = 50 + guestbanned = 1 + not_random_selectable = 1 + hud_icon = "hudhos" + access = list( + access_security, + access_sec_doors, + access_brig, + access_eva, + access_forensics_lockers, + access_heads, + access_lawyer, + access_maint_tunnels, + access_armory, + access_engine_equip, + access_mining, + access_kitchen, + access_robotics, + access_hydroponics, + access_hos + ) + minimal_access = list( + access_security, + access_sec_doors, + access_brig, + access_lawyer, + access_eva, + access_forensics_lockers, + access_heads, + access_maint_tunnels, + access_armory, + access_engine_equip, + access_mining, + access_kitchen, + access_robotics, + access_hydroponics, + access_hos + ) + min_skill = list( + SKILL_LITERACY = SKILL_BASIC, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_COMBAT = SKILL_ADEPT, + SKILL_WEAPONS = SKILL_ADEPT + ) + max_skill = list( + SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX + ) + skill_points = 40 + alt_titles = list("Security Commander") diff --git a/maps/ministation/ministation.dmm b/maps/ministation/ministation-0.dmm similarity index 65% rename from maps/ministation/ministation.dmm rename to maps/ministation/ministation-0.dmm index e95dcf69a13..afb56311aeb 100644 --- a/maps/ministation/ministation.dmm +++ b/maps/ministation/ministation-0.dmm @@ -16,436 +16,170 @@ /turf/space, /area/space) "ae" = ( -/turf/simulated/wall, -/area/ministation/science) -"af" = ( -/turf/exterior/wall/random/ministation, -/area/space) -"ag" = ( -/obj/structure/mirror{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"ah" = ( -/turf/simulated/wall, -/area/ministation/bridge) -"ai" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "bridgeblast"; - name = "bridge blast door" - }, -/turf/simulated/floor/plating, -/area/ministation/bridge) -"aj" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/camera/network/engineering{ + name = "SM Airlock" }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "bridgeblast"; - name = "bridge blast door" +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/bridge) +/turf/simulated/floor/tiled, +/area/ministation/engine) +"af" = ( +/turf/exterior/wall/random/ministation, +/area/space) "ak" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "bridgeblast"; - name = "bridge blast door" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/bridge) -"al" = ( /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "bridgeblast"; - name = "bridge blast door" + icon_state = "1-8" }, /turf/simulated/floor/plating, -/area/ministation/bridge) +/area/ministation/maint/eastatmos) "am" = ( -/obj/structure/table/reinforced, -/obj/item/wrench, -/obj/item/assembly/timer, -/obj/item/assembly/signaler, -/obj/item/assembly/signaler, -/obj/item/multitool, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"an" = ( -/obj/structure/closet/secure_closet/medical3, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ao" = ( -/obj/structure/table/reinforced, -/obj/machinery/faxmachine/mapped, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ap" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"aq" = ( +/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"ar" = ( +/area/ministation/engine) +"aq" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/westleft, /obj/structure/disposalpipe/trunk{ - dir = 4 + dir = 2 + }, +/obj/machinery/door/blast/shutters{ + id_tag = "cargoshut"; + name = "cargo shutters" }, -/obj/structure/disposaloutlet, -/turf/simulated/floor, -/area/ministation/science) -"as" = ( -/obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red/full, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"at" = ( -/obj/machinery/computer/station_alert/all, -/obj/effect/floor_decal/corner/yellow/full, +/area/ministation/cargo) +"as" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/flora/pottedplant/smalltree, /turf/simulated/floor/tiled, -/area/ministation/bridge) +/area/ministation/hall/n) "au" = ( /turf/simulated/wall, /area/ministation/cargo) "av" = ( /turf/simulated/wall/r_wall, /area/ministation/engine) -"aw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor, -/area/ministation/science) "ax" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue/full, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ay" = ( -/obj/effect/floor_decal/corner/white/full, -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"az" = ( -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast2"; - name = "enclosure 2 blast door" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor, -/area/ministation/science) -"aB" = ( -/obj/structure/table/reinforced, -/obj/item/folder/envelope/nuke_instructions, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aC" = ( -/obj/structure/table/reinforced, -/obj/item/radio, -/obj/item/radio/beacon, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aD" = ( -/turf/simulated/wall/r_wall, -/area/ministation/bridge) +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) "aE" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/door/blast/regular/open{ - id_tag = "bridgeblast"; - name = "bridge blast door" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/ministation/bridge) -"aF" = ( -/obj/structure/glass_tank/aquarium, -/mob/living/simple_animal/aquatic/fish, -/mob/living/simple_animal/aquatic/fish, -/mob/living/simple_animal/aquatic/fish, -/mob/living/simple_animal/aquatic/fish, -/mob/living/simple_animal/aquatic/fish, -/mob/living/simple_animal/aquatic/fish/grump, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aG" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/obj/machinery/alarm{ + pixel_y = 23 }, -/area/ministation/telecomms) -"aH" = ( -/obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/floor/plating, -/area/ministation/engine) -"aI" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aJ" = ( -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aK" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 +/area/ministation/maint/westatmos) +"aG" = ( +/obj/structure/table, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, +/obj/item/blueprints, +/obj/item/cell, /turf/simulated/floor/tiled, -/area/ministation/bridge) +/area/ministation/eva) "aL" = ( -/obj/structure/bed/chair/comfy/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 +/obj/machinery/power/apc{ + name = "_South APC"; + pixel_y = -24 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aM" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aN" = ( -/obj/structure/bed/chair/comfy/blue, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/white{ - dir = 5 + icon_state = "0-8" }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aO" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aP" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/regular, -/obj/item/storage/toolbox/emergency, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aQ" = ( -/obj/structure/displaycase, -/obj/item/sword/replica/officersword, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"aR" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) +/turf/simulated/floor/plating, +/area/ministation/dorms) "aS" = ( /turf/simulated/wall, /area/ministation/ai_sat) -"aT" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"aU" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "slimeblast3"; - name = "Enclosure 3 Blastdoors Button" - }, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled, -/area/ministation/science) "aV" = ( /turf/simulated/floor/tiled, -/area/ministation/hall/s) +/area/ministation/hall/s1) "aW" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "vaultbolt"; - name = "Vault Deadbolt Button"; - pixel_y = 27 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/firealarm{ + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"aX" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/machinery/door/airlock/command{ - autoset_access = 0; +/obj/structure/closet/secure_closet{ + closet_appearance = /decl/closet_appearance/secure_closet/command; + name = "captain's locker"; req_access = list("ACCESS_CAPTAIN") }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/ministation/bridge) -"aY" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ba" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/camera/network/command{ + initial_access = null }, /turf/simulated/floor/tiled, -/area/ministation/bridge) +/area/ministation/eva) +"aZ" = ( +/obj/structure/fitness/punchingbag, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "bb" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) +/obj/machinery/fabricator/pipe/disposal, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "bc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 }, -/obj/item/radio/intercom, -/turf/simulated/floor/tiled, -/area/ministation/bridge) +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "bd" = ( /obj/machinery/light{ dir = 1 }, /obj/item/inflatable_dispenser, /obj/structure/table, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"be" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bg" = ( -/turf/simulated/wall/r_wall, -/area/ministation/bridge/vault) -"bh" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) "bi" = ( -/obj/structure/filing_cabinet, -/obj/machinery/light_switch{ - pixel_y = 28 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) +/obj/abstract/landmark/start{ + name = "Assistant" + }, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) "bj" = ( -/turf/simulated/wall, -/area/ministation/cafe) +/obj/structure/table/reinforced, +/obj/item/rcd, +/obj/item/rcd_ammo/large, +/turf/simulated/floor/carpet/orange, +/area/ministation/engine) "bk" = ( /obj/effect/floor_decal/corner/yellow{ dir = 5 @@ -453,397 +187,181 @@ /turf/simulated/floor/tiled, /area/ministation/engine) "bl" = ( -/turf/simulated/wall/r_wall, -/area/ministation/telecomms) +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "westatmos_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) "bm" = ( /obj/structure/closet/radiation, +/obj/machinery/camera/network/engineering, /turf/simulated/floor/tiled, /area/ministation/engine) -"bn" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Vault APC"; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/simulated/floor/bluegrid, -/area/ministation/bridge/vault) -"bo" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) "bp" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/ministation/bridge/vault) -"bq" = ( -/turf/simulated/floor/bluegrid, -/area/ministation/bridge/vault) -"br" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"bs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/obj/effect/floor_decal/corner/red{ + dir = 6 }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) "bt" = ( -/obj/item/flashlight/lamp/green, -/obj/structure/table/woodentable/mahogany, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"bv" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, +/obj/structure/grille, +/obj/structure/wall_frame, +/turf/simulated/floor/plating, +/area/ministation/trash) +"bB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bx" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase, -/obj/item/flash, -/obj/item/flash, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"by" = ( -/obj/structure/closet, -/obj/item/stack/material/ingot/mapped/gold, -/obj/item/stack/material/ingot/mapped/gold, -/obj/item/stack/material/ingot/mapped/gold, -/obj/item/storage/belt/champion, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"bz" = ( -/obj/abstract/landmark/start{ - name = "Captain" - }, +/area/ministation/engine) +"bC" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, +/obj/machinery/door/airlock/glass/command, +/obj/machinery/door/firedoor, /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/bed/chair/comfy/captain, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bA" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/blast_door{ - id_tag = "bridgeblast" - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "4-8" - }, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"bC" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ +/area/ministation/eva) +"bE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bD" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "vaultbolt"; - req_access = list("ACCESS_VAULT") +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"bN" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"bE" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + icon_state = "map_injector"; + id_tag = "n2_in"; + use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/reinforced/oxygen, +/area/ministation/atmospherics) +"bO" = ( +/obj/structure/window/reinforced{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"bF" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "air_out"; + internal_pressure_bound = 2000; + internal_pressure_bound_default = 2000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/ministation/atmospherics) +"bP" = ( /obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/bluegrid, -/area/ministation/bridge/vault) -"bG" = ( -/obj/structure/closet/secure_closet/captains, -/obj/item/clothing/suit/storage/leather_jacket/nanotrasen, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"bH" = ( -/obj/machinery/camera{ - c_tag = "Captain's Quarters"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 + icon_state = "0-8" }, -/obj/structure/bed/chair/comfy/captain{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"bI" = ( -/obj/structure/table/woodentable/mahogany, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/carpet/blue, -/area/ministation/bridge) -"bK" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"bV" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 }, -/obj/machinery/keycard_auth{ - pixel_y = -24 +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/item/chems/spray/extinguisher, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 }, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"bM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/area/ministation/eva) +"bW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"bN" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/eva) +"cb" = ( +/obj/item/stack/material/ore/iron{ + pixel_x = -1; + pixel_y = -4 }, -/obj/abstract/landmark{ - name = "bluespace_a" +/obj/item/stack/material/ore/iron{ + pixel_x = 2; + pixel_y = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/stack/material/ore/iron, +/turf/simulated/floor/airless, +/area/space) +"cc" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/material_processing/unloader{ + input_turf = 4; + output_turf = 1 }, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"bP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/area/ministation/cargo) +"cd" = ( +/obj/item/stack/material/rods/fifty, +/turf/simulated/floor/airless, +/area/space) +"ce" = ( +/obj/item/storage/ore, +/turf/simulated/floor/airless, +/area/space) +"cf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"bQ" = ( -/obj/machinery/keycard_auth{ - pixel_y = -24 +/area/ministation/cargo) +"cg" = ( +/obj/structure/bed/chair/comfy, +/turf/simulated/floor/carpet/blue2, +/area/ministation/hall/s1) +"cj" = ( +/obj/machinery/generator{ + anchored = 1 }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bR" = ( -/obj/machinery/nuclearbomb/station{ - pixel_y = 2 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"ck" = ( +/obj/machinery/light/small{ + dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/ministation/bridge/vault) -"bS" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"bT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"bU" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bV" = ( -/obj/machinery/camera/autoname{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bW" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/department/bridge{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"bX" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"bZ" = ( -/obj/machinery/network/requests_console{ - announcementConsole = 1; - department = "Bridge"; - name = "Bridge RC"; - pixel_y = -30 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ca" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"cb" = ( -/obj/item/stack/material/ore/iron{ - pixel_x = -1; - pixel_y = -4 - }, -/obj/item/stack/material/ore/iron{ - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/stack/material/ore/iron, -/turf/simulated/floor/airless, -/area/space) -"cc" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/material_processing/unloader{ - input_turf = 4; - output_turf = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"cd" = ( -/obj/item/stack/material/rods/fifty, -/turf/simulated/floor/airless, -/area/space) -"ce" = ( -/obj/item/storage/ore, -/turf/simulated/floor/airless, -/area/space) -"cf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"cg" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"ch" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ci" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/command, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ck" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/space) -"cl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/loading{ - dir = 8 +/turf/simulated/floor/airless, +/area/space) +"cl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/loading{ + dir = 8 }, /turf/simulated/floor/tiled, /area/ministation/cargo) @@ -854,9 +372,6 @@ "cn" = ( /turf/simulated/floor/airless, /area/space) -"co" = ( -/turf/simulated/wall, -/area/ministation/maint/nw) "cp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -868,57 +383,42 @@ /turf/simulated/floor/tiled, /area/ministation/engine) "cr" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/turf/simulated/wall/r_wall, +/area/ministation/eva) +"cu" = ( +/obj/machinery/computer/air_control/supermatter_core, +/obj/machinery/light{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"cs" = ( +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"cv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/engine) +"cw" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 + icon_state = "2-8" }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"cu" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 +/obj/machinery/light/small{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plating, -/area/ministation/bridge) -"cv" = ( -/obj/structure/closet, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"cw" = ( -/turf/simulated/wall, -/area/ministation/maint/ne) +/area/ministation/maint/l1central) "cx" = ( /obj/machinery/conveyor{ id_tag = "mining_internal" }, -/obj/structure/plasticflaps/airtight, /turf/simulated/floor/tiled, /area/ministation/cargo) "cy" = ( @@ -926,10 +426,13 @@ /turf/simulated/floor/plating, /area/ministation/cargo) "cz" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, /obj/machinery/status_display{ - pixel_y = 2 + pixel_y = 32 }, -/turf/simulated/wall, +/turf/simulated/floor/tiled, /area/ministation/cargo) "cA" = ( /obj/machinery/door/airlock/external/glass{ @@ -940,81 +443,60 @@ id_tag = "mining_airlock_interior" }, /obj/machinery/button/access/interior{ - id_tag = "cargo_airlock"; + id_tag = "mining_airlock"; name = "interior access button"; pixel_x = 20; - pixel_y = -10 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/cargo) -"cB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"cC" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/nw) "cD" = ( -/obj/machinery/light/small{ +/turf/simulated/floor, +/area/ministation/hall/s1) +"cG" = ( +/obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/window/reinforced{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"cE" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "air_out"; + internal_pressure_bound = 2000; + internal_pressure_bound_default = 2000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ministation/atmospherics) +"cH" = ( +/obj/structure/ladder, /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"cF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 + icon_state = "16-0" }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"cG" = ( -/obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"cH" = ( -/obj/machinery/light/small, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"cJ" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/ne) +/turf/simulated/floor, +/area/ministation/maint/eastatmos) "cK" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, /area/ministation/ai_sat) "cL" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/science) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "cM" = ( /obj/machinery/conveyor{ dir = 4; @@ -1040,6 +522,7 @@ dir = 4; id_tag = "mining_internal" }, +/obj/machinery/camera/network/mining, /turf/simulated/floor/tiled, /area/ministation/cargo) "cQ" = ( @@ -1062,215 +545,97 @@ }, /turf/simulated/floor/plating, /area/ministation/cargo) -"cU" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/high_voltage, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"cV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"cW" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) "cX" = ( -/obj/structure/rack, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"cY" = ( -/turf/simulated/wall/r_wall, -/area/ministation/security) -"cZ" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/security) -"da" = ( -/turf/simulated/wall, -/area/ministation/security) -"db" = ( -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"dc" = ( -/obj/structure/cable{ - icon_state = "0-2" +/obj/machinery/meter, +/obj/effect/floor_decal/corner/red{ + dir = 9 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast3"; - name = "enclosure 3 blast door" +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"dc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 }, -/turf/simulated/floor, -/area/ministation/science) -"dd" = ( -/turf/simulated/floor, -/area/ministation/science) +/turf/simulated/floor/plating, +/area/ministation/supermatter) "de" = ( /obj/machinery/conveyor{ dir = 1; id_tag = "mining_internal" }, -/obj/structure/plasticflaps/airtight, /turf/simulated/floor/tiled, /area/ministation/cargo) -"dg" = ( -/obj/structure/closet, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"dh" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +"df" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/ministation/maint/nw) +/area/ministation/supermatter) "di" = ( /turf/simulated/wall, /area/ministation/hall/n) -"dj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"dk" = ( -/obj/item/trash/cigbutt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"dm" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, +"dl" = ( +/obj/machinery/power/solar, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-4" }, /turf/simulated/floor/plating, -/area/ministation/maint/sec) -"dn" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/paper_bin, -/obj/item/pen/retractable, -/turf/simulated/floor/carpet/red, -/area/ministation/court) +/area/space) "do" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/conveyor{ + dir = 4; + id_tag = "trash_sort" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/sign/warning/deathsposal{ + pixel_x = -34; dir = 4 }, -/obj/machinery/door/airlock/glass, /turf/simulated/floor/plating, -/area/ministation/hall/s) +/area/ministation/trash) "dq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/corner/beige{ + dir = 5 }, /turf/simulated/floor/tiled, -/area/ministation/court) -"dr" = ( -/turf/simulated/floor/tiled, -/area/ministation/security) -"dt" = ( -/obj/machinery/light/small{ - dir = 8 +/area/ministation/cargo) +"ds" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 }, -/turf/simulated/floor, -/area/ministation/science) +/turf/space, +/area/space) "du" = ( -/mob/living/slime, -/turf/simulated/floor, -/area/ministation/science) -"dv" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/window/westleft, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast2"; - name = "enclosure 2 blast door" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor, -/area/ministation/science) +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "dw" = ( -/obj/machinery/door/window/eastleft, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"dx" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"dy" = ( -/obj/machinery/door/window/westleft, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 + icon_state = "1-4" }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"dz" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/obj/machinery/door/window/eastleft, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast3"; - name = "enclosure 3 blast door" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor, -/area/ministation/science) -"dA" = ( -/obj/machinery/light/small{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/turf/simulated/floor, -/area/ministation/science) +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"dx" = ( +/obj/item/ball, +/turf/simulated/floor/pool, +/area/ministation/dorms) "dB" = ( /obj/machinery/conveyor{ dir = 1; @@ -1295,11 +660,12 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "dD" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) +/turf/simulated/floor/plating, +/area/ministation/supermatter) "dE" = ( /obj/effect/floor_decal/corner/beige{ dir = 5 @@ -1308,12 +674,23 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "dF" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/camera/network/mining, -/turf/simulated/floor/tiled, -/area/ministation/cargo) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) "dG" = ( /obj/machinery/conveyor{ id_tag = "mining_internal" @@ -1327,26 +704,12 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled, /area/ministation/cargo) "dI" = ( /turf/simulated/floor/tiled, /area/ministation/cargo) -"dJ" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"dK" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) "dL" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ dir = 0; @@ -1355,7 +718,8 @@ tag_airpump = "sat1_vent"; tag_chamber_sensor = "sat1_sensor"; tag_exterior_door = "sat1_airlock_exterior"; - tag_interior_door = "sat1_airlock_interior" + tag_interior_door = "sat1_airlock_interior"; + pixel_x = -8 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 4; @@ -1363,313 +727,163 @@ }, /obj/machinery/airlock_sensor{ id_tag = "sat1_sensor"; - pixel_y = 20 + pixel_y = 20; + pixel_x = 8 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) +"dM" = ( +/obj/structure/stairs/long/west, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) "dN" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/closet, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"dR" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"dS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plating, -/area/ministation/maint/nw) -"dO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/area/ministation/ai_upload) +"dU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction/yjunction{ dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"dP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/area/ministation/maint/l1central) +"dV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"eh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"dQ" = ( +/area/ministation/janitor) +"ej" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"dR" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/cargo) +"ek" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"el" = ( /obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/floor/plating, -/area/ministation/maint/ne) -"dS" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/cargo) +"en" = ( +/obj/machinery/camera/network/engineering{ + name = "Tube Entrance"; + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-8" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"eo" = ( +/obj/structure/disposalpipe/segment/bent{ + dir = 8 }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"dT" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"es" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"dU" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/ministation/maint/sec) -"dW" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"dX" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/tiled, -/area/ministation/court) -"dY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/ministation/court) -"dZ" = ( +/area/ministation/dorms) +"et" = ( +/obj/structure/closet/secure_closet/miner, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/security) -"ea" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 +/area/ministation/cargo) +"eu" = ( +/turf/simulated/wall, +/area/ministation/maint/l1ne) +"ev" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"eb" = ( -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast2"; - name = "enclosure 2 blast door" - }, -/turf/simulated/floor, -/area/ministation/science) -"ec" = ( -/obj/structure/table/reinforced, +/turf/simulated/wall, +/area/ministation/dorms) +"ex" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "slimeblast2"; - name = "Enclosure 2 Blastdoors Button" - }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"ee" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ef" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"eg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast3"; - name = "enclosure 3 blast door" - }, -/turf/simulated/floor, -/area/ministation/science) -"eh" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/turf/simulated/floor, -/area/ministation/science) -"ej" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"ek" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/blood/oil, /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 }, /turf/simulated/floor/tiled, -/area/ministation/cargo) -"el" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/cargo) -"em" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"en" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/ministation/cargo) -"eo" = ( -/obj/machinery/power/apc{ - name = "_South APC"; - pixel_y = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/ministation/cargo) -"ep" = ( -/obj/structure/window/basic/full, -/turf/simulated/floor/plating, -/area/ministation/hall/s) -"eq" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"er" = ( -/obj/machinery/door/blast/shutters/open{ - id_tag = "cargoshut"; - name = "cargo shutters" - }, -/obj/effect/wallframe_spawn, -/obj/machinery/status_display/supply_display{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"es" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"et" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/engine) +"ez" = ( +/obj/effect/floor_decal/industrial/custodial/corner{ dir = 4 }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"eu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" +/area/ministation/trash) +"eB" = ( +/obj/machinery/conveyor{ + dir = 9; + id_tag = "recycler" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"ew" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/security) -"ex" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"ez" = ( -/obj/structure/bed, -/turf/simulated/floor, -/area/ministation/atmospherics) -"eB" = ( -/obj/structure/table, -/obj/machinery/faxmachine/mapped, -/turf/simulated/floor/tiled, -/area/ministation/court) +/turf/simulated/floor/plating, +/area/ministation/trash) "eC" = ( -/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/recharge_station, /turf/simulated/floor/plating, -/area/ministation/court) -"eD" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/area/ministation/ai_sat) "eE" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/machinery/alarm{ +/obj/machinery/embedded_controller/radio/airlock/docking_port{ dir = 4; - pixel_x = -22 + id_tag = "cargo_bay"; + tag_airpump = "cargo_vent"; + tag_chamber_sensor = "cargo_sensor"; + tag_exterior_door = "cargo_airlock_exterior"; + tag_interior_door = "cargo_airlock_interior"; + pixel_x = -20 }, -/obj/vehicle/train/cargo/engine, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/cargo) "eF" = ( @@ -1685,37 +899,19 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"eJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) +"eI" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ministation/supermatter) "eK" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "stern_engineering_vent" - }, /turf/simulated/floor/plating, -/area/ministation/engine) -"eL" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/supermatter) "eM" = ( -/obj/machinery/camera/autoname, -/obj/machinery/newscaster{ +/obj/machinery/atm{ pixel_y = 32 }, +/obj/machinery/camera/network/hallway, /turf/simulated/floor/tiled, /area/ministation/hall/n) "eO" = ( @@ -1725,182 +921,103 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"eP" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"eQ" = ( -/obj/machinery/door/airlock/hatch/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sec) +/turf/simulated/floor/tiled, +/area/ministation/hall/n) "eR" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/ministation/court) -"eS" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/machinery/light/small{ +/obj/effect/floor_decal/corner/white/diagonal{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/court) -"eT" = ( -/obj/structure/rack, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/clothing/suit/armor/reactive, -/turf/simulated/floor/plating, -/area/ministation/security) -"eU" = ( -/obj/structure/rack, -/obj/item/target, -/obj/item/target/alien, -/obj/item/target/syndicate, -/obj/machinery/light/small{ +/obj/effect/floor_decal/corner/white/diagonal, +/obj/machinery/meter/turf, +/turf/simulated/floor/reinforced/airmix, +/area/ministation/atmospherics) +"eS" = ( +/obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/security) -"eV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/effect/floor_decal/corner/red{ + dir = 9 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"eU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"eW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"eX" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"eW" = ( +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, -/area/ministation/court) -"eY" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/area/ministation/eva) +"eX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"eZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"fa" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"fb" = ( -/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast1"; - name = "enclosure 1 blast door" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/turf/simulated/floor, -/area/ministation/science) -"fc" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"eY" = ( +/obj/structure/rack{ dir = 8 }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning{ +/obj/item/stack/material/ingot/mapped/osmium/forty, +/obj/item/stack/material/ingot/mapped/iron/fifty, +/obj/item/stack/material/ingot/mapped/copper/fifty, +/obj/item/stack/material/ingot/mapped/chromium/fifty, +/obj/item/stack/material/ingot/mapped/brass/fifty, +/obj/item/stack/material/ingot/mapped/blackbronze/fifty, +/obj/item/stack/material/ingot/mapped/gold/fifty, +/obj/item/stack/material/ingot/mapped/platinum/twenty, +/obj/item/stack/material/ingot/mapped/silver/fifty, +/obj/item/stack/material/ingot/mapped/stainlesssteel/forty, +/obj/item/stack/material/ingot/mapped/tin/fifty, +/obj/item/stack/material/ingot/mapped/zinc/fifty, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"eZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/science) -"fd" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/area/ministation/hall/s1) "fe" = ( -/obj/machinery/computer/operating, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ff" = ( -/obj/structure/table, -/obj/item/scalpel{ - pixel_y = 15 - }, -/obj/item/circular_saw, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/wall/r_wall, +/area/ministation/hall/s1) "fg" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/machinery/alarm{ - pixel_y = 23 +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"fh" = ( -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) "fi" = ( /obj/effect/floor_decal/corner/beige{ dir = 9 @@ -1924,12 +1041,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/item/stool/padded, /turf/simulated/floor/tiled, /area/ministation/cargo) "fm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/storage/box, +/obj/item/megaphone, /turf/simulated/floor/tiled, /area/ministation/cargo) "fn" = ( @@ -1938,6 +1060,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/item/stool/padded, /turf/simulated/floor/tiled, /area/ministation/cargo) "fo" = ( @@ -1947,10 +1070,13 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "fp" = ( -/obj/structure/closet/secure_closet/miner, /obj/effect/floor_decal/corner/beige{ dir = 6 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "fq" = ( @@ -1958,7 +1084,8 @@ dir = 8 }, /obj/machinery/status_display/supply_display{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/machinery/atmospherics/portables_connector{ pixel_x = -3; @@ -1968,69 +1095,43 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "fr" = ( -/obj/structure/table, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/item/stack/material/cardstock/mapped/cardboard/fifty, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, /turf/simulated/floor/tiled, /area/ministation/cargo) "fs" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/item/multitool, -/obj/machinery/network/requests_console{ - department = "Cargo Bay"; - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) +/obj/structure/tank_rack/oxygen, +/turf/simulated/floor/plating, +/area/ministation/engine) "ft" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/hologram/holopad, +/obj/item/radio/intercom/locked{ + dir = 4; + pixel_x = -22 }, -/obj/item/eftpos, -/obj/machinery/camera/network/mining, /turf/simulated/floor/tiled, /area/ministation/cargo) "fu" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/pen/red, -/obj/effect/floor_decal/corner/beige{ - dir = 6 +/obj/machinery/door/airlock/glass/mining, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/button/blast_door{ - id_tag = "cargoshut"; - name = "Cargo Shutters Button"; - pixel_y = 23 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/item/stamp/cargo, /turf/simulated/floor/tiled, /area/ministation/cargo) "fv" = ( -/obj/machinery/door/blast/shutters/open{ +/obj/effect/wallframe_spawn, +/obj/machinery/door/blast/shutters{ id_tag = "cargoshut"; name = "cargo shutters" }, -/obj/effect/wallframe_spawn, /turf/simulated/floor/tiled, /area/ministation/cargo) "fw" = ( @@ -2048,6 +1149,8 @@ /obj/effect/floor_decal/corner/beige{ dir = 9 }, +/obj/item/chems/drinks/juicebox/random, +/obj/item/chems/drinks/juicebox/sensible_random, /turf/simulated/floor/tiled, /area/ministation/hall/n) "fz" = ( @@ -2061,9 +1164,6 @@ /obj/abstract/landmark{ name = "lightsout" }, -/obj/structure/cable{ - icon_state = "2-4" - }, /turf/simulated/floor/tiled, /area/ministation/hall/n) "fB" = ( @@ -2075,29 +1175,12 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"fC" = ( -/obj/machinery/power/apc{ - areastring = null; - name = "_South APC"; - pixel_y = -24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/ministation/detective) -"fD" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +"fE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/maint/sec) +/area/ministation/supermatter) "fF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2108,66 +1191,42 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "fG" = ( -/obj/machinery/door/airlock/glass/command{ - autoset_access = 0; - name = "Telecommunications glass airlock"; - req_access = list("ACCESS_TELECOMS") - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"fH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/camera/network/security{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"fI" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "scraplock"; + dir = 4; + name = "External Blast Doors" }, -/obj/machinery/door/airlock/glass/security{ - name = "Brig Access Airlock"; - req_access = list(list("ACCESS_SECURITY","ACCESS_LAWYER")); - autoset_access = 0 +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/court) +/turf/simulated/floor/plating, +/area/ministation/atmospherics) "fJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"fK" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/window/westleft, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast1"; - name = "enclosure 1 blast door" - }, -/turf/simulated/floor, -/area/ministation/science) "fL" = ( /obj/structure/rack, -/obj/item/pickaxe, -/obj/item/pickaxe{ +/obj/item/tool/pickaxe, +/obj/item/tool/pickaxe{ pixel_x = 5 }, -/obj/item/shovel{ +/obj/item/tool/shovel{ pixel_x = -5 }, -/obj/item/shovel{ +/obj/item/tool/shovel{ pixel_x = -5 }, /obj/effect/floor_decal/corner/beige{ dir = 9 }, +/obj/machinery/camera/network/mining{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "fM" = ( @@ -2192,163 +1251,146 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "fQ" = ( -/obj/structure/closet/secure_closet/cargotech, /obj/effect/floor_decal/corner/beige{ dir = 6 }, -/obj/item/key/cargo_train, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "fR" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/machinery/camera/network/mining{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/structure/filing_cabinet, /turf/simulated/floor/tiled, /area/ministation/cargo) "fS" = ( -/obj/machinery/computer/modular/preset/supply_public, /obj/effect/floor_decal/corner/beige{ dir = 6 }, +/obj/machinery/computer/modular/preset/merchant/ministation{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "fU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/firedoor{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) +/obj/structure/window/basic/full, +/turf/simulated/floor/plating, +/area/ministation/dorms) "fV" = ( -/obj/machinery/power/apc{ - name = "_South APC"; - pixel_y = -24 +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Station Intercom (AI Private)"; + pixel_y = -30; + dir = 1 }, -/obj/structure/cable, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/ministation/security) -"fX" = ( -/obj/item/gun/energy/taser, -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/gun/energy/taser, -/obj/item/gun/projectile/shotgun/pump, -/obj/item/gun/projectile/shotgun/pump, -/turf/simulated/floor/plating, -/area/ministation/security) -"fY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"fW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/tiled, -/area/ministation/security) -"fZ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, +/area/ministation/engine) +"fX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/structure/cable{ icon_state = "2-4" }, /turf/simulated/floor/tiled, -/area/ministation/security) -"ga" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/hall/s1) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/effect/floor_decal/corner/yellow{ + dir = 10 }, /turf/simulated/floor/tiled, -/area/ministation/security) -"gb" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/area/ministation/hall/s1) +"ga" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"gb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/flora/pottedplant/minitree, /turf/simulated/floor/tiled, -/area/ministation/security) -"gc" = ( -/obj/structure/closet/secure_closet/brig, -/turf/simulated/floor/tiled, -/area/ministation/security) -"gd" = ( -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - id_tag = "slimeblast1"; - name = "enclosure 1 blast door" - }, -/turf/simulated/floor, -/area/ministation/science) +/area/ministation/hall/s1) "ge" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" }, -/obj/structure/window/reinforced{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"gg" = ( +/obj/machinery/conveyor{ + dir = 8; + id_tag = "trash_sort" }, -/obj/machinery/button/blast_door{ - id_tag = "slimeblast1"; - name = "Enclosure 1 Blastdoors Button" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/ministation/trash) +"gi" = ( +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ dir = 4 }, -/obj/machinery/camera/network/research{ - dir = 1 +/obj/machinery/light{ + dir = 4; + icon_state = "bulb1" }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"gf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gg" = ( -/obj/abstract/landmark/start{ - name = "Scientist" +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gi" = ( -/obj/machinery/smartfridge/secure/extract, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "gj" = ( /obj/machinery/light{ dir = 8; icon_state = "tube1" }, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 - }, /obj/effect/floor_decal/corner/beige{ dir = 9 }, -/obj/vehicle/train/cargo/trolley, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/mining/brace, /turf/simulated/floor/tiled, /area/ministation/cargo) "gk" = ( @@ -2367,6 +1409,21 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) +"gm" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"gn" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/space, +/area/space) "go" = ( /obj/machinery/light{ dir = 4; @@ -2377,14 +1434,13 @@ dir = 6 }, /obj/item/toy/prize/powerloader, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/ministation/cargo) "gq" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/fabricator, +/obj/effect/wallframe_spawn, /turf/simulated/floor/tiled, /area/ministation/cargo) "gr" = ( @@ -2397,23 +1453,16 @@ /obj/abstract/landmark/start{ name = "Cargo Technician" }, -/obj/structure/bed/chair, /obj/effect/floor_decal/corner/beige{ dir = 6 }, +/obj/structure/bed/chair/office, /turf/simulated/floor/tiled, /area/ministation/cargo) "gt" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/westleft, -/obj/machinery/door/blast/shutters/open{ - id_tag = "cargoshut"; - name = "cargo shutters" - }, +/obj/machinery/door/airlock/glass/mining, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/ministation/cargo) "gu" = ( @@ -2427,13 +1476,13 @@ /turf/simulated/floor/tiled, /area/ministation/hall/n) "gw" = ( -/obj/structure/closet/crate/bin/ministation, /obj/effect/floor_decal/corner/beige{ dir = 9 }, -/obj/item/chems/drinks/juicebox/random, -/obj/item/chems/drinks/juicebox/random, -/obj/item/chems/drinks/juicebox/sensible_random, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal, /turf/simulated/floor/tiled, /area/ministation/hall/n) "gx" = ( @@ -2443,6 +1492,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/ministation/hall/n) "gy" = ( @@ -2451,117 +1501,49 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"gA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"gB" = ( -/obj/machinery/door/airlock/glass/command{ - autoset_access = 0; - name = "Armory airlock"; - req_access = list("ACCESS_ARMORY") - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"gC" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) "gD" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastright{ - id_tag = "Cell 2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 +/obj/machinery/port_gen/pacman/super, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled, -/area/ministation/security) +/turf/simulated/floor/plating, +/area/ministation/engine) "gE" = ( -/obj/structure/table/reinforced, -/obj/item/toy/eightball, -/obj/machinery/light/small{ +/obj/structure/window/reinforced{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"gF" = ( -/obj/effect/floor_decal/corner/purple, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gH" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "air_out"; + internal_pressure_bound = 2000; + internal_pressure_bound_default = 2000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/reinforced/airmix, +/area/ministation/atmospherics) "gI" = ( -/obj/structure/table, -/obj/item/chems/spray/extinguisher{ - pixel_x = 4; - pixel_y = 3 +/obj/machinery/light/small{ + dir = 8 }, -/obj/item/chems/spray/extinguisher, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "l1ne_vent" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) "gJ" = ( -/obj/structure/table, -/obj/machinery/light, -/obj/item/storage/box/monkeycubes, -/obj/item/stack/material/puck/mapped/uranium/ten, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"gK" = ( -/obj/structure/table, -/obj/item/storage/box/syringes, -/obj/item/chems/glass/beaker/large, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/n) "gL" = ( -/obj/vehicle/train/cargo/trolley, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/mining/drill, /turf/simulated/floor/tiled, /area/ministation/cargo) "gM" = ( @@ -2570,22 +1552,15 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"gN" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled, -/area/ministation/cargo) "gO" = ( /obj/machinery/door/firedoor{ dir = 8 }, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/ministation/cargo) "gP" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/ministation/cargo) "gQ" = ( @@ -2604,6 +1579,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/ministation/hall/n) "gT" = ( @@ -2611,140 +1587,101 @@ /turf/simulated/floor/tiled, /area/ministation/hall/n) "gU" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "pqm_airlock_interior" +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 }, -/obj/machinery/button/access/interior{ - id_tag = "pqm_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 +/obj/effect/floor_decal/corner/blue{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) "gV" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/light{ + dir = 1 }, -/obj/structure/bookcase/skill_books/random, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"gX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/industrial/loading{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/security) -"ha" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/area/space) +"gW" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "stern_engineering_vent" }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hb" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "stern_engineering_airlock"; + pixel_y = -6; + tag_airpump = "stern_engineering_vent"; + tag_chamber_sensor = "stern_engineering_sensor"; + tag_exterior_door = "stern_engineering_airlock_exterior"; + tag_interior_door = "stern_engineering_airlock_interior"; + dir = 4; + pixel_x = -20; + name = "2. Airlock Controller" }, -/obj/machinery/door_timer/cell_2{ - pixel_x = 31; - pixel_y = -1 +/turf/simulated/floor/plating, +/area/ministation/engine) +"gX" = ( +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"gY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/ministation/engine) +"gZ" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/security) +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/smcontrol) "hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/ministation/security) -"hd" = ( -/obj/structure/bed, -/obj/item/bedsheet/mime, -/obj/item/radio/intercom{ - dir = 1; - pixel_y = -27 +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"he" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/disused) -"hf" = ( -/obj/structure/table, -/obj/item/wrench, -/obj/item/crowbar/red, -/obj/machinery/light{ +/obj/machinery/computer/modular/preset/civilian{ dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hg" = ( -/obj/structure/table, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/glasses/science, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hh" = ( -/obj/structure/closet/l3closet/scientist, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"hf" = ( +/turf/simulated/floor/plating, +/area/ministation/trash) +"hk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"hj" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hm" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/science) +/turf/simulated/floor/plating, +/area/ministation/supermatter) "hn" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/design_database, -/turf/simulated/floor/tiled/dark, -/area/ministation/science) +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) "ho" = ( /obj/machinery/atmospherics/portables_connector{ pixel_x = -3 @@ -2753,20 +1690,10 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "hp" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/ministation/cargo) "hq" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 5; - pixel_y = -32 - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -2776,27 +1703,20 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"hr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/full, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) "hs" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -23 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/light{ + icon_state = "tube1" + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "ht" = ( @@ -2805,101 +1725,50 @@ pixel_y = -22 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/ministation/cargo) "hu" = ( /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/door/airlock/mining, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"hv" = ( -/obj/structure/closet/secure_closet/security, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hw" = ( -/obj/structure/table, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/head/earmuffs, -/obj/item/clothing/head/earmuffs, -/obj/machinery/network/requests_console{ - department = "Security"; - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hx" = ( -/obj/structure/table, -/obj/item/storage/box/handcuffs{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/flashbangs, -/obj/machinery/recharger/wallcharger{ - pixel_y = 25 - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hz" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hA" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 + icon_state = "4-8" }, -/obj/machinery/computer/modular/preset/security{ - dir = 4 +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/double/mining{ + dir = 8 }, -/turf/simulated/floor/wood, -/area/ministation/detective) -"hB" = ( -/turf/simulated/floor/carpet/red, -/area/ministation/detective) -"hC" = ( -/obj/structure/table/woodentable, -/obj/item/camera, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/taperecorder, -/obj/item/folder/yellow, -/obj/item/storage/secure/safe{ - pixel_x = 4; - pixel_y = 26 +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"hv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 }, -/obj/structure/filing_cabinet/wall{ - pixel_x = 32 +/obj/effect/floor_decal/corner/blue, +/obj/structure/fireaxecabinet{ + pixel_y = 32 }, -/turf/simulated/floor/carpet/red, -/area/ministation/detective) +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) "hE" = ( /obj/machinery/atmospherics/binary/pump/on{ target_pressure = 200; @@ -2907,113 +1776,9 @@ }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"hF" = ( -/obj/machinery/button/blast_door{ - id_tag = "scishut"; - name = "Science Shutter Button"; - pixel_x = -25; - pixel_y = -6 - }, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hG" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 4 - }, -/obj/structure/sign/department/xenobio_3{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hH" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hI" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/table, -/obj/item/disk/tech_disk, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/obj/item/disk/design_disk, -/obj/effect/floor_decal/corner/purple{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hJ" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hK" = ( -/obj/structure/table, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/manipulator, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hL" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module{ - pixel_x = 2; - pixel_y = 3 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"hM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/science) -"hN" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/science) -"hO" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/science) "hP" = ( /obj/structure/sign/warning/docking_area{ - pixel_y = 30 + pixel_y = 32 }, /obj/machinery/door/airlock/external/bolted{ id_tag = "cargo_airlock_interior"; @@ -3029,9 +1794,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hR" = ( @@ -3044,9 +1806,6 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "hS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet/crate, -/obj/item/stack/material/ore/slag, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -3054,29 +1813,27 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "hT" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/ore/glass, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/mining{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hU" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light/small{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, /turf/simulated/floor/plating, -/area/ministation/maint/se) +/area/ministation/maint/eastatmos) "hV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ @@ -3085,73 +1842,19 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"hW" = ( -/obj/machinery/newscaster{ - pixel_x = -32 +"hY" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/flora/pottedplant/largebush, -/obj/machinery/camera/network/security{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" }, /turf/simulated/floor/tiled, -/area/ministation/security) -"hY" = ( -/obj/structure/table, -/obj/item/assembly/timer, -/obj/item/flash, -/turf/simulated/floor/tiled, -/area/ministation/security) -"hZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/security) -"ia" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/door_timer/cell_1{ - pixel_x = 31 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"ib" = ( -/obj/machinery/network/requests_console{ - department = "Detective's office"; - pixel_x = -30 - }, -/obj/machinery/forensic, -/turf/simulated/floor/wood, -/area/ministation/detective) -"ic" = ( -/obj/abstract/landmark/start{ - name = "Detective" - }, -/obj/structure/bed/chair/office/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/carpet/red, -/area/ministation/detective) -"id" = ( -/obj/structure/table/woodentable, -/obj/item/folder/red, -/obj/item/hand_labeler, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/carpet/red, -/area/ministation/detective) +/area/ministation/hall/n) "ie" = ( /obj/machinery/door/airlock/external/bolted{ id_tag = "cargo_airlock_exterior"; @@ -3161,97 +1864,41 @@ /turf/simulated/floor/plating, /area/ministation/cargo) "if" = ( -/obj/machinery/door/window/eastright, -/obj/machinery/door/blast/shutters/open{ - id_tag = "scishut"; - name = "science shutters" +/obj/machinery/fabricator/pipe, +/obj/effect/floor_decal/corner/yellow{ + dir = 4 }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor{ +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/science) -"ig" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ih" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ii" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "ij" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ik" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"in" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/recharger, -/obj/structure/table, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"io" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/science) -"ip" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/science) -"iq" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"ir" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"is" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"it" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/meter{ - name = "Distribution Loop" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"il" = ( +/turf/simulated/wall/r_wall, +/area/ministation/supermatter) +"iq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/turf/simulated/floor/tiled, +/area/ministation/cargo) "iu" = ( /obj/machinery/vending/cola{ dir = 4; @@ -3259,187 +1906,46 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"iv" = ( -/obj/machinery/vending/snack{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"iw" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 - }, -/obj/machinery/computer/modular/preset/security{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"ix" = ( -/obj/abstract/landmark/start{ - name = "Security Officer" - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/ministation/security) -"iy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) "iz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"iA" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) "iB" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/eastright{ - id_tag = "Cell 1" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"iC" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/ministation/security) -"iD" = ( -/obj/structure/table/reinforced, -/obj/item/synthesized_instrument/violin, -/obj/machinery/light/small{ - dir = 4 +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/security) +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) "iE" = ( -/obj/structure/closet/secure_closet/detective, -/turf/simulated/floor/wood, -/area/ministation/detective) -"iG" = ( -/obj/structure/table/woodentable, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/storage/fancy/cigarettes, -/obj/item/handcuffs, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/carpet/red, -/area/ministation/detective) -"iH" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/abstract/landmark/latejoin/cryo, -/obj/machinery/camera/network/medbay{ - dir = 1 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8; + level = 2 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"iI" = ( -/obj/structure/table, -/obj/item/hand_labeler, -/obj/item/pen, -/obj/machinery/network/requests_console{ - department = "Science"; - name = "Science Requests Console"; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iJ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iK" = ( -/obj/machinery/fabricator/imprinter, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) -"iL" = ( -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) -"iM" = ( -/obj/machinery/destructive_analyzer, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) -"iN" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 1; + icon_state = "warning" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"iM" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iQ" = ( -/obj/abstract/landmark/start{ - name = "Scientist" - }, -/obj/structure/bed/chair/office/light, -/obj/item/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iR" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"iN" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"iS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/dark, -/area/ministation/science) -"iT" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/tiled, +/area/ministation/hall/n) "iU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/binary/pump/on{ @@ -3449,339 +1955,96 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet/crate, -/obj/item/stack/material/ore/glass, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "cargo_vent" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, /area/ministation/cargo) "iW" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/closet/crate, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"iX" = ( -/turf/simulated/wall, -/area/ministation/commons) -"iY" = ( -/obj/machinery/door/airlock/double/glass/civilian, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"iZ" = ( -/obj/machinery/vending/coffee{ - dir = 4; - pixel_x = -5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"ja" = ( -/obj/machinery/vending/cigarette{ - dir = 8; - pixel_x = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"jb" = ( -/obj/machinery/computer/prisoner{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "secshut"; - name = "security shutter button"; - pixel_y = -32 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"jc" = ( -/obj/effect/shuttle_landmark/escape_shuttle/station, -/turf/space, -/area/space) "jd" = ( -/obj/machinery/computer/station_alert/security{ - dir = 8 +/obj/machinery/door/airlock/hatch/maintenance{ + autoset_access = 0 }, -/turf/simulated/floor/tiled, -/area/ministation/security) +/turf/simulated/floor/plating, +/area/ministation/trash) "je" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled, -/area/ministation/security) -"jg" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/button/alternate/door{ - dir = 1; - id_tag = "secdoor"; - name = "security airlock access button"; - pixel_x = -25; - pixel_y = -25 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"jh" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"jf" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; dir = 4 }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"ji" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/wood, -/area/ministation/detective) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/wood, -/area/ministation/detective) -"jk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/camera/network/security{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/ministation/detective) -"jl" = ( -/obj/structure/rack, -/obj/random/maintenance, -/obj/item/clothing/suit/storage/toggle/bomber, /turf/simulated/floor/plating, -/area/ministation/maint/detective) -"jm" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jn" = ( -/obj/machinery/fabricator/protolathe, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) -"jo" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) -"jp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/computer/design_console{ - dir = 8 +/area/ministation/supermatter) +"jh" = ( +/turf/simulated/wall, +/area/ministation/maint/l1central) +"jj" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/science) +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "jq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"js" = ( -/obj/structure/table, -/obj/item/chems/glass/beaker/large, -/obj/item/chems/glass/beaker/sulphuric, -/obj/item/chems/dropper, -/obj/effect/floor_decal/corner/purple{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jt" = ( -/obj/structure/table, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/matter_bin, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ju" = ( -/obj/structure/table, -/obj/item/clothing/glasses/welding, -/obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, -/obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/obj/item/stack/material/ingot/mapped/copper/fifty, -/obj/machinery/camera/network/research{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jv" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 2; - pixel_y = 3 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jw" = ( -/obj/abstract/landmark{ - name = "blobstart" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jx" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/item/radio/intercom{ - dir = 8; - pixel_x = 20 +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) "jy" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/cargo) +/area/ministation/dorms) "jz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"jB" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/obj/structure/closet/secure_closet{ + closet_appearance = /decl/closet_appearance/secure_closet/security; + req_access = list("ACCESS_BRIG"); + name = "Security locker" }, -/obj/structure/table, -/obj/random/plushie, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/turf/simulated/floor/tiled, +/area/ministation/eva) +"jA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) +/turf/simulated/floor/plating, +/area/ministation/supermatter) "jC" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/obj/structure/closet/wardrobe/pjs, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"jD" = ( -/obj/machinery/photocopier, -/obj/machinery/status_display{ - pixel_y = 32 +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "scraplock"; + dir = 4; + name = "External Blast Doors" }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"jE" = ( -/obj/structure/table/woodentable, -/obj/machinery/fabricator/book, -/obj/machinery/light{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/commons) +/turf/simulated/floor/plating, +/area/ministation/atmospherics) "jF" = ( -/obj/machinery/camera/autoname, -/obj/structure/bookcase/skill_books/random, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"jG" = ( -/obj/machinery/washing_machine, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/tiled, -/area/ministation/commons) +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) "jH" = ( /obj/machinery/alarm{ pixel_y = 23 @@ -3789,38 +2052,34 @@ /turf/simulated/floor/plating, /area/ministation/ai_sat) "jI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/structure/closet/secure_closet/cargotech, +/obj/item/key/cargo_train, /turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/cargo) "jL" = ( -/obj/machinery/door/airlock/glass/security{ - autoset_access = 0; - name = "Detective's Office"; - req_access = list("ACCESS_FORENSICS") +/obj/item/pen, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"jM" = ( +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/ministation/detective) +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/reinforced/airmix, +/area/ministation/atmospherics) "jO" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/maint/detective) -"jP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/obj/structure/table/gamblingtable, +/obj/item/paicard, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) "jQ" = ( /obj/machinery/light/small{ dir = 1 @@ -3830,36 +2089,16 @@ }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"jR" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/item/integrated_circuit_printer, -/obj/structure/table, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"jS" = ( -/obj/structure/table, -/obj/item/book/skill/service/cooking, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) "jT" = ( -/obj/structure/table, -/obj/item/hand_labeler, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 - }, -/obj/item/storage/pill_bottle, -/obj/machinery/light{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/item/eftpos, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) "jU" = ( /obj/structure/sign/warning/docking_area{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /obj/machinery/door/airlock/external/bolted{ id_tag = "cargo_airlock_interior"; @@ -3873,11 +2112,15 @@ /area/ministation/cargo) "jV" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, /obj/machinery/atmospherics/binary/pump/on{ target_pressure = 200; dir = 8 }, +/obj/machinery/camera/network/mining{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/stack/material/ore/slag, /turf/simulated/floor/tiled, /area/ministation/cargo) "jW" = ( @@ -3886,6 +2129,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, +/obj/item/stack/material/ore/sand, /turf/simulated/floor/tiled, /area/ministation/cargo) "jX" = ( @@ -3895,515 +2139,220 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 }, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/ministation/cargo) "jY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"ka" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"kb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"kc" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"kd" = ( -/obj/abstract/landmark/start{ - name = "Assistant" - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) "ke" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/obj/machinery/vending/games, +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/commons) +/area/ministation/hall/n) "kf" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/ministation/commons) -"kg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_x = 32; - pixel_y = 32 +/turf/simulated/wall, +/area/ministation/hall/n) +"kg" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/closet/secure_closet{ + closet_appearance = /decl/closet_appearance/secure_closet/command/hop; + req_access = list("ACCESS_HEAD_OF_PERSONNEL"); + name = "Lieutenant's locker" }, /turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/eva) "kh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"ki" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kj" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/detective) -"kk" = ( -/obj/item/stool/padded, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kl" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/detective) "km" = ( /obj/machinery/light/small{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor, -/area/ministation/atmospherics) -"kn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ko" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"ks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ +/area/ministation/maint/eastatmos) +"kq" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/corner/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kt" = ( +/turf/simulated/floor/reinforced/airmix, +/area/ministation/atmospherics) +"kv" = ( +/obj/machinery/light, +/obj/machinery/suit_cycler/engineering/ministation, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"kw" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/corner/purple{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"kx" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 5 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ku" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/machinery/door/blast/regular/open{ + id_tag = "scraplock"; + dir = 4; + name = "External Blast Doors" }, -/obj/effect/floor_decal/corner/purple{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/atmospherics) +"ky" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kv" = ( /obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ky" = ( -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kz" = ( -/mob/living/simple_animal/cat/fluff/ran, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 + dir = 8; + pixel_x = -24 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"kB" = ( -/obj/structure/dogbed, -/obj/item/clothing/shoes/color/brown{ - desc = "Old, but sensible brown shoes. These belong to Ian." +/area/ministation/cargo) +"kA" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"kC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ +/obj/structure/bed/chair/janicart{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"kD" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/eftpos, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"kE" = ( -/obj/machinery/camera/autoname{ - dir = 1 - }, -/obj/machinery/lapvend{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"kF" = ( -/obj/structure/table/woodentable, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical, -/obj/item/clothing/gloves/insulated/cheap, -/obj/item/clothing/gloves/insulated/cheap, -/obj/machinery/light, /turf/simulated/floor/tiled, -/area/ministation/commons) -"kG" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/area/ministation/janitor) +"kC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/disused) +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "kH" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor, -/area/ministation/atmospherics) +/area/ministation/maint/eastatmos) "kI" = ( -/obj/abstract/landmark/start{ - name = "Assistant" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"kJ" = ( -/obj/abstract/landmark{ - name = "bluespace_a" - }, -/obj/structure/table/gamblingtable, -/obj/item/deck/cag/black, -/obj/item/deck/cag/white{ - pixel_z = -6 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"kK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/extinguisher_cabinet{ + pixel_x = -29; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/commons) +/area/ministation/eva) "kL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/hygiene/toilet, +/obj/structure/window/reinforced/tinted{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kN" = ( -/obj/abstract/landmark{ - name = "lightsout" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"kP" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/glass/science, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"kQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/start{ + name = "Deck Hand" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"kM" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kR" = ( -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/plating, +/area/ministation/hall/n) +"kN" = ( +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + icon_state = "map_injector"; + id_tag = "n2_in"; + use_power = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/corner/white/diagonal, +/obj/effect/floor_decal/corner/white/diagonal{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kS" = ( -/obj/structure/fireaxecabinet{ - pixel_z = 23 - }, -/turf/simulated/floor, +/turf/simulated/floor/reinforced/airmix, /area/ministation/atmospherics) -"kT" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"kU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kV" = ( -/obj/abstract/landmark{ - name = "bluespace_a" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kW" = ( -/obj/abstract/landmark/start{ - name = "Scientist" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"kX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/abstract/landmark/latejoin/observer, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"kY" = ( -/obj/structure/closet, -/obj/item/clothing/mask/gas/clown_hat, -/obj/item/clothing/shoes/clown_shoes, -/obj/item/clothing/under/clown, -/obj/item/stamp/clown, -/obj/item/storage/backpack/clown, -/obj/item/bikehorn, -/obj/item/storage/fancy/crayons, -/turf/simulated/floor/plating, -/area/ministation/maint/se) "kZ" = ( /turf/simulated/wall, -/area/ministation/hall/w) -"la" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/hall/w) +/area/ministation/janitor) "lb" = ( -/obj/machinery/atmospherics/portables_connector{ - pixel_x = -3 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"lc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"ld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"le" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/random/trash, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"le" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/effect/floor_decal/corner/red{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"lf" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/turf/space, +/area/space) "lg" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 - }, -/obj/structure/bed, -/obj/item/bedsheet, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"lh" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/lattice, +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) +/turf/space, +/area/space) "li" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -4418,36 +2367,22 @@ /turf/simulated/floor/plating, /area/ministation/ai_sat) "lk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/wall/r_wall, -/area/ministation/ai_sat) +/area/ministation/ai_upload) "ll" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"lm" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) "ln" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/tiled, /area/ministation/engine) -"lo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) "lp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -4455,171 +2390,98 @@ /turf/simulated/floor/tiled, /area/ministation/hall/n) "lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/autoname{ - dir = 1 +/obj/machinery/camera/network/mining{ + dir = 8 }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/item/stack/material/brick/mapped/sandstone/forty, /turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/cargo) "lr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"ls" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/engine) "lt" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"lv" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 +/obj/effect/floor_decal/corner/red/diagonal{ + dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/window/reinforced{ + current_health = 1e+007 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lw" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lx" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 +/turf/simulated/floor/reinforced/nitrogen, +/area/ministation/atmospherics) +"ly" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastinterior" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/science) -"lA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/effect/floor_decal/corner/purple, +/turf/simulated/floor/plating, +/area/ministation/smcontrol) +"lA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "lB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposaloutlet{ dir = 4 }, -/obj/effect/floor_decal/corner/purple{ +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/structure/sign/department/xenoflora{ - pixel_y = -32 +/obj/machinery/conveyor{ + dir = 4; + id_tag = "trash_sort" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/ministation/trash) +"lC" = ( +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -23 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lG" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lH" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"lI" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/bed/chair, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"lJ" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"lK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/crate/bin/ministation, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 + dir = 9 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"lL" = ( -/obj/machinery/vending/snack, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) +/area/ministation/eva) "lM" = ( -/obj/machinery/vending/cola, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "westatmos_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "westatmos_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"lN" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/turf/simulated/floor/airless, +/area/ministation/maint/westatmos) "lO" = ( /obj/machinery/door/airlock/external/glass{ autoset_access = 0; @@ -4631,2128 +2493,1405 @@ /obj/machinery/button/access/interior{ id_tag = "sat1_airlock"; name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; + pixel_y = 24; command = "cycle_exterior" }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"lP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +"lR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"lQ" = ( -/obj/structure/rack{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/borg/sight/meson, -/obj/item/clothing/mask/gas/budget, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"lR" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/item/chems/spray/extinguisher, -/obj/item/clothing/head/hardhat/red, -/obj/random/gloves, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"lS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/area/ministation/ai_sat) +"lS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"lT" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/table, -/obj/item/storage/pill_bottle/dice, +"lW" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"lU" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/commons) -"lV" = ( -/obj/structure/closet/medical_wall/ministation{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"lW" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 1 - }, -/obj/machinery/light, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled, -/area/ministation/commons) +/area/ministation/hall/s1) "lX" = ( -/obj/structure/table/woodentable, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/pen, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"lY" = ( -/obj/structure/closet/wardrobe/mixed, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"lZ" = ( -/obj/structure/closet, -/obj/item/clothing/under/owl, -/obj/item/clothing/mask/gas/owl_mask, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) +/turf/simulated/wall, +/area/ministation/ai_sat) "ma" = ( -/obj/structure/table/woodentable, -/obj/item/paicard, -/obj/random/coin, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/ministation/commons) +/obj/machinery/atmospherics/omni/filter{ + tag_east = 1; + tag_north = 3; + tag_south = 4; + tag_west = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) "mb" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"mc" = ( -/obj/machinery/vending/coffee{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) +/area/ministation/supermatter) "md" = ( -/obj/machinery/vending/cigarette{ - dir = 1 +/obj/machinery/meter, +/obj/effect/floor_decal/corner/blue{ + dir = 9 }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) "me" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"mf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_x = 6; + pixel_y = -5 }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/obj/item/multitool, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "mg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/item/radio/intercom{ name = "Common Channel"; - pixel_y = 25 + pixel_y = 20 }, /obj/structure/displaycase, /obj/item/toy/shipmodel, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"mh" = ( +"ml" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"mi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"mj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 }, +/obj/structure/tank_rack/oxygen, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"mk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/area/ministation/eva) +"mn" = ( +/obj/machinery/atmospherics/binary/pump{ + name = "waste pump" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"mo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"mp" = ( -/obj/machinery/light/small{ - dir = 4 +/area/ministation/supermatter) +"mq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" }, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"mq" = ( -/turf/simulated/wall, -/area/ministation/maint/w) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) "mr" = ( /obj/machinery/light{ dir = 8; icon_state = "tube1" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/n) "ms" = ( /turf/simulated/wall, -/area/ministation/hall/s) -"mv" = ( +/area/ministation/hall/s1) +"mu" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 }, /turf/simulated/floor/plating, -/area/ministation/maint/e) +/area/space) +"mv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) "mw" = ( -/obj/machinery/vending/assist/ministation, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"mx" = ( -/obj/machinery/vending/tool, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"my" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/science) +/area/ministation/ai_sat) "mz" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/ministation/science) -"mA" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mB" = ( -/obj/machinery/botany/editor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/area/ministation/trash) "mC" = ( -/obj/machinery/botany/extractor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mD" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/biogenerator, -/obj/effect/floor_decal/corner/purple{ - dir = 4 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/engine) +"mH" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mF" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/vending/hydronutrients, -/obj/effect/floor_decal/corner/purple{ - dir = 1 + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"mN" = ( +/obj/machinery/camera/network/ministation/sat{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mG" = ( -/obj/structure/table, -/obj/item/scanner/gas, -/obj/item/wrench, -/obj/item/minihoe, -/obj/item/hatchet, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mH" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"mI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"mJ" = ( -/turf/simulated/floor/reinforced, -/area/ministation/science) -"mK" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/ministation/science) -"mL" = ( -/obj/structure/table/woodentable, -/obj/item/eftpos, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"mM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/suit_cycler/ministation, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"mO" = ( -/obj/abstract/landmark/latejoin, /turf/simulated/floor/plating, -/area/ministation/hall/w) +/area/ministation/ai_sat) "mP" = ( -/obj/machinery/door/airlock/external{ - name = "Arrival Airlock"; - autoset_access = 0 +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "l1ne_airlock_interior" }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"mQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"mR" = ( -/obj/effect/floor_decal/industrial/loading{ +/obj/machinery/button/access/interior{ + id_tag = "l1ne_airlock"; + name = "interior access button"; + pixel_x = 20; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) "mS" = ( /turf/simulated/floor/tiled, -/area/ministation/hall/w) +/area/ministation/janitor) +"mT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/turf/space, +/area/space) "mV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/engine) "mW" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled, /area/ministation/cargo) -"mY" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"mZ" = ( -/obj/machinery/network/relay, -/turf/simulated/floor/plating, -/area/ministation/maint/w) "na" = ( -/obj/effect/floor_decal/industrial/custodial{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) "nb" = ( -/obj/machinery/conveyor{ - dir = 4; - id_tag = "recycler" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nc" = ( -/obj/machinery/material_processing/compressor, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nd" = ( -/obj/machinery/conveyor{ - dir = 9; - id_tag = "recycler" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/turf/simulated/floor/tiled, +/area/ministation/cargo) "ne" = ( -/obj/machinery/material_processing/stacker, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nf" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/commons) +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "ng" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/hygiene/toilet{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nh" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" }, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" + }, +/obj/effect/decal/cleanable/dirt, +/obj/random_multi/single_item/captains_spare_id, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) "ni" = ( /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/cable{ - icon_state = "1-4" - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/ministation/hall/n) "nj" = ( -/obj/machinery/camera/autoname{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/ministation/bridge/vault) -"nk" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nl" = ( -/turf/simulated/wall/r_wall, -/area/ministation/eva) -"nm" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nn" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "_West APC"; - pixel_x = -25 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"no" = ( -/obj/machinery/power/apc{ +/obj/structure/disposalpipe/segment{ dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-2" + icon_state = "pipe-c" }, -/turf/simulated/floor/plating, -/area/ministation/hall/n) -"np" = ( /obj/machinery/alarm{ - pixel_y = 23 + dir = 1; + pixel_y = -21 }, -/turf/simulated/floor/plating, -/area/ministation/hall/n) -"nq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"nk" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"nr" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +/area/ministation/maint/l1central) +"nn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" }, -/obj/structure/table, -/obj/item/storage/box/syringes, -/obj/item/storage/box/botanydisk, -/obj/item/chems/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ns" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/structure/sign/warning/vent_port{ dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"nt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 + pixel_y = -34 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/turf/simulated/floor/plating, +/area/ministation/supermatter) "nu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"nv" = ( -/obj/machinery/door/window/westleft, -/obj/machinery/door/window/eastleft, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +/obj/structure/closet, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/turf/simulated/floor/reinforced, -/area/ministation/science) +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "nw" = ( -/obj/machinery/atmospherics/unary/vent_pump{ +/obj/structure/window/reinforced{ dir = 8 }, -/turf/simulated/floor/reinforced, -/area/ministation/science) -"nx" = ( -/obj/machinery/camera/autoname, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ +/obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/suit_cycler/ministation, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ny" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + icon_state = "map_injector"; + id_tag = "n2_in"; + use_power = 1 }, -/obj/machinery/suit_cycler/ministation, -/turf/simulated/floor/tiled, -/area/ministation/eva) +/turf/simulated/floor/reinforced/nitrogen, +/area/ministation/atmospherics) +"nx" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) "nz" = ( /obj/machinery/suit_cycler/engineering/ministation, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) "nA" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"nB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"nC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) "nD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"nE" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/item/clothing/glasses/meson, -/obj/item/flashlight, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) +/turf/space, +/area/space) +"nE" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) "nF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nI" = ( -/obj/effect/floor_decal/industrial/custodial/corner{ - dir = 4 - }, /obj/machinery/light/small{ - dir = 8 + dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"nJ" = ( +/area/ministation/ai_upload) +"nG" = ( /obj/effect/floor_decal/industrial/custodial{ dir = 1 }, /obj/structure/railing/mapped{ dir = 1 }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nK" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nL" = ( -/obj/machinery/conveyor{ - id_tag = "recycler" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nM" = ( /obj/machinery/conveyor_switch/oneway{ id_tag = "recycler"; name = "recycler conveyor" }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"nN" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ +/area/ministation/trash) +"nH" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"nO" = ( -/obj/structure/table, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"nR" = ( +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ + dir = 8 }, -/obj/item/blueprints, -/obj/item/cell, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"nP" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"nS" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/closet/crate, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, -/obj/item/stack/material/ingot/mapped/copper/fifty, -/obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, -/obj/item/stack/material/pane/mapped/rglass/fifty, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"nQ" = ( -/obj/machinery/door/airlock/hatch/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"nY" = ( +/obj/machinery/airlock_sensor{ + id_tag = "westatmos_sensor"; + pixel_y = 4; + pixel_x = -20; dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"nR" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "westatmos_airlock"; + pixel_y = -4; + tag_airpump = "westatmos_vent"; + tag_chamber_sensor = "westatmos_sensor"; + tag_exterior_door = "westatmos_airlock_exterior"; + tag_interior_door = "westatmos_airlock_interior"; + dir = 4; + pixel_x = -20 }, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"nS" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"nU" = ( -/obj/structure/tank_rack/oxygen, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 +/area/ministation/maint/westatmos) +"ob" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"nV" = ( -/obj/machinery/light/small{ +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"oc" = ( +/obj/structure/table/woodentable, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"od" = ( +/obj/structure/bed/chair/comfy/black, +/obj/machinery/light, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"oi" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nW" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nX" = ( -/obj/abstract/landmark{ - name = "blobstart" +/turf/simulated/floor, +/area/ministation/maint/westatmos) +"ow" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"nZ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"oa" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/firedoor{ +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"oy" = ( +/turf/simulated/wall/r_wall, +/area/ministation/smcontrol) +"oC" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 8 }, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/science) -"ob" = ( +/turf/space, +/area/space) +"oE" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"oc" = ( /obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"od" = ( -/obj/machinery/computer/air_control{ - dir = 8; - id_tag = "xenobot"; - name = "Xenoflora Gas Monitor" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"oe" = ( -/obj/machinery/air_sensor{ - id_tag = "xenobot"; - name = "Xenoflora Gas Sensor" - }, -/turf/simulated/floor/reinforced, -/area/ministation/science) -"of" = ( -/obj/machinery/camera/autoname{ - dir = 4 - }, -/obj/machinery/commsrelay, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"og" = ( -/obj/machinery/door/airlock/glass/command{ - autoset_access = 0; - name = "Telecommunications glass airlock"; - req_access = list("ACCESS_TELECOMS") - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"oh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 4; - id_tag = "station1"; - tag_airpump = "escape1_vent"; - tag_chamber_sensor = "escape1_sensor"; - tag_exterior_door = "escape1_airlock_exterior"; - tag_interior_door = "escape1_airlock_interior"; - pixel_x = -20 + icon_state = "2-4" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"oi" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass/command, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"oj" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/eva) +"oF" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor, +/area/ministation/engine) +"oI" = ( +/obj/abstract/landmark/start{ + name = "Janitor" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/stool, +/turf/simulated/floor/tiled, +/area/ministation/janitor) +"oK" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + name = "SM APC"; + pixel_x = -27; + pixel_y = null; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/green, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ok" = ( +/area/ministation/supermatter) +"oM" = ( /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/power/smes/buildable/max_cap_in_out, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"oO" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastinterior" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ol" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/smcontrol) +"oS" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"oV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"om" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"oX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"pa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"on" = ( -/obj/effect/floor_decal/industrial/custodial{ - dir = 1 +/area/ministation/maint/l1ne) +"pe" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"pf" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/ministation/engine) +"ph" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"oo" = ( -/obj/effect/floor_decal/industrial/custodial/corner{ +/area/ministation/engine) +"pi" = ( +/obj/structure/window/reinforced{ dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"op" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"oq" = ( -/obj/machinery/door/airlock/glass, +/turf/simulated/floor/reinforced/airmix, +/area/ministation/atmospherics) +"po" = ( /obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"or" = ( +"pr" = ( +/obj/machinery/door/airlock/glass, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"os" = ( -/obj/structure/table, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/item/clothing/head/welding, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ot" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ou" = ( -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ov" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ow" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"ox" = ( +"ps" = ( +/obj/structure/ladder, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"px" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-4" }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"oy" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"pz" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"oz" = ( -/turf/simulated/wall, -/area/ministation/medical) -"oA" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"oB" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/full, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"oC" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/chems/glass/bucket, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"oD" = ( +/area/ministation/cargo) +"pB" = ( /obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ministation/science) -"oE" = ( -/obj/machinery/light, -/turf/simulated/floor/reinforced, -/area/ministation/science) -"oF" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastinterior" }, -/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/telecomms) -"oG" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/area/ministation/smcontrol) +"pJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/telecomms_hub, -/obj/item/cell, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"oH" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"pQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 5 + }, +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"oI" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"pS" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/vehicle/train/cargo/trolley, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"oJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +/area/ministation/cargo) +"pV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/turf/simulated/floor/plating, +/area/ministation/engine) +"pZ" = ( +/obj/effect/floor_decal/industrial/custodial/corner{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"oK" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; - dir = 8 + pixel_x = -24 }, /turf/simulated/floor/plating, -/area/ministation/hall/w) -"oL" = ( +/area/ministation/trash) +"qa" = ( +/obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"oM" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/janitor) -"oN" = ( -/turf/simulated/wall, -/area/ministation/janitor) -"oQ" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/woodentable, -/obj/item/stack/material/panel/mapped/plastic/ten, -/obj/item/stack/material/plank/mapped/wood/ten, -/obj/item/stack/material/plank/mapped/wood/ten, -/obj/item/stack/material/panel/mapped/plastic/ten, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"oR" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"oS" = ( -/mob/living/simple_animal/mouse, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"oT" = ( +/area/ministation/cargo) +"qb" = ( /obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"oU" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/multitool, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/item/clothing/gloves/insulated, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"oV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"oW" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"oX" = ( -/obj/item/pen, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"oY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"oZ" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"pa" = ( +/turf/simulated/floor/pool, +/area/ministation/dorms) +"qd" = ( +/obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ icon_state = "1-2" }, -/mob/living/simple_animal/mouse, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"qe" = ( +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"qf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"pb" = ( +/area/ministation/supermatter) +"qr" = ( /obj/structure/closet, /obj/random/maintenance, +/obj/item/clothing/accessory/toggleable/hawaii, +/obj/random/gloves, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"pc" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 +/area/ministation/maint/l1ne) +"qt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/table/woodentable, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 }, -/turf/simulated/floor/plating, -/area/ministation/medical) -"pd" = ( -/obj/structure/flora/pottedplant/flower, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pe" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pf" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pg" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 - }, -/area/ministation/cafe) -"ph" = ( +/obj/item/poster, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"qu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/camera/autoname{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, /obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"pi" = ( -/obj/machinery/power/apc{ dir = 8; - name = "_West APC"; - pixel_x = -25 + icon_state = "tube1" }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"qA" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"pj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"qD" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "4-8" + }, +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"qG" = ( +/obj/effect/floor_decal/industrial/custodial/corner{ + dir = 1 }, +/turf/simulated/floor/plating, +/area/ministation/trash) +"qI" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/portables_connector{ +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"qL" = ( +/obj/machinery/camera/network/engineering{ + name = "SM West"; dir = 8 }, -/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"pk" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 +/area/ministation/supermatter) +"qM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/janitor) -"pl" = ( -/obj/machinery/light{ +/area/ministation/maint/l1ne) +"qN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"qO" = ( +/obj/machinery/alarm{ dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 + pixel_x = 24 }, -/obj/structure/closet/jcloset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/janitor) -"pm" = ( +/area/ministation/hall/n) +"qP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"pn" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/camera/autoname, -/obj/item/chems/spray/cleaner, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"po" = ( -/obj/structure/table, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/storage/box/lights/mixed, -/obj/item/grenade/chem_grenade/cleaner, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"pp" = ( -/obj/effect/decal/cleanable/blood/oil, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/floor/plating, -/area/ministation/maint/ne) -"pq" = ( -/obj/machinery/atmospherics/portables_connector{ +/area/ministation/maint/westatmos) +"qQ" = ( +/obj/structure/railing/mapped{ dir = 1 }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"pr" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/camera/autoname{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"ps" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"qY" = ( +/obj/structure/lattice, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"pt" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 +/turf/space, +/area/space) +"rb" = ( +/obj/machinery/light{ + dir = 8 }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"rc" = ( /obj/structure/cable{ - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/ministation/hall/s) -"pu" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/chems/spray/extinguisher, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"pv" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/item/storage/firstaid/regular{ - pixel_x = 6; - pixel_y = -5 + icon_state = "1-2" }, -/obj/structure/table, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"pw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"rd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"px" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/alarm{ + pixel_y = 23 }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"py" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"re" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"rf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"pz" = ( -/obj/structure/rack{ - dir = 8 + dir = 4 }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, /obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"pA" = ( -/obj/machinery/power/apc{ - name = "_South APC"; - pixel_y = -24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/hall/e) -"pB" = ( -/obj/machinery/alarm{ dir = 1; - pixel_y = -22 + icon_state = "warning" }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"rn" = ( +/obj/machinery/light/small, /obj/structure/cable{ icon_state = "1-8" }, /turf/simulated/floor/plating, -/area/ministation/hall/e) -"pC" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"pD" = ( -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"pF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/maint/l1central) +"rp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"pG" = ( -/obj/item/sign/diploma/fake/medical{ - pixel_y = 31 - }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"rq" = ( +/obj/machinery/door/airlock/glass/engineering, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"pH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/item/stool/padded, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"pI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"ru" = ( +/obj/effect/floor_decal/corner/white{ + dir = 6 }, -/obj/item/stool/padded, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"rz" = ( +/obj/machinery/conveyor{ + dir = 8; + id_tag = "trash_sort" }, -/turf/simulated/wall, -/area/ministation/medical) -"pK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/body_scan_display{ - pixel_y = 20 +/turf/simulated/floor/plating, +/area/ministation/trash) +"rA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/bodyscanner{ - dir = 8 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"rD" = ( +/obj/structure/table, +/obj/item/radio/intercom/locked{ + pixel_y = 20 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pL" = ( +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"rH" = ( +/obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/body_scanconsole{ +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"rI" = ( +/obj/structure/bed/chair/comfy/black{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, -/obj/machinery/light{ - dir = 1 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"rQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/table, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"rT" = ( +/obj/machinery/conveyor{ + id_tag = "recycler" + }, +/turf/simulated/floor/plating, +/area/ministation/trash) +"rU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/closet/secure_closet/engineering_chief, +/turf/simulated/floor/carpet/orange, +/area/ministation/engine) +"sb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/vending/medical{ - pixel_x = -2 +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"sc" = ( +/obj/abstract/turbolift_spawner/ministation{ + dir = 1; + icon_state = "" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/turf/simulated/floor, +/area/ministation/hall/s1) +"sf" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/camera/network/medbay, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pP" = ( -/obj/structure/table, -/obj/item/surgicaldrill, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pQ" = ( -/obj/structure/table, -/obj/item/hemostat, -/obj/item/retractor, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pR" = ( -/obj/structure/table, -/obj/item/scalpel{ - pixel_y = 12 +/obj/machinery/door/airlock/external/glass{ + locked = 1; + id_tag = "stern_engineering_airlock_exterior"; + autoset_access = 0 }, -/obj/item/circular_saw, -/obj/machinery/light{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/plating, +/area/ministation/engine) +"sh" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pS" = ( -/obj/structure/table, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/item/bonesetter, -/obj/item/bonegel, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pT" = ( -/obj/structure/table, -/obj/item/cautery{ - pixel_x = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/item/sutures, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"pU" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/medical) -"pV" = ( -/obj/abstract/landmark/start{ - name = "Clown" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/vomit, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"pW" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 +/area/ministation/hall/n) +"sl" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 1; + tag_north = 4; + tag_west = 2; + use_power = 0 }, -/area/ministation/cafe) -"pX" = ( -/obj/machinery/firealarm{ - pixel_y = 24 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/camera/autoname, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"sq" = ( +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"sx" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/space, +/area/space) +"sy" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, -/area/ministation/cafe) -"pY" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"pZ" = ( -/obj/structure/closet/l3closet/janitor, -/obj/item/grenade/chem_grenade/cleaner, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"qa" = ( +/obj/structure/closet/jcloset, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qb" = ( -/obj/abstract/landmark/start{ - name = "Janitor" +"sz" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stool, +/obj/machinery/camera/autoname, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qc" = ( +"sA" = ( /obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 }, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/storage/box/lights/mixed, +/obj/item/grenade/chem_grenade/cleaner, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qd" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "_West APC"; - pixel_x = -25 - }, +"sC" = ( /obj/structure/cable{ - icon_state = "0-2" + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"sG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"qe" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/area/ministation/maint/eastatmos) +"sJ" = ( +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"qg" = ( +/area/ministation/ai_sat) +"sK" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "4-8" + }, +/obj/structure/table, +/obj/item/stack/cable_coil, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"sO" = ( +/obj/machinery/alarm{ + pixel_y = 23 }, /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 1 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/structure/closet/crate, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/mapped/steel/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/ingot/mapped/copper/fifty, +/obj/item/stack/material/pane/mapped/glass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/pane/mapped/rglass/fifty, /turf/simulated/floor/tiled, /area/ministation/eva) -"qh" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/door/airlock/glass/command, -/obj/machinery/door/firedoor, +"sR" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"qi" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/machinery/status_display{ + pixel_y = -32; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"sT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"qj" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; +/turf/simulated/floor/plating, +/area/space) +"sV" = ( +/obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"qk" = ( -/turf/simulated/wall, -/area/ministation/hall/e) -"ql" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/medical) -"qm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/area/ministation/maint/l1central) +"sX" = ( +/obj/effect/floor_decal/corner/red{ dir = 4 }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"ta" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/ministation/engine) +"tc" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall, +/area/ministation/dorms) +"tg" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/table, -/obj/item/book/skill/medical, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"th" = ( /obj/structure/table, -/obj/item/newspaper, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qs" = ( -/obj/machinery/door/firedoor{ +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/airlock/double/medical{ - name = "medbay airlock"; - autoset_access = 0; - id_tag = "medleave" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/clothing/head/welding, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"tj" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/space) +"tk" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qx" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qy" = ( -/obj/structure/table, -/obj/item/storage/box/gloves, -/obj/item/storage/box/masks, -/obj/item/clothing/suit/surgicalapron, -/obj/item/clothing/suit/surgicalapron, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/space, +/area/space) +"tl" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qB" = ( -/obj/structure/table, -/obj/item/chems/glass/rag, -/obj/item/trash/stick, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qC" = ( -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 - }, -/area/ministation/cafe) -"qD" = ( -/obj/effect/floor_decal/snow, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 - }, -/area/ministation/cafe) -"qE" = ( -/obj/machinery/firealarm{ - pixel_y = 32 - }, -/obj/structure/bed/chair/comfy/beige, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"qF" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/bed/chair/comfy/beige, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"qG" = ( -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"qH" = ( -/obj/structure/table/woodentable, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/status_display{ - pixel_y = 32 - }, -/obj/structure/sign/warning/smoking{ - pixel_x = 32 - }, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"qI" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/turf/space, +/area/space) +"tm" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"qJ" = ( +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"tq" = ( /obj/item/chems/glass/bucket, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +"tr" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qL" = ( -/obj/effect/floor_decal/industrial/loading{ +"ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/janitor) -"qM" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor{ - dir = 8 +"tt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/janitor) -"qN" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"qO" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"qP" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"qQ" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/skele_stand, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"qR" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/ministation/eva) -"qS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, +/area/ministation/hall/s1) +"tu" = ( +/obj/structure/ore_box, /turf/simulated/floor/tiled, -/area/ministation/eva) -"qT" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/cargo) +"tv" = ( +/obj/abstract/landmark{ + name = "bluespace_a" }, +/turf/simulated/floor, +/area/ministation/hall/s1) +"tw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"qU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"qV" = ( -/obj/machinery/light/small{ +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"tz" = ( +/obj/structure/railing/mapped{ dir = 8 }, -/obj/structure/hygiene/toilet{ - pixel_y = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"tB" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/obj/effect/decal/cleanable/vomit, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"qW" = ( -/obj/structure/hygiene/sink{ +/obj/machinery/power/apc/high{ dir = 1; - pixel_y = 25 + pixel_y = 20 }, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"qX" = ( -/obj/structure/reagent_dispensers/water_cooler{ +/turf/simulated/floor/plating, +/area/ministation/trash) +"tD" = ( +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"qY" = ( -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"qZ" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"ra" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue2, -/area/ministation/medical) -"rb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/machinery/portable_atmospherics/canister/helium{ + start_pressure = 2559.63 }, -/obj/machinery/status_display{ - pixel_x = -32 +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"tH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rd" = ( /obj/abstract/landmark/start{ - name = "Medical Doctor" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/button/alternate/door{ - dir = 4; - id_tag = "medleave"; - name = "Interior medbay doors button"; - pixel_x = -32; - pixel_y = -32 + name = "Assistant" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"re" = ( -/obj/abstract/landmark/start{ - name = "Medical Doctor" +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"tO" = ( +/obj/effect/floor_decal/carpet/blue2{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/structure/closet/crate/bin/ministation, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"tU" = ( +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ri" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/abstract/landmark/start{ + name = "Assistant" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rk" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rl" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/table/gamblingtable, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/flashlight/lamp/green, +/obj/item/poster, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"tW" = ( +/obj/machinery/door/airlock/mining, +/turf/simulated/floor/plating, +/area/ministation/cargo) +"ua" = ( +/obj/machinery/power/solar, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ro" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/plating, +/area/space) +"ue" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/camera/network/hallway{ + dir = 8 }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"ug" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"uh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/area/ministation/hall/s1) +"ui" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"uj" = ( +/obj/structure/bed/chair{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 +/obj/effect/floor_decal/corner/beige{ + dir = 9 }, +/obj/item/chems/drinks/juicebox/random, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rr" = ( -/obj/structure/table/woodentable, -/obj/item/storage/fancy/cigarettes{ - pixel_y = 2 +/area/ministation/hall/n) +"ul" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 }, -/obj/item/flame/lighter/random, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"rs" = ( -/obj/structure/table/woodentable, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/rack{ + dir = 8 }, -/obj/item/pen, -/obj/item/camera, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"rt" = ( -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"ru" = ( -/obj/structure/bed/chair/comfy/beige{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"um" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/light{ +/obj/effect/floor_decal/corner/red/diagonal{ dir = 4 }, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"rv" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/meter/turf, +/obj/structure/window/reinforced{ + current_health = 1e+007 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ministation/atmospherics) +"un" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"ur" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"us" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -6762,9132 +3901,8459 @@ /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/ministation/janitor) -"rw" = ( -/obj/machinery/network/requests_console{ - department = "Janitorial"; - pixel_y = -29 +"ut" = ( +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"rx" = ( -/obj/structure/closet/crate/bin/ministation, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -23 +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, +/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, -/area/ministation/janitor) -"ry" = ( -/obj/machinery/vending/tool{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"rz" = ( -/obj/machinery/vending/assist/ministation{ - dir = 1 +/area/ministation/eva) +"uy" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"rA" = ( -/obj/machinery/camera/autoname{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/light{ +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"uB" = ( +/obj/structure/tank_rack/oxygen, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"uE" = ( +/obj/effect/floor_decal/industrial/loading{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"rC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"rD" = ( -/obj/effect/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/eva) -"rE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 +/area/ministation/janitor) +"uG" = ( +/obj/machinery/door/airlock/atmos, +/turf/simulated/floor/tiled, +/area/ministation/smcontrol) +"uH" = ( +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"uI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"uK" = ( +/turf/simulated/wall, +/area/ministation/maint/westatmos) +"uL" = ( +/obj/machinery/door/airlock/glass/engineering{ + autoset_access = 0; + req_access = list("ACCESS_CHIEF_ENGINEER") }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rF" = ( -/obj/item/soap{ - icon_state = "soap-oval" - }, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"rG" = ( -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"rH" = ( -/obj/structure/hygiene/shower{ +/area/ministation/engine) +"uM" = ( +/obj/machinery/light/small{ dir = 8 }, -/obj/item/bikehorn/rubberducky, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"rI" = ( -/obj/item/stool/padded, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 +/obj/machinery/conveyor{ + id_tag = "trash_sort" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 +/turf/simulated/floor/plating, +/area/ministation/trash) +"uS" = ( +/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/obj/machinery/light{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"uT" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rL" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/structure/curtain/medical, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rM" = ( -/obj/machinery/network/requests_console{ - department = "Medbay"; - name = "Medbay RC"; - pixel_y = -30 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/structure/closet/crate/bin/ministation, -/obj/random/trash, -/obj/item/chems/syringe, -/obj/item/trash/stick, -/obj/item/organ/internal/appendix, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"uX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rO" = ( +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"uY" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"va" = ( +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/pane/mapped/glass/fifty, +/obj/item/stock_parts/circuitboard/airlock_electronics, +/obj/item/stock_parts/circuitboard/airlock_electronics, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/closet/crate, +/obj/item/cell, +/obj/item/cell, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"vf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/conveyor{ + dir = 8; + id_tag = "trash_sort" + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/ministation/trash) +"vg" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/s1) +"vk" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ dir = 4 }, +/obj/machinery/portable_atmospherics/powered/pump/filled, /obj/machinery/light{ - dir = 4 + dir = 4; + icon_state = "bulb1" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"vl" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/wall, -/area/ministation/medical) -"rR" = ( -/obj/machinery/vitals_monitor, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rS" = ( -/obj/structure/hygiene/sink{ +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/sign/warning/radioactive{ + pixel_y = -10; dir = 4; - pixel_x = 11 + pixel_x = -34 }, -/obj/machinery/camera/network/medbay{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"rT" = ( -/obj/structure/kitchenspike, -/obj/effect/floor_decal/snow, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"vp" = ( +/turf/simulated/wall, +/area/ministation/supermatter) +"vq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"vv" = ( +/obj/machinery/light/small{ + dir = 1 }, -/area/ministation/cafe) -"rU" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/snow, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 - }, -/area/ministation/cafe) -"rV" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 - }, -/area/ministation/cafe) -"rW" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rX" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"vx" = ( +/obj/machinery/light/small{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"rY" = ( -/obj/structure/closet/crate/bin/ministation, -/obj/random/trash, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/carpet, -/area/ministation/hall/w) -"rZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"sa" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"vz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/fabricator, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"vA" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 21 + }, +/obj/machinery/camera/network/engineering{ + dir = 8; + name = "Tank Storage" }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"sb" = ( -/obj/structure/cable{ - icon_state = "0-4" +/area/ministation/engine) +"vC" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/pen/red, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/machinery/button/blast_door{ + id_tag = "cargoshut"; + name = "Cargo Shutters Button"; + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/stamp/cargo, +/obj/item/folder/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, -/area/ministation/eva) -"sc" = ( +/area/ministation/cargo) +"vI" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/computer/atmos_alert{ + dir = 8 }, -/obj/machinery/door/airlock/glass/command, -/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"vK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"vL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"vP" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled, /area/ministation/eva) -"sd" = ( +"vV" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"vY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"se" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/ministation/hall/e) -"sf" = ( -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sg" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sh" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"si" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" - }, -/obj/machinery/door/airlock/double/medical{ - name = "Medbay Lobby airlock"; - autoset_access = 0 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"wb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sk" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sm" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 +/obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sn" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"wd" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/door/airlock/medical, -/obj/effect/floor_decal/corner/paleblue/full, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"so" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/structure/sign/warning/radioactive{ + pixel_y = -34; + dir = 1; + pixel_x = -8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"we" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sr" = ( -/turf/simulated/floor/tiled/dark/monotile{ - name = "telecomms dark floor"; - temperature = 263 +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/hallway{ + dir = 4 }, -/area/ministation/telecomms) -"ss" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"st" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/area/ministation/hall/s1) +"wg" = ( +/turf/simulated/wall/r_wall, +/area/space) +"wm" = ( +/obj/structure/closet/secure_closet/quartermaster{ + req_access = list("ACCESS_MINING") }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"su" = ( +/area/ministation/cargo) +"wp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"ws" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/autoname, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sv" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"wt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/ministation/engine) +"wu" = ( +/obj/machinery/vending/fitness, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"wx" = ( /obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sw" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sy" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/machinery/camera/network/hallway{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sz" = ( -/obj/structure/cable{ - icon_state = "2-4" +/area/ministation/hall/n) +"wA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/engine) +"wB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sA" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor{ +/area/ministation/cargo) +"wC" = ( +/obj/structure/closet, +/obj/item/gun/launcher/foam/crossbow, +/obj/item/storage/box/foam_darts, +/obj/item/storage/box/foam_darts, +/obj/item/gun/launcher/foam/revolver, +/obj/item/gun/launcher/foam/revolver, +/obj/item/gun/launcher/foam, +/obj/item/gun/launcher/foam, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"wD" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"wJ" = ( +/obj/machinery/camera/autoname{ dir = 8 }, +/turf/simulated/floor/plating, +/area/ministation/trash) +"wK" = ( +/obj/structure/bed/padded, +/turf/simulated/floor/carpet/orange, +/area/ministation/engine) +"wM" = ( +/obj/structure/closet/emcloset, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"sC" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"sD" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor{ +/area/ministation/hall/s1) +"wN" = ( +/obj/structure/rack{ dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sF" = ( +/obj/item/storage/belt, +/obj/item/storage/belt, +/obj/item/storage/belt, +/obj/item/storage/belt, +/obj/item/storage/belt, /obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" + dir = 1; + icon_state = "tube1" }, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sG" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/cargo) +"wP" = ( +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/firealarm{ - pixel_y = 32 +/obj/structure/table/steel, +/obj/item/stack/material/puck/mapped/uranium/ten, +/turf/simulated/floor/plating, +/area/ministation/engine) +"wS" = ( +/obj/machinery/status_display{ + pixel_y = -32; + dir = 1 }, +/obj/item/plunger, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/sign/department/eva{ - pixel_y = 32 +/area/ministation/janitor) +"wT" = ( +/obj/structure/closet/lasertag/blue, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"wZ" = ( +/obj/item/mollusc/barnacle{ + pixel_x = 20 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sI" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/airless, +/area/space) +"xg" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"xj" = ( +/obj/machinery/power/sensor{ + id_tag = "Engine Power"; + name = "Powernet Sensor - Engine Power" }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sJ" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/cable/cyan{ + icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"xk" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Hard Storage" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sL" = ( +/turf/simulated/floor/plating, +/area/ministation/engine) +"xm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey/bordercorner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/sign/warning/high_voltage{ - pixel_y = 29 +/obj/abstract/landmark/start{ + name = "Assistant" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/white/border{ - dir = 1 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"xo" = ( +/obj/machinery/emitter, +/turf/simulated/floor/plating, +/area/ministation/engine) +"xq" = ( +/obj/structure/ladder, +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"xr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/department/eva{ + pixel_y = 30 }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/floor_decal/corner/lightgrey/half{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"xt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey{ +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"xw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"xE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 1 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" }, -/obj/structure/sign/department/watercloset{ - pixel_y = 32 +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sO" = ( +/area/ministation/hall/s1) +"xJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/light{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"xN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/turf/simulated/floor/pool, +/area/ministation/dorms) +"xO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"sR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/firstaid{ - dir = 8 +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"xQ" = ( +/obj/machinery/light/small, +/obj/machinery/conveyor{ + dir = 4; + id_tag = "trash_sort" }, -/obj/effect/decal/cleanable/blood, -/obj/structure/sign/department/redcross{ - pixel_y = 32 +/turf/simulated/floor/plating, +/area/ministation/trash) +"xX" = ( +/obj/machinery/material_processing/compressor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"sS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ +/turf/simulated/floor/plating, +/area/ministation/trash) +"xZ" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"sT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 +/turf/space, +/area/space) +"yc" = ( +/obj/machinery/alarm{ + pixel_y = 23 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"sU" = ( -/obj/structure/table/reinforced, -/obj/machinery/camera/autoname, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/turf/simulated/floor/pool, +/area/ministation/dorms) +"yh" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/door/firedoor{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/engine) +"yi" = ( +/obj/machinery/light/small, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/item/storage/medical_lolli_jar{ - pixel_y = 7 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"yj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 }, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"yk" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sV" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/machinery/camera/network/engineering{ + name = "SM East"; + dir = 4 }, -/obj/structure/table/reinforced, -/obj/machinery/button/blast_door{ - id_tag = "quarantine"; - name = "Infirmary Quarantine Button" - }, -/obj/machinery/button/alternate/door{ - id_tag = "medleave"; - name = "Interior medbay doors button"; - pixel_y = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sW" = ( -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sX" = ( -/obj/machinery/sleeper/standard, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sY" = ( -/obj/structure/table, -/obj/item/chems/dropper, -/obj/item/chems/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"sZ" = ( -/obj/structure/table, -/obj/item/storage/box/syringes, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ta" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tb" = ( -/obj/item/chems/ivbag/blood/aminus, -/obj/item/chems/ivbag/blood/aplus, -/obj/item/chems/ivbag/blood/bminus, -/obj/item/chems/ivbag/blood/bplus, -/obj/item/chems/ivbag/blood/ominus, -/obj/item/chems/ivbag/blood/oplus, -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tc" = ( -/obj/structure/cable{ - icon_state = "2-4" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"ym" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Hard Storage" }, -/turf/simulated/floor/tiled/dark/monotile{ - name = "telecomms dark floor"; - temperature = 263 +/obj/structure/cable{ + icon_state = "1-2" }, -/area/ministation/telecomms) -"td" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/engine) +"yo" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, +/turf/simulated/floor/plating, +/area/ministation/engine) +"yp" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark/monotile{ - name = "telecomms dark floor"; - temperature = 263 +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"yu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/area/ministation/telecomms) -"te" = ( -/obj/machinery/light{ +/obj/structure/sign/warning/airlock{ dir = 8; - icon_state = "tube1" + pixel_x = 43 }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tf" = ( +/area/ministation/eva) +"yv" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"yx" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/ss13/l1, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"yz" = ( +/obj/machinery/vending/engineering{ dir = 8 }, -/obj/effect/floor_decal/ss13/l3, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"th" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/ss13/l5, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ti" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/ss13/l7, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"yC" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/floor_decal/ss13/l9, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tk" = ( -/obj/effect/floor_decal/ss13/l11, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/area/ministation/ai_sat) +"yD" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tl" = ( -/obj/effect/floor_decal/ss13/l13, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/ss13/l15, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tn" = ( -/obj/abstract/landmark{ - name = "lightsout" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tp" = ( /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tq" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tr" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"yE" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ts" = ( /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"yH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tt" = ( -/obj/machinery/door/firedoor{ +/obj/abstract/landmark/start{ + name = "Assistant" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"yL" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/plating, -/area/ministation/hall/w) -"tu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, +/area/ministation/trash) +"yO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/machinery/mining/brace, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"tv" = ( +/area/ministation/cargo) +"yP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + pixel_x = 2; + pixel_y = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"yS" = ( /obj/abstract/landmark{ name = "bluespace_a" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"tw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"tx" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"ty" = ( -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tz" = ( -/obj/structure/cable{ - icon_state = "1-4" +/turf/space, +/area/space) +"yT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"za" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/janitor) +"ze" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tC" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light, +/obj/structure/emergency_dispenser/west, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"zg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, -/obj/structure/hygiene/drain, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tD" = ( -/obj/structure/cable{ - icon_state = "2-8" +/area/ministation/engine) +"zk" = ( +/obj/structure/transit_tube, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tE" = ( -/obj/abstract/landmark{ - name = "lightsout" +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 +/turf/space, +/area/ministation/engine) +"zl" = ( +/obj/machinery/light{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"zm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"tH" = ( -/obj/effect/floor_decal/industrial/firstaid{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"zr" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"zw" = ( +/obj/structure/table/woodentable, +/obj/machinery/light{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"zy" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"tI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"zz" = ( +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"tJ" = ( -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"tK" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/item/stack/material/brick/mapped/sandstone/five, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"zB" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"zH" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east_con = 0; + tag_north = 1; + tag_north_con = 0.21; + tag_south = 1; + tag_south_con = 0.79; + tag_west = 2 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/corner/white{ + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tL" = ( -/obj/abstract/landmark/start{ - name = "Medical Doctor" +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"zJ" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"zN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/yellow/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"zR" = ( +/obj/effect/wallframe_spawn/reinforced_borosilicate, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "SupermatterPort"; + name = "Reactor Blast Door" }, -/obj/structure/bed/chair/office/light{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"zS" = ( +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "SupermatterPort"; + name = "Reactor Blast Door" }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/effect/wallframe_spawn/reinforced_borosilicate, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"zW" = ( +/turf/simulated/wall, +/area/ministation/dorms) +"zX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 }, +/turf/space, +/area/space) +"zY" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tM" = ( -/obj/abstract/landmark{ - name = "bluespace_a" +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"zZ" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ab" = ( +/obj/structure/window/reinforced{ + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tN" = ( -/obj/machinery/door/firedoor{ +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/door/airlock/medical, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/effect/floor_decal/corner/blue/diagonal{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tO" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/meter/turf, +/turf/simulated/floor/reinforced/oxygen, +/area/ministation/atmospherics) +"Ad" = ( +/obj/structure/rack{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"tP" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/item/storage/belt/utility, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/item/clothing/head/welding, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"tQ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"tR" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ae" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 +/obj/machinery/camera/network/engineering{ + name = "Office"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ai" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/washing_machine, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Aj" = ( +/obj/machinery/light{ + dir = 1 }, +/obj/machinery/vending/coffee, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"tS" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 +/area/ministation/hall/s1) +"Ak" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Al" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/mouse/brown/Tom, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"tT" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 8; - set_temperature = 263 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"tU" = ( -/obj/structure/cable{ - icon_state = "1-8" +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Am" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, -/turf/simulated/floor/tiled/dark/monotile{ - name = "telecomms dark floor"; - temperature = 263 +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"Ao" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/ministation/telecomms) -"tV" = ( -/obj/machinery/network/router, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Aq" = ( +/obj/structure/rack{ + dir = 8 }, -/area/ministation/telecomms) -"tW" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/item/storage/belt/utility, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/item/clothing/head/welding/engie, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/ss13/l2, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/floor_decal/ss13/l4, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ar" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-4" }, -/obj/effect/floor_decal/ss13/l6, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"tZ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/ss13/l8, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ua" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"As" = ( +/obj/machinery/alarm{ + pixel_y = 21 }, -/obj/abstract/landmark{ - name = "bluespace_a" +/obj/structure/cable/cyan{ + icon_state = "2-8" }, -/obj/effect/floor_decal/ss13/l10, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ub" = ( +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Ax" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/effect/floor_decal/ss13/l12, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uc" = ( +/area/ministation/eva) +"Az" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"AB" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/floor_decal/ss13/l14, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ud" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/door/airlock/external/glass{ + id_tag = "port_engineering_airlock_exterior"; + locked = 1; + autoset_access = 0 }, -/obj/effect/floor_decal/ss13/l16, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ue" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uf" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/machinery/button/access/interior{ + id_tag = "port_engineering_airlock"; + name = "exterior access button"; + pixel_y = 24; + command = "cycle_exterior" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ug" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor{ +/turf/simulated/floor/plating, +/area/ministation/engine) +"AC" = ( +/obj/structure/lattice, +/turf/simulated/wall, +/area/space) +"AD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"AF" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"AH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"ui" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"uj" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor{ - dir = 8 +/area/ministation/hall/s1) +"AJ" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"ul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/power/smes/buildable/max_cap_in_out{ + capacity = 5e+009 }, -/obj/structure/sign/double/barsign{ - dir = 1; - pixel_x = 1; - pixel_y = -63 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"AK" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"um" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/airlock_sensor{ + id_tag = "stern_engineering_sensor"; + pixel_y = 10; + pixel_x = -20; dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"un" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"AM" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"AN" = ( +/obj/machinery/conveyor{ + dir = 4; + id_tag = "recycler" }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"uo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/autoname{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/trash) +"AP" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastinterior" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"up" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/smcontrol) +"AQ" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastinterior" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"uq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"us" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/smcontrol) +"AR" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/firstaid{ +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"AU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"ut" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"uu" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/door/firedoor{ +/turf/simulated/floor/tiled, +/area/ministation/eva) +"AV" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"AW" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" +/turf/simulated/floor, +/area/ministation/maint/westatmos) +"AX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"uv" = ( /obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 + dir = 4; + pixel_x = 24 }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Ba" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"uw" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -23 +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"Bb" = ( +/obj/structure/railing/mapped{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ux" = ( -/obj/machinery/newscaster{ - pixel_x = 32 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Be" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Bg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"uy" = ( -/obj/structure/morgue, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"uA" = ( -/obj/machinery/network/mainframe, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"uB" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uC" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Bh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uE" = ( -/obj/effect/floor_decal/industrial/loading{ +/area/ministation/ai_sat) +"Bi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uF" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"uI" = ( /turf/simulated/wall/r_wall, -/area/ministation/hop) -"uJ" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/ai_upload) +"Bj" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"uK" = ( -/turf/simulated/wall, -/area/ministation/maint/sw) -"uL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"uM" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, /turf/simulated/floor/plating, -/area/ministation/cafe) -"uN" = ( +/area/ministation/engine) +"Bk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"uO" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 }, -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/light{ +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Bn" = ( +/obj/effect/floor_decal/carpet/blue2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"uP" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/area/ministation/hall/s1) +"Bo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"uS" = ( -/obj/effect/floor_decal/corner/green/half, +/area/ministation/engine) +"Bp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, /turf/simulated/floor/tiled, -/area/ministation/hall/e) -"uT" = ( -/obj/effect/floor_decal/industrial/firstaid{ +/area/ministation/cargo) +"Bq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/wood{ dir = 8 }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"uU" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Bt" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/floor/carpet/blue2, +/area/ministation/hall/s1) +"Bu" = ( +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"uV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/structure/cable{ + icon_state = "16-0" }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_x = -32 +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"uW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"uX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/structure/disposalpipe/up{ + dir = 4 }, -/obj/machinery/light/small{ +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"Bw" = ( +/obj/structure/bed/chair/comfy/black{ dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"uZ" = ( -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"va" = ( -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stock_parts/circuitboard/airlock_electronics, -/obj/item/stock_parts/circuitboard/airlock_electronics, -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/closet/crate, -/obj/item/cell, -/obj/item/cell, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"vb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vd" = ( -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Bx" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 }, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"ve" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "hopshut"; - name = "office shutters" +/obj/structure/table/gamblingtable, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/insulated/cheap, +/obj/item/clothing/gloves/insulated/cheap, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/hop) -"vf" = ( -/obj/structure/cable{ - icon_state = "0-8" +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"Bz" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat2_airlock_exterior" }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "hopshut"; - name = "office shutters" +/obj/machinery/button/access/interior{ + id_tag = "sat2_airlock"; + name = "exterior access button"; + pixel_x = -32; + pixel_y = 24; + command = "cycle_exterior" }, -/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/hop) -"vg" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/southright, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters/open{ - id_tag = "hopshut"; - name = "office shutters" +/area/ministation/ai_sat) +"BB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 }, +/obj/machinery/meter, /turf/simulated/floor/plating, -/area/ministation/hop) -"vi" = ( -/obj/structure/table, -/obj/item/hand_labeler, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/machinery/recharger, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vj" = ( +/area/ministation/supermatter) +"BC" = ( /obj/structure/table, -/obj/item/folder/blue, -/obj/machinery/network/requests_console{ - announcementConsole = 1; - department = "Lieutenant Office"; - name = "Lieutenant RC"; - pixel_y = 30 - }, -/obj/item/storage/box/PDAs, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vk" = ( -/obj/structure/closet/crate/bin/ministation, -/obj/machinery/light{ - dir = 4 +/obj/machinery/cell_charger, +/obj/item/multitool, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, +/obj/item/clothing/gloves/insulated, /turf/simulated/floor/tiled, -/area/ministation/hop) -"vm" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/eva) +"BD" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"vn" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/structure/ladder, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"vq" = ( -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vr" = ( -/obj/machinery/computer/arcade, -/obj/structure/noticeboard{ - default_pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vs" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vt" = ( -/obj/machinery/light{ - dir = 1 +/area/ministation/maint/l1ne) +"BF" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/radio/intercom{ - pixel_y = 25 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"BG" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vv" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"vx" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/small{ - dir = 1 - }, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"vy" = ( -/obj/machinery/vending/boozeomat, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"vz" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/area/ministation/ai_sat) +"BM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 }, -/obj/structure/table, -/obj/machinery/chemical_dispenser/bar_coffee/full, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"vA" = ( -/obj/structure/table, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"vB" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"vC" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"vD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southleft, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"vE" = ( -/obj/item/synthesized_instrument/guitar, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/southright, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"vF" = ( -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" - }, -/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/medical) -"vG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/southright, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" +/area/ministation/supermatter) +"BN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/medical) -"vH" = ( -/obj/structure/table, -/obj/item/chems/dropper, -/obj/item/storage/box/syringes, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"vI" = ( +/area/ministation/ai_sat) +"BP" = ( /obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"vJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/mob/living/simple_animal/crow{ - desc = "She's not a real doctor but she is a real bird."; - name = "Dr. Bird"; - stop_automated_movement = 0 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"vK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/medical, -/obj/effect/floor_decal/corner/paleblue/full, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"vL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"vM" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/structure/closet/coffin, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"vN" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags, -/obj/item/pen, -/obj/item/radio/intercom{ - dir = 1; - pixel_y = -32 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"vO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/space) +"BQ" = ( +/obj/structure/fitness/punchingbag, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"BS" = ( /obj/machinery/light{ - dir = 8 + dir = 4; + icon_state = "bulb1" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vP" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vQ" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vR" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/item/towel, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"BW" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1 }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"BY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"BZ" = ( +/obj/machinery/conveyor_switch/oneway{ + id_tag = "trash_sort" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"vS" = ( +/turf/simulated/floor/plating, +/area/ministation/trash) +"Ca" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/command, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Cb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vT" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/button/blast_door{ - id_tag = "hopshut"; - name = "Office Shutters Button"; - pixel_y = 30 +/obj/abstract/landmark/start{ + name = "Assistant" }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Cg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vU" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ch" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/door/airlock/highsecurity, +/turf/simulated/floor/airless, +/area/ministation/ai_upload) +"Ci" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vV" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vW" = ( -/obj/abstract/landmark/start{ - name = "Lieutenant" - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vX" = ( -/obj/machinery/computer/account_database{ - dir = 8 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"vY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"vZ" = ( -/obj/structure/bed/chair/office/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wa" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wc" = ( +/turf/simulated/floor/plating, +/area/ministation/hall/n) +"Cm" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Cn" = ( +/turf/simulated/wall, +/area/ministation/maint/eastatmos) +"Cp" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"Cq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"we" = ( -/obj/machinery/camera/autoname{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"wf" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/power/apc{ +/area/ministation/ai_sat) +"Cr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" + level = 2 }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"wh" = ( -/obj/machinery/door/firedoor{ +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Cs" = ( +/obj/machinery/light/small{ dir = 8 }, -/obj/structure/window/basic/full, /turf/simulated/floor/plating, -/area/ministation/cafe) -"wi" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wj" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wk" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wl" = ( +/area/ministation/ai_sat) +"Ct" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wm" = ( -/obj/item/stool/bar/padded, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"wn" = ( -/obj/structure/table/marble, -/obj/structure/sign/painting/monkey_painting{ - pixel_y = 24 - }, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Cv" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8; + level = 2 }, -/obj/item/sticky_pad{ - pixel_x = -8; - pixel_y = 1 +/turf/simulated/floor/plating, +/area/ministation/engine) +"Cw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/light_switch{ - pixel_x = -5; - pixel_y = 35 +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Cx" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"wo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/button/blast_door{ - id_tag = "barshut"; - name = "Bar Shutters Button"; - pixel_x = -24; - pixel_y = 36 +/obj/machinery/door/airlock/highsecurity/bolted, +/turf/simulated/floor/plating, +/area/ministation/ai_core) +"Cy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Cz" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"wp" = ( -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"wq" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"wr" = ( -/obj/machinery/door/window/brigdoor/westleft, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"CA" = ( +/obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"ws" = ( -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"wu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wv" = ( -/obj/machinery/network/requests_console{ - department = "Garden"; - pixel_x = 30 +/area/ministation/eva) +"CB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"CE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"ww" = ( -/obj/machinery/chemical_dispenser/full, -/obj/item/chems/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wx" = ( -/obj/structure/bed/chair/office/light, -/obj/abstract/landmark/start{ - name = "Medical Doctor" +/area/ministation/hall/s1) +"CF" = ( +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"CG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"CH" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"CJ" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/corner/blue{ + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wy" = ( -/obj/machinery/chem_master, -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wA" = ( -/obj/machinery/door/firedoor{ +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"CL" = ( +/obj/structure/grille, +/obj/structure/wall_frame, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/trash) +"CN" = ( +/obj/machinery/light/small{ dir = 8 }, -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/westright, /turf/simulated/floor/plating, -/area/ministation/medical) -"wB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/ministation/maint/l1central) +"CQ" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + id_tag = "starboard_engineering_airlock_interior"; + locked = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/camera/network/medbay{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wD" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/obj/machinery/button/access/interior{ + id_tag = "starboard_engineering_airlock"; + name = "interior access button"; + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wE" = ( +/turf/simulated/floor, +/area/ministation/engine) +"CS" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wF" = ( /turf/simulated/floor/tiled, -/area/ministation/hop) -"wG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/area/ministation/engine) +"CV" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"CW" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"CZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + use_power = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"wJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/turf/simulated/floor/airless, +/area/ministation/atmospherics) +"Da" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" }, -/mob/living/simple_animal/corgi/Ian, /turf/simulated/floor/tiled, -/area/ministation/hop) -"wK" = ( -/obj/machinery/camera/autoname{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +/area/ministation/engine) +"Df" = ( +/obj/machinery/alarm{ + pixel_y = 22 }, /turf/simulated/floor/tiled, -/area/ministation/hop) -"wL" = ( +/area/ministation/cargo) +"Di" = ( +/obj/machinery/door/airlock/atmos, +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"Dk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/hallway{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"wM" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"wN" = ( -/obj/structure/table, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/kitchen/utensil/fork, -/obj/item/knife/table, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wO" = ( -/obj/structure/table, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/chems/condiment/small/peppermill, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"wP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/stool/padded, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"wQ" = ( -/obj/structure/table/marble, -/obj/item/storage/box/donut, -/obj/machinery/door/firedoor{ +/area/ministation/hall/s1) +"Dl" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"wR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"wS" = ( -/obj/machinery/network/requests_console{ - department = "Bar"; - pixel_x = 30 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Dm" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/structure/table, -/obj/item/flame/lighter/zippo, -/obj/item/clothing/head/collectable/tophat, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"wT" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wU" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Dn" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"wX" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"wZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Do" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/machinery/door/airlock/medical, -/obj/effect/floor_decal/corner/paleblue/full, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Dp" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xc" = ( -/obj/machinery/firealarm{ - pixel_y = 24 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/structure/table, -/obj/item/defibrillator, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xd" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Dq" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/structure/table, -/obj/item/roller{ - pixel_y = 10 +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/item/roller{ - pixel_y = 10 +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/item/storage/belt/medical/emt, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xe" = ( +/obj/machinery/portable_atmospherics/canister/helium, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Dr" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ds" = ( /obj/item/radio/intercom{ name = "Common Channel"; - pixel_y = 25 - }, -/obj/structure/table, -/obj/item/storage/firstaid/o2{ - pixel_x = -2; - pixel_y = 4 + pixel_y = 20 }, -/obj/item/storage/firstaid/o2{ - pixel_x = -2; - pixel_y = 4 +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xf" = ( -/obj/structure/closet/emcloset, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"xg" = ( -/obj/machinery/light{ - dir = 1 +/area/ministation/engine) +"Dt" = ( +/turf/simulated/wall, +/area/ministation/engine) +"Du" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8 }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"xh" = ( -/obj/machinery/vending/coffee{ - dir = 1 +/obj/machinery/light{ + dir = 1; + icon_state = "bulb1" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"xi" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/effect/floor_decal/corner/blue{ + dir = 10 }, -/obj/structure/closet/secure_closet/hop, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"Dv" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"Dw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xk" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/high{ dir = 1; - level = 2 + pixel_y = 20 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xl" = ( -/obj/machinery/photocopier, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/alarm{ + pixel_y = -24; dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xm" = ( -/obj/structure/filing_cabinet/chestdrawer, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xn" = ( -/obj/structure/table, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/chems/condiment/small/sugar, -/obj/item/chems/condiment/small/saltshaker, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xo" = ( -/obj/structure/table, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/kitchen/utensil/spoon, -/obj/item/trash/plate{ - pixel_z = -2 - }, -/obj/item/trash/plate{ - pixel_w = 2 +/turf/simulated/floor/plating, +/area/ministation/hall/s1) +"Dx" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/item/trash/plate{ - pixel_z = 2 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/trash/plate{ - pixel_w = -2; - pixel_z = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Dy" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/trash/plate{ - pixel_z = 6 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"xp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/stool/padded, -/obj/item/deck/cards, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xq" = ( -/obj/abstract/landmark{ - name = "bluespace_a" +/area/ministation/hall/s1) +"DB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"xr" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/vomit, +/area/ministation/smcontrol) +"DC" = ( /turf/simulated/floor/tiled, -/area/ministation/cafe) -"xs" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor{ - dir = 8 +/area/ministation/engine) +"DD" = ( +/turf/simulated/wall/r_wall, +/area/ministation/maint/westatmos) +"DE" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/item/trash/tray, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"xt" = ( -/obj/item/chems/drinks/shaker, -/obj/structure/table, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"xu" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, /obj/machinery/light_switch{ - dir = 4; - pixel_x = -23 + pixel_y = 10; + pixel_x = 21; + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xv" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"DF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/turf/simulated/wall, +/area/ministation/hall/s1) +"DG" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"xy" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xz" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor{ +/area/ministation/hall/s1) +"DH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"DK" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "quarantine"; - name = "quarantine shutters" +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/machinery/door/window/brigdoor/eastleft, +/obj/machinery/door/window/southleft, +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, /turf/simulated/floor/plating, -/area/ministation/medical) -"xA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/engine) +"DL" = ( +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/conveyor{ + id_tag = "CanisterStore" + }, +/obj/machinery/door/window/southleft, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/plating, +/area/ministation/engine) +"DM" = ( +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/door/airlock/medical, -/obj/machinery/door/firedoor{ +/obj/structure/window/reinforced{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/door/window/southleft, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" + }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"DN" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xE" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/window/southleft, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/plating, +/area/ministation/engine) +"DO" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window/southleft, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/medical) -"xH" = ( -/obj/structure/table, -/obj/item/storage/firstaid/fire{ - pixel_x = -2; - pixel_y = 4 +/area/ministation/engine) +"DP" = ( +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/item/storage/firstaid/fire{ - pixel_x = -2; - pixel_y = 4 +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"xI" = ( -/obj/structure/table, -/turf/simulated/wall/r_wall, -/area/ministation/hop) -"xJ" = ( -/turf/simulated/wall, -/area/ministation/hop) -"xK" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/window/southleft, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" }, -/obj/machinery/door/airlock/command, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor, -/area/ministation/hop) -"xL" = ( -/obj/structure/table, -/obj/machinery/faxmachine/mapped, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xM" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"xN" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xQ" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/stool/padded, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"xR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/portable_atmospherics/canister/helium, +/turf/simulated/floor/plating, +/area/ministation/engine) +"DQ" = ( +/obj/structure/rack{ dir = 8 }, -/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/clothing/mask/gas/budget, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"xS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/ministation/engine) +"DR" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/camera/network/engineering{ + dir = 8 }, -/obj/effect/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled, -/area/ministation/cafe) -"xT" = ( -/obj/item/stool/bar/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/ministation/engine) +"DT" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"xU" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/door/airlock/glass/atmos, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/engine) +"DU" = ( +/obj/structure/disposaloutlet{ dir = 4 }, -/obj/machinery/door/firedoor{ +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" +/turf/simulated/floor/airless, +/area/space) +"DV" = ( +/obj/structure/table, +/obj/machinery/alarm{ + pixel_y = 23 }, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"xV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/recharger, +/obj/machinery/cell_charger{ + pixel_y = 14 }, -/obj/effect/decal/cleanable/flour, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"xW" = ( -/obj/structure/table/marble, -/obj/machinery/status_display{ - pixel_y = -29 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"DW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/light_switch{ + pixel_y = 25 }, -/obj/machinery/door/blast/shutters/open{ - id_tag = "barshut"; - name = "bar shutters" +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/item/chems/condiment/ketchup, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"xX" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"DX" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/machinery/light{ - dir = 8 +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xY" = ( -/obj/machinery/light{ - dir = 4 +/obj/machinery/power/smes/buildable/max_cap_in_out{ + capacity = 5e+009; + charge = 5e+009 }, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"xZ" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/machinery/camera/network/engineering{ + name = "Engineering Hub" }, -/obj/structure/closet/crate/bin/ministation, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ya" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yb" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder/juicer, -/obj/item/chems/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yc" = ( -/obj/structure/table, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"DY" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/table, -/obj/machinery/reagent_temperature, -/obj/machinery/camera/network/medbay{ +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"ye" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - dir = 4; - pixel_x = -5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/closet/wardrobe/mixed, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yg" = ( -/obj/machinery/light{ - dir = 8 +/obj/machinery/status_display{ + pixel_y = 32 }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yh" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"DZ" = ( /obj/structure/table, -/obj/item/storage/firstaid/toxin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yl" = ( -/obj/structure/displaycase, -/obj/item/clothing/mask/gas/owl_mask{ - desc = "So realistic, you'd almost think it's the real thing."; - name = "replica 'The Owl' mask"; - pixel_x = 1; - pixel_y = -5 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/carpet, -/area/ministation/hop) -"ym" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled, -/area/ministation/bridge/vault) -"yn" = ( -/obj/structure/table/woodentable, -/obj/item/flashlight/lamp/green, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 }, /obj/item/radio/intercom{ name = "Common Channel"; - pixel_y = 25 - }, -/turf/simulated/floor/carpet, -/area/ministation/hop) -"yp" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet, -/obj/random/maintenance, -/obj/random/suit, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"yq" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"yr" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/media/jukebox/old, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"ys" = ( -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"yt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + pixel_y = 20 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"yu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/item/clothing/gloves/insulated, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 }, -/obj/machinery/alarm{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Eb" = ( +/obj/machinery/power/apc{ dir = 1; - pixel_y = -22 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"yv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"yw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 + name = "_North APC"; + pixel_y = 24 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"yx" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/camera/autoname{ +/obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/power/sensor{ + id_tag = "Station Power"; + name = "Powernet Sensor - Station Power" }, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"yy" = ( -/obj/item/stool/bar/padded, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ec" = ( /obj/machinery/light, -/turf/simulated/floor/carpet, -/area/ministation/cafe) -"yz" = ( -/obj/machinery/vending/engineering{ - dir = 8 +/obj/machinery/vending/snack{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"yA" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/decal/cleanable/tomato_smudge, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"yB" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 +/area/ministation/hall/s1) +"Ed" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/vending/cola{ + dir = 4; + pixel_x = -5 }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"yC" = ( /obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"yD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 + icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"yE" = ( +/area/ministation/hall/s1) +"Ee" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; level = 2 }, -/obj/effect/floor_decal/corner/green/half{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"yF" = ( -/obj/machinery/camera/autoname{ - dir = 8 +/area/ministation/hall/s1) +"Ef" = ( +/obj/abstract/landmark{ + name = "lightsout" }, -/obj/machinery/newscaster{ - pixel_x = 32 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/item/chems/glass/bucket, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"yG" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yH" = ( -/obj/structure/closet/secure_closet/medical1, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yI" = ( -/obj/structure/table, -/obj/item/clothing/accessory/stethoscope, -/obj/item/chems/hypospray/vial{ - desc = "One of the first hyposprays ever made. Supposedly only a handful exist."; - name = "prototype hypospray"; - origin_tech = null - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yJ" = ( -/obj/structure/table, -/obj/item/gun/launcher/syringe, -/obj/item/flashlight/pen, -/obj/item/flashlight/pen, -/obj/item/clothing/suit/straight_jacket, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yK" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"yN" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"yO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/area/ministation/hall/s1) +"Eg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/cargo) -"yP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - pixel_x = 2; - pixel_y = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"yQ" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"yS" = ( -/obj/abstract/landmark{ - name = "bluespace_a" +/area/ministation/hall/s1) +"Eh" = ( +/obj/machinery/vending/snack{ + dir = 8; + pixel_x = 5 }, -/turf/space, -/area/space) -"yU" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/structure/closet/secure_closet/hop2, -/obj/item/book/skill/organizational/finance, -/turf/simulated/floor/carpet, -/area/ministation/hop) -"yV" = ( -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Ei" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet, -/area/ministation/hop) -"yW" = ( -/obj/structure/bed, -/obj/item/bedsheet/hop, -/turf/simulated/floor/carpet, -/area/ministation/hop) -"yX" = ( -/obj/machinery/power/apc{ +/obj/machinery/light_switch{ + pixel_y = -24; dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/ministation/hop) -"yY" = ( -/obj/machinery/alarm{ - pixel_y = 23 + pixel_x = -1 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"Ej" = ( +/obj/machinery/conveyor_switch{ + id_tag = "CanisterStore" }, -/obj/structure/cable{ - icon_state = "2-4" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ek" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"El" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Em" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"En" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Eo" = ( +/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/hop) -"yZ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, +/area/ministation/engine) +"Eq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + icon_state = "1-8" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"za" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Er" = ( +/obj/effect/floor_decal/industrial/warning/corner{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zb" = ( +/obj/item/stool/padded, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/abstract/landmark/start{ + name = "Atmospheric Technician" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/turf/simulated/floor/wood, +/area/ministation/engine) +"Es" = ( +/obj/machinery/power/terminal{ + dir = 1 }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zd" = ( +/obj/item/stool/padded, /obj/abstract/landmark/start{ - name = "Robot" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ze" = ( -/turf/simulated/wall, -/area/ministation/maint/e) -"zf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Kitchen airlock"; - req_access = list("ACCESS_KITCHEN") + name = "Station Engineer" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, -/area/ministation/cafe) -"zg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 +/area/ministation/engine) +"Et" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 }, +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Atmospheric Technician" + }, +/turf/simulated/floor/wood, +/area/ministation/engine) +"Eu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/ministation/engine) -"zh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Kitchen airlock"; - req_access = list("ACCESS_KITCHEN") +"Ev" = ( +/obj/structure/cable, +/obj/machinery/computer/air_control/supermatter_core{ + dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"zi" = ( -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ew" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/vending/coffee{ + dir = 4; + pixel_x = -5 }, -/obj/machinery/firealarm{ +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Ex" = ( +/obj/machinery/vending/cigarette{ dir = 8; - pixel_x = -24 + pixel_x = 5 }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"zj" = ( -/obj/structure/table/glass, -/obj/item/hatchet, -/obj/item/hatchet, -/obj/item/minihoe, -/obj/item/minihoe, -/obj/item/book/skill/service/botany, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"zk" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/hydro) -"zq" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/hall/s1) +"Ey" = ( +/obj/machinery/fabricator/pipe/disposal, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ez" = ( +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/start{ + name = "Station Engineer" + }, +/turf/simulated/floor/wood, +/area/ministation/engine) +"EB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/ministation/engine) +"EE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor, -/area/ministation/hop) -"zr" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zs" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" }, -/mob/living/simple_animal/mouse, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zt" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/structure/sign/department/janitor{ + dir = 4; + pixel_x = -33 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"EJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zu" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, -/obj/machinery/atmospherics/binary/pump/on{ +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"EK" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zv" = ( -/obj/machinery/meter{ - use_power = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"EL" = ( +/obj/abstract/landmark/start{ + name = "Station Engineer" }, +/obj/item/stool/padded, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zw" = ( +/turf/simulated/floor/wood, +/area/ministation/engine) +"EM" = ( +/obj/item/boombox, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 }, +/obj/structure/table/woodentable_reinforced/walnut/maple, +/turf/simulated/floor/wood, +/area/ministation/engine) +"EN" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zy" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"zz" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"zC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/westleft, -/obj/machinery/door/window/eastleft, -/turf/simulated/floor/tiled/steel_ridged, -/area/ministation/cafe) -"zD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 25 +/obj/structure/table/woodentable_reinforced/walnut/maple, +/obj/item/chems/chem_disp_cartridge/coffee{ + name = "coffee canister" }, /turf/simulated/floor/wood, -/area/ministation/cafe) -"zE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/area/ministation/engine) +"EO" = ( +/obj/item/chems/food/old/pizza, +/obj/item/stack/material/puck/mapped/uranium/ten, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zF" = ( -/obj/machinery/vending/dinnerware, +/obj/structure/table/woodentable_reinforced/walnut/maple, /turf/simulated/floor/wood, -/area/ministation/cafe) -"zG" = ( -/obj/structure/table/woodentable, -/obj/machinery/light{ - dir = 1 +/area/ministation/engine) +"EP" = ( +/obj/machinery/vending/materials{ + dir = 4 }, -/obj/machinery/reagentgrinder/juicer, -/obj/item/chems/glass/beaker, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zH" = ( -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"EQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zI" = ( -/obj/machinery/cooker/oven, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zJ" = ( -/obj/machinery/cooker/grill, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zK" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zL" = ( -/obj/structure/closet/crate/bin/ministation, /obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"ER" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"zM" = ( -/obj/machinery/vending/hydronutrients{ - dir = 1 +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"ES" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/corner/beige/half, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"zN" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/corner/beige/half, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"zO" = ( -/obj/machinery/biogenerator, -/obj/effect/floor_decal/corner/beige/half, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"zP" = ( -/obj/effect/floor_decal/corner/beige/half, -/obj/machinery/vending/hydroseeds{ +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"ET" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/yellow/three_quarters, +/obj/structure/sign/warning/engineering_access{ + pixel_y = -32; dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, -/area/ministation/hydro) -"zQ" = ( -/turf/simulated/wall, -/area/ministation/hydro) -"zT" = ( +/area/ministation/hall/s1) +"EU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/yellow{ + dir = 10 + }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zU" = ( -/obj/structure/rack{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/obj/item/tank/emergency, -/obj/item/flashlight, -/obj/item/clothing/glasses/meson, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zV" = ( -/obj/structure/cable{ - icon_state = "2-8" +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"EV" = ( +/obj/effect/floor_decal/corner/yellow/three_quarters{ + dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible{ +/obj/structure/sign/department/engineering{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"EW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zW" = ( +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"EX" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/fabricator/pipe, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"EY" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"EZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Fa" = ( +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = list("ACCESS_ENGINEERING") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fb" = ( +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Station Engineer" + }, +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fc" = ( +/obj/item/wrench, +/obj/item/clothing/gloves/insulated, +/obj/structure/table/woodentable_reinforced/walnut/maple, +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fd" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zX" = ( +/obj/item/stack/tape_roll/barricade_tape/atmos, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - name = "_West APC"; - pixel_x = -25 +/obj/structure/table/woodentable_reinforced/walnut/maple, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fe" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/cable, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"zZ" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/chems/drinks/glass2/coffeecup/metal, +/obj/item/chems/drinks/glass2/coffeecup/metal, +/obj/structure/table/woodentable_reinforced/walnut/maple, +/turf/simulated/floor/wood, +/area/ministation/engine) +"Ff" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Aa" = ( -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/opossum/poppy, +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Station Engineer" }, -/area/ministation/telecomms) -"Ab" = ( -/obj/machinery/network/message_server, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/area/ministation/telecomms) -"Ad" = ( -/obj/structure/rack{ +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Fh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/item/storage/belt/utility, -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding, +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"Fi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/wall/r_wall, /area/ministation/engine) -"Ae" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, +"Fj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Af" = ( -/obj/abstract/landmark/start{ - name = "Bartender" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor, +/area/ministation/engine) +"Fk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"Fm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, -/area/ministation/cafe) -"Ag" = ( -/obj/abstract/landmark/start{ - name = "Bartender" +/area/ministation/engine) +"Fn" = ( +/obj/machinery/space_heater, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fo" = ( +/obj/machinery/space_heater, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Ah" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Ai" = ( -/obj/effect/decal/cleanable/flour, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fr" = ( +/obj/structure/tank_rack/oxygen, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fs" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ft" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 + dir = 5 }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Aj" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Fu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/machinery/icecream_vat, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, -/area/ministation/cafe) -"Ak" = ( +/area/ministation/engine) +"Fv" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/hydro) -"Al" = ( -/obj/structure/closet, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Am" = ( +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fw" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"An" = ( -/obj/structure/cable, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Ao" = ( -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/wood, +/area/ministation/engine) +"Fx" = ( +/obj/machinery/vending/engivend{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/floor_decal/corner/yellow{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Ap" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Fy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"Fz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/newscaster{ + pixel_y = 32 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Aq" = ( -/obj/structure/rack{ +/obj/effect/floor_decal/corner/yellow/three_quarters{ dir = 8 }, -/obj/item/storage/belt/utility, -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding/engie, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ar" = ( -/obj/structure/lattice, -/obj/machinery/meter{ - use_power = 0 +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/space, -/area/space) -"As" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"At" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +"FA" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Au" = ( -/obj/structure/closet/chefcloset, -/obj/item/storage/box/ammo/beanbags, -/obj/item/gun/projectile/shotgun/doublebarrel, -/obj/item/clothing/suit/storage/toggle/wintercoat/hydro, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Av" = ( -/obj/machinery/cooker/fryer, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Aw" = ( -/obj/machinery/camera/autoname{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/corner/yellow/three_quarters{ dir = 1 }, -/obj/structure/table/woodentable, -/obj/item/chems/condiment/enzyme, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Ax" = ( -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/obj/machinery/light_switch{ + pixel_y = 25 }, -/area/ministation/telecomms) -"Ay" = ( -/obj/machinery/reagentgrinder, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Az" = ( -/obj/machinery/cooker/cereal, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"AA" = ( -/obj/machinery/cooker/candy, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"AB" = ( -/obj/machinery/power/apc{ +/obj/machinery/light{ dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 - }, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/ministation/hydro) -"AC" = ( -/turf/simulated/wall, -/area/ministation/maint/se) -"AD" = ( -/obj/structure/rack, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/glasses/sunglasses, -/obj/random/suit, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AE" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AF" = ( -/obj/abstract/landmark{ - name = "blobstart" + icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"FD" = ( +/obj/abstract/landmark/start{ + name = "Station Engineer" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AG" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FE" = ( +/obj/structure/cable{ + icon_state = "0-4" }, +/obj/machinery/power/solar, /turf/simulated/floor/airless, /area/space) -"AH" = ( +"FF" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AL" = ( -/obj/machinery/network/telecomms_hub, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"AM" = ( -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/area/space) +"FG" = ( +/obj/structure/cable{ + icon_state = "0-8" }, -/area/ministation/telecomms) -"AN" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 0; - id_tag = "pfm_airlock"; - pixel_y = 24; - tag_airpump = "pfm_vent"; - tag_chamber_sensor = "pfm_sensor"; - tag_exterior_door = "pfm_airlock_exterior"; - tag_interior_door = "pfm_airlock_interior" +/obj/machinery/power/solar, +/turf/simulated/floor/airless, +/area/space) +"FH" = ( +/obj/structure/closet/secure_closet/engineering_personal{ + req_access = list("ACCESS_ENGINEERING") }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "pfm_vent" +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FI" = ( +/obj/structure/rack{ + dir = 8 }, -/obj/machinery/airlock_sensor{ - id_tag = "pfm_sensor"; - pixel_y = 20 +/obj/item/chems/spray/extinguisher{ + pixel_x = 8 }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"AO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/cafe) -"AP" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/item/clothing/gloves/thick, +/obj/item/hoist_kit, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/mobile_ladder, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FJ" = ( +/obj/machinery/port_gen/pacman/super, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/hydro) -"AR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AS" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FM" = ( +/obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/abstract/landmark/start{ + name = "Assistant" + }, +/obj/structure/table/gamblingtable, +/obj/machinery/recharger, +/obj/item/poster, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"FN" = ( +/obj/machinery/door/firedoor{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"AV" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "_West APC"; - pixel_x = -25 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"AW" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable/max_cap_in_out, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 - }, -/area/ministation/telecomms) -"AX" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/door/airlock/civilian, +/turf/simulated/floor/tiled, +/area/ministation/janitor) +"FO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"AY" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 10 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FP" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"AZ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 +/obj/machinery/door/airlock/glass/engineering, +/obj/machinery/door/firedoor{ + dir = 8 }, /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/ministation/cafe) -"Ba" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor, +/area/ministation/engine) +"FQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Bb" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Bc" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Bd" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Bf" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/corner/yellow{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FR" = ( +/obj/abstract/landmark{ + name = "bluespace_a" }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/cable{ + icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"Bj" = ( -/obj/machinery/airlock_sensor{ - id_tag = "escape3_sensor"; - pixel_y = 20 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape1_vent" - }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"Bl" = ( -/obj/structure/rack, -/obj/item/beartrap, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Bm" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sqm_airlock_interior" - }, -/obj/machinery/button/access/interior{ - id_tag = "sqm_airlock"; - name = "interior access button"; - pixel_x = -10; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/structure/disposalpipe/segment/bent{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Bp" = ( -/obj/machinery/power/terminal{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"FT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/door/airlock/glass/engineering, +/obj/machinery/door/firedoor{ dir = 8 }, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "4-8" }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/turf/simulated/floor, +/area/ministation/engine) +"FU" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/area/ministation/telecomms) -"Bq" = ( -/obj/machinery/camera/autoname{ - dir = 4; - preset_channels = list("Exodus") +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/obj/effect/floor_decal/corner/yellow{ + dir = 10 }, -/area/ministation/telecomms) -"Br" = ( -/obj/machinery/light/small, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - temperature = 263 +/obj/structure/cable{ + icon_state = "4-8" }, -/area/ministation/telecomms) -"Bs" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/telecomms) -"Bt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Bu" = ( -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Bv" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/item/pen/blue, -/obj/item/paper/monitorkey, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Bw" = ( -/obj/machinery/computer/message_monitor, -/obj/machinery/alarm{ - pixel_y = 23 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Bx" = ( -/obj/structure/table, -/obj/item/clothing/suit/storage/toggle/wintercoat, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = 20 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/item/radio, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"By" = ( -/obj/structure/table, -/obj/item/flashlight/lamp, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Bz" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sat2_airlock_exterior" +/obj/structure/extinguisher_cabinet{ + pixel_y = -29; + dir = 1 }, -/obj/machinery/button/access/interior{ - id_tag = "sat2_airlock"; - name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; - command = "cycle_exterior" +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BA" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"BC" = ( -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +/obj/machinery/camera/network/engineering{ + dir = 1; + name = "Tank Storage" }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"BD" = ( -/obj/structure/table, -/obj/item/paper_bin, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BE" = ( -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BF" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"FZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BG" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ga" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/item/disk/nuclear, -/obj/machinery/recharger, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BH" = ( /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/cable{ + icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BI" = ( +/area/space) +"Gb" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gd" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/conveyor{ + dir = 8; + id_tag = "trash_sort" }, -/obj/machinery/door/airlock/double, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BJ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/trash) +"Ge" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gf" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BK" = ( +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gh" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/power/solar, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BL" = ( +/area/space) +"Gi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gj" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gk" = ( +/obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BM" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"BN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"BO" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, +/area/ministation/supermatter) +"Gl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/engine) -"BP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +"Gm" = ( +/obj/structure/lattice, +/turf/simulated/wall, +/area/ministation/engine) +"Gn" = ( +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/power/smes/buildable/preset, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Gp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gq" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"BS" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +/obj/effect/floor_decal/corner/yellow{ + dir = 6 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gr" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 9 }, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/tiled, /area/ministation/engine) -"BT" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +"Gs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gt" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/airless, -/area/space) -"BU" = ( -/obj/machinery/meter, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gu" = ( +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ +/obj/machinery/power/smes/buildable/preset, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Gv" = ( +/obj/machinery/power/terminal{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ministation/atmospherics) -"BV" = ( -/obj/effect/floor_decal/industrial/custodial/corner{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 +/obj/structure/sign/warning/airlock{ + pixel_x = 32; + dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Gw" = ( +/obj/structure/cable, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"BW" = ( -/obj/abstract/landmark{ - name = "bluespace_a" +/area/space) +"Gx" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/turf/simulated/wall, -/area/ministation/janitor) -"BX" = ( -/obj/machinery/meter{ - name = "Distribution Loop" +/obj/machinery/power/terminal{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/visible{ +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"BY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"BZ" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Gy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/command{ - autoset_access = 0; - name = "Telecommunications glass airlock"; - req_access = list("ACCESS_TELECOMS") +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Gz" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/firedoor, +/obj/effect/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"GA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Ca" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sqm_airlock_exterior" +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/button/access/interior{ - id_tag = "sqm_airlock"; - name = "exterior access button"; - pixel_x = 10; - pixel_y = 20; - command = "cycle_exterior" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"GB" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/turf/space, +/area/space) +"GC" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/space, +/area/space) +"GF" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Cb" = ( -/obj/machinery/alarm{ - pixel_y = 20 +/obj/structure/lattice, +/turf/space, +/area/space) +"GG" = ( +/obj/structure/cable{ + icon_state = "1-2" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"GH" = ( +/obj/structure/cable{ + icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/ministation/commons) -"Cc" = ( +/area/space) +"GI" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-4" }, +/turf/simulated/floor/plating, +/area/space) +"GJ" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/ministation/maint/w) -"Cd" = ( -/obj/machinery/turretid{ - control_area = "\improper AI Upload Chamber"; - name = "AI Upload turret control"; - pixel_y = -25 +/area/space) +"GL" = ( +/obj/machinery/door/airlock/civilian{ + autoset_access = 0 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/trash) +"GM" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Ce" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/area/space) +"GN" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/area/space) +"GO" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/area/space) +"GP" = ( +/obj/machinery/power/tracker, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/turf/simulated/floor/plating, +/area/space) +"GQ" = ( +/obj/structure/cable{ + icon_state = "0-4" }, +/obj/machinery/power/tracker, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Ch" = ( +/area/space) +"GR" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/highsecurity, -/turf/simulated/floor/airless, -/area/ministation/ai_upload) -"Ci" = ( -/mob/living/simple_animal/mouse, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Cj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Cl" = ( -/obj/machinery/camera/autoname{ - preset_channels = list("Exodus") +/area/space) +"GS" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Cm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cn" = ( -/turf/simulated/wall, -/area/ministation/atmospherics) -"Co" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/area/space) +"GT" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Cp" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall, -/area/ministation/ai_upload) -"Cq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Cs" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cu" = ( +/area/space) +"GU" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"GV" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/door/airlock/external/glass{ + id_tag = "port_engineering_airlock_interior"; + autoset_access = 0; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cv" = ( -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_y = -29 +/obj/machinery/button/access/interior{ + id_tag = "port_engineering_airlock"; + name = "interior access button"; + pixel_y = 24 }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"GW" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/airlock_sensor{ + id_tag = "port_engineering_sensor"; + pixel_y = 24; + pixel_x = 8 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cw" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "port_engineering_airlock"; + pixel_y = 24; + tag_airpump = "port_engineering_vent"; + tag_chamber_sensor = "port_engineering_sensor"; + tag_exterior_door = "port_engineering_airlock_exterior"; + tag_interior_door = "port_engineering_airlock_interior"; + pixel_x = -8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 10 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Cx" = ( +/area/ministation/engine) +"GX" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/highsecurity/bolted, -/turf/simulated/floor/plating, -/area/ministation/ai_core) -"Cy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Cz" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 + icon_state = "1-8" }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"CA" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"CB" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"GY" = ( +/obj/machinery/power/solar_control{ + dir = 8 }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"CC" = ( -/obj/machinery/newscaster{ - pixel_x = 32 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"GZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"Ha" = ( +/obj/item/radio/intercom{ + canhear_range = 3; + name = "Common Channel"; + pixel_x = 22; + dir = 8 + }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"CD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/black{ +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hb" = ( +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/sign/warning/server_room{ - pixel_x = -32 +/obj/structure/window/reinforced{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"CE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/area/ministation/engine) +"Hc" = ( +/obj/structure/window/reinforced{ + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"CF" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"CG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"CH" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"CI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/area/ministation/engine) +"Hd" = ( +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/ministation/engine) -"CJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +"He" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/structure/cable{ icon_state = "4-8" }, /turf/simulated/floor/plating, +/area/space) +"Hf" = ( +/obj/structure/cable, +/obj/machinery/power/solar_control{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"CK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +"Hg" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/camera/network/engineering{ + name = "Port Solars" + }, /turf/simulated/floor/tiled, /area/ministation/engine) -"CL" = ( -/obj/structure/rack, -/obj/random/maintenance, -/obj/item/borg/sight/meson, -/obj/item/flashlight, -/obj/random/maintenance, -/obj/random/trash, -/obj/random/gloves, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"CM" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"CN" = ( +"Hh" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor, +/area/ministation/engine) +"Hi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"CO" = ( -/obj/machinery/light/small{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hj" = ( +/obj/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"CP" = ( -/obj/abstract/landmark/start{ - name = "Assistant" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hk" = ( +/obj/structure/transit_tube{ + dir = 4; + icon_state = "Block" }, -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hl" = ( +/obj/structure/transit_tube_pod{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/transit_tube/station{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/ministation/commons) -"CT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - icon_state = "1-4" +/area/ministation/engine) +"Hm" = ( +/obj/structure/transit_tube, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hn" = ( +/obj/structure/closet/wardrobe/mixed, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Ho" = ( +/obj/structure/transit_tube, +/turf/space, +/area/space) +"Hp" = ( +/obj/structure/transit_tube{ + icon_state = "E-W-Pass" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/structure/lattice, +/turf/space, +/area/space) +"Hq" = ( +/obj/structure/transit_tube{ + icon_state = "W-SE" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"CU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/space, +/area/space) +"Hr" = ( +/obj/structure/transit_tube{ + icon_state = "D-SW" + }, +/turf/space, +/area/space) +"Hs" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ht" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/airlock/highsecurity{ - name = "Telecommunications" +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hu" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/sign/warning/radioactive{ + pixel_y = 42; + pixel_x = 9 }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hv" = ( /obj/machinery/door/firedoor{ dir = 8 }, +/obj/machinery/door/blast/regular/open{ + id_tag = "smsafetydoor" + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Hx" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/turf/simulated/floor, -/area/ministation/telecomms) -"CV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 }, -/obj/effect/floor_decal/corner/black{ - dir = 9 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Hy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-4" }, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"CW" = ( +/area/ministation/engine) +"Hz" = ( +/obj/structure/transit_tube{ + icon_state = "D-NE" + }, +/obj/structure/lattice, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" + }, +/turf/space, +/area/space) +"HA" = ( +/obj/structure/transit_tube{ + icon_state = "S-NW" }, +/obj/structure/lattice, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/space, +/area/space) +"HB" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/item/stool, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"CY" = ( -/obj/machinery/door/airlock/glass{ - autoset_access = 0; - name = "Court Room Airlock" +/area/ministation/engine) +"HC" = ( +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HD" = ( /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/blast/regular/open{ + id_tag = "smsafetydoor" }, /turf/simulated/floor/tiled, -/area/ministation/court) -"CZ" = ( +/area/ministation/engine) +"HE" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Da" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/area/ministation/engine) +"HF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/item/stool, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Dc" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/area/ministation/engine) +"HG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/structure/table, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"De" = ( -/obj/structure/table, -/obj/item/multitool, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -23 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HH" = ( +/obj/structure/transit_tube{ + icon_state = "N-S" }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Df" = ( +/turf/space, +/area/space) +"HI" = ( /obj/structure/table, -/obj/item/radio, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -35 - }, -/obj/item/chems/spray/extinguisher, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Dg" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/filing_cabinet/chestdrawer, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/network/requests_console{ - announcementConsole = 1; - department = "Telecoms Admin"; - name = "Telecoms RC"; - pixel_x = 30 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"Dh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/black{ - dir = 1 - }, -/obj/structure/sign/department/telecomms{ - dir = 4; - pixel_x = -32 - }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/circuitboard/airlock_electronics, +/obj/item/stock_parts/circuitboard/airlock_electronics, +/obj/item/scanner/gas, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Dj" = ( -/obj/random/trash, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Dk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera/autoname{ - dir = 4 +/area/ministation/engine) +"HJ" = ( +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/clothing/head/earmuffs, +/obj/item/stack/material/rods/fifty, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HK" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Dl" = ( -/obj/structure/window/reinforced{ +/area/ministation/engine) +"HL" = ( +/obj/structure/cable, +/obj/machinery/power/smes/buildable/preset, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"HM" = ( +/obj/machinery/power/terminal{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 }, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"Dm" = ( -/obj/structure/window/reinforced{ - dir = 8 +"HN" = ( +/obj/machinery/firealarm{ + pixel_y = 21 }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ministation/smcontrol) +"HO" = ( +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/machinery/power/solar_control{ + dir = 8 }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"Dn" = ( -/obj/structure/window/reinforced{ - dir = 8 +"HP" = ( +/obj/structure/table, +/obj/item/stack/material/pane/mapped/glass/fifty, +/obj/item/stack/material/pane/mapped/rglass, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HQ" = ( +/obj/structure/table, +/obj/item/stack/material/sheet/mapped/steel/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HR" = ( +/obj/structure/table, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HS" = ( +/obj/structure/transit_tube{ + icon_state = "N-S" }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/lattice, +/turf/space, +/area/space) +"HT" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, /turf/simulated/floor/plating, -/area/ministation/engine) -"Do" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ +/area/space) +"HU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/plating, -/area/ministation/engine) -"Dp" = ( -/obj/structure/window/reinforced{ +/area/ministation/supermatter) +"HV" = ( +/obj/structure/transit_tube{ + icon_state = "N-S-Pass" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 4 +/turf/space, +/area/space) +"HW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/door/blast/regular{ + id_tag = "EngineVent" }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"HY" = ( +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/power/solar, /turf/simulated/floor/plating, -/area/ministation/engine) -"Dq" = ( -/obj/structure/window/reinforced{ +/area/space) +"Ia" = ( +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/window/reinforced{ +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Ib" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/flora/pottedplant/aquatic, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Ic" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/machinery/alarm{ + pixel_y = 23 }, -/obj/machinery/portable_atmospherics/canister/helium, -/turf/simulated/floor/plating, -/area/ministation/engine) -"Dr" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, +/turf/simulated/floor/carpet/orange, /area/ministation/engine) -"Ds" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +"If" = ( +/obj/structure/cable, +/obj/machinery/power/solar, +/turf/simulated/floor/plating, +/area/space) +"Ig" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/light/small{ + dir = 1 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "starboard_engineering_vent"; + dir = 8 + }, +/obj/machinery/airlock_sensor{ + id_tag = "starboard_engineering_sensor"; + pixel_y = 24 + }, +/turf/simulated/floor/plating, /area/ministation/engine) -"Dt" = ( -/turf/simulated/wall, +"Ih" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ii" = ( +/obj/structure/closet/crate/solar_assembly, +/turf/simulated/floor/plating, /area/ministation/engine) -"Du" = ( +"Ij" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ik" = ( /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; req_access = list("ACCESS_EXTERNAL"); locked = 1; - id_tag = "pqm_airlock_exterior" + id_tag = "sat2_airlock_interior" }, /obj/machinery/button/access/interior{ - id_tag = "pqm_airlock"; - name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; - command = "cycle_exterior" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Dv" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" + id_tag = "sat2_airlock"; + name = "interior access button"; + pixel_x = 32; + pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Dw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, +/area/ministation/ai_sat) +"Il" = ( /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Dx" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/area/ministation/ai_sat) +"Im" = ( +/obj/machinery/light/small{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Dy" = ( -/obj/structure/cable{ - icon_state = "1-8" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ip" = ( +/obj/machinery/atmospherics/binary/pump/on{ dir = 4 }, +/obj/machinery/camera/network/ministation/sat, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Iq" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "2-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"DA" = ( -/obj/item/radio/intercom{ - dir = 1; - pixel_y = -32 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"DC" = ( /turf/simulated/floor/tiled, /area/ministation/engine) -"DD" = ( -/turf/simulated/wall/r_wall, -/area/ministation/maint/sw) -"DE" = ( -/obj/structure/cable{ - icon_state = "1-2" +"It" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8 }, -/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/airless, +/area/space) +"Iu" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, -/area/ministation/engine) -"DF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/ai_sat) +"Iv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/turf/simulated/wall, -/area/ministation/engine) -"DG" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) +"Iw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"DH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"DI" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; - dir = 1 +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) +"Ix" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, +/obj/machinery/door/airlock, /turf/simulated/floor/plating, -/area/ministation/maint/nw) -"DJ" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/ai_sat) +"Iy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"DK" = ( -/obj/structure/window/reinforced{ +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) +"Iz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" - }, -/obj/machinery/door/window/southleft, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"IA" = ( +/obj/machinery/camera/autoname, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"ID" = ( +/obj/structure/closet/emcloset, /turf/simulated/floor/plating, -/area/ministation/engine) -"DL" = ( -/obj/structure/window/reinforced{ +/area/ministation/ai_sat) +"IE" = ( +/obj/machinery/camera/autoname{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" - }, -/obj/machinery/door/window/southleft, -/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"IF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) +"IG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/ministation/engine) -"DM" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 +/area/ministation/ai_sat) +"IH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_y = -29; + dir = 1 }, -/obj/machinery/door/window/southleft, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"II" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"IJ" = ( +/obj/machinery/alarm{ + pixel_y = 28 }, /turf/simulated/floor/plating, -/area/ministation/engine) -"DN" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/window/reinforced{ - dir = 4 +/area/ministation/ai_upload) +"IK" = ( +/obj/machinery/camera/network/mining, +/obj/machinery/atm{ + pixel_y = 32 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/machinery/door/window/southleft, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -32 }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"IL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/random/maintenance, +/obj/structure/rack, /turf/simulated/floor/plating, -/area/ministation/engine) -"DO" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/structure/window/reinforced{ - dir = 4 +/area/ministation/ai_upload) +"IM" = ( +/obj/machinery/power/apc{ + name = "_South APC"; + pixel_y = -24 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/door/window/southleft, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/plating, -/area/ministation/engine) -"DP" = ( -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/southleft, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/portable_atmospherics/canister/helium, /turf/simulated/floor/plating, -/area/ministation/engine) -"DQ" = ( -/obj/structure/rack{ - dir = 8 +/area/ministation/maint/l1ne) +"IN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"IO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/item/clothing/mask/gas/budget, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/storage/box, /turf/simulated/floor/tiled, -/area/ministation/engine) -"DR" = ( -/obj/machinery/light{ +/area/ministation/cargo) +"IP" = ( +/obj/structure/closet, +/obj/machinery/alarm{ dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"DS" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 + pixel_x = -24 }, -/obj/structure/window/reinforced{ +/obj/machinery/light{ dir = 1 }, -/obj/structure/window/reinforced, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/ministation/atmospherics) -"DT" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"DU" = ( -/obj/structure/table, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"IQ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"IR" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ dir = 1 }, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"DV" = ( -/obj/structure/table, -/obj/machinery/alarm{ - pixel_y = 23 +/turf/space, +/area/space) +"IW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"IY" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/recharger, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"IZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/engine) -"DW" = ( +"Jb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = 25 - }, /turf/simulated/floor/tiled, /area/ministation/engine) -"DX" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, +"Jc" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/machinery/camera/network/engineering, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"DY" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/network/requests_console{ - department = "Engineering"; - name = "Engineering RC"; - pixel_y = 30 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Jd" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "sat3_airlock"; + pixel_y = 24; + tag_airpump = "sat3_vent"; + tag_chamber_sensor = "sat3_sensor"; + tag_exterior_door = "sat3_airlock_exterior"; + tag_interior_door = "sat3_airlock_interior"; + pixel_x = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"DZ" = ( -/obj/structure/table, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "sat3_vent" }, -/obj/item/storage/toolbox/electrical{ - pixel_y = 5 +/obj/machinery/airlock_sensor{ + id_tag = "sat3_sensor"; + pixel_y = 24; + pixel_x = -8 }, -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_y = 25 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Je" = ( +/turf/simulated/wall/r_wall, +/area/ministation/maint/eastatmos) +"Jg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"Jh" = ( +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"Ji" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/obj/item/clothing/gloves/insulated, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 5 +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"Jj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ea" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/structure/cable{ - icon_state = "4-8" +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"Jk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Jl" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, +/turf/simulated/floor/plating, /area/ministation/engine) -"Eb" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 +"Jm" = ( +/obj/structure/table, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/alternate/door/bolts{ + name = "AI core door bolts" }, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"Jn" = ( +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"Jo" = ( +/obj/structure/table, +/obj/item/folder/blue, +/obj/machinery/camera/motion/ministation, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Jp" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Jq" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Jr" = ( +/obj/structure/table, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ec" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/window/reinforced{ + dir = 4 }, /obj/machinery/light/small{ - dir = 1 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/item/aicard, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"Jt" = ( /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Ed" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/vending/cola{ +/area/space) +"Ju" = ( +/obj/structure/hygiene/shower{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ dir = 4; - pixel_x = -5 + icon_state = "twindow" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ee" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 +/obj/structure/window/reinforced/tinted, +/obj/structure/curtain/open/shower, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ef" = ( -/obj/abstract/landmark{ - name = "lightsout" +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"Jv" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Jw" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Eg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 + icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Eh" = ( -/obj/machinery/vending/snack{ - dir = 8; - pixel_x = 5 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Jx" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ei" = ( -/obj/machinery/fabricator/pipe/disposal, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ej" = ( -/obj/machinery/conveyor_switch{ - id_tag = "CanisterStore" +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Jy" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ek" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"JA" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"JB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"JC" = ( +/obj/machinery/porta_turret{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"El" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"JD" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"JE" = ( +/obj/machinery/porta_turret{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Em" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"En" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Eo" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/engine) -"Ep" = ( -/turf/simulated/floor/reinforced/airmix, -/area/ministation/atmospherics) -"Eq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Er" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"JG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Es" = ( -/obj/machinery/power/terminal{ - dir = 1 +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"JH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 }, +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"JI" = ( /obj/structure/cable{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"JJ" = ( +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"JK" = ( +/obj/machinery/flasher{ + pixel_y = -21; dir = 1 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Et" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 +/obj/machinery/ai_slipper{ + uses = 10 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Eu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ev" = ( -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ew" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/vending/coffee{ +/obj/machinery/light, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"JL" = ( +/obj/machinery/alarm{ dir = 4; - pixel_x = -5 + pixel_x = -23 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ex" = ( -/obj/machinery/vending/cigarette{ - dir = 8; - pixel_x = 5 +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"JM" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ey" = ( -/obj/machinery/fabricator/pipe, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ez" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"JN" = ( +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"JO" = ( +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/simulated/floor/plating, +/area/space) +"JP" = ( +/obj/structure/transit_tube{ + icon_state = "N-SE" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"ED" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8 +/obj/structure/lattice, +/turf/space, +/area/space) +"JQ" = ( +/obj/structure/transit_tube{ + icon_state = "D-SW" }, +/obj/structure/lattice, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-4" }, +/turf/space, +/area/space) +"JR" = ( /turf/simulated/floor/tiled, -/area/ministation/engine) -"EE" = ( -/obj/item/stool/padded, -/obj/abstract/landmark/start{ - name = "Security Officer" +/area/ministation/ai_sat) +"JS" = ( +/obj/machinery/door/firedoor{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"EG" = ( -/obj/machinery/light/small/emergency{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"EH" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/reinforced/airmix, -/area/ministation/atmospherics) -"EI" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/reinforced/airmix, -/area/ministation/atmospherics) -"EJ" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/engine) -"EL" = ( -/obj/abstract/landmark/start{ - name = "Station Engineer" +/area/ministation/ai_sat) +"JT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EM" = ( -/obj/structure/table/reinforced, -/obj/item/boombox, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EN" = ( -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"JU" = ( +/turf/simulated/wall, +/area/ministation/ai_core) +"JV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/structure/table/reinforced, -/obj/item/chems/chem_disp_cartridge/water, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EO" = ( -/obj/structure/table/reinforced, -/obj/item/chems/food/old/pizza, -/obj/item/stack/material/puck/mapped/uranium/ten, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EP" = ( -/obj/machinery/vending/materials{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EQ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"JW" = ( +/obj/structure/table, /obj/machinery/light{ - dir = 4; + dir = 8; icon_state = "tube1" }, -/obj/machinery/computer/atmos_alert{ - dir = 8 +/obj/item/stock_parts/circuitboard/aiupload, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"JX" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"ER" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"JY" = ( +/obj/structure/table, +/obj/machinery/light{ dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/engine) -"ES" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/stock_parts/circuitboard/borgupload, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Ka" = ( +/obj/structure/transit_tube{ + icon_state = "D-NE" }, -/turf/simulated/wall/r_wall, -/area/ministation/engine) -"ET" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/space, +/area/space) +"Kb" = ( +/obj/structure/transit_tube{ + icon_state = "E-NW" }, -/obj/effect/floor_decal/corner/yellow/three_quarters, -/obj/structure/sign/warning/engineering_access{ - pixel_y = -32 +/turf/space, +/area/space) +"Kc" = ( +/obj/structure/lattice, +/obj/structure/transit_tube{ + icon_state = "E-W-Pass" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"EU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/space, +/area/space) +"Kd" = ( +/obj/structure/transit_tube, +/obj/structure/lattice, +/turf/space, +/area/space) +"Ke" = ( +/obj/structure/transit_tube, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Kf" = ( +/obj/structure/transit_tube, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"Kg" = ( +/obj/structure/transit_tube/station{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"EV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/ministation/ai_sat) +"Kh" = ( +/obj/structure/transit_tube{ + dir = 8; + icon_state = "Block" }, -/obj/effect/floor_decal/corner/yellow/three_quarters{ - dir = 4 +/obj/machinery/door/firedoor{ + dir = 8 }, -/obj/structure/sign/department/engineering{ - dir = 1; - pixel_y = -32 +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/obj/random/trash, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"EW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/area/ministation/ai_sat) +"Ki" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 }, -/turf/simulated/wall/r_wall, -/area/ministation/engine) -"EX" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EY" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"EZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fa" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fb" = ( -/mob/living/simple_animal/hostile/retaliate/parrot/Poly, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fc" = ( -/obj/structure/table/reinforced, -/obj/item/wrench, -/obj/item/clothing/gloves/insulated, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fd" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fe" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/table/reinforced, -/obj/item/chems/drinks/glass2/coffeecup/metal, -/obj/item/chems/drinks/glass2/coffeecup/metal, -/obj/item/chems/condiment/small/packet/coffee, -/obj/item/chems/condiment/small/packet/coffee, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ff" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/opossum/poppy, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fg" = ( -/obj/machinery/firealarm{ dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"Fh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 + icon_state = "bulb1" }, -/turf/simulated/wall/r_wall, -/area/ministation/engine) -"Fi" = ( +/obj/structure/closet/secure_closet/atmos_personal, +/obj/item/storage/toolbox/emergency, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/mask/breath/emergency, +/obj/item/storage/firstaid/o2, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"Kj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 10 }, /turf/simulated/wall/r_wall, -/area/ministation/engine) -"Fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/ai_core) +"Kk" = ( +/obj/machinery/porta_turret{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Kl" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor, -/area/ministation/engine) -"Fk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Km" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Kn" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_x = -22; + pixel_y = 6; dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/engine) -"Fl" = ( -/obj/abstract/landmark/start{ - name = "Assistant" +/obj/item/radio/intercom{ + listening = 0; + name = "Custom Channel"; + pixel_y = 20 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/item/radio/intercom{ + frequency = 1447; + name = "Private Channel"; + pixel_x = 22; + pixel_y = 6; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/newscaster{ + pixel_x = -32; + pixel_y = 32 }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"Fm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fn" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = 31 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fo" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/aicore/deactivated, +/obj/abstract/landmark/start/ai, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Ko" = ( +/obj/machinery/porta_turret{ + dir = 8 }, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Kp" = ( +/obj/structure/table, +/obj/item/aiModule/asimov, +/obj/item/aiModule/corp, +/obj/item/aiModule/dais, +/obj/item/aiModule/paladin, +/obj/item/aiModule/protectStation, +/obj/item/aiModule/quarantine, +/obj/item/aiModule/reset, +/obj/item/aiModule/robocop, +/obj/item/aiModule/safeguard, +/obj/item/aiModule/tyrant, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Kq" = ( /obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fq" = ( -/turf/simulated/wall/r_wall, -/area/ministation/court) -"Fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/tank_rack/oxygen, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fs" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ft" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Kr" = ( +/obj/machinery/computer/upload/ai{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/flasher{ + pixel_y = -32; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fv" = ( -/obj/structure/cable{ - icon_state = "2-4" +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Ks" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + name = "_South APC"; + pixel_y = -24 }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fw" = ( -/obj/structure/cable{ - icon_state = "1-8" +/turf/simulated/floor/bluegrid, +/area/ministation/ai_upload) +"Kt" = ( +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Station Intercom (AI Private)"; + pixel_y = -30; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fx" = ( -/obj/machinery/vending/engivend{ - dir = 8 +/obj/machinery/computer/upload/robot{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall, -/area/ministation/engine) -"Fz" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Ku" = ( +/obj/machinery/light, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light/small{ +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Kv" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_upload) +"Kw" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/yellow/three_quarters{ - dir = 8 +/obj/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FA" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 }, -/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Kx" = ( +/obj/machinery/door/window/southright, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/yellow/three_quarters{ - dir = 1 +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Ky" = ( +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = 25 +/obj/structure/window/reinforced, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 5; + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall, -/area/ministation/engine) -"FD" = ( -/obj/abstract/landmark/start{ - name = "Station Engineer" +/obj/machinery/flasher{ + pixel_x = -6; + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FE" = ( +/obj/machinery/camera/motion/ministation, +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"Kz" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/conveyor{ + id_tag = "trash_sort"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/trash) +"KA" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-2" }, -/obj/machinery/power/solar, -/turf/simulated/floor/airless, -/area/space) -"FF" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KB" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" }, /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/plating, -/area/space) -"FG" = ( -/obj/structure/cable{ - icon_state = "0-8" +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"KC" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/machinery/power/solar, -/turf/simulated/floor/airless, -/area/space) -"FH" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FI" = ( -/obj/structure/rack{ +/obj/machinery/computer/modular/preset/security{ dir = 8 }, -/obj/item/chems/spray/extinguisher{ - pixel_x = 8 - }, -/obj/item/clothing/gloves/thick, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FJ" = ( -/obj/machinery/port_gen/pacman, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FL" = ( +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/alarm{ + pixel_y = 28 }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"FO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KH" = ( +/obj/structure/closet/lasertag/red, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"KJ" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/door/airlock/glass/engineering, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/computer/modular/preset/medical{ + dir = 4 }, -/turf/simulated/floor, -/area/ministation/engine) -"FQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KK" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FR" = ( -/obj/abstract/landmark{ - name = "bluespace_a" +/obj/structure/cable{ + icon_state = "1-2" }, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "2-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KL" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/door/airlock/glass/engineering, -/obj/machinery/door/firedoor{ - dir = 8 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KM" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor, -/area/ministation/engine) -"FU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"KO" = ( +/obj/machinery/light/small{ + dir = 1 }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KP" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KQ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 5; - pixel_y = -32 - }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KR" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/network/engineering{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KS" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"FZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ga" = ( -/obj/structure/cable{ - icon_state = "2-8" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KY" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"KZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall, +/area/ministation/ai_sat) +"La" = ( /obj/structure/cable{ icon_state = "1-2" }, +/turf/simulated/wall, +/area/ministation/ai_sat) +"Lb" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 + }, /turf/simulated/floor/plating, /area/space) -"Gb" = ( +"Lc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gc" = ( -/obj/machinery/firealarm{ +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ld" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) +"Le" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Lf" = ( +/obj/machinery/power/apc{ dir = 8; + name = "MiniSat Maint APC"; pixel_x = -24 }, -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gd" = ( -/obj/structure/rack{ - dir = 8 +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/tank/emergency/oxygen/engi, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ge" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gf" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/area/ministation/ai_sat) +"Lg" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = -3; + pixel_y = 3 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/obj/machinery/status_display{ + pixel_y = 32 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gh" = ( -/obj/structure/cable{ - icon_state = "0-4" +/area/ministation/ai_sat) +"Lh" = ( +/obj/machinery/alarm{ + pixel_y = 23 }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/space) -"Gi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gj" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, +/area/ministation/ai_sat) +"Li" = ( +/obj/structure/cable, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/door/firedoor, +/obj/machinery/power/smes/buildable/max_cap_in_out, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gk" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/area/ministation/ai_sat) +"Lj" = ( +/obj/machinery/power/terminal{ + dir = 8 }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gm" = ( -/obj/structure/lattice, -/turf/simulated/wall, -/area/ministation/engine) -"Gn" = ( /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/power/smes/buildable/preset, +/obj/machinery/camera/network/ministation/sat, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/area/ministation/ai_sat) +"Lk" = ( +/obj/structure/rack, +/obj/item/crowbar/red, +/obj/item/wrench, /obj/structure/cable{ icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gq" = ( -/obj/structure/cable{ - icon_state = "1-8" +/area/ministation/ai_sat) +"Ll" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 22; + dir = 8 }, /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 + icon_state = "2-8" }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gr" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 +/area/ministation/ai_sat) +"Lm" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ln" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gt" = ( +/area/ministation/ai_sat) +"Lo" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gu" = ( +/area/ministation/ai_sat) +"Lp" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/machinery/power/smes/buildable/preset, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gv" = ( -/obj/machinery/power/terminal{ - dir = 8 +/area/ministation/ai_sat) +"Lq" = ( +/obj/structure/sign/department/cargo{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 + icon_state = "4-8" }, -/obj/structure/sign/warning/airlock{ - pixel_x = 32 +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Gw" = ( -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/space) -"Gx" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/area/ministation/hall/n) +"Lr" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 }, /obj/machinery/power/terminal{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Gz" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Ls" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 4 }, +/obj/effect/floor_decal/corner/blue, /obj/effect/floor_decal/corner/yellow{ - dir = 6 + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"Lt" = ( +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" + }, +/obj/structure/hygiene/shower{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/item/soap, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"Lu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Lv" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"GA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/ai_sat) +"Lw" = ( +/obj/abstract/landmark{ + name = "xeno_spawn"; + pixel_x = -1 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"GB" = ( -/obj/structure/cable{ - icon_state = "1-4" +/area/ministation/ai_sat) +"Lx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"Ly" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"Lz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LA" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"GC" = ( -/obj/machinery/door/airlock/external{ - autoset_access = 0; - id_tag = "starboard_engineering_airlock_interior"; - locked = 1 +/area/ministation/ai_sat) +"LB" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LC" = ( +/obj/structure/table, +/obj/item/stack/material/pane/mapped/glass/fifty, +/obj/item/stack/cable_coil/yellow, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LD" = ( +/obj/item/stool, +/obj/item/radio, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LE" = ( +/obj/structure/bed, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LF" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/item/stack/material/puck/mapped/uranium/ten, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LG" = ( +/obj/structure/cable, +/obj/machinery/port_gen/pacman/super, +/turf/simulated/floor/tiled, +/area/ministation/ai_sat) +"LJ" = ( +/obj/effect/shuttle_landmark/supply/station, +/turf/space, +/area/ministation/supply_dock) +"LO" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"LP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/machinery/button/access/interior{ - id_tag = "starboard_engineering_airlock"; - name = "interior access button"; - pixel_x = -10; - pixel_y = 20 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" }, -/turf/simulated/floor, -/area/ministation/engine) -"GD" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"LS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"LY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"LZ" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "starboard_engineering_vent"; +/obj/machinery/door/airlock/double{ dir = 8 }, /turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Ma" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/turf/simulated/floor/plating, /area/ministation/engine) -"GF" = ( -/obj/machinery/door/airlock/external{ - locked = 1; - id_tag = "starboard_engineering_airlock_exterior"; - autoset_access = 0 +"Mc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/camera/autoname{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Md" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/button/access/interior{ - id_tag = "starboard_engineering_airlock"; - name = "exterior access button"; - pixel_x = 10; - pixel_y = 20; - command = "cycle_exterior" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Mg" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" + }, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/plating, /area/ministation/engine) -"GH" = ( -/obj/structure/cable{ - icon_state = "0-8" +"Mh" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/space) -"GI" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/conveyor{ + id_tag = "CanisterStore" + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/plating, -/area/space) -"GJ" = ( +/area/ministation/engine) +"Mj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /obj/structure/cable{ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/space) -"GL" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/ai_sat) +"Ml" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"GM" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Mm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/space) -"GN" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/camera/network/ministation/sat{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-4" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Mn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Mo" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_io, /turf/simulated/floor/plating, -/area/space) -"GO" = ( -/obj/structure/cable{ - icon_state = "1-8" +/area/ministation/engine) +"Mq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "1-4" +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"Mv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Mx" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/status_display{ + pixel_y = 32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/space) -"GP" = ( -/obj/machinery/power/tracker, -/obj/structure/cable{ - icon_state = "0-8" +"MB" = ( +/obj/abstract/landmark/start{ + name = "Assistant" }, -/turf/simulated/floor/plating, -/area/space) -"GQ" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/item/stool/padded, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"MC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, -/obj/machinery/power/tracker, -/turf/simulated/floor/plating, -/area/space) -"GR" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/space) -"GS" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/light{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/light_switch{ + pixel_y = 12; + dir = 8; + pixel_x = 24 }, -/turf/simulated/floor/plating, -/area/space) -"GT" = ( -/obj/structure/cable{ - icon_state = "2-4" +/turf/simulated/floor/carpet/orange, +/area/ministation/engine) +"ME" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 }, -/obj/structure/cable{ +/obj/structure/cable/cyan{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /turf/simulated/floor/plating, -/area/space) -"GV" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/supermatter) +"MF" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 }, -/obj/machinery/door/airlock/external/glass{ - id_tag = "port_engineering_airlock_interior"; - autoset_access = 0; - locked = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/start{ + name = "Assistant" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/item/stool/padded, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"MI" = ( +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"MJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/button/access/interior{ - id_tag = "port_engineering_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"MK" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, -/area/ministation/engine) -"GW" = ( +/area/ministation/maint/l1ne) +"MM" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/airlock_sensor{ - id_tag = "port_engineering_sensor"; - pixel_y = 20 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "port_engineering_airlock"; - pixel_y = 24; - tag_airpump = "port_engineering_vent"; - tag_chamber_sensor = "port_engineering_sensor"; - tag_exterior_door = "port_engineering_airlock_exterior"; - tag_interior_door = "port_engineering_airlock_interior" +/obj/machinery/door/blast/regular/open{ + id_tag = "smsafetydoor" + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"MN" = ( +/obj/structure/closet/l3closet/janitor, +/obj/item/grenade/chem_grenade/cleaner, +/turf/simulated/floor/tiled, +/area/ministation/janitor) +"MR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 }, /turf/simulated/floor/plating, /area/ministation/engine) -"GX" = ( +"MS" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-4" }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 + dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/engine) -"GY" = ( -/obj/machinery/power/solar_control{ +"MT" = ( +/obj/machinery/door/firedoor{ dir = 8 }, -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"GZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/abstract/landmark/start{ - name = "Robot" + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Ha" = ( -/obj/item/radio/intercom{ - canhear_range = 3; - name = "Common Channel"; - pixel_x = 27; - pixel_y = -3 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/double/mining{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hc" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hd" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"He" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +/area/ministation/cargo) +"MW" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/space) -"Hf" = ( -/obj/structure/cable, -/obj/machinery/power/solar_control{ +/area/ministation/supermatter) +"MX" = ( +/turf/simulated/wall, +/area/ministation/trash) +"MZ" = ( +/obj/machinery/door/airlock/atmos, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Nc" = ( +/obj/effect/floor_decal/corner/red{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hg" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/camera/network/engineering, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hh" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/camera/network/engineering, -/turf/simulated/floor, -/area/ministation/engine) -"Hi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hj" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hk" = ( -/obj/structure/transit_tube{ - dir = 4; - icon_state = "Block" +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"Ne" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hl" = ( -/obj/structure/transit_tube_pod{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/transit_tube/station{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hm" = ( -/obj/structure/transit_tube, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hn" = ( -/obj/structure/transit_tube, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Nh" = ( +/obj/structure/sign/directions/engineering{ + pixel_x = -32; + pixel_y = -32 }, -/obj/structure/window/reinforced{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/turf/space, -/area/ministation/engine) -"Ho" = ( -/obj/structure/transit_tube, -/turf/space, -/area/space) -"Hp" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/structure/lattice, -/turf/space, -/area/space) -"Hq" = ( -/obj/structure/transit_tube{ - icon_state = "W-SE" +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/space, -/area/space) -"Hr" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" }, -/turf/space, -/area/space) -"Hs" = ( /obj/machinery/light{ dir = 8; icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Ht" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, +/area/ministation/hall/s1) +"Ni" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hu" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock{ + pixel_x = 1 }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/ministation/engine) -"Hv" = ( -/obj/machinery/door/firedoor{ +"Nn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Nq" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/item/eftpos, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hw" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/alarm{ + pixel_y = 22 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Hx" = ( -/obj/effect/floor_decal/corner/yellow{ +/area/ministation/cargo) +"Ns" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Nu" = ( +/obj/abstract/landmark/start{ + name = "Head Engineer" }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/bed/chair/office{ + dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, /area/ministation/engine) -"Hz" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" +"Nw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/structure/lattice, -/turf/space, -/area/space) -"HA" = ( -/obj/structure/transit_tube{ - icon_state = "S-NW" +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 }, -/obj/structure/lattice, -/turf/space, -/area/space) -"HB" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "0-8" }, -/obj/item/stool, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"Nx" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HC" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/sign/warning/radioactive{ + pixel_y = -34; + dir = 1; + pixel_x = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HD" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"NB" = ( +/obj/machinery/firealarm{ + pixel_y = 21 }, -/obj/structure/cable{ +/obj/structure/cable/cyan{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HE" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/camera/network/engineering{ + name = "SM North" }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"NH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"NI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"HF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/area/ministation/cargo) +"NL" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "l1ne_airlock_exterior" }, -/obj/item/stool, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/button/access/interior{ + id_tag = "l1ne_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/turf/simulated/floor/airless, +/area/ministation/maint/l1ne) +"NM" = ( +/obj/structure/cable{ + icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HH" = ( -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/turf/simulated/floor/plating, +/area/space) +"NO" = ( +/obj/abstract/level_data_spawner/main_level, /turf/space, /area/space) -"HI" = ( -/obj/structure/table, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/circuitboard/airlock_electronics, -/obj/item/stock_parts/circuitboard/airlock_electronics, -/obj/item/scanner/gas, -/turf/simulated/floor/tiled, +"NQ" = ( +/turf/simulated/floor/plating, /area/ministation/engine) -"HJ" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/clothing/head/earmuffs, -/obj/item/stack/material/rods/fifty, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HK" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 +"NR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/directions/supply{ + dir = 1; + pixel_x = -32; + pixel_y = 32 }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HL" = ( -/obj/structure/cable, -/obj/machinery/power/smes/buildable/preset, /turf/simulated/floor/tiled, -/area/ministation/engine) -"HM" = ( -/obj/machinery/power/terminal{ - dir = 8 +/area/ministation/hall/n) +"NS" = ( +/obj/machinery/door/airlock/atmos, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"NU" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 1; + id_tag = "sat2_airlock"; + pixel_y = -22; + tag_airpump = "sat2_vent"; + tag_chamber_sensor = "sat2_sensor"; + tag_exterior_door = "sat2_airlock_exterior"; + tag_interior_door = "sat2_airlock_interior"; + pixel_x = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "sat2_vent" }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HN" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/airlock_sensor{ + id_tag = "sat2_sensor"; + pixel_y = -18; + pixel_x = -8; + dir = 1 }, -/obj/structure/cable{ - icon_state = "2-4" +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"NV" = ( +/obj/machinery/atmospherics/unary/vent_pump/engine{ + dir = 4; + external_pressure_bound = 100; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "cooling_out"; + initialize_directions = 1; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"NW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HO" = ( +/obj/machinery/meter, +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ + dir = 4 + }, +/obj/structure/closet/secure_closet/atmos_personal, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"NX" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"NY" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/machinery/power/solar_control{ - dir = 8 +/obj/effect/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 }, /turf/simulated/floor/tiled, /area/ministation/engine) -"HP" = ( -/obj/structure/table, -/obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/pane/mapped/rglass, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"HQ" = ( -/obj/structure/table, -/obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, -/turf/simulated/floor/tiled, +"Oa" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plating, /area/ministation/engine) -"HR" = ( -/obj/structure/table, -/obj/item/stack/material/reinforced/mapped/plasteel, -/turf/simulated/floor/tiled, +"Oe" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/plating, /area/ministation/engine) -"HS" = ( -/obj/structure/transit_tube{ - icon_state = "N-S" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"HT" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +"Of" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 }, /turf/simulated/floor/plating, -/area/space) -"HU" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/ai_sat) +"Og" = ( +/obj/machinery/door/airlock/external{ + locked = 1; + id_tag = "starboard_engineering_airlock_exterior"; + autoset_access = 0 }, -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - id_tag = "stern_engineering_airlock_interior"; - locked = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/button/access/interior{ - id_tag = "stern_engineering_airlock"; - name = "interior access button"; - pixel_x = 20; - pixel_y = 10 + id_tag = "starboard_engineering_airlock"; + name = "exterior access button"; + pixel_y = 24; + command = "cycle_exterior" + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/engine) -"HV" = ( -/obj/structure/transit_tube{ - icon_state = "N-S-Pass" +"Oh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, -/turf/space, -/area/space) -"HW" = ( +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Oi" = ( +/obj/machinery/light_switch{ + pixel_y = 8; + dir = 4; + pixel_x = -23 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/ministation/supermatter) +"Oj" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/airlock_sensor{ - id_tag = "stern_engineering_sensor"; - pixel_y = 10; - pixel_x = -20 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "stern_engineering_airlock"; - pixel_y = null; - tag_airpump = "stern_engineering_vent"; - tag_chamber_sensor = "stern_engineering_sensor"; - tag_exterior_door = "stern_engineering_airlock_exterior"; - tag_interior_door = "stern_engineering_airlock_interior"; - dir = 4; - pixel_x = -20 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/turf/simulated/floor/plating, +/area/space) +"Om" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/engine) -"HY" = ( +/area/ministation/ai_sat) +"On" = ( /obj/structure/cable{ - icon_state = "0-2" + icon_state = "0-4" + }, +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/space) -"HZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light/small, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Ia" = ( -/obj/structure/window/basic{ +/area/ministation/maint/l1central) +"Oo" = ( +/obj/structure/fitness/weightlifter, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Or" = ( +/obj/machinery/light/small{ dir = 1 }, -/obj/structure/curtain/open/bed{ - icon_state = "closed"; - opacity = TRUE +/obj/structure/cable{ + icon_state = "2-8" }, /turf/simulated/floor/plating, -/area/ministation/disused_office) -"Ib" = ( -/turf/simulated/wall, -/area/ministation/disused_office) -"Ic" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/area/ministation/ai_sat) +"Ot" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Ov" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/hall/n) +"Ow" = ( +/obj/machinery/camera/network/mining{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"Oy" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/item/storage/firstaid/regular{ + pixel_x = 6; + pixel_y = -5 + }, +/obj/structure/table, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 5 }, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Id" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/area/ministation/eva) +"Oz" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"OA" = ( +/obj/effect/decal/cleanable/blood/oil, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"OC" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Ie" = ( -/obj/machinery/newscaster{ - pixel_x = -32 +/area/ministation/eva) +"OF" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/stool/padded, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/structure/sign/warning/vent_port{ + dir = 1; + pixel_y = -34 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"OG" = ( +/obj/machinery/power/apc{ + name = "_South APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ministation/eva) +"OH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/yellow/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"OJ" = ( /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"OK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"If" = ( -/obj/structure/cable, -/obj/machinery/power/solar, +"ON" = ( +/obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/floor/plating, -/area/space) -"Ig" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "N-S-Pass" +/area/ministation/hall/n) +"OO" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat3_airlock_exterior" }, -/turf/space, -/area/space) -"Ih" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Ij" = ( -/obj/machinery/atmospherics/unary/tank/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 +/obj/machinery/button/access/interior{ + id_tag = "sat3_airlock"; + name = "exterior access button"; + pixel_y = 24; + command = "cycle_exterior" }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"Ik" = ( +"OQ" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Telecommunications relay airlock"; + req_access = list("ACCESS_TELECOMS") + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"OR" = ( /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; req_access = list("ACCESS_EXTERNAL"); locked = 1; - id_tag = "sat2_airlock_interior" + id_tag = "mining_airlock_exterior" }, /obj/machinery/button/access/interior{ - id_tag = "sat2_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ + id_tag = "mining_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Il" = ( -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Im" = ( -/obj/machinery/light/small{ +/turf/simulated/floor/airless, +/area/ministation/cargo) +"OS" = ( +/obj/machinery/power/terminal{ dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"In" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/emitter{ + anchored = 1; + id_tag = "EngineEmitter"; + state = 2 }, +/obj/structure/cable, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Io" = ( +/area/ministation/supermatter) +"OT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"OU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/bed/chair/wood/maple{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/abstract/landmark/start{ - name = "Enclave Representative" +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"Ip" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"OV" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/camera/network/ministation/sat, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Ir" = ( -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Is" = ( +/area/space) +"OW" = ( +/obj/structure/sign/directions/supply{ + dir = 1; + pixel_x = -32; + pixel_y = 32 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"It" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner" + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"OX" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + id_tag = "atmos_airlock_interior"; + locked = 1 + }, +/obj/machinery/button/access/interior{ + id_tag = "atmos_airlock"; + name = "interior access button"; + pixel_x = 20; dir = 8 }, -/turf/simulated/floor/airless, -/area/space) -"Iu" = ( -/obj/machinery/light/small{ +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"OY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"OZ" = ( +/obj/effect/wallframe_spawn/reinforced_borosilicate, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "SupermatterPort"; + name = "Reactor Blast Door" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/area/ministation/supermatter) +"Pa" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/s1) +"Pb" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"Iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"Ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Pc" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Iy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/area/ministation/ai_upload) +"Pe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"Pg" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"Iz" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Ph" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"IB" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, /turf/simulated/floor/wood/yew, -/area/ministation/court) -"IC" = ( -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"ID" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IE" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"IG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/area/ministation/engine) +"Pi" = ( +/obj/machinery/drone_fabricator/maintenance, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, +/area/ministation/engine) +"Pl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/sign/warning/airlock{ + pixel_x = 32; + dir = 8 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) -"II" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IJ" = ( -/obj/machinery/alarm{ - pixel_y = 28 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IK" = ( -/obj/item/stool, +"Pm" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"IL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/maintenance, -/obj/structure/rack, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/power/smes/buildable/max_cap_in_out{ + capacity = 5e+009; + charge = 5e+009 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IO" = ( -/obj/effect/floor_decal/industrial/warning{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/smcontrol) +"Po" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 4; - id_tag = "cargo_bay"; - tag_airpump = "cargo_vent"; - tag_chamber_sensor = "cargo_sensor"; - tag_exterior_door = "cargo_airlock_exterior"; - tag_interior_door = "cargo_airlock_interior"; - pixel_x = -20 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, -/area/ministation/cargo) -"IQ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/hall/n) +"Pp" = ( +/turf/space, +/area/ministation/supply_dock) +"Pr" = ( +/obj/item/mollusc/barnacle{ + pixel_x = -13; + pixel_y = -14 }, +/turf/space, +/area/space) +"Ps" = ( +/obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/holofloor/lino, -/area/ministation/telecomms) -"IV" = ( -/obj/machinery/door/airlock/glass/command, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"IW" = ( +/area/ministation/smcontrol) +"Py" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"IY" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8 +/obj/effect/floor_decal/corner/yellow{ + dir = 9 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"IZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Pz" = ( +/obj/machinery/atmospherics/unary/heat_exchanger, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"PC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Jc" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"PD" = ( +/turf/simulated/wall/r_wall, +/area/ministation/atmospherics) +"PF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/random/trash, /turf/simulated/floor/tiled, /area/ministation/engine) -"Jd" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 0; - id_tag = "sat3_airlock"; - pixel_y = 24; - tag_airpump = "sat3_vent"; - tag_chamber_sensor = "sat3_sensor"; - tag_exterior_door = "sat3_airlock_exterior"; - tag_interior_door = "sat3_airlock_interior" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "sat3_vent" - }, -/obj/machinery/airlock_sensor{ - id_tag = "sat3_sensor"; - pixel_y = 20 +"PH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Je" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 23 +/area/ministation/maint/westatmos) +"PI" = ( +/obj/effect/floor_decal/corner/white{ + dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; - dir = 4 + dir = 4; + name = "Air to Ports" }, -/turf/simulated/floor/plating, -/area/ministation/cafe) -"Jf" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"PK" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Jg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"Jh" = ( -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"Ji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"Jk" = ( -/obj/item/clothing/under/librarian, -/obj/structure/closet, -/obj/item/multitool, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Jm" = ( -/obj/structure/table, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/machinery/light/small{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"PM" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 8 }, -/obj/machinery/button/alternate/door/bolts{ - name = "AI core door bolts" - }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"Jn" = ( -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"Jo" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/machinery/camera/motion/ministation, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Jp" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/meter{ + id_tag = "wloop_atm_meter" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Jq" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"PN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"PO" = ( +/obj/machinery/camera/autoname{ + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Jr" = ( -/obj/structure/table, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/aicard, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"Js" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/ministation/ai_upload) -"Jt" = ( -/turf/simulated/floor/plating, -/area/space) -"Ju" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Jv" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Jw" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/disposal, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"PQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Jx" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"PW" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Jy" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"PZ" = ( +/obj/machinery/door/airlock/atmos, /obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Jz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 + icon_state = "4-8" }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"JA" = ( -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"JB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"JC" = ( -/obj/machinery/porta_turret{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"JD" = ( -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"JE" = ( -/obj/machinery/porta_turret{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Qa" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "smsafetydoor" }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"JF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Qe" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"JG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +"Qg" = ( +/obj/machinery/alarm{ + pixel_y = 23 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"JH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/smcontrol) +"Qh" = ( +/obj/structure/table/gamblingtable, +/obj/item/flashlight/lamp/green, +/turf/simulated/floor/carpet/blue2, +/area/ministation/hall/s1) +"Qj" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 8 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"JI" = ( +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Qk" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"JJ" = ( -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"JK" = ( -/obj/machinery/flasher{ - pixel_y = -21 - }, -/obj/machinery/ai_slipper{ - uses = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/light, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"JL" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"JM" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"JN" = ( -/turf/simulated/wall/r_wall, -/area/ministation/ai_upload) -"JO" = ( -/obj/structure/cable, -/obj/machinery/power/tracker, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"Ql" = ( +/obj/machinery/atmospherics/binary/pump, /turf/simulated/floor/plating, -/area/space) -"JP" = ( -/obj/structure/transit_tube{ - icon_state = "N-SE" +/area/ministation/engine) +"Qn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Qo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/lattice, -/turf/space, -/area/space) -"JQ" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, -/obj/structure/lattice, -/turf/space, -/area/space) -"JR" = ( /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"JS" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/area/ministation/engine) +"Qq" = ( +/obj/structure/closet/crate/bin/ministation, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Qt" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"JT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/area/ministation/hall/n) +"Qv" = ( +/obj/machinery/power/supermatter, +/obj/machinery/mass_driver{ + id_tag = "eject" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"JU" = ( -/turf/simulated/wall, -/area/ministation/ai_core) -"JV" = ( +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"Qw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"JW" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/item/stock_parts/circuitboard/aiupload, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"JX" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"JY" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 4 + icon_state = "4-8" }, -/obj/item/stock_parts/circuitboard/borgupload, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"JZ" = ( -/turf/simulated/wall, -/area/ministation/detective) -"Ka" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Qz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 }, -/turf/space, -/area/space) -"Kb" = ( -/obj/structure/transit_tube{ - icon_state = "E-NW" +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"QA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"QC" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/space, -/area/space) -"Kc" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/sign/warning/vent_port{ + dir = 1; + pixel_y = -34 }, -/turf/space, -/area/space) -"Kd" = ( -/obj/structure/transit_tube, -/obj/structure/lattice, -/turf/space, -/area/space) -"Ke" = ( -/obj/structure/transit_tube, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"QE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/space, -/area/ministation/ai_sat) -"Kf" = ( -/obj/structure/transit_tube, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Kg" = ( -/obj/structure/transit_tube/station{ - dir = 1 - }, +/area/ministation/smcontrol) +"QG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Kh" = ( -/obj/structure/transit_tube{ - dir = 8; - icon_state = "Block" +/area/ministation/hall/s1) +"QH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"QM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 }, /obj/effect/floor_decal/industrial/warning{ - dir = 4 + dir = 4; + icon_state = "warning" }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Ki" = ( +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"QN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; + dir = 1; level = 2 }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"QP" = ( +/obj/machinery/door/airlock/command, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Kj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/area/ministation/eva) +"QR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"Kk" = ( -/obj/machinery/porta_turret{ +/turf/simulated/floor/pool, +/area/ministation/dorms) +"QS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Kl" = ( +/turf/simulated/floor/tiled, +/area/ministation/engine) +"QV" = ( +/obj/structure/lattice, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/space, +/area/space) +"QW" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/bluegrid, +/turf/space, +/area/space) +"QY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, /area/ministation/ai_core) -"Km" = ( -/obj/machinery/ai_slipper{ - uses = 10 +"Ra" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/bluegrid, +/turf/simulated/wall/r_wall, /area/ministation/ai_core) -"Kn" = ( -/obj/item/radio/intercom{ - name = "Common Channel"; - pixel_x = -27; - pixel_y = 5 +"Rb" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/obj/item/radio/intercom{ - listening = 0; - name = "Custom Channel"; - pixel_y = 27 +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 }, -/obj/item/radio/intercom{ - frequency = 1447; - name = "Private Channel"; - pixel_x = 27; - pixel_y = 5 +/turf/simulated/floor/plating, +/area/ministation/janitor) +"Rc" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 }, -/obj/abstract/landmark/start/ai, -/obj/machinery/network/requests_console{ - department = "AI"; - pixel_x = 32; - pixel_y = 32 +/turf/simulated/floor/plating, +/area/space) +"Re" = ( +/obj/machinery/light_switch{ + pixel_y = 25 }, -/obj/machinery/newscaster{ - pixel_x = -32; - pixel_y = 32 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Rf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 + icon_state = "4-8" }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"Ko" = ( -/obj/machinery/porta_turret{ - dir = 8 +/obj/structure/sign/department/eva{ + pixel_y = 30 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Kp" = ( -/obj/structure/table, -/obj/item/aiModule/asimov, -/obj/item/aiModule/corp, -/obj/item/aiModule/dais, -/obj/item/aiModule/paladin, -/obj/item/aiModule/protectStation, -/obj/item/aiModule/quarantine, -/obj/item/aiModule/reset, -/obj/item/aiModule/robocop, -/obj/item/aiModule/safeguard, -/obj/item/aiModule/tyrant, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Kq" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Kr" = ( -/obj/machinery/computer/upload/ai{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/flasher{ - pixel_y = -20 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Rg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Ks" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = null; - name = "_South APC"; - pixel_y = -24 +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_upload) -"Kt" = ( -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_y = -29 +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"Rh" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "cargo_vent" }, -/obj/machinery/computer/upload/robot{ +/obj/machinery/airlock_sensor{ + id_tag = "cargo2_sensor"; + pixel_y = -20; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Ku" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Kv" = ( -/obj/structure/table, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_upload) -"Kw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/cable{ - icon_state = "0-2" +/turf/simulated/floor/plating, +/area/ministation/cargo) +"Rj" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 +/obj/structure/rack{ + dir = 8 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"Kx" = ( -/obj/machinery/door/window/southright, -/obj/structure/cable{ - icon_state = "1-2" +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/machinery/status_display{ + pixel_y = -32; + dir = 1 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"Ky" = ( -/obj/structure/window/reinforced{ +/turf/simulated/floor/tiled, +/area/ministation/eva) +"Rm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/mining/brace, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"Ro" = ( +/obj/structure/fitness/weightlifter, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Rp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/structure/window/reinforced, -/obj/machinery/turretid{ - name = "AI Chamber turret control"; - pixel_x = 5; - pixel_y = 24 - }, -/obj/machinery/flasher{ - pixel_x = -6; - pixel_y = 24 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Rq" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/destTagger{ + pixel_x = 4; + pixel_y = 3 }, -/obj/machinery/camera/motion/ministation, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"Kz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ministation/ai_upload) -"KA" = ( +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"Rr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Rs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Rt" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Ru" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/wall/r_wall, /area/ministation/ai_core) -"KB" = ( +"Rv" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Rw" = ( +/obj/effect/floor_decal/corner/white{ + dir = 6 }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"KC" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/valve/open, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"Rz" = ( +/obj/machinery/atmospherics/valve/digital{ dir = 4; - icon_state = "tube1" + name = "Emergency Cooling Valve 1" }, -/obj/machinery/computer/modular/preset/security{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"RB" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/closet/secure_closet{ + req_access = list("ACCESS_MEDICAL_EQUIP"); + closet_appearance = /decl/closet_appearance/secure_closet/medical/alt; + name = "Doctor locker" + }, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"RC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"KG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +"RD" = ( +/obj/structure/curtain/open/bed, +/obj/structure/bed/padded, +/obj/item/bedsheet/ce, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"RE" = ( +/obj/machinery/airlock_sensor{ + id_tag = "l1ne_sensor"; + pixel_y = 4; + pixel_x = -20; dir = 4 }, -/obj/machinery/alarm{ - pixel_y = 28 +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "l1ne_airlock"; + pixel_y = -4; + tag_airpump = "l1ne_vent"; + tag_chamber_sensor = "l1ne_sensor"; + tag_exterior_door = "l1ne_airlock_exterior"; + tag_interior_door = "l1ne_airlock_interior"; + dir = 4; + pixel_x = -20 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KI" = ( +/area/ministation/maint/l1ne) +"RF" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-4" }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"RH" = ( +/obj/machinery/material_processing/stacker, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"KJ" = ( -/obj/structure/cable{ - icon_state = "1-4" +/area/ministation/trash) +"RM" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 }, -/obj/machinery/computer/modular/preset/medical{ - dir = 4 +/obj/machinery/portable_atmospherics/canister/air/airlock{ + pixel_x = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KK" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"RN" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"RO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"RP" = ( +/obj/random/trash, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KL" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KM" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"RR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" }, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KN" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"KO" = ( -/obj/machinery/light/small{ +/turf/simulated/floor/plating, +/area/ministation/trash) +"RU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"RW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"KP" = ( -/obj/structure/cable{ - icon_state = "4-8" +"RX" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/turf/simulated/floor/tiled, +/area/ministation/engine) +"RY" = ( +/mob/living/simple_animal/hostile/retaliate/parrot/Poly, +/obj/structure/table/reinforced, +/obj/item/chems/drinks/glass2/coffeecup/one, +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"Sa" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KQ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/maint/l1ne) +"Sb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"Se" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KR" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KS" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/floor_decal/corner/yellow{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Sf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Sg" = ( +/obj/structure/closet/crate/solar, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KT" = ( +/area/ministation/engine) +"Sj" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"KV" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"KW" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"KX" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/machinery/power/smes/buildable/max_cap_in_out, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"KY" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"KZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Sk" = ( +/obj/machinery/camera/network/ministation/sat, +/turf/simulated/floor/plating, /area/ministation/ai_sat) -"La" = ( -/obj/structure/cable{ - icon_state = "1-2" +"Sm" = ( +/obj/structure/table, +/obj/item/multitool{ + pixel_x = 5 }, -/turf/simulated/wall, -/area/ministation/ai_sat) -"Lb" = ( -/obj/structure/lattice, -/turf/space, -/area/ministation/ai_sat) -"Lc" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"So" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Sp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"Ld" = ( +"Sq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_sat) -"Le" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Lf" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "MiniSat Maint APC"; - pixel_x = -24 - }, -/obj/structure/cable{ - icon_state = "0-2" +/turf/simulated/floor/tiled, +/area/ministation/hall/s1) +"Sr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Ss" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lg" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = -3; - pixel_y = 3 +/area/ministation/cargo) +"Su" = ( +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Sv" = ( +/obj/machinery/light{ + dir = 4 }, -/obj/item/storage/toolbox/mechanical, -/obj/item/multitool, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lh" = ( -/obj/machinery/alarm{ - pixel_y = 23 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Li" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Sw" = ( /obj/structure/cable, +/obj/machinery/power/apc{ + name = "SM APC"; + pixel_x = -27; + pixel_y = null; + dir = 8 + }, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/smes/buildable/max_cap_in_out, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lj" = ( -/obj/machinery/power/terminal{ - dir = 8 +/area/ministation/smcontrol) +"SB" = ( +/obj/machinery/door/blast/regular{ + id_tag = "EngineVent" }, -/obj/structure/cable{ - icon_state = "0-4" +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"SD" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 }, -/obj/machinery/camera/network/ministation/sat, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lk" = ( -/obj/structure/rack, -/obj/item/crowbar/red, -/obj/item/wrench, +/area/ministation/engine) +"SE" = ( +/obj/abstract/landmark/start{ + name = "Assistant" + }, +/obj/machinery/camera/autoname, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"SF" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Ll" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 28 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/sign/warning/vent_port{ + dir = 1; + pixel_y = -34 }, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lm" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/area/ministation/engine) +"SI" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"Ln" = ( -/obj/structure/cable{ - icon_state = "1-4" +"SJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ministation/smcontrol) +"SM" = ( +/obj/machinery/light_switch{ + pixel_y = 26; + dir = 4; + pixel_x = -23 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lo" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lp" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/structure/bed/chair/office, +/turf/simulated/floor/tiled, +/area/ministation/smcontrol) +"SO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 }, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lq" = ( -/obj/structure/sign/department/cargo{ - dir = 1; - pixel_y = -32 +/area/ministation/cargo) +"SQ" = ( +/obj/machinery/alarm{ + pixel_y = 23 }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"SR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 5 }, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Ls" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, +/area/ministation/cargo) +"ST" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Lt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /turf/simulated/floor/tiled, -/area/ministation/cargo) -"Lu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/area/ministation/engine) +"SU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"Lv" = ( +"SV" = ( /obj/machinery/alarm{ - dir = 4; - pixel_x = -23 + dir = 8; + pixel_x = 24 }, /obj/machinery/light/small{ - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lw" = ( -/obj/abstract/landmark{ - name = "xeno_spawn"; - pixel_x = -1 +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"SW" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 +/obj/machinery/camera/network/engineering, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"SZ" = ( +/obj/machinery/light/small{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Ly" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Tb" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" }, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"Lz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/plating, +/area/ministation/maint/l1central) +"Tc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Td" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/plating, /area/ministation/ai_sat) -"LA" = ( +"Tg" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 + icon_state = "2-4" }, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LB" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LC" = ( -/obj/structure/table, -/obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/cable_coil/yellow, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LD" = ( -/obj/item/stool, -/obj/item/radio, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LE" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LF" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/item/stack/material/puck/mapped/uranium/ten, -/turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LG" = ( -/obj/machinery/port_gen/pacman, -/obj/structure/cable, +/area/ministation/engine) +"Ti" = ( +/obj/structure/filing_cabinet, /turf/simulated/floor/tiled, -/area/ministation/ai_sat) -"LI" = ( -/obj/machinery/light{ - dir = 1 +/area/ministation/cargo) +"Tj" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"LJ" = ( -/obj/effect/shuttle_landmark/supply/station, -/turf/space, -/area/ministation/supply_dock) -"LL" = ( +/area/ministation/engine) +"Tl" = ( /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + id_tag = "stern_engineering_airlock_interior"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Tp" = ( +/obj/structure/table, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/stack/material/pane/mapped/glass/ten, +/obj/item/stack/material/sheet/mapped/steel/ten, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/ten, +/obj/machinery/camera/network/mining, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LM" = ( -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"LP" = ( -/obj/effect/floor_decal/corner/purple{ +/area/ministation/cargo) +"Tt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "starboard_engineering_airlock"; + pixel_y = 24; + tag_airpump = "starboard_engineering_vent"; + tag_chamber_sensor = "starboard_engineering_sensor"; + tag_exterior_door = "starboard_engineering_airlock_exterior"; + tag_interior_door = "starboard_engineering_airlock_interior" + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LQ" = ( -/obj/machinery/camera/autoname{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/engine) +"Tu" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Tv" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "atmos_vent" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/airlock_sensor{ + id_tag = "atmos_sensor"; + pixel_y = 4; + pixel_x = -20; dir = 4 }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "atmos_airlock"; + tag_airpump = "atmos_vent"; + tag_chamber_sensor = "atmos_sensor"; + tag_exterior_door = "atmos_airlock_exterior"; + tag_interior_door = "atmos_airlock_interior"; + dir = 4; + pixel_x = -20; + pixel_y = -4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Tw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Tx" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LT" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/space) +"Ty" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/sign/department/forensics{ - pixel_y = 32 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Tz" = ( +/obj/machinery/camera/network/engineering{ + dir = 1; + name = "Tank Storage" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LU" = ( -/obj/random/trash, /turf/simulated/floor/plating, -/area/ministation/disused) -"LV" = ( +/area/ministation/engine) +"TA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"TB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer{ - name = "kitchen freezer floor"; - temperature = 263 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"TC" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 }, -/area/ministation/cafe) -"LY" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"LZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Ma" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Mb" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/structure/sign/department/science_2{ - pixel_x = 31 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/structure/disposalpipe/junction/mirrored{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"Mc" = ( -/obj/machinery/light{ - dir = 8 - }, +"TH" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Md" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ +/area/ministation/hall/s1) +"TJ" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 8; + name = "disposals ejection chute" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/trash) +"TK" = ( +/obj/structure/rack{ dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Me" = ( +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/tank/emergency/oxygen/engi, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"TL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Mf" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/blast/regular/open{ + id_tag = "smsafetydoor" }, -/obj/machinery/light{ - dir = 8 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"TM" = ( +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/structure/closet/crate/bin/ministation, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Mg" = ( -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 8 }, -/obj/structure/window/reinforced{ +/turf/simulated/floor/plating, +/area/space) +"TO" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; dir = 4 }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/ministation/engine) -"Mh" = ( -/obj/structure/window/reinforced{ - dir = 8 +"TP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 }, -/obj/structure/window/reinforced{ +/obj/machinery/newscaster{ + pixel_x = 32; dir = 4 }, -/obj/machinery/conveyor{ - id_tag = "CanisterStore" - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/light{ - dir = 1 +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"TR" = ( +/obj/structure/cable{ + icon_state = "1-4" }, /turf/simulated/floor/plating, -/area/ministation/engine) -"Mi" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/full, -/obj/machinery/light{ - dir = 8 +/area/ministation/maint/l1central) +"TT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"Mj" = ( +/turf/simulated/floor/tiled, +/area/ministation/engine) +"TX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Mk" = ( +/area/ministation/maint/westatmos) +"TY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-8" }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"Ml" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Mm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Mn" = ( +/area/ministation/engine) +"TZ" = ( +/obj/structure/sign/warning/vent_port{ + pixel_y = 28 + }, +/turf/space, +/area/space) +"Ua" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/mask/snorkel, +/obj/item/clothing/mask/snorkel, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Uc" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ue" = ( +/obj/structure/table/gamblingtable, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/wood/yew, +/area/ministation/engine) +"Ug" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/meter, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/random/trash, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Mq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/area/ministation/supermatter) +"Uh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Ui" = ( +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"Uj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Ul" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" }, /turf/simulated/floor/tiled, -/area/ministation/cargo) -"Ms" = ( -/obj/item/radio/intercom{ +/area/ministation/engine) +"Um" = ( +/obj/random/trash, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ur" = ( +/obj/effect/floor_decal/industrial/warning{ dir = 8; - pixel_x = 20 + icon_state = "warning" }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/folder, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/carpet/red, -/area/ministation/court) -"Mt" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Uu" = ( +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ icon_state = "2-8" }, -/turf/simulated/floor/airless, -/area/space) -"Mw" = ( -/obj/machinery/cryopod{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/abstract/landmark/latejoin/cryo, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"Mx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"MA" = ( -/obj/structure/closet/secure_closet/courtroom, -/turf/simulated/floor/tiled, -/area/ministation/court) -"MB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"MC" = ( +/turf/simulated/floor/plating, +/area/space) +"Ux" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4; level = 2 }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"MD" = ( -/obj/item/stool/padded, -/obj/structure/sign/warning/nosmoking_2{ - pixel_y = 32 - }, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"MF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"MG" = ( -/obj/structure/bed/chair, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"MH" = ( -/obj/structure/table, -/obj/item/implantcase/tracking, -/obj/item/implantcase/chem, -/obj/item/implanter, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"UA" = ( /obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"MI" = ( -/obj/abstract/landmark/latejoin/cyborg, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"MJ" = ( -/obj/structure/bed, -/obj/item/bedsheet/purple, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"MK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"MM" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" + dir = 4; + icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"UC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/engine) -"MN" = ( -/obj/structure/cable{ - icon_state = "2-4" +"UG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/suit_cycler/ministation, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"UI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"UJ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/ministation/maint/nw) -"MO" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"MP" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 32 +/area/ministation/supermatter) +"UK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"MQ" = ( -/obj/structure/closet, -/obj/item/gun/launcher/crossbow, -/obj/item/arrow, -/obj/item/arrow, -/obj/item/cell/crap, -/obj/item/storage/briefcase, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/turf/simulated/floor/pool, +/area/ministation/dorms) +"UO" = ( +/obj/structure/cable{ + icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"MT" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"US" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -21 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"UT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/tiled, +/area/ministation/engine) +"UU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/machinery/door/airlock/double/glass/mining, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"MU" = ( -/obj/structure/table/woodentable, -/obj/item/storage/pill_bottle/dice, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"MV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/area/ministation/engine) +"UV" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "mining_airlock"; + pixel_y = -4; + tag_airpump = "mining_vent"; + tag_chamber_sensor = "mining_sensor"; + tag_exterior_door = "mining_airlock_exterior"; + tag_interior_door = "mining_airlock_interior"; + dir = 4; + pixel_x = -20 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/airlock_sensor{ + id_tag = "mining_sensor"; + pixel_y = 10; + pixel_x = -20; dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"MY" = ( +/turf/simulated/floor/plating, +/area/ministation/cargo) +"UX" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/simulated/floor/plating, +/area/space) +"UY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/simulated/floor/plating, +/area/space) +"Vb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Na" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -23 +/obj/machinery/firealarm{ + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Vc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Ve" = ( +/obj/abstract/landmark/start{ + name = "Station Engineer" }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"Nc" = ( +/area/ministation/engine) +"Vf" = ( +/obj/structure/curtain/open/bed, +/obj/structure/bed/padded, +/obj/item/bedsheet/ce, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Vj" = ( /obj/machinery/light{ - dir = 4 + dir = 1 }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Ne" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Vk" = ( +/obj/structure/lattice, +/obj/structure/transit_tube{ + icon_state = "N-S-Pass" }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Nh" = ( -/obj/structure/sign/directions/engineering{ - pixel_x = -32; - pixel_y = -32 +/turf/space, +/area/space) +"Vl" = ( +/obj/structure/closet, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Vm" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/camera/network/engineering{ + dir = 8; + name = "SM Command" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ni" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/smcontrol) +"Vq" = ( +/obj/machinery/merchant_pad, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - pixel_x = 1 +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, /turf/simulated/floor/tiled, +/area/ministation/cargo) +"Vr" = ( +/obj/machinery/atmospherics/valve/digital{ + dir = 4; + name = "Emergency Cooling Valve 1" + }, +/turf/simulated/floor/plating, /area/ministation/engine) -"Nj" = ( +"Vw" = ( +/obj/machinery/camera/network/ministation/sat, +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Vx" = ( +/obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"No" = ( -/obj/machinery/light{ +/turf/simulated/floor/plating, +/area/ministation/engine) +"Vy" = ( +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/camera/network/security{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/tiled, -/area/ministation/security) -"Np" = ( -/obj/structure/cable{ - icon_state = "2-4" +/area/ministation/cargo) +"VA" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat1_airlock_interior" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/machinery/button/access/interior{ + id_tag = "sat1_airlock"; + name = "interior access button"; + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Ns" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"Nt" = ( -/obj/structure/flora/pottedplant/smalltree, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Nu" = ( -/obj/machinery/airlock_sensor{ - id_tag = "escape2_sensor"; - pixel_y = -20 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape1_vent" +"VC" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 }, /turf/simulated/floor/plating, -/area/ministation/hall/w) -"Nv" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ministation/disused) -"Nw" = ( +/area/ministation/supermatter) +"VF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/court) -"Ny" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 5; - pixel_y = -32 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Nz" = ( -/obj/machinery/suit_cycler, -/turf/simulated/floor, -/area/ministation/atmospherics) -"NA" = ( -/obj/structure/lattice, -/obj/structure/cable{ - icon_state = "1-2" +/area/ministation/hall/s1) +"VH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 }, -/turf/space, -/area/space) -"NC" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/airlock/double/glass/atmos{ + req_access = list("ACCESS_ENGINEERING"); + autoset_access = 0; + dir = 8 }, -/obj/effect/decal/cleanable/filth, /turf/simulated/floor/plating, -/area/ministation/maint/e) -"ND" = ( +/area/ministation/engine) +"VJ" = ( +/obj/machinery/door/airlock/hatch/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"NF" = ( -/obj/machinery/power/sensor{ - id_tag = "station powernet"; - name = "Powernet Sensor - Main Powernet" +/turf/simulated/floor/plating, +/area/ministation/maint/l1ne) +"VK" = ( +/obj/machinery/ai_slipper{ + uses = 10 }, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/turf/simulated/floor/bluegrid, +/area/ministation/ai_core) +"VL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/trash) +"VM" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 + }, +/turf/space, +/area/space) +"VO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/space) +"VP" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"VR" = ( +/obj/machinery/fabricator, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"VT" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"VV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, /turf/simulated/floor/plating, -/area/ministation/maint/sw) -"NH" = ( +/area/ministation/ai_sat) +"VX" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/sign/warning/vent_port{ + dir = 1; + pixel_y = -34 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"VZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/yellow{ dir = 10 }, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"NI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 +/area/ministation/hall/s1) +"Wa" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"NJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Wb" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Wc" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/ore/sand, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, -/area/ministation/eva) -"NK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"NL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/area/ministation/cargo) +"Wd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"NO" = ( -/obj/abstract/level_data_spawner/main_level{ - name = "Outpost Zebra"; -}, -/turf/space, -/area/space) -"NR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/obj/machinery/status_display{ + pixel_y = -32; + dir = 1 }, -/obj/structure/sign/directions/supply{ +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Wj" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine charging port."; + id_tag = "SupermatterPort"; + name = "Reactor Blast Doors"; + pixel_x = -6; + pixel_y = 7; dir = 1; - pixel_x = -32; - pixel_y = 32 + directional_offset = null }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"NT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"NU" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine control room blast doors."; + id_tag = "EngineBlastexterior"; + name = "Engine Bay Blast Doors"; + pixel_y = -3; + pixel_x = 5; dir = 1; - id_tag = "sat2_airlock"; - pixel_y = -24; - tag_airpump = "sat2_vent"; - tag_chamber_sensor = "sat2_sensor"; - tag_exterior_door = "sat2_airlock_exterior"; - tag_interior_door = "sat2_airlock_interior" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "sat2_vent" + directional_offset = null }, -/obj/machinery/airlock_sensor{ - id_tag = "sat2_sensor"; - pixel_y = -20; - pixel_x = -10 +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine control room blast doors."; + id_tag = "EngineBlastinterior"; + name = "Engine Monitoring Room Blast Doors"; + pixel_y = -3; + pixel_x = -6; + dir = 1; + directional_offset = null }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"NW" = ( -/obj/effect/decal/cleanable/dirt{ - dir = 9 +/obj/machinery/button/toggle{ + desc = "A remote control-switch for the engine emitter."; + id_tag = "EngineEmitter"; + name = "Engine Emitter"; + pixel_x = 6; + pixel_y = 7; + dir = 1; + directional_offset = null }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"NX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/smcontrol) +"Wk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Oc" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 +/area/ministation/maint/eastatmos) +"Wn" = ( +/obj/structure/sign/plaque/atmos{ + pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/closet/emcloset, /turf/simulated/floor/tiled, -/area/ministation/bridge) -"Od" = ( -/obj/structure/bed/chair/wood/walnut{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Of" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 +/area/ministation/engine) +"Wr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/camera/network/engineering{ + dir = 8 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Oh" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Oi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/area/ministation/engine) +"Ws" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/vehicle/train/cargo/engine, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Om" = ( -/obj/item/stool, -/obj/machinery/alarm{ - pixel_y = 22 - }, -/turf/simulated/floor/plating, -/area/ministation/library) -"On" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/area/ministation/cargo) +"Wt" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "bulb1" }, -/obj/structure/sign/warning/high_voltage{ - pixel_y = 32 +/obj/structure/mirror{ + pixel_y = 29 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/hygiene/sink{ + pixel_y = 23 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Oo" = ( -/turf/simulated/wall{ - can_open = 1 +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" }, -/area/ministation/maint/w) -"Oq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/double/glass/security{ - id_tag = "secdoor"; - name = "security outer airlock" +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Or" = ( -/obj/random/trash, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Os" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/structure/window/reinforced/tinted{ + dir = 1 }, -/turf/simulated/wall, -/area/ministation/hall/w) -"Ou" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" }, -/obj/structure/sign/department/security/alt{ - pixel_y = 32 +/obj/machinery/atmospherics/unary/vent_pump/on{ + level = 2 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Ov" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/light, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Ow" = ( -/obj/machinery/camera/network/mining{ - dir = 1 +/obj/item/hemostat, +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"Wv" = ( +/obj/item/toy/ringbell, +/obj/structure/table/steel, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Wx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 }, -/turf/simulated/floor/airless, -/area/space) -"Ox" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "_East APC"; - pixel_x = 27; - pixel_y = 2 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"Wy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/structure/cable, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"OB" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-2" +/area/ministation/maint/eastatmos) +"Wz" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 1 }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/turf/space, +/area/space) +"WB" = ( +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"WE" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/turf/space, +/area/space) +"WF" = ( +/obj/effect/floor_decal/industrial/custodial{ + dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/disused_office) -"OC" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable{ - icon_state = "1-2" - }, +/area/ministation/trash) +"WJ" = ( +/obj/machinery/recharge_station, /turf/simulated/floor/plating, -/area/ministation/maint/detective) -"OD" = ( +/area/ministation/engine) +"WK" = ( /obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/disused_office) -"OF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor, -/area/ministation/atmospherics) -"OL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"OM" = ( -/obj/item/stool/padded, -/obj/machinery/light/small{ - dir = 4 +/area/ministation/maint/eastatmos) +"WM" = ( +/obj/machinery/door/airlock/double/glass/civilian, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"WO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"WR" = ( +/obj/machinery/conveyor{ + dir = 8; + id_tag = "trash_sort" }, -/obj/abstract/landmark/start{ - name = "Librarian" +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"OO" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sat3_airlock_exterior" +/turf/simulated/floor/plating, +/area/ministation/trash) +"WS" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/machinery/button/access/interior{ - id_tag = "sat3_airlock"; - name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; - command = "cycle_exterior" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"OP" = ( +/area/ministation/supermatter) +"WU" = ( +/turf/simulated/floor, +/area/space) +"WW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"OQ" = ( -/obj/machinery/door/airlock/glass/command{ - autoset_access = 0; - name = "Telecommunications relay airlock"; - req_access = list("ACCESS_TELECOMS") +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/eastatmos) +"WY" = ( +/obj/item/mollusc/barnacle{ + pixel_x = 20 + }, +/turf/space, +/area/space) +"Xb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/engine) -"OR" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "mining_airlock_exterior" +"Xc" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/button/access/interior{ - id_tag = "cargo_airlock"; - name = "exterior access button"; - pixel_x = -20; - pixel_y = 10; - command = "cycle_exterior" +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 8 }, -/turf/simulated/floor/airless, -/area/ministation/cargo) -"OT" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - locked = 1; - id_tag = "escape1_airlock_interior" +/turf/simulated/floor/plating, +/area/space) +"Xf" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + icon_state = "map_injector"; + id_tag = "cooling_in"; + name = "Coolant Injector"; + pixel_y = 1; + power_rating = 30000; + use_power = 1; + volume_rate = 700 + }, +/turf/simulated/floor/reinforced/airless, +/area/ministation/supermatter) +"Xg" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/turf/simulated/floor/tiled, +/area/ministation/hall/n) +"Xh" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"OU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/green, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Xi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"Xj" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Xk" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"OV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/engine) +"Xm" = ( +/obj/structure/hygiene/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" + }, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" + }, +/obj/structure/window/reinforced/tinted, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/turf/simulated/floor/tiled/freezer, +/area/ministation/dorms) +"Xo" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Xt" = ( +/obj/machinery/turretid{ + control_area = "\improper AI Upload Chamber"; + name = "AI Upload turret control"; + pixel_y = -25; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/ministation/ai_upload) +"Xu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 }, /turf/simulated/floor/tiled, +/area/ministation/cargo) +"Xx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, /area/ministation/hall/n) -"OW" = ( +"Xz" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/directions/evac{ - dir = 8; - pixel_x = -32; - pixel_y = 25 - }, -/obj/structure/sign/directions/supply{ - dir = 1; - pixel_x = -32; - pixel_y = 32 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"OX" = ( -/obj/machinery/door/airlock/external{ +/area/ministation/engine) +"XA" = ( +/obj/machinery/door/airlock/external/glass{ autoset_access = 0; - id_tag = "atmos_airlock_interior"; - locked = 1 + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "westatmos_airlock_interior" }, /obj/machinery/button/access/interior{ - id_tag = "atmos_airlock"; + id_tag = "westatmos_airlock"; name = "interior access button"; pixel_x = 20; - pixel_y = 10 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/ministation/atmospherics) -"OY" = ( -/obj/machinery/camera/network/medbay{ - dir = 1 +/turf/simulated/floor/plating, +/area/ministation/maint/westatmos) +"XB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/ai_upload) +"XC" = ( +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/ministation/medical) -"Pa" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/machinery/emitter, +/turf/simulated/floor/plating, +/area/ministation/engine) +"XE" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Pd" = ( -/obj/structure/cable{ - icon_state = "4-8" +/area/ministation/supermatter) +"XF" = ( +/obj/machinery/drone_fabricator/construction, +/turf/simulated/floor/plating, +/area/ministation/engine) +"XI" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"Pe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 +/obj/structure/lattice, +/turf/space, +/area/space) +"XK" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Pg" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Pi" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/space) +"XL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/pool, +/area/ministation/dorms) +"XO" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall, +/area/ministation/engine) +"XQ" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"XR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 + icon_state = "4-8" }, -/obj/machinery/power/apc{ - dir = 8; - name = "_West APC"; - pixel_x = -25 +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"XT" = ( +/obj/machinery/light/small{ + dir = 1 }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/maint/detective) -"Pj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/area/ministation/ai_sat) +"XU" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Pk" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/folder/blue, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Pl" = ( -/obj/structure/sign/warning/airlock{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"XV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/cargo) -"Po" = ( -/obj/machinery/photocopier, -/obj/item/radio/intercom{ - dir = 8; - pixel_x = 20 +"XW" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"XZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/item/stool/padded, /turf/simulated/floor/tiled, -/area/ministation/court) -"Pp" = ( -/turf/space, -/area/ministation/supply_dock) -"Pr" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - locked = 1; - id_tag = "pfm_airlock_exterior" +/area/ministation/cargo) +"Yi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/button/access/interior{ - id_tag = "pfm_airlock"; - name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; - command = "cycle_exterior" +/obj/machinery/light/small{ + dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/maint/nw) -"Pu" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 +/area/ministation/maint/westatmos) +"Ym" = ( +/turf/simulated/floor/tiled, +/area/ministation/eva) +"Yr" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 }, +/obj/structure/lattice, +/turf/space, +/area/space) +"Ys" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/floor/plating, -/area/ministation/disused) -"Px" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/folder/red, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/area/ministation/engine) +"Yt" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Py" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "port_engineering_vent" }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Yu" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, /turf/simulated/floor/tiled, /area/ministation/engine) -"PA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +"Yv" = ( +/obj/structure/railing/mapped{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"PB" = ( -/obj/structure/table/woodentable, -/obj/machinery/fabricator/book, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"PC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Yx" = ( +/obj/effect/floor_decal/industrial/custodial{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"PD" = ( -/turf/simulated/wall/r_wall, -/area/ministation/atmospherics) -"PE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/turf/simulated/floor/plating, +/area/ministation/trash) +"Yy" = ( +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"PF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"PH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/effect/floor_decal/corner/blue/diagonal{ + dir = 4 }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"PI" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/ministation/atmospherics) +"Yz" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"YA" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/detective) -"PK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"YC" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/ministation/engine) -"PM" = ( +"YD" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ - dir = 5 +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"YE" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/plating, +/area/ministation/supermatter) +"YF" = ( +/obj/structure/cable{ + icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-8" }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"PN" = ( -/obj/machinery/door/airlock/external/glass{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"YG" = ( +/obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); locked = 1; - id_tag = "escape1_airlock_exterior" - }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"PP" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/item/flashlight, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"PR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" + id_tag = "sat3_airlock_interior" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/button/access/interior{ + id_tag = "sat3_airlock"; + name = "interior access button"; + pixel_y = 24 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"PT" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"YJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" }, -/turf/simulated/floor/carpet/red, -/area/ministation/court) -"PV" = ( +/turf/simulated/floor/plating, +/area/ministation/engine) +"YK" = ( /obj/structure/table, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/obj/item/modular_computer/tablet/preset/custom_loadout/cheap, -/obj/item/mollusc/clam, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"PX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 +/obj/item/pen, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, +/obj/item/janicart_key, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"PY" = ( -/obj/machinery/airlock_sensor{ - id_tag = "escape1_sensor"; - pixel_y = -20 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape1_vent" - }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"Qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ +/area/ministation/janitor) +"YM" = ( +/obj/effect/floor_decal/corner/blue, +/obj/effect/floor_decal/corner/yellow{ dir = 4 }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Qh" = ( -/obj/structure/bed/chair/wood/walnut{ - dir = 4 +/obj/machinery/atmospherics/binary/passive_gate/on{ + dir = 1; + name = "Air to Supply" }, -/obj/machinery/light{ - dir = 1 +/obj/machinery/camera/network/engineering{ + dir = 8; + name = "Atmospherics" }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Qi" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"YN" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 }, /turf/simulated/floor/plating, -/area/ministation/disused) -"Qk" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, +/area/ministation/supermatter) +"YT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Qm" = ( -/obj/machinery/cryopod/robot, -/obj/machinery/computer/cryopod/robot{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"Qp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/machinery/camera/network/ministation/sat, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"YU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 }, /turf/simulated/floor/plating, -/area/ministation/hall/w) -"Qq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 +/area/ministation/engine) +"YV" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" }, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"Qr" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/abstract/landmark/start{ + name = "Assistant" + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"YW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Qu" = ( +/turf/simulated/floor/tiled, +/area/ministation/engine) +"YY" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/eva) +"Za" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 1 }, /turf/simulated/floor/plating, -/area/ministation/maint/nw) -"Qw" = ( +/area/ministation/supermatter) +"Zd" = ( +/obj/effect/floor_decal/corner/yellow/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Qy" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/engine) +"Ze" = ( +/obj/machinery/door/airlock/external{ + locked = 1; + id_tag = "atmos_airlock_exterior"; + autoset_access = 0 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/button/access/interior{ + id_tag = "atmos_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; dir = 4 }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Qz" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/structure/sign/department/botany, -/turf/simulated/floor/tiled, -/area/ministation/hydro) -"QA" = ( -/obj/machinery/atmospherics/portables_connector{ +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Zf" = ( +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"QB" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"QC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor, -/area/ministation/atmospherics) -"QD" = ( -/obj/structure/table/woodentable, -/obj/item/book/printable_red, -/obj/item/pen, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"QF" = ( -/obj/machinery/camera/network/medbay{ - dir = 4 +/obj/abstract/landmark/start{ + name = "Assistant" }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"QG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"QI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/item/stool/padded, +/turf/simulated/floor/carpet/green, +/area/ministation/dorms) +"Zg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/network/ministation/sat{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"QJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"QL" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor, -/obj/machinery/door/blast/shutters/open{ - id_tag = "secshut"; - name = "security shutter" +/obj/machinery/camera/autoname, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"Zh" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/turf/simulated/floor/plating, -/area/ministation/security) -"QN" = ( -/obj/structure/sign/department/id_office{ - dir = 1; - pixel_y = -32 +/obj/machinery/power/terminal{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"QO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"QP" = ( -/obj/machinery/door/firedoor, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/smcontrol) +"Zi" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/server_room, -/turf/simulated/floor/plating, -/area/ministation/science) -"QQ" = ( -/obj/structure/table/woodentable, -/obj/random/cash, -/obj/item/deck/cards, +/obj/machinery/door/blast/regular{ + id_tag = "EngineBlastexterior" + }, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"QR" = ( +/area/ministation/supermatter) +"Zk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -15895,2329 +12361,158 @@ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/security) -"QS" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/area/ministation/cargo) +"Zn" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"QU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"QV" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/item/clothing/accessory/toggleable/checkered_jacket, -/obj/item/storage/box/lights, -/obj/random/suit, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"QW" = ( -/obj/machinery/firealarm, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"QX" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"QY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/area/ministation/engine) +"Zo" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/obj/machinery/light{ - dir = 1 +/obj/effect/floor_decal/corner/blue{ + dir = 10 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ministation/atmospherics) +"Zp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/plating, +/area/ministation/engine) +"Zv" = ( +/obj/structure/ladder, +/turf/simulated/floor, +/area/ministation/maint/eastatmos) +"Zx" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/camera/motion/ministation, +/turf/simulated/floor/tiled/techmaint, +/area/ministation/ai_core) +"Zz" = ( +/obj/structure/closet/boxinggloves, +/turf/simulated/floor/wood/walnut, +/area/ministation/dorms) +"ZA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, -/area/ministation/hall/n) -"QZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Ra" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/area/ministation/cargo) +"ZG" = ( +/obj/machinery/button/blast_door{ + id_tag = "EngineVent"; + name = "3. Reactor Ventillatory Control"; + pixel_x = -24; + pixel_y = 6; dir = 4 }, -/turf/simulated/wall/r_wall, -/area/ministation/ai_core) -"Rb" = ( -/obj/machinery/cryopod{ - dir = 1 +/obj/machinery/button/blast_door{ + id_tag = "smsafetydoor"; + name = "1. Vent Safety"; + pixel_x = -24; + pixel_y = -6; + dir = 4 }, -/obj/item/radio/intercom{ - dir = 1; - pixel_y = -32 +/obj/machinery/button/mass_driver{ + pixel_x = -35; + id_tag = "eject"; + name = "4. SM CORE EJECT"; + dir = 4 }, -/obj/abstract/landmark/latejoin/cryo, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"Rd" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/atmospherics/valve/digital{ + dir = 1; + name = "Emergency Cooling Valve 2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ministation/maint/se) -"Re" = ( +/area/ministation/supermatter) +"ZH" = ( /obj/machinery/light_switch{ - pixel_y = 25 + dir = 1; + pixel_y = -23 }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"Rf" = ( -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Librarian's Chamber"; - req_access = list("ACCESS_LIBRARY") - }, -/turf/simulated/floor/plating, -/area/ministation/library) -"Rh" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "cargo_vent" - }, -/obj/machinery/airlock_sensor{ - id_tag = "cargo2_sensor"; - pixel_y = -20 - }, -/turf/simulated/floor/plating, /area/ministation/cargo) -"Ri" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Rj" = ( -/obj/machinery/light{ +"ZJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Rl" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 }, /obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"Rm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 + icon_state = "0-4" }, /turf/simulated/floor/plating, -/area/ministation/disused) -"Rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/area/ministation/maint/westatmos) +"ZK" = ( +/obj/structure/closet/crate/bin/ministation, +/turf/simulated/floor/plating, +/area/ministation/trash) +"ZL" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 + dir = 9 }, /turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Rq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "cargo_vent" - }, -/obj/machinery/airlock_sensor{ - id_tag = "cargo_sensor"; - pixel_y = -20 - }, -/turf/simulated/floor/plating, /area/ministation/cargo) -"Rr" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Rs" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Rt" = ( -/obj/structure/cable{ - icon_state = "1-2" +"ZM" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 }, +/turf/simulated/floor/plating, +/area/ministation/engine) +"ZR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Rv" = ( +/area/ministation/hall/s1) +"ZT" = ( +/obj/machinery/door/airlock/glass/atmos, /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Rw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ministation/cafe) -"Rx" = ( -/turf/simulated/wall, -/area/ministation/court) -"Ry" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"RB" = ( -/obj/effect/decal/cleanable/blood/oil, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"RC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"RD" = ( -/turf/simulated/wall/r_wall, -/area/ministation/cryo) -"RF" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"RG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"RH" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/random/gloves, -/obj/item/clothing/accessory/toggleable/hawaii, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"RI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/turf/simulated/floor/tiled/techfloor, +/area/ministation/atmospherics) +"ZU" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ dir = 8 }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"RJ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external/glass{ - id_tag = "port_engineering_airlock_exterior"; - locked = 1; - autoset_access = 0 - }, -/obj/machinery/button/access/interior{ - id_tag = "port_engineering_airlock"; - name = "exterior access button"; - pixel_x = -10; - pixel_y = 20; - command = "cycle_exterior" - }, /turf/simulated/floor/plating, -/area/ministation/engine) -"RK" = ( +/area/ministation/supermatter) +"ZX" = ( +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"RM" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - pixel_x = 1 - }, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"RN" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/sign/department/chemistry{ - pixel_x = 32; - pixel_y = -5 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/hall/e) -"RO" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"RP" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"RQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"RR" = ( -/obj/item/storage/firstaid/o2, -/obj/structure/closet/secure_closet/atmos_personal, -/obj/item/clothing/mask/breath/emergency, -/obj/item/clothing/suit/space/emergency, -/obj/item/storage/toolbox/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/floor, -/area/ministation/atmospherics) -"RV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +"ZY" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 1; + tag_south = 4; + tag_west = 2; + use_power = 0 }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"RW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /turf/simulated/floor/plating, -/area/ministation/ai_sat) -"RY" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/wall, -/area/ministation/detective) -"RZ" = ( -/obj/structure/sign/department/janitor{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Sa" = ( -/turf/simulated/wall, -/area/ministation/library) -"Sb" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Sd" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/airlock, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"Sf" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Sg" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"Sj" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Sk" = ( -/obj/machinery/camera/network/ministation/sat, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Sm" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Sn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"So" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Sp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Sq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Sr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Ss" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Sv" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Sy" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Sz" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"SA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"SC" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/detective) -"SE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/autoname{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"SF" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/ministation/library) -"SH" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"SI" = ( -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"SN" = ( -/obj/machinery/camera/autoname{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"SO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"SP" = ( -/obj/item/stool/padded, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"SR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"ST" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"SV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"SW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"SX" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - locked = 1; - id_tag = "pfm_airlock_interior" - }, -/obj/machinery/button/access/interior{ - id_tag = "pfm_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"SY" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/ministation/cafe) -"SZ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Ta" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Tb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/janitor) -"Tc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"Td" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Te" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Tg" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Th" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/wall, -/area/ministation/maint/se) -"Ti" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Tj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Tk" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"To" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Tp" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Tq" = ( -/obj/machinery/camera/network/security{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"Ts" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Tv" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "atmos_vent" - }, -/obj/machinery/airlock_sensor{ - id_tag = "atmos_sensor"; - pixel_y = 10; - pixel_x = -20 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "atmos_airlock"; - pixel_y = null; - tag_airpump = "atmos_vent"; - tag_chamber_sensor = "atmos_sensor"; - tag_exterior_door = "atmos_airlock_exterior"; - tag_interior_door = "atmos_airlock_interior"; - dir = 4; - pixel_x = -20 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Ty" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/ministation/atmospherics) -"TC" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"TD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"TF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"TG" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ministation/disused) -"TH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"TI" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"TJ" = ( -/obj/structure/closet/secure_closet/brig, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"TK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"TN" = ( -/obj/item/stool, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"TP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"TQ" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 32 - }, -/obj/machinery/firealarm, -/turf/simulated/floor, -/area/ministation/atmospherics) -"TR" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Atmos APC"; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/ministation/atmospherics) -"TT" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external/glass{ - locked = 1; - id_tag = "stern_engineering_airlock_exterior"; - autoset_access = 0 - }, -/obj/machinery/button/access/interior{ - id_tag = "stern_engineering_airlock"; - name = "exterior access button"; - pixel_x = -20; - pixel_y = -10; - command = "cycle_exterior" - }, -/turf/simulated/floor/plating, -/area/ministation/engine) -"TV" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/security, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"TW" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "sqm_vent"; - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 0; - id_tag = "sqm_airlock"; - pixel_y = 24; - tag_airpump = "sqm_vent"; - tag_chamber_sensor = "sqm_sensor"; - tag_exterior_door = "sqm_airlock_exterior"; - tag_interior_door = "sqm_airlock_interior" - }, -/obj/machinery/airlock_sensor{ - id_tag = "sqm_sensor"; - pixel_y = 20 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"TX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"TY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Uc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Ud" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Ue" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Um" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Un" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"Up" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Uq" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Ut" = ( -/obj/structure/sign/plaque/golden/security{ - pixel_y = 32 - }, -/obj/machinery/vending/security, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Uv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Uw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Ux" = ( -/turf/simulated/floor/plating, -/area/ministation/disused) -"Uz" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "Dock Airlock"; - locked = 1 - }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) -"UA" = ( -/obj/machinery/camera/network/ministation/sat{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"UB" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"UC" = ( -/obj/effect/decal/cleanable/flour, -/turf/simulated/floor/tiled/dark, -/area/ministation/cafe) -"UD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"UG" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/bookcase/skill_books/random, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"UI" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/court) -"UK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/portables_connector{ - pixel_x = -3 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"UL" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"UO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"UQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"UR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/bridge) -"UT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 200; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"UV" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "mining_airlock"; - pixel_y = null; - tag_airpump = "mining_vent"; - tag_chamber_sensor = "mining_sensor"; - tag_exterior_door = "mining_airlock_exterior"; - tag_interior_door = "mining_airlock_interior"; - dir = 4; - pixel_x = -20 - }, -/obj/machinery/airlock_sensor{ - id_tag = "mining_sensor"; - pixel_y = 10; - pixel_x = -20 - }, -/turf/simulated/floor/plating, -/area/ministation/cargo) -"Va" = ( -/obj/structure/bed/chair/wheelchair, -/obj/machinery/camera/network/medbay, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"Vb" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Vc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Vd" = ( -/obj/structure/filing_cabinet, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"Ve" = ( -/obj/abstract/landmark/start{ - name = "Station Engineer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Vf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Vi" = ( -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/abstract/landmark/start{ - name = "Librarian" - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Vj" = ( -/obj/structure/closet/secure_closet/lawyer, -/turf/simulated/floor/tiled, -/area/ministation/court) -"Vl" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"Vn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"Vp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Vq" = ( -/obj/structure/bookcase/skill_books/random, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Vs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Vt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Vu" = ( -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/plating, -/area/ministation/library) -"Vv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/bed/chair/comfy/captain{ - dir = 8 - }, -/obj/machinery/camera/network/security{ - dir = 8 - }, -/turf/simulated/floor/carpet/red, -/area/ministation/court) -"Vw" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Vx" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"Vy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Vz" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"VA" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sat1_airlock_interior" - }, -/obj/machinery/button/access/interior{ - id_tag = "sat1_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"VD" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/disused) -"VF" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/disused) -"VG" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/airlock, -/turf/simulated/floor/plating, -/area/ministation/engine) -"VJ" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"VK" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/bluegrid, -/area/ministation/ai_core) -"VN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"VO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"VQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"VR" = ( -/obj/abstract/landmark/start{ - name = "Assistant" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"VS" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"VU" = ( -/obj/structure/rack, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 - }, -/obj/item/clothing/mask/horsehead, -/obj/item/storage/wallet/random{ - pixel_z = -11 - }, -/obj/item/classic_baton{ - pixel_w = -7 - }, -/turf/simulated/floor/plating, -/area/ministation/security) -"VV" = ( -/obj/structure/lattice, -/turf/simulated/wall, -/area/ministation/maint/ne) -"VW" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"VZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Wb" = ( -/turf/simulated/wall, -/area/ministation/cryo) -"Wc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"Wd" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/ministation/detective) -"Wg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Wi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Wk" = ( -/obj/machinery/door/airlock/glass/atmos, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Wn" = ( -/obj/structure/sign/plaque/atmos{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Wo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Wr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Ws" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"Wt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Wu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Wv" = ( -/turf/simulated/floor/plating, -/area/ministation/maint/detective) -"WB" = ( -/turf/simulated/floor, -/area/ministation/atmospherics) -"WC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"WD" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"WF" = ( -/obj/structure/closet/secure_closet/security, -/turf/simulated/floor/tiled, -/area/ministation/security) -"WG" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"WH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"WL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"WN" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"WO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"WP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"WQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/sign/directions/science{ - dir = 4; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"WS" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/tiled, -/area/ministation/disused) -"WT" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/random_multi/single_item/captains_spare_id, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"WU" = ( -/turf/simulated/floor, -/area/space) -"WV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"WW" = ( -/obj/abstract/landmark/start{ - name = "Robot" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"WY" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"WZ" = ( -/obj/machinery/light/small, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"Xd" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/item/handcuffs, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Xe" = ( -/obj/structure/bed/chair/wood/walnut{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Xi" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/red, -/area/ministation/court) -"Xj" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Xk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Xl" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall, -/area/ministation/cryo) -"Xo" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Xp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Xr" = ( -/obj/abstract/landmark{ - name = "bluespace_a" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/sign/warning/armory{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Xs" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"Xt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"Xu" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/sign/warning/airlock, -/turf/simulated/floor/plating, -/area/ministation/cargo) -"Xw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"Xx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"XA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/medical) -"XD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"XE" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/airlock_sensor{ - id_tag = "starboard_engineering_sensor"; - pixel_y = 20 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "starboard_engineering_airlock"; - pixel_y = 24; - tag_airpump = "starboard_engineering_vent"; - tag_chamber_sensor = "starboard_engineering_sensor"; - tag_exterior_door = "starboard_engineering_airlock_exterior"; - tag_interior_door = "starboard_engineering_airlock_interior" - }, -/turf/simulated/floor/plating, -/area/ministation/engine) -"XF" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"XJ" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/random/suit, -/obj/random/gloves, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"XL" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/plating, -/area/ministation/bridge) -"XM" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ministation/court) -"XO" = ( -/obj/structure/lattice, -/turf/simulated/wall, -/area/ministation/atmospherics) -"XQ" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/random/gloves, -/obj/random/suit, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"XR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"XS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"XT" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"XV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"XX" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/table/steel, -/obj/item/wrench, -/obj/item/stack/tape_roll/barricade_tape/atmos, -/turf/simulated/floor, -/area/ministation/atmospherics) -"XY" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters/open{ - id_tag = "secshut"; - name = "security shutter" - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/ministation/security) -"XZ" = ( -/obj/machinery/door/airlock/glass/medical{ - autoset_access = 0; - name = "Cryogenics airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/ministation/cryo) -"Yb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Yc" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "_North APC"; - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"Yg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/w) -"Yh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Yi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Yj" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/nw) -"Ym" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Yo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/e) -"Yp" = ( -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Yq" = ( -/turf/simulated/wall{ - can_open = 1 - }, -/area/ministation/maint/ne) -"Yt" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "port_engineering_vent" - }, -/turf/simulated/floor/plating, -/area/ministation/engine) -"Yv" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_x = 32; - pixel_y = 25 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_x = 32; - pixel_y = 32 - }, -/obj/structure/sign/directions/science{ - dir = 1; - pixel_x = 32; - pixel_y = 40 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Yx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"YA" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"YB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"YF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ministation/eva) -"YG" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL"); - locked = 1; - id_tag = "sat3_airlock_interior" - }, -/obj/machinery/button/access/interior{ - id_tag = "sat3_airlock"; - name = "interior access button"; - pixel_x = 10; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"YH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"YI" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"YK" = ( -/obj/item/radio/intercom{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"YM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"YP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/computer/modular/preset/civilian{ - dir = 1 - }, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"YQ" = ( -/obj/structure/closet/lawcloset, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"YS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"YT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/camera/network/ministation/sat, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) -"YW" = ( -/turf/simulated/wall, -/area/ministation/disused) -"YY" = ( -/obj/structure/closet/wardrobe/lawyer_black, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/court) -"YZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"Za" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Zb" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/space, -/area/ministation/hall/w) -"Ze" = ( -/obj/machinery/door/airlock/external{ - locked = 1; - id_tag = "atmos_airlock_exterior"; - autoset_access = 0 - }, -/obj/machinery/button/access/interior{ - id_tag = "atmos_airlock"; - name = "exterior access button"; - pixel_x = -20; - pixel_y = -10; - command = "cycle_exterior" - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"Zf" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating, -/area/ministation/maint/w) -"Zh" = ( -/obj/machinery/network/relay, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Zj" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Zk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"Zl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ministation/disused_office) -"Zm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/hop) -"Zo" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 0; - id_tag = "pqm_airlock"; - pixel_y = 24; - tag_airpump = "pqm_vent"; - tag_chamber_sensor = "pqm_sensor"; - tag_exterior_door = "pqm_airlock_exterior"; - tag_interior_door = "pqm_airlock_interior" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "pqm_vent" - }, -/obj/machinery/airlock_sensor{ - id_tag = "pqm_sensor"; - pixel_y = 20 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/sw) -"Zr" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/ne) -"Zs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/ministation/disused) -"Zt" = ( -/obj/structure/bed/chair/wood/walnut{ - dir = 4 - }, -/obj/machinery/firealarm{ - pixel_y = 25 - }, -/turf/simulated/floor/wood/yew, -/area/ministation/court) -"Zv" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"Zx" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/camera/motion/ministation, -/turf/simulated/floor/tiled/techmaint, -/area/ministation/ai_core) -"Zz" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"ZA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"ZB" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/item/clothing/suit/storage/toggle/labcoat, -/turf/simulated/floor/plating, -/area/ministation/maint/e) -"ZD" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"ZE" = ( -/obj/abstract/landmark/start{ - name = "Assistant" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"ZH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/ministation/maint/se) -"ZI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"ZK" = ( -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/ministation/cryo) -"ZL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ministation/cargo) -"ZN" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/n) -"ZO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor, -/area/ministation/atmospherics) -"ZP" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/ministation/court) -"ZQ" = ( -/obj/abstract/landmark/start{ - name = "Assistant" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ministation/commons) -"ZR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) -"ZT" = ( -/obj/machinery/camera/network/research{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ministation/science) -"ZV" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/carpet/green, -/area/ministation/disused_office) -"ZW" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/wood/mahogany, -/area/ministation/library) -"ZZ" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/bell, -/turf/simulated/floor/carpet/red, -/area/ministation/court) +/area/ministation/supermatter) (1,1,1) = {" aa @@ -18476,7 +12771,1292 @@ aa aa aa "} -(2,1,1) = {" +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +NO +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" aa aa aa @@ -18733,7 +14313,7 @@ aa aa aa "} -(3,1,1) = {" +(8,1,1) = {" aa aa aa @@ -18990,7 +14570,7 @@ aa aa aa "} -(4,1,1) = {" +(9,1,1) = {" aa aa aa @@ -19247,7 +14827,8 @@ aa aa aa "} -(5,1,1) = {" +(10,1,1) = {" +aa aa aa aa @@ -19498,13 +15079,12 @@ aa aa aa aa -NO aa aa aa aa "} -(6,1,1) = {" +(11,1,1) = {" aa aa aa @@ -19761,7 +15341,7 @@ aa aa aa "} -(7,1,1) = {" +(12,1,1) = {" aa aa aa @@ -20018,7 +15598,7 @@ aa aa aa "} -(8,1,1) = {" +(13,1,1) = {" aa aa aa @@ -20275,7 +15855,7 @@ aa aa aa "} -(9,1,1) = {" +(14,1,1) = {" aa aa aa @@ -20532,7 +16112,7 @@ aa aa aa "} -(10,1,1) = {" +(15,1,1) = {" aa aa aa @@ -20789,7 +16369,7 @@ aa aa aa "} -(11,1,1) = {" +(16,1,1) = {" aa aa aa @@ -21046,7 +16626,7 @@ aa aa aa "} -(12,1,1) = {" +(17,1,1) = {" aa aa aa @@ -21303,7 +16883,7 @@ aa aa aa "} -(13,1,1) = {" +(18,1,1) = {" aa aa aa @@ -21560,8 +17140,7 @@ aa aa aa "} -(14,1,1) = {" -aa +(19,1,1) = {" aa aa aa @@ -21618,6 +17197,7 @@ aa aa aa aa +af aa aa aa @@ -21817,7 +17397,7 @@ aa aa aa "} -(15,1,1) = {" +(20,1,1) = {" aa aa aa @@ -22074,7 +17654,7 @@ aa aa aa "} -(16,1,1) = {" +(21,1,1) = {" aa aa aa @@ -22331,7 +17911,7 @@ aa aa aa "} -(17,1,1) = {" +(22,1,1) = {" aa aa aa @@ -22588,7 +18168,7 @@ aa aa aa "} -(18,1,1) = {" +(23,1,1) = {" aa aa aa @@ -22845,7 +18425,8 @@ aa aa aa "} -(19,1,1) = {" +(24,1,1) = {" +aa aa aa aa @@ -22902,7 +18483,6 @@ aa aa aa aa -af aa aa aa @@ -23102,7 +18682,7 @@ aa aa aa "} -(20,1,1) = {" +(25,1,1) = {" aa aa aa @@ -23359,7 +18939,7 @@ aa aa aa "} -(21,1,1) = {" +(26,1,1) = {" aa aa aa @@ -23616,7 +19196,7 @@ aa aa aa "} -(22,1,1) = {" +(27,1,1) = {" aa aa aa @@ -23873,7 +19453,7 @@ aa aa aa "} -(23,1,1) = {" +(28,1,1) = {" aa aa aa @@ -24130,7 +19710,7 @@ aa aa aa "} -(24,1,1) = {" +(29,1,1) = {" aa aa aa @@ -24387,7 +19967,7 @@ aa aa aa "} -(25,1,1) = {" +(30,1,1) = {" aa aa aa @@ -24644,7 +20224,7 @@ aa aa aa "} -(26,1,1) = {" +(31,1,1) = {" aa aa aa @@ -24901,7 +20481,7 @@ aa aa aa "} -(27,1,1) = {" +(32,1,1) = {" aa aa aa @@ -25158,7 +20738,7 @@ aa aa aa "} -(28,1,1) = {" +(33,1,1) = {" aa aa aa @@ -25415,7 +20995,7 @@ aa aa aa "} -(29,1,1) = {" +(34,1,1) = {" aa aa aa @@ -25672,9 +21252,7 @@ aa aa aa "} -(30,1,1) = {" -aa -aa +(35,1,1) = {" aa aa aa @@ -25737,6 +21315,8 @@ aa aa aa aa +af +af aa aa aa @@ -25929,12 +21509,7 @@ aa aa aa "} -(31,1,1) = {" -aa -aa -aa -aa -aa +(36,1,1) = {" aa aa aa @@ -25995,6 +21570,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -26186,12 +21766,7 @@ aa aa aa "} -(32,1,1) = {" -aa -aa -aa -aa -aa +(37,1,1) = {" aa aa aa @@ -26251,6 +21826,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -26443,13 +22023,7 @@ aa aa aa "} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa +(38,1,1) = {" aa aa aa @@ -26509,6 +22083,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -26700,11 +22280,7 @@ aa aa aa "} -(34,1,1) = {" -aa -aa -aa -aa +(39,1,1) = {" aa aa aa @@ -26757,11 +22333,19 @@ aa aa aa aa +af +af aa aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -26952,12 +22536,12 @@ aa aa aa aa +"} +(40,1,1) = {" aa aa aa aa -"} -(35,1,1) = {" aa aa aa @@ -27006,12 +22590,18 @@ aa aa aa aa +af +af aa aa aa aa aa aa +af +af +af +af aa aa aa @@ -27020,8 +22610,6 @@ aa aa aa aa -af -af aa aa aa @@ -27205,6 +22793,8 @@ aa aa aa aa +"} +(41,1,1) = {" aa aa aa @@ -27213,8 +22803,6 @@ aa aa aa aa -"} -(36,1,1) = {" aa aa aa @@ -27270,6 +22858,7 @@ aa aa aa aa +af aa aa aa @@ -27278,8 +22867,6 @@ aa af af af -af -af aa aa aa @@ -27463,6 +23050,11 @@ aa aa aa aa +"} +(42,1,1) = {" +aa +aa +aa aa aa aa @@ -27470,8 +23062,6 @@ aa aa aa aa -"} -(37,1,1) = {" aa aa aa @@ -27531,8 +23121,6 @@ aa aa aa aa -af -af af af af @@ -27719,6 +23307,8 @@ aa aa aa aa +"} +(43,1,1) = {" aa aa aa @@ -27727,8 +23317,6 @@ aa aa aa aa -"} -(38,1,1) = {" aa aa aa @@ -27777,6 +23365,8 @@ aa aa aa aa +af +af aa aa aa @@ -27791,9 +23381,6 @@ aa af af af -af -af -af aa aa aa @@ -27977,6 +23564,8 @@ aa aa aa aa +"} +(44,1,1) = {" aa aa aa @@ -27984,8 +23573,6 @@ aa aa aa aa -"} -(39,1,1) = {" aa aa aa @@ -28035,18 +23622,18 @@ aa aa aa aa +af +af +aa +aa aa aa aa -af -af aa aa aa aa aa -af -af af af af @@ -28234,6 +23821,8 @@ aa aa aa aa +"} +(45,1,1) = {" aa aa aa @@ -28241,8 +23830,6 @@ aa aa aa aa -"} -(40,1,1) = {" aa aa aa @@ -28287,6 +23874,9 @@ aa aa aa aa +af +af +aa aa aa aa @@ -28295,8 +23885,6 @@ aa aa aa aa -af -af aa aa aa @@ -28490,21 +24078,8 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa "} -(41,1,1) = {" -aa -aa -aa -aa -aa +(46,1,1) = {" aa aa aa @@ -28555,15 +24130,19 @@ aa aa aa aa +af +af +af +af aa aa aa aa aa aa +af aa aa -af aa aa aa @@ -28755,8 +24334,9 @@ aa aa aa aa +aa "} -(42,1,1) = {" +(47,1,1) = {" aa aa aa @@ -28807,12 +24387,17 @@ aa aa aa aa +af +af +af aa aa aa aa aa aa +af +af aa aa aa @@ -28828,11 +24413,6 @@ aa aa af af -af -aa -aa -aa -aa aa aa aa @@ -29013,7 +24593,8 @@ aa aa aa "} -(43,1,1) = {" +(48,1,1) = {" +aa aa aa aa @@ -29064,6 +24645,8 @@ aa aa aa aa +af +af aa aa aa @@ -29072,6 +24655,8 @@ aa aa af af +af +af aa aa aa @@ -29085,12 +24670,6 @@ aa aa af af -af -aa -aa -aa -aa -aa aa aa aa @@ -29197,6 +24776,7 @@ aa aa aa aa +ab aa aa aa @@ -29270,9 +24850,7 @@ aa aa aa "} -(44,1,1) = {" -aa -aa +(49,1,1) = {" aa aa aa @@ -29329,12 +24907,19 @@ aa aa af af +af aa +af +af +af +af +af aa aa aa aa -aa +af +af aa aa aa @@ -29346,6 +24931,7 @@ af aa aa aa +ab aa aa aa @@ -29520,17 +25106,14 @@ aa aa aa aa +"} +(50,1,1) = {" aa aa aa aa aa aa -"} -(45,1,1) = {" -aa -aa -aa aa aa aa @@ -29581,21 +25164,23 @@ aa aa af af +af aa +af +af +af +af +af aa aa +af +af +af +af +af aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +af af af af @@ -29778,13 +25363,13 @@ aa aa aa aa +"} +(51,1,1) = {" aa aa aa aa aa -"} -(46,1,1) = {" aa aa aa @@ -29834,18 +25419,37 @@ aa aa aa aa +af +af +af +aa +af +af +af +af +af aa af af af af +af +af +aa aa aa +af +af +af +af aa aa aa aa af +af +af +aa aa aa aa @@ -29853,9 +25457,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -30019,6 +25620,8 @@ aa aa aa aa +"} +(52,1,1) = {" aa aa aa @@ -30040,21 +25643,6 @@ aa aa aa aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -30095,29 +25683,30 @@ aa af af af -aa -aa -aa -aa +af aa aa af af +af +af +af +af aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa +af +af +af +af aa aa af af +af +af +af +af aa aa aa @@ -30288,6 +25877,8 @@ aa aa aa aa +"} +(53,1,1) = {" aa aa aa @@ -30297,9 +25888,6 @@ aa aa aa aa -"} -(48,1,1) = {" -aa aa aa aa @@ -30352,9 +25940,7 @@ aa aa af af -aa -aa -aa +af aa aa aa @@ -30366,13 +25952,16 @@ aa aa aa aa +af +af +af aa aa aa -aa -aa -aa -aa +af +af +af +af af af aa @@ -30481,7 +26070,6 @@ aa aa aa aa -ab aa aa aa @@ -30546,6 +26134,8 @@ aa aa aa aa +"} +(54,1,1) = {" aa aa aa @@ -30554,8 +26144,6 @@ aa aa aa aa -"} -(49,1,1) = {" aa aa aa @@ -30607,14 +26195,12 @@ aa aa aa aa +af +aa aa aa aa -af -af -af aa -af af af af @@ -30623,12 +26209,14 @@ aa aa aa aa +aa af af aa aa aa -aa +af +af af af af @@ -30636,11 +26224,11 @@ af aa aa aa -ab aa aa aa aa +af aa aa aa @@ -30803,6 +26391,9 @@ aa aa aa aa +"} +(55,1,1) = {" +aa aa aa aa @@ -30811,8 +26402,6 @@ aa aa aa aa -"} -(50,1,1) = {" aa aa aa @@ -30867,22 +26456,21 @@ aa aa aa aa -af -af -af aa -af -af -af -af -af aa aa af af af -af -af +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa af @@ -31060,6 +26648,8 @@ aa aa aa aa +"} +(56,1,1) = {" aa aa aa @@ -31068,9 +26658,6 @@ aa aa aa aa -"} -(51,1,1) = {" -aa aa aa aa @@ -31125,33 +26712,25 @@ aa aa aa af -af -af aa -af -af -af -af -af aa -af -af -af -af -af -af aa aa aa -af -af -af -af aa aa aa aa -af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa af af aa @@ -31325,9 +26904,9 @@ aa aa aa aa -"} -(52,1,1) = {" aa +"} +(57,1,1) = {" aa aa aa @@ -31385,10 +26964,6 @@ aa aa aa aa -af -af -af -af aa aa af @@ -31400,18 +26975,8 @@ af aa aa aa -af -af -af -af aa aa -af -af -af -af -af -af aa aa aa @@ -31582,8 +27147,6 @@ aa aa aa aa -"} -(53,1,1) = {" aa aa aa @@ -31599,6 +27162,10 @@ aa aa aa aa +"} +(58,1,1) = {" +aa +aa aa aa aa @@ -31643,12 +27210,21 @@ aa aa aa aa -af -af -af aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af af af af @@ -31657,15 +27233,11 @@ aa aa aa aa -af -af -af aa aa aa -af -af -af +aa +aa af af af @@ -31839,8 +27411,6 @@ aa aa aa aa -"} -(54,1,1) = {" aa aa aa @@ -31849,6 +27419,11 @@ aa aa aa aa +"} +(59,1,1) = {" +aa +aa +aa aa aa aa @@ -31900,7 +27475,6 @@ aa aa aa aa -af aa aa aa @@ -31910,15 +27484,13 @@ af af af af +af +af aa aa aa aa aa -af -af -aa -aa aa af af @@ -31933,8 +27505,6 @@ aa aa aa aa -af -aa aa aa aa @@ -31944,6 +27514,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -32096,8 +27669,6 @@ aa aa aa aa -"} -(55,1,1) = {" aa aa aa @@ -32105,6 +27676,8 @@ aa aa aa aa +"} +(60,1,1) = {" aa aa aa @@ -32167,10 +27740,7 @@ aa af af af -aa -aa -aa -aa +af aa aa aa @@ -32183,6 +27753,9 @@ af af af af +af +af +af aa aa aa @@ -32198,6 +27771,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -32353,12 +27929,13 @@ aa aa aa aa -"} -(56,1,1) = {" aa aa aa aa +"} +(61,1,1) = {" +aa aa aa aa @@ -32416,20 +27993,35 @@ aa aa aa aa -af aa aa +af +af +af +aa aa aa aa aa aa aa +af +af +af +af +af +af +af +af +af aa aa aa aa aa +af +af +af aa aa aa @@ -32438,6 +28030,7 @@ aa aa af af +af aa aa aa @@ -32597,6 +28190,8 @@ aa aa aa aa +"} +(62,1,1) = {" aa aa aa @@ -32610,10 +28205,6 @@ aa aa aa aa -"} -(57,1,1) = {" -aa -aa aa aa aa @@ -32677,13 +28268,26 @@ af af af af +af +af +af +aa +aa aa +af aa +af +af +af +af aa aa aa aa aa +af +af +af aa aa aa @@ -32843,6 +28447,8 @@ aa aa aa aa +"} +(63,1,1) = {" aa aa aa @@ -32867,21 +28473,6 @@ aa aa aa aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -32934,15 +28525,15 @@ af af af af +af +af +af aa aa aa -aa -aa -aa -aa -aa -aa +af +af +af af af af @@ -33113,6 +28704,9 @@ aa aa aa aa +"} +(64,1,1) = {" +aa aa aa aa @@ -33124,8 +28718,6 @@ aa aa aa aa -"} -(59,1,1) = {" aa aa aa @@ -33191,8 +28783,7 @@ af af af af -aa -aa +af aa aa aa @@ -33202,8 +28793,6 @@ af af af af -af -aa aa aa aa @@ -33219,10 +28808,6 @@ aa aa aa aa -af -af -af -aa aa aa aa @@ -33376,13 +28961,13 @@ aa aa aa aa +"} +(65,1,1) = {" aa aa aa aa aa -"} -(60,1,1) = {" aa aa aa @@ -33442,10 +29027,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -33460,13 +29041,15 @@ af af af af -af -aa -aa -aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -33476,9 +29059,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -33639,9 +29219,7 @@ aa aa aa "} -(61,1,1) = {" -aa -aa +(66,1,1) = {" aa aa aa @@ -33702,7 +29280,6 @@ aa aa af af -af aa aa aa @@ -33710,15 +29287,8 @@ aa aa aa aa -af -af -af -af -af -af -af -af -af +aa +aa aa aa aa @@ -33731,8 +29301,9 @@ aa aa aa aa -aa -aa +af +af +af af af af @@ -33751,6 +29322,7 @@ aa aa aa aa +af aa aa aa @@ -33763,6 +29335,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -33895,21 +29470,13 @@ aa aa aa aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa aa aa +"} +(67,1,1) = {" aa aa aa @@ -33971,17 +29538,9 @@ af af af af -af -af -af -af -af -aa aa aa af -aa -af af af af @@ -33990,9 +29549,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -34003,10 +29559,16 @@ aa aa aa aa +af +af +af +af aa aa aa aa +af +af aa aa aa @@ -34030,6 +29592,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -34152,8 +29717,6 @@ aa aa aa aa -"} -(63,1,1) = {" aa aa aa @@ -34169,6 +29732,10 @@ aa aa aa aa +"} +(68,1,1) = {" +aa +aa aa aa aa @@ -34228,20 +29795,12 @@ af af af af -af -af -af -af -af -aa aa aa af af af af -af -af aa aa aa @@ -34259,10 +29818,14 @@ aa aa aa aa +af aa aa aa aa +af +af +af aa aa aa @@ -34286,6 +29849,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -34409,8 +29975,6 @@ aa aa aa aa -"} -(64,1,1) = {" aa aa aa @@ -34425,6 +29989,8 @@ aa aa aa aa +"} +(69,1,1) = {" aa aa aa @@ -34486,11 +30052,6 @@ af af af af -af -af -af -aa -aa aa aa af @@ -34506,6 +30067,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -34514,6 +30078,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -34666,15 +30236,6 @@ aa aa aa aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -34685,6 +30246,8 @@ aa aa aa aa +"} +(70,1,1) = {" aa aa aa @@ -34741,16 +30304,13 @@ aa aa af af -af +aa af af af af aa aa -aa -af -af af af af @@ -34759,6 +30319,14 @@ aa aa aa aa +ab +aa +aa +aa +af +af +af +af aa aa aa @@ -34767,6 +30335,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -34923,14 +30497,14 @@ aa aa aa aa -"} -(66,1,1) = {" aa aa aa aa aa aa +"} +(71,1,1) = {" aa aa aa @@ -34985,6 +30559,14 @@ aa aa af af +af +af +af +af +af +af +aa +aa aa aa aa @@ -35006,6 +30588,10 @@ aa aa aa aa +aa +aa +aa +aa af af af @@ -35014,6 +30600,7 @@ af af aa aa +ab aa aa aa @@ -35027,10 +30614,6 @@ aa aa aa aa -af -aa -aa -aa aa aa aa @@ -35040,9 +30623,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -35181,12 +30761,7 @@ aa aa aa "} -(67,1,1) = {" -aa -aa -aa -aa -aa +(72,1,1) = {" aa aa aa @@ -35243,8 +30818,6 @@ af af af af -aa -aa af af af @@ -35259,6 +30832,7 @@ aa aa aa aa +af aa aa aa @@ -35267,17 +30841,17 @@ aa af af af -af aa aa aa aa -af -af aa aa aa aa +af +af +af aa aa aa @@ -35297,9 +30871,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -35326,6 +30897,8 @@ aa aa aa aa +ab +aa aa aa aa @@ -35437,8 +31010,6 @@ aa aa aa aa -"} -(68,1,1) = {" aa aa aa @@ -35446,6 +31017,9 @@ aa aa aa aa +"} +(73,1,1) = {" +aa aa aa aa @@ -35500,8 +31074,6 @@ af af af af -aa -aa af af af @@ -35516,21 +31088,25 @@ aa aa aa aa +af +af +af aa aa aa aa aa +af +aa +aa +aa +aa aa aa -af aa aa aa aa -af -af -af aa aa aa @@ -35554,9 +31130,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -35694,8 +31267,6 @@ aa aa aa aa -"} -(69,1,1) = {" aa aa aa @@ -35703,6 +31274,8 @@ aa aa aa aa +"} +(74,1,1) = {" aa aa aa @@ -35742,6 +31315,7 @@ aa aa aa aa +af aa aa aa @@ -35757,9 +31331,6 @@ af af af af -aa -aa -af af af af @@ -35772,6 +31343,9 @@ aa aa aa aa +aa +af +af af af af @@ -35785,10 +31359,6 @@ aa aa af af -af -af -af -af aa aa aa @@ -35807,6 +31377,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -35951,8 +31524,6 @@ aa aa aa aa -"} -(70,1,1) = {" aa aa aa @@ -35960,6 +31531,8 @@ aa aa aa aa +"} +(75,1,1) = {" aa aa aa @@ -35999,6 +31572,9 @@ aa aa aa aa +af +aa +aa aa aa aa @@ -36007,15 +31583,11 @@ aa aa aa aa -af -af aa af af af af -aa -aa af af af @@ -36024,7 +31596,8 @@ aa aa aa aa -ab +aa +aa aa aa aa @@ -36032,6 +31605,7 @@ af af af af +af aa aa aa @@ -36039,10 +31613,6 @@ aa aa aa aa -aa -af -af -af af af af @@ -36050,13 +31620,23 @@ aa aa aa aa +af +af +af +af +af +af +af aa aa aa aa -aa -aa -aa +af +af +af +af +af +af aa aa aa @@ -36209,7 +31789,7 @@ aa aa aa "} -(71,1,1) = {" +(76,1,1) = {" aa aa aa @@ -36267,9 +31847,6 @@ af af af af -af -af -af aa aa aa @@ -36281,6 +31858,12 @@ aa aa aa aa +af +af +af +af +af +aa aa aa aa @@ -36289,14 +31872,23 @@ aa af af af +af +af aa aa aa +af +af +af +af +af +af +af aa aa aa aa -aa +af af af af @@ -36305,7 +31897,6 @@ af af aa aa -ab aa aa aa @@ -36454,6 +32045,9 @@ aa aa aa aa +"} +(77,1,1) = {" +aa aa aa aa @@ -36465,8 +32059,6 @@ aa aa aa aa -"} -(72,1,1) = {" aa aa aa @@ -36509,6 +32101,11 @@ aa aa aa aa +af +af +aa +aa +aa aa aa aa @@ -36519,11 +32116,6 @@ aa aa aa aa -af -af -af -af -af af af af @@ -36534,10 +32126,19 @@ aa aa aa aa +af +af +af +af +aa aa aa aa af +af +af +af +af aa aa aa @@ -36546,6 +32147,11 @@ aa af af af +af +af +af +af +af aa aa aa @@ -36554,9 +32160,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -36602,7 +32205,6 @@ aa aa aa aa -ab aa aa aa @@ -36700,6 +32302,8 @@ aa aa aa aa +"} +(78,1,1) = {" aa aa aa @@ -36722,8 +32326,6 @@ aa aa aa aa -"} -(73,1,1) = {" aa aa aa @@ -36777,31 +32379,37 @@ aa aa af af +aa +aa +aa +aa af af af af af -af -aa -aa -aa -aa -aa -aa -aa aa aa aa af af af +af +af aa aa aa aa aa af +af +af +af +af +af +af +af +af aa aa aa @@ -36951,6 +32559,8 @@ aa aa aa aa +"} +(79,1,1) = {" aa aa aa @@ -36979,9 +32589,6 @@ aa aa aa aa -"} -(74,1,1) = {" -aa aa aa aa @@ -37020,7 +32627,6 @@ aa aa aa aa -af aa aa aa @@ -37028,6 +32634,8 @@ aa aa aa aa +af +af aa aa aa @@ -37037,7 +32645,9 @@ af af af af -af +aa +aa +aa af af aa @@ -37048,20 +32658,13 @@ aa aa aa aa -aa af af af af af -aa -aa -aa -aa -aa -aa -aa -aa +af +af af af aa @@ -37082,12 +32685,6 @@ aa aa aa aa -af -af -af -aa -aa -aa aa aa aa @@ -37125,6 +32722,7 @@ aa aa aa aa +ab aa aa aa @@ -37218,6 +32816,8 @@ aa aa aa aa +"} +(80,1,1) = {" aa aa aa @@ -37236,8 +32836,6 @@ aa aa aa aa -"} -(75,1,1) = {" aa aa aa @@ -37278,6 +32876,11 @@ aa aa aa af +af +af +af +af +af aa aa aa @@ -37288,26 +32891,14 @@ aa aa aa aa -aa -af -af af af af -af -af -af -aa aa aa aa aa aa -aa -aa -aa -af -af af af af @@ -37318,9 +32909,9 @@ aa aa aa aa -af -af -af +aa +aa +aa aa aa aa @@ -37336,12 +32927,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -37488,13 +33073,14 @@ aa aa aa aa +"} +(81,1,1) = {" +aa aa aa aa aa aa -"} -(76,1,1) = {" aa aa aa @@ -37562,9 +33148,6 @@ aa aa aa aa -aa -af -af af af af @@ -37574,21 +33157,18 @@ aa aa aa aa -af -af -af -af -af aa aa aa -af -af -af -af -af -af -af +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -37751,7 +33331,7 @@ aa aa aa "} -(77,1,1) = {" +(82,1,1) = {" aa aa aa @@ -37806,12 +33386,16 @@ aa aa aa aa -af -af aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -37822,8 +33406,6 @@ aa aa aa af -af -af aa aa aa @@ -37831,16 +33413,13 @@ aa aa aa aa -af -af -af -af aa aa aa aa -af -af +aa +aa +aa af af af @@ -37849,14 +33428,6 @@ aa aa aa aa -af -af -af -af -af -af -af -af aa aa aa @@ -38007,8 +33578,6 @@ aa aa aa aa -"} -(78,1,1) = {" aa aa aa @@ -38018,6 +33587,9 @@ aa aa aa aa +"} +(83,1,1) = {" +aa aa aa aa @@ -38061,6 +33633,8 @@ aa aa aa aa +af +af aa aa aa @@ -38073,6 +33647,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -38083,24 +33663,15 @@ aa aa aa af -af aa aa aa aa -af -af -af -af -af aa aa aa -af -af -af -af -af +aa +aa aa aa aa @@ -38110,11 +33681,20 @@ af af af af -af -af -af -af -af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -38265,7 +33845,10 @@ aa aa aa "} -(79,1,1) = {" +(84,1,1) = {" +aa +aa +aa aa aa aa @@ -38307,6 +33890,8 @@ aa aa aa aa +af +af aa aa aa @@ -38320,6 +33905,12 @@ aa aa aa aa +af +af +af +aa +af +aa aa aa aa @@ -38339,8 +33930,6 @@ aa aa aa aa -af -af aa aa aa @@ -38353,8 +33942,6 @@ af aa aa aa -af -af aa aa aa @@ -38363,19 +33950,13 @@ aa aa aa aa -af -af -af -af -af -af -af -af -af aa aa aa aa +af +af +aa aa aa aa @@ -38426,7 +34007,6 @@ aa aa aa aa -ab aa aa aa @@ -38522,7 +34102,7 @@ aa aa aa "} -(80,1,1) = {" +(85,1,1) = {" aa aa aa @@ -38580,12 +34160,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -38596,17 +34170,11 @@ aa aa aa aa -af -af -af aa aa aa aa aa -af -af -af aa aa aa @@ -38628,7 +34196,6 @@ af af af af -af aa aa aa @@ -38778,8 +34345,6 @@ aa aa aa aa -"} -(81,1,1) = {" aa aa aa @@ -38793,6 +34358,8 @@ aa aa aa aa +"} +(86,1,1) = {" aa aa aa @@ -38838,11 +34405,6 @@ aa aa aa aa -af -af -af -af -af aa aa aa @@ -38853,9 +34415,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -38881,6 +34440,14 @@ aa aa af af +aa +aa +aa +aa +aa +aa +aa +af af af af @@ -39035,8 +34602,6 @@ aa aa aa aa -"} -(82,1,1) = {" aa aa aa @@ -39050,6 +34615,17 @@ aa aa aa aa +"} +(87,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -39095,12 +34671,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -39110,7 +34680,6 @@ aa aa aa aa -af aa aa aa @@ -39126,7 +34695,6 @@ aa aa aa aa -af af af aa @@ -39292,11 +34860,6 @@ aa aa aa aa -"} -(83,1,1) = {" -aa -aa -aa aa aa aa @@ -39309,6 +34872,8 @@ aa aa aa aa +"} +(88,1,1) = {" aa aa aa @@ -39338,8 +34903,6 @@ aa aa aa aa -af -af aa aa aa @@ -39352,12 +34915,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -39367,7 +34924,6 @@ aa aa aa aa -af aa aa aa @@ -39387,6 +34943,7 @@ af af af af +af aa aa aa @@ -39395,12 +34952,18 @@ aa aa aa aa +af +af +af +af aa aa aa aa aa aa +af +af aa aa aa @@ -39441,6 +35004,7 @@ aa aa aa aa +yS aa aa aa @@ -39549,10 +35113,6 @@ aa aa aa aa -"} -(84,1,1) = {" -aa -aa aa aa aa @@ -39569,6 +35129,8 @@ aa aa aa aa +"} +(89,1,1) = {" aa aa aa @@ -39595,8 +35157,6 @@ aa aa aa aa -af -af aa aa aa @@ -39610,11 +35170,7 @@ aa aa aa aa -af -af -af aa -af aa aa aa @@ -39652,6 +35208,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -39806,9 +35367,6 @@ aa aa aa aa -"} -(85,1,1) = {" -aa aa aa aa @@ -39828,6 +35386,8 @@ aa aa aa aa +"} +(90,1,1) = {" aa aa aa @@ -39889,6 +35449,15 @@ aa aa aa aa +af +af +af +af +af +af +af +af +af aa aa aa @@ -39901,7 +35470,7 @@ af af af af -af +aa aa aa aa @@ -39918,7 +35487,6 @@ aa aa aa af -af aa aa aa @@ -39970,6 +35538,18 @@ aa aa aa aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -40064,7 +35644,30 @@ aa aa aa "} -(86,1,1) = {" +(91,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 @@ -40103,6 +35706,30 @@ aa aa aa aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa aa aa aa @@ -40116,6 +35743,14 @@ aa aa aa aa +af +af +aa +aa +aa +aa +aa +aa aa aa aa @@ -40143,8 +35778,6 @@ aa aa aa aa -af -af aa aa aa @@ -40153,12 +35786,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -40207,6 +35834,7 @@ aa aa aa aa +GQ aa aa aa @@ -40272,6 +35900,8 @@ aa aa aa aa +"} +(92,1,1) = {" aa aa aa @@ -40320,8 +35950,6 @@ aa aa aa aa -"} -(87,1,1) = {" aa aa aa @@ -40335,8 +35963,14 @@ aa aa aa aa +af +af aa aa +af +af +af +af aa aa aa @@ -40358,10 +35992,17 @@ aa aa aa aa +af +af +af +af aa aa aa aa +af +af +af aa aa aa @@ -40400,8 +36041,6 @@ aa aa aa aa -af -af aa aa aa @@ -40411,15 +36050,6 @@ aa aa aa aa -af -af -af -af -af -aa -aa -aa -aa aa aa aa @@ -40461,6 +36091,7 @@ aa aa aa aa +GJ aa aa aa @@ -40526,6 +36157,8 @@ aa aa aa aa +"} +(93,1,1) = {" aa aa aa @@ -40577,13 +36210,12 @@ aa aa aa aa -"} -(88,1,1) = {" aa aa aa aa aa +ab aa aa aa @@ -40612,12 +36244,21 @@ aa aa aa aa +af +af aa aa aa +af +af +af +af aa aa aa +af +af +af aa aa aa @@ -40644,11 +36285,6 @@ aa aa aa aa -af -af -af -af -af aa aa aa @@ -40657,10 +36293,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -40668,8 +36300,6 @@ aa aa aa aa -af -af aa aa aa @@ -40711,6 +36341,29 @@ aa aa aa aa +XI +GB +GB +GB +GB +GB +GB +UX +GB +GB +GB +GB +GB +GB +ds +sx +sx +sx +sx +sx +sx +sx +sx aa aa aa @@ -40761,6 +36414,8 @@ aa aa aa aa +"} +(94,1,1) = {" aa aa aa @@ -40834,8 +36489,6 @@ aa aa aa aa -"} -(89,1,1) = {" aa aa aa @@ -40848,11 +36501,21 @@ aa aa aa aa +af +af aa aa +af +af +af +af +af aa aa aa +af +af +af aa aa aa @@ -40901,11 +36564,6 @@ aa aa aa aa -af -af -af -af -af aa aa aa @@ -40913,11 +36571,6 @@ aa aa aa aa -af -af -af -af -af aa aa aa @@ -40945,9 +36598,29 @@ aa aa aa aa +GF +FE +FE +FE +Gh +Gh aa +GH aa +Gh +Gh +FE +FE +FE +VM +tl +xZ +tl +xZ +tl +xZ aa +sx aa aa aa @@ -40967,7 +36640,6 @@ aa aa aa aa -yS aa aa aa @@ -40999,6 +36671,8 @@ aa aa aa aa +"} +(95,1,1) = {" aa aa aa @@ -41071,6 +36745,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -41081,18 +36758,23 @@ aa aa aa aa +af +af aa aa aa +af +af +af +af aa aa aa +af aa aa aa aa -"} -(90,1,1) = {" aa aa aa @@ -41109,6 +36791,18 @@ aa aa aa aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac aa aa aa @@ -41154,15 +36848,6 @@ aa aa aa aa -af -af -af -af -af -af -af -af -af aa aa aa @@ -41170,12 +36855,29 @@ aa aa aa aa -af -af -af -af -af +GF +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -41226,6 +36928,8 @@ aa aa aa aa +"} +(96,1,1) = {" aa aa aa @@ -41297,16 +37001,28 @@ aa aa aa aa +af +af +af +af aa aa aa aa +af +af +af aa aa aa +af +af aa aa aa +af +af +af aa aa aa @@ -41319,6 +37035,8 @@ aa aa aa aa +af +af aa aa aa @@ -41330,6 +37048,18 @@ aa aa aa aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -41348,8 +37078,6 @@ aa aa aa aa -"} -(91,1,1) = {" aa aa aa @@ -41384,11 +37112,32 @@ aa aa aa aa +GF +FG +FG +FG +FG +FG aa +Jt aa +FG +FG +FG +FG +FG +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa +ab aa aa aa @@ -41411,14 +37160,6 @@ aa aa aa aa -af -af -af -af -af -af -af -af aa aa aa @@ -41427,10 +37168,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -41448,8 +37185,9 @@ aa aa aa aa +"} +(97,1,1) = {" aa -af aa aa aa @@ -41488,7 +37226,6 @@ aa aa aa aa -jc aa aa aa @@ -41513,16 +37250,25 @@ aa aa aa aa +af +af aa aa aa aa aa aa +af +af +af +af aa aa aa aa +af +af +af aa aa aa @@ -41531,6 +37277,7 @@ aa aa aa aa +af aa aa aa @@ -41545,6 +37292,8 @@ aa aa aa aa +af +af aa aa aa @@ -41555,6 +37304,19 @@ aa aa aa aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -41605,21 +37367,31 @@ aa aa aa aa -"} -(92,1,1) = {" aa aa +GF aa aa +ad aa aa aa +Jt aa aa aa +ad aa aa +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -41668,14 +37440,10 @@ aa aa aa aa -af -af aa aa -af -af -af -af +"} +(98,1,1) = {" aa aa aa @@ -41698,16 +37466,10 @@ aa aa aa aa -af -af -af -af aa aa aa aa -af -af aa aa aa @@ -41753,6 +37515,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -41795,6 +37561,19 @@ aa aa aa aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -41847,9 +37626,29 @@ aa aa aa aa +GF +FE +FE +FE +FE +FE aa +Jt aa +FE +FE +FE +FE +FE +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -41862,8 +37661,6 @@ aa aa aa aa -"} -(93,1,1) = {" aa aa aa @@ -41902,6 +37699,8 @@ aa aa aa aa +"} +(99,1,1) = {" aa aa aa @@ -41920,7 +37719,6 @@ aa aa aa aa -ab aa aa aa @@ -41949,25 +37747,9 @@ aa aa aa aa -af -af -af aa aa aa -af -af -af -af -aa -aa -aa -af -af -af -af -aa -aa aa aa aa @@ -41990,6 +37772,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -42032,6 +37818,19 @@ aa aa aa aa +ad +ad +Pp +Pp +Pp +Pp +LJ +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -42084,7 +37883,29 @@ aa aa aa aa +GF +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -42119,8 +37940,6 @@ aa aa aa aa -"} -(94,1,1) = {" aa aa aa @@ -42137,6 +37956,8 @@ aa aa aa aa +"} +(100,1,1) = {" aa aa aa @@ -42206,33 +38027,18 @@ aa aa aa aa -af -af -af aa aa af af af af -af +aa aa aa aa af af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -42268,6 +38074,20 @@ aa aa aa aa +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -42320,9 +38140,29 @@ aa aa aa aa +GF +FG +FG +FG +FG +FG aa +Jt aa +FG +FG +FG +FG +FG +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -42373,11 +38213,11 @@ aa aa aa aa +"} +(101,1,1) = {" aa aa aa -"} -(95,1,1) = {" aa aa aa @@ -42437,6 +38277,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -42463,22 +38307,12 @@ aa aa aa aa -af -af -af aa aa aa -af -af -af -af aa aa aa -af -af -af aa aa aa @@ -42497,6 +38331,20 @@ aa aa aa aa +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac aa aa aa @@ -42549,17 +38397,29 @@ aa aa aa aa +GF aa aa +ad aa aa aa +Jt aa aa aa +ad aa aa +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -42610,6 +38470,8 @@ aa aa aa aa +"} +(102,1,1) = {" aa aa aa @@ -42633,8 +38495,6 @@ aa aa aa aa -"} -(96,1,1) = {" aa aa aa @@ -42674,6 +38534,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -42685,6 +38550,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -42701,34 +38570,39 @@ aa aa aa aa +af aa aa aa aa aa -af -af -af -af aa aa aa aa -af -af -af aa aa aa aa -af -af aa aa aa -af -af -af +ad +ad +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac +aa aa aa aa @@ -42754,30 +38628,6 @@ aa aa aa aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -la -PN -kZ -ad -ad -ad -la -PN -kZ -PN -la aa aa aa @@ -42804,9 +38654,29 @@ aa aa aa aa +GF +dl +dl +dl +dl +dl aa +Jt aa +dl +dl +dl +dl +dl +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -42817,7 +38687,6 @@ aa aa aa aa -GQ aa aa aa @@ -42858,42 +38727,8 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa +"} +(103,1,1) = {" aa aa aa @@ -42957,16 +38792,17 @@ aa aa af af +af +af +af +af +aa aa aa aa aa aa aa -af -af -af -af aa aa aa @@ -42983,13 +38819,14 @@ aa aa aa aa -af aa aa aa +af aa aa aa +af aa aa aa @@ -42998,10 +38835,6 @@ aa aa aa aa -af -af -aa -aa aa aa aa @@ -43013,38 +38846,19 @@ aa aa ad ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -ac ad -la -PY -kZ ad ad ad -la -Nu -kZ -Bj -la -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ad +au +cy +ie +ie +cy +au +AC +ac aa aa aa @@ -43074,7 +38888,6 @@ aa aa aa aa -GJ aa aa aa @@ -43089,14 +38902,38 @@ aa aa aa aa +WU +CZ +WU aa aa aa -ab aa aa aa +GF +RF +tj +tj +tj +tj +Gw +Jt +GM +YF +YF +YF +YF +NM +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -43148,13 +38985,7 @@ aa aa aa "} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa +(104,1,1) = {" aa aa aa @@ -43207,6 +39038,7 @@ aa aa aa aa +ab aa aa aa @@ -43215,15 +39047,17 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa aa aa -af -af -af -af aa aa aa @@ -43245,6 +39079,7 @@ aa aa aa aa +af aa aa aa @@ -43255,8 +39090,6 @@ aa aa aa aa -af -af aa aa aa @@ -43266,44 +39099,22 @@ aa aa aa aa +WY aa ad ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -ac ad -la -Qp -kZ ad ad ad -la -Qp -kZ -Qp -la -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ad +au +cy +iV +Rh +cy +au +ac aa aa aa @@ -43315,6 +39126,7 @@ aa aa aa aa +ab aa aa aa @@ -43331,8 +39143,8 @@ aa aa aa aa -GJ aa +ab aa aa aa @@ -43345,13 +39157,40 @@ aa aa aa aa +PD +PD +fG +jC +kx +PD +PD aa aa aa aa +GF +ua +ua +ua +ua +ua aa +Jt aa +ua +ua +ua +ua +ua +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -43402,10 +39241,10 @@ aa aa aa aa +"} +(105,1,1) = {" aa aa -"} -(99,1,1) = {" aa aa aa @@ -43466,6 +39305,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -43477,10 +39321,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -43513,6 +39353,25 @@ aa aa aa aa +ad +au +au +au +au +au +au +au +au +au +au +au +au +cy +hP +jU +cy +au +au aa aa aa @@ -43524,33 +39383,6 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -ac -ad -Zb -Qp -kZ -ad -ad -ad -Zb -Qp -kZ -Qp -Zb -ad -ad aa aa aa @@ -43580,29 +39412,42 @@ aa aa aa aa +PD +PD +PD +Ki +kC +QA +ma +ze +PD +PD +PD +PD aa +GF aa -FE -FE -FE -Gh -Gh aa -GH +ad aa -Gh -Gh -FE -FE -FE aa aa +Jt aa aa aa +ad aa aa +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -43653,6 +39498,8 @@ aa aa aa aa +"} +(106,1,1) = {" aa aa aa @@ -43661,8 +39508,6 @@ aa aa aa aa -"} -(100,1,1) = {" aa aa aa @@ -43717,6 +39562,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -43734,16 +39583,10 @@ aa aa aa aa -af -af -af -af aa aa aa aa -af -af aa aa aa @@ -43759,11 +39602,33 @@ aa aa aa aa +af +af aa aa aa aa aa +ad +cb +ck +cy +cM +de +dB +cc +fi +fL +fi +gj +gL +ho +eE +fB +Vy +hQ +fq +au aa aa aa @@ -43781,39 +39646,6 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -LJ -Pp -Pp -Pp -Pp -Pp -kZ -kZ -la -OT -Sd -kZ -la -kZ -la -OT -Sd -OT -la -ad -kZ -la -la -kZ -kZ -kZ -kZ aa aa aa @@ -43837,28 +39669,42 @@ aa aa aa aa +PD +hv +un +fg +ru +Rw +ru +le +bp +sX +bc +PD aa +GF +FE +FE +FE +FE +FE aa -FF -Ga -Ga -Ga -Ga -Gw Jt -GM -GN -GN -GN -GN -GO -aa -aa -aa -aa -aa aa +FE +FE +FE +FE +FE +VM +oC +mT +mT +mT +mT +mT aa +sx aa aa aa @@ -43909,6 +39755,8 @@ aa aa aa aa +"} +(107,1,1) = {" aa aa aa @@ -43918,8 +39766,6 @@ aa aa aa aa -"} -(101,1,1) = {" aa aa aa @@ -43976,16 +39822,13 @@ aa aa aa aa +af aa aa aa aa aa aa -af -af -af -af aa aa aa @@ -43999,9 +39842,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -44019,6 +39859,33 @@ aa aa aa aa +af +af +ad +ad +ad +ad +ad +ad +cn +cn +au +cz +dC +tu +cl +dI +fj +fM +yO +Rm +ZA +SO +dI +Xu +Pe +IH +au aa aa aa @@ -44037,40 +39904,6 @@ aa aa aa aa -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -kZ -lI -mh -Ry -mh -oh -oH -rc -mh -Ry -mh -rW -kZ -ad -kZ -uB -mS -vO -mP -mO -Uz aa aa aa @@ -44093,22 +39926,45 @@ aa aa aa aa +PD +Du +Ab +bN +jM +eR +kq +nw +um +oS +kv +PD aa +GF +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +VM +oC +mT +mT +mT +mT +mT aa +sx aa -FG -FG -FG -FG -FG aa -Jt aa -FG -FG -FG -FG -FG aa aa aa @@ -44156,6 +40012,8 @@ aa aa aa aa +"} +(108,1,1) = {" aa aa aa @@ -44175,8 +40033,6 @@ aa aa aa aa -"} -(102,1,1) = {" aa aa aa @@ -44214,6 +40070,7 @@ aa aa aa aa +af aa aa aa @@ -44239,11 +40096,6 @@ aa aa aa aa -af -af -af -af -af aa aa aa @@ -44255,10 +40107,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -44275,6 +40123,26 @@ aa aa aa aa +ad +cd +cn +cy +cO +dq +dI +dI +eF +fk +fN +gk +fN +Mq +hR +SR +iU +dI +jV +au aa aa aa @@ -44294,40 +40162,6 @@ aa aa aa aa -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -la -lJ -mi -mR -nB -mS -mS -mS -mS -mR -rm -rX -kZ -kZ -kZ -uC -mS -vP -kZ -kZ -kZ aa aa aa @@ -44349,21 +40183,50 @@ aa aa aa aa +PD +Zo +Yy +bO +pi +kN +gE +cG +lt +oS +Sm +PD aa +GF +FG +FG +FG +FG +FG aa +GI aa +FG +FG +FG +FG +FG +zX +nD +tk +nD +tk +nD +mT aa +sx aa aa -ad aa aa aa -Jt aa aa aa -ad aa aa aa @@ -44406,6 +40269,8 @@ aa aa aa aa +"} +(109,1,1) = {" aa aa aa @@ -44432,8 +40297,6 @@ aa aa aa aa -"} -(103,1,1) = {" aa aa aa @@ -44495,12 +40358,6 @@ aa aa aa aa -af -af -af -af -af -af aa aa aa @@ -44512,9 +40369,6 @@ aa aa aa aa -af -af -af aa aa aa @@ -44527,13 +40381,29 @@ aa aa aa aa +cd +Ow +au +cP +dE +eY +dI +ej +fl +fO +gl +fO +fF +hS +fJ +hS +dI +jW +au aa -af aa aa aa -af -af aa aa aa @@ -44550,41 +40420,6 @@ aa aa aa aa -ad -ad -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -la -MG -Rn -Da -Db -PX -PX -PX -PX -rE -rn -Vs -mS -te -mS -mS -nB -nB -mS -xf -la aa aa aa @@ -44605,24 +40440,47 @@ aa aa aa aa +PD +gU +CJ +md +MI +zH +PI +cX +eS +Nc +nR +PD aa +Yr +GB +GB +GB +GB +GB +IR +Xc +WE +GB +GB +GB +GB +GB +GC +GC +GC +GC +GC +Wz +nD aa +sx aa aa aa -FE -FE -FE -FE -FE aa -Jt aa -FE -FE -FE -FE -FE aa aa aa @@ -44668,6 +40526,19 @@ aa aa aa aa +"} +(110,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44689,8 +40560,6 @@ aa aa aa aa -"} -(104,1,1) = {" aa aa aa @@ -44743,7 +40612,6 @@ aa aa aa aa -ab aa aa aa @@ -44752,10 +40620,6 @@ aa aa aa aa -af -af -af -af af af aa @@ -44773,6 +40637,29 @@ aa aa aa aa +ad +ce +cm +cy +cN +dq +dI +dI +dI +fm +Rq +cf +gM +Zk +hT +NI +iW +ZA +jX +au +aa +aa +aa aa aa aa @@ -44785,7 +40672,6 @@ aa aa aa aa -af aa aa aa @@ -44807,55 +40693,46 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -au -ie -cy -cy -ie -au -ad -kZ -lK -mj -mS -Sn -oi -oI -oI -pY -oI -ro -MY -oI -tf -tW -mS -mS -mS -mS -xf -la +DD +DD +DD +DD +PD +NW +pQ +gi +vq +YM +Ls +vk +tD +bb +if +PD aa aa aa aa aa aa +ad +XO +AB +XO +ad aa aa +ad aa aa aa aa aa aa +ad +ad +sx +sx aa aa aa @@ -44867,19 +40744,6 @@ aa aa aa aa -FF -Ga -Ga -Ga -Ga -Gw -Jt -GM -GN -GN -GN -GN -GO aa aa aa @@ -44919,6 +40783,11 @@ aa aa aa aa +"} +(111,1,1) = {" +aa +aa +aa aa aa aa @@ -44946,8 +40815,6 @@ aa aa aa aa -"} -(105,1,1) = {" aa aa aa @@ -45012,9 +40879,6 @@ aa aa af af -af -af -af aa aa aa @@ -45031,6 +40895,28 @@ aa aa aa aa +ce +cn +au +cQ +dq +mW +SO +eF +IO +Bp +Ss +dI +Zk +hp +dI +hp +dI +Wc +au +aa +aa +aa aa aa aa @@ -45064,79 +40950,54 @@ aa aa aa aa +DD +aE +zr +zr +PD +PD +ZT +av +av +av +av +av +av +av +XO +av +av +av +av +av +av ad ad +av +GW +Ma ad ad ad ad -ad -au -Rq -cy -cy -Rh -au -ad -kZ -lL -mk -Wo -QZ -oj -nC -nC -nC -nC -rp -TD -ss -tg -tX -kX -vb -mS -mS -kE -la -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa aa aa aa +ad aa aa aa aa aa -ad aa aa aa aa -FG -FG -FG -FG -FG aa -Jt aa -FG -FG -FG -FG -FG aa aa aa @@ -45179,6 +41040,8 @@ aa aa aa aa +"} +(112,1,1) = {" aa aa aa @@ -45203,8 +41066,6 @@ aa aa aa aa -"} -(106,1,1) = {" aa aa aa @@ -45249,6 +41110,8 @@ aa aa aa aa +af +af aa aa aa @@ -45267,10 +41130,6 @@ aa aa aa aa -af -af -af -af aa aa aa @@ -45293,6 +41152,25 @@ aa aa aa aa +cn +wZ +au +cR +cx +dG +ek +ZA +fn +XZ +ZL +dI +hq +dI +dI +dI +dI +pS +au aa aa aa @@ -45316,46 +41194,6 @@ aa aa aa aa -ad -au -au -au -au -au -au -au -au -au -au -au -au -hP -cy -Xu -jU -au -au -kZ -lM -mS -Vs -Vs -ok -oJ -ph -ea -ea -rq -gA -st -th -tY -uD -vc -mS -mS -xh -la aa aa aa @@ -45365,8 +41203,38 @@ aa aa aa aa +WU +DD +DD +DD +DD +zr +zr +zr +zr +Dv +DE +DT +qA +EJ +Fa +EP +Fs +Dt +wp +Rg +cu +Ei +Dt +rU +av +XO aa +Eo +Yt +gm aa +ad aa aa aa @@ -45374,7 +41242,6 @@ aa aa aa aa -ad aa ad aa @@ -45383,15 +41250,12 @@ aa aa aa aa -ad aa aa aa -Jt aa aa aa -ad aa aa aa @@ -45433,6 +41297,8 @@ aa aa aa aa +"} +(113,1,1) = {" aa aa aa @@ -45460,14 +41326,13 @@ aa aa aa aa -"} -(107,1,1) = {" aa aa aa aa aa aa +ab aa aa aa @@ -45502,6 +41367,8 @@ aa aa aa aa +af +af aa aa aa @@ -45527,7 +41394,6 @@ aa aa aa aa -af aa aa aa @@ -45542,7 +41408,34 @@ aa aa aa aa +ad +cn +au +au +au +au +dH +cf +eF +fo +fP +dI +dI +Zk +zz +lq +Ws +dI +pS +au aa +jh +jh +jh +jh +jh +jh +jh aa aa aa @@ -45565,59 +41458,49 @@ aa aa aa aa -af -af aa aa +WU +lM +nY +bl +XA +re +Qz +oi +xw +DD +av +av +XR +EK +oX +PQ +FH +Dt +Ue +sb +RY +Nu +Dt +Ic +wK +Dt +Eo +Eo +GV +gm +Eo +av aa aa aa -ad -cb -ck -cy -cM -de -dB -cc -eE -fi -fL -gj -gL -ho -fB -IO -Vy -hQ -fq -au -kZ -Os -kZ -Os -Os -ol -Os -Os -kZ -qE -rr -rt -rn -ti -tZ -mS -mS -vQ -kZ -kZ -kZ aa aa aa aa aa +ad aa aa aa @@ -45630,27 +41513,12 @@ aa aa aa aa -ad -cn -ad -ad aa aa aa aa -FE -FE -FE -FE -FE aa -Jt aa -FE -FE -FE -FE -FE aa aa aa @@ -45686,6 +41554,8 @@ aa aa aa aa +"} +(114,1,1) = {" aa aa aa @@ -45717,8 +41587,6 @@ aa aa aa aa -"} -(108,1,1) = {" aa aa aa @@ -45775,7 +41643,6 @@ aa aa aa aa -af aa aa aa @@ -45799,6 +41666,33 @@ aa aa aa aa +cn +OR +UV +cS +cA +Pl +TP +eG +fp +fQ +go +XV +nj +au +au +au +el +au +au +jh +jh +CN +NX +NX +NX +CN +jh aa aa aa @@ -45822,55 +41716,39 @@ aa aa aa aa -af -af -ad -ad -ad -ad -ad -ad -cn -cn -au -cN -cy -dC -cl -dI -fj -fM -yO -mI -mI -SO -gN -cf -Pe -IH -au -lb -Ta -qj -XV -nE -om -oK -pi -kZ -qF -rs -rt -rn -tj -ua -mS -nB -vP -mP -mO -Uz aa +WU +DD +DD +DD +DD +nA +RO +zr +GZ +Am +av +DV +PW +EL +Fb +EB +FI +Dt +Ak +uS +vL +Ph +uL +MC +bj +Dt +Gn +Gx +GX +XU +Hf +av aa aa aa @@ -45887,29 +41765,10 @@ aa aa aa aa -uK -Du -uK -ad aa aa aa aa -FF -Ga -Ga -Ga -Ga -Gw -Jt -GM -GN -GN -GN -GN -GO -aa -aa aa aa aa @@ -45952,6 +41811,8 @@ aa aa aa aa +"} +(115,1,1) = {" aa aa aa @@ -45974,8 +41835,6 @@ aa aa aa aa -"} -(109,1,1) = {" aa aa aa @@ -46034,6 +41893,8 @@ aa aa aa aa +af +af aa aa aa @@ -46062,6 +41923,33 @@ aa aa aa aa +ad +au +au +au +au +au +au +au +au +fu +au +gO +MT +au +NX +NX +NX +NX +CN +NX +NX +NX +jh +jh +jh +NX +jh aa aa aa @@ -46086,85 +41974,52 @@ aa aa aa aa -ad -cd -cn -cy -cO -au -dD -dI -eF -fk -fN -gk -fN -Mq -hR -Mq -iU -SR -jV -au -lc -Ts -mo -SA -Is -it -Sv -pj -kZ -qG -rt -rt -rn -tk -ub -nC -Yb -Yg -kZ -kZ -kZ aa aa +DD +ps +Dv +AM +AW +iz +uK +RO +av +DW +Er +EM +Fc +Fm +FJ +Dt +Dt +rq +oF +oF +Dt +Dt +Dt +Dt +Uc +Um +UT +mV +Ft +av +av +av +av aa aa aa aa aa ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -uK -Zo -uK -ad -ad aa aa aa -FG -FG -FG -FG -FG aa -GI aa -FG -FG -FG -FG -FG aa aa aa @@ -46213,6 +42068,8 @@ aa aa aa aa +"} +(116,1,1) = {" aa aa aa @@ -46231,8 +42088,6 @@ aa aa aa aa -"} -(110,1,1) = {" aa aa aa @@ -46295,6 +42150,8 @@ aa aa aa aa +af +af aa aa aa @@ -46324,10 +42181,46 @@ aa aa aa aa +au +VR +ky +qu +gt +iq +NH +fr +fR +gq +gP +wB +au +NX +jh +MX +MX +jd +MX +MX +MX +jh +Bu +jh +NX +jh +jh +jh +jh +jh +jh +jh +jh +jh +jh +jh +jh +jh aa aa -af -af aa aa aa @@ -46340,48 +42233,43 @@ aa aa aa aa +DD +DD +DD +DD +DD +DD +DD +PH +av +DX +Es +EN +Fd +Fu +FK +bB +zN +Zd +OH +EZ +EZ +EZ +EZ +Gi +Gp +Gy +EZ +Bo +ln +Hs +zg +HI +av aa aa aa aa -cd -Ow -au -cP -cy -dE -dI -ej -fl -fO -gl -fO -Lt -hS -fJ -iV -fF -jW -au -ld -Qr -eq -Wt -lP -dO -oM -pk -kZ -qH -ru -rY -SV -tl -uc -nD -nD -VQ -kZ aa ad aa @@ -46391,20 +42279,11 @@ aa aa aa aa -ad aa aa aa -ad aa -ad aa -uK -uK -uK -gU -uK -ad aa aa aa @@ -46414,9 +42293,6 @@ aa aa aa aa -ad -GJ -ad aa aa aa @@ -46449,6 +42325,8 @@ aa aa aa aa +"} +(117,1,1) = {" aa aa aa @@ -46488,8 +42366,6 @@ aa aa aa aa -"} -(111,1,1) = {" aa aa aa @@ -46562,6 +42438,44 @@ aa aa aa aa +au +Tp +uX +et +au +au +fu +au +au +au +gP +hs +au +NX +jh +Yx +pZ +hf +ZK +uM +do +jh +cw +qd +dw +NX +NX +CN +NX +NX +NX +CN +NX +NX +NX +NX +Tb +jh aa aa aa @@ -46578,16 +42492,43 @@ aa aa aa aa +ad aa aa aa +DD +TX +av +DY +Et +EO +Fe +Fv +jq +Gb +Gf +Gb +Gb +Ae +CS +Gb +Gb +Gj +Gq +Gz +NY +Ha +YA +Ht +HB +HJ +av aa aa -af -af aa aa aa +ad aa aa aa @@ -46600,84 +42541,17 @@ aa aa aa aa -ad -ce -cm -cy -cN -au -dF -dI -dI -fm -dI -cf -gM -Zk -hT -NI -iW -Ba -jX -au -YM -QA -Ne -Wg -WH -QJ -oN -oN -oN -oN -oN -oN -su -tm -ud -oI -vd -vR -kZ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad aa aa -ad aa -ad aa -uK -UK -XJ -NW -DD -ad -ad -ad -ad aa aa aa aa aa -ad -Gm -RJ -Gm -ad aa aa -ad aa aa aa @@ -46708,6 +42582,8 @@ aa aa aa aa +"} +(118,1,1) = {" aa aa aa @@ -46745,8 +42621,6 @@ aa aa aa aa -"} -(112,1,1) = {" aa aa aa @@ -46815,14 +42689,53 @@ aa aa aa aa -af -af aa aa aa aa aa aa +au +rD +dI +wm +au +IK +nb +ft +Vq +au +gP +ht +au +pz +jh +AN +nG +hf +hf +WR +TJ +jh +jh +jh +dF +di +di +ON +di +kZ +kZ +kZ +kZ +kZ +kZ +sV +NX +jh +jh +jh +jh aa aa aa @@ -46836,14 +42749,43 @@ aa aa aa aa +ad aa aa aa +DD +TX +av +DZ +wt +Ez +Ff +Fw +Ad +av +av +av +av +av +av +av +av +av +Zi +Zi +YN +av +Hg +DC +ex +HK +av aa aa aa aa aa +ad aa aa aa @@ -46858,83 +42800,6 @@ aa aa aa aa -ce -cn -au -cQ -cy -mW -SO -eF -fm -ej -Ss -dI -hp -au -au -au -jy -au -au -dj -lQ -mp -mY -nF -PA -oN -pl -pZ -qI -rv -oN -rn -mj -mS -uE -uI -vS -uI -uI -xI -uI -uI -uI -uK -uK -uK -uK -uK -uK -uK -BA -uK -uK -uK -uK -uK -PP -To -NF -av -Dt -Eo -Eo -Eo -Dt -Dt -Dt -ad -ad -ad -Dt -GW -Eo -ad -ad -ad -ad aa aa aa @@ -46974,6 +42839,8 @@ aa aa aa aa +"} +(119,1,1) = {" aa aa aa @@ -47002,10 +42869,9 @@ aa aa aa aa -"} -(113,1,1) = {" aa aa +ab aa aa aa @@ -47037,7 +42903,6 @@ aa aa aa aa -ab aa aa aa @@ -47072,8 +42937,6 @@ aa aa aa aa -af -af aa aa aa @@ -47089,6 +42952,47 @@ aa aa aa aa +au +me +dI +jI +au +Nq +vC +gs +fS +gq +gP +JV +qa +rn +jh +xX +CL +ez +mz +vf +RR +VL +VL +GL +dU +di +di +gQ +Qq +kZ +sy +MN +tr +us +kZ +Rb +TR +wD +CN +xq +jh aa aa aa @@ -47102,94 +43006,59 @@ aa aa aa aa +ad aa aa aa +DD +Yi +av +va +XQ +BY +EY +XQ +Aq +av +eK +eK +ur +eK +Tw +Uh +mn +PM +Yz +Pz +VP +eK +av +SQ +QS +av +av aa aa aa aa +HY +GS +If aa +HY +GS +If aa +HY +GS +If aa aa aa aa -cn -cn -cz -cR -cx -dG -ek -ZA -fn -ZA -ZL -dI -hq -au -iq -iq -jz -jY -Mx -le -lR -mq -mq -mq -Ub -oN -pm -qa -qJ -rw -oN -sv -mj -mS -mQ -uI -vT -wD -xi -xJ -yl -yU -uI -zr -lZ -AD -uK -Bc -vm -Zj -zT -zT -zT -zT -RO -CN -zT -eP -Dv -DE -DT -DC -EJ -Fa -EP -Fs -Dt aa -ad aa -Eo -Yt -Eo aa -ad aa aa aa @@ -47227,6 +43096,8 @@ aa aa aa aa +"} +(120,1,1) = {" aa aa aa @@ -47259,8 +43130,6 @@ aa aa aa aa -"} -(114,1,1) = {" aa aa aa @@ -47340,9 +43209,106 @@ aa aa aa aa +au +wN +ZH +au +au +fv +fv +aq +fv +au +gO +hu +au +NX +jh +eB +rT +WF +hf +gg +lB +MX +MX +jh +On +di +dM +qQ +Xx +kZ +eh +mS +tq +wS +kZ +NX +yp +jh +jh +jh +jh +ad +ad +ad +ad +ad +ad +ms +ms +ms +ms +ms +ad +ad +ad +ad +ad +ad +DD +TX +av +Eb +vY +FS +XQ +XQ +FO +Zi +eK +Gk +hk +zm +zB +eK +eK +Za +Yz +Pz +VP +eK +av +Hu +ST +av +ad +ad +ad +ad aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -47371,82 +43337,7 @@ aa aa aa aa -ad -cn -au -au -au -au -dH -cf -eF -fo -fP -dI -gN -Zk -au -iq -iX -iX -iX -iX -iX -iX -iX -mZ -fG -lP -oN -pn -qb -qK -Tb -rZ -PH -tn -mS -mQ -ve -vU -wE -UB -xK -yV -yV -zq -SH -zt -AE -uK -cB -bl -bl -bl -bl -bl -bl -bl -bl -bl -bl -Am -av -DU -Eq -EK -EZ -Ft -FH -Dt aa -Dt -Eo -VG -GV -Eo -Eo -Dt aa aa aa @@ -47462,6 +43353,8 @@ aa aa aa aa +"} +(121,1,1) = {" aa aa aa @@ -47516,14 +43409,14 @@ aa aa aa aa -"} -(115,1,1) = {" aa aa aa aa aa aa +af +af aa aa aa @@ -47570,8 +43463,47 @@ aa aa aa aa +WY aa aa +au +Df +dI +au +Mx +fw +fw +gu +gQ +Xg +Ia +Lq +di +zJ +jh +RH +bt +qG +BZ +rz +xQ +MX +tB +zY +yD +di +gQ +qQ +gQ +kZ +sz +oI +ts +mS +za +NX +yp +jh aa aa aa @@ -47581,25 +43513,65 @@ aa aa aa aa +ms +cg +Qh +cg +ms aa aa aa aa aa aa +DD +ZJ +av +vI +Ev +EQ +nx +nx +eX +av +AJ +Lr +ZY +Wx +sl +vp +eK +fE +eK +eK +VC +eK +MZ +Da +SF +av aa aa aa aa aa +HY +GT +If +ad +HY +GT +If +ad +HY +GT +If aa aa aa aa aa aa -af -af aa aa aa @@ -47627,83 +43599,7 @@ aa aa aa aa -ad -ad -cn -OR -UV -cS -cA -Pl -TP -eG -fp -fQ -go -dI -Zk -au -Vf -iX -jB -ka -iX -lg -lT -iX -Oo -mq -UQ -oN -po -qc -qL -rx -oN -RZ -nB -mS -mQ -vf -vV -Zm -kB -xJ -yn -yW -uI -zU -za -AF -uK -KI -bl -aG -of -Aa -Ax -sr -AM -AV -Bq -bl -Am -av -DV -DC -EL -Fb -EB -FI -Dt aa -Dt -Gn -Gx -GX -Gb -Hf -Dt aa aa aa @@ -47714,6 +43610,8 @@ aa aa aa aa +"} +(122,1,1) = {" aa aa aa @@ -47773,9 +43671,9 @@ aa aa aa aa -"} -(116,1,1) = {" aa +af +af aa aa aa @@ -47820,19 +43718,111 @@ aa aa aa aa +cr +cr +cr +cr +cr +cr +dI +AV +au +gV +fx +fx +gv +gQ +gQ +gQ +Sj +di +di +di +yL +hf +wJ +hf +Gd +Kz +MX +kM +nk +jY +di +gQ +gQ +wx +kZ +sA +YK +uE +kA +kZ +SV +yp +ms +ms +ms +ms aa aa aa aa aa +ms +ms +cg +Bt +cg +ms +ms aa aa aa aa aa +DD +Dw +fe +AR +av +ER +yz +Fx +Se +av +As +ME +LO +yj +df +vp +YE +jA +qL +eI +QM +dD +av +Hv +MM +av +av +ad +ad +ad aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -47855,8 +43845,6 @@ aa aa aa aa -af -af aa aa aa @@ -47876,94 +43864,12 @@ aa aa aa aa -ah -ah -ah -ah -ah aa aa aa +"} +(123,1,1) = {" aa -ad -ad -au -au -au -au -au -el -au -au -au -au -gO -MT -au -iq -iX -jC -kb -iX -lh -lU -iX -na -nI -lP -BW -oN -oN -qM -oN -oN -sw -mS -mS -uF -vg -vW -wG -xk -uI -uI -uI -uI -uK -TI -TX -uK -Bd -bl -sr -sr -sr -sr -sr -AM -AW -Br -bl -Ec -av -DW -Er -EM -Fc -Fm -FJ -Dt -Dt -Dt -Uc -Um -UT -mV -Ft -Dt -Dt -Dt -Dt aa aa aa @@ -48030,8 +43936,6 @@ aa aa aa aa -"} -(117,1,1) = {" aa aa aa @@ -48071,12 +43975,111 @@ aa aa aa aa +cr +aG +th +BC +bV +cr +dI +Ti +au +eM +uj +fy +gw +uY +uY +uY +TC +di +iu +di +di +di +di +di +di +kf +di +di +di +Ci +di +di +pr +di +kZ +kZ +kZ +FN +kZ +kZ +ms +vg +ms +wM +wM +ms +ms +ms +Pa +Pa +Pa +ms +Aj +Bn +tO +Bn +Ec +ms +ms +ms +ms +ms +ms +uK +qP +DF +Ed +Ew +ES +Fh +Fy +FP +av +av +NB +UJ +eK +Nx +il +il +il +il +il +Qa +Qa +av +ae +HE +HL +Eo aa aa aa aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -48121,6 +44124,8 @@ aa aa aa aa +"} +(124,1,1) = {" aa aa aa @@ -48133,11 +44138,6 @@ aa aa aa aa -ah -aR -br -bG -ah aa aa aa @@ -48146,81 +44146,6 @@ aa aa aa aa -ad -co -cC -cC -au -fr -fR -gq -ej -Zk -au -iq -iX -iX -kc -iX -kc -iX -iX -nb -nJ -kC -BX -pq -mq -iq -lN -mq -LI -mS -QN -uI -uI -vX -wH -wF -xL -uI -yX -AR -AR -RK -YB -yN -Jf -bl -nA -ys -Ab -AL -sr -AM -Bp -AM -bl -Am -av -DX -Es -EN -Fd -Fu -FK -EZ -EZ -Gi -Gp -Gy -EZ -EZ -ln -Hs -zg -HI -Dt aa aa aa @@ -48287,8 +44212,6 @@ aa aa aa aa -"} -(118,1,1) = {" aa aa aa @@ -48309,17 +44232,110 @@ aa aa aa aa +cr +sO +LS +bW +Oy +cr +tW +cr +cr +xr +fz +fz +fz +gR +So +gR +OU +Md +fz +fz +fz +NR +fz +fz +fz +mr +OK +Rs +Rs +sh +Rs +Rs +rQ +Rv +rA +OW +EE +tt +mq +Nh +vV +ug +we +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ZR +uh +uh +uh +Dk +Fg +Dx +DG +Ee +VF +ET +Fi +Fz +FQ +ul +Wa +WS +RU +eK +Pb +NS +Xf +Ui +Ui +zR +eK +eK +Zi +bk +ST +HM +Eo aa aa aa aa aa +GH aa aa aa +GH aa aa aa +GH aa aa aa @@ -48365,6 +44381,8 @@ aa aa aa aa +"} +(125,1,1) = {" aa aa aa @@ -48390,94 +44408,13 @@ aa aa aa aa -aE -aT -bs -bH -ah aa aa -cn -ad aa aa aa aa aa -co -cC -em -au -fs -dI -dI -dI -hs -au -iq -iX -jD -VR -kI -Fl -lV -iX -nc -nK -BV -BY -pq -mq -ng -DJ -sa -oI -tp -mS -uI -vi -kD -wH -wF -xM -uI -yY -zs -Tp -Ao -zW -AH -AS -bl -Bs -Bs -Bs -Bs -sr -tc -tU -sr -bl -GL -av -DY -Et -EO -Fe -Fv -FL -Gb -Gf -Gj -Gq -Gz -Gz -Ha -YA -Ht -HB -HJ -Dt aa aa aa @@ -48544,8 +44481,6 @@ aa aa aa aa -"} -(119,1,1) = {" aa aa aa @@ -48554,13 +44489,110 @@ aa aa aa aa +cr +UG +Ym +pe +CA +ut +AU +kI +Ax +kh +gQ +gQ +Xx +kh +gQ +kh +ij +gQ +gQ +gQ +Xx +gQ +Xx +gQ +Xx +iN +ll +gQ +gQ +Jk +gQ +gQ +iN +po +aV +GU +cD +cD +sc +iE +TH +aV +sC +aV +aV +Rr +aV +aV +aV +Rr +aV +aV +aV +Rr +aV +aV +aV +aV +aV +aV +aV +aV +aV +Sq +sC +aV +sC +aV +VZ +Fi +iB +tg +XQ +Zi +YD +UJ +eK +dV +zR +Ui +Ui +Ui +zR +eK +eK +Zi +bk +ST +QC +Eo +Eo +Eo +av +TZ aa +Jt aa aa aa +Jt aa aa aa +Jt aa aa aa @@ -48576,7 +44608,6 @@ aa aa aa aa -ab aa aa aa @@ -48607,6 +44638,8 @@ aa aa aa aa +"} +(126,1,1) = {" aa aa aa @@ -48647,94 +44680,9 @@ aa aa aa aa -ah -aW -bt -bI -ah -ad -co -Pr -co -ad aa aa aa -co -co -cC -en -au -ft -dI -ej -Ti -ht -au -Sm -iX -jE -kd -CP -kd -lW -iX -nd -nL -on -oR -mq -mq -is -lN -mq -mS -tq -mS -uI -vj -vZ -wJ -xl -uI -uI -yZ -zu -uK -uK -uK -uK -AT -bl -Bv -BD -BP -og -sr -td -tV -uA -bl -Am -av -DZ -En -EL -Ff -Fw -Ad -Dt -Dt -Dt -Eo -Eo -Eo -Dt -Hg -DC -ex -HK -Dt aa aa aa @@ -48798,11 +44746,116 @@ aa aa aa aa +cr +aW +Ym +Ym +Sb +bC +YY +Qk +oE +px +qI +qI +fA +hY +gx +gS +eO +iM +iM +iM +iM +iM +iM +iM +iM +na +ni +OY +uY +LY +uY +OY +eo +po +aV +GU +cD +tv +cD +rf +TH +Rr +jT +Rt +Pg +Rt +Pg +Pg +Pg +Pg +Pg +Pg +Pg +Rt +Pg +Rt +Pg +Rt +Pg +Pg +Pg +Pg +Rt +fX +Dy +Pg +Ef +Pg +EU +Fj +FA +FR +Wb +MW +XE +Jc +OS +dV +zS +Ui +Qv +Ui +SB +eK +Tw +HW +TT +YC +Be +Tl +gW +AK +sf +Oj +UY +Rc +Jt +Jt +Jt +Jt +Jt +Jt +Jt +Jt +GM +GR +yv aa aa aa -"} -(120,1,1) = {" aa aa aa @@ -48842,6 +44895,8 @@ aa aa aa aa +"} +(127,1,1) = {" aa aa aa @@ -48903,110 +44958,18 @@ aa aa aa aa -ah -ah -aX -ah -ah -ah -ad -co -AN -co -ad aa aa aa -co -dg -dJ -eo -au -fu -fS -gs -gP -JV -au -Rs -iX -jF -kd -kJ -kd -lX -iX -ne -nK -oo -Zf -pr -qd -qN -cH -mq -sy -tr -mS -uI -vk -wa -wK -xm -uI -Al -za -zV -An -Ar -AG -uK -AT -bl -Bu -BE -BQ -Bs -Bs -oF -Bs -Bs -bl -Yi -av -va -DC -DC -EY -DC -Aq -Dt -ad -ad aa aa aa -Dt -Dt -DC -QS -Dt -Dt aa aa aa aa -HY -GS -If aa -HY -GS -If aa -HY -GS -If aa aa aa @@ -49024,6 +44987,137 @@ aa aa aa aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cr +RB +Ym +jL +vP +eW +yu +lC +bP +ow +gQ +Xx +gQ +MJ +lp +gQ +lp +gQ +gQ +Xx +gQ +gQ +gQ +Xx +gQ +iN +gQ +gQ +gQ +lp +gQ +gQ +gQ +po +aV +lW +cD +cD +cD +rf +TH +aV +aV +Rr +aV +aV +aV +aV +aV +aV +aV +aV +aV +aV +aV +aV +aV +aV +Rr +aV +aV +aV +aV +Mn +aV +aV +aV +aV +fZ +Fi +SW +PW +XQ +Zi +YD +UJ +eK +dV +zR +Ui +Ui +Ui +zR +eK +fE +Zi +SD +Xz +VX +Ys +Ys +ZM +av +TZ +aa +sT +aa +aa +aa +Jt +aa +aa +aa +Jt +aa +aa +OV +JO +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -49059,7 +45153,7 @@ aa aa aa "} -(121,1,1) = {" +(128,1,1) = {" aa aa aa @@ -49119,9 +45213,8 @@ aa aa aa aa +ab aa -af -af aa aa aa @@ -49159,115 +45252,118 @@ aa aa aa aa -ah -ah -aF -NH -bv -bK -ah -aD -co -SX -co -aa -aa -co -co -co -dh -dK -co -au -er -fv -gt -fv -hu -au -iq -iX -jG -kd -CP -kd -lY -iX -nf -nM -iq -oS -iq -iq -Sy -ry -mq -mS -tq +aa +aa +aa +aa +aa +aa +aa +aa +cr +jz +UI +WO +Rj +cr +cr +QP +cr +Rf +gT +gT +gT +Po +gy +gT +gy +hV +gT +gT +Bq +vK +as +gT +gT +Ao +gT +gT +gT +Qt +gT +Mc +qO +ke +ui +xE +ge +ge +ge +LP +RN +ui +CE +ui +ui +ui +QG +ui +zy +ui +ui +gb ue -uI -uI -uI -uI -uI -uI -yp -zb -zv -uK -uK -uK -uK -AT -bl -xg -Bt -IS -Bs -Cj -CA -By -De -bl -Am -av -Eb -vY -FS -DC -DC -FO +ui +ui +QG +ui +Ib +ui +ui +eZ +ui +ui +AH +ui +ui +Eg +ui +EV +Fi +FB +PK +TK +mb +xj +TB +eK +dV +Di +NV +Ui +Ui +zR +eK +fE +Zi +bk +HC +PW Eo -ad aa aa aa aa -ad -Dt -Hu -ST -Dt -ad -ad -ad -ad aa -HY -GT -If +TM aa -HY -GT -If aa -HY -GT -If aa +GI aa aa aa +GI aa aa aa @@ -49313,10 +45409,10 @@ aa aa aa aa +"} +(129,1,1) = {" aa aa -"} -(122,1,1) = {" aa aa aa @@ -49377,8 +45473,6 @@ aa aa aa aa -af -af aa aa aa @@ -49416,110 +45510,117 @@ aa aa aa aa -ai -am -aI -ba -bw -TH -bU -aD -dW -NT -co -co -co -co -dJ -cD -Yj -Qu -di -fw -fw -fw -gu -gQ -Lq -di -iq -ir -ZE -kd -ZQ -kd -kF -iX -Cb -iq -ng -oL -ps -oL -op -rz -mq -sz -ts -CZ -uJ -vm -wc -YH -wL -wL -wL -zc -zw -zX -Ap -AR -AR -AU -bl -Bw -BE -BR -BZ -Ck -CB -BP -Df -bl -Am -av -vI -Ev -EQ -DC -DC -EB -Dt aa aa aa aa aa -ad +aa +aa +cr +kg +OC +dR +ml +cr +MK +OG +eu +nS +eu +fU +fU +es +fU +fU +zW +zW +zW +zW +zW +zW +di +di +gJ +Ov +gJ +di +di +di +di +di +di +di +ms +ms +Pa +Pa +Pa +ms +ms +ms +ms +Pa +Pa +Pa +ms +ms +ms +ms +ms +ms +ms +ms +Pa +Pa +Pa +ms +ms +ms +ms +ms +ms +hn Dt -DC -QS Dt -aa +Eh +Ex +EW +Fk +FC +FT +oy +il +ly +AQ +oy +wd +il +OZ +zR +zR +il +Qa +TL +av +Hx +Gt +HO +Eo aa aa aa aa HY -GT +Uu If -ad +aa HY -GT +He If -ad +aa HY -GT +He If aa aa @@ -49565,17 +45666,8 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa "} -(123,1,1) = {" -aa -aa +(130,1,1) = {" aa aa aa @@ -49673,114 +45765,42 @@ aa aa aa aa -aj -ao -aJ -aY -aJ -MV -aJ -aD -XL -MF -DI -Wc -XD -MN -Qu -di -di -di -di -eL -fx -fx -gv -gQ -Sj -di -di -iX -iX -ke -ZQ -kd -ma -iX -Cc -nN -op -iq -pt -Vf -iq -XQ -mq -sA -mS -uf -uK -vn -ms -ms -ms -ms -yq -GZ -zx -zY -zx -zx -zx -NK -bl -Bx -BG -oG -Bs -Cl -CC -CT -Dg -bl -Am -av -av -av -ER -yz -Fx -EB -Dt aa aa aa aa aa aa -Dt -Hv -MM -Dt -Dt -ad -ad -ad aa -HY -GT -If aa -HY -GT -If aa -HY -GT -If +cr +cr +cr +cr +cr +cr +pa +AF +qr +qM +eu +SE +gX +xm +gX +tH +hc +zW +Vf +jj +Vf +zW aa aa aa +DU +Pr aa aa aa @@ -49814,9 +45834,51 @@ aa aa aa aa +Cn +Wy +hU +ak +Je +av +av +av +av +mg +XQ +Py +oy +Oi +SM +Wj +pB +dV +eK +BB +qf +yk +ZG +Ur +nn +av +Hv +HD +av +av +ad +ad +ad aa +HY +Uu +If aa +HY +He +If aa +HY +He +If aa aa aa @@ -49829,8 +45891,6 @@ aa aa aa aa -"} -(124,1,1) = {" aa aa aa @@ -49863,6 +45923,8 @@ aa aa aa aa +"} +(131,1,1) = {" aa aa aa @@ -49930,111 +45992,16 @@ aa aa aa aa -aj -as -aK -aY -aJ -MV -bV -aD -ah -ah -ah -di -di -dN -di -di -me -me -di -eM -fy -fy -gw -gQ -TC -di -iu -iZ -iX -kf -kK -iY -kf -iX -nh -di -di -ms -ms -ms -ms -ms -ms -sB -tt -ug -ms -ms -ms -wM -wM -ms -ms -ms -ms -ms -ms -ms -ms -Bf -bl -bl -bl -bl -bl -bl -bl -CU -bl -bl -Dw -DF -Ed -Ew -ES -Fh -Fy -FP -Dt -Dt -ad aa aa aa aa -Eo -bk -HE -HL -Eo aa aa aa aa -HY -GT -If aa -HY -GT -If aa -HY -GT -If aa aa aa @@ -50066,6 +46033,26 @@ aa aa aa aa +eu +eu +eu +eu +vv +AF +AF +IM +eu +MB +jO +tU +Zf +bi +Ux +zW +RD +qe +Vf +jy aa aa aa @@ -50086,8 +46073,6 @@ aa aa aa aa -"} -(125,1,1) = {" aa aa aa @@ -50106,11 +46091,51 @@ aa aa aa aa +Cn +Nw +av +av +av +nz +nz +Ey +EX +vz +DC +FV +Ps +SJ +QE +gZ +pB +HU +eK +eK +eK +jf +cj +Qj +Rz +av +Tj +OF +av aa aa aa aa aa +HY +Uu +If +ad +HY +He +If +ad +HY +He +If aa aa aa @@ -50155,6 +46180,8 @@ aa aa aa aa +"} +(132,1,1) = {" aa aa aa @@ -50187,110 +46214,18 @@ aa aa aa aa -aj -at -aL -bb -bx -UR -Oc -IV -Na -Oc -IV -bW -cg -cr -So -Zv -fz -fz -cg -fz -fz -fz -So -gR -OU -Md -fz -fz -fz -NR -OU -fz -kL -mr -ll -gQ -oq -aV -aV -aV -Rr -Mc -aV -OW -tu -Nh -aV -Mc -we -aV -aV -aV -aV -Rr -aV -aV -Pa -aV -aV -RQ -Bn -uh -RI -uh -ZR -uh -CD -CV -Dh -Dk -Dx -DG -Ee -Rr -ET -Fi -Fz -FQ -Gc -Eo -ad aa aa aa aa -Eo -bk -ST -HM -VG -Eo -Dt -Dt aa aa -GH aa aa aa -GH aa aa aa -GH aa aa aa @@ -50343,8 +46278,6 @@ aa aa aa aa -"} -(126,1,1) = {" aa aa aa @@ -50357,6 +46290,26 @@ aa aa aa aa +NL +RE +gI +mP +xt +Sa +qN +ws +Az +gX +FM +Bx +MF +uy +nE +CW +je +du +ob +jy aa aa aa @@ -50395,9 +46348,51 @@ aa aa aa aa +Cn +rd +av +bd +uB +XQ +DC +DC +DC +PF +Eu +FW +oy +HN +DB +Pm +AP +Ug +yT +yT +yT +BM +Uj +BW +dc +av +DC +Gt +av +ad +ad +ad +ad aa +HY +Uu +If aa +HY +He +If aa +HY +He +If aa aa aa @@ -50442,116 +46437,13 @@ aa aa aa aa +"} +(133,1,1) = {" aa aa -ak -ax -aM -bc -bz -bN -bX -ch -cs -cE -cU -Ym -LL -Sb -LL -Qk -LL -LL -es -LL -fA -LL -gx -gS -eO -LL -LL -LL -LL -eu -eO -LL -LL -LL -ni -Xx -or -aV -aV -Rr -aV -aV -aV -sC -tv -aV -aV -Rr -aV -aV -aV -aV -aV -aV -aV -Rr -aV -aV -Np -Rv -Pg -Pg -YZ -Pg -Pg -Pg -Pg -CW -Rt -Pg -Dy -Pg -Ef -Pg -EU -Fj -FA -FR -DC -Eo -ad -ad aa aa aa -Dt -Hw -hi -HN -HU -eK -HW -TT -GR -Gw -Jt -Jt -Jt -Jt -Jt -Jt -Jt -Jt -Jt -GM -GR -GR -JO aa aa aa @@ -50600,8 +46492,6 @@ aa aa aa aa -"} -(127,1,1) = {" aa aa aa @@ -50657,6 +46547,26 @@ aa aa aa aa +eu +eu +eu +eu +Ba +BD +ax +aL +zW +gX +Cb +YV +xg +yH +Wd +zW +Vf +AX +Vf +zW aa aa aa @@ -50693,118 +46603,65 @@ aa aa aa aa -ab aa aa +Cn +ga +av +Wn +DC +DC +DC +DC +DC +cp +Gb +FX +oy +Qg +Vm +Zh +oO +XW +UA +eK +eK +eK +eK +ZU +UA +av +DC +Gt +av +av aa aa aa aa +HY +XK +If aa -aj -ay -aN -be -bA -bO -bY -ci -ct -cF -ci -WO -Rj -gT -gT -VZ -gT -gT -Wr -gT -fU -gT -gy -Wr -gy -hV -gT -gT -gT -kg -gy -jI -kM -gQ -ll -gQ -oq -oT -aV -qe -qO -rA -aV -Yv -tw -ui -ui -MB -ui -ui -ui -ui -QG -ui -zy -ui -ui -ui -ap -SE -ui -QG -XS -ui -ui -ui -CE -Co -ui -QG -XS -ui -Eg -aV -EV -Fi -FB -PK -Gd -Eo +HY +HT +If aa +HY +HT +If aa aa aa aa -Eo -bk -HC -Gt -Eo -Eo -Eo -Dt aa aa -GI aa aa aa -GI aa aa aa -GI aa aa aa @@ -50837,6 +46694,8 @@ aa aa aa aa +"} +(134,1,1) = {" aa aa aa @@ -50857,8 +46716,6 @@ aa aa aa aa -"} -(128,1,1) = {" aa aa aa @@ -50918,7 +46775,6 @@ aa aa aa aa -ab aa aa aa @@ -50949,6 +46805,25 @@ aa aa aa aa +zW +zW +eu +eu +eu +VJ +eu +zW +zW +rH +ev +zW +qt +ne +zW +zW +zW +zW +zW aa aa aa @@ -50958,111 +46833,17 @@ aa aa aa aa -aj -az -aO -aJ -aY -bM -bZ -aD -ah -ah -ah -dR -UI -UI -UI -CY -UI -ZP -Rx -di -eQ -di -cY -cY -cY -cY -iv -ja -di -WQ -gQ -lp -di -di -nk -di -di -ms -ms -ms -ms -ms -ms -sD -tx -uj -bj -bj -wh -wh -wh -wh -bj -bj -bj -bj -bj -bj -Vw -ms -ep -ep -dp -ms -ms -ms -ms -ms -ms -ms -nQ -Dt -Eh -Ex -EW -Fk -FC -FT -Dt -Dt aa aa aa aa aa -Eo -Hx -Gt -HO -Eo aa aa aa aa -HY -He -If aa -HY -He -If aa -HY -He -If aa aa aa @@ -51081,7 +46862,42 @@ aa aa aa aa +Cn +vx +av +bm +DC +DC +Ej +DC +Tg +TY +FD +FY +oy +uG +oy +oy +oy +PZ +il +Zi +av +Zi +Zi +Oz +av +Hh +En +HC +HP +av aa +tl +xZ +tl +xZ +VM aa aa aa @@ -51114,8 +46930,6 @@ aa aa aa aa -"} -(129,1,1) = {" aa aa aa @@ -51137,6 +46951,8 @@ aa aa aa aa +"} +(135,1,1) = {" aa aa aa @@ -51215,111 +47031,13 @@ aa aa aa aa -aj -aB -aJ -aJ -aY -bM -aJ -aD -cu -Mk -cV -dS -Rx -Qh -Od -ND -Od -Xe -Rx -eR -fD -fV -cY -hv -WF -cY -cY -cY -cY -QY -gQ -lo -di -mb -nm -nW -nW -nW -nW -nW -tP -nS -qk -Xw -ty -ty -bj -vq -vv -vv -vv -xN -yr -bj -pg -qC -rT -bj -aq -Sa -QW -SP -YS -Vq -gV -Vq -Sa -ZH -Rd -VN -Xt -av -av -av -av -mg -DC -Py -Dt -ad aa aa aa aa -ad -Dt -Hv -HD -Dt -Dt -ad -ad -ad aa -HY -He -If aa -HY -He -If aa -HY -He -If aa aa aa @@ -51344,6 +47062,25 @@ aa aa aa aa +zW +Su +Su +Qn +Xi +Al +UK +zW +Wt +QH +Xm +zW +Ai +ne +zW +IP +dN +Hn +zW aa aa aa @@ -51355,6 +47092,7 @@ aa aa aa aa +ab aa aa aa @@ -51371,8 +47109,6 @@ aa aa aa aa -"} -(130,1,1) = {" aa aa aa @@ -51383,7 +47119,42 @@ aa aa aa aa +Cn +sG +av +Dl +Dl +DK +Ek +En +Iq +FL +kw +FU +Gb +RP +Sw +Gb +vl +OJ +oK +Mv +US +Gr +Gr +Xh +en +DC +Eu +HF +HQ +av aa +oC +oC +oC +oC +VM aa aa aa @@ -51437,6 +47208,8 @@ aa aa aa aa +"} +(136,1,1) = {" aa aa aa @@ -51472,111 +47245,11 @@ aa aa aa aa -al -aC -aP -bf -bB -bP -ca -aD -cv -cJ -UL -dT -Rx -Zt -Od -ND -Od -Od -Rx -eS -dm -dU -cZ -do -dr -hW -iw -jb -cY -LS -gQ -lp -di -nZ -nl -nl -nl -nl -nl -nl -vx -nS -qk -sF -ty -ty -bj -vr -wi -wj -wk -xO -pV -bj -pX -LX -rU -bj -tQ -Sa -SP -Tk -Up -Uw -Uw -Ws -Sa -Wu -av -av -av -av -Ei -Ey -EX -EB -DC -FV -Eo -ad -ad -ad -ad -ad -ad -Dt -DC -Gt -Dt aa aa aa aa aa -HY -He -If -ad -HY -He -If -ad -HY -He -If aa aa aa @@ -51628,8 +47301,6 @@ aa aa aa aa -"} -(131,1,1) = {" aa aa aa @@ -51648,6 +47319,25 @@ aa aa aa aa +zW +Vj +Su +Su +Su +Su +xN +zW +kL +jF +ng +zW +Bg +TA +CW +je +du +QN +jy aa aa aa @@ -51686,7 +47376,42 @@ aa aa aa aa +Cn +Jj +av +Mg +Dm +DL +El +DC +lr +Xk +Ve +FZ +Ge +Gg +IZ +IZ +YW +Bk +IZ +IZ +Gl +Gs +Qo +Jb +GA +Hi +Hy +HG +HR +av aa +oC +oC +oC +oC +VM aa aa aa @@ -51729,115 +47454,19 @@ aa aa aa aa -ah -ah -aQ -bh -bC -bQ -ah -aD -cw -Qq -cW -Zr -eC -Ir -Ir -UD -Ir -Ny -Rx -cY -cY -cY -cY -Ut -dr -Wi -iz -ix -QL -SW -gQ -lq -di -NC -nl -nO -os -oU -pu -nl -qR -RH -qk -sG -ty -Vx -bj -vs -wj -wN -xn -xP -yt -bj -pW -qD -rV -bj -et -Sa -VW -LM -Ri -LM -Vq -Vq -Sa -Wu -av -bd -DC -nz -DC -DC -DC -PF -Eu -FW -Dt aa aa -ad -ad aa aa -Dt -DC -Gt -Dt -ad -ad -ad -ad aa -HY -He -If aa -HY -He -If aa -HY -He -If aa aa aa aa +"} +(137,1,1) = {" aa aa aa @@ -51885,8 +47514,6 @@ aa aa aa aa -"} -(132,1,1) = {" aa aa aa @@ -51949,6 +47576,25 @@ aa aa aa aa +zW +Su +Su +Su +Su +Su +xN +zW +Lt +BS +Ju +zW +cL +ne +zW +Vl +nu +dN +zW aa aa aa @@ -51987,110 +47633,47 @@ aa aa aa aa -aD -bg -bg -bD -bg -bg -ad -cw -cJ -cX -pp -Rx -Sf -Pk -TF -Px -Ov -Rx -eT -fX -VU -cY -hw -EE -hX -iy -jd -XY -WL -gQ -lr -di -nZ -nl -nP -ot -oV -pv -nl -nl -nl -nl -sH -tz -QB -bj -vt -wk -wO -xo -xQ -yu -bj -zC -bj -bj -bj -AX -Sa -PB -QD -Uq -RG -RG -Jz -Sa -Ue +Cn +Wk av -Wn -DC -DC -DC -DC +Dn +Dn +DM +Ek DC -cp -Gb -FX +lr +Fn Dt -aa -aa -ad -aa -aa +Eo +Eo +Eo Dt Dt -DC -Gt +UU +VH Dt Dt +Gm +sK +TO +Xb +Hb +Hj +AR +av +av +av aa +oC +oC +oC +oC +VM aa aa aa -HY -HT -If aa -HY -HT -If aa -HY -HT -If aa aa aa @@ -52139,11 +47722,12 @@ aa aa aa aa +"} +(138,1,1) = {" +aa aa aa aa -"} -(133,1,1) = {" aa aa aa @@ -52245,97 +47829,31 @@ aa aa aa aa -bg -bi -bE -bT -bg aa -cw -cw -cw -Tc -Rx -Ir -Ir -ND -Ir -Ir -Rx -eU -fH -QU -cY -hx -MH -hY -QR -je -cY -On -gQ -lp -di -nZ -nl -mM -ou -oW -pw -qg -qS -rC -sb -sI -tA -tF -uL -vu -vu -wP -xp -vu -yv -bj -zD -tS -At -bj -hU -Sa -LM -OM -LM -MP -UG -Vq -Sa -WN -av -bm -DC -DC -Ej -Ez -Tg -TY -FD -FY -Dt -Dt -Dt -Eo -Eo -Eo -Dt -Hh -En -HC -HP -Dt aa aa aa +zW +IA +Su +Su +Su +Su +xN +zW +zW +zW +ev +zW +Zg +ne +zW +zW +zW +zW +zW +zW +aa aa aa aa @@ -52372,6 +47890,50 @@ aa aa aa aa +Cn +sG +av +Do +Do +DN +Ek +DC +lr +Fo +Dt +yo +Ql +YU +Oe +YJ +Zp +MR +NQ +Jl +Dt +Ni +fW +UC +Hc +Hk +am +ad +ad +tl +xZ +oC +oC +oC +oC +VM +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -52399,8 +47961,6 @@ aa aa aa aa -"} -(134,1,1) = {" aa aa aa @@ -52419,6 +47979,8 @@ aa aa aa aa +"} +(139,1,1) = {" aa aa aa @@ -52502,94 +48064,9 @@ aa aa aa aa -bg -bn -bF -bq -bg aa aa aa -cw -Tc -Rx -IB -ZZ -PT -dn -Ir -Rx -cY -cY -gB -cY -da -da -hZ -TV -da -cY -OV -gQ -lp -di -nZ -nl -nx -ou -ou -YF -qh -qT -NJ -sc -sJ -Sg -PE -uM -vv -vv -vv -xq -vv -yw -zf -zE -Ae -Au -bj -Zz -Sa -Rf -Sa -Sa -Sa -Sa -Sa -Sa -Wu -av -Dl -Dl -DK -Ek -En -Gt -EB -En -FU -DC -RP -Gk -Gr -Gr -Gr -DC -DC -Eu -HF -HQ -Dt aa aa aa @@ -52613,6 +48090,27 @@ aa aa aa aa +zW +Su +Su +Su +Su +Su +xN +WM +IE +wT +KH +zW +Vb +ne +Bb +Bb +Bb +Bb +qe +zW +zW aa aa aa @@ -52649,6 +48147,42 @@ aa aa aa aa +Cn +Wk +av +Mh +Dp +DO +Ek +En +lr +Fp +Dt +NQ +NQ +Vr +NQ +NQ +UU +NQ +NQ +Jl +Dt +Gu +Rp +rp +Hd +Hl +am +ad +ad +oC +oC +oC +oC +oC +oC +VM aa aa aa @@ -52656,8 +48190,6 @@ aa aa aa aa -"} -(135,1,1) = {" aa aa aa @@ -52704,6 +48236,8 @@ aa aa aa aa +"} +(140,1,1) = {" aa aa aa @@ -52759,111 +48293,6 @@ aa aa aa aa -bg -bp -bR -nj -bg -ad -aa -aa -cw -Tc -Rx -Nc -Ms -Vv -Xi -YI -XM -eV -fI -fY -Xr -ha -No -Vt -gX -jg -Oq -ZN -gT -ls -di -nZ -nl -ny -ou -oX -px -qi -qU -rD -sd -sK -Xw -uq -uN -vw -wl -vw -wl -xR -yx -bj -zF -Af -Av -bj -hU -Sa -LM -oQ -Sa -Om -TN -Xd -AC -TK -av -Mg -Dm -DL -El -DC -Gt -Xk -Ve -FZ -Ge -Gg -Gl -Gs -IZ -GA -GA -Hi -Hy -HG -HR -Dt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -52913,16 +48342,32 @@ aa aa aa aa -"} -(136,1,1) = {" -aa -aa -aa aa aa aa aa aa +zW +qb +Su +Su +Su +Su +xN +qe +qe +qe +VT +rb +cL +nH +Xo +Xo +Xo +Xo +Yv +od +zW aa aa aa @@ -52959,8 +48404,42 @@ aa aa aa aa +Cn +Wk +av +Dq +Dq +DP +Ek +DC +lr +Fp +Dt +yo +Ql +Zn +Ot +Wr +gY +NQ +NQ +Jl +Dt +Gv +MS +GY +Hd +Hm +am aa aa +oC +oC +oC +oC +oC +oC +VM aa aa aa @@ -53014,96 +48493,11 @@ aa aa aa aa +"} +(141,1,1) = {" aa aa -bg -bq -bq -bq -bg -ad -ad aa -cw -Tc -Rx -Rx -Rx -Rx -Rx -Rx -Rx -eW -Fq -fZ -gC -hb -hz -ia -iA -jh -Xs -PM -gQ -lp -di -nZ -nl -nT -ov -oY -py -nl -nl -nl -nl -sL -Xw -ul -bj -vv -vv -vv -xr -xS -wi -bj -zG -Ag -Aw -bj -Mn -Sa -LM -Jk -Sa -SF -MU -TN -Bb -Pc -av -Dn -Dn -DM -Ek -DC -Gt -Fn -Dt -Eo -Eo -Eo -Gm -Gt -Jc -En -Hb -Hj -Dt -Dt -Dt -Dt aa aa aa @@ -53170,8 +48564,6 @@ aa aa aa aa -"} -(137,1,1) = {" aa aa aa @@ -53212,6 +48604,27 @@ aa aa aa aa +zW +yc +Su +Su +Su +Su +xN +jy +qe +Oo +Ne +BQ +lA +nH +Xo +Xo +Xo +Xo +Yv +uH +jy aa aa aa @@ -53248,8 +48661,42 @@ aa aa aa aa +Cn +sG +av +Dr +Dr +DQ +Em +En +lr +pJ +Dt +Dt +Gm +Dt +Dt +Dt +Dt +Dt +Dt +av +XO +Dt +CQ +gm +Eo +zk +AR aa aa +oC +oC +oC +oC +oC +oC +VM aa aa aa @@ -53268,98 +48715,14 @@ aa aa aa aa +ab aa aa aa aa aa -bg -by -bS -ym -bg -ad aa aa -VV -pp -cw -QX -Rx -MA -YQ -dX -eB -eX -Fq -ga -gD -hc -da -ew -iB -WY -cY -Ou -gQ -lp -di -nZ -nl -nU -ow -oZ -pz -nl -qV -rF -se -sM -Xw -um -bj -SY -wm -wm -wm -xT -yy -bj -zH -Rw -mL -bj -hU -Sa -Vi -LM -Vu -IK -QQ -TN -AC -Wu -av -Do -Do -DN -Ek -DC -Ea -Fo -Dt -ad -ad -ad -Dt -Ni -As -DC -Hc -Hk -Eo -ad -ad aa aa aa @@ -53387,6 +48750,8 @@ aa aa aa aa +"} +(142,1,1) = {" aa aa aa @@ -53427,8 +48792,6 @@ aa aa aa aa -"} -(138,1,1) = {" aa aa aa @@ -53498,6 +48861,27 @@ aa aa aa aa +zW +dx +Su +XL +PN +PN +QR +jy +wC +qe +AD +qe +qe +nH +Xo +Xo +Xo +Xo +Yv +uH +jy aa aa aa @@ -53521,6 +48905,7 @@ aa aa aa aa +ab aa aa aa @@ -53530,95 +48915,45 @@ aa aa aa aa -bg -bg -bg -bg -bg aa aa aa -cw -Tc -Yq -QX -Rx -Nw -dq -dY -dY -eY -Fq -dZ -dr -eZ -da -gb -iC -eZ -cY -ki -Xx -lp -di -nZ -nl -nl -nl -nl -nl -nl -qW -rG -qk -sN -Xw -un -bj -bj -wn -wQ -xs -xU -xW -bj -zI -Rw -Ay -bj -hU -Sa -ZW -MJ -Sa -dk -TN -CO -AC -Pc -av -Mh -Dp -DO -Ek -En -Gt -Fp +Cn +OA +Vx +Gb +Gb +Gb +Gb +Ul +Eq +Fr Dt +gD +wP +Sg +Ii +WJ +Pi +NQ +XF +NQ +wg +av +Ig +gm aa -ad -ad -Dt -Gu -Za -DC -Hd -Hl -Eo -ad -ad +Ho +QV aa aa +oC +oC +oC +oC +oC +oC +VM aa aa aa @@ -53672,6 +49007,8 @@ aa aa aa aa +"} +(143,1,1) = {" aa aa aa @@ -53684,8 +49021,6 @@ aa aa aa aa -"} -(139,1,1) = {" aa aa aa @@ -53783,6 +49118,27 @@ aa aa aa aa +zW +Ua +Ua +Su +lb +zw +oc +tc +zl +Ro +Tu +aZ +qe +nH +Xo +Xo +Xo +Xo +Yv +uH +jy aa aa aa @@ -53795,83 +49151,8 @@ aa aa aa aa -cw -Tc -cw -cw -Rx -Nw -OP -Nw -Nw -Tq -Fq -TJ -gE -hd -da -gc -iD -hd -cY -LR -LL -LW -cG -ox -nn -nX -oA -pC -pA -qk -ag -rH -qk -sO -tC -um -bj -vy -wo -wR -wR -xV -yA -bj -zJ -Ai -QO -AO -AY -Sa -Sa -Sa -Sa -Th -Ci -AC -AC -Pc -av -Dq -Dq -DP -Ek -DC -dQ -Fp -Dt aa -ad aa -Dt -Gv -GB -GY -Hd -Hm -Eo aa aa aa @@ -53894,9 +49175,42 @@ aa aa aa aa +Cn +wb +av +Ds +DC +DR +En +En +Yu +rc +ym +yh +wA +wA +mC +cv +ph +NQ +NQ +NQ +wg +av +Tt +ZM aa +Hp +QV aa aa +VM +oC +oC +oC +oC +oC +VM aa aa aa @@ -53941,8 +49255,6 @@ aa aa aa aa -"} -(140,1,1) = {" aa aa aa @@ -53952,6 +49264,8 @@ aa aa aa aa +"} +(144,1,1) = {" aa aa aa @@ -54052,96 +49366,6 @@ aa aa aa aa -YW -wf -cJ -cJ -Rx -Vj -YY -Po -Vd -Nw -Fq -cY -cY -cY -cY -cY -cY -cY -cY -LS -gQ -lq -di -mv -nq -qP -pa -qP -pB -qk -qk -qk -qk -sO -Xw -uo -bj -vz -wp -UC -wp -wp -wp -zh -zK -Ah -Az -bj -Qy -WV -Ox -ZD -WV -nR -Bb -CO -Bb -Wu -av -Dr -Dr -DQ -Em -CI -CJ -CK -Dt -aa -ad -aa -Gm -Dt -GC -Eo -Eo -Hn -Dt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -54151,6 +49375,27 @@ aa aa aa aa +zW +zW +zW +zW +zW +zW +zW +zW +wu +qe +CV +CB +CB +Sv +tz +tz +tz +tz +Sf +PO +zW aa aa aa @@ -54187,9 +49432,42 @@ aa aa aa aa +Cn +bE +av +av +OQ +av +Re +En +En +XQ +xk +NQ +Bj +vA +Cv +NQ +pV +cv +Oa +Tz +wg +av +Og +av aa +Ho +QV aa aa +VM +oC +oC +oC +oC +oC +VM aa aa aa @@ -54198,8 +49476,6 @@ aa aa aa aa -"} -(141,1,1) = {" aa aa aa @@ -54245,6 +49521,8 @@ aa aa aa aa +"} +(145,1,1) = {" aa aa aa @@ -54306,86 +49584,8 @@ aa aa aa aa -YW -YW -YW -YW -YW -YW -VJ -YW -Ib -Ib -Ib -Ib -fa -Ib -Wv -SC -Wv -Pi -PI -PI -PI -OC -PR -gQ -lp -di -mw -WG -nZ -nS -nZ -nS -MO -nS -nS -zz -sO -Xw -um -bj -vA -jS -wS -xt -wq -yB -bj -zL -Aj -AA -bj -AZ -kY -AC -AC -BM -BM -AC -AC -CL -RB -aH -bk -DC -DC -DC -kA -XR -Fr -Dt -ad -ad -ad aa -Eo -GD -Eo aa -Ho -ad aa aa aa @@ -54439,6 +49639,20 @@ aa aa aa aa +zW +zW +jy +jy +jy +jy +zW +Zz +Bw +rI +Bw +Wv +zW +zW aa aa aa @@ -54455,8 +49669,6 @@ aa aa aa aa -"} -(142,1,1) = {" aa aa aa @@ -54477,11 +49689,42 @@ aa aa aa aa +Cn +WW +XO +RX +DC +av +Eo +Eo +Eo +av +av +av +XO +av +pf +xo +xo +ta +pf +NQ +wg aa +Tx aa aa +Ho +QV aa aa +VM +oC +oC +oC +oC +oC +VM aa aa aa @@ -54535,6 +49778,8 @@ aa aa aa aa +"} +(146,1,1) = {" aa aa aa @@ -54563,95 +49808,19 @@ aa aa aa aa -VD -Ux -Ux -Pu -Te -Ux -Ux -Ux -Ib -Dc -ZV -PV -SN -Ib -Wv -Wd -JZ -JZ -JZ -JZ -JZ -JZ -LS -gQ -lp -di -mx -nS -nZ -nS -pc -qQ -nS -pb -ze -qk -sP -Xw -um -bj -bj -bj -bj -bj -bj -wr -bj -bj -bj -bj -bj -Je -Bl -AC -ad -ad aa aa -AC -QV -HZ -av -Ds -DC -DR -En -BO -Gt -Fs -Dt aa -ad aa aa -Dt -XE -Eo aa -Hp -ad aa aa -ad aa aa aa aa aa -ad aa aa aa @@ -54712,8 +49881,6 @@ aa aa aa aa -"} -(143,1,1) = {" aa aa aa @@ -54735,6 +49902,13 @@ aa aa aa aa +zW +jy +jy +zW +jy +jy +zW aa aa aa @@ -54770,14 +49944,44 @@ aa aa aa aa +Cn +Cn +Cn +WW +av +av +av +av +WU +WU +WU aa aa aa +ad +av +Mo +xo +XC +ta +pf +fs +wg aa +mu aa aa +Ho +QV aa aa +VM +oC +oC +oC +oC +oC +VM aa aa aa @@ -54820,95 +50024,21 @@ aa aa aa aa -VD -LU -Ux -VF -Ux -Ux -Ux -Ux -Ib -IC -Io -YP -YK -Ib -jl -fC -JZ -hA -ib -iE -ji -JZ -LT -gQ -lr -di -di -nS -nZ -oz -oz -oz -ql -oz -oz -sf -sQ -tD -up -uO -vB -tR -wT -xu -xX -wT -zi -wT -Ak -AB -AP -WP -NX -AC aa -ad aa aa -AC -CM -WW -av -Dt -OQ -Dt -Re -ED -Fw -Dt -Dt aa -ad -ad aa -Dt -GF -Dt aa -Ho -ad aa aa -ad aa aa aa +"} +(147,1,1) = {" aa aa -ad aa aa aa @@ -54969,8 +50099,6 @@ aa aa aa aa -"} -(144,1,1) = {" aa aa aa @@ -55073,99 +50201,53 @@ aa aa aa aa +Cn +WB +Xj +PC +OX +Tv +Ze +WB +WU aa aa -YW -YW -YW -Ux -Ux -Ux -Ux -VF -Ux -LU -Ia -IC -FN -Yx -Fg -OD -Wv -jO -RY -hB -ic -hB -jj -jL -Nj -gT -Vp -mc -di -no -ox -oz -pd -QF -pD -qX -oz -sg -sO -Xw -um -uP -Qz -dP -wU -xv -wU -xv -xy -zM -zQ -AC -AC -Or -WC -AC aa -ad aa aa -AC -Cn -Wk +ad +av +av +av XO -Zh -DC -Dt -Eo -BS -Eo -Dt +av +av +av +wg aa +mu aa -ad aa +Ho +QV aa aa -GJ +VM +oC +oC +oC +oC +oC +VM aa aa -Ho -ad aa aa -ad aa aa aa aa aa -ad aa aa aa @@ -55210,6 +50292,8 @@ aa aa aa aa +"} +(148,1,1) = {" aa aa aa @@ -55226,8 +50310,6 @@ aa aa aa aa -"} -(145,1,1) = {" aa aa aa @@ -55332,96 +50414,88 @@ aa aa aa aa -VD -Ux -Ux -Ux -Ux -Ux -VF -VF -Ux -Ux -Ia -WT -WD -MQ -Zl -Ib -OB -kj -JZ -hC -id -iG -jk -JZ -LS -gQ -lp -md -di -np -nZ -oz -MD -pE -qm -qY -oz -sh -sO -tE -um -uS -vD -wt -wV -xw -wV -yD -ws -zN -zQ -ad -AC -AC -Bm -AC aa -ad -ad -PD -PD -PD -PC -PD -PD -PD -PD aa -BT aa -ad aa aa -ad aa aa aa -GJ aa aa -Ho +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cn +WB +WB +Qw +Je +Je +Je +Cn +Cn +Cn +aa +aa +aa +aa ad aa aa +aa ad aa aa aa aa aa +mu +aa +aa +Hq +Hz +aa +ad +VM +zX +nD +tk +nD +zX +lf ad aa aa @@ -55475,6 +50549,8 @@ aa aa aa aa +"} +(149,1,1) = {" aa aa aa @@ -55483,8 +50559,6 @@ aa aa aa aa -"} -(146,1,1) = {" aa aa aa @@ -55589,97 +50663,24 @@ aa aa aa aa -VD -VF -Ux -LU -Ux -VF -Ux -Ux -Ux -Ux -Ib -Ib -Ib -Ib -Vl -Ib -Ib -kl -JZ -JZ -JZ -JZ -JZ -JZ -LS -kN -lp -me -di -nS -nZ -oz -pf -pF -qn -qZ -oz -oz -sO -Xw -um -uS -vE -wu -wW -xx -wW -yE -ws -zO -zQ -ad aa -AC -TW -AC aa aa aa -PD -RR -Xj -PC -ZO -OX -Tv -Ze -WU -Mt -Vz -NA -yQ aa aa aa aa aa -GJ aa aa -Ho -ad aa aa -ad aa aa aa aa aa -ad aa aa aa @@ -55713,19 +50714,57 @@ aa aa aa aa +Cn +Cn +SZ +kH +Ty +kH +km +Oh +WK +Zv +Cn aa aa aa aa +ad aa aa aa +ad aa aa aa aa aa +mu +ad aa +Hr +HA +HH +HS +HV +HS +HH +HH +HH +HS +Vk +HS +HH +HH +HH +HH +HH +HS +HS +HH +HH +JP +Ka aa aa aa @@ -55740,8 +50779,6 @@ aa aa aa aa -"} -(147,1,1) = {" aa aa aa @@ -55769,6 +50806,8 @@ aa aa aa aa +"} +(150,1,1) = {" aa aa aa @@ -55846,98 +50885,22 @@ aa aa aa aa -VD -Ux -Ux -Ux -Ux -Ux -Ux -Ux -VF -Ux -Ux -Ux -Nv -Sz -Ic -gQ -Xx -lt -LL -LL -Mf -kk -Ie -LQ -LV -kL -lp -di -di -nV -nZ -oz -pe -pF -qo -qY -rI -oz -Yo -tG -um -uS -vC -wv -ws -xy -xY -yF -zj -zP -zQ aa aa -AC -Ca -AC aa aa aa -PD -kS -QC -Qw -Qb -PD -PD -PD -PD -BU -PD -PD -VO aa aa aa aa aa -GJ aa aa -Hq -Hz aa -ad -ad -ad aa aa aa -ad -ad -ad aa aa aa @@ -55997,8 +50960,6 @@ aa aa aa aa -"} -(148,1,1) = {" aa aa aa @@ -56010,11 +50971,57 @@ aa aa aa aa +Cn +cH +OT +OT +UO +Sr +Ml +DH +Cn +Cn +Cn +ad +ad +ad +ad +ad +ad +ad +ad +ad aa aa aa aa aa +Lb +GC +Wz +GC +gn +QW +QW +qY +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +lg +JQ +Kb aa aa aa @@ -56056,6 +51063,9 @@ aa aa aa aa +"} +(151,1,1) = {" +aa aa aa aa @@ -56103,109 +51113,14 @@ aa aa aa aa -VD -Ux -Ux -VF -Ux -MC -Yp -Ux -Ux -Ux -Ux -Ux -WS -gQ -Ic -gQ -gQ -gQ -Xx -gQ -gQ -gQ -gQ -gQ -kh -kO -ls -ae -my -nS -NC -oz -oz -pG -qp -qY -pe -oz -sR -tH -us -uT -oz -oz -oz -xz -oz -oz -zk -zQ -zQ aa aa -ad -cn -ad -ad -ad -ad -PD -SZ -kH -Ty -MK -km -Oh -PD -Ep -EH -Ep -PD -VO aa aa aa aa aa -GJ -ad aa -Hr -HA -HH -HS -HV -HS -HH -HH -HH -HS -Ig -HS -HH -HH -HH -HH -HH -HS -HS -HH -HH -JP -Ka aa aa aa @@ -56254,8 +51169,6 @@ aa aa aa aa -"} -(149,1,1) = {" aa aa aa @@ -56315,6 +51228,15 @@ aa aa aa aa +Cn +Cn +Cn +Cn +Cn +Cn +Cn +Cn +Cn aa aa aa @@ -56325,15 +51247,18 @@ aa aa aa aa +ad aa aa aa aa aa +GJ aa aa aa aa +ad aa aa aa @@ -56348,8 +51273,12 @@ aa aa aa aa +ad +ad aa aa +QV +Ho aa aa aa @@ -56360,109 +51289,19 @@ aa aa aa aa -VD -Ux -Ux -Rm -Yh -Zs -NL -Qi -TG -Yh -TG -Yh -he -Nt -Sq -Oi -Mm -Mm -Me -LP -LP -LP -LZ -Ma -Mb -Id -LY -ae -mz -nW -oy -ZB -oz -pH -qq -ra -rJ -si -sS -tI -ut -uU -vF -ww -wX -pD -xZ -oz aa aa -ad -ad aa aa -ad aa aa aa aa -PD -WB -OF -UO -Sr -Ml -DH -DS -Ep -EI -Ep -PD -TR aa aa aa aa aa -GJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -JQ -Kb aa aa aa @@ -56481,6 +51320,8 @@ aa aa aa aa +"} +(152,1,1) = {" aa aa aa @@ -56511,8 +51352,6 @@ aa aa aa aa -"} -(150,1,1) = {" aa aa aa @@ -56617,89 +51456,24 @@ aa aa aa aa -YW -YW -YW -XF -YW -YW -YW -XF -YW -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -if -ae -ae -ae -ae -kP -ae -ae -ae -ae -oa -ae -oz -pI -qr -rb -rK -sj -sT -Pd -tJ -RN -vG -wx -pD -pD -ya -pU aa aa aa -ad aa aa -ad aa aa aa aa -PD -TQ -Vb -XX -ez -Vb -Nz -PD -Ep -Ep -Ep -PD -cn aa aa aa aa aa -GJ aa aa aa aa -ad aa aa aa @@ -56714,12 +51488,34 @@ aa aa aa aa -ad +aa +aa +Pr +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa ad aa aa +aa +aa +aa +GJ +aa +aa +aa +aa ad -Ho aa aa aa @@ -56734,6 +51530,19 @@ aa aa aa aa +ad +aa +aa +aa +QV +Kc +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -56769,7 +51578,7 @@ aa aa aa "} -(151,1,1) = {" +(153,1,1) = {" aa aa aa @@ -56874,89 +51683,23 @@ aa aa aa aa -YW -Ux -Ud -Xp -Dj -YW -Ju -RF -DA -ae -ar -dt -dd -ae -ar -dt -dd -ae -hf -hF -gg -iI -jm -ae -kn -kQ -lv -ae -mA -nr -ob -Mi -oz -pJ -hr -qs -oz -oz -sU -tK -uu -oz -oz -wy -pD -pD -yb -pU -ad aa aa -ad aa aa -ad aa aa aa aa -PD -PD -PD -PD -PD -PD -PD -PD -PD -PD -PD -PD -ad aa aa aa aa aa -GJ aa aa aa aa -ad aa aa aa @@ -56971,12 +51714,9 @@ aa aa aa aa -ad aa aa aa -ad -Kc aa aa aa @@ -57021,17 +51761,18 @@ aa aa aa aa +ad aa aa aa aa -"} -(152,1,1) = {" aa +VO aa aa aa aa +ad aa aa aa @@ -57046,9 +51787,12 @@ aa aa aa aa +ad aa aa aa +QV +Ho aa aa aa @@ -57090,6 +51834,15 @@ aa aa aa aa +"} +(154,1,1) = {" +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -57131,61 +51884,6 @@ aa aa aa aa -YW -VF -kG -VS -DA -YW -Ux -Xo -Ux -ae -aw -du -dd -ae -aw -du -dd -ae -hg -db -ig -iJ -iJ -ae -ko -RV -lw -ae -mB -ns -ob -oB -oz -pK -qt -rd -rL -sk -sV -tL -uv -oz -vH -wz -qw -xA -yc -pU -ad -ad -ad -ad -ad -ad -ad aa aa aa @@ -57194,26 +51892,14 @@ aa aa aa aa -ad aa aa aa aa -cn -cn -ad -cn -cn -cn -cn -cn -cn -VO aa aa aa aa -ad aa aa aa @@ -57228,12 +51914,9 @@ aa aa aa aa -ad aa aa aa -ad -Ho aa aa aa @@ -57282,8 +51965,6 @@ aa aa aa aa -"} -(153,1,1) = {" aa aa aa @@ -57336,13 +52017,21 @@ aa aa aa aa +ad +ad +ad aa aa aa aa +GJ aa aa aa +ad +ad +ad +ad aa aa aa @@ -57359,6 +52048,8 @@ aa aa aa aa +QV +Ho aa aa aa @@ -57388,67 +52079,20 @@ aa aa aa aa -YW -YW -YW -Ux -Ux -YW -kG -VF -Ux -ae -aw -dd -dd -ae -aw -dd -dd -ae -hh -db -ih -iK -jn -ae -kp -kR -lx -ae -mC -db -ob -oB -oz -pL -qu -re -rL -sk -sW -tM -uw -oz -jT -pe -wY -xB -yd -oz aa aa aa aa aa aa -ad aa aa aa aa aa aa +"} +(155,1,1) = {" aa aa aa @@ -57459,18 +52103,13 @@ aa aa aa aa -ad -ad aa aa aa aa -GJ aa aa aa -ad -ad aa aa aa @@ -57489,8 +52128,6 @@ aa aa aa aa -ad -Ho aa aa aa @@ -57539,8 +52176,6 @@ aa aa aa aa -"} -(154,1,1) = {" aa aa aa @@ -57639,67 +52274,29 @@ aa aa aa aa +ad +FE +FE +FE +Gh +Gh aa +GH aa +Gh +Gh +FE +FE +FE +ad aa aa aa aa aa aa -YW -VD -VD -YW -YW -VD -VD -ae -aA -dv -eb -ae -fb -fK -gd -ae -db -db -ih -iL -jo -ae -ae -kP -ae -ae -mD -db -ob -oB -oz -pM -qu -pD -rM -oz -pU -tN -pU -oz -oz -wA -sk -xC -rQ -Wb -RD -RD -RD -RD aa aa -ad aa aa aa @@ -57708,6 +52305,8 @@ aa aa aa aa +QV +Ho aa aa aa @@ -57716,19 +52315,8 @@ aa aa aa aa -FE -FE -FE -Gh -Gh aa -GH aa -Gh -Gh -FE -FE -FE aa aa aa @@ -57746,8 +52334,23 @@ aa aa aa aa -ad -Ho +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(156,1,1) = {" +aa aa aa aa @@ -57796,8 +52399,6 @@ aa aa aa aa -"} -(155,1,1) = {" aa aa aa @@ -57911,52 +52512,8 @@ aa aa aa aa -ae -fc -dw -ec -ae -fc -dw -ge -ae -ae -db -ii -iM -jp -ae -kr -kT -lz -ae -mG -db -ob -oB -oz -pN -qv -rf -rN -rf -rf -Tj -rN -uV -rf -sp -pD -xD -ye -Wb -Yc -Vn -iH -RD aa aa -ad aa aa aa @@ -57973,6 +52530,8 @@ aa aa aa aa +aa +ad FF Ga Ga @@ -57986,6 +52545,7 @@ GN GN GN GO +ad aa aa aa @@ -58002,8 +52562,7 @@ aa aa aa aa -aa -ad +QV Ho aa aa @@ -58046,6 +52605,8 @@ aa aa aa aa +"} +(157,1,1) = {" aa aa aa @@ -58053,8 +52614,6 @@ aa aa aa aa -"} -(156,1,1) = {" aa aa aa @@ -58144,6 +52703,40 @@ aa aa aa aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -58168,52 +52761,8 @@ aa aa aa aa -cL -db -db -ob -db -db -db -ob -gF -ae -hG -ij -iN -jq -ae -ks -kU -lA -ae -mF -db -ob -oB -oz -pO -qw -rg -rO -qw -rg -Pj -Sp -XA -Uv -wB -Uv -xE -Ls -XZ -Un -ZI -Rb -RD aa aa -ad aa aa aa @@ -58230,6 +52779,16 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad FG FG FG @@ -58243,6 +52802,7 @@ FG FG FG FG +ad aa aa aa @@ -58259,8 +52819,7 @@ aa aa aa aa -aa -ad +QV Ho aa aa @@ -58303,6 +52862,16 @@ aa aa aa aa +"} +(158,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -58310,8 +52879,6 @@ aa aa aa aa -"} -(157,1,1) = {" aa aa aa @@ -58409,7 +52976,6 @@ aa aa aa aa -ab aa aa aa @@ -58425,52 +52991,8 @@ aa aa aa aa -cL -bo -dx -ee -eD -dx -dx -Rl -gG -hj -hH -ik -iO -jr -jP -kt -kV -lB -mf -mE -nt -oc -db -oz -sX -qx -rh -rP -sm -qA -tO -ux -uW -vJ -wC -wZ -xF -yf -Wb -ZK -EG -Mw -RD aa aa -ad aa aa aa @@ -58489,15 +53011,12 @@ aa aa aa aa -ad aa aa aa -Jt aa aa aa -ad aa aa aa @@ -58506,7 +53025,6 @@ aa aa aa aa -ab aa aa aa @@ -58517,8 +53035,6 @@ aa aa aa aa -ad -Kd aa aa aa @@ -58529,15 +53045,27 @@ aa aa aa aa +ad +aa +aa +ad +aa +aa +aa +Jt aa aa aa +ad +aa aa +ad aa aa aa aa aa +ab aa aa aa @@ -58548,6 +53076,8 @@ aa aa aa aa +QV +Kd aa aa aa @@ -58567,8 +53097,6 @@ aa aa aa aa -"} -(158,1,1) = {" aa aa aa @@ -58591,6 +53119,8 @@ aa aa aa aa +"} +(159,1,1) = {" aa aa aa @@ -58682,52 +53212,8 @@ aa aa aa aa -ae -aU -dy -ef -ae -fd -gf -iP -gH -ae -hI -db -db -js -ae -ku -db -lC -ae -mH -nu -od -oC -oz -oz -oz -pJ -rQ -sn -oz -oz -oz -pJ -vK -oz -xa -xG -oz -Wb -RD -RD -Xl -RD aa aa -ad aa aa aa @@ -58744,19 +53230,8 @@ aa aa aa aa -FE -FE -FE -FE -FE aa -Jt aa -FE -FE -FE -FE -FE aa aa aa @@ -58774,10 +53249,6 @@ aa aa aa aa -ad -Kc -ad -ad aa aa aa @@ -58824,8 +53295,6 @@ aa aa aa aa -"} -(159,1,1) = {" aa aa aa @@ -58833,8 +53302,21 @@ aa aa aa aa +ad +FE +FE +FE +FE +FE aa +Jt aa +FE +FE +FE +FE +FE +ad aa aa aa @@ -58851,6 +53333,10 @@ aa aa aa aa +QV +Kc +ad +ad aa aa aa @@ -58890,6 +53376,8 @@ aa aa aa aa +"} +(160,1,1) = {" aa aa aa @@ -58939,52 +53427,10 @@ aa aa aa aa -ae -dc -dz -eg -ae -fe -db -db -gI -ae -hJ -db -db -jt -ae -kv -kW -lD -ae -oD -nv -oD -oD -oz -pP -qy -ri -qu -so -yG -oz -uy -uX -vL -oz -xb -qA -yg -an -oz -ad aa aa aa aa -ad aa aa aa @@ -59001,19 +53447,6 @@ aa aa aa aa -FF -Ga -Ga -Ga -Ga -Gw -Jt -GM -GN -GN -GN -GN -GO aa aa aa @@ -59031,8 +53464,6 @@ aa aa aa aa -ad -Ho aa aa aa @@ -59081,8 +53512,6 @@ aa aa aa aa -"} -(160,1,1) = {" aa aa aa @@ -59130,6 +53559,21 @@ aa aa aa aa +ad +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +ad aa aa aa @@ -59146,6 +53590,8 @@ aa aa aa aa +QV +Ho aa aa aa @@ -59187,6 +53633,8 @@ aa aa aa aa +"} +(161,1,1) = {" aa aa aa @@ -59196,46 +53644,6 @@ aa aa aa aa -ae -dd -dd -aw -ae -ff -db -gg -gJ -ae -hK -db -db -ju -ae -kw -db -lE -ae -mJ -nw -oe -mJ -oz -pQ -qz -rj -qv -sp -sY -oz -uy -uZ -OY -oz -Va -pD -pD -yH -pU aa aa aa @@ -59258,19 +53666,8 @@ aa aa aa aa -FG -FG -FG -FG -FG aa -Jt aa -FG -FG -FG -FG -FG aa aa aa @@ -59288,8 +53685,6 @@ aa aa aa aa -ad -Ho aa aa aa @@ -59338,8 +53733,6 @@ aa aa aa aa -"} -(161,1,1) = {" aa aa aa @@ -59423,8 +53816,21 @@ aa aa aa aa +ad +FG +FG +FG +FG +FG aa +Jt aa +FG +FG +FG +FG +FG +ad aa aa aa @@ -59441,6 +53847,8 @@ aa aa aa aa +QV +Ho aa aa aa @@ -59453,46 +53861,6 @@ aa aa aa aa -ae -dd -dd -aw -ae -fg -gh -OL -gK -ae -hL -in -iQ -jv -ae -kx -db -lF -ae -mJ -mJ -mJ -oE -oz -pR -qA -rk -rR -sq -sZ -oz -uy -uZ -vM -oz -xc -pD -pD -yI -pU aa aa aa @@ -59517,15 +53885,14 @@ aa aa aa aa -ad aa aa aa -Jt aa aa +"} +(162,1,1) = {" aa -ad aa aa aa @@ -59545,8 +53912,6 @@ aa aa aa aa -ad -Ho aa aa aa @@ -59595,8 +53960,6 @@ aa aa aa aa -"} -(162,1,1) = {" aa aa aa @@ -59710,56 +54073,21 @@ aa aa aa aa -ae -dd -dA -eh -ae -fh -db -gi -ae -ae -ae -ae -ae -ae -ae -ky -db -lG -ae -mK -mK -mK -mK -oz -pS -pD -rl -pD -pD -ta -oz -uy -uZ -vN -oz -xd -pD -pD -yJ -pU +ad aa aa +ad aa aa aa +Jt aa aa aa +ad aa aa +ad aa aa aa @@ -59772,21 +54100,12 @@ aa aa aa aa -FE -FE -FE -FE -FE aa -Jt aa -FE -FE -FE -FE -FE aa aa +QV +Ho aa aa aa @@ -59794,7 +54113,6 @@ aa aa aa aa -ad aa aa aa @@ -59802,8 +54120,6 @@ aa aa aa aa -ad -Ho aa aa aa @@ -59831,6 +54147,8 @@ aa aa aa aa +"} +(163,1,1) = {" aa aa aa @@ -59852,8 +54170,6 @@ aa aa aa aa -"} -(163,1,1) = {" aa aa aa @@ -59967,46 +54283,6 @@ aa aa aa aa -ae -ae -ae -ae -ae -cL -cL -cL -ae -hm -hN -io -iR -ZT -db -kz -db -lH -ae -ae -ae -ae -ae -oz -pT -qB -pD -rS -pD -tb -oz -oz -pU -oz -oz -xe -xH -yh -yK -oz aa aa aa @@ -60029,20 +54305,8 @@ aa aa aa aa -FF -Ga -Ga -Ga -Ga -Gw -Jt -GM -GN -GN -GN -GN -GO aa +ab aa aa aa @@ -60051,16 +54315,12 @@ aa aa aa aa -ad aa aa aa aa aa -Jt aa -ad -Kc aa aa aa @@ -60070,8 +54330,21 @@ aa aa aa aa +ad +dl +dl +dl +dl +dl aa +Jt aa +dl +dl +dl +dl +dl +ad aa aa aa @@ -60080,6 +54353,7 @@ aa aa aa aa +ad aa aa aa @@ -60087,6 +54361,8 @@ aa aa aa aa +QV +Ho aa aa aa @@ -60109,8 +54385,6 @@ aa aa aa aa -"} -(164,1,1) = {" aa aa aa @@ -60130,6 +54404,8 @@ aa aa aa aa +"} +(164,1,1) = {" aa aa aa @@ -60230,45 +54506,6 @@ aa aa aa aa -ad -ad -ae -hn -hO -iS -iT -db -jw -db -db -zd -ae -aa -aa -aa -aa -oz -pU -pU -oz -oz -pU -pU -oz -aa -aa -aa -oz -oz -pU -pU -oz -oz -aa -aa -aa -aa -aa aa aa aa @@ -60286,39 +54523,12 @@ aa aa aa aa -FG -FG -FG -FG -FG -aa -GI -aa -FG -FG -FG -FG -FG -aa -aa -aa -aa -aa -aa -aa aa aa -ad aa aa aa aa -ac -Jt -aS -aS -Ke -aS aa aa aa @@ -60366,8 +54576,6 @@ aa aa aa aa -"} -(165,1,1) = {" aa aa aa @@ -60379,6 +54587,21 @@ aa aa aa aa +ad +RF +BP +BP +BP +BP +Gw +Jt +GM +GG +GG +GG +GG +NM +ad aa aa aa @@ -60387,12 +54610,16 @@ aa aa aa aa +ad aa aa aa aa aa +Jt aa +QV +Kc aa aa aa @@ -60434,6 +54661,8 @@ aa aa aa aa +"} +(165,1,1) = {" aa aa aa @@ -60488,19 +54717,6 @@ aa aa aa aa -ad -ae -hM -ip -QP -BC -jx -db -db -db -Qm -ae -ad aa aa aa @@ -60549,7 +54765,6 @@ aa aa aa aa -GJ aa aa aa @@ -60564,18 +54779,8 @@ aa aa aa aa -ad -ad aa aa -ad -ad -Ih -Bz -aS -JR -Kf -Ih aa aa aa @@ -60623,8 +54828,6 @@ aa aa aa aa -"} -(166,1,1) = {" aa aa aa @@ -60641,8 +54844,21 @@ aa aa aa aa +ad +ua +ua +ua +ua +ua aa +Jt aa +ua +ua +ua +ua +ua +ad aa aa aa @@ -60651,10 +54867,17 @@ aa aa aa aa +ad aa aa aa aa +aS +Jt +aS +lX +Ke +aS aa aa aa @@ -60695,6 +54918,8 @@ aa aa aa aa +"} +(166,1,1) = {" aa aa aa @@ -60746,17 +54971,6 @@ aa aa aa aa -ae -ae -ae -ae -tT -ae -jR -db -db -MI -ac aa aa aa @@ -60806,7 +55020,6 @@ aa aa aa aa -GJ aa aa aa @@ -60821,18 +55034,6 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -Ih -NU -aS -JR -Kg -Ih aa aa aa @@ -60880,8 +55081,6 @@ aa aa aa aa -"} -(167,1,1) = {" aa aa aa @@ -60902,16 +55101,21 @@ aa aa aa aa +ad aa aa +ad aa aa aa +Jt aa aa aa +ad aa aa +ad aa aa aa @@ -60919,8 +55123,18 @@ aa aa aa aa +ad +ad aa aa +ad +ad +Ih +Bz +aS +qD +Kf +Ih aa aa aa @@ -60961,6 +55175,8 @@ aa aa aa aa +"} +(167,1,1) = {" aa aa aa @@ -61005,15 +55221,6 @@ aa aa aa aa -ad -ae -ae -ae -ae -cL -cL -cL -ac aa aa aa @@ -61063,7 +55270,6 @@ aa aa aa aa -GP aa aa aa @@ -61077,19 +55283,6 @@ aa aa aa aa -ad -ad -cn -ad -ad -ad -ad -Ih -Ik -aS -JS -Kh -Ih aa aa aa @@ -61137,8 +55330,6 @@ aa aa aa aa -"} -(168,1,1) = {" aa aa aa @@ -61167,8 +55358,21 @@ aa aa aa aa +ad +FE +FE +FE +FE +FE aa +Jt aa +FE +FE +FE +FE +FE +ad aa aa aa @@ -61176,6 +55380,18 @@ aa aa aa aa +ad +ad +ad +ad +ad +ad +Ih +NU +aS +sJ +Kg +Ih aa aa aa @@ -61216,6 +55432,8 @@ aa aa aa aa +"} +(168,1,1) = {" aa aa aa @@ -61334,26 +55552,8 @@ aa aa aa aa -ad -cn -cn -aS -aS -aS -Ih -aS -XT -Il -Il -Jv -aS -Ih -Ih -aS aa aa -ad -ad aa aa aa @@ -61394,8 +55594,6 @@ aa aa aa aa -"} -(169,1,1) = {" aa aa aa @@ -61417,12 +55615,40 @@ aa aa aa aa +ad +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +ad aa aa aa aa aa aa +ad +ad +cn +ad +ad +ad +ad +Ih +Ik +aS +JS +Kh +Ih aa aa aa @@ -61463,6 +55689,11 @@ aa aa aa aa +"} +(169,1,1) = {" +aa +aa +aa aa aa aa @@ -61591,26 +55822,7 @@ aa aa aa aa -ad -aS -lO -aS -cK -Vc -Ns -Il -RC -Il -Il -Il -Il -Il -Il -aS aa -ad -ad -ad aa aa aa @@ -61651,8 +55863,6 @@ aa aa aa aa -"} -(170,1,1) = {" aa aa aa @@ -61662,8 +55872,47 @@ aa aa aa aa +ad +FG +FG +FG +FG +FG +aa +GI +aa +FG +FG +FG +FG +FG +ad +aa +aa +aa +aa +aa +aa +ad +cn +cn +aS +aS +aS +Ih +aS +XT +Il +IQ +Jv +aS +Ih +Ih +aS aa aa +ad +ad aa aa aa @@ -61697,6 +55946,38 @@ aa aa aa aa +"} +(170,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 @@ -61848,26 +56129,6 @@ aa aa aa aa -ad -aS -dL -aS -ID -Il -RC -Il -Td -hE -yP -Il -Il -Il -Il -aS -Lb -Lb -cn -ad ad aa aa @@ -61875,18 +56136,43 @@ aa aa aa aa +GJ aa aa aa aa aa aa +ad aa aa aa aa aa aa +ad +aS +lO +aS +cK +Vc +Ns +Il +RC +Il +mH +yx +yx +yx +tm +aS +aa +ad +ad +ad +aa +aa +aa aa aa aa @@ -61908,8 +56194,6 @@ aa aa aa aa -"} -(171,1,1) = {" aa aa aa @@ -61919,6 +56203,8 @@ aa aa aa aa +"} +(171,1,1) = {" aa aa aa @@ -62100,6 +56386,22 @@ aa aa aa aa +ad +ad +ad +ad +ad +ad +ad +GJ +ad +ad +ad +ad +ad +ad +ad +aa aa aa aa @@ -62107,25 +56409,25 @@ aa aa ad aS -VA +dL aS ID -Of -Cm Il RC -JF -UA -Ki Il +Td +hE +yP Il Il +Il +IQ aS -aS -aS -cn +ad +ad cn ad +ad aa aa aa @@ -62158,6 +56460,8 @@ aa aa aa aa +"} +(172,1,1) = {" aa aa aa @@ -62165,9 +56469,6 @@ aa aa aa aa -"} -(172,1,1) = {" -aa aa aa aa @@ -62349,6 +56650,7 @@ aa aa aa aa +GP aa aa aa @@ -62364,24 +56666,24 @@ aa aa ad aS -gr -Iu -Vc -RW -SI -IE -WZ -JG -Kj -Ra -JB -Ji -Im +VA +aS +ID +Of +Cm +Il +RC +Om +mN +VV Il Il +IQ aS -OO aS +aS +cn +cn ad aa aa @@ -62415,6 +56717,9 @@ aa aa aa aa +"} +(173,1,1) = {" +aa aa aa aa @@ -62422,8 +56727,6 @@ aa aa aa aa -"} -(173,1,1) = {" aa aa aa @@ -62591,7 +56894,6 @@ aa aa aa aa -ab aa aa aa @@ -62621,23 +56923,23 @@ aa aa ad aS -Il -Iv -IF -IF -eJ -Jg -Jg -JH -JT -Kk -JA +gr +Iu +Vc +RW +SI +eC +yi +JG Kj +Ra JB -JB -Lc +Ji +Or +yx +tm aS -Jd +OO aS ad aa @@ -62672,6 +56974,8 @@ aa aa aa aa +"} +(174,1,1) = {" aa aa aa @@ -62679,9 +56983,6 @@ aa aa aa aa -"} -(174,1,1) = {" -aa aa aa aa @@ -62843,6 +57144,7 @@ aa aa aa aa +ab aa aa aa @@ -62879,22 +57181,22 @@ aa ad aS Il -Iw -ID -Il -BN -Jh -Jw -JI -JI -Kl -JI -KA -KJ -Jh -KF +Iv +IF +IF +mv +Jg +Jg +JH +JT +Kk +JA +Kj +JB +JB +xJ aS -YG +Jd aS ad aa @@ -62929,6 +57231,8 @@ aa aa aa aa +"} +(175,1,1) = {" aa aa aa @@ -62936,8 +57240,6 @@ aa aa aa aa -"} -(175,1,1) = {" aa aa aa @@ -63134,24 +57436,24 @@ aa aa aa ad -Ih +aS Il Iw ID -II -KE -Jh -Jx -JJ -JJ -Km -JJ -JJ -Jx -KV -KF Il -RC +BN +Jh +Jw +JI +JI +Kl +JI +KA +KJ +Jh +oV +aS +YG aS ad aa @@ -63186,6 +57488,8 @@ aa aa aa aa +"} +(176,1,1) = {" aa aa aa @@ -63193,8 +57497,6 @@ aa aa aa aa -"} -(176,1,1) = {" aa aa aa @@ -63391,23 +57693,23 @@ aa aa aa ad -aS -Im -Iw -Im +Ih Il -QI +Iw +ID +II +KE Jh -Zx +Jx JJ -JU -JU -Kw -KB -KK -KW -Ld -Il +JJ +Km +JJ +JJ +sR +Jh +Sp +tm RC aS ad @@ -63443,6 +57745,8 @@ aa aa aa aa +"} +(177,1,1) = {" aa aa aa @@ -63450,8 +57754,6 @@ aa aa aa aa -"} -(177,1,1) = {" aa aa aa @@ -63648,23 +57950,23 @@ aa aa aa ad -Ih -Il -Ix -Il +aS +Im +Iw +Im Il -Cu -Cx -Jy -JK +Mm +Jh +Zx +JJ JU -Kn -Kx -VK -KL -KX +JU +Kw +KB +KK +Ru Ld -Im +IQ RC aS ad @@ -63700,6 +58002,8 @@ aa aa aa aa +"} +(178,1,1) = {" aa aa aa @@ -63707,8 +58011,6 @@ aa aa aa aa -"} -(178,1,1) = {" aa aa aa @@ -63905,24 +58207,24 @@ aa aa aa ad -aS -Im -Iw -Im +Ih Il -Cv -Jh -JA -JJ -JU +Ix +Il +Il +Ar +Cx +Jy +JK JU -Ky -JJ -KM -Jh +Kn +Kx +VK +KL +oM Ld -Of -Cm +ZX +RC aS ad aa @@ -63957,6 +58259,8 @@ aa aa aa aa +"} +(179,1,1) = {" aa aa aa @@ -63964,8 +58268,6 @@ aa aa aa aa -"} -(179,1,1) = {" aa aa aa @@ -64162,24 +58464,24 @@ aa aa aa ad -Ih +aS +Im +Iw +Im Il -Iy -IG -IN -BJ +fV Jh JA JJ +JU +JU +Ky JJ -Km -JJ -JJ -Jx -KY -KF -SI -RM +KM +Jh +Ld +Hw +Cm aS ad aa @@ -64214,6 +58516,8 @@ aa aa aa aa +"} +(180,1,1) = {" aa aa aa @@ -64221,8 +58525,6 @@ aa aa aa aa -"} -(180,1,1) = {" aa aa aa @@ -64421,22 +58723,22 @@ aa ad Ih Il -Iw -Il -BH -Cw -JB -Cy -Cy -Cr -JJ +Iy +IG +IN +KY +Jh JA -KC -IY +JJ +JJ +Km +JJ +JJ +sR Jh KF -BN -aS +BG +RM aS ad aa @@ -64471,6 +58773,8 @@ aa aa aa aa +"} +(181,1,1) = {" aa aa aa @@ -64478,8 +58782,6 @@ aa aa aa aa -"} -(181,1,1) = {" aa aa aa @@ -64680,21 +58982,21 @@ Ih Il Iw Il -BI -JN -Jh -Jh -Jh -JA -Ko +uT +Qe +JB +Cy +Cy +Cr +JJ JA +KC +IY Jh -KN -Jh -lS -Mj +KF +SU +aS aS -ad ad aa aa @@ -64728,6 +59030,8 @@ aa aa aa aa +"} +(182,1,1) = {" aa aa aa @@ -64735,8 +59039,6 @@ aa aa aa aa -"} -(182,1,1) = {" aa aa aa @@ -64935,21 +59237,21 @@ aa ad Ih Il -Iw -Il -BJ +lk +sq +LZ JN -Jm -JC Jh Jh Jh +JA +Ko +JA Jh +QY Jh -KO -ID -KF -Il +lS +Mj aS ad ad @@ -64985,6 +59287,8 @@ aa aa aa aa +"} +(183,1,1) = {" aa aa aa @@ -64992,8 +59296,6 @@ aa aa aa aa -"} -(183,1,1) = {" aa aa aa @@ -65192,31 +59494,24 @@ aa ad Ih Il -Iw -II -BK -JN -Jn -Jn -JL -JW -Kp +lk +sq +Nn JN -Sk +Jm +JC +Jh +Jh +Jh +Jh +Jh +KO +ID +KF IQ -Il -Le -Lc aS ad ad -ad -aa -aa -aa -aa -aa -aa aa aa aa @@ -65446,28 +59741,35 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa ad Ih Il -Iw -Il -BJ +lk +dS +Ca JN Jn Jn -Jn -JD -Kq -Kz -IG -KP -aS -aS -Lm -aS -aS +JL +JW +Kp +JN +Sk +yE +yx +lR +Lc aS ad +ad +ad aa aa aa @@ -65499,6 +59801,8 @@ aa aa aa aa +"} +(185,1,1) = {" aa aa aa @@ -65506,8 +59810,6 @@ aa aa aa aa -"} -(185,1,1) = {" aa aa aa @@ -65704,25 +60006,25 @@ aa aa aa ad -aS -Im -Iw -Sk -BJ +Ih +Il +lk +sq +Nn JN -Jo -JD -JD +Jn +Jn +Jn JD -Kr -JN -Il -KQ +Kq +XB +IG +KP +aS +aS +Lm +aS aS -Lf -Ln -Lv -LB aS ad aa @@ -65731,7 +60033,6 @@ aa aa aa aa -ab aa aa aa @@ -65757,14 +60058,16 @@ aa aa aa aa +"} +(186,1,1) = {" +aa +aa aa aa aa aa aa aa -"} -(186,1,1) = {" aa aa aa @@ -65909,7 +60212,6 @@ aa aa aa aa -ab aa aa aa @@ -65961,26 +60263,26 @@ aa aa aa ad -Ih -Il -Iw -IJ -BL -Ch -Jp -Jp -JM -JX -Ks +aS +Im +lk +Vw +Nn +JN +Jo +JD +JD +JD +Kr JN Il KQ aS -Lg -Lo -Lw -LC -Ih +Lf +Ln +Lv +LB +aS ad aa aa @@ -65988,6 +60290,7 @@ aa aa aa aa +ab aa aa aa @@ -66012,6 +60315,8 @@ aa aa aa aa +"} +(187,1,1) = {" aa aa aa @@ -66020,10 +60325,6 @@ aa aa aa aa -"} -(187,1,1) = {" -aa -aa aa aa aa @@ -66161,6 +60462,7 @@ aa aa aa aa +ab aa aa aa @@ -66218,25 +60520,25 @@ aa aa aa ad -aS -Im -Iw -Im -Cd -JN -Jq -JD -JD -JD -Kt +Ih +Il +lk +IJ +Pc +Ch +Jp +Jp +JM +JX +Ks JN -KD -KR -KZ -Lh -Lp -Lx -LD +Il +KQ +aS +Lg +Lo +Lw +LC Ih ad aa @@ -66270,6 +60572,8 @@ aa aa aa aa +"} +(188,1,1) = {" aa aa aa @@ -66277,8 +60581,6 @@ aa aa aa aa -"} -(188,1,1) = {" aa aa aa @@ -66475,25 +60777,25 @@ aa aa aa ad -Ih -Il -Iy -IG -Ce -Cp -Jn -Jn -Jn +aS +Im +lk +nF +Xt +JN +Jq JD -Ku -Js -KE -KS -La -Li -yC -JR -JR +JD +JD +Kt +JN +KD +KR +KZ +Lh +Lp +Lx +LD Ih ad aa @@ -66527,6 +60829,10 @@ aa aa aa aa +"} +(189,1,1) = {" +aa +aa aa aa aa @@ -66534,8 +60840,6 @@ aa aa aa aa -"} -(189,1,1) = {" aa aa aa @@ -66727,30 +61031,28 @@ aa aa aa aa -ab aa aa ad -ad -aS -Il -Iw +Ih Il -KF -JN +xO +uI +Cw +Cp Jn Jn Jn -JY -Kv -JN -KF -KT -aS -Lj +JD +Ku +tw +KE +KS +La +Li +yC +JR JR -Ly -LE Ih ad aa @@ -66784,6 +61086,8 @@ aa aa aa aa +"} +(190,1,1) = {" aa aa aa @@ -66791,9 +61095,6 @@ aa aa aa aa -"} -(190,1,1) = {" -aa aa aa aa @@ -66985,29 +61286,30 @@ aa aa aa aa +ab aa aa ad ad aS -In -Iz -IL -Cf -JN -Jr -JE -JN -JN +Il +lk +sq +Tc JN +Jn +Jn +Jn +JY +Kv JN -KG +KF KT aS -Lk +Lj JR -Lz -LF +Ly +LE Ih ad aa @@ -67041,6 +61343,8 @@ aa aa aa aa +"} +(191,1,1) = {" aa aa aa @@ -67048,8 +61352,6 @@ aa aa aa aa -"} -(191,1,1) = {" aa aa aa @@ -67247,25 +61549,25 @@ aa ad ad aS -jQ -lk -lk -Bi +In +Iz +IL +eU JN +Jr +JE JN JN JN -Cs -Il -Il -KF +JN +KG KT aS -Ll -Bh -LA -LG -aS +Lk +JR +Lz +LF +Ih ad aa aa @@ -67298,6 +61600,8 @@ aa aa aa aa +"} +(192,1,1) = {" aa aa aa @@ -67305,8 +61609,6 @@ aa aa aa aa -"} -(192,1,1) = {" aa aa aa @@ -67502,26 +61804,26 @@ aa aa aa ad +ad aS -aS -Ip +jQ +JN +JN +Bi +JN +JN +JN +JN +Cs Il Il -Cg -Cq -Cq -Cq -Cq -Cq -Cq -Cq -Ct -KU -aS -aS -zZ -aS +KF +KT aS +Ll +Bh +LA +LG aS ad aa @@ -67555,6 +61857,8 @@ aa aa aa aa +"} +(193,1,1) = {" aa aa aa @@ -67562,8 +61866,6 @@ aa aa aa aa -"} -(193,1,1) = {" aa aa aa @@ -67760,27 +62062,26 @@ aa aa ad aS -jH -li -Jv aS -Ih -Ih +Ip +Il +Il +Cg +Cq +Cq +Cq +Cq +Cq +Cq +Cq +Ct +KU aS -Ih -Ih aS -Ih +zZ +aS aS -YT -IW -IG -IG -Lu aS -ad -ad -ad ad aa aa @@ -67813,14 +62114,16 @@ aa aa aa aa +"} +(194,1,1) = {" +aa +aa aa aa aa aa aa aa -"} -(194,1,1) = {" aa aa aa @@ -67939,7 +62242,6 @@ aa aa aa aa -ab aa aa aa @@ -68017,28 +62319,28 @@ aa aa ad aS -Il -lj -Il +jH +li +Jv +aS +Ih +Ih +aS +Ih +Ih +aS +Ih +aS +YT +IW +IG +IG +Lu aS ad ad ad ad -ad -ad -ad -ac -Le -CG -CF -BF -Cz -aS -ad -aa -aa -aa aa aa aa @@ -68069,6 +62371,8 @@ aa aa aa aa +"} +(195,1,1) = {" aa aa aa @@ -68076,8 +62380,6 @@ aa aa aa aa -"} -(195,1,1) = {" aa aa aa @@ -68274,23 +62576,23 @@ aa aa ad aS +Il +lj +Il aS -lm -aS -aS -aa ad ad -aa -aa ad ad -ac -Il -Il -CH -Ij -Ij +ad +ad +ad +aS +Le +CG +CF +BF +Cz aS ad aa @@ -68326,6 +62628,8 @@ aa aa aa aa +"} +(196,1,1) = {" aa aa aa @@ -68333,8 +62637,6 @@ aa aa aa aa -"} -(196,1,1) = {" aa aa aa @@ -68527,27 +62829,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -It -ad aa aa +ad +aS +aS +mw +aS +aS aa ad +ad aa aa ad -aa -ac -Ih -Ih +ad aS -Ih -Ih +Il +Il +CH +Ij +Ij aS ad aa @@ -68583,13 +62885,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa "} (197,1,1) = {" aa @@ -68787,17 +63082,7 @@ aa aa aa aa -ad -ad -ad -ad -aa -aa -aa -ad -aa aa -ad aa aa aa @@ -68806,14 +63091,24 @@ ad ad ad ad +It ad aa aa aa +ad aa aa +ad aa -aa +aS +Ih +Ih +aS +Ih +Ih +aS +ad aa aa aa @@ -69044,33 +63339,33 @@ aa aa aa aa -ad -aa aa aa aa aa aa -ad aa aa ad -aa -aa -aa ad -aa ad -aa ad aa aa aa +ad aa aa +ad aa aa aa +ad +ad +ad +ad +ad +ad aa aa aa @@ -69301,9 +63596,6 @@ aa aa aa aa -ad -aa -aa aa aa aa @@ -69311,6 +63603,7 @@ aa aa aa aa +ad aa aa aa @@ -69320,13 +63613,15 @@ aa ad aa aa +ad aa aa aa +ad aa +ad aa -aa -aa +ad aa aa aa @@ -69558,7 +63853,6 @@ aa aa aa aa -ad aa aa aa @@ -69566,6 +63860,7 @@ aa aa aa aa +ad aa aa aa @@ -69574,7 +63869,6 @@ aa aa aa aa -ad aa aa aa @@ -69582,6 +63876,7 @@ aa aa aa aa +ad aa aa aa @@ -69822,6 +64117,7 @@ aa aa aa aa +ad aa aa aa @@ -69837,8 +64133,7 @@ aa aa aa aa -aa -aa +ad aa aa aa diff --git a/maps/ministation/ministation-1.dmm b/maps/ministation/ministation-1.dmm new file mode 100644 index 00000000000..9cf8278f3bf --- /dev/null +++ b/maps/ministation/ministation-1.dmm @@ -0,0 +1,73690 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/abstract/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) +"ac" = ( +/turf/simulated/wall, +/area/space) +"ad" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"ae" = ( +/obj/item/stool/padded, +/obj/structure/sign/warning/nosmoking_2{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"af" = ( +/turf/exterior/wall/random/ministation, +/area/space) +"aj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"al" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ar" = ( +/obj/structure/table, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/machinery/button/blast_door{ + id_tag = "CMO1"; + name = "CMO Shutter Button"; + pixel_y = 24 + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"at" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"ax" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"az" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"aB" = ( +/obj/structure/disposalpipe/junction/mirrored{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"aD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"aG" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"aH" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"aL" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"aR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"aU" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ministation/hop) +"aV" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"aW" = ( +/turf/simulated/floor/wood, +/area/ministation/detective) +"bj" = ( +/turf/simulated/wall, +/area/ministation/cafe) +"bo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"bp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"br" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/mouse/brown/Tom, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"bs" = ( +/obj/structure/ladder, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"bu" = ( +/turf/simulated/wall, +/area/ministation/maint/l2underpass) +"bv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"bw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"bx" = ( +/obj/item/storage/secure/safe{ + pixel_x = 4; + pixel_y = 26 + }, +/obj/machinery/network/requests_console{ + department = "Detective's office"; + pixel_x = 32; + initial_network_id = "molluscnet"; + dir = 4 + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"by" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/turf/simulated/floor/tiled, +/area/ministation/security) +"bA" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"bB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"bG" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "32-2" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, +/obj/structure/disposalpipe/down, +/turf/open, +/area/ministation/maint/l2centraln) +"bH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"bI" = ( +/obj/effect/floor_decal/ss13/l13, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"bJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"bN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"bQ" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "quarantine"; + name = "Infirmary Quarantine Button"; + directional_offset = null + }, +/obj/machinery/button/alternate/door{ + id_tag = "medleave"; + name = "Interior medbay doors button"; + pixel_y = 8; + directional_offset = null + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"bU" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/camera/autoname, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"cd" = ( +/obj/machinery/vending/hydronutrients{ + dir = 1 + }, +/obj/effect/floor_decal/corner/beige/half, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"cf" = ( +/obj/machinery/cryopod, +/obj/abstract/landmark/latejoin, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"cg" = ( +/obj/abstract/landmark{ + name = "carpspawn" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"cm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"cq" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"cr" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"ct" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/hydro) +"cv" = ( +/obj/machinery/alarm{ + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/hop) +"cA" = ( +/obj/structure/table/woodentable, +/obj/item/flashlight/lamp/green, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/turf/simulated/floor/carpet, +/area/ministation/hop) +"cE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"cH" = ( +/obj/structure/catwalk, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open, +/area/ministation/hall/w2) +"cN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"cQ" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"cU" = ( +/obj/machinery/door/airlock{ + name = "Cryo B" + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"cY" = ( +/turf/simulated/wall/r_wall, +/area/ministation/security) +"da" = ( +/turf/simulated/wall, +/area/ministation/security) +"db" = ( +/obj/machinery/power/apc{ + name = "_South APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/detective) +"dc" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"dd" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"dq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + name = "Hydroponics" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"dr" = ( +/turf/simulated/floor/tiled, +/area/ministation/security) +"ds" = ( +/obj/machinery/computer/cryopod{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"dE" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/machinery/lapvend{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"dK" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/open, +/area/ministation/hall/w2) +"dN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"dQ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"dS" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"dU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"dW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"dZ" = ( +/obj/machinery/door/window/brigdoor/westleft, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"eb" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"ed" = ( +/turf/simulated/floor/plating, +/area/ministation/arrival) +"ef" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"eg" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"em" = ( +/obj/machinery/vending/cola, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"eo" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"er" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"et" = ( +/obj/effect/floor_decal/snow, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"ew" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/ministation/security) +"ex" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"ey" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ez" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"eH" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "_East APC"; + pixel_x = 27; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"eK" = ( +/obj/machinery/door/airlock/hatch/autoname/command, +/turf/simulated/floor/tiled, +/area/ministation/security) +"eV" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"eZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"fd" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/obj/machinery/computer/modular/telescreen/preset/generic{ + name = "south bump"; + pixel_y = -20; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"fe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"fr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"fu" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/southright, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/shutters{ + name = "office shutters"; + id_tag = "hopshut" + }, +/turf/simulated/floor/plating, +/area/ministation/hop) +"fw" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"fx" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"fy" = ( +/obj/structure/table, +/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"fC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood, +/obj/structure/sign/department/redcross{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"fD" = ( +/obj/structure/kitchenspike, +/obj/effect/floor_decal/snow, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"fF" = ( +/obj/structure/ladder, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"fY" = ( +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"gb" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"gc" = ( +/obj/structure/closet/secure_closet/brig, +/turf/simulated/floor/tiled, +/area/ministation/security) +"ge" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"gp" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"gz" = ( +/turf/open, +/area/ministation/hall/e2) +"gB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/hygiene/drain, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"gC" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"gD" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastright{ + id_tag = "Cell 2" + }, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"gE" = ( +/obj/structure/table/reinforced, +/obj/item/toy/eightball, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"gJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"gL" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "_East APC"; + pixel_x = 27; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/hydro) +"gS" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/abstract/landmark/latejoin/cryo, +/obj/machinery/camera/network/medbay{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"gT" = ( +/turf/simulated/floor/carpet, +/area/ministation/hop) +"gU" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"gX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"ha" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hb" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/door_timer/cell_2{ + pixel_x = 31; + pixel_y = -1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/ministation/security) +"hd" = ( +/obj/structure/bed, +/obj/item/bedsheet/mime, +/obj/item/radio/intercom{ + dir = 1; + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hh" = ( +/obj/structure/bed/chair/office/light, +/obj/abstract/landmark/start{ + name = "Medical Doctor" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"hi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"hj" = ( +/obj/machinery/door/airlock{ + locked = 1; + name = "helm" + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"hl" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"hm" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"hr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"hs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"hu" = ( +/obj/abstract/landmark/start{ + name = "Lieutenant" + }, +/turf/simulated/floor/carpet, +/area/ministation/hop) +"hv" = ( +/obj/machinery/seed_extractor, +/obj/effect/floor_decal/corner/beige/half, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"hw" = ( +/obj/structure/table, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/head/earmuffs, +/obj/item/clothing/head/earmuffs, +/obj/machinery/status_display{ + pixel_y = 30 + }, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hx" = ( +/obj/structure/table, +/obj/item/storage/box/handcuffs{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/flashbangs, +/obj/machinery/recharger/wallcharger{ + pixel_y = 25 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hz" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hA" = ( +/obj/abstract/landmark/start{ + name = "Medical Doctor" + }, +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"hC" = ( +/obj/structure/table/woodentable, +/obj/item/camera/loaded, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/taperecorder, +/obj/item/folder/yellow, +/obj/structure/filing_cabinet/wall{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"hH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"hO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"hQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"hX" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hY" = ( +/obj/structure/table, +/obj/item/assembly/timer, +/obj/item/flash, +/turf/simulated/floor/tiled, +/area/ministation/security) +"hZ" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/security) +"ia" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/door_timer/cell_1{ + pixel_x = 31 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"ib" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"id" = ( +/obj/structure/table/woodentable, +/obj/item/folder/red, +/obj/item/hand_labeler, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"if" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"ih" = ( +/obj/machinery/door/airlock{ + name = "ATMOS"; + locked = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"ii" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"in" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"iq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"ir" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"is" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"iv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"ix" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iz" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iA" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iB" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/eastright{ + id_tag = "Cell 1" + }, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iD" = ( +/obj/structure/table/reinforced, +/obj/item/synthesized_instrument/violin, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"iE" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"iG" = ( +/obj/structure/table/woodentable, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/storage/box/fancy/cigarettes, +/obj/item/handcuffs, +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/obj/item/clothing/head/beret/corp/sec, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"iH" = ( +/obj/item/stool/padded, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"iK" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2underpass) +"iN" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"iR" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"iW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"iY" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"jd" = ( +/obj/machinery/computer/station_alert/security{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"je" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"jg" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/button/alternate/door{ + dir = 1; + id_tag = "secdoor"; + name = "security airlock access button"; + pixel_x = -25; + pixel_y = -25 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"jh" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"jk" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/camera/network/security{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"js" = ( +/obj/machinery/computer/modular/preset/medical, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"jy" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"jA" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"jF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/mob/living/simple_animal/corgi/Ian, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"jH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"jO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/hallway{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"jR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"jS" = ( +/obj/structure/table, +/obj/item/book/skill/service/cooking, +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"jT" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/item/storage/pill_bottle, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/eftpos, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"jU" = ( +/turf/simulated/wall, +/area/ministation/maint/sebypass) +"jV" = ( +/obj/effect/floor_decal/corner/green/half, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"jW" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"jZ" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"kh" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"km" = ( +/obj/structure/closet/secure_closet/medical3, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"kr" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"kv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"kB" = ( +/obj/structure/dogbed, +/obj/item/clothing/shoes/color/brown{ + desc = "Old, but sensible brown shoes. These belong to Ian." + }, +/obj/item/radio/intercom/locked/entertainment{ + dir = 1; + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"kC" = ( +/obj/machinery/vending/snack, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"kE" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"kI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"kM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"kR" = ( +/obj/structure/table, +/obj/item/chems/glass/rag, +/obj/item/trash/stick, +/obj/item/utensil/spoon, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"kS" = ( +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/medical) +"kX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/abstract/landmark/latejoin/observer, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"kZ" = ( +/turf/simulated/wall, +/area/ministation/hall/w2) +"la" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/e2) +"ln" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/ss13/l12, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"lo" = ( +/obj/machinery/door/airlock/external{ + locked = 1; + id_tag = "l2_central_north_airlock_exterior"; + autoset_access = 0 + }, +/obj/machinery/button/access/interior{ + id_tag = "l2_central_north_airlock"; + name = "exterior access button"; + pixel_y = 24; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"lw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"ly" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"lB" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"lF" = ( +/turf/simulated/wall, +/area/ministation/maint/nebypass) +"lH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"lI" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/bed/chair, +/obj/machinery/status_display{ + pixel_x = -32; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"lJ" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = -30; + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"lL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"lN" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"lQ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -11 + }, +/obj/item/chems/glass/bucket, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"lR" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"mc" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/open, +/area/ministation/hall/w2) +"md" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"mf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"mh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"mi" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "_West APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"mj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"mk" = ( +/obj/structure/window/reinforced, +/obj/structure/table, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/security) +"mp" = ( +/obj/structure/closet/secure_closet{ + req_access = list("ACCESS_FORENSICS"); + name = "evidence locker"; + closet_appearance = /decl/closet_appearance/secure_closet/security + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"mq" = ( +/turf/simulated/wall, +/area/ministation/maint/l2centraln) +"mw" = ( +/obj/machinery/light/small, +/obj/effect/floor_decal/snow, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"mz" = ( +/obj/machinery/door/airlock/glass/security, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"mC" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"mG" = ( +/obj/machinery/atmospherics/unary/engine, +/turf/space, +/area/ministation/arrival) +"mH" = ( +/turf/simulated/wall, +/area/ministation/hall/e2) +"mJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/flora/bush/fullgrass, +/obj/structure/flora/bush/lavendergrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"mL" = ( +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"mO" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"mR" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"mW" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"nf" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/medical, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"no" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled, +/area/ministation/security) +"np" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + id_tag = "l2_central_north_airlock_interior"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/button/access/interior{ + id_tag = "l2_central_north_airlock"; + name = "interior access button"; + pixel_y = 24 + }, +/turf/simulated/floor, +/area/ministation/maint/l2centraln) +"ns" = ( +/obj/structure/sign/department/id_office{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"nu" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/gun/projectile/automatic/assault_rifle, +/turf/simulated/floor/tiled, +/area/ministation/security) +"nx" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + id_tag = "station1"; + tag_airpump = "escape1_vent"; + tag_chamber_sensor = "escape1_sensor"; + tag_exterior_door = "escape1_airlock_exterior"; + tag_interior_door = "escape1_airlock_interior"; + pixel_x = -20 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"nB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"nC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"nD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"nF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"nK" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + id_tag = "l2_central_south_airlock_interior"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/button/access/interior{ + id_tag = "l2_central_south_airlock"; + name = "interior access button"; + pixel_x = 20; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"nS" = ( +/obj/item/gun/energy/taser, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/gun/energy/taser, +/obj/item/gun/projectile/shotgun/doublebarrel/sawn, +/obj/item/gun/projectile/shotgun/doublebarrel/sawn, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/item/storage/box/ammo/shotgunshells, +/obj/item/storage/box/ammo/shotgunshells, +/turf/simulated/floor/tiled, +/area/ministation/security) +"nX" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"ob" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "_West APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/security) +"oc" = ( +/obj/structure/rack, +/obj/random/maintenance, +/obj/item/clothing/suit/storage/toggle/bomber, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"od" = ( +/obj/structure/skele_stand, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"oj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"ol" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"on" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"or" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"ov" = ( +/obj/structure/table/reinforced, +/obj/machinery/camera/autoname, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/item/storage/medical_lolli_jar{ + pixel_y = 7 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"oz" = ( +/turf/simulated/wall, +/area/ministation/medical) +"oA" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/southright, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/turf/simulated/floor/plating, +/area/ministation/medical) +"oB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"oD" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"oE" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"oF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"oH" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"oN" = ( +/obj/effect/shuttle_landmark/escape_shuttle/station, +/turf/space, +/area/space) +"oS" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"oW" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"oX" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"oY" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"oZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"pb" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sqm_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sqm_airlock"; + name = "exterior access button"; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"pd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"pe" = ( +/obj/item/stool/padded, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pf" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ph" = ( +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"pl" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"pr" = ( +/turf/simulated/floor/airless, +/area/space) +"ps" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall, +/area/ministation/hall/w2) +"pu" = ( +/obj/structure/closet/crate/bin/ministation, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"pw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"pA" = ( +/obj/structure/table, +/obj/item/chems/drinks/glass2/mug, +/obj/item/chems/drinks/glass2/mug, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"pD" = ( +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"pG" = ( +/obj/structure/sign/plaque/diploma/medical{ + pixel_y = 31 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"pH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/item/stool/padded, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"pI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/item/stool/padded, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_y = 33; + pixel_x = -1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall, +/area/ministation/medical) +"pK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/body_scan_display{ + pixel_y = 20; + id_tag = "mediscanner" + }, +/obj/machinery/bodyscanner{ + dir = 8; + id_tag = "mediscanner" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/machinery/body_scanconsole{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/vending/medical{ + pixel_x = -2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/camera/network/medbay, +/obj/structure/bed/roller, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pP" = ( +/obj/structure/table, +/obj/item/surgicaldrill, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pQ" = ( +/obj/structure/table, +/obj/item/hemostat, +/obj/item/retractor, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pR" = ( +/obj/structure/table, +/obj/item/scalpel{ + pixel_y = 12 + }, +/obj/item/circular_saw, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pS" = ( +/obj/structure/table, +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/item/bonesetter, +/obj/item/bonegel, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pT" = ( +/obj/structure/table, +/obj/item/cautery{ + pixel_x = 4 + }, +/obj/item/sutures, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"pU" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/medical) +"pY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"qe" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"qf" = ( +/turf/simulated/wall, +/area/ministation/maint/l2centrals) +"qg" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/meter{ + name = "Distribution Loop" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"qk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"qn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table, +/obj/item/book/skill/medical, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"qo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table, +/obj/item/newspaper, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"qp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"qq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"qr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qs" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/airlock/double/medical{ + name = "medbay airlock"; + autoset_access = 0; + id_tag = "medleave"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qy" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/closet/secure_closet/cmo, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"qB" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + id_tag = "Kitchen1"; + name = "Kitchen" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"qF" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"qI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"qL" = ( +/obj/machinery/airlock_sensor{ + id_tag = "l2_central_north_sensor"; + pixel_y = 24; + pixel_x = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "l2_central_north_airlock"; + pixel_y = 24; + tag_airpump = "l2_central_north_vent"; + tag_chamber_sensor = "l2_central_north_sensor"; + tag_exterior_door = "l2_central_north_airlock_exterior"; + tag_interior_door = "l2_central_north_airlock_interior"; + pixel_x = -8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"qM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"qN" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/turf/open, +/area/ministation/hall/w2) +"qO" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/item/radio/intercom{ + dir = 1; + pixel_y = -30 + }, +/obj/abstract/landmark/latejoin/cryo, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"qS" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/space, +/area/ministation/security) +"qT" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"qX" = ( +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"qY" = ( +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"qZ" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"ra" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/blue2, +/area/ministation/medical) +"rb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rc" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/status_display{ + pixel_x = -32; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rd" = ( +/obj/abstract/landmark/start{ + name = "Medical Doctor" + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/machinery/button/alternate/door{ + dir = 4; + id_tag = "medleave"; + name = "Interior medbay doors button"; + pixel_x = -32; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"re" = ( +/obj/abstract/landmark/start{ + name = "Medical Doctor" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ri" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rk" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ro" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"rt" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"ry" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/turf/open, +/area/ministation/hall/w2) +"rA" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rC" = ( +/obj/machinery/airlock_sensor{ + id_tag = "l2_central_south_sensor"; + pixel_y = 10; + pixel_x = -20; + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "l2_central_south_airlock"; + pixel_y = null; + tag_airpump = "l2_central_south_vent"; + tag_chamber_sensor = "l2_central_south_sensor"; + tag_exterior_door = "l2_central_south_airlock_exterior"; + tag_interior_door = "l2_central_south_airlock_interior"; + dir = 4; + pixel_x = -20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"rD" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/closet/secure_closet/hop, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"rE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rI" = ( +/obj/item/stool/padded, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rL" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/structure/curtain/medical, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rM" = ( +/obj/machinery/status_display{ + pixel_y = -29; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rP" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall, +/area/ministation/medical) +"rR" = ( +/obj/machinery/vitals_monitor, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rS" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/camera/network/medbay{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"rU" = ( +/obj/structure/table, +/obj/machinery/faxmachine/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"rW" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"rX" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"sg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"sh" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"si" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/machinery/door/airlock/double/medical{ + name = "Medbay Lobby airlock"; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sk" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sm" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sn" = ( +/obj/structure/table, +/obj/item/storage/box/gloves, +/obj/item/storage/box/masks, +/obj/item/clothing/suit/surgicalapron, +/obj/item/clothing/suit/surgicalapron, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"so" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sp" = ( +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/w2) +"sq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ss" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"st" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"su" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atm{ + pixel_y = 32 + }, +/obj/machinery/camera/network/hallway, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"sv" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"sB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"sC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sG" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"sI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"sM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/department/forensics{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sS" = ( +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"sU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/sign/department/security/alt{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"sX" = ( +/obj/machinery/sleeper/standard, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"sY" = ( +/obj/structure/table, +/obj/item/chems/dropper, +/obj/item/chems/glass/beaker, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ta" = ( +/obj/structure/iv_drip, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"tb" = ( +/obj/item/chems/ivbag/blood/aminus, +/obj/item/chems/ivbag/blood/aplus, +/obj/item/chems/ivbag/blood/bminus, +/obj/item/chems/ivbag/blood/bplus, +/obj/item/chems/ivbag/blood/ominus, +/obj/item/chems/ivbag/blood/oplus, +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"te" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tf" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/ss13/l1, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/ss13/l3, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"th" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/ss13/l5, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ti" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/ss13/l7, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/ss13/l9, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tl" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"tm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"tq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tt" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tv" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/turf/open, +/area/ministation/hall/e2) +"tx" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"ty" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tz" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tD" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tE" = ( +/obj/abstract/landmark{ + name = "lightsout" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tH" = ( +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"tI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"tJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"tL" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/green/half, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/wall, +/area/ministation/hall/w2) +"tN" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/medical, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"tO" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"tP" = ( +/obj/effect/floor_decal/ss13/l10, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tS" = ( +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cooker/fryer, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"tT" = ( +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"tU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"tW" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"tZ" = ( +/obj/machinery/vending/coffee{ + dir = 4; + pixel_x = -5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ua" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ub" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"uc" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ud" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/ss13/l6, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ue" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ug" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ui" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"ul" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"um" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"un" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + level = 2 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/security) +"up" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"uq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"us" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"ut" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"uu" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"uv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"ux" = ( +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"uy" = ( +/obj/structure/morgue, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"uB" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"uC" = ( +/obj/machinery/alarm{ + pixel_y = 23 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"uD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"uG" = ( +/obj/structure/bed/chair/office/comfy/brown{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"uH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"uI" = ( +/turf/simulated/wall/r_wall, +/area/ministation/hop) +"uJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"uK" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"uL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/cafe) +"uM" = ( +/obj/effect/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/cafe) +"uN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/civilian{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/cafe) +"uP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"uV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/sign/warning/nosmoking_1{ + pixel_x = -32; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"uW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"uX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"uZ" = ( +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"vb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"ve" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + name = "office shutters"; + id_tag = "hopshut" + }, +/turf/simulated/floor/plating, +/area/ministation/hop) +"vf" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + name = "office shutters"; + id_tag = "hopshut" + }, +/turf/simulated/floor/plating, +/area/ministation/hop) +"vi" = ( +/obj/machinery/door/window/brigdoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"vm" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"vn" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"vp" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/machinery/door/window/brigdoor/eastleft, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/medical) +"vq" = ( +/obj/structure/closet/secure_closet/detective, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/turf/simulated/floor/wood, +/area/ministation/detective) +"vr" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"vt" = ( +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/obj/structure/flora/pottedplant/minitree, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vv" = ( +/obj/structure/flora/pottedplant/unusual, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vy" = ( +/obj/machinery/vending/boozeomat, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vz" = ( +/obj/structure/table, +/obj/machinery/chemical_dispenser/bar_coffee/full, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vA" = ( +/obj/structure/table, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vE" = ( +/obj/item/synthesized_instrument/guitar, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southright, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"vF" = ( +/obj/machinery/computer/arcade, +/obj/structure/noticeboard{ + default_pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vG" = ( +/obj/machinery/atm{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"vH" = ( +/obj/structure/table, +/obj/item/chems/dropper, +/obj/item/storage/box/syringes, +/obj/item/mollusc/clam, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"vJ" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/mob/living/simple_animal/crow{ + desc = "She's not a real doctor but she is a real bird."; + name = "Dr. Bird"; + stop_automated_movement = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"vK" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/medical) +"vL" = ( +/obj/machinery/door/airlock/medical{ + name = "Head Doctor" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"vM" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/closet/coffin, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"vN" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags, +/obj/item/pen, +/obj/item/radio/intercom{ + dir = 1; + pixel_y = -30 + }, +/obj/item/scanner/autopsy, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"vO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"vP" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"vS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/command{ + name = "Head of Personell" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"vT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "hopshut"; + name = "Office Shutters Button"; + pixel_y = 30 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"vU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"vV" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"wc" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"wk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wm" = ( +/obj/item/stool/bar/padded, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"wn" = ( +/obj/structure/table/marble, +/obj/structure/sign/painting/monkey_painting{ + pixel_y = 24 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/item/sticky_pad{ + pixel_x = -8; + pixel_y = 1 + }, +/obj/structure/flora/pottedplant/flower, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"wo" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/button/blast_door{ + id_tag = "barshut"; + name = "Bar Shutters Button"; + pixel_x = -24; + pixel_y = 36 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wp" = ( +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wq" = ( +/obj/structure/hygiene/sink/kitchen{ + dir = 8; + pixel_x = 21 + }, +/obj/machinery/light_switch{ + pixel_x = 27; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wr" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/turf/open, +/area/ministation/maint/l2centrals) +"ws" = ( +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"wt" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"wu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"ww" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wx" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"wy" = ( +/obj/machinery/chem_master, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wA" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/westright, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/plating, +/area/ministation/medical) +"wB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wC" = ( +/obj/machinery/camera/network/medbay{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"wE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"wF" = ( +/turf/simulated/floor/tiled, +/area/ministation/hop) +"wL" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/effect/decal/cleanable/blood, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"wN" = ( +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"wO" = ( +/obj/item/chems/condiment/small/peppermill, +/obj/item/utensil/knife, +/obj/item/utensil/fork, +/obj/structure/table/gamblingtable, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/gamblingtable, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wQ" = ( +/obj/structure/table/marble, +/obj/item/storage/box/fancy/donut, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"wR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wS" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/table, +/obj/item/flame/lighter/zippo, +/obj/item/chems/drinks/shaker, +/obj/item/clothing/head/collectable/tophat, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"wW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"wY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"wZ" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xa" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/medical{ + name = "Morgue" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"xb" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"xc" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table, +/obj/item/cell/device/high, +/obj/item/cell/device/high, +/obj/item/defibrillator/loaded, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xd" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"xe" = ( +/obj/machinery/recharger, +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xf" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"xj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"xo" = ( +/obj/item/utensil/spoon, +/obj/item/chems/condiment/small/saltshaker, +/obj/item/chems/condiment/small/sugar, +/obj/structure/table/gamblingtable, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/deck/cards, +/obj/structure/table/gamblingtable, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xq" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/obj/item/stool/padded, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xs" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/item/plate/tray, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"xt" = ( +/obj/structure/table, +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/obj/machinery/chemical_dispenser/bar_alc/full{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"xy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"xz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"xA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/medical{ + name = "Chemistry" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xF" = ( +/obj/machinery/camera/network/medbay{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"xH" = ( +/obj/structure/table, +/obj/item/storage/firstaid/fire{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"xJ" = ( +/turf/simulated/wall, +/area/ministation/hop) +"xK" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"xO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"xQ" = ( +/obj/item/stool/padded, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xT" = ( +/obj/item/stool/bar/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"xU" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"xV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"xW" = ( +/obj/structure/table/marble, +/obj/machinery/status_display{ + pixel_y = -29; + dir = 1 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/item/chems/condiment/ketchup, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + id_tag = "barshut"; + name = "Bar Shutters" + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"xY" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/space, +/area/space) +"xZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"ya" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/camera/network/security{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"yb" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder/juicer, +/obj/item/chems/glass/beaker, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yc" = ( +/obj/structure/table, +/obj/machinery/reagent_temperature/cooler, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ye" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"yf" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/hydro) +"yg" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yh" = ( +/obj/structure/table, +/obj/item/storage/firstaid/toxin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/firstaid/toxin{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yk" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open, +/area/ministation/maint/nebypass) +"yl" = ( +/obj/structure/displaycase, +/obj/item/clothing/mask/gas/owl_mask{ + desc = "So realistic, you'd almost think it's the real thing."; + name = "replica 'The Owl' mask"; + pixel_x = 1; + pixel_y = -5 + }, +/obj/machinery/light_switch{ + pixel_y = 29; + pixel_x = 7 + }, +/turf/simulated/floor/carpet, +/area/ministation/hop) +"yn" = ( +/obj/random/trash, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"yu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/media/jukebox/old, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yx" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yy" = ( +/obj/item/stool/bar/padded, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/carpet, +/area/ministation/cafe) +"yA" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/effect/decal/cleanable/tomato_smudge, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yB" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -29; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"yC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"yD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/camera/network/hallway{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"yE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"yF" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"yG" = ( +/obj/structure/closet/secure_closet/personal/patient, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yJ" = ( +/obj/structure/table, +/obj/item/gun/launcher/syringe, +/obj/item/flashlight/pen, +/obj/item/flashlight/pen, +/obj/item/clothing/suit/straight_jacket, +/obj/item/chems/hypospray/vial{ + desc = "One of the first hyposprays ever made. Supposedly only a handful exist."; + name = "prototype hypospray"; + origin_tech = null + }, +/obj/item/clothing/accessory/stethoscope, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yK" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"yM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"yN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/hallway{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"yS" = ( +/obj/effect/floor_decal/ss13/l11, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"yV" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"yY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/reagent_temperature, +/obj/machinery/camera/network/medbay{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"zd" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ze" = ( +/obj/effect/floor_decal/ss13/l16, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"zf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + name = "Kitchen airlock"; + req_access = list("ACCESS_KITCHEN") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood, +/area/ministation/cafe) +"zg" = ( +/obj/structure/sign/warning/high_voltage{ + pixel_y = 32; + pixel_x = 23 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"zh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + name = "Kitchen airlock"; + req_access = list("ACCESS_KITCHEN") + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"zj" = ( +/obj/structure/table/glass, +/obj/item/hatchet, +/obj/item/hatchet, +/obj/item/minihoe, +/obj/item/minihoe, +/obj/item/book/skill/service/botany, +/obj/item/wirecutters/clippers, +/obj/item/scanner/plant, +/obj/item/storage/plants, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"zl" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"zn" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"zo" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"zq" = ( +/obj/structure/bed, +/obj/item/bedsheet/clown, +/turf/simulated/floor/carpet/blue3, +/area/ministation/security) +"zt" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/table, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"zv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"zy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"zA" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"zC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/freezer{ + autoset_access = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ministation/cafe) +"zD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/structure/hygiene/sink/kitchen{ + pixel_y = 25 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zF" = ( +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zG" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"zH" = ( +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/structure/table/woodentable, +/obj/machinery/button/blast_door{ + id_tag = "Kitchen1"; + name = "Kitchen Shutter"; + pixel_y = 24 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zI" = ( +/obj/machinery/status_display{ + pixel_y = 30 + }, +/obj/machinery/cooker/cereal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zJ" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"zL" = ( +/obj/machinery/smartfridge/foods, +/turf/simulated/floor/plating, +/area/ministation/cafe) +"zM" = ( +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"zO" = ( +/obj/machinery/biogenerator, +/obj/effect/floor_decal/corner/beige/half, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"zP" = ( +/obj/effect/floor_decal/corner/beige/half, +/obj/machinery/vending/hydroseeds{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"zQ" = ( +/turf/simulated/wall, +/area/ministation/hydro) +"zW" = ( +/obj/machinery/door/airlock/glass/security{ + autoset_access = 0; + name = "Detective's Office"; + req_access = list("ACCESS_FORENSICS") + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/ministation/detective) +"zZ" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ae" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Af" = ( +/obj/abstract/landmark/start{ + name = "Bartender" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ag" = ( +/obj/abstract/landmark/start{ + name = "Bartender" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ah" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ai" = ( +/obj/effect/decal/cleanable/flour, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Aj" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ak" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Am" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"An" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"As" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"At" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/cooker/grill, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Au" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"Av" = ( +/obj/structure/closet/chefcloset, +/obj/item/storage/box/ammo/beanbags, +/obj/item/clothing/suit/storage/toggle/wintercoat/hydro, +/obj/item/gun/projectile/shotgun/doublebarrel/sawn{ + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Aw" = ( +/obj/machinery/cooker/oven, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ax" = ( +/obj/structure/closet, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/shoes/clown_shoes, +/obj/item/clothing/under/clown, +/obj/item/stamp/clown, +/obj/item/storage/backpack/clown, +/obj/item/bikehorn, +/obj/item/storage/box/fancy/crayons, +/obj/item/poster, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"Ay" = ( +/obj/machinery/reagentgrinder, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Az" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -11 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"AA" = ( +/obj/machinery/cooker/candy, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"AB" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"AD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"AG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"AJ" = ( +/obj/structure/closet/wardrobe/mixed, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"AK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"AR" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"AX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Be" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Bj" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape3_sensor"; + pixel_y = 20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"Bk" = ( +/obj/structure/table/woodentable, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/item/camera, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Bm" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sqm_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sqm_airlock"; + name = "interior access button"; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"Bs" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/ammo_magazine/rifle, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Bv" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/crate/bin/ministation, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Bw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/computer/modular/telescreen/preset/generic{ + name = "south bump"; + pixel_y = -20; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"Bz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"BA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/abstract/landmark/start{ + name = "Head of Security" + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/security) +"BE" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"BG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"BH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/ss13/l2, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"BJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/cafe) +"BS" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"BT" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"BW" = ( +/obj/structure/flora/bush/lavendergrass, +/turf/simulated/floor/grass, +/area/ministation/hall/w2) +"Ca" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Cb" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ci" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ck" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l2underpass) +"Co" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Cu" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Cx" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + id_tag = "CMO1"; + name = "CMO Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/medical) +"CD" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/medical) +"CJ" = ( +/obj/structure/bed/roller, +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"CL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"CO" = ( +/obj/machinery/door/airlock/security{ + name = "Warden" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/blue3, +/area/ministation/security) +"CP" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"CU" = ( +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock"; + autoset_access = 0 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"CV" = ( +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Dj" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/structure/table/woodentable, +/obj/item/chems/condiment/enzyme, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Dn" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Ds" = ( +/obj/structure/bed, +/obj/item/bedsheet/hop, +/turf/simulated/floor/carpet, +/area/ministation/hop) +"Dw" = ( +/obj/machinery/photocopier, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"DC" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"DD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"DF" = ( +/obj/abstract/landmark/start{ + name = "Robot" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"DG" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"DH" = ( +/obj/structure/closet/secure_closet/security, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/flashlight/maglight, +/turf/simulated/floor/tiled, +/area/ministation/security) +"DI" = ( +/obj/item/mollusc/barnacle{ + pixel_x = -13; + pixel_y = -14 + }, +/turf/space, +/area/space) +"DJ" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"DY" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Ea" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ec" = ( +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Eg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Ei" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/bed/chair/comfy/beige, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Ev" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/space, +/area/ministation/arrival) +"Ez" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"EA" = ( +/obj/effect/shuttle_landmark/arrivas_south, +/turf/space, +/area/space) +"ED" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/cafe) +"EE" = ( +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Security Officer" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"EG" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"EL" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"EM" = ( +/obj/machinery/computer/account_database{ + dir = 8 + }, +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/command, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"ER" = ( +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "16-0" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/obj/structure/disposalpipe/up{ + dir = 2 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"EV" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/gun/projectile/automatic/smg, +/obj/item/gun/projectile/automatic/smg, +/obj/item/ammo_magazine/smg/rubber, +/obj/item/ammo_magazine/smg/rubber, +/obj/item/ammo_magazine/smg/rubber, +/obj/item/ammo_magazine/smg/rubber, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/item/ammo_magazine/smg/rubber, +/obj/item/ammo_magazine/smg/rubber, +/obj/item/ammo_magazine/smg/rubber, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Fn" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/poster, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Fo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/smartfridge/chemistry, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Fr" = ( +/obj/structure/flora/pottedplant/flower, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Ft" = ( +/obj/structure/target_stake, +/turf/simulated/floor/tiled, +/area/ministation/security) +"FF" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"FJ" = ( +/obj/abstract/landmark/start{ + name = "Clown" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/item/radio/intercom/locked/entertainment{ + dir = 1; + pixel_y = -30 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"FL" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"FQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"FZ" = ( +/obj/machinery/firealarm{ + pixel_y = 32 + }, +/obj/structure/bed/chair/comfy/beige, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Ga" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"Gb" = ( +/obj/machinery/door/airlock/security{ + name = "Head of Security" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/blue2, +/area/ministation/security) +"Gd" = ( +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Ge" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table, +/obj/item/roller{ + pixel_y = 10 + }, +/obj/item/roller{ + pixel_y = 10 + }, +/obj/item/storage/belt/medical/emt, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Gg" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Gu" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 + }, +/obj/structure/rack/dark, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Gx" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Gy" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Gz" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor, +/area/ministation/hop) +"GR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"GZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Hd" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"Hi" = ( +/obj/effect/floor_decal/industrial/firstaid{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Hn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Hy" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Hz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"HF" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_y = -1; + pixel_x = -25 + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"HG" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"HJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"HL" = ( +/obj/machinery/chemical_dispenser/full, +/obj/item/chems/glass/beaker/large, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"HM" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/eftpos, +/obj/item/mollusc/clam, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"HN" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"HO" = ( +/turf/simulated/floor/reinforced/airless, +/area/space) +"HP" = ( +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"HR" = ( +/mob/living/simple_animal/mouse, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"HX" = ( +/obj/structure/closet/secure_closet/warden, +/obj/item/flashlight/maglight, +/turf/simulated/floor/carpet/blue3, +/area/ministation/security) +"Ib" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Ie" = ( +/obj/machinery/status_display{ + pixel_y = -29; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"Ig" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"Ij" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Im" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"Io" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Ip" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"Ir" = ( +/obj/structure/table, +/obj/item/folder/blue, +/obj/item/storage/box/PDAs, +/obj/machinery/status_display{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"Iw" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/unary/engine, +/turf/space, +/area/ministation/arrival) +"Ix" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "l2_central_south_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Iz" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"IA" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "Dock Airlock"; + autoclose = 0 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"IB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"IP" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"IT" = ( +/obj/machinery/newscaster{ + pixel_x = -32; + dir = 8 + }, +/obj/structure/flora/pottedplant/largebush, +/obj/machinery/camera/network/security{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"IX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"Jc" = ( +/obj/structure/closet/secure_closet/security, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/flashlight/maglight, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Jd" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Jl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Jm" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "_East APC"; + pixel_x = 27; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Jo" = ( +/obj/abstract/landmark/start{ + name = "Detective" + }, +/obj/structure/bed/chair/office/comfy/brown{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"Js" = ( +/obj/structure/closet/secure_closet/brig, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Jt" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/alarm{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/e2) +"Jx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"Jz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"JH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"JJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"JQ" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"JX" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"JZ" = ( +/turf/simulated/wall, +/area/ministation/detective) +"Kd" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/item/poster, +/turf/simulated/floor/plating, +/area/ministation/maint/secmaint) +"Kk" = ( +/obj/structure/bed, +/obj/item/bedsheet/blue, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"Kr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Kv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/flora/bush/fullgrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"Kz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/camera/network/hallway{ + dir = 1 + }, +/obj/structure/flora/bush/lavendergrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"KG" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/security) +"KH" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/simulated/floor/tiled, +/area/ministation/security) +"KK" = ( +/obj/machinery/forensic/microscope, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"KN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"KV" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Armory airlock"; + req_access = list("ACCESS_ARMORY") + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"KW" = ( +/obj/machinery/forensic/dnascanner, +/turf/simulated/floor/carpet/red, +/area/ministation/detective) +"KX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Lm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Lr" = ( +/obj/structure/table/woodentable, +/obj/machinery/reagentgrinder/juicer, +/obj/item/chems/glass/beaker, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ls" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Lt" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"LE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"LH" = ( +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2underpass) +"LI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"LN" = ( +/obj/machinery/computer/dummy, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"LT" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"LY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Mb" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Md" = ( +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Me" = ( +/obj/structure/rack, +/obj/item/target, +/obj/item/target/alien, +/obj/item/target/syndicate, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/item/target/syndicate, +/obj/item/target/syndicate, +/obj/item/target/syndicate, +/obj/item/target/alien, +/obj/item/target/alien, +/obj/item/target/alien, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Mp" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"Mu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Mw" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/abstract/landmark/latejoin/cryo, +/obj/machinery/status_display{ + pixel_y = -1; + pixel_x = 32; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"MA" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/closet/secure_closet/hop2, +/obj/item/book/skill/organizational/finance, +/turf/simulated/floor/carpet, +/area/ministation/hop) +"MG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"MH" = ( +/obj/structure/table, +/obj/item/implantcase/tracking, +/obj/item/implantcase/chem, +/obj/item/implanter, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"MK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"ML" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"MQ" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/open, +/area/ministation/hall/w2) +"MU" = ( +/obj/structure/filing_cabinet/chestdrawer, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"MW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"MY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ne" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"Nf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/sign/double/barsign{ + dir = 1; + pixel_x = 1; + pixel_y = -63 + }, +/obj/structure/flora/bush/lavendergrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"Nh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Nj" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/item/bell, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Nm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"No" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/camera/network/security{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Np" = ( +/obj/machinery/door/airlock/command, +/obj/machinery/door/firedoor, +/turf/simulated/floor, +/area/ministation/hop) +"Nq" = ( +/obj/effect/floor_decal/ss13/l8, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Nu" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape2_sensor"; + pixel_y = -20; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"Nv" = ( +/obj/machinery/camera/network/security{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Nz" = ( +/obj/effect/floor_decal/ss13/l15, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"NC" = ( +/turf/open, +/area/ministation/hall/w2) +"ND" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/stool/padded, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"NE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"NO" = ( +/obj/abstract/level_data_spawner/main_level, +/turf/space, +/area/space) +"NR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"NU" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/item/clothing/glasses/meson, +/obj/item/flashlight, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"NX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"NZ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ob" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"Oc" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Om" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Op" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Oq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/double/glass/security{ + id_tag = "secdoor"; + name = "Security" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Ou" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Ov" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ow" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + level = 2 + }, +/turf/simulated/floor/carpet/blue3, +/area/ministation/security) +"OF" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/cafe) +"OH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"OK" = ( +/obj/structure/closet/secure_closet/hos, +/obj/item/flashlight/maglight, +/turf/simulated/floor/carpet/blue2, +/area/ministation/security) +"OL" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ON" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/door/blast/shutters/open{ + id_tag = "quarantine"; + name = "quarantine shutters" + }, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"OT" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "escape1_airlock_interior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"OV" = ( +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"OW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/sign/directions/evac{ + dir = 8; + pixel_x = -32; + pixel_y = 25 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"OY" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Pd" = ( +/obj/structure/table/woodentable, +/obj/item/storage/box/fancy/cigarettes{ + pixel_y = 2 + }, +/obj/item/flame/lighter/random, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Pf" = ( +/turf/simulated/wall, +/area/ministation/arrival) +"Pj" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Pk" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"Po" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Pw" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Pz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/medical) +"PH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"PI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"PL" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"PN" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "escape1_airlock_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"PR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/machinery/light, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"PS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"PU" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"PX" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "l2_central_north_vent"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"PY" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape1_sensor"; + pixel_y = -20; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"Qh" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/full, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/medical{ + name = "Medical Supply" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Qj" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Qk" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"Qm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Qp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"Qs" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Qz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/abstract/landmark/start{ + name = "Head Doctor" + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"QC" = ( +/obj/structure/iv_drip, +/obj/machinery/camera/network/medbay{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"QE" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet, +/obj/random/maintenance, +/obj/random/suit, +/obj/item/poster, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"QF" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"QK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"QL" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor, +/obj/machinery/door/blast/shutters{ + name = "security shutter"; + id_tag = "secshut" + }, +/turf/simulated/floor/plating, +/area/ministation/security) +"QN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"QO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"QR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Rd" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"Rk" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/abstract/landmark/latejoin, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"Rp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"Ru" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"Rw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Rx" = ( +/turf/simulated/wall, +/area/ministation/maint/secmaint) +"Ry" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"RB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"RD" = ( +/turf/simulated/wall/r_wall, +/area/ministation/cryo) +"RH" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall, +/area/ministation/cryo) +"RK" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "32-1" + }, +/turf/open, +/area/ministation/maint/hydromaint) +"RQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"RU" = ( +/obj/machinery/camera/network/medbay{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"RW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"RZ" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Sa" = ( +/turf/simulated/wall, +/area/ministation/maint/hydromaint) +"Sd" = ( +/obj/effect/floor_decal/corner/green/half, +/obj/structure/sign/department/botany{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Sg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Sl" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Sp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/flora/bush/lavendergrass, +/turf/simulated/floor/grass, +/area/ministation/hall/e2) +"Sq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Sw" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/floor/tiled/freezer{ + name = "kitchen freezer floor"; + temperature = 263 + }, +/area/ministation/cafe) +"Sx" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "Dock Airlock" + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"Sy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/open, +/area/ministation/hall/w2) +"SA" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"SB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"SD" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"SF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/ss13/l4, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"SK" = ( +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"SV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"SW" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"SX" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Td" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"Tj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Tr" = ( +/obj/structure/rack, +/obj/item/beartrap, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"Ts" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/ministation/medical) +"TB" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/detective) +"TD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"TO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"TS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"TT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"TV" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/security, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"TW" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "sqm_vent"; + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "sqm_airlock"; + pixel_y = 24; + tag_airpump = "sqm_vent"; + tag_chamber_sensor = "sqm_sensor"; + tag_exterior_door = "sqm_airlock_exterior"; + tag_interior_door = "sqm_airlock_interior"; + pixel_x = -8 + }, +/obj/machinery/airlock_sensor{ + id_tag = "sqm_sensor"; + pixel_y = 24; + pixel_x = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"TX" = ( +/obj/structure/table/woodentable, +/obj/item/eftpos, +/obj/item/chems/spray/cleaner, +/obj/machinery/light, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/obj/item/chems/condiment/small/packet/honey, +/turf/simulated/floor/lino, +/area/ministation/cafe) +"Ug" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Ut" = ( +/obj/structure/sign/plaque/golden/security{ + pixel_y = 32 + }, +/obj/machinery/vending/security, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Uv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Uw" = ( +/obj/structure/lattice, +/obj/item/mollusc/barnacle{ + pixel_x = -13; + pixel_y = -14 + }, +/turf/space, +/area/space) +"Uz" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "Dock Airlock"; + autoclose = 0 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w2) +"UB" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "_East APC"; + pixel_x = 27; + pixel_y = 2 + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/ministation/medical) +"UC" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -29; + dir = 4 + }, +/obj/structure/closet/wardrobe/chemistry_white, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"UJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"UL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centraln) +"UN" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"UW" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"UY" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos, +/obj/machinery/computer/modular/telescreen/preset/generic{ + name = "north bump"; + pixel_y = 32 + }, +/obj/item/radio/intercom/locked/entertainment{ + pixel_y = 20 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/carpet/blue2, +/area/ministation/security) +"UZ" = ( +/turf/simulated/wall/r_wall/hull, +/area/ministation/arrival) +"Va" = ( +/obj/structure/bed/chair/wheelchair, +/obj/machinery/camera/network/medbay, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Vb" = ( +/obj/structure/window/reinforced, +/obj/structure/table, +/obj/machinery/recharger, +/obj/item/storage/box/ammo/beanbags, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Vc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Vd" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Vk" = ( +/obj/machinery/door/airlock/glass/medical{ + autoset_access = 0; + name = "Cryogenics airlock" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/cryo) +"Vr" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"Vs" = ( +/obj/machinery/door/airlock/external/glass{ + locked = 1; + id_tag = "l2_central_south_airlock_exterior"; + autoset_access = 0 + }, +/obj/machinery/button/access/interior{ + id_tag = "l2_central_south_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Vt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Vu" = ( +/obj/machinery/status_display{ + pixel_x = 32; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"Vx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"VE" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hydro) +"VL" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"VR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"VU" = ( +/obj/structure/rack, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/item/clothing/mask/horsehead, +/obj/item/storage/wallet/random{ + pixel_z = -11 + }, +/obj/item/classic_baton{ + pixel_w = -7 + }, +/obj/item/clothing/suit/armor/bulletproof, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Wa" = ( +/obj/structure/table/woodentable, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/structure/sign/warning/smoking{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/ministation/hall/w2) +"Wb" = ( +/turf/simulated/wall, +/area/ministation/cryo) +"Wd" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l2centrals) +"Wf" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open, +/area/ministation/maint/sebypass) +"Wi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Wj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Wl" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/wood, +/area/ministation/detective) +"Wo" = ( +/obj/structure/stairs/long/east, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"Wr" = ( +/obj/structure/rack, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/clothing/suit/armor/reactive, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"WC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"WL" = ( +/obj/machinery/smartfridge/drying_rack, +/turf/simulated/floor/plating, +/area/ministation/maint/hydromaint) +"WN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/carpet/blue3, +/area/ministation/security) +"WQ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"WW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"WY" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"WZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Xl" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"Xm" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Xq" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/structure/sign/department/chemistry{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/hall/e2) +"Xr" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/sign/warning/armory{ + pixel_x = -32; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Xs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Xw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"XA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"XK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/ss13/l14, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) +"XY" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/shutters{ + name = "security shutter"; + id_tag = "secshut" + }, +/turf/simulated/floor/plating, +/area/ministation/security) +"Yj" = ( +/obj/machinery/computer/prisoner{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "secshut"; + name = "security shutter button"; + pixel_y = -32; + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"Yn" = ( +/obj/machinery/door/airlock{ + name = "Cryo A" + }, +/turf/simulated/floor/plating, +/area/ministation/arrival) +"Yv" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_x = 32; + pixel_y = 25 + }, +/obj/structure/sign/directions/security{ + dir = 4; + pixel_x = 32; + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/e2) +"YU" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/security) +"YY" = ( +/obj/item/radio/intercom{ + name = "Common Channel"; + pixel_y = 20 + }, +/obj/structure/table, +/obj/item/storage/firstaid/o2{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/firstaid/o2{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"Zb" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/space, +/area/ministation/hall/w2) +"Zh" = ( +/obj/machinery/vending/cigarette, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ministation/cafe) +"Zm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hop) +"Zr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/security) +"Zz" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/ministation/medical) +"ZK" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/cryo) +"ZR" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w2) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +NO +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(70,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +ab +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(71,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(72,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(73,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(74,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(76,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(78,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(79,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(80,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(82,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(83,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(85,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(86,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(87,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oN +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(88,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(89,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(90,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(91,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(92,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +ad +rt +PN +kZ +ad +ad +ad +rt +PN +kZ +PN +rt +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(93,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +ad +rt +PY +kZ +ad +ad +ad +rt +Nu +kZ +Bj +rt +aa +aa +aa +ad +aa +aa +aa +aa +aa +aa +mG +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +Ev +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(94,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +ad +rt +Qp +kZ +ad +ad +ad +rt +Qp +kZ +Qp +rt +aa +aa +aa +kZ +cr +cr +kZ +kZ +kZ +kZ +UZ +UZ +UZ +UZ +ed +Ob +Pf +Rk +Rk +Rk +VL +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(95,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +kZ +ad +Zb +Qp +kZ +ad +ad +ad +Zb +Qp +kZ +Qp +Zb +aa +ad +aa +kZ +uB +aV +vO +CU +mO +Uz +IA +ed +Ob +Sx +ed +ed +Yn +ed +ed +ed +ds +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(96,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +kZ +rt +OT +rt +kZ +cr +kZ +rt +OT +rt +OT +rt +aa +ad +kZ +kZ +uC +aV +vP +kZ +kZ +kZ +UZ +UZ +Pf +Pf +Pf +Ie +Pf +cf +cf +cf +cq +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(97,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +lI +mh +Ry +jA +nx +oH +rc +mh +Ry +jA +rW +kZ +aa +ad +kZ +aV +aV +GZ +GZ +aV +xf +rt +aa +SD +ed +ed +Pf +ed +Pf +Pf +Pf +Pf +Pf +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EA +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(98,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cr +aH +hi +mR +GZ +aV +aV +aV +aV +mR +rm +rX +kZ +kZ +kZ +kZ +aV +aV +aV +aV +aV +xf +rt +aa +SD +LN +UN +Pf +SK +Pf +ed +ed +ed +ed +UZ +xY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(99,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cr +hm +fe +Bz +Ca +HJ +HJ +HJ +HJ +rE +rn +md +aV +aV +te +aV +aV +aV +aV +aV +aV +dE +rt +aa +SD +ed +ed +hj +ed +ih +ed +ed +iR +ed +UZ +xY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(100,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +Bv +Sq +aV +in +Gg +Ea +Ea +pY +Ea +ro +MY +Ea +Ea +tf +BH +tW +aV +aV +aV +aV +ZR +rt +aa +SD +ed +ed +Pf +ed +Pf +Pf +Pf +Pf +Pf +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(101,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +kC +bo +zy +Ov +NZ +nC +nC +nC +nC +rp +TD +ss +nC +tg +SF +tX +kX +vb +jZ +kZ +kZ +kZ +UZ +UZ +Pf +Pf +Pf +Ie +Pf +Rk +Rk +Rk +cq +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(102,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kZ +em +aV +md +md +RW +Iz +yD +HJ +HJ +ey +fr +st +uD +th +ud +tY +uD +Lm +vP +CU +xK +Uz +IA +ed +iR +Sx +ed +ed +cU +ed +ed +ed +ds +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(103,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +mq +kZ +tM +kZ +tM +tM +xO +tM +tM +kZ +FZ +Pd +Ec +rn +aV +ti +Nq +tq +aV +aV +vP +kZ +kZ +kZ +UZ +UZ +UZ +UZ +ed +iR +Pf +cf +cf +cf +eo +UZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(104,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +cg +HO +HO +HO +mq +zM +nF +Gx +hO +NU +sg +Pk +mi +kZ +Ei +Bk +Ec +rn +aV +tj +tP +ua +aV +aV +aV +kZ +aa +aa +Iw +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +UZ +Ev +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(105,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +IB +cN +er +Eg +UL +qg +JJ +Io +kZ +CV +Ec +Ec +SV +nD +yS +ln +hS +kI +uc +dQ +kZ +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +aa +aa +ad +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(106,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +mq +mq +mq +mq +mq +mq +pw +uK +aG +mf +dd +ez +Td +dd +kZ +Wa +qF +dc +RQ +aV +bI +XK +RW +SX +uI +vS +uI +uI +uI +uI +uI +uI +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(107,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +dd +dd +dd +dd +pl +dd +ir +dd +PL +dd +dd +dd +mq +mq +mq +kZ +kZ +kZ +kZ +su +aV +Nz +ze +aR +on +uI +vT +eg +rD +xJ +yl +MA +uI +qf +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(108,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +Co +mq +mq +mq +mq +mq +mq +mq +Lt +dd +dd +dd +dd +dd +pl +dd +dd +dd +dd +kZ +Kr +GZ +aV +aV +aR +on +ve +vU +Ez +wF +Np +gT +hu +Gz +Wd +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(109,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +mq +mq +mq +mq +mq +mq +mq +mq +mq +mq +mq +Co +kZ +sv +aV +aV +aV +lL +on +vf +vV +Zm +kB +xJ +cA +Ds +uI +Wd +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(110,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +DI +aa +aa +mq +dd +kZ +Ak +hl +zG +hl +GR +Cb +fu +uG +MK +fd +uI +uI +uI +uI +Wd +qf +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(111,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +mq +dd +kZ +Kr +wx +sp +WQ +ns +uI +uI +EM +fZ +wF +rU +uI +aU +Dn +Wd +qf +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(112,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +mq +mq +mq +mq +dd +kZ +Kr +wx +sp +WQ +aR +uI +IP +HM +fZ +wF +yV +uI +cv +Wd +JX +qf +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(113,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +HO +aa +HO +HO +HO +HO +HO +mq +ER +or +at +BT +kZ +lH +wx +BW +bJ +aR +uI +Ir +ye +jF +Dw +uI +uI +xj +HR +qf +qf +qf +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(114,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +dd +mq +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +mq +mq +jy +kZ +Kr +wx +BW +WQ +aR +uI +SW +AB +Vr +MU +uI +Fn +xj +Wd +DJ +ph +qf +qf +qf +qf +qf +qf +qf +qf +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(115,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +Co +mq +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +zM +bw +Gx +qk +eb +mq +Kr +Ug +sp +WQ +sG +uI +uI +uI +uI +uI +uI +QE +xj +Oc +qf +qf +qf +Wd +Wd +Wd +Dn +Wd +Wd +wr +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(116,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +mq +bs +dd +dd +mq +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +bG +at +cE +QK +Nm +iq +lN +lB +LI +bN +WW +bN +QN +Hn +An +cm +An +SB +An +An +zl +Wd +DJ +Wd +Dn +Wd +qf +qf +qf +qf +qf +qf +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(117,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +mq +mq +cg +HO +HO +HO +HO +HO +HO +HO +HO +mq +mq +mq +np +mq +Co +dd +Jm +mq +PH +aV +aV +aV +iN +kZ +Wd +qf +qf +qf +qf +Qs +DF +Wd +qf +qf +qf +qf +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(118,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +fx +PX +mq +mq +ir +mq +kZ +PI +aV +aV +GZ +jO +kZ +Wd +qf +qf +qf +qf +qf +qf +qf +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(119,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +qL +kZ +mc +qN +cH +kZ +PI +GZ +aV +aV +Sq +kZ +Wd +DJ +Dn +wr +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(120,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +mq +lo +kZ +NC +Sy +aV +kZ +As +Ea +Ea +Ea +ue +ex +BG +qf +qf +qf +qf +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(121,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +ps +NC +dK +Wo +kZ +PI +aV +aV +aV +Sq +kZ +vm +qf +qf +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +cg +aa +aa +aa +aa +aa +aa +HO +HO +bu +bu +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(122,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +kZ +MQ +ry +kZ +kZ +PI +aV +aV +GZ +Sq +kZ +vn +Dn +qf +HO +HO +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +HO +HO +bu +LH +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(123,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +kZ +kZ +kZ +zA +kZ +kZ +sB +Mb +Mb +Mb +ug +kZ +tm +Wd +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(124,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +al +RZ +aV +oX +ty +OW +zv +TO +tt +Nh +kZ +gp +Wd +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(125,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cg +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +pu +aV +aV +oX +ty +Xl +gz +gz +gz +ML +kZ +sI +FQ +qf +Ij +Ij +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(126,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +pf +zZ +Ci +MG +VR +dN +gz +tv +gz +ML +DJ +Wd +xz +nK +Ix +rC +Vs +HO +HO +HO +HO +HO +cg +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +iK +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(127,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +qe +Qj +lR +oX +ty +sC +gz +gz +gz +PR +mH +kr +Ib +qf +Ij +Ij +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(128,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +qe +qe +rA +oX +ty +Yv +AX +NR +AX +ui +mH +Wd +qf +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(129,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +rt +rt +rt +rt +rt +mH +sD +tx +tx +tx +sh +mH +Wd +qf +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +bu +Ck +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(130,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +cY +cY +cY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mH +RB +ty +ty +ty +sM +mH +AR +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +bu +LH +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(131,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +kh +dr +cY +cY +cY +cY +cY +cY +cY +cY +aa +aa +aa +ab +aa +la +RB +ty +ty +ty +sM +mH +Jt +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +bu +bu +bu +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(132,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +lF +lF +lF +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +az +dr +dr +cY +OK +un +Gb +kv +oW +cY +aa +aa +aa +aa +aa +la +hH +QF +ol +QF +dU +Sl +zl +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(133,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +lF +yk +lF +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +KH +dr +dr +cY +UY +BA +hZ +Ig +ax +cY +aa +aa +aa +aa +aa +la +RB +ty +ty +ty +yN +mH +qf +qf +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(134,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +lF +lF +lF +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +nu +dr +dr +cY +cY +cY +cY +Zr +pA +cY +cY +cY +cY +aa +aa +mH +TS +ty +ty +ty +Om +mH +aa +DI +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(135,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +Bs +dr +dr +cY +zq +WN +hZ +Ne +fy +cY +DH +Jc +cY +cY +cY +cY +RB +wD +ty +ty +sM +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(136,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +by +dr +dr +cY +HX +Ow +CO +tl +oj +mz +pd +bp +IT +qX +Yj +cY +RB +ty +ty +wD +sM +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(137,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +DY +dr +dr +cY +cY +cY +cY +cY +cY +cY +Ut +QR +Wi +iz +ix +QL +nB +ty +ty +ty +sM +la +aa +ED +ED +ED +ED +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(138,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +KG +dr +dr +eK +dW +Wr +EV +nS +VU +cY +hw +EE +hX +iy +jd +XY +tU +ty +ty +ty +uH +mH +ED +ED +Rd +Rd +BE +ED +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(139,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +cY +cY +cY +cY +cY +cY +YU +dr +dr +Nv +dr +cY +hx +MH +hY +QR +je +cY +RB +wD +ty +OY +Jx +bj +aL +BE +zn +xe +Hd +bj +bj +bj +bj +bj +bj +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(140,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +Ft +dr +Wi +kE +Me +cY +cY +cY +cY +cY +KV +cY +da +da +hZ +TV +da +cY +JH +ty +ty +OY +Sp +bj +Zh +BE +JQ +JQ +BE +ub +bj +Sw +wt +fD +bj +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(141,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +Ft +dr +hQ +oZ +Ou +vi +ya +Ou +FL +NE +Op +Xr +ha +No +Vt +gX +jg +Oq +ly +qI +qI +Jz +mJ +bj +vF +wk +BE +wk +xZ +FJ +bj +bU +mj +mw +bj +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(142,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +Ft +dr +LY +TT +dr +mk +dr +dr +Vc +dr +Po +gC +hb +hz +ia +iA +jh +Xs +aD +ty +ty +OY +Jx +bj +vG +BE +iH +iH +BE +Bw +bj +wL +et +Qk +bj +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(143,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +Ft +dr +eZ +PU +dr +Vb +dr +dr +no +cY +Vd +gD +hc +da +ew +iB +WY +cY +sU +QF +tz +OY +uu +bj +vt +xQ +wO +xo +xQ +yu +bj +zC +bj +bj +bj +bj +bj +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(144,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +cY +cY +cY +cY +cY +cY +qS +qS +Rx +Rx +cY +Qm +dr +eZ +da +gb +dr +eZ +cY +sV +qI +tA +qI +uv +uL +vu +ND +wP +xp +ND +yv +bj +zD +tS +At +Aw +vr +bj +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(145,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +cg +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +Rx +fF +cY +Js +gE +hd +da +gc +iD +hd +cY +sW +uq +Sg +uq +AG +uM +BE +BE +iH +xq +BE +yw +zf +zE +Ae +zF +zF +zF +ED +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(146,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +DI +Rx +jW +cY +cY +cY +cY +cY +cY +cY +cY +cY +jH +iY +kM +iY +OH +uN +vw +wl +vw +wl +xR +yx +qB +zF +Af +zF +zF +Lr +ED +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(147,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +ef +bA +ob +oB +Am +Ip +Am +Am +Am +DG +zg +ty +Xw +OY +Nf +bj +vv +BE +BE +BE +xS +IX +qB +zF +Ag +zF +zF +Dj +bj +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(148,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +ef +zo +Rx +Rx +JZ +JZ +JZ +JZ +JZ +JZ +lw +ty +Xw +OY +ge +bj +BE +wm +wm +wm +xT +yy +bj +zH +br +Jd +Av +TX +bj +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +jU +jU +jU +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(149,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +oc +db +JZ +HF +mp +KW +DC +KK +Wl +JZ +sN +wD +Gy +OY +iv +bj +bj +wn +wQ +xs +xU +xW +bj +zI +Rw +Ay +bj +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +HO +HO +HO +HO +HO +jU +Wf +jU +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(150,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +od +zo +TB +aW +aW +HP +Jo +HP +gJ +zW +yC +iW +gB +wE +Kv +bj +vy +wo +wR +wR +xV +yA +bj +zJ +Ai +QO +BJ +Ga +ib +mW +ib +Mp +ib +RK +Sa +HO +HO +HO +HO +HO +jU +jU +jU +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(151,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +oD +nX +JZ +bx +vq +hC +id +iG +jk +JZ +lw +ty +Xw +OY +Kz +bj +vz +wp +wp +wp +wp +aB +zh +zK +Ah +HN +bj +rq +WL +Sa +Sa +Sa +Sa +Sa +Sa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(152,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +Rx +Rx +zo +JZ +Rx +Rx +Rx +JZ +JZ +JZ +JZ +lw +ty +Xw +ty +Wj +bj +vA +jS +wS +xt +wq +yB +bj +zF +Aj +AA +bj +OF +Ax +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(153,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +oE +Am +Am +UB +ul +ef +Kd +mH +mH +sP +ty +Xw +ty +um +bj +bj +bj +bj +bj +bj +dZ +bj +zL +bj +bj +bj +dS +Tr +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(154,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Rx +Rx +Rx +Rx +oz +oz +jW +oz +oz +wc +sQ +qI +tD +aj +up +tL +dq +is +Au +lQ +qM +yM +KN +EL +ct +gL +eH +AK +NX +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(155,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +Fr +RU +pD +FF +oz +UW +lw +ty +Xw +ty +um +Sd +OV +if +qT +wN +qT +tT +xy +cd +zQ +zQ +Sa +yn +WC +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(156,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pU +pe +oF +jR +lJ +oz +BS +lw +ty +tE +ty +um +jV +Im +MW +Ru +uJ +Ru +Rp +ws +hv +zQ +ad +Sa +Sa +Bm +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(157,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pU +pe +pF +qn +qZ +oz +oz +lw +ty +Xw +ty +um +jV +vE +wu +wW +xx +wW +yE +ws +zO +zQ +ad +aa +Sa +TW +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(158,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +ae +pF +qo +qY +rI +oz +uP +qI +tG +wD +um +jV +OV +Vu +oY +CL +VE +yF +zj +zP +zQ +aa +aa +Sa +pb +Sa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(159,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +oz +pG +qp +qY +pe +oz +fC +sS +tH +Hi +us +fY +oz +oz +oz +vp +oz +oz +yf +zQ +zQ +aa +aa +ad +pr +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(160,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pH +qq +ra +rJ +si +KX +tJ +tI +tJ +ut +LT +kS +HL +UC +fw +mC +oz +aa +aa +Uw +ad +aa +aa +ad +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(161,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pI +qr +rb +rK +sj +WZ +Gd +Ls +Gd +Gd +Xq +oA +hh +pD +pD +Pw +vK +aa +aa +aa +ad +aa +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(162,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pJ +hr +qs +oz +oz +ov +Nj +iE +ON +Hy +oz +oz +wy +pD +pD +yb +vK +ad +aa +aa +ad +aa +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(163,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pK +qt +rd +rL +sk +bQ +so +hA +so +cQ +oz +vH +wz +qw +xA +yc +vK +ad +ad +ad +ad +ad +ad +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(164,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pL +qu +re +rL +sk +js +pD +zd +Zz +Gu +oz +jT +pe +wY +xB +yY +oz +aa +aa +aa +aa +aa +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(165,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pM +qu +pD +rM +oz +CD +pU +tN +pU +pU +oz +oz +wA +Fo +xC +rQ +oz +Wb +RD +RD +RD +RD +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(166,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pN +qv +rN +rf +Az +Jl +rf +Tj +rf +rf +uV +rf +rf +rN +xD +Cu +tZ +Wb +CP +Hz +gS +RD +aa +ad +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(167,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pO +qw +rg +rO +rO +Be +LE +Pj +Uv +Uv +XA +Uv +XA +bB +xE +PS +DD +Vk +AD +hs +qO +RD +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(168,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +CJ +pD +rh +rP +sm +qA +Vx +aA +pD +ux +tO +vJ +wC +wZ +pD +wB +AJ +Wb +ZK +EG +Mw +RD +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(169,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +oz +oz +oz +vK +nf +vK +oz +oz +UJ +aA +QC +oz +oz +oz +oz +xa +oz +Qh +vK +Wb +RD +RD +RH +RD +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(170,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pP +sn +eV +pD +ri +pD +yG +oz +sX +aA +ta +oz +uy +uZ +gU +xb +oz +yg +ii +zt +km +oz +aa +aa +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(171,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +oz +pQ +qz +qw +qw +rj +pD +sY +oz +sX +aA +pD +oz +uy +uZ +uX +xF +oz +Va +uW +pD +OL +vK +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(172,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pR +qA +rk +rR +sq +pD +mL +oz +HG +aA +pD +oz +uy +uZ +Pz +vM +oz +xc +uW +pD +SA +vK +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(173,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pS +pD +pD +pD +Vx +pD +ta +oz +oz +vL +Cx +oz +uy +uZ +uZ +vN +oz +Ge +qA +pD +yJ +vK +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(174,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +pT +kR +Xm +rS +Md +pD +tb +oz +ww +Mu +bv +oz +oz +pU +pU +oz +oz +YY +xH +yh +yK +oz +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(175,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +oz +oz +oz +oz +vK +vK +vK +oz +xd +Qz +qy +oz +aa +aa +aa +aa +oz +oz +vK +vK +oz +oz +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(176,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +aa +aa +aa +aa +aa +aa +aa +oz +Kk +bH +oS +Cx +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(177,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +oz +ar +Ts +oz +oz +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(178,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +DI +oz +Cx +Cx +oz +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(179,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(180,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(181,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(182,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(183,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(184,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(185,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(186,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(187,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(188,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(189,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(190,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(191,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(192,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(193,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(194,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(195,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(196,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(197,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HO +HO +HO +HO +HO +HO +HO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(198,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(199,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(200,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(201,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(202,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(203,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(204,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(205,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(206,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(207,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(208,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(209,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(210,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(211,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(212,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(213,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(214,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(215,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(216,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(217,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(218,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(219,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(220,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(221,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(222,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(223,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(224,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(225,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(226,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(227,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(228,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(229,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(230,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(231,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(232,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(233,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(234,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(235,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(236,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(237,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(238,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(239,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(240,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(241,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(242,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(243,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(244,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(245,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(246,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(247,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(248,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(249,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(250,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(251,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(252,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(253,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(254,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(255,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/maps/ministation/ministation-2.dmm b/maps/ministation/ministation-2.dmm new file mode 100644 index 00000000000..1067a71d38d --- /dev/null +++ b/maps/ministation/ministation-2.dmm @@ -0,0 +1,72834 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/abstract/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) +"ad" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"ae" = ( +/turf/simulated/wall, +/area/ministation/science) +"af" = ( +/turf/exterior/wall/random/ministation, +/area/space) +"ah" = ( +/turf/simulated/wall, +/area/ministation/bridge) +"am" = ( +/obj/structure/table/reinforced, +/obj/item/wrench, +/obj/item/assembly/timer, +/obj/item/assembly/signaler, +/obj/item/assembly/signaler, +/obj/item/multitool, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ao" = ( +/obj/structure/table/reinforced, +/obj/machinery/faxmachine/mapped, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ap" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"aq" = ( +/obj/machinery/photocopier, +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"ar" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"as" = ( +/obj/machinery/computer/modular/preset/security, +/obj/effect/floor_decal/corner/red/full, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"av" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"aw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/ministation/science) +"ax" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/computer/modular/preset/cardslot/command, +/obj/effect/floor_decal/corner/blue/full, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ay" = ( +/obj/effect/floor_decal/corner/white/full, +/obj/machinery/computer/modular/preset/medical, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"az" = ( +/obj/effect/floor_decal/corner/yellow/full, +/obj/machinery/computer/ship/sensors{ + id_tag = "stationsensors" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aA" = ( +/obj/abstract/landmark{ + name = "carpspawn" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"aB" = ( +/obj/structure/table/reinforced, +/obj/item/folder/envelope/nuke_instructions, +/obj/item/documents/corporate/account, +/obj/item/documents/corporate/personnel, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aC" = ( +/obj/structure/table/reinforced, +/obj/item/radio, +/obj/item/radio/beacon, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aD" = ( +/turf/simulated/wall/r_wall, +/area/ministation/bridge) +"aF" = ( +/obj/structure/glass_tank/aquarium, +/mob/living/simple_animal/aquatic/fish, +/mob/living/simple_animal/aquatic/fish, +/mob/living/simple_animal/aquatic/fish, +/mob/living/simple_animal/aquatic/fish, +/mob/living/simple_animal/aquatic/fish, +/mob/living/simple_animal/aquatic/fish/grump, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aI" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aJ" = ( +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aK" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aO" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aP" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/regular, +/obj/item/storage/toolbox/emergency, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aQ" = ( +/obj/structure/displaycase, +/obj/item/sword/replica/officersword, +/obj/machinery/status_display{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aR" = ( +/obj/structure/bed, +/obj/item/bedsheet/captain, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/carpet/red, +/area/ministation/bridge) +"aT" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"aU" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "slimeblast3"; + name = "Enclosure 3 Blastdoors Button"; + directional_offset = null; + dir = 8 + }, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled, +/area/ministation/science) +"aV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"aW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "vaultbolt"; + name = "Vault Deadbolt Button"; + pixel_y = 27 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"aX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/command{ + autoset_access = 0; + req_access = list("ACCESS_CAPTAIN"); + name = "Captain's Dormitory" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/ministation/bridge) +"aY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"aZ" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ba" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bb" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/megaphone, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bc" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/item/radio/intercom{ + pixel_y = -1; + directional_offset = null + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"be" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bg" = ( +/turf/simulated/wall/r_wall, +/area/ministation/bridge/vault) +"bi" = ( +/obj/structure/filing_cabinet, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"bl" = ( +/turf/simulated/wall/r_wall, +/area/ministation/telecomms) +"bn" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Vault APC"; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/bluegrid, +/area/ministation/bridge/vault) +"bo" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/corner/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"bp" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/ministation/bridge/vault) +"bq" = ( +/turf/simulated/floor/bluegrid, +/area/ministation/bridge/vault) +"br" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/bridge) +"bs" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"bt" = ( +/obj/item/flashlight/lamp/green, +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/item/gun/launcher/crossbow, +/obj/item/arrow, +/obj/item/arrow, +/obj/item/cell/crap, +/obj/item/mollusc/clam, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"bu" = ( +/obj/machinery/shipsensors{ + id_tag = "stationsensors" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/airless, +/area/ministation/maint/l3sw) +"bv" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -29; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bx" = ( +/obj/structure/table/reinforced, +/obj/item/storage/secure/briefcase, +/obj/item/flash, +/obj/item/flash, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"by" = ( +/obj/structure/closet, +/obj/item/stack/material/ingot/mapped/gold, +/obj/item/stack/material/ingot/mapped/gold, +/obj/item/stack/material/ingot/mapped/gold, +/obj/item/storage/belt/champion, +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"bz" = ( +/obj/abstract/landmark/start{ + name = "Captain" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/bed/chair/comfy/captain, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bA" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "bridgeblast"; + dir = 8; + pixel_y = -2; + directional_offset = null + }, +/obj/machinery/button/blast_door{ + id_tag = "sensor"; + name = "Sensor Shroud"; + pixel_y = 8; + dir = 8; + directional_offset = null + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "vaultbolt"; + req_access = list("ACCESS_VAULT") + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"bE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"bF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/bluegrid, +/area/ministation/bridge/vault) +"bG" = ( +/obj/structure/closet/secure_closet/captains, +/obj/item/storage/belt/holster, +/turf/simulated/floor/carpet/red, +/area/ministation/bridge) +"bH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/captain{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + dir = 1; + initial_access = null + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"bI" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/bridge) +"bK" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bR" = ( +/obj/machinery/nuclearbomb/station{ + pixel_y = 2 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ministation/bridge/vault) +"bT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/obj/item/ammo_magazine/rifle/practice, +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"bV" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + dir = 1; + initial_access = null + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bW" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/structure/sign/department/bridge{ + dir = 4; + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"bX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"bZ" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ca" = ( +/obj/machinery/newscaster{ + pixel_y = -28; + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cg" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner" + }, +/turf/open, +/area/ministation/hall/n3) +"ch" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ci" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cn" = ( +/turf/simulated/floor/airless, +/area/space) +"co" = ( +/turf/simulated/wall/r_wall, +/area/ministation/company_rep) +"cp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"cr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"cs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ct" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cu" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ministation/bridge) +"cw" = ( +/turf/simulated/floor/reinforced/airless, +/area/space) +"cx" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"cD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"cE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/sign/warning/high_voltage{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cI" = ( +/obj/structure/closet/secure_closet{ + closet_appearance = /decl/closet_appearance/secure_closet/rd; + req_access = list("ACCESS_RESEARCH"); + name = "Science locker" + }, +/obj/item/storage/med_pouch/trauma, +/obj/item/stack/tape_roll/duct_tape, +/obj/item/twohanded/spear/diamond, +/obj/item/shield/buckler, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"cJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"cL" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/science) +"cN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/wall, +/area/ministation/science) +"cP" = ( +/obj/machinery/network/acl{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"cU" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"cV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"cW" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"cX" = ( +/obj/structure/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"da" = ( +/obj/structure/window/basic/full, +/turf/simulated/floor/plating, +/area/ministation/library) +"db" = ( +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"dc" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "slimeblast3"; + name = "enclosure 3 blast door" + }, +/turf/simulated/floor, +/area/ministation/science) +"dd" = ( +/turf/simulated/floor, +/area/ministation/science) +"de" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8; + level = 2 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"di" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"dn" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/paper_bin, +/obj/item/pen/retractable, +/turf/simulated/floor/carpet/red, +/area/ministation/court) +"dq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"dr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command{ + name = "Bridge" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"dt" = ( +/obj/machinery/button/blast_door{ + id_tag = "mech"; + name = "Mech Bay Door Control"; + pixel_x = -24; + pixel_y = 2; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"du" = ( +/mob/living/slime, +/turf/simulated/floor, +/area/ministation/science) +"dv" = ( +/obj/machinery/cryopod/robot, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"dw" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"dx" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"dy" = ( +/obj/machinery/door/window/westleft, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"dz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/window/eastleft, +/obj/machinery/door/blast/regular/open{ + id_tag = "slimeblast3"; + name = "enclosure 3 blast door" + }, +/turf/simulated/floor, +/area/ministation/science) +"dA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, +/area/ministation/science) +"dE" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"dQ" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"dS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"dT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"dX" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/tiled, +/area/ministation/court) +"dY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/court) +"dZ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"eb" = ( +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"ec" = ( +/obj/machinery/door/airlock/science, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"ee" = ( +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"ef" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"eg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "slimeblast3"; + name = "enclosure 3 blast door" + }, +/turf/simulated/floor, +/area/ministation/science) +"eh" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/simulated/floor, +/area/ministation/science) +"ei" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"es" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"et" = ( +/obj/structure/closet/wardrobe/lawyer_black, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"ey" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"eA" = ( +/obj/machinery/computer/shuttle_control/explore/ministation{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"eB" = ( +/obj/structure/table, +/obj/machinery/faxmachine/mapped, +/turf/simulated/floor/tiled, +/area/ministation/court) +"eD" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"eF" = ( +/obj/structure/fireaxecabinet{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"eH" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "science_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "ministation_science_dock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/airless, +/area/ministation/science) +"eM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"eO" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"eP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"eV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"eW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"eX" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"eY" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"eZ" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"fb" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fc" = ( +/obj/structure/closet/secure_closet/scientist, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fd" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fe" = ( +/obj/machinery/computer/operating, +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ff" = ( +/obj/structure/table, +/obj/item/scalpel{ + pixel_y = 15 + }, +/obj/item/circular_saw, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fg" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fh" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"fi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"fk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"fl" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"fz" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"fA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark{ + name = "lightsout" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"fJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"fK" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"fN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"fU" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"fV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 4; + pixel_x = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"gd" = ( +/obj/machinery/destructive_analyzer{ + initial_network_id = "molluscnet" + }, +/obj/machinery/camera/network/research, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"ge" = ( +/obj/machinery/computer/shuttle_control/explore/ministation{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gg" = ( +/obj/abstract/landmark/start{ + name = "Scientist" + }, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gi" = ( +/obj/machinery/smartfridge/secure/extract, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gn" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"gp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gx" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gF" = ( +/obj/item/mollusc/barnacle{ + pixel_x = -13; + pixel_y = -14 + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"gG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/purple{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sign/department/xenobio_3{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gI" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gJ" = ( +/obj/machinery/camera/network/research, +/obj/structure/table, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"gK" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"gN" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"gQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"gU" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "pqm_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pqm_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"gV" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/bookcase/skill_books/random, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"he" = ( +/obj/structure/closet, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"hf" = ( +/obj/machinery/fabricator/protolathe{ + initial_network_id = "molluscnet" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"hg" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"hh" = ( +/obj/machinery/fabricator/bioprinter{ + initial_network_id = "molluscnet" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"hi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/department/xenoarch{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hj" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hl" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ministation/shuttle/outgoing) +"hm" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon/on, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/science) +"hn" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/design_database{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/science) +"hv" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/library) +"hx" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"hy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/wall/titanium, +/area/ministation/shuttle/outgoing) +"hF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/item/chems/glass/beaker/large, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hI" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table, +/obj/item/disk/tech_disk, +/obj/item/disk/tech_disk, +/obj/item/disk/design_disk, +/obj/item/stack/material/ingot/mapped/osmium/twentyfive, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hJ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hK" = ( +/obj/structure/table, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/manipulator, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hL" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"hM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/science) +"hN" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/science) +"hO" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ministation/science) +"hS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"hV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"hY" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/turf/open, +/area/ministation/maint/l3nw) +"if" = ( +/obj/machinery/door/window/eastright, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + name = "science shutters"; + id_tag = "scishut" + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"ig" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ih" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ii" = ( +/obj/machinery/door/airlock/glass/science, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ik" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"im" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"in" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/obj/machinery/recharger, +/obj/structure/table, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"io" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/science) +"ip" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/science) +"iq" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/court) +"iu" = ( +/obj/machinery/vending/cola{ + dir = 4; + pixel_x = -5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"iC" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + name = "fuel pump" + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"iG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"iI" = ( +/obj/machinery/fabricator{ + initial_network_id = "molluscnet" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"iJ" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iK" = ( +/obj/machinery/fabricator/imprinter{ + initial_network_id = "molluscnet" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"iL" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"iM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"iN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"iO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/science{ + name = "Xenobiology" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iQ" = ( +/obj/abstract/landmark/start{ + name = "Scientist" + }, +/obj/structure/bed/chair/office/light, +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iR" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/science, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/tiled/dark, +/area/ministation/science) +"iT" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"iZ" = ( +/obj/machinery/vending/coffee{ + dir = 4; + pixel_x = -5 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"jd" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"jm" = ( +/obj/machinery/door/blast/regular{ + id_tag = "sensor" + }, +/turf/simulated/floor/airless, +/area/ministation/maint/l3sw) +"jn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/wrench, +/obj/item/crowbar/red, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jo" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/clothing/glasses/science, +/obj/item/clothing/mask/gas/budget, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"js" = ( +/obj/structure/table, +/obj/item/chems/glass/beaker/large, +/obj/item/chems/glass/beaker/sulphuric, +/obj/item/chems/dropper, +/obj/effect/floor_decal/corner/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jt" = ( +/obj/structure/table, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ju" = ( +/obj/structure/table, +/obj/item/clothing/glasses/welding, +/obj/item/stack/material/pane/mapped/glass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/mapped/steel/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/ingot/mapped/copper/fifty, +/obj/machinery/camera/network/research{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jv" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jw" = ( +/obj/abstract/landmark{ + name = "blobstart" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jx" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jy" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"jL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"jM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 8 + }, +/obj/structure/sign/department/eva{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jN" = ( +/obj/effect/shuttle_landmark/bridge_north, +/turf/space, +/area/space) +"jP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/science{ + name = "Research and Development/Robotics"; + req_access = list("ACCESS_XENOBIO"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"jR" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kg" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/s3) +"kh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"ki" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"kk" = ( +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"kn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ko" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"kr" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"ks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kt" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ku" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kv" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ky" = ( +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kz" = ( +/mob/living/simple_animal/cat/fluff/ran, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/machinery/computer/design_console{ + dir = 4 + }, +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"kP" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/glass/science{ + autoset_access = 0; + req_access = list("ACCESS_ROBOTICS") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"kQ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kT" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"kU" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kV" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"kW" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "RD Shutter"; + id_tag = "RD1" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/science) +"lb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"lh" = ( +/obj/structure/closet, +/obj/item/multitool, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"ll" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"lp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"ls" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"lv" = ( +/obj/structure/closet/emcloset, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lw" = ( +/obj/structure/closet/firecloset, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lx" = ( +/obj/structure/closet/firecloset, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lz" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"lA" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 8 + }, +/obj/structure/sign/department/xenoflora{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lF" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 4 + }, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"lG" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "mech"; + name = "Mech Bay" + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"lH" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"mf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/science{ + name = "Xenobotony" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mk" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ml" = ( +/obj/machinery/mass_driver{ + id_tag = "artifactlauncher"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"mm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/bed/chair/shuttle/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"ms" = ( +/obj/machinery/atmospherics/unary/tank/air{ + start_pressure = 6000 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"mA" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mB" = ( +/obj/machinery/botany/editor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mC" = ( +/obj/machinery/botany/extractor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mD" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/biogenerator, +/obj/effect/floor_decal/corner/purple{ + dir = 4 + }, +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mF" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/vending/hydronutrients, +/obj/effect/floor_decal/corner/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mG" = ( +/obj/structure/table, +/obj/item/scanner/gas, +/obj/item/wrench, +/obj/item/minihoe, +/obj/item/hatchet, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/research, +/obj/item/wirecutters/clippers, +/obj/item/scanner/plant, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mH" = ( +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mJ" = ( +/turf/simulated/floor/reinforced, +/area/ministation/science) +"mK" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass, +/area/ministation/science) +"mN" = ( +/obj/machinery/door/airlock/glass/science{ + autoset_access = 0; + req_access = list("ACCESS_RESEARCH_DIRECTOR") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"mU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/bed/chair/shuttle/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"mW" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"mX" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"mY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"nj" = ( +/obj/machinery/camera/network/command{ + initial_access = null + }, +/turf/simulated/floor/bluegrid, +/area/ministation/bridge/vault) +"nl" = ( +/turf/simulated/wall, +/area/ministation/maint/l3ne) +"nr" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -29; + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/item/storage/box/botanydisk, +/obj/item/chems/glass/beaker/large, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ns" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"nt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"nu" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"nv" = ( +/obj/machinery/door/window/westleft, +/obj/machinery/door/window/eastleft, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"nw" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"nz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"nA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"nG" = ( +/turf/simulated/wall/titanium, +/area/ministation/shuttle/outgoing) +"nI" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "_East APC"; + pixel_x = 27; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/alarm{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/s3) +"nL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"nN" = ( +/obj/structure/ladder, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"nP" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"nQ" = ( +/obj/structure/lattice, +/turf/simulated/wall, +/area/ministation/maint/l3ne) +"nS" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"nW" = ( +/obj/structure/filing_cabinet, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"nX" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"nZ" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"ob" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oc" = ( +/turf/simulated/wall, +/area/ministation/maint/l3se) +"od" = ( +/obj/machinery/computer/air_control{ + dir = 8; + id_tag = "xenobot"; + name = "Xenoflora Gas Monitor" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oe" = ( +/obj/machinery/air_sensor{ + id_tag = "xenobot"; + name = "Xenoflora Gas Sensor" + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"of" = ( +/obj/machinery/commsrelay, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"og" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Telecommunications glass airlock"; + req_access = list("ACCESS_TELECOMS") + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/holofloor/lino, +/area/ministation/telecomms) +"op" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"ot" = ( +/obj/structure/tank_rack/oxygen, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oB" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/green/full, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oC" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/chems/glass/bucket, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oD" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor, +/area/ministation/science) +"oE" = ( +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"oF" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/telecomms) +"oG" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/closet/crate, +/obj/item/stock_parts/circuitboard/telecomms_hub, +/obj/item/cell, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"oN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"oP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"oQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"oR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"oS" = ( +/obj/effect/floor_decal/corner/yellow/full, +/obj/machinery/computer/modular/preset/engineering, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"pa" = ( +/obj/item/mollusc/barnacle{ + pixel_x = -13; + pixel_y = -14 + }, +/turf/space, +/area/space) +"pb" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/turf/open, +/area/ministation/maint/l3sw) +"pf" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"pi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"pp" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"ps" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/paper_bundle, +/obj/effect/floor_decal/stoneborder{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"pz" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/n3) +"pM" = ( +/obj/effect/floor_decal/corner/yellow{ + dir = 5 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"pP" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"qi" = ( +/obj/structure/ladder, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"qx" = ( +/obj/machinery/keycard_auth{ + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"qY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"rf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"rh" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"rk" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"rl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/handrail{ + dir = 4 + }, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"rp" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -11 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"rx" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"rB" = ( +/obj/machinery/computer/ship/helm{ + dir = 8 + }, +/obj/effect/overmap/visitable/ship/landable/science_shuttle, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"rI" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"rK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"rV" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "RD1"; + name = "RD Shutter Button"; + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"rW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"sh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"sl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/library) +"sr" = ( +/turf/simulated/floor/tiled/dark/monotile{ + name = "telecomms dark floor"; + temperature = 263 + }, +/area/ministation/telecomms) +"ss" = ( +/obj/machinery/door/airlock/glass/command{ + name = "Bridge" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"st" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 8 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"sB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"sC" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"sD" = ( +/turf/simulated/wall, +/area/ministation/hall/n3) +"sE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"sM" = ( +/obj/structure/closet, +/obj/item/storage/briefcase, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"sQ" = ( +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "16-0" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"sV" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/bed, +/obj/item/bedsheet/purple, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"sY" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass, +/turf/exterior/grass, +/area/ministation/hall/n3) +"tc" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile{ + name = "telecomms dark floor"; + temperature = 263 + }, +/area/ministation/telecomms) +"td" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile{ + name = "telecomms dark floor"; + temperature = 263 + }, +/area/ministation/telecomms) +"te" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"tm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/table, +/obj/item/chems/spray/extinguisher{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/chems/spray/extinguisher{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"tt" = ( +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"tu" = ( +/obj/structure/table, +/obj/item/integrated_circuit_printer, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"tv" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/turf/open, +/area/ministation/hall/n3) +"tx" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ministation/hall/n3) +"ty" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/turf/open, +/area/ministation/maint/l3se) +"tA" = ( +/obj/effect/floor_decal/corner/yellow/full, +/obj/machinery/computer/modular/preset/civilian, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"tB" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/obj/structure/sign/department/science_2{ + pixel_x = 32; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"tQ" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + name = "bridge blast door"; + id_tag = "bridgeblast" + }, +/turf/simulated/floor/plating, +/area/ministation/bridge) +"tT" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 8; + set_temperature = 263 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"tU" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark/monotile{ + name = "telecomms dark floor"; + temperature = 263 + }, +/area/ministation/telecomms) +"tV" = ( +/obj/machinery/network/router{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"tY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"tZ" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/court) +"ug" = ( +/obj/structure/catwalk, +/turf/open, +/area/ministation/hall/n3) +"uh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"ui" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"ur" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"uA" = ( +/obj/machinery/network/mainframe{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"uB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8; + level = 2 + }, +/obj/effect/floor_decal/corner/b_green/three_quarters, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"uG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/command{ + dir = 8; + initial_access = null + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"uH" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"uK" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/effect/floor_decal/carpet/green/corners, +/obj/effect/floor_decal/stoneborder{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"uN" = ( +/obj/machinery/door/airlock/glass/science, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"uR" = ( +/obj/machinery/airlock_sensor{ + id_tag = "science_sensor"; + pixel_y = 10; + pixel_x = -20; + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + tag_airpump = "science_vent"; + tag_chamber_sensor = "science_sensor"; + tag_exterior_door = "science_airlock_exterior"; + tag_interior_door = "science_airlock_interior"; + id_tag = "ministation_science_dock"; + dir = 4; + pixel_y = -3; + pixel_x = -21 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"uS" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"uV" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"uX" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"uZ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"vc" = ( +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Scientist" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"vl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "repblast"; + name = "rep blast door" + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"vm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"vo" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "anomvent"; + name = "Emergency Vent" + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"vq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"vs" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"vJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"wa" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"wd" = ( +/obj/effect/floor_decal/corner/red/full, +/obj/machinery/computer/station_alert/all, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"we" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/camera/network/hallway{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"wq" = ( +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"wJ" = ( +/obj/structure/bed, +/obj/item/bedsheet/rd, +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"wM" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/window/reinforced{ + current_health = 1e+007 + }, +/obj/machinery/vending/cola{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/ministation/hall/s3) +"wY" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/pen/fancy, +/obj/item/storage/box/fancy/crayons, +/obj/effect/floor_decal/stoneborder{ + dir = 6 + }, +/obj/item/storage/candle_box, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"xc" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/turf/open, +/area/ministation/maint/l3ne) +"xg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/cardslot/command, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"xt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"xH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"xN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"ya" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/chems/drinks/bottle/cola, +/obj/item/chems/drinks/bottle/cola, +/obj/item/chems/drinks/bottle/cola, +/obj/item/chems/drinks/bottle/cola, +/obj/item/chems/food/sliceable/chocolatecake, +/obj/item/chems/food/sliceable/pizza/vegetablepizza, +/obj/item/chems/food/sliceable/pizza/meatpizza, +/obj/item/chems/food/sliceable/pizza/margherita, +/obj/item/chems/food/sliceable/pizza/mushroompizza, +/obj/item/chems/drinks/cans/waterbottle, +/obj/item/chems/drinks/cans/waterbottle, +/obj/item/chems/drinks/cans/waterbottle, +/obj/item/chems/drinks/cans/waterbottle, +/obj/item/chems/drinks/cans/waterbottle, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"yc" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"yd" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"yf" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"yh" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"yj" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"ym" = ( +/turf/simulated/floor/tiled, +/area/ministation/bridge/vault) +"yu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/science) +"yz" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"yA" = ( +/obj/machinery/door/airlock/civilian, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/library) +"yH" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"yP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"yR" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 4 + }, +/turf/simulated/floor/airless, +/area/ministation/shuttle/outgoing) +"yS" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/turf/space, +/area/space) +"zd" = ( +/obj/machinery/fabricator/industrial{ + initial_network_id = "molluscnet" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"zl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"zs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner" + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/sign/directions/bridge{ + dir = 1; + pixel_y = 42; + pixel_x = -28 + }, +/obj/machinery/camera/network/hallway{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"zt" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"zw" = ( +/obj/machinery/light/small, +/obj/structure/bed/chair/armchair/black, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"zy" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"zC" = ( +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"zQ" = ( +/obj/structure/closet/secure_closet{ + closet_appearance = /decl/closet_appearance/secure_closet/rd; + req_access = list("ACCESS_RESEARCH"); + name = "Science locker" + }, +/obj/machinery/light, +/obj/item/storage/med_pouch/trauma, +/obj/item/stack/tape_roll/duct_tape, +/obj/item/twohanded/spear/diamond, +/obj/item/shield/buckler, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"zT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Aa" = ( +/obj/machinery/camera/network/command{ + dir = 4; + initial_access = null + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"Ab" = ( +/obj/machinery/network/message_server{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"Af" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"Aj" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 8 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"Al" = ( +/obj/machinery/button/blast_door{ + id_tag = "scishut"; + name = "Science Shutter Button"; + pixel_x = 5; + pixel_y = -6; + directional_offset = null + }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Am" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Ar" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"As" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Ax" = ( +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"AE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"AH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall, +/area/ministation/hall/n3) +"AL" = ( +/obj/machinery/network/telecomms_hub{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"AQ" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 4 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"AS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"AU" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + name = "science shutters"; + id_tag = "scishut" + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"AV" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "_West APC"; + pixel_x = -25 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"AW" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/smes/buildable/max_cap_in_out, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"AX" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/company_rep) +"AY" = ( +/obj/machinery/computer/cryopod/robot{ + pixel_y = 29 + }, +/obj/abstract/landmark/start{ + name = "Robot" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"AZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Be" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Bf" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Bh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Bk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Bn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Bp" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"Br" = ( +/obj/machinery/light/small, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + temperature = 263 + }, +/area/ministation/telecomms) +"Bs" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/telecomms) +"Bt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Bu" = ( +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/obj/machinery/computer/station_alert/all, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Bv" = ( +/obj/structure/table, +/obj/item/folder/blue, +/obj/item/pen/blue, +/obj/item/paper/monitorkey, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Bw" = ( +/obj/machinery/computer/message_monitor, +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Bx" = ( +/obj/structure/table, +/obj/item/clothing/suit/storage/toggle/wintercoat, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/item/radio, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"By" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BC" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/sign/warning/server_room{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"BD" = ( +/obj/structure/table, +/obj/item/paper_bin, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BE" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BG" = ( +/obj/structure/table, +/obj/structure/extinguisher_cabinet{ + pixel_x = 29; + dir = 8 + }, +/obj/item/disk/nuclear, +/obj/machinery/recharger, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"BS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"BV" = ( +/obj/effect/floor_decal/carpet/green, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"BZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Telecommunications glass airlock"; + req_access = list("ACCESS_TELECOMS") + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Cd" = ( +/turf/simulated/wall, +/area/ministation/maint/l3central) +"Cg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Cj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Ck" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Cl" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/camera/network/command{ + initial_access = null + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Co" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Cw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/box/monkeycubes, +/obj/item/stack/material/puck/mapped/uranium/ten, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Cy" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"CA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"CB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"CC" = ( +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"CD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/black{ + dir = 8 + }, +/obj/structure/sign/warning/server_room{ + pixel_x = -32; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"CE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"CL" = ( +/obj/machinery/fabricator/robotics{ + initial_network_id = "molluscnet" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"CM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"CN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"CR" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"CT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"CU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + name = "Telecommunications" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor, +/area/ministation/telecomms) +"CV" = ( +/obj/effect/floor_decal/corner/black{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"CW" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"CY" = ( +/obj/machinery/door/airlock/glass{ + autoset_access = 0; + name = "Court Room Airlock" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"Da" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/flora/grass/both, +/turf/exterior/grass, +/area/ministation/hall/n3) +"Dc" = ( +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"De" = ( +/obj/structure/table, +/obj/item/multitool, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Df" = ( +/obj/structure/table, +/obj/item/radio, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -30; + dir = 1 + }, +/obj/item/chems/spray/extinguisher, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Dg" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/structure/filing_cabinet/chestdrawer, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"Dh" = ( +/obj/effect/floor_decal/corner/black{ + dir = 1 + }, +/obj/structure/sign/department/telecomms{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Di" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Dk" = ( +/obj/machinery/camera/network/hallway{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Do" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open, +/area/ministation/hall/n3) +"Dp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction/mirrored, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Dt" = ( +/turf/simulated/wall, +/area/ministation/maint/l3sw) +"Du" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "pqm_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pqm_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Dv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Dw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Dx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light{ + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Dy" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Dz" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + name = "bridge blast door"; + id_tag = "bridgeblast" + }, +/turf/simulated/floor/plating, +/area/ministation/bridge) +"DB" = ( +/obj/effect/floor_decal/corner/green/full, +/obj/machinery/smartfridge/drying_rack, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"DC" = ( +/obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"DD" = ( +/obj/structure/table/woodentable, +/obj/item/stack/material/panel/mapped/plastic/ten, +/obj/item/stack/material/plank/mapped/wood/ten, +/obj/item/stack/material/plank/mapped/wood/ten, +/obj/item/stack/material/panel/mapped/plastic/ten, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"DF" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"DQ" = ( +/obj/structure/table/woodentable, +/obj/item/storage/pill_bottle/dice, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"DX" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"Ec" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Ee" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"Ef" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"Eg" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Eu" = ( +/obj/structure/table, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"Ex" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"EB" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/glass/science{ + name = "Science Department"; + req_access = list("ACCESS_ROBOTICS"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/science) +"EP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ET" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"EW" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Fe" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/obj/structure/sign/directions/science{ + pixel_y = -21; + pixel_x = -28 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Fy" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/sign/warning/airlock{ + pixel_y = 26; + pixel_x = -31 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"FC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/turf/simulated/floor/lino, +/area/ministation/hall/s3) +"FM" = ( +/obj/machinery/port_gen/pacman/super, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"Gh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Gi" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Go" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"Gu" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Gy" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"GD" = ( +/turf/open, +/area/ministation/hall/n3) +"GF" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/research{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"GJ" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"GK" = ( +/obj/machinery/computer/ship/sensors{ + dir = 8; + id_tag = "shuttlesensors" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"GL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"GT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/court) +"Hj" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Hl" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/paper_bin, +/obj/effect/floor_decal/stoneborder{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"Ho" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Hw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"HB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"HK" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 4 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"HX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"Ia" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Ib" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "repblast"; + name = "rep blast door" + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"Id" = ( +/obj/machinery/door/airlock, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"Ie" = ( +/obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Ik" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"Il" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ministation/company_rep) +"Io" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/bed/chair/wood/maple{ + dir = 8 + }, +/obj/abstract/landmark/start{ + name = "Company Representative" + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"Ir" = ( +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Ix" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"IA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"IB" = ( +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"IC" = ( +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"IP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"IS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/lino, +/area/ministation/telecomms) +"IT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"IV" = ( +/obj/machinery/door/airlock/glass/command, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Je" = ( +/obj/machinery/camera/network/research{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Jk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Jo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Jx" = ( +/obj/structure/closet/secure_closet/research_director, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Jz" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"JJ" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"JK" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "32-4" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/down{ + dir = 4 + }, +/turf/open, +/area/ministation/maint/l3central) +"Kg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Kr" = ( +/obj/effect/floor_decal/corner/b_green/half{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"KQ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"KU" = ( +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"Le" = ( +/obj/structure/table/woodentable, +/obj/item/chems/drinks/cans/waterbottle, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"Lq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"LA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"LC" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"LL" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"LM" = ( +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"LN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"LP" = ( +/obj/machinery/keycard_auth{ + pixel_y = -20; + dir = 1 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/camera/network/command{ + dir = 1; + initial_access = null + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"LS" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"LT" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"LW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Mb" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Mc" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Md" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Me" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + name = "bridge blast door"; + id_tag = "bridgeblast" + }, +/turf/simulated/floor/plating, +/area/ministation/bridge) +"Mi" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/green/full, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Mk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Mn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Mo" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + name = "bridge blast door"; + id_tag = "bridgeblast" + }, +/turf/simulated/floor/airless, +/area/ministation/bridge) +"Ms" = ( +/obj/item/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/folder, +/turf/simulated/floor/carpet/red, +/area/ministation/court) +"My" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Mz" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + start_pressure = 10000 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"MA" = ( +/obj/structure/closet/secure_closet/courtroom, +/turf/simulated/floor/tiled, +/area/ministation/court) +"MB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"MF" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"MI" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"MJ" = ( +/obj/structure/bed/chair/armchair/black, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"MP" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"MU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/camera/network/hallway{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"MV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"MZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Na" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Nb" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"Nc" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Ng" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/wall/titanium, +/area/ministation/shuttle/outgoing) +"Nh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"Nk" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Nm" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 4 + }, +/turf/simulated/wall/titanium, +/area/ministation/shuttle/outgoing) +"Np" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Nr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/double/glass/science{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"Nw" = ( +/turf/simulated/floor/tiled, +/area/ministation/court) +"Ny" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -29; + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"ND" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"NF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"NH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"NJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/flora/pottedplant/aquatic, +/turf/simulated/floor/lino, +/area/ministation/hall/s3) +"NM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"NN" = ( +/obj/structure/table, +/obj/machinery/alarm{ + pixel_y = -2; + dir = 4; + pixel_x = -24 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"NO" = ( +/obj/abstract/level_data_spawner/main_level, +/turf/space, +/area/space) +"NR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"NW" = ( +/obj/effect/decal/cleanable/dirt{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Oa" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Oc" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Od" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Ok" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/effect/paint/red, +/turf/simulated/wall/titanium, +/area/ministation/shuttle/outgoing) +"Om" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"Oo" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Ou" = ( +/obj/effect/floor_decal/corner/b_green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Ov" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Oy" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4; + name = "airlock pump" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"OC" = ( +/obj/structure/sign/warning/airlock{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"OD" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/open, +/area/ministation/hall/n3) +"OG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"OK" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "science_shuttle_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "science_shuttle"; + name = "interior access button"; + pixel_x = 20; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"OL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"OM" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/effect/floor_decal/carpet/green{ + dir = 4 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"ON" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"OP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"OQ" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"OU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"OW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Pa" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Pe" = ( +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/open, +/area/ministation/hall/n3) +"Pg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Pk" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/folder/blue, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Pn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"Po" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment/bent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Pw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Px" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/folder/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Pz" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"PB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/stool/padded, +/obj/abstract/landmark/start{ + name = "Librarian" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"PE" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"PL" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "science_shuttle_pump"; + dir = 4 + }, +/obj/effect/shuttle_landmark/science_dock, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + id_tag = "science_shuttle"; + tag_airpump = "science_shuttle_pump"; + tag_chamber_sensor = "science_shuttle_sensor"; + tag_exterior_door = "science_shuttle_exterior"; + tag_interior_door = "science_shuttle_interior"; + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"PO" = ( +/turf/simulated/wall, +/area/ministation/maint/l3nw) +"PP" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/item/flashlight, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"PR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"PT" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/court) +"PV" = ( +/obj/structure/table, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/item/modular_computer/tablet/preset/custom_loadout/cheap, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"PW" = ( +/obj/structure/closet/secure_closet/xenoarchaeologist, +/obj/item/ano_scanner, +/obj/item/stock_parts/circuitboard/suspension_gen, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"PX" = ( +/obj/abstract/landmark/start{ + name = "Research Director" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/light_switch{ + pixel_y = 25; + pixel_x = -23 + }, +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"Qf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Qh" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Qk" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"Qq" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Qs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Qt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/mirrored, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Qu" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Qx" = ( +/obj/structure/table, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/storage/firstaid/stab, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"QD" = ( +/obj/structure/table/woodentable, +/obj/item/book/printable_red, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"QG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"QK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/abstract/landmark/latejoin/cyborg, +/turf/simulated/floor/tiled/steel_grid, +/area/ministation/science) +"QR" = ( +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"QT" = ( +/obj/machinery/computer/design_console{ + dir = 8; + initial_network_id = "molluscnet" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ministation/science) +"QW" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table/woodentable, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Re" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3nw) +"Rf" = ( +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + name = "Librarian's Chamber"; + req_access = list("ACCESS_LIBRARY") + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/library) +"Ri" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Rl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Rp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Rt" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Rv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Rx" = ( +/turf/simulated/wall, +/area/ministation/court) +"RB" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"RE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"RG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"RI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"RO" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"RQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"RR" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 8 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"RS" = ( +/obj/machinery/power/smes/buildable/max_cap_in_out{ + RCon_tag = null; + capacity = 5e+009; + charge = 5e+009 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"RT" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"RV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"RY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Sa" = ( +/turf/simulated/wall, +/area/ministation/library) +"Sb" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Sc" = ( +/obj/machinery/door/airlock, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/company_rep) +"Sf" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Sh" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/ministation/science) +"Sk" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"Sm" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"So" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Sq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"SE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/hallway{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"SG" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"SI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"SP" = ( +/obj/item/stool/padded, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"SS" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"ST" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"SW" = ( +/obj/structure/closet/secure_closet/lawyer, +/turf/simulated/floor/tiled, +/area/ministation/court) +"Tc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Tk" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Tm" = ( +/obj/effect/floor_decal/carpet/green{ + dir = 1 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"Tn" = ( +/obj/machinery/shipsensors{ + id_tag = "shuttlesensors" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/airless, +/area/ministation/shuttle/outgoing) +"Tq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/hallway{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Tr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Tv" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/woodentable/ebony, +/obj/item/pen, +/obj/item/pen/blue, +/obj/item/pen/retractable, +/obj/item/pen/retractable/green, +/obj/item/pen/retractable/blue, +/obj/item/pen/multi, +/obj/effect/floor_decal/stoneborder/corner, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"Tz" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock{ + start_pressure = 730 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"TE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/effect/overmap/visitable/ship/ministation, +/obj/structure/bed/chair/padded/blue, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"TF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"TH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"TI" = ( +/obj/structure/table/woodentable, +/obj/random/cash, +/obj/item/chems/drinks/cans/waterbottle, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"TP" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/turf/open, +/area/ministation/hall/n3) +"TR" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/curtain/open/bed{ + icon_state = "closed"; + opacity = 1 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "repblast"; + name = "rep blast door" + }, +/turf/simulated/floor/plating, +/area/ministation/company_rep) +"TS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"TZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"Ua" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/table, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/obj/machinery/faxmachine/mapped, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"Um" = ( +/obj/effect/floor_decal/carpet/green/corners, +/obj/effect/floor_decal/stoneborder/corner{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"Uo" = ( +/obj/item/radio/intercom{ + pixel_y = 20 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Up" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Uq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Uw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"UB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, +/area/ministation/hall/s3) +"UD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"UE" = ( +/obj/structure/closet/crate/uranium, +/obj/item/wrench, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"UG" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/bookcase/skill_books/random, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"UH" = ( +/obj/machinery/alarm{ + pixel_y = 23 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"UI" = ( +/obj/effect/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/court) +"UJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"UK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"UL" = ( +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"UQ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3se) +"UR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"Vb" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open, +/area/ministation/maint/l3se) +"Vi" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/table/woodentable, +/obj/item/knife/kitchen, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/obj/item/mollusc/clam, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Vq" = ( +/obj/structure/bookcase/skill_books/random, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Vt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Vv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/captain{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/ministation/court) +"Vw" = ( +/obj/structure/table/woodentable, +/obj/item/deck/cards, +/turf/simulated/floor/carpet/green, +/area/ministation/library) +"Vx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"VB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"VI" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "science_vent"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"VJ" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"VL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"VW" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 30; + pixel_x = -33 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/table/woodentable, +/obj/machinery/fabricator/book, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"VX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"VY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "science_shuttle_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "science_shuttle"; + name = "exterior access button"; + pixel_x = 20; + command = "cycle_exterior"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"VZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Wg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Wh" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + name = "bridge blast door"; + id_tag = "bridgeblast" + }, +/turf/simulated/floor/plating, +/area/ministation/bridge) +"Wr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Ws" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + level = 2 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Wx" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"WA" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"WJ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"WK" = ( +/obj/machinery/artifact_analyser, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"WM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -26 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"WO" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"WQ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/effect/floor_decal/stoneborder{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"WT" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/random_multi/single_item/captains_spare_id, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"Xa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Xb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"Xe" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Xi" = ( +/obj/machinery/newscaster{ + pixel_x = 32; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/red, +/area/ministation/court) +"Xl" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"XA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/open, +/area/ministation/hall/n3) +"XE" = ( +/obj/structure/catwalk, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/open, +/area/ministation/hall/n3) +"XI" = ( +/obj/effect/floor_decal/carpet/green/corners, +/obj/effect/floor_decal/stoneborder/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"XJ" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/random/suit, +/obj/random/gloves, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"XM" = ( +/obj/machinery/door/airlock, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/court) +"XS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"XT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Ye" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"Yi" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Yj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/button/blast_door{ + id_tag = "repblast"; + name = "Panic Lockdown"; + pixel_y = -23; + pixel_x = -26; + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"Yl" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Ym" = ( +/obj/structure/window/reinforced, +/obj/structure/flora/bush/grassybush, +/turf/exterior/grass, +/area/ministation/hall/n3) +"Yv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3central) +"Yw" = ( +/obj/machinery/artifact_scanpad, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Yy" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "science_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "ministation_science_dock"; + name = "interior access button"; + pixel_x = 20; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/science) +"YH" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"YI" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"YL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"YO" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "science_shuttle_pump_out_internal" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/airlock_sensor{ + id_tag = "science_shuttle_sensor"; + pixel_x = -22; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"YP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"YQ" = ( +/obj/structure/closet/lawcloset, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/court) +"YR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -27 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/plating, +/area/ministation/shuttle/outgoing) +"YS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"YX" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "science_shuttle_pump_out_external" + }, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ministation/shuttle/outgoing) +"YZ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"Zd" = ( +/obj/machinery/button/blast_door{ + id_tag = "anomvent"; + name = "emergency vent control"; + pixel_y = -32; + pixel_x = -5; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/button/mass_driver{ + pixel_y = -32; + pixel_x = 7; + id_tag = "artifactlauncher"; + name = "LAUNCH"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"Zg" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Zj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Zo" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "pqm_airlock"; + pixel_y = 24; + tag_airpump = "pqm_vent"; + tag_chamber_sensor = "pqm_sensor"; + tag_exterior_door = "pqm_airlock_exterior"; + tag_interior_door = "pqm_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "pqm_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "pqm_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3sw) +"Zr" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l3ne) +"Zt" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 21 + }, +/turf/simulated/floor/wood/yew, +/area/ministation/court) +"Zu" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"Zv" = ( +/turf/simulated/wall, +/area/ministation/hall/s3) +"ZB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/bridge) +"ZH" = ( +/obj/effect/floor_decal/carpet/green, +/turf/simulated/floor/wood/walnut, +/area/ministation/library) +"ZJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/hall/n3) +"ZK" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/magenta, +/area/ministation/science) +"ZP" = ( +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/ministation/court) +"ZR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/hall/s3) +"ZS" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/shuttle/outgoing) +"ZT" = ( +/obj/machinery/camera/network/research{ + dir = 4 + }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/white, +/area/ministation/science) +"ZV" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/carpet/green, +/area/ministation/company_rep) +"ZW" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/ministation/library) +"ZZ" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/bell, +/turf/simulated/floor/carpet/red, +/area/ministation/court) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +NO +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(70,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +ab +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(71,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(72,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(73,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(74,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(76,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(78,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(79,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(80,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(82,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(83,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(85,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(86,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(87,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(88,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +yS +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(89,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(90,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(91,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(92,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(93,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(94,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(95,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(96,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(97,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(98,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(99,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(100,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(101,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(102,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(103,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(104,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(105,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(106,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +cn +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(107,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dt +Du +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(108,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +Dt +Zo +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(109,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +Dt +jm +Dt +Dt +Dt +gU +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(110,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +Dt +bu +Dt +UK +XJ +NW +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(111,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +Dt +Dt +Dt +Dt +Dt +Dt +Dt +Dt +Zg +Dt +PP +HB +NF +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(112,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cd +Cd +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +Dt +Gh +vm +Zj +zT +zT +mY +zT +RO +CN +KQ +eP +Dv +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(113,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cd +JK +Cd +cw +Cd +Cd +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Dt +Dt +Dt +Dt +oR +bl +bl +bl +bl +bl +bl +bl +bl +bl +bl +Am +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(114,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +PO +PO +PO +PO +PO +PO +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +Cd +Ie +Cd +cw +Cd +sQ +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Dt +pb +rk +Wx +sh +bl +nA +of +Aa +Ax +cP +Ax +AV +Aa +bl +Am +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(115,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ah +ah +ah +ah +ah +aa +aa +PO +Re +mW +mW +dZ +PO +PO +PO +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +Cd +lp +Cd +cw +Cd +DC +Cd +cw +cw +cw +cw +cw +cw +cw +aA +cw +cw +cw +cw +cw +Dt +Dt +Dt +Dt +sh +bl +sr +sr +sr +sr +sr +Ax +AW +Br +bl +Ec +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(116,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pa +ah +aR +br +bG +ah +aa +aa +PO +Il +Af +mW +qY +ur +hY +PO +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +Cd +Cd +Gu +Cd +Cd +Cd +RB +Cd +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Dt +sh +bl +nA +Ax +Ab +AL +sr +Ax +Bp +Ax +bl +Am +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(117,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Mo +aT +bs +bH +ah +co +co +co +co +co +Ee +av +PO +PO +PO +cw +cw +aa +aa +ab +aa +aa +aa +aa +aa +aa +cw +gF +Cd +Oo +Lq +xN +xN +xN +Fy +ls +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Dt +sh +bl +Bs +Bs +Bs +Bs +sr +tc +tU +sr +bl +GL +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(118,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ah +aW +bt +bI +ah +co +Ua +ZV +PV +co +yf +av +PO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cd +lp +sD +sD +Gi +sD +sD +Np +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +Dt +Dt +sh +bl +Bv +BD +BP +og +sr +td +tV +uA +bl +Am +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(119,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ah +ah +aX +ah +ah +ah +co +Dc +Io +YP +co +co +av +PO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cd +lp +sD +Pe +cg +Do +sD +Np +Cd +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +Dt +nL +sh +bl +Bu +BE +BQ +Bs +Bs +oF +Bs +Bs +bl +Yi +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(120,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ah +ah +aF +NH +bv +bK +qx +TR +IC +cD +Yj +Ib +AX +av +PO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cd +lp +sD +ug +XA +GD +sD +Np +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +Cd +cw +aa +aa +aa +aa +aa +Dt +fi +sh +bl +xg +Bt +IS +Bs +Cj +CA +By +De +bl +Am +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(121,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tQ +am +aI +ba +bw +TH +aJ +TR +WT +kq +sM +co +co +av +PO +PO +PO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +sD +sD +Cd +jy +AH +ug +OD +GD +sD +dE +Yv +Yv +Yv +Yv +Yv +Rp +Bh +ls +Cd +aa +aa +aa +aa +aa +aa +Dt +Dt +sh +bl +Bw +BE +BR +BZ +Ck +CB +BP +Df +bl +Am +Dt +Dt +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(122,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +ao +aJ +aY +aJ +MV +aJ +co +co +vl +co +co +fU +av +ur +qi +PO +aa +aa +aa +aa +aa +aa +aa +aa +sD +sD +sD +sD +pz +Eg +fl +sD +ug +XE +TP +sD +Be +LS +LS +LS +LS +LS +nI +Zv +nP +Zv +Zv +aa +aa +aa +aa +aa +aa +Dt +vJ +bl +Bx +BG +oG +Bs +Cl +CC +CT +Dg +bl +fN +Wx +pb +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(123,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +as +aK +aY +aJ +MV +bV +aD +aD +Sc +aD +aD +sD +eM +sD +sD +sD +sD +sD +sD +sD +tx +tx +tx +sD +sD +iu +iZ +sD +sD +Gu +sD +sD +sD +Cy +sD +sD +sD +sD +sD +sD +sD +Zv +Zv +Zv +Mn +Hj +Zv +kg +kg +kg +Zv +Zv +Zv +Zv +Bf +bl +bl +bl +bl +bl +bl +bl +CU +bl +bl +Dw +Dt +Dt +Dt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(124,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +wd +mk +aY +aJ +UR +pf +IV +Na +jL +Oc +ss +bW +cr +Pw +xH +fz +MU +RY +OW +Md +OW +So +gR +gR +Md +So +OW +OW +OW +OU +OW +OW +Qu +OW +uV +cp +zs +IA +hS +IA +Fe +JJ +Mc +we +Kg +uh +FC +UB +NJ +UB +wM +Pa +uh +uh +RQ +Bn +uh +RI +uh +ZR +uh +CD +CV +Dh +Dk +Dx +Zv +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(125,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +tA +aO +bb +bx +bM +Qs +yd +ZB +bM +rh +uX +sY +sB +pP +MZ +kh +pP +MZ +sC +sC +sC +sC +kh +kh +sC +PR +sC +sC +sC +ll +sC +sC +sC +sC +ZJ +sC +hx +GD +GD +GD +de +Gy +tt +tt +Mn +tt +Ou +Kr +Kr +Kr +uB +tt +tt +oN +Mn +tt +tt +Sq +tt +tt +tt +tt +Xl +tt +tt +Mn +kg +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(126,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Wh +ax +TE +bc +bz +bN +bX +ch +cs +fk +cE +cU +Ym +Sb +EW +Ar +rx +EW +zt +LL +fA +es +gx +gS +rx +LL +LL +LL +LL +LL +eO +sC +PR +sC +sC +ZJ +sC +uZ +GD +tv +GD +BS +Gy +oN +tt +uS +Pg +Pg +Pg +Pg +Pg +Bk +Pg +Pg +Pg +Rv +Pg +Pg +YZ +Pg +Pg +Rt +Pg +CW +Rt +Pg +Dy +kg +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(127,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +ay +ST +be +bA +bM +Qs +yd +OQ +bM +di +Pz +Da +sB +pP +MZ +kh +pP +MZ +sC +sC +sC +gQ +sC +kh +sC +PR +sC +sC +sC +ts +PR +sC +sC +sC +ZJ +sC +wa +GD +GD +GD +vq +Gy +tt +tt +tt +tt +tt +tt +tt +tt +aV +tt +tt +tt +tt +oN +oN +Sq +tt +tt +oN +tt +fZ +tt +tt +Mn +kg +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(128,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +az +pM +aJ +aY +bO +bY +ci +ct +uG +cF +dr +WO +Jo +AS +VL +gT +AS +VL +Wr +Dp +VZ +gy +VZ +Qt +hV +Tq +VZ +cJ +VZ +tY +VZ +VZ +VZ +VZ +Ia +VZ +LN +Xb +rf +Xb +lb +eZ +MB +fJ +iN +iN +iN +QG +fJ +zy +Co +fJ +fJ +rK +SE +fJ +tB +CM +SG +ui +ui +CE +SI +tt +oN +Dx +Zv +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(129,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +oS +aO +aJ +aY +bM +bZ +aD +ah +ah +ah +ah +LW +UI +UI +UI +CY +UI +ZP +Rx +Id +Sa +da +da +sl +da +Sa +Sa +da +da +Sa +Sa +Sa +Sa +sD +sD +sD +sD +tx +tx +tx +sD +ae +ae +ae +lG +lG +lG +ae +ae +ae +ae +ae +ae +if +AU +ae +ae +EB +ae +ae +ae +ae +ae +ae +ae +RT +oc +oc +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(130,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Dz +aB +aJ +aJ +aY +bM +vs +aD +cu +Mk +cV +yP +dS +Rx +Qh +Od +ND +Od +Xe +Rx +rW +Sa +QW +SP +YS +LT +gV +Vq +LM +LM +Vq +yj +Vq +Sa +aa +aa +cw +cw +cw +cw +cw +gF +ae +dw +dt +ar +ar +ar +ae +tu +zd +hf +iK +Al +gg +MF +ae +kn +kQ +lv +ae +mA +nr +MF +Mi +ae +iG +yh +ty +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(131,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Me +aC +aP +bf +bB +bP +ca +aD +he +VJ +UL +VJ +dT +Rx +Zt +Od +ND +Od +Od +Rx +Sk +Sa +wq +Uw +Up +Uw +Uw +Ws +LM +LM +Vq +LM +Vq +Sa +aa +aa +cw +cw +cw +cw +cw +cw +ae +gJ +fK +ar +eb +ar +ae +ee +iL +iL +iL +ig +db +dQ +ae +ko +RV +lw +ae +mB +ns +As +oB +ae +iG +oc +oc +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(132,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ah +ah +aQ +eF +Mb +LP +ah +aD +nl +Qq +cW +cW +Zr +tZ +Ir +Ir +UD +Ir +Ny +Rx +rW +Sa +VW +Tk +Ri +LM +Vq +Vq +Nk +LM +LM +LM +zw +Sa +aa +aa +cw +cw +cw +cw +cw +cw +ae +AY +fK +ar +ar +ar +ae +QT +iL +iL +iL +ig +db +jn +ae +kp +kR +lx +ae +mC +db +As +oB +ae +Nh +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(133,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jN +aa +aa +aa +aa +aa +aa +aa +aa +aD +bg +bg +bD +bg +bg +ad +nl +xc +cX +VJ +ET +Rx +Sf +Pk +TF +Px +Ov +Rx +pi +Sa +PB +QD +Uq +AE +RG +Jz +LM +LM +Vq +LM +Vq +Sa +aa +aa +cw +cw +cw +ae +kW +kW +ae +dv +Ik +QK +hg +eD +ae +gd +iL +iL +iL +ig +db +jo +ae +ae +kP +ae +ae +mD +db +As +oB +ae +iG +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(134,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +bi +bE +bT +bg +aa +nl +nl +nl +nl +LW +Rx +QR +Ir +ND +Ir +Ir +Rx +rW +Sa +Jk +ZW +yc +MP +UG +Vq +LM +fV +Vq +PE +Vq +Sa +Sa +Sa +cw +cw +ae +ae +kG +Jx +ae +ae +ae +ec +ae +ae +ae +iL +CL +iI +hh +ih +db +jp +ae +kr +kT +lz +ae +mG +db +As +oB +ae +iG +oc +oc +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(135,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +bn +bF +bq +bg +aa +aa +aa +aa +nl +NR +Rx +IB +ZZ +PT +dn +Ir +Rx +rW +Sa +Rf +Sa +Sa +Sa +Tv +WQ +uK +AQ +OM +OM +OM +HK +Um +hv +cw +cw +kW +wJ +PX +UJ +mN +Ix +hj +Sm +te +GF +iJ +nz +hG +hG +hG +Cg +LC +jq +ae +ks +kU +lA +ae +mF +db +As +DB +ae +iG +ap +rI +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(136,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +bp +bR +bq +bg +ad +aa +nl +nl +nl +Tc +Rx +Nc +Ms +Vv +Xi +YI +XM +eV +Sa +Zu +oQ +DD +Sa +Hl +kk +ZH +KU +Ex +Ex +Ex +KU +Tm +hv +cw +cw +kW +zC +ZK +rV +cL +bo +hH +hH +hH +XT +gH +Rl +gG +hH +hH +ik +iO +jr +jP +kt +kV +lB +mf +mE +nt +Po +dx +yu +ki +ap +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(137,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +nj +bq +bq +bg +ad +ad +nl +nN +nS +Tc +Rx +Rx +Rx +Rx +Rx +Rx +Rx +eW +Sa +ya +LM +lh +Sa +ps +kk +ZH +MJ +TI +DQ +Le +KU +Tm +Sa +cw +cw +kW +Eu +ae +ae +ae +cN +ae +ae +ae +ae +ae +iP +ae +ae +hI +db +db +js +ae +ku +NM +lC +ae +mH +nu +od +oC +ae +Qk +ap +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(138,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +by +ym +ym +bg +ad +aa +nl +nl +nQ +ET +VJ +Rx +MA +YQ +dX +eB +nX +eX +Sa +Vi +LA +lH +Sa +wY +mX +BV +KU +Vw +Le +Ef +KU +Tm +Sa +cw +cw +ae +ae +ae +cw +cL +ob +db +db +db +rp +Je +Wg +gI +ae +hJ +db +db +jt +ae +kv +NM +lD +ae +oD +nv +oD +oD +ae +iG +ap +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(139,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bg +bg +bg +bg +bg +aa +aa +aa +aa +nl +Tc +VJ +Rx +Nw +dq +dY +dY +dY +eY +Sa +sV +LM +xt +Sa +Sa +Sa +Sa +KU +Om +Om +Om +KU +Tm +hv +cw +cw +cw +cw +cw +cw +cL +ob +db +db +fb +db +db +RV +GJ +ae +hK +db +db +ju +ae +kw +NM +lE +ae +mJ +nw +oe +mJ +ae +jd +ap +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(140,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +Vt +yH +tZ +Nw +OP +Nw +Nw +Nw +Nw +Sa +Sa +Sa +yA +Sa +Sa +nZ +nl +RR +RR +st +RR +Aj +XI +hv +cw +cw +cw +cw +cw +cw +ae +aU +dy +ef +ae +fd +gf +OL +gK +ae +hL +in +iQ +jv +ae +kx +NM +Qf +ae +mJ +mJ +mJ +oE +ae +DX +op +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(141,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +iq +GT +Rx +SW +et +aq +nW +DF +Nw +Rx +WJ +pp +Ho +VJ +Oa +VJ +nl +Sa +Sa +Sa +Sa +Sa +Sa +Sa +cw +cw +cw +cw +cw +cw +ae +dc +dz +eg +ae +fe +db +tm +ae +ae +ae +ae +ae +ae +ae +ky +NM +GJ +ae +mK +mK +mK +mK +ae +oc +oc +yh +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(142,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +nl +Tc +Rx +Rx +Rx +Rx +Rx +Rx +Rx +Rx +Tc +nl +nl +nl +nl +nS +nl +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +dd +dd +aw +ae +ff +vc +Cw +ae +hm +hN +io +iR +ZT +db +kz +NM +db +ae +ae +ae +ae +ae +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(143,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +yz +pp +cW +cW +cW +pp +cW +cW +cW +Ho +nl +cw +cw +nl +Di +nl +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +dd +du +aw +ae +fg +gh +hF +ae +hn +hO +iS +iT +db +jw +db +NM +db +ae +cx +db +db +cI +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(144,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +nl +nl +nl +nl +nl +nl +nl +nl +nl +nl +nl +cw +cw +nl +VJ +nl +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +dd +dA +eh +ae +fh +LC +gi +ae +hM +ip +io +BC +jx +db +Xa +My +Tr +ae +lF +db +db +cI +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(145,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +xc +nl +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +ae +ae +ae +ae +cL +cL +cL +ae +ae +ae +ae +tT +fc +jR +XS +ob +Vx +uN +MI +db +db +zQ +ae +aa +oc +UQ +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(146,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nl +nl +nl +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +ae +ae +ae +ae +ae +XS +ob +jM +ae +gI +db +db +cI +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(147,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +PW +Yl +Yw +WK +ae +hi +ob +Oy +ae +ot +db +db +ge +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(148,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +Uo +OG +im +AZ +ii +Hw +IP +oP +ae +ae +ae +cL +cL +ae +aa +oc +ap +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(149,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +db +Qf +db +Zd +ae +db +VX +WA +ae +cw +pa +aa +aa +aa +aa +oc +Vb +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(150,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +aZ +gn +CR +Sh +ae +db +VX +GJ +ae +cw +aa +aa +aa +aa +aa +oc +oc +oc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(151,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +aA +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +UH +ey +ml +mJ +ae +db +VX +db +ae +cw +aa +aa +hl +YX +yR +yR +Tn +hl +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(152,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +uH +ey +mJ +mJ +ae +db +VX +db +cL +aa +aa +aa +Ok +sE +Ng +Nm +VB +Ok +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(153,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +ae +ae +vo +ae +ae +db +VX +db +cL +aa +aa +aa +nG +FM +UE +YR +rl +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(154,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +ky +VX +OC +ae +ae +ae +ae +nG +hy +nG +nG +zl +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(155,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +ae +uH +EP +gp +Yy +VI +uR +eH +VY +YO +PL +OK +HX +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(156,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aA +cw +cw +cw +cw +cw +aa +cw +cw +cw +ae +db +db +db +ae +ae +cL +ae +nG +Ye +Nb +nG +RE +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(157,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +ae +cL +cL +cL +ae +aa +aa +aa +ei +Mz +Go +iC +WM +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(158,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +nG +Tz +IT +TZ +YL +ei +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(159,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nG +ms +iM +Pn +mU +ei +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(160,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nG +RS +ON +TS +mm +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(161,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nG +nG +YH +Nr +nG +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(162,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nG +Qx +gN +ZS +NN +nG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(163,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ei +eA +rB +GK +SS +ei +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(164,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ei +ei +ei +ei +ei +ei +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(165,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(166,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(167,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(168,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(169,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(170,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(171,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(172,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(173,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(174,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(175,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(176,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(177,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(178,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(179,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(180,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(181,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(182,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(183,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(184,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(185,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(186,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(187,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(188,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(189,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(190,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(191,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(192,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(193,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(194,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(195,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(196,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(197,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(198,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(199,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(200,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(201,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(202,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(203,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(204,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(205,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(206,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(207,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(208,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(209,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(210,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(211,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(212,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(213,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(214,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(215,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(216,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(217,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(218,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(219,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(220,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(221,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(222,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(223,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(224,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(225,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(226,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(227,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(228,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(229,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(230,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(231,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(232,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(233,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(234,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(235,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(236,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(237,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(238,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(239,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(240,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(241,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(242,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(243,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(244,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(245,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(246,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(247,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(248,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(249,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(250,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(251,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(252,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(253,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(254,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(255,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/maps/ministation/ministation-3.dmm b/maps/ministation/ministation-3.dmm new file mode 100644 index 00000000000..4260640c1ad --- /dev/null +++ b/maps/ministation/ministation-3.dmm @@ -0,0 +1,66010 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/abstract/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) +"af" = ( +/turf/exterior/wall/random/ministation, +/area/space) +"aF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"aV" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"cw" = ( +/turf/simulated/floor/reinforced/airless, +/area/space) +"dp" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"dH" = ( +/turf/simulated/floor/plating, +/area/space) +"es" = ( +/obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/warning/airlock{ + pixel_y = 26 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"gu" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"hx" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/tracker, +/turf/simulated/floor/plating, +/area/space) +"hC" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"jq" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"kV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"ld" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"mI" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"nf" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"nY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"rw" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"rB" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"sD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"tN" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4overpass) +"ug" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "roof_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "roof_airlock"; + name = "exterior access button"; + pixel_x = -20; + command = "cycle_exterior"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/airless, +/area/ministation/maint/l4central) +"uG" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"uQ" = ( +/turf/simulated/floor/plating, +/area/ministation/maint/l4overpass) +"vD" = ( +/obj/machinery/power/solar_control{ + dir = 8 + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"wi" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"xN" = ( +/obj/abstract/map_data{ + height = 4 + }, +/turf/space, +/area/space) +"xZ" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/space) +"yS" = ( +/obj/abstract/landmark{ + name = "bluespace_a" + }, +/turf/space, +/area/space) +"yX" = ( +/turf/simulated/wall, +/area/ministation/maint/l4overpass) +"zd" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open, +/area/ministation/maint/l4overpass) +"Aj" = ( +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/space) +"AT" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/solar, +/turf/simulated/floor/plating, +/area/space) +"Cd" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"Cl" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) +"Cu" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open, +/area/ministation/maint/l4overpass) +"CJ" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/solar, +/turf/simulated/floor/airless, +/area/space) +"Dc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"DX" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"Ed" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"Fa" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4overpass) +"GD" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "roof_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "roof_airlock"; + name = "interior access button"; + pixel_x = 20; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"Hs" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"HM" = ( +/obj/machinery/network/relay{ + initial_network_id = "molluscnet" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"IZ" = ( +/obj/machinery/power/solar, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/space) +"Lu" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/solar, +/turf/simulated/floor/airless, +/area/space) +"Lx" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"MF" = ( +/obj/machinery/power/solar, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/space) +"Np" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"Nz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"NO" = ( +/obj/abstract/level_data_spawner/main_level, +/turf/space, +/area/space) +"SJ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"Uw" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/structure/cable{ + icon_state = "32-4" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 4 + }, +/turf/open, +/area/ministation/maint/l4central) +"VO" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"Wi" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"Wl" = ( +/obj/machinery/power/smes/buildable/preset, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"XA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "roof_vent" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "roof_airlock"; + pixel_y = null; + tag_airpump = "roof_vent"; + tag_chamber_sensor = "roof_sensor"; + tag_exterior_door = "roof_airlock_exterior"; + tag_interior_door = "roof_airlock_interior"; + dir = 4; + pixel_x = -20 + }, +/obj/machinery/airlock_sensor{ + id_tag = "roof_sensor"; + pixel_y = 10; + pixel_x = -20; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/l4central) +"Yv" = ( +/turf/simulated/wall, +/area/ministation/maint/l4central) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +NO +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +af +af +af +af +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +aa +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(70,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +af +af +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +ab +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(71,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(72,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(73,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(74,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(76,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(78,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(79,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(80,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(82,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(83,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(85,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(86,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(87,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(88,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +yS +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(89,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(90,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(91,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(92,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(93,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(94,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(95,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(96,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(97,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(98,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(99,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(100,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(101,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(102,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(103,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hx +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(104,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +Cl +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(105,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +uG +uG +uG +uG +Cl +uG +uG +uG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(106,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Lu +Lu +Lu +AT +AT +aa +wi +aa +AT +AT +Lu +Lu +Lu +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(107,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +xZ +mI +mI +mI +mI +Aj +dH +rw +Lx +Lx +Lx +Lx +hC +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(108,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +CJ +CJ +CJ +CJ +CJ +aa +dH +aa +CJ +CJ +CJ +CJ +CJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(109,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +uG +aa +aa +aa +dH +aa +aa +aa +uG +aa +aa +uG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(110,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Lu +Lu +Lu +Lu +Lu +aa +dH +aa +Lu +Lu +Lu +Lu +Lu +uG +uG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(111,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +xZ +mI +mI +mI +mI +Aj +dH +rw +Lx +Lx +Lx +Lx +hC +aa +uG +uG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(112,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +CJ +CJ +CJ +CJ +CJ +aa +dH +aa +CJ +CJ +CJ +CJ +CJ +cw +aa +uG +uG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(113,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +uG +aa +aa +aa +dH +aa +aa +aa +uG +cw +cw +cw +aa +Yv +Yv +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(114,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +IZ +IZ +IZ +IZ +IZ +aa +dH +aa +IZ +IZ +IZ +IZ +IZ +cw +aa +Yv +Uw +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(115,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +SJ +Wi +Wi +Wi +Wi +Aj +dH +rw +Ed +Ed +Ed +Ed +DX +cw +aa +Yv +es +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(116,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +MF +MF +MF +MF +MF +aa +dH +aa +MF +MF +MF +MF +MF +cw +cw +Yv +Cd +Yv +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(117,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +uG +aa +aa +aa +dH +aa +aa +aa +cw +cw +cw +cw +Yv +Yv +kV +Yv +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(118,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +Lu +Lu +Lu +Lu +Lu +aa +dH +aa +aa +aa +cw +cw +cw +cw +Yv +rB +aF +jq +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(119,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 +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +xN +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +xZ +mI +mI +mI +mI +Aj +nf +aa +aa +aa +cw +cw +cw +Yv +Yv +Yv +aV +Np +Yv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(120,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +CJ +CJ +CJ +CJ +CJ +aa +Hs +nY +nY +nY +nY +nY +nY +ug +XA +GD +sD +Dc +Yv +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(121,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +yX +yX +aa +aa +aa +aa +aa +uG +aa +aa +aa +dH +aa +cw +cw +cw +cw +cw +Yv +Yv +Yv +Nz +Wl +Yv +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(122,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +Cu +yX +aa +aa +aa +aa +aa +uG +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +Yv +gu +VO +dp +Yv +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(123,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Yv +HM +ld +vD +Yv +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(124,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +Yv +Yv +Yv +Yv +Yv +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(125,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +tN +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(126,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(127,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(128,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(129,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(130,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(131,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(132,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(133,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +yX +tN +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(134,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(135,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +cw +cw +cw +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(136,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +yX +yX +yX +yX +yX +yX +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(137,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +yX +zd +uQ +Fa +uQ +uQ +uQ +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(138,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +yX +yX +yX +yX +yX +yX +yX +yX +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(139,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(140,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(141,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(142,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(143,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(144,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(145,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(146,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(147,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(148,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(149,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(150,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(151,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(152,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(153,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(154,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(155,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(156,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(157,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(158,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(159,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(160,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(161,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(162,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(163,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(164,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cw +cw +cw +cw +cw +cw +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(165,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(166,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(167,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(168,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(169,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(170,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(171,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(172,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(173,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(174,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(175,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(176,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(177,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(178,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(179,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(180,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(181,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(182,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(183,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(184,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(185,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(186,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(187,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(188,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(189,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(190,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(191,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(192,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(193,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(194,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(195,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(196,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(197,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(198,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(199,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(200,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(201,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(202,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(203,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(204,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(205,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(206,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(207,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(208,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(209,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(210,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(211,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(212,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(213,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(214,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(215,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(216,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(217,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(218,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(219,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(220,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(221,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(222,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(223,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(224,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(225,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(226,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(227,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(228,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(229,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(230,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(231,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(232,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(233,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(234,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(235,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(236,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(237,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(238,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(239,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(240,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(241,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(242,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(243,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(244,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(245,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(246,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(247,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(248,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(249,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(250,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(251,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(252,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(253,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(254,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(255,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm index 69a9050c93e..a1f6317b4f0 100644 --- a/maps/ministation/ministation.dm +++ b/maps/ministation/ministation.dm @@ -2,28 +2,70 @@ Ministation "Zebra" A butchered variant on Giacom's Ministation designed for 5 to 10 players. Now poorly imported for Nebula! +And then imported back to ScavStation! +And then copied back upstream to Neb... */ #if !defined(USING_MAP_DATUM) + #define USING_MAP_DATUM /datum/map/ministation + + #ifdef UNIT_TEST + #include "../../code/unit_tests/offset_tests.dm" + #endif + + #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm" + #include "../../mods/content/xenobiology/_xenobiology.dme" #include "../../mods/content/corporate/_corporate.dme" #include "../../mods/content/matchmaking/_matchmaking.dme" #include "../../mods/species/ascent/_ascent.dme" + #include "../../mods/species/neoavians/_neoavians.dme" + #include "../../mods/species/vox/_vox.dme" #include "../../mods/species/serpentid/_serpentid.dme" - - #define USING_MAP_DATUM /datum/map/ministation - - #include "ministation.dmm" - #include "space.dmm" - #include "ministation_unit_testing.dm" + #include "../../mods/species/bayliens/_bayliens.dme" + #include "../../mods/content/mundane.dm" + #include "../../mods/content/bigpharma/_bigpharma.dme" + #include "../../mods/content/government/_government.dme" + #include "../../mods/content/modern_earth/_modern_earth.dme" + #include "../../mods/content/mouse_highlights/_mouse_highlight.dme" + #include "../../mods/content/psionics/_psionics.dme" + #include "../../mods/content/scaling_descriptors.dm" #include "ministation_antagonists.dm" #include "ministation_areas.dm" #include "ministation_departments.dm" + #include "ministation_documents.dm" #include "ministation_jobs.dm" #include "ministation_shuttles.dm" #include "ministation_objects.dm" + #include "ministation_unit_testing.dm" + #include "ministation_overrides.dm" + + #include "ministation-0.dmm" + #include "ministation-1.dmm" + #include "ministation-2.dmm" + #include "ministation-3.dmm" + #include "space.dmm" + + #include "../away/bearcat/bearcat.dm" + #include "../away/casino/casino.dm" + #include "../away/derelict/derelict.dm" + #include "../away/errant_pisces/errant_pisces.dm" + #include "../away/lost_supply_base/lost_supply_base.dm" + #include "../away/magshield/magshield.dm" + #include "../away/mining/mining.dm" + #include "../away/mobius_rift/mobius_rift.dm" + #include "../away/smugglers/smugglers.dm" + #include "../away/slavers/slavers_base.dm" + #include "../away/unishi/unishi.dm" + #include "../away/yacht/yacht.dm" + #include "../away/liberia/liberia.dm" + + #include "../../mods/mobs/dionaea/_dionaea.dme" + #include "../../mods/mobs/borers/_borers.dme" + + #include "ministation_overmap.dm" #include "jobs/command.dm" #include "jobs/civilian.dm" @@ -31,6 +73,7 @@ Now poorly imported for Nebula! #include "jobs/medical.dm" #include "jobs/security.dm" #include "jobs/science.dm" + #include "jobs/corporate.dm" #include "jobs/synthetics.dm" #include "outfits/_outfits.dm" @@ -40,6 +83,7 @@ Now poorly imported for Nebula! #include "outfits/medical.dm" #include "outfits/science.dm" #include "outfits/security.dm" + #include "outfits/corporate.dm" #elif !defined(MAP_OVERRIDE) diff --git a/maps/ministation/ministation_antagonists.dm b/maps/ministation/ministation_antagonists.dm index 914948d8fdb..3d2dbfd9be4 100644 --- a/maps/ministation/ministation_antagonists.dm +++ b/maps/ministation/ministation_antagonists.dm @@ -1,5 +1,4 @@ /decl/special_role - valid_species = list(SPECIES_HUMAN) initial_spawn_req = 1 initial_spawn_target = 1 @@ -29,11 +28,11 @@ initial_spawn_target = 2 command_department_id = /decl/department/command -/datum/map/ministation/potential_theft_targets = list( +/datum/map/ministation + potential_theft_targets = list( "an owl mask" = /obj/item/clothing/mask/gas/owl_mask, "a toy ripley" = /obj/item/toy/prize/powerloader, "a collectable top hat" = /obj/item/clothing/head/collectable/tophat, - "the reactive teleport armor" = /obj/item/clothing/suit/armor/reactive, "a jetpack" = /obj/item/tank/jetpack, "a captain's jumpsuit" = /obj/item/clothing/under/captain, "a pair of magboots" = /obj/item/clothing/shoes/magboots, @@ -43,6 +42,8 @@ "the hypospray" = /obj/item/chems/hypospray, "the captain's pinpointer" = /obj/item/pinpointer, "the championship belt" = /obj/item/storage/belt/champion, + "the corporate account documents" = /obj/item/documents/corporate/account, + "the corporate personnel data" = /obj/item/documents/corporate/personnel, "the table-top spaceship model" = /obj/item/toy/shipmodel, "the AI inteliCard" = /obj/item/aicard, "the nuclear authentication disk" = /obj/item/disk/nuclear, diff --git a/maps/ministation/ministation_areas.dm b/maps/ministation/ministation_areas.dm index b8472417cec..5d138148067 100644 --- a/maps/ministation/ministation_areas.dm +++ b/maps/ministation/ministation_areas.dm @@ -33,17 +33,29 @@ area_flags = AREA_FLAG_HALLWAY holomap_color = HOLOMAP_AREACOLOR_HALLWAYS -/area/ministation/hall/w - name = "\improper Port Hallway" +/area/ministation/hall/n + name = "\improper Forward Hallway" -/area/ministation/hall/s - name = "\improper Aft Hallway" +// first floor hallways -/area/ministation/hall/e - name = "\improper Starboard Hallway" +/area/ministation/hall/s1 + name = "\improper L1 Aft Hallway" -/area/ministation/hall/n - name = "\improper Forward Hallway" +// second floor hallways + +/area/ministation/hall/w2 + name = "\improper L2 Port Hallway" + +/area/ministation/hall/e2 + name = "\improper L2 Starboard Hallway" + +// third floor hallways + +/area/ministation/hall/s3 + name = "\improper L3 Aft Hallway" + +/area/ministation/hall/n3 + name = "\improper L3 Forward Hallway" //Maintenance /area/ministation/maint @@ -54,29 +66,71 @@ secure = TRUE holomap_color = HOLOMAP_AREACOLOR_MAINTENANCE -/area/ministation/maint/nw - name = "\improper Port Forward Maintenance" +// First floor maint + +/area/ministation/maint/westatmos + name = "\improper West Atmos Maintenance" + +/area/ministation/maint/eastatmos + name = "\improper East Atmos Maintenance" + +// /area/ministation/maint/l1nw +// name = "\improper Level One North West Maintenance" -/area/ministation/maint/ne - name = "\improper Starboard Forward Maintenance" +/area/ministation/maint/l1ne + name = "\improper Level One North East Maintenance" -/area/ministation/maint/w - name = "\improper Port Maintenance" +/area/ministation/maint/l1central + name = "\improper Level One Central Maintenance" -/area/ministation/maint/e - name = "\improper Starboard Maintenance" +// Second Floor Maint -/area/ministation/maint/sw - name = "\improper Port Quarter Maintenance" +/area/ministation/maint/l2centraln + name = "\improper Level Two Central North Maintenance" -/area/ministation/maint/se - name = "\improper Starboard Quarter Maintenance" +/area/ministation/maint/l2centrals + name = "\improper Level Two Central South Maintenance" -/area/ministation/maint/sec +/area/ministation/maint/secmaint name = "\improper Security Maintenance" -/area/ministation/maint/detective - name = "\improper Detective Office Maintenance" +/area/ministation/maint/hydromaint + name = "\improper Hydro Maintenance" + +/area/ministation/maint/l2underpass + name = "\improper Level Two Maintenance Underpass" + +// Third Floor Maint + +/area/ministation/maint/l3nw + name = "\improper Level Three Northwest Maintenance" + +/area/ministation/maint/l3ne + name = "\improper Level Three Northeast Maintenance" + +/area/ministation/maint/l3central + name = "\improper Level Three Central Maintenance" + +/area/ministation/maint/l3sw + name = "\improper Level Three Southwest Maintenance" + +/area/ministation/maint/l3se + name = "\improper Level Three Southeast Maintenance" + +// Fourth Floor Maint +/area/ministation/maint/l4central + name = "\improper Level Four Central Maintenance" + +/area/ministation/maint/l4overpass + name = "\improper Level Four Maintenance Overpass" + +//Maint Bypasses + +/area/ministation/maint/sebypass + name = "\improper Southeast Maintenance Shaft" + +/area/ministation/maint/nebypass + name = "\improper Northeast Maintenance Shaft" //Departments /area/ministation/hop @@ -90,13 +144,14 @@ req_access = list(access_janitor) icon_state = "janitor" -/area/ministation/commons - name = "\improper Common Area" - icon_state = "pink" +/area/ministation/trash + name = "\improper Trash Room" + req_access = list(access_janitor) + icon_state = "janitor" /area/ministation/cargo name = "\improper Cargo Bay" - req_access = list(access_cargo) + req_access = list(access_mining) icon_state = "brown" secure = TRUE holomap_color = HOLOMAP_AREACOLOR_CARGO @@ -106,6 +161,7 @@ req_access = list(access_heads) secure = TRUE icon_state = "dark_blue" + holomap_color = HOLOMAP_AREACOLOR_SECURITY /area/ministation/bridge/vault name = "\improper Vault" @@ -119,7 +175,6 @@ secure = TRUE icon_state = "red" area_flags = AREA_FLAG_SECURITY - holomap_color = HOLOMAP_AREACOLOR_SECURITY /area/ministation/detective name = "\improper Detective Office" @@ -137,14 +192,6 @@ name = "\improper Library" icon_state = "LIB" -/area/ministation/disused - name = "\improper Disused Section" - icon_state = "pink" - -/area/ministation/disused_office - name = "\improper Disused Office" - icon_state = "dark_blue" - /area/ministation/atmospherics name = "\improper Atmospherics" req_access = list(access_atmospherics) @@ -153,10 +200,9 @@ /area/ministation/science name = "\improper Research & Development Laboratory" - req_access = list(access_research) + req_access = list(access_robotics) secure = TRUE icon_state = "purple" - holomap_color = HOLOMAP_AREACOLOR_SCIENCE /area/ministation/eva name = "\improper EVA Storage" @@ -172,11 +218,17 @@ holomap_color = HOLOMAP_AREACOLOR_MEDICAL /area/ministation/cryo - name = "\improper Cryogenic Storage" + name = "\improper Medical Cryogenics" req_access = list() icon_state = "green" secure = FALSE +/area/ministation/dorms + name = "\improper Dormatories" + req_access = list() + icon_state = "red" + secure = FALSE + /area/ministation/hydro name = "\improper Hydroponics" req_access = list(access_hydroponics) @@ -189,12 +241,26 @@ /area/ministation/engine name = "Engineering" - req_access = list(access_engine) + req_access = list(access_engine_equip) ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') secure = TRUE icon_state = "yellow" holomap_color = HOLOMAP_AREACOLOR_ENGINEERING +/area/ministation/supermatter + name = "\improper Supermatter Engine" + req_access = list(access_engine) + ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') + secure = TRUE + icon_state = "brown" + +/area/ministation/smcontrol + name = "\improper Supermatter Control" + req_access = list(access_engine) + ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') + secure = TRUE + icon_state = "red" + /area/ministation/telecomms name = "\improper Telecommunications Control" req_access = list(list(access_engine),list(access_heads)) //can get inside to monitor but not actually access anything important. Inner doors have tcomm access @@ -203,6 +269,20 @@ icon_state = "light_blue" holomap_color = HOLOMAP_AREACOLOR_ENGINEERING +/area/ministation/company_rep + name = "\improper Company Representative Chamber" + req_access = list(access_lawyer) + icon_state = "brown" + +/area/ministation/arrival + name = "\improper Arrival Shuttle" // I hate this ugly thing + icon_state = "white" + requires_power = 0 + +/area/ministation/shuttle/outgoing + name = "\improper Science Shuttle" + icon_state = "shuttle" + //satellite /area/ministation/ai_sat name = "\improper Satellite" @@ -225,3 +305,36 @@ /area/shuttle/escape_shuttle name = "\improper Emergency Shuttle" icon_state = "shuttle" + +//Elevator + +/area/turbolift + name = "\improper Elevator" + icon_state = "shuttle" + requires_power = 0 + dynamic_lighting = TRUE + sound_env = STANDARD_STATION + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + ambience = list( + 'sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg' + ) + + arrival_sound = null + lift_announce_str = null + +/area/turbolift/alert_on_fall(var/mob/living/carbon/human/H) + if(H.client && SSpersistence.elevator_fall_shifts > 0) + SSwebhooks.send(WEBHOOK_ELEVATOR_FALL, list("text" = "We managed to make it [SSpersistence.elevator_fall_shifts] shift\s without someone falling down an elevator shaft.")) + SSpersistence.elevator_fall_shifts = -1 + +/area/turbolift/l1 + name = "Station Level 1" + base_turf = /turf/simulated/floor + +/area/turbolift/l2 + name = "Station Level 2" + base_turf = /turf/open + +/area/turbolift/l3 + name = "Station Level 3" + base_turf = /turf/open \ No newline at end of file diff --git a/maps/ministation/ministation_areas.dmi b/maps/ministation/ministation_areas.dmi index e4389c0e3bd..bc53c1e9b8a 100644 Binary files a/maps/ministation/ministation_areas.dmi and b/maps/ministation/ministation_areas.dmi differ diff --git a/maps/ministation/ministation_define.dm b/maps/ministation/ministation_define.dm index 343d30304a3..10f60b50d39 100644 --- a/maps/ministation/ministation_define.dm +++ b/maps/ministation/ministation_define.dm @@ -17,6 +17,10 @@ lobby_screens = list('maps/ministation/ministation_lobby.png') + overmap_ids = list(OVERMAP_ID_SPACE) + num_exoplanets = 3 + away_site_budget = 3 + shuttle_docked_message = "The public ferry to %dock_name% has docked with the station. It will depart in approximately %ETD%" shuttle_leaving_dock = "The public ferry has left the station. Estimate %ETA% until the ferry docks at %dock_name%." shuttle_called_message = "A public ferry to %dock_name% has been scheduled. It will arrive in approximately %ETA%" @@ -58,7 +62,6 @@ list("name" = "Security", "key" = "s", "frequency" = 1359, "color" = COMMS_COLOR_SECURITY, "span_class" = "secradio", "secured" = list(access_security)) ) - /datum/map/ministation/get_map_info() - return "You're aboard the [station_name], an older station once used for unethical scientific research. It has long since been repurposed as deep space communication relay, though only on paper. \ - Onboard activity is at the whims of the [boss_name] who treat the station as a glorified dogsbody, and sometimes guinea pig." + return "You're aboard the [station_name], an older station once used for unethical economic research. It has long since been repurposed as deep space communication relay, though only on paper. \ + Onboard activity is at the whims of the [boss_name] who treat the station as a dumping ground for less desired personnel." \ No newline at end of file diff --git a/maps/ministation/ministation_departments.dm b/maps/ministation/ministation_departments.dm index 8c759b6850f..f77a1d5c9b3 100644 --- a/maps/ministation/ministation_departments.dm +++ b/maps/ministation/ministation_departments.dm @@ -62,10 +62,17 @@ /obj/item/robot_module/security associated_department = /decl/department/security -/obj/machinery/network/pager/security +/obj/machinery/network/pager/security department = /decl/department/security /decl/department/miscellaneous name = "Misc" display_priority = -1 display_color = "#ccffcc" + +/decl/department/corporate + name = "Corporate" + announce_channel = "Corporate" + colour = "#b98f03" + display_priority = 4 + display_color = "#ffddf0" \ No newline at end of file diff --git a/maps/ministation/ministation_documents.dm b/maps/ministation/ministation_documents.dm new file mode 100644 index 00000000000..14c3d1d8b7d --- /dev/null +++ b/maps/ministation/ministation_documents.dm @@ -0,0 +1,9 @@ +/obj/item/documents/corporate/account + name = "corporate accounting documents" + desc = "These contain exhaustive information about company dealings, with up-to-date information regarding wealth and resources controlled by the house." + description_antag = "In the wrong hands, the house could certainly find itself disavantaged in dealings in the future." + +/obj/item/documents/corporate/personnel + name = "corporate personnel data" + desc = "Corporate interests are furthered by those who serve the company. A good operation must know all who work for it." + description_antag = "An enemy of the company could use this to figure out where personnel live and who among them might be a problem to them." diff --git a/maps/ministation/ministation_jobs.dm b/maps/ministation/ministation_jobs.dm index f20d807dacf..15391b2a6f4 100644 --- a/maps/ministation/ministation_jobs.dm +++ b/maps/ministation/ministation_jobs.dm @@ -11,10 +11,15 @@ /datum/job/ministation/computer, /datum/job/ministation/detective, /datum/job/ministation/doctor, + /datum/job/ministation/doctor/head, /datum/job/ministation/engineer, + /datum/job/ministation/engineer/head, /datum/job/ministation/hop, /datum/job/ministation/janitor, /datum/job/ministation/scientist, + /datum/job/ministation/scientist/head, /datum/job/ministation/security, - /datum/job/ministation/librarian + /datum/job/ministation/security/head, + /datum/job/ministation/librarian, + /datum/job/ministation/corporate/rep ) diff --git a/maps/ministation/ministation_objects.dm b/maps/ministation/ministation_objects.dm index 8edc719f8e0..9f474ea0ff5 100644 --- a/maps/ministation/ministation_objects.dm +++ b/maps/ministation/ministation_objects.dm @@ -1,28 +1,6 @@ -/obj/abstract/ministation/random_asteroid_spawner/ - name = "random asteroid spawner" - icon = 'icons/misc/mark.dmi' - icon_state = "X" - color = COLOR_PURPLE - alpha = 255 //so it's not invisible in map editor - -/obj/abstract/ministation/random_asteroid_spawner/Initialize() - ..() - . = INITIALIZE_HINT_LATELOAD - -/obj/abstract/ministation/random_asteroid_spawner/LateInitialize(var/ml) - var/turf/space/thisturf = src.loc - if(prob(1) && istype(thisturf)) //if this turf is space there is a one percent chance of turning it into an asteroid. - generate_asteroid(70, thisturf.ChangeTurf(/turf/exterior/wall/random/ministation)) //turn the turf into an asteroid wall and call generate asteroid on it, which will generate more walls around it. - qdel(src) - -//tries to convert the space turfs around the asteroid into asteroids. -/obj/abstract/ministation/random_asteroid_spawner/proc/generate_asteroid(var/probability, var/turf/sourceasteroid) - for(var/ndir in global.cardinal) - var/turf/ad = get_step(sourceasteroid, ndir) - if(prob(probability)) - if(istype(ad, /turf/space)) //if it's space turn it into asteroid - //newasteroid = ad.ChangeTurf(/turf/exterior/wall/random/ministation) - generate_asteroid(max(10,probability-10), ad.ChangeTurf(/turf/exterior/wall/random/ministation)) //reduce the probability of conversion with 10 percent for each turf away from the starting one. +/turf/exterior/wall/random/ministation + initial_gas = null + floor_type = /turf/exterior/barren/airless /turf/exterior/wall/random/ministation/get_weighted_mineral_list() if(prob(80)) @@ -88,28 +66,9 @@ /obj/machinery/camera/motion/ministation preset_channels = list("Satellite") -//Detective bs -/obj/item/camera_film/high - name = "high capacity film cartridge" - max_uses = 30 - uses_left = 30 +/obj/machinery/camera/network/command + preset_channels = list("Command") + initial_access = list(access_bridge) -/obj/item/camera/detective - name = "detective's camera" - desc = "A single use disposable polaroid photo camera." - -/obj/item/camera/detective/Initialize() - . = ..() - film = new /obj/item/camera_film/high(src) - -/obj/item/camera/detective/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/camera_film)) - return FALSE //Prevent reloading - return ..() - -/obj/item/camera/detective/eject_film(mob/user) - return - -/obj/item/camera/detective/get_alt_interactions(mob/user) - . = ..() - LAZYREMOVE(., /decl/interaction_handler/camera_eject_film) +/obj/machinery/camera/network/hallway + preset_channels = list("Hallway") \ No newline at end of file diff --git a/maps/ministation/ministation_overmap.dm b/maps/ministation/ministation_overmap.dm new file mode 100644 index 00000000000..678130539c2 --- /dev/null +++ b/maps/ministation/ministation_overmap.dm @@ -0,0 +1,20 @@ +/obj/effect/overmap/visitable/ship/ministation + name = "Space Station Zebra" + color = "#00ffff" + start_x = 4 + start_y = 4 + vessel_mass = 5000 + max_speed = 1/(2 SECONDS) + burn_delay = 2 SECONDS + restricted_area = 30 + sector_flags = OVERMAP_SECTOR_KNOWN|OVERMAP_SECTOR_BASE|OVERMAP_SECTOR_IN_SPACE + + initial_generic_waypoints = list( + "nav_ministation_bridge_north", + "nav_ministation_arrivals_south" + ) + + //exploration and rescue shuttles can only dock port side, b/c there's only one door. + initial_restricted_waypoints = list( + /datum/shuttle/autodock/overmap/science_shuttle = list("nav_ministation_science_dock_shuttle") + ) diff --git a/maps/ministation/ministation_overrides.dm b/maps/ministation/ministation_overrides.dm new file mode 100644 index 00000000000..508fbdaab31 --- /dev/null +++ b/maps/ministation/ministation_overrides.dm @@ -0,0 +1,10 @@ +/datum/computer_file/program/merchant/ministation + read_access = list() + +/obj/machinery/computer/modular/preset/merchant/ministation + default_software = list( + /datum/computer_file/program/merchant/ministation, + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/supply + ) diff --git a/maps/ministation/ministation_shuttles.dm b/maps/ministation/ministation_shuttles.dm index e82fc97b319..7aaac066f70 100644 --- a/maps/ministation/ministation_shuttles.dm +++ b/maps/ministation/ministation_shuttles.dm @@ -37,3 +37,57 @@ /obj/effect/shuttle_landmark/escape_shuttle/station landmark_tag = "nav_escape_shuttle_station" docking_controller = "station1" + +/obj/effect/shuttle_landmark/bridge_north + landmark_tag = "nav_ministation_bridge_north" + +/obj/effect/shuttle_landmark/arrivas_south + landmark_tag = "nav_ministation_arrivals_south" + +/obj/machinery/computer/shuttle_control/explore/ministation + name = "science shuttle console" + shuttle_tag = "Science Shuttle" + +/datum/shuttle/autodock/overmap/science_shuttle + name = "Science Shuttle" + shuttle_area = /area/ministation/shuttle/outgoing + dock_target = "science_shuttle" + current_location = "nav_ministation_science_dock_shuttle" + +/obj/effect/shuttle_landmark/science_dock + name = "Science Department Docking Arm" + docking_controller = "ministation_science_dock" + landmark_tag = "nav_ministation_science_dock_shuttle" + +/obj/effect/overmap/visitable/ship/landable/science_shuttle + name = "Science Shuttle" + shuttle = "Science Shuttle" + moving_state = "ship_moving" + max_speed = 1/(2 SECONDS) + burn_delay = 1 SECONDS + vessel_mass = 3000 + fore_dir = EAST + skill_needed = SKILL_BASIC + vessel_size = SHIP_SIZE_SMALL + +// Essentially a bare platform that moves up and down. +/obj/abstract/turbolift_spawner/ministation + name = "Tradestation cargo elevator placeholder" +// icon = 'icons/obj/turbolift_preview_nowalls_3x3.dmi' + depth = 3 + lift_size_x = 2 + lift_size_y = 2 + door_type = null + wall_type = null + firedoor_type = null + light_type = null + floor_type = /turf/simulated/floor/tiled/steel_grid + button_type = /obj/structure/lift/button/standalone + panel_type = /obj/structure/lift/panel/standalone + areas_to_use = list( + /area/turbolift/l1, + /area/turbolift/l2, + /area/turbolift/l3 + ) + floor_departure_sound = 'sound/effects/lift_heavy_start.ogg' + floor_arrival_sound = 'sound/effects/lift_heavy_stop.ogg' diff --git a/maps/ministation/ministation_unit_testing.dm b/maps/ministation/ministation_unit_testing.dm index d2242b32d00..5a9d945921f 100644 --- a/maps/ministation/ministation_unit_testing.dm +++ b/maps/ministation/ministation_unit_testing.dm @@ -8,4 +8,12 @@ /area/ministation/maint = NO_SCRUBBER|NO_VENT, /area/ministation/bridge/vault = NO_SCRUBBER|NO_VENT, /area/ministation/supply_dock = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/arrival = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/shuttle/outgoing = NO_SCRUBBER, + /area/ministation/maint/sebypass = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/maint/nebypass = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/maint/l4overpass = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/maint/l2underpass = NO_SCRUBBER|NO_VENT|NO_APC, + /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ministation/atmospherics = NO_SCRUBBER, ) diff --git a/maps/ministation/outfits/_outfits.dm b/maps/ministation/outfits/_outfits.dm index e42f30fd13b..08bbd22b146 100644 --- a/maps/ministation/outfits/_outfits.dm +++ b/maps/ministation/outfits/_outfits.dm @@ -4,4 +4,4 @@ pda_type = /obj/item/modular_computer/pda pda_slot = slot_l_store_str l_ear = null - r_ear = null \ No newline at end of file + r_ear = null diff --git a/maps/ministation/outfits/civilian.dm b/maps/ministation/outfits/civilian.dm index f5695c67e75..eb934653708 100644 --- a/maps/ministation/outfits/civilian.dm +++ b/maps/ministation/outfits/civilian.dm @@ -1,22 +1,11 @@ /decl/hierarchy/outfit/job/ministation/cargo - l_ear = /obj/item/radio/headset/ministation_headset_cargo + l_ear = /obj/item/radio/headset/headset_cargo name = "Ministation - Job - Cargo technician" uniform = /obj/item/clothing/under/cargotech id_type = /obj/item/card/id/ministation/cargo pda_type = /obj/item/modular_computer/pda/cargo backpack_contents = list(/obj/item/crowbar = 1, /obj/item/storage/ore = 1) - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL - -/obj/item/encryptionkey/ministation_headset_cargo - name = "cargo radio encryption key" - icon_state = "srv_cypherkey" - can_decrypt = list(access_cargo) - -/obj/item/radio/headset/ministation_headset_cargo - name = "supply radio headset" - desc = "A headset used by the box-pushers." - icon = 'maps/ministation/icons/headset_cargo.dmi' - encryption_keys = list(/obj/item/encryptionkey/ministation_headset_cargo) + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR /decl/hierarchy/outfit/job/ministation/cargo/Initialize() . = ..() diff --git a/maps/ministation/outfits/command.dm b/maps/ministation/outfits/command.dm index b0680406cb7..0a499acf24b 100644 --- a/maps/ministation/outfits/command.dm +++ b/maps/ministation/outfits/command.dm @@ -14,13 +14,13 @@ backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/cap backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/com -/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/ministation/captain/post_equip(var/mob/living/carbon/human/H) ..() - if(H.get_age() > 49) + if(H.get_age() > 20) // Since we can have something other than the default uniform at this // point, check if we can actually attach the medal var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) - if(uniform) + if(istype(uniform)) var/obj/item/clothing/accessory/medal/gold/medal = new() if(uniform.can_attach_accessory(medal)) uniform.attach_accessory(null, medal) @@ -32,6 +32,8 @@ uniform = /obj/item/clothing/under/head_of_personnel l_ear = /obj/item/radio/headset/heads/hop shoes = /obj/item/clothing/shoes/color/brown + r_pocket = /obj/item/gun/energy/taser + hands = list(/obj/item/clothing/suit/armor/bulletproof) id_type = /obj/item/card/id/silver pda_type = /obj/item/modular_computer/pda/heads/hop backpack_contents = list(/obj/item/storage/box/ids = 1) diff --git a/maps/ministation/outfits/corporate.dm b/maps/ministation/outfits/corporate.dm new file mode 100644 index 00000000000..892411a9d66 --- /dev/null +++ b/maps/ministation/outfits/corporate.dm @@ -0,0 +1,9 @@ +/decl/hierarchy/outfit/job/ministation/corporate + name = "Ministation - Company Representative" + id_type = /obj/item/card/id/ministation/corporate_rep + +/obj/item/card/id/ministation/corporate_rep + name = "identification card" + desc = "A card issued to Company Representatives." + color = COLOR_GOLD + extra_details = list("goldstripe") diff --git a/maps/ministation/outfits/engineering.dm b/maps/ministation/outfits/engineering.dm index daeedf3c563..994ca44c6ed 100644 --- a/maps/ministation/outfits/engineering.dm +++ b/maps/ministation/outfits/engineering.dm @@ -4,7 +4,7 @@ l_ear = /obj/item/radio/headset/headset_eng shoes = /obj/item/clothing/shoes/workboots pda_slot = slot_l_store_str - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR head = /obj/item/clothing/head/hardhat uniform = /obj/item/clothing/under/engineer r_pocket = /obj/item/t_scanner @@ -15,7 +15,16 @@ . = ..() BACKPACK_OVERRIDE_ENGINEERING +/decl/hierarchy/outfit/job/ministation/engineer/head + name = "Job - Head Engineer" + glasses = /obj/item/clothing/glasses/welding/superior + suit = /obj/item/clothing/suit/storage/hazardvest + gloves = /obj/item/clothing/gloves/thick + pda_type = /obj/item/modular_computer/pda/heads/ce + hands = list(/obj/item/wrench) + l_ear = /obj/item/radio/headset/heads/ce + /obj/item/card/id/ministation/engineering name = "identification card" desc = "A card issued to engineering staff." - detail_color = COLOR_SUN \ No newline at end of file + detail_color = COLOR_SUN diff --git a/maps/ministation/outfits/medical.dm b/maps/ministation/outfits/medical.dm index 43211f92686..055ded83358 100644 --- a/maps/ministation/outfits/medical.dm +++ b/maps/ministation/outfits/medical.dm @@ -3,7 +3,7 @@ shoes = /obj/item/clothing/shoes/color/white pda_type = /obj/item/modular_computer/pda/medical pda_slot = slot_l_store_str - name = "Ministation - Job - Medical Doctor" + name = "Ministation - Job - Junior Doctor" uniform = /obj/item/clothing/under/medical hands = list(/obj/item/storage/firstaid/adv) r_pocket = /obj/item/flashlight/pen @@ -13,7 +13,14 @@ . = ..() BACKPACK_OVERRIDE_MEDICAL +/decl/hierarchy/outfit/job/ministation/doctor/head + name = "Ministation - Job - Head Doctor" + l_ear = /obj/item/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/det/black + shoes = /obj/item/clothing/shoes/dress + r_pocket = /obj/item/chems/hypospray/vial + /obj/item/card/id/ministation/doctor name = "identification card" desc = "A card issued to medical staff." - detail_color = COLOR_PALE_BLUE_GRAY \ No newline at end of file + detail_color = COLOR_PALE_BLUE_GRAY diff --git a/maps/ministation/outfits/science.dm b/maps/ministation/outfits/science.dm index 22c45d2da3b..96f3f4daeb1 100644 --- a/maps/ministation/outfits/science.dm +++ b/maps/ministation/outfits/science.dm @@ -2,11 +2,23 @@ l_ear = /obj/item/radio/headset/headset_sci shoes = /obj/item/clothing/shoes/color/white pda_type = /obj/item/modular_computer/pda/science - name = "Ministation - Job - Scientist" + name = "Ministation - Job - Researcher" uniform = /obj/item/clothing/under/color/white id_type = /obj/item/card/id/ministation/scientist /obj/item/card/id/ministation/scientist name = "identification card" desc = "A card issued to science staff." - detail_color = COLOR_PALE_PURPLE_GRAY \ No newline at end of file + detail_color = COLOR_PALE_PURPLE_GRAY + +/decl/hierarchy/outfit/job/ministation/scientist/head + name = "Tradeship - Job - Head Researcher" + l_ear = /obj/item/radio/headset/heads/rd + shoes = /obj/item/clothing/shoes/dress + pda_type = /obj/item/modular_computer/pda/science + id_type = /obj/item/card/id/ministation/scientist/head + +/obj/item/card/id/ministation/scientist/head + name = "identification card" + desc = "A card which represents knowledge and reasoning." + extra_details = list("goldstripe") \ No newline at end of file diff --git a/maps/ministation/outfits/security.dm b/maps/ministation/outfits/security.dm index b790a784097..474514ad922 100644 --- a/maps/ministation/outfits/security.dm +++ b/maps/ministation/outfits/security.dm @@ -3,8 +3,8 @@ decals = list("stripe" = COLOR_RED_LIGHT) /decl/hierarchy/outfit/job/ministation/security + l_ear = /obj/item/radio/headset/headset_sec glasses = /obj/item/clothing/glasses/sunglasses/sechud - l_ear = /obj/item/radio/headset/ministation_headset_sec gloves = /obj/item/clothing/gloves/thick shoes = /obj/item/clothing/shoes/jackboots backpack_contents = list(/obj/item/handcuffs = 1) @@ -15,16 +15,9 @@ id_type = /obj/item/card/id/ministation/security pda_type = /obj/item/modular_computer/pda/security -/obj/item/encryptionkey/ministation_headset_sec - name = "security radio encryption key" - icon_state = "srv_cypherkey" - can_decrypt = list(access_security) - -/obj/item/radio/headset/ministation_headset_sec - name = "security radio headset" - desc = "This is used by your elite security force." - icon = 'maps/ministation/icons/headset_security.dmi' - encryption_keys = list(/obj/item/encryptionkey/ministation_headset_sec) +/decl/hierarchy/outfit/job/ministation/security/head + l_ear = /obj/item/radio/headset/heads/hos + name = "Ministation - Job - Head of Security" /decl/hierarchy/outfit/job/ministation/security/Initialize() . = ..() @@ -42,7 +35,7 @@ name = "Ministation - Job - Detective" head = /obj/item/clothing/head/det glasses = /obj/item/clothing/glasses/sunglasses/sechud - l_ear = /obj/item/radio/headset/ministation_headset_sec + l_ear = /obj/item/radio/headset/headset_sec uniform = /obj/item/clothing/under/det suit = /obj/item/clothing/suit/storage/det_trench l_pocket = /obj/item/flame/lighter/zippo diff --git a/maps/ministation/space.dmm b/maps/ministation/space.dmm index 8035ee94e44..7baf4f23bd7 100644 --- a/maps/ministation/space.dmm +++ b/maps/ministation/space.dmm @@ -106,7 +106,8 @@ "au" = ( /obj/machinery/airlock_sensor{ id_tag = "shuttle3_sensor"; - pixel_y = -20 + pixel_y = -20; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 8; @@ -199,7 +200,7 @@ /area/shuttle/escape_shuttle) "aF" = ( /obj/structure/table/reinforced, -/obj/item/robot_rack/roller{ +/obj/structure/bed/roller{ pixel_y = 10 }, /turf/simulated/floor/shuttle/blue, @@ -238,13 +239,15 @@ /area/shuttle/escape_shuttle) "aJ" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -30 + pixel_y = -29; + dir = 1 }, /turf/simulated/floor/shuttle/blue, /area/shuttle/escape_shuttle) "aK" = ( /obj/machinery/status_display{ - pixel_y = -30 + pixel_y = -30; + dir = 1 }, /turf/simulated/floor/shuttle/blue, /area/shuttle/escape_shuttle) @@ -257,7 +260,7 @@ /area/shuttle/escape_shuttle) "aN" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 30 + pixel_y = 29 }, /turf/simulated/floor/shuttle/yellow, /area/shuttle/escape_shuttle) @@ -359,7 +362,8 @@ "hM" = ( /obj/machinery/airlock_sensor{ id_tag = "shuttle2_sensor"; - pixel_y = -20 + pixel_y = -20; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 8; @@ -373,7 +377,8 @@ "qu" = ( /obj/machinery/airlock_sensor{ id_tag = "shuttle1_sensor"; - pixel_y = -20 + pixel_y = -20; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 8; @@ -404,7 +409,7 @@ "Kt" = ( /obj/structure/window/borosilicate_reinforced, /obj/structure/showcase{ - desc = "It's actually a yinglet inside the box piloting the shuttle but don't tell anyone."; + desc = "It's actually a possum inside the box piloting the shuttle but don't tell anyone."; icon_state = "message_server_o_off"; name = "auto-pilot system" }, @@ -433,6 +438,10 @@ }, /turf/simulated/floor/shuttle/blue, /area/shuttle/escape_shuttle) +"Pe" = ( +/obj/abstract/level_data_spawner/admin_level, +/turf/space, +/area/space) "Qd" = ( /obj/machinery/atmospherics/pipe/manifold{ dir = 8 @@ -453,10 +462,6 @@ /obj/effect/step_trigger/teleporter/random, /turf/space/transit/north, /area/space) -"YY" = ( -/obj/abstract/level_data_spawner/admin_level, -/turf/space, -/area/space) (1,1,1) = {" UO @@ -715,7 +720,7 @@ aa aa aa aa -aa +Pe aa "} (3,1,1) = {" @@ -844,7 +849,7 @@ aa aa aa aa -YY +aa aa aa "} @@ -2006,10 +2011,10 @@ ab ab ac ac -ac Mu -KH ac +ac +KH ab ab tC @@ -2136,10 +2141,10 @@ tC ab ab ab -ae -ab ab ae +ae +ab ab ab tC diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm index 779cbb33523..02ebb0f5edd 100644 --- a/maps/modpack_testing/modpack_testing.dm +++ b/maps/modpack_testing/modpack_testing.dm @@ -5,6 +5,8 @@ #include "../../mods/content/mundane.dm" #include "../../mods/content/scaling_descriptors.dm" + + #include "../../mods/content/dungeon_loot/_dungeon_loot.dme" #include "../../mods/content/bigpharma/_bigpharma.dme" #include "../../mods/content/byond_membership/_byond_membership.dm" #include "../../mods/content/corporate/_corporate.dme" diff --git a/maps/outreach/backup/outreach-1.dmm b/maps/outreach/backup/outreach-1.dmm index 6ff91afc660..4c12b99e455 100644 --- a/maps/outreach/backup/outreach-1.dmm +++ b/maps/outreach/backup/outreach-1.dmm @@ -77,7 +77,7 @@ /turf/simulated/wall/r_wall, /area/outreach/outpost/engineering/b2/geothermals) "ap" = ( -/turf/exterior/water/outreach, +/turf/exterior/chlorine_sand/muriatic_acid_swamp, /area/exoplanet/outreach/underground/d2) "aq" = ( /obj/structure/wall_frame/concrete, diff --git a/maps/outreach/backup/outreach-2.dmm b/maps/outreach/backup/outreach-2.dmm index ac93bebd60d..f406776c072 100644 --- a/maps/outreach/backup/outreach-2.dmm +++ b/maps/outreach/backup/outreach-2.dmm @@ -19,7 +19,7 @@ /turf/exterior/barren/subterrane/outreach, /area/exoplanet/outreach/underground/d1) "af" = ( -/turf/exterior/water/outreach, +/turf/exterior/chlorine_sand/muriatic_acid_swamp, /area/exoplanet/outreach/underground/d1) "ag" = ( /obj/structure/cable/yellow{ @@ -1439,7 +1439,7 @@ dir = 8; icon_state = "bulb_map" }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/b1) "dq" = ( /obj/machinery/atmospherics/pipe/simple/visible, @@ -1629,7 +1629,7 @@ /turf/simulated/floor/bluegrid, /area/outreach/outpost/control/servers) "dK" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/outreach/b1) "dL" = ( /obj/machinery/light_switch{ @@ -2405,9 +2405,9 @@ /obj/item/scanner/plant, /obj/item/scanner/plant, /obj/item/scanner/plant, -/obj/item/shovel/spade, -/obj/item/shovel/spade, -/obj/item/shovel/spade, +/obj/item/tool/spade, +/obj/item/tool/spade, +/obj/item/tool/spade, /obj/item/storage/plants, /obj/item/storage/plants, /obj/item/storage/plants, @@ -5751,7 +5751,7 @@ /area/outreach/outpost/medbay/triage) "lT" = ( /obj/structure/table, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /turf/simulated/floor/tiled, /area/outreach/outpost/cafeteria) "lU" = ( @@ -8473,7 +8473,7 @@ /turf/simulated/floor/tiled, /area/outreach/outpost/hydroponics) "qA" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/basement1) "qB" = ( /obj/structure/cable/blue{ @@ -12074,7 +12074,7 @@ /obj/structure/sign/deck/second{ pixel_y = 32 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/b1) "xd" = ( /obj/structure/morgue, @@ -13812,7 +13812,7 @@ icon_state = "down-scrubbers"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/b1) "An" = ( /obj/structure/lattice, @@ -13834,7 +13834,7 @@ dir = 1 }, /obj/machinery/light/small, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/b1) "Ao" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ @@ -16287,7 +16287,7 @@ icon_state = "open"; dir = 8 }, -/obj/structure/plasticflaps/airtight, +/obj/structure/flaps/airtight, /obj/machinery/conveyor{ dir = 4; icon_state = "conveyor0"; @@ -19273,10 +19273,10 @@ dir = 6 }, /obj/structure/rack/dark, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, +/obj/item/tool/hammer, +/obj/item/tool/hammer, +/obj/item/tool/hammer, +/obj/item/tool/hammer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/outreach/outpost/mining/b1/storage) diff --git a/maps/outreach/backup/outreach-3.dmm b/maps/outreach/backup/outreach-3.dmm index 3ab817b95c9..fcb65efd8ad 100644 --- a/maps/outreach/backup/outreach-3.dmm +++ b/maps/outreach/backup/outreach-3.dmm @@ -25,7 +25,7 @@ /turf/exterior/barren/outreach, /area/exoplanet/outreach) "ad" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach) "ae" = ( /turf/simulated/wall/r_wall, @@ -133,7 +133,7 @@ /turf/exterior/chlorine_sand/outreach, /area/exoplanet/outreach) "aE" = ( -/turf/exterior/water/outreach, +/turf/exterior/chlorine_sand/muriatic_acid_swamp, /area/exoplanet/outreach) "aF" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, @@ -217,7 +217,7 @@ /obj/structure/sign/warning/fall{ pixel_y = 24 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/waste/ground) "aU" = ( /turf/simulated/wall/concrete, @@ -238,7 +238,7 @@ icon_state = "up-supply"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/ground) "aX" = ( /turf/simulated/wall, @@ -658,7 +658,7 @@ /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) "ce" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/outreach/ground_floor) "cf" = ( /obj/machinery/light/small{ @@ -1428,7 +1428,7 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/northwest) "dV" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/ground) "dW" = ( /obj/machinery/door/airlock/glass/civilian{ @@ -1705,7 +1705,7 @@ icon_state = "tube_map"; dir = 8 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/ground) "eD" = ( /obj/structure/cable/yellow{ @@ -2377,7 +2377,7 @@ icon_state = "pipe-u"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/ground) "fJ" = ( /obj/structure/disposalpipe/segment/bent, @@ -2393,7 +2393,7 @@ "fL" = ( /obj/structure/ladder, /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/ground) "fM" = ( /obj/structure/cable/yellow{ @@ -2403,7 +2403,7 @@ /obj/structure/sign/warning/fall{ pixel_y = 24 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/ground) "fN" = ( /obj/machinery/alarm, @@ -3131,7 +3131,7 @@ /turf/simulated/floor/airless, /area/exoplanet/outreach) "hp" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/janitorial) "hq" = ( /turf/simulated/wall, @@ -5987,7 +5987,7 @@ icon_state = "pipe-d"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/ground) "nF" = ( /obj/structure/disposalpipe/junction{ diff --git a/maps/outreach/backup/outreach-4.dmm b/maps/outreach/backup/outreach-4.dmm index 1bac1c1dd39..7556bbcf7f9 100644 --- a/maps/outreach/backup/outreach-4.dmm +++ b/maps/outreach/backup/outreach-4.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/sky) "ab" = ( /turf/simulated/wall/r_wall, @@ -199,7 +199,7 @@ /obj/structure/sign/warning/fall{ pixel_y = 24 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/waste/f1) "aD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -380,7 +380,7 @@ icon_state = "down-scrubbers"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/f1) "bc" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -419,7 +419,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/floor1) "bi" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/janitorial) "bj" = ( /obj/structure/cable/yellow, @@ -488,7 +488,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/floor1) "bq" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/outreach/f1) "br" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1335,7 +1335,7 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/f1) "cO" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/floor1) "cP" = ( /obj/machinery/network/relay/wall_mounted/outreach{ @@ -1555,7 +1555,7 @@ icon_state = "pipe-d"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/f1) "dk" = ( /obj/structure/flora/pottedplant/largebush, @@ -1568,7 +1568,7 @@ /obj/structure/sign/warning/fall{ pixel_y = 24 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/f1) "dm" = ( /obj/structure/cable/yellow{ @@ -1582,7 +1582,7 @@ icon_state = "bulb_map"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/f1) "dn" = ( /obj/structure/sign/warning/nosmoking_1{ @@ -2648,7 +2648,7 @@ icon_state = "32-1" }, /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/exoplanet/outreach/sky) "fF" = ( /obj/effect/overmap/visitable/sector/exoplanet/outreach, @@ -2676,7 +2676,7 @@ icon_state = "32-2" }, /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/exoplanet/outreach/sky) "fK" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/black{ @@ -2933,13 +2933,13 @@ /area/outreach/outpost/maint/passage/f1/northwest) "gm" = ( /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/sky) "gn" = ( /obj/structure/cable/yellow{ icon_state = "32-8" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/sky) "go" = ( /obj/effect/decal/cleanable/dirt, diff --git a/maps/outreach/icons/hud.dmi b/maps/outreach/icons/hud.dmi new file mode 100644 index 00000000000..bc174b219df Binary files /dev/null and b/maps/outreach/icons/hud.dmi differ diff --git a/maps/outreach/items/id_cards.dm b/maps/outreach/items/id_cards.dm new file mode 100644 index 00000000000..c473b6b1f31 --- /dev/null +++ b/maps/outreach/items/id_cards.dm @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////// +// Some Themed Network ID Cards +/////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/civilian + desc = "A card issued to civilians." + detail_color = COLOR_NAVY_BLUE + +/obj/item/card/id/network/cargo + desc = "A card issued to cargo staff." + detail_color = COLOR_BROWN + +/obj/item/card/id/network/engineering + desc = "A card issued to engineering staff." + detail_color = COLOR_SUN + +/obj/item/card/id/network/medical + desc = "A card issued to medical staff." + detail_color = COLOR_PALE_BLUE_GRAY + +/obj/item/card/id/network/science + desc = "A card issued to science staff." + detail_color = COLOR_PALE_PURPLE_GRAY + +/obj/item/card/id/network/security + desc = "A card issued to security staff." + color = COLOR_OFF_WHITE + detail_color = COLOR_MAROON + +/obj/item/card/id/network/cargo/head + desc = "A card which represents service and planning." + extra_details = list("goldstripe") + +/obj/item/card/id/network/engineering/head + desc = "A card which represents creativity and ingenuity." + extra_details = list("goldstripe") + +/obj/item/card/id/network/medical/head + desc = "A card which represents care and compassion." + extra_details = list("goldstripe") + +/obj/item/card/id/network/science/head + desc = "A card which represents knowledge and reasoning." + extra_details = list("goldstripe") + +/obj/item/card/id/network/security/head + desc = "A card which represents honor and protection." + extra_details = list("goldstripe") diff --git a/maps/outreach/items/mounted_shotgun.dm b/maps/outreach/items/mounted_shotgun.dm new file mode 100644 index 00000000000..e1c876b7bed --- /dev/null +++ b/maps/outreach/items/mounted_shotgun.dm @@ -0,0 +1,13 @@ +/obj/item/gun/projectile/shotgun/magshot/mounted + name = "mounted automatic shotgun" + desc = "A very unwieldy version of an automatic shotgun adapted to be mounted onto remote weapon platforms. As a results, many basic ergonomic and safety features are missing." + obj_flags = OBJ_FLAG_CONDUCTIBLE + slot_flags = 0 + load_method = SINGLE_CASING + handle_casings = EJECT_CASINGS + ammo_type = /obj/item/ammo_casing/shotgun + one_hand_penalty = 16 + bulk = GUN_BULK_RIFLE + 5 + has_safety = FALSE + sel_mode = 1 //Semi-auto + diff --git a/maps/outreach/items/outreach_items.dm b/maps/outreach/items/outreach_items.dm new file mode 100644 index 00000000000..774b1d57912 --- /dev/null +++ b/maps/outreach/items/outreach_items.dm @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Boxes +/////////////////////////////////////////////////////////////////////////////////// +/obj/item/storage/box/camera_films + name = "box of camera film rolls" +/obj/item/storage/box/camera_films/WillContain() + var/obj/item/camera_film/F = /obj/item/camera_film + return list( + /obj/item/camera_film = BASE_STORAGE_CAPACITY(initial(F.w_class)), + ) + +/obj/item/storage/box/barricade_tape/police + name = "box of police tape" +/obj/item/storage/box/barricade_tape/police/WillContain() + var/obj/item/stack/tape_roll/barricade_tape/police/P = /obj/item/stack/tape_roll/barricade_tape/police + return list( + /obj/item/stack/tape_roll/barricade_tape/police = BASE_STORAGE_CAPACITY(initial(P.w_class)), + ) + +/obj/item/storage/box/large/dual_band_radios + name = "large box of dual-band radios" + desc = "A large box of spare dual-band radios." +/obj/item/storage/box/large/dual_band_radios/WillContain() + var/obj/item/radio/R = /obj/item/radio + return list(/obj/item/radio = BASE_STORAGE_CAPACITY(initial(R.w_class))) + +/obj/item/storage/box/large/ore_detectors + name = "large box of ore detectors" + desc = "A large box of spare ore detectors." +/obj/item/storage/box/large/ore_detectors/WillContain() + var/obj/item/scanner/mining/M = /obj/item/scanner/mining + return list(/obj/item/scanner/mining = BASE_STORAGE_CAPACITY(initial(M.w_class))) \ No newline at end of file diff --git a/maps/outreach/machinery/access_controller.dm b/maps/outreach/machinery/access_controller.dm new file mode 100644 index 00000000000..eca45eb4110 --- /dev/null +++ b/maps/outreach/machinery/access_controller.dm @@ -0,0 +1,116 @@ +//////////////////////////////////////////////////////////////////////// +// Access Controller +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/network/acl/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_acl" + preset_groups = list( + OUTREACH_USR_GRP_COMMAND = list( + OUTREACH_USR_GRP_COMMAND_TCOM = list( + access_ai_upload, + access_network, + access_tcomsat, + ), + OUTREACH_USR_GRP_COMMAND_FINANCES = list( + access_heads_vault, + ), + OUTREACH_USR_GRP_COMMAND_RECORDS = list( + access_hop, + access_heads, + access_change_ids, + ), + access_bridge, + ), + OUTREACH_USR_GRP_CARGO = list( + OUTREACH_USR_GRP_CARGO_HEAD = list( + access_qm, + ), + OUTREACH_USR_GRP_CARGO_REQ = list( + access_crate_cash, + ), + OUTREACH_USR_GRP_CARGO_VAULT, + access_cargo, + access_cargo_bot, + ), + OUTREACH_USR_GRP_MEDICAL = list( + OUTREACH_USR_GRP_MEDICAL_HEAD = list( + access_cmo, + ), + OUTREACH_USR_GRP_MEDICAL_STORAGE = list( + access_medical_equip, + ), + OUTREACH_USR_GRP_MEDICAL_MORGUE = list( + access_morgue, + access_crematorium, + ), + access_medical, + ), + OUTREACH_USR_GRP_SECURITY = list( + OUTREACH_USR_GRP_SECURITY_HEAD = list( + access_hos, + ), + OUTREACH_USR_GRP_SECURITY_ARMORY = list( + access_armory, + ), + OUTREACH_USR_GRP_SECURITY_FORENSICS = list( + access_forensics_lockers, + ), + OUTREACH_USR_GRP_SECURITY_BRIG = list( + access_brig, + ), + access_sec_doors, + access_security, + ), + OUTREACH_USR_GRP_MINING = list( + OUTREACH_USR_GRP_MINING_HEAD = list( + access_mining_office, + ), + OUTREACH_USR_GRP_MINING_PROCESSING = list( + access_manufacturing, + ), + access_mining, + ), + OUTREACH_USR_GRP_ENGINEERING = list( + OUTREACH_USR_GRP_ENGINEERING_HEAD = list( + access_ce, //Work-around to get access ce as engineering head. The access group system isn't very flexible + ), + OUTREACH_USR_GRP_ENGINEERING_STORAGE = list( + access_tech_storage, + access_engine_equip, + access_construction, + ), + OUTREACH_USR_GRP_ENGINEERING_ATMOS = list( + access_atmospherics, + ), + OUTREACH_USR_GRP_ENGINEERING_GEN = list( + access_engine, + ), + ), + OUTREACH_USR_GRP_RESEARCH = list( + OUTREACH_USR_GRP_RESEARCH_HEAD = list( + access_rd, + ), + OUTREACH_USR_GRP_RESEARCH_CHEM = list( + access_chemistry, + ), + OUTREACH_USR_GRP_RESEARCH_DB, + access_research, + ), + OUTREACH_USR_GRP_EXTERIOR = list( + OUTREACH_USR_GRP_EVA = list( + access_eva, + ), + access_external_airlocks, + ), + OUTREACH_USR_GRP_MAINT = list( + access_maint_tunnels, + ), + OUTREACH_USR_GRP_JANITOR = list( + access_janitor, + ), + ) + req_access = list( + list(access_ce), + list(access_bridge), + ) diff --git a/maps/outreach/machinery/area_controller.dm b/maps/outreach/machinery/area_controller.dm new file mode 100644 index 00000000000..c09e387846a --- /dev/null +++ b/maps/outreach/machinery/area_controller.dm @@ -0,0 +1,32 @@ +//////////////////////////////////////////////////////////////////////// +// Area Controller +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/network/area_controller/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_actrl" + use_power = POWER_USE_ACTIVE + maximum_component_parts = list( + /obj/item/stock_parts = 200, + ) + uncreated_component_parts = list( + /obj/item/stock_parts/smes_coil = 7, + ) + req_access = list( + list(access_ce), + list(access_bridge), + ) + +/obj/machinery/network/area_controller/outreach/Initialize(mapload, d, populate_parts) + . = ..() + for(var/area/A in world) + if(A.name in global.outreach_initial_protected_areas) + add_protected_area(A) + update_use_power(POWER_USE_ACTIVE) + +/obj/machinery/network/area_controller/outreach/proc/add_protected_area(var/area/A) + var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) + add_area(A) + owned_areas[A] |= "[OUTREACH_USR_GRP_COMMAND].[D.network_id]" + update_protected_count() + recalculate_power() diff --git a/maps/outreach/machinery/computers.dm b/maps/outreach/machinery/computers.dm new file mode 100644 index 00000000000..59e49f433f1 --- /dev/null +++ b/maps/outreach/machinery/computers.dm @@ -0,0 +1,357 @@ +// +// Computers +// + +/obj/machinery/computer/modular/preset/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/computer/processor_unit, + ) + default_software = list( + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/email_client, + /datum/computer_file/program/chatclient, + /datum/computer_file/program/scanner, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_receiver/outreach + ) + +// Engineering + +/obj/machinery/computer/modular/preset/outreach/engineering + uncreated_component_parts = list( + /obj/item/stock_parts/computer/processor_unit, + ) + default_software = list( + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/email_client, + /datum/computer_file/program/reports, + /datum/computer_file/program/scanner, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/network_monitor, + /datum/computer_file/program/power_monitor, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/shields_monitor, + /datum/computer_file/program/shutoff_valve, + ) + autorun_program = /datum/computer_file/program/alarm_monitor + +// Supply + +/obj/machinery/computer/modular/preset/outreach/supply + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/charge_stick_slot, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/scanner, + /datum/computer_file/program/supply, + /datum/computer_file/program/trade_management, + /datum/computer_file/program/merchant, + /datum/computer_file/program/reports, + ) + autorun_program = /datum/computer_file/program/supply + +/obj/machinery/computer/modular/preset/outreach/supply/public + uncreated_component_parts = list( + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/charge_stick_slot, + ) + default_software = list( + /datum/computer_file/program/supply, + ) + autorun_program = /datum/computer_file/program/supply + +// Mining + +/obj/machinery/computer/modular/preset/outreach/mining + uncreated_component_parts = list( + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/scanner, + /datum/computer_file/program/chatclient, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports, + /datum/computer_file/program/supply, + /datum/computer_file/program/suit_sensors, + ) + +// Security + +/obj/machinery/computer/modular/preset/outreach/security + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/scanner, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/forceauthorization, + /datum/computer_file/program/records, + /datum/computer_file/program/reports, + ) + +/obj/machinery/computer/modular/preset/outreach/security/head + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security/warden, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/scanner, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/forceauthorization, + /datum/computer_file/program/records, + /datum/computer_file/program/reports, + /datum/computer_file/program/turret_control, + ) + + +// public + +/obj/machinery/computer/modular/preset/outreach/public + uncreated_component_parts = list( + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/scanner, + /datum/computer_file/program/chatclient, + ) + +// Command + +/obj/machinery/computer/modular/preset/outreach/command + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/records, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/accounts, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/scanner, + /datum/computer_file/program/reports, + /datum/computer_file/program/supply, + ) + +/obj/machinery/computer/modular/preset/outreach/command/telecomm + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit/photonic, + /obj/item/stock_parts/computer/hard_drive/super, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/scanner, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/email_administration, + /datum/computer_file/program/network_monitor, + /datum/computer_file/program/trade_management, + /datum/computer_file/program/turret_control, + ) + +/obj/machinery/computer/modular/preset/outreach/command/head + default_software = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/email_client, + /datum/computer_file/program/records, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/accounts, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/scanner, + /datum/computer_file/program/reports, + /datum/computer_file/program/supply, + /datum/computer_file/program/email_administration, + ) + +/obj/machinery/computer/modular/preset/outreach/command/id + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/records, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/reports, + /datum/computer_file/program/records, + /datum/computer_file/program/accounts, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/scanner, + ) + +/obj/machinery/computer/modular/preset/outreach/command/finance + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit/photonic, + /obj/item/stock_parts/computer/hard_drive/super, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/data_disk_drive, + /obj/item/stock_parts/computer/charge_stick_slot, + /obj/item/stock_parts/computer/money_printer/filled, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/finances, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/reports, + /datum/computer_file/program/records, + /datum/computer_file/program/finances, + /datum/computer_file/program/atm, + /datum/computer_file/program/scanner, + ) + +// Medical + +/obj/machinery/computer/modular/preset/outreach/medical + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit, + /obj/item/stock_parts/computer/hard_drive/advanced, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/ai_slot, + /obj/item/stock_parts/computer/data_disk_drive, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/scanner/medical, + /obj/item/stock_parts/computer/scanner/reagent, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/medical, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/reports, + /datum/computer_file/program/records, + /datum/computer_file/program/scanner, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/camera_monitor, + ) + +/obj/machinery/computer/modular/preset/outreach/medical/cmo + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/stock, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit/photonic, + /obj/item/stock_parts/computer/hard_drive/advanced, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/data_disk_drive, + /obj/item/stock_parts/computer/drive_slot, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/medical/head, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/email_client, + /datum/computer_file/program/wordprocessor, + /datum/computer_file/program/reports, + /datum/computer_file/program/records, + /datum/computer_file/program/accounts, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/scanner, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/camera_monitor, + ) + +/obj/machinery/computer/modular/preset/outreach/medical/cloning + uncreated_component_parts = list( + /obj/item/stock_parts/power/battery/buildable/turbo, + /obj/item/cell/super, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/computer/processor_unit/photonic, + /obj/item/stock_parts/computer/hard_drive/cluster, + /obj/item/stock_parts/computer/card_slot, + /obj/item/stock_parts/computer/ai_slot, + /obj/item/stock_parts/computer/charge_stick_slot, + /obj/item/stock_parts/computer/data_disk_drive, + /obj/item/stock_parts/computer/drive_slot, + /obj/item/stock_parts/computer/scanner/medical, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/medical, + /decl/stock_part_preset/network_receiver/outreach, + ) + default_software = list( + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/records, + /datum/computer_file/program/scanner, + /datum/computer_file/program/cloning, + ) diff --git a/maps/outreach/machinery/conveyors.dm b/maps/outreach/machinery/conveyors.dm new file mode 100644 index 00000000000..cf378e8995b --- /dev/null +++ b/maps/outreach/machinery/conveyors.dm @@ -0,0 +1,176 @@ +/obj/machinery/conveyor/outreach + + +/////////////////////////////////////////////////////// +// Transport Return Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport_return + name = "outgoing belt control" + id_tag = "oh_b1_mining_transport_return" + +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport_return/cabled + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + ) + +/obj/machinery/conveyor/outreach/mining/transport_return + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + ) + id_tag = "oh_b1_mining_transport_return" + +/////////////////////////////////////////////////////// +// Transport Ore Belts +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport + name = "incoming ores belt control" + id_tag = "oh_b1_mining_transport" + +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport/cabled + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + ) + +/obj/machinery/conveyor/outreach/mining/transport + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + ) + id_tag = "oh_b1_mining_transport" + + +/////////////////////////////////////////////////////// +// Ore To Processing Belts +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/raw_proc + name = "raw ore to processing belt control" + id_tag = "oh_b1_mining_raw_to_proc" + +/obj/machinery/conveyor/outreach/mining/raw_proc + id_tag = "oh_b1_mining_raw_to_proc" + + +/////////////////////////////////////////////////////// +// Incoming Ore Unloading Belts +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/unloader_out + name = "unloader belt to outgoing belt control" + id_tag = "oh_b1_mining_unloader_to_out" + +/obj/machinery/conveyor/outreach/mining/unloader_out + id_tag = "oh_b1_mining_unloader_to_out" + +/////////////////////////////////////////////////////// +// Smelter Processing Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/smelter + id_tag = "oh_b1_mining_smelter" + +/obj/machinery/conveyor/outreach/mining/smelter + id_tag = "oh_b1_mining_smelter" + + +/////////////////////////////////////////////////////// +// Compressor Processing Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/compressor + id_tag = "oh_b1_mining_compressor" + +/obj/machinery/conveyor/outreach/mining/compressor + id_tag = "oh_b1_mining_compressor" + +/////////////////////////////////////////////////////// +// Material Processor Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/processor + id_tag = "oh_b1_mining_processor" + +/obj/machinery/conveyor/outreach/mining/processor + id_tag = "oh_b1_mining_processor" + +/////////////////////////////////////////////////////// +// Stacker Feed Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/oneway/outreach/mining/stacker + name = "stacker belt control" + id_tag = "oh_b1_mining_stacker" + +/obj/machinery/conveyor/outreach/mining/stacker + id_tag = "oh_b1_mining_stacker" + +/////////////////////////////////////////////////////// +// Mining To Cargo Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/mining/cargo_delivery + name = "delivery belt control" + id_tag = "oh_b1_mining_to_cargo_belt" + +/obj/machinery/conveyor/outreach/mining/cargo_delivery + id_tag = "oh_b1_mining_to_cargo_belt" + + +/////////////////////////////////////////////////////// +// Cargo Teleporter Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/cargo/teleporter + id_tag = "oh_gf_cargo_teleporter" +/obj/machinery/conveyor/outreach/cargo/teleporter + id_tag = "oh_gf_cargo_teleporter" + +/////////////////////////////////////////////////////// +// Cargo Mail Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/cargo/mail + id_tag = "oh_gf_cargo_mail" +/obj/machinery/conveyor/outreach/cargo/mail + id_tag = "oh_gf_cargo_mail" + +/////////////////////////////////////////////////////// +// Cargo Mail Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/cargo/distribution + id_tag = "oh_gf_cargo_mail_out" +/obj/machinery/conveyor/outreach/cargo/distribution + id_tag = "oh_gf_cargo_mail_out" + + +/////////////////////////////////////////////////////// +// Cargo Desk Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/cargo/desk + id_tag = "oh_gf_cargo_desk" +/obj/machinery/conveyor/outreach/cargo/desk + id_tag = "oh_gf_cargo_desk" + +/////////////////////////////////////////////////////// +// Disposal Belt +/////////////////////////////////////////////////////// + +/obj/machinery/conveyor_switch/outreach/disposal + id_tag = "oh_gf_disposal" +/obj/machinery/conveyor/outreach/disposal + id_tag = "oh_gf_disposal" \ No newline at end of file diff --git a/maps/outreach/machinery/doors.dm b/maps/outreach/machinery/doors.dm new file mode 100644 index 00000000000..53be01e7cc3 --- /dev/null +++ b/maps/outreach/machinery/doors.dm @@ -0,0 +1,827 @@ +/obj/machinery/door/airlock/highsecurity/outreach + icon_state = "closed" + +/obj/machinery/door/airlock/hatch/bolted + locked = TRUE + +//////////////////////////////////////////////////////////////////////// +// Command +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/command/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/command, + ) +/obj/machinery/door/airlock/glass/command/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/command, + ) + +/obj/machinery/door/airlock/highsecurity/outreach/telecom + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + +/obj/machinery/door/airlock/hatch/maintenance/outreach/command + stripe_color = COLOR_COMMAND_BLUE + +/obj/machinery/door/airlock/vault/outreach + name = "archive vault door" + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/command/records, + ) + +//////////////////////////////////////////////////////////////////////// +// Security +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/security/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security, + ) +/obj/machinery/door/airlock/security/outreach/public + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + ) +/obj/machinery/door/airlock/glass/security/outreach/bolted + locked = TRUE + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + ) + +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c1 + id_tag = "oh_b1_security_door_cell_1" +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c2 + id_tag = "oh_b1_security_door_cell_2" +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c3 + id_tag = "oh_b1_security_door_cell_3" + +/obj/machinery/door/airlock/security/outreach/forensics + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/forensics, + ) +/obj/machinery/door/airlock/security/outreach/brig + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/brig, + ) + +/obj/machinery/door/airlock/glass/security/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security, + ) +/obj/machinery/door/airlock/glass/security/outreach/public + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + ) +/obj/machinery/door/airlock/glass/security/outreach/head + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/head, + ) +/obj/machinery/door/airlock/glass/security/outreach/warden + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/warden, + ) +/obj/machinery/door/airlock/glass/security/outreach/detective + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/detective, + ) +/obj/machinery/door/airlock/glass/security/outreach/forensics + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/forensics, + ) +/obj/machinery/door/airlock/glass/security/outreach/brig + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/brig, + ) + +/obj/machinery/door/airlock/highsecurity/outreach/armory + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/armory, + ) +/obj/machinery/door/airlock/highsecurity/outreach/evidence + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/forensics, + ) + +/obj/machinery/door/airlock/highsecurity/outreach/sec_chief_storage + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/security/head, + ) + +//////////////////////////////////////////////////////////////////////// +// Medical +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/medical/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical, + ) +/obj/machinery/door/airlock/medical/outreach/head + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical/head, + ) +/obj/machinery/door/airlock/medical/outreach/morgue + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical/morgue, + ) + + +/obj/machinery/door/airlock/glass/medical/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical, + ) +/obj/machinery/door/airlock/glass/medical/outreach/head + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical/head, + ) +/obj/machinery/door/airlock/glass/medical/outreach/storage + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical/storage, + ) +/obj/machinery/door/airlock/glass/medical/outreach/public + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/public, + ) + +/obj/machinery/door/airlock/hatch/maintenance/outreach/medical + icon_state = "closed" + stripe_color = COLOR_DEEP_SKY_BLUE + +/obj/machinery/door/airlock/double/glass/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + +/obj/machinery/door/airlock/double/glass/medical/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/medical, + ) + +//////////////////////////////////////////////////////////////////////// +// Engineering +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/engineering/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering, + ) + +/obj/machinery/door/airlock/glass/engineering/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering, + ) +/obj/machinery/door/airlock/glass/engineering/outreach/head + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/head, + ) +/obj/machinery/door/airlock/glass/engineering/outreach/storage + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/storage, + ) +/obj/machinery/door/airlock/glass/engineering/outreach/atmos + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/atmos, + ) +/obj/machinery/door/airlock/glass/engineering/outreach/power + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/power, + ) + +//////////////////////////////////////////////////////////////////////// +// Mining +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/mining/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining, + ) +/obj/machinery/door/airlock/glass/mining/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining, + ) + +/obj/machinery/door/airlock/glass/mining/outreach/qm + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining/head, + ) + +/obj/machinery/door/airlock/glass/mining/outreach/processing + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining/processing, + ) + +/obj/machinery/door/airlock/hatch/maintenance/outreach/mining + stripe_color = COLOR_BEASTY_BROWN + +/obj/machinery/door/airlock/double/glass/mining/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining, + ) + +/obj/machinery/door/airlock/double/mining/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/mining, + ) + +//////////////////////////////////////////////////////////////////////// +// Cargo +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/cargo + icon_state = "closed" + stripe_color = COLOR_BEASTY_BROWN + +/obj/machinery/door/airlock/glass/cargo + icon_state = "closed" + stripe_color = COLOR_BEASTY_BROWN + +/obj/machinery/door/airlock/cargo/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/cargo, + ) + + +/obj/machinery/door/airlock/glass/cargo/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/cargo, + ) +/obj/machinery/door/airlock/glass/cargo/outreach/public + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + ) +/obj/machinery/door/airlock/glass/cargo/outreach/head + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/cargo/head, + ) + +/obj/machinery/door/airlock/highsecurity/outreach/cargo_warehouse + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/cargo/vault, + ) + +//////////////////////////////////////////////////////////////////////// +// Atmos +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/atmos/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/atmos, + ) +/obj/machinery/door/airlock/glass/atmos/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/engineering/atmos, + ) + +//////////////////////////////////////////////////////////////////////// +// Research +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/research/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/research, + ) +/obj/machinery/door/airlock/glass/research/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/research, + ) + +/obj/machinery/door/airlock/research/outreach/chemistry + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/research/chemistry, + ) +/obj/machinery/door/airlock/glass/research/outreach/chemistry + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/research/chemistry, + ) + +//////////////////////////////////////////////////////////////////////// +// Maintenance +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/maintenance/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/maintenance, + ) +/obj/machinery/door/airlock/glass/maintenance/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/maintenance, + ) + +/obj/machinery/door/airlock/hatch/maintenance/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/maintenance, + ) + +//////////////////////////////////////////////////////////////////////// +// Exterior +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/external/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/exterior_airlocks, + ) +/obj/machinery/door/airlock/external/glass/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/exterior_airlocks, + ) +/obj/machinery/door/airlock/external/glass/outreach/bolted + locked = TRUE + +//////////////////////////////////////////////////////////////////////// +// Civilian +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/glass/civilian/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/research, + ) + +/obj/machinery/door/airlock/glass/civilian/outreach/eva + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/eva, + ) + +/obj/machinery/door/airlock/glass/civilian/outreach/kitchen + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/kitchen, + ) +/obj/machinery/door/airlock/civilian/outreach/kitchen + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/kitchen, + ) +/obj/machinery/door/airlock/freezer/outreach + icon_state = "closed" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/kitchen, + ) + + +/obj/machinery/door/airlock/glass/civilian/outreach/botany + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/botany, + ) +/obj/machinery/door/airlock/civilian/outreach/botany + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock, + /decl/stock_part_preset/radio/event_transmitter/airlock, + /decl/stock_part_preset/network_lock/outreach/botany, + ) + + + +//////////////////////////////////////////////////////////////////////// +// Shutters +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/blast/shutters/open/cafetaria + id_tag = "oh_b1_cafetaria_shutters" +/obj/machinery/button/blast_door/cafetaria + name = "cafetaria shutters control" + id_tag = "oh_b1_cafetaria_shutters" + +/obj/machinery/door/blast/shutters/engineering + id_tag = "oh_gf_engineering_warehouse_shutters" +/obj/machinery/button/blast_door/engineering + name = "warehouse shutters button" + id_tag = "oh_gf_engineering_warehouse_shutters" + +/obj/machinery/door/blast/shutters/cargo_warehouse + id_tag = "oh_gf_supply_warehouse_shutters" +/obj/machinery/button/blast_door/cargo_warehouse + name = "warehouse shutters button" + id_tag = "oh_gf_supply_warehouse_shutters" + +/obj/machinery/door/blast/shutters/open/cargo + id_tag = "oh_gf_supply_shutters" +/obj/machinery/button/blast_door/cargo + name = "office shutters button" + id_tag = "oh_gf_supply_shutters" + +/obj/machinery/door/blast/shutters/open/arrival + id_tag = "oh_f1_arrival_shutters" +/obj/machinery/button/blast_door/arrival + name = "office shutters button" + id_tag = "oh_f1_arrival_shutters" + +/obj/machinery/door/blast/shutters/server_cooling + id_tag = "oh_b1_server_cooling_shutters" +/obj/machinery/button/blast_door/server_cooling + name = "shutters button" + id_tag = "oh_b1_server_cooling_shutters" + +//////////////////////////////////////////////////////////////////////// +// Window Door +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/window/reinforced + name = "secure door" + icon = 'icons/obj/doors/windoor.dmi' + icon_state = "leftsecure" + base_state = "leftsecure" + max_health = 300 //Stronger doors for prison (regular window door health is 150) + pry_mod = 0.65 + autoclose = FALSE + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) +/obj/machinery/door/window/reinforced/right + icon_state = "rightsecure" + base_state = "rightsecure" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + + +/obj/machinery/door/window/outreach + autoclose = FALSE + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) +/obj/machinery/door/window/right/outreach + autoclose = FALSE + icon_state = "right" + base_state = "right" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + + +/obj/machinery/door/window/reinforced/outreach/cargo + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/cargo, + ) +/obj/machinery/door/window/reinforced/right/outreach/cargo + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/cargo, + ) + + +/obj/machinery/door/window/reinforced/outreach/security + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security, + ) +/obj/machinery/door/window/reinforced/right/outreach/security + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security, + ) +/obj/machinery/door/window/reinforced/outreach/security/warden + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security/warden, + ) +/obj/machinery/door/window/reinforced/right/outreach/security/warden + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/security/warden, + ) + + +/obj/machinery/door/window/reinforced/outreach/chemistry + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/research/chemistry, + ) +/obj/machinery/door/window/reinforced/right/outreach/chemistry + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/research/chemistry, + ) + + +/obj/machinery/door/window/outreach/arrivals + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command, + ) +/obj/machinery/door/window/right/outreach/arrivals + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command, + ) + +/obj/machinery/door/window/outreach/botany + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/botany, + ) +/obj/machinery/door/window/right/outreach/botany + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/botany, + ) \ No newline at end of file diff --git a/maps/outreach/machinery/network_machines.dm b/maps/outreach/machinery/network_machines.dm new file mode 100644 index 00000000000..c7e3923889a --- /dev/null +++ b/maps/outreach/machinery/network_machines.dm @@ -0,0 +1,106 @@ + +/////////////////////////////////////////////////////////////////////////////////////// +// Receiver presets +/////////////////////////////////////////////////////////////////////////////////////// + +#define OUTREACH_FAX_CARGO "oh_cargo" +#define OUTREACH_FAX_COMMAND "oh_command" +#define OUTREACH_FAX_MEDICAL "oh_medical" +#define OUTREACH_FAX_SECURITY "oh_security" +#define OUTREACH_FAX_MINING "oh_mining" +#define OUTREACH_FAX_ENGINEERING "oh_engineering" +#define OUTREACH_FAX_RESEARCH "oh_research" +#define OUTREACH_FAX_ARRIVAL "oh_arrival" + +/decl/stock_part_preset/network_receiver/outreach/fax/cargo + network_tag = OUTREACH_FAX_CARGO +/decl/stock_part_preset/network_receiver/outreach/fax/command + network_tag = OUTREACH_FAX_COMMAND +/decl/stock_part_preset/network_receiver/outreach/fax/medical + network_tag = OUTREACH_FAX_MEDICAL +/decl/stock_part_preset/network_receiver/outreach/fax/security + network_tag = OUTREACH_FAX_SECURITY +/decl/stock_part_preset/network_receiver/outreach/fax/mining + network_tag = OUTREACH_FAX_MINING +/decl/stock_part_preset/network_receiver/outreach/fax/engineering + network_tag = OUTREACH_FAX_ENGINEERING +/decl/stock_part_preset/network_receiver/outreach/fax/research + network_tag = OUTREACH_FAX_RESEARCH +/decl/stock_part_preset/network_receiver/outreach/fax/arrival + network_tag = OUTREACH_FAX_ARRIVAL + + +/////////////////////////////////////////////////////////////////////////////////////// +// Fax Machines +/////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/faxmachine/mapped/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach, + /decl/stock_part_preset/network_lock/outreach, + ) + +/obj/machinery/faxmachine/mapped/outreach/LateInitialize() + ..() + //Add all existing quick dial locations on the map + add_quick_dial_contact("cargo", "[OUTREACH_FAX_CARGO].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("administration", "[OUTREACH_FAX_COMMAND].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("medical", "[OUTREACH_FAX_MEDICAL].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("security", "[OUTREACH_FAX_SECURITY].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("mining", "[OUTREACH_FAX_MINING].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("engineering", "[OUTREACH_FAX_ENGINEERING].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("research", "[OUTREACH_FAX_RESEARCH].[OUTREACH_NETWORK_NAME]") + add_quick_dial_contact("arrival", "[OUTREACH_FAX_ARRIVAL].[OUTREACH_NETWORK_NAME]") + +/obj/machinery/faxmachine/mapped/outreach/cargo + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/cargo, + /decl/stock_part_preset/network_lock/outreach/cargo, + ) +/obj/machinery/faxmachine/mapped/outreach/command + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/command, + /decl/stock_part_preset/network_lock/outreach/command, + ) +/obj/machinery/faxmachine/mapped/outreach/medical + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/medical, + /decl/stock_part_preset/network_lock/outreach/medical, + ) +/obj/machinery/faxmachine/mapped/outreach/security + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/security, + /decl/stock_part_preset/network_lock/outreach/security, + ) +/obj/machinery/faxmachine/mapped/outreach/mining + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/mining, + /decl/stock_part_preset/network_lock/outreach/mining, + ) +/obj/machinery/faxmachine/mapped/outreach/engineering + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/engineering, + /decl/stock_part_preset/network_lock/outreach/engineering, + ) +/obj/machinery/faxmachine/mapped/outreach/research + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/research, + /decl/stock_part_preset/network_lock/outreach/research, + ) +/obj/machinery/faxmachine/mapped/outreach/arrival + stock_part_presets = list( + /decl/stock_part_preset/access_lock, + /decl/stock_part_preset/network_receiver/outreach/fax/arrival, + /decl/stock_part_preset/network_lock/outreach/command, + ) \ No newline at end of file diff --git a/maps/outreach/machinery/outreach_disposal.dm b/maps/outreach/machinery/outreach_disposal.dm new file mode 100644 index 00000000000..2f46aec504b --- /dev/null +++ b/maps/outreach/machinery/outreach_disposal.dm @@ -0,0 +1,126 @@ +//////////////////////////////////////////////////////////////////////// +// Sorting Junction Tags +//////////////////////////////////////////////////////////////////////// + +#define OUTREACH_SORT_TAG_COMMAND "command" +#define OUTREACH_SORT_TAG_MINING "mining" +#define OUTREACH_SORT_TAG_ENGINEERING "engineer" +#define OUTREACH_SORT_TAG_MEDICAL "medical" +#define OUTREACH_SORT_TAG_HYDRO "hydroponics" +#define OUTREACH_SORT_TAG_KITCHEN "kitchen" +#define OUTREACH_SORT_TAG_SECURITY "security" +#define OUTREACH_SORT_TAG_HANGAR "hangar" +#define OUTREACH_SORT_TAG_CARGO "cargo" +#define OUTREACH_SORT_TAG_CARGO_HALL "cargo_hall" +#define OUTREACH_SORT_TAG_CHEMISTRY "chemistry" +#define OUTREACH_SORT_TAG_ARRIVAL "arrival" + +//////////////////////////////////////////////////////////////////////// +// Sorting Junctions Templates +//////////////////////////////////////////////////////////////////////// + +/obj/structure/disposalpipe/sortjunction/command + sort_type = OUTREACH_SORT_TAG_COMMAND +/obj/structure/disposalpipe/sortjunction/flipped/command + sort_type = OUTREACH_SORT_TAG_COMMAND + +/obj/structure/disposalpipe/sortjunction/mining + sort_type = OUTREACH_SORT_TAG_MINING +/obj/structure/disposalpipe/sortjunction/flipped/mining + sort_type = OUTREACH_SORT_TAG_MINING + +/obj/structure/disposalpipe/sortjunction/engineering + sort_type = OUTREACH_SORT_TAG_ENGINEERING +/obj/structure/disposalpipe/sortjunction/flipped/engineering + sort_type = OUTREACH_SORT_TAG_ENGINEERING + +/obj/structure/disposalpipe/sortjunction/medical + sort_type = OUTREACH_SORT_TAG_MEDICAL +/obj/structure/disposalpipe/sortjunction/flipped/medical + sort_type = OUTREACH_SORT_TAG_MEDICAL + +/obj/structure/disposalpipe/sortjunction/hydroponics + sort_type = OUTREACH_SORT_TAG_HYDRO +/obj/structure/disposalpipe/sortjunction/flipped/hydroponics + sort_type = OUTREACH_SORT_TAG_HYDRO + +/obj/structure/disposalpipe/sortjunction/kitchen + sort_type = OUTREACH_SORT_TAG_KITCHEN +/obj/structure/disposalpipe/sortjunction/flipped/kitchen + sort_type = OUTREACH_SORT_TAG_KITCHEN + +/obj/structure/disposalpipe/sortjunction/security + sort_type = OUTREACH_SORT_TAG_SECURITY +/obj/structure/disposalpipe/sortjunction/flipped/security + sort_type = OUTREACH_SORT_TAG_SECURITY + +/obj/structure/disposalpipe/sortjunction/hangar + sort_type = OUTREACH_SORT_TAG_HANGAR +/obj/structure/disposalpipe/sortjunction/flipped/hangar + sort_type = OUTREACH_SORT_TAG_HANGAR + +/obj/structure/disposalpipe/sortjunction/cargo + sort_type = OUTREACH_SORT_TAG_CARGO +/obj/structure/disposalpipe/sortjunction/flipped/cargo + sort_type = OUTREACH_SORT_TAG_CARGO + +/obj/structure/disposalpipe/sortjunction/cargo_hall + sort_type = OUTREACH_SORT_TAG_CARGO_HALL +/obj/structure/disposalpipe/sortjunction/flipped/cargo_hall + sort_type = OUTREACH_SORT_TAG_CARGO_HALL + +/obj/structure/disposalpipe/sortjunction/chemistry + sort_type = OUTREACH_SORT_TAG_CHEMISTRY +/obj/structure/disposalpipe/sortjunction/flipped/chemistry + sort_type = OUTREACH_SORT_TAG_CHEMISTRY + +/obj/structure/disposalpipe/sortjunction/arrival + sort_type = OUTREACH_SORT_TAG_ARRIVAL +/obj/structure/disposalpipe/sortjunction/flipped/arrival + sort_type = OUTREACH_SORT_TAG_ARRIVAL + +//////////////////////////////////////////////////////////////////////// +// Destination Tagger +//////////////////////////////////////////////////////////////////////// + +//Write down all the available tags from the get go. +/obj/item/destTagger/outreach + last_used_tags = list( + OUTREACH_SORT_TAG_COMMAND, + OUTREACH_SORT_TAG_MINING, + OUTREACH_SORT_TAG_ENGINEERING, + OUTREACH_SORT_TAG_MEDICAL, + OUTREACH_SORT_TAG_HYDRO, + OUTREACH_SORT_TAG_KITCHEN, + OUTREACH_SORT_TAG_SECURITY, + OUTREACH_SORT_TAG_HANGAR, + OUTREACH_SORT_TAG_CARGO, + OUTREACH_SORT_TAG_CARGO_HALL, + OUTREACH_SORT_TAG_CHEMISTRY, + OUTREACH_SORT_TAG_ARRIVAL, + ) + +/obj/structure/disposalpipe/tagger/command + sort_tag = OUTREACH_SORT_TAG_COMMAND +/obj/structure/disposalpipe/tagger/mining + sort_tag = OUTREACH_SORT_TAG_MINING +/obj/structure/disposalpipe/tagger/engineering + sort_tag = OUTREACH_SORT_TAG_ENGINEERING +/obj/structure/disposalpipe/tagger/medical + sort_tag = OUTREACH_SORT_TAG_MEDICAL +/obj/structure/disposalpipe/tagger/hydro + sort_tag = OUTREACH_SORT_TAG_HYDRO +/obj/structure/disposalpipe/tagger/kitchen + sort_tag = OUTREACH_SORT_TAG_KITCHEN +/obj/structure/disposalpipe/tagger/security + sort_tag = OUTREACH_SORT_TAG_SECURITY +/obj/structure/disposalpipe/tagger/hangar + sort_tag = OUTREACH_SORT_TAG_HANGAR +/obj/structure/disposalpipe/tagger/cargo + sort_tag = OUTREACH_SORT_TAG_CARGO +/obj/structure/disposalpipe/tagger/cargo_hall + sort_tag = OUTREACH_SORT_TAG_CARGO_HALL +/obj/structure/disposalpipe/tagger/chemistry + sort_tag = OUTREACH_SORT_TAG_CHEMISTRY +/obj/structure/disposalpipe/tagger/arrival + sort_tag = OUTREACH_SORT_TAG_ARRIVAL \ No newline at end of file diff --git a/maps/outreach/machinery/outreach_machinery.dm b/maps/outreach/machinery/outreach_machinery.dm new file mode 100644 index 00000000000..88bdefbb33d --- /dev/null +++ b/maps/outreach/machinery/outreach_machinery.dm @@ -0,0 +1,648 @@ +// +// Airlock controllers Outreach +// + +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/outreach + cycle_to_external_air = TRUE + req_access = list(list(access_external_airlocks)) + +/obj/machinery/embedded_controller/radio/airlock/scrubbers/outreach + cycle_to_external_air = TRUE + req_access = list(list(access_external_airlocks)) + +//////////////////////////////////////////////////////////////////////// +// Wired airlock sensor +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/airlock_sensor/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/radio/transmitter/basic/buildable + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup = 1, + /decl/stock_part_preset/radio/basic_transmitter/airlock_sensor = 1 + ) + +//////////////////////////////////////////////////////////////////////// +// Wired airlock button +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/button/access/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/radio/transmitter/on_event/buildable, + /obj/item/stock_parts/radio/receiver/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup = 1, + /decl/stock_part_preset/radio/event_transmitter/access_button = 1, + /decl/stock_part_preset/radio/receiver/access_button = 1, + ) + +/obj/machinery/button/access/wired/interior + command = "cycle_interior" + req_access = list(list(access_external_airlocks)) + +/obj/machinery/button/access/wired/exterior + command = "cycle_exterior" + +//////////////////////////////////////////////////////////////////////// +// Airlock Door +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/external/glass/bolted/airlock + +/obj/machinery/door/airlock/external/glass/bolted_open/airlock + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/airlock/external_air = 1, + /decl/stock_part_preset/radio/event_transmitter/airlock/external_air = 1 + ) + +//////////////////////////////////////////////////////////////////////// +// Airlock canister +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/atmospherics/unary/tank/air/airlock + name = "Pressure Tank (Air)" + icon_state = "air_mapped" + start_pressure = ONE_ATMOSPHERE / 4 + filling = list( + /decl/material/gas/oxygen = O2STANDARD, + /decl/material/gas/nitrogen = N2STANDARD, + ) + +/obj/machinery/atmospherics/unary/tank/air/airlock/Initialize(mapload, d, populate_parts) + . = ..() + icon_state = "air" + +//////////////////////////////////////////////////////////////////////// +// High volume air vent +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock + controlled = FALSE + stock_part_presets = list( + /decl/stock_part_preset/radio/receiver/vent_pump/airlock, + /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock, + ) + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + /obj/item/stock_parts/radio/receiver/buildable, + /obj/item/stock_parts/radio/transmitter/on_event/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup/offset_dir, + /decl/stock_part_preset/radio/receiver/vent_pump, + /decl/stock_part_preset/radio/event_transmitter/vent_pump, + ) + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/airlock + controlled = FALSE + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup/offset_dir, + /decl/stock_part_preset/radio/receiver/vent_pump/airlock, + /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock, + ) + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon + controlled = FALSE + pump_direction = 0 + pressure_checks = VENT_PRESSURE_CHECK_FLAG_INTERNAL + pressure_checks_default = VENT_PRESSURE_CHECK_FLAG_INTERNAL + external_pressure_bound = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + external_pressure_bound_default = VENT_DEFAULT_EXTERNAL_PRESSURE_SIPHON + internal_pressure_bound = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON + internal_pressure_bound_default = VENT_DEFAULT_INTERNAL_PRESSURE_SIPHON + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on + use_power = POWER_USE_IDLE + icon_state = "map_vent_in" + +//////////////////////////////////////////////////////////////////////// +// Exterior lights +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/light/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + ) + stock_part_presets = list(/decl/stock_part_preset/terminal_setup) + +/obj/machinery/light/small/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + ) + stock_part_presets = list(/decl/stock_part_preset/terminal_setup) + +/obj/machinery/light/small/red/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + ) + stock_part_presets = list(/decl/stock_part_preset/terminal_setup) + +/obj/machinery/light/spot/wired + power_channel = LOCAL + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + ) + stock_part_presets = list(/decl/stock_part_preset/terminal_setup) + +//#TODO: Make this light not burn out on its own and resistant to melee hits breaking the bulb +/obj/machinery/light/small/reinforced + name = "reinforced light" + base_type = /obj/machinery/light/small/reinforced + +//////////////////////////////////////////////////////////////////////// +// Buttons +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/button/blast_door/wired + stock_part_presets = list( + /decl/stock_part_preset/radio/event_transmitter/blast_door_button = 1, + /decl/stock_part_preset/radio/receiver/blast_door_button = 1, + /decl/stock_part_preset/terminal_setup = 1, + ) + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/radio/transmitter/on_event/buildable, + /obj/item/stock_parts/radio/receiver/buildable + ) + +/obj/machinery/button/alternate/door/sec_checkpoint + name = "open checkpoint doors button" + id_tag = "oh_b1_sec_checkpoint_doors" + stock_part_presets = list( + /decl/stock_part_preset/radio/basic_transmitter/button/door + ) +/obj/machinery/door/airlock/glass/security/outreach/checkpoint + id_tag = "oh_b1_sec_checkpoint_doors" + +//////////////////////////////////////////////////////////////////////// +// Doors +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/door/airlock/external/glass/wired + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + /decl/stock_part_preset/radio/receiver/airlock/external_air, + /decl/stock_part_preset/radio/event_transmitter/airlock/external_air + ) + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/radio/transmitter/on_event/buildable, + /obj/item/stock_parts/radio/receiver/buildable + ) + +//////////////////////////////////////////////////////////////////////// +// Security Desk Flashers +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/flasher/security_desk + id_tag = "oh_b1_security_desk_flashers" + +/obj/machinery/button/flasher/security_desk + id_tag = "oh_b1_security_desk_flashers" + +//////////////////////////////////////////////////////////////////////// +// Suit Cyclers +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/suit_cycler/emergency/prepared + name = "work suit cycler unit" + buildable = FALSE + locked = TRUE + initial_access = list() + helmet = /obj/item/clothing/head/helmet/space/emergency + suit = /obj/item/clothing/suit/space/emergency + boots = /obj/item/clothing/shoes/workboots + available_bodytypes = list(BODYTYPE_HUMANOID, BODYTYPE_MONKEY) + available_modifications = list( + /decl/item_modifier/space_suit/engineering, + /decl/item_modifier/space_suit/mining, + /decl/item_modifier/space_suit/medical, + /decl/item_modifier/space_suit/security, + /decl/item_modifier/space_suit/atmos, + /decl/item_modifier/space_suit/science, + /decl/item_modifier/space_suit/pilot, + /decl/item_modifier/space_suit/salvage, + ) + +//////////////////////////////////////////////////////////////////////// +// SMES +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/power/smes/buildable/preset/outreach + _fully_charged = TRUE + _input_maxed = TRUE + _input_on = TRUE + _output_maxed = FALSE + _output_on = TRUE + output_level = 150000 + maximum_component_parts = list( + /obj/item/stock_parts = 20, + ) + uncreated_component_parts = list( + /obj/item/stock_parts/smes_coil/super_capacity = 5, + /obj/item/stock_parts/smes_coil/super_io = 1, + ) + +/obj/machinery/power/smes/buildable/preset/outreach/substation + _fully_charged = TRUE + _input_maxed = TRUE + _input_on = TRUE + _output_maxed = FALSE + _output_on = TRUE + output_level = 100000 + uncreated_component_parts = list( + /obj/item/stock_parts/smes_coil/super_capacity = 2, + /obj/item/stock_parts/smes_coil/super_io = 1, + ) + +/obj/machinery/power/smes/batteryrack/outreach + mode = PSU_INPUT + equalise = TRUE + uncreated_component_parts = list( + /obj/item/stock_parts/shielding/electric = 1, + /obj/item/stock_parts/capacitor/super = 3, + /obj/item/stock_parts/matter_bin/super = 1, + /obj/item/stock_parts/power/battery/buildable/turbo = 9, + /obj/item/cell/super = 9, + ) + +//////////////////////////////////////////////////////////////////////// +// Docking Beacon +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/docking_beacon/mapped + anchored = TRUE + +//////////////////////////////////////////////////////////////////////// +// Defense Turret +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/porta_turret/stationary/stun + ailock = TRUE + lethal = FALSE + check_weapons = TRUE + auto_repair = TRUE + controllock = FALSE + max_health = 280 + installation = /obj/item/gun/energy/gun/mounted + initial_access = list(list(access_security), list(access_bridge), list(access_ce)) + + +/////////////////////////////////////////////////////////////////////////////////////// +// Telepads +/////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/telepad_cargo/Initialize(mapload, d, populate_parts) + var/pre_id = telepad_id + . = ..() //Base class replaces the telepad id on init + if(pre_id) + telepad_id = pre_id + +/obj/machinery/telepad_cargo/desk_delivery + telepad_id = "oh_gf_cargo_desk" + +/obj/machinery/telepad_cargo/sorting_hall + telepad_id = "oh_gf_cargo_sorting_hall" + +/////////////////////////////////////////////////////////////////////////////////////// +// Atmos +/////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/atmospherics/omni/filter/material_extractor + name = "material extractor output filter" + tag_north = ATM_INPUT + tag_south = ATM_FILTER + tag_east = ATM_FILTER + tag_west = ATM_OUTPUT + tag_filter_gas_north = null + tag_filter_gas_south = "gas_nitrogen" + tag_filter_gas_east = "gas_oxygen" + tag_filter_gas_west = null + +/obj/machinery/atmospherics/omni/filter/o2canister_refill + name = "o2 refill filter" + color = COLOR_CYAN + +/obj/machinery/atmospherics/omni/filter/o2canister_refill/mining_eva + tag_north = ATM_FILTER + tag_south = ATM_FILTER + tag_east = ATM_INPUT + tag_west = ATM_NONE + tag_filter_gas_north = "gas_oxygen" + tag_filter_gas_south = "gas_nitrogen" + tag_filter_gas_east = null + tag_filter_gas_west = null + +/obj/machinery/atmospherics/omni/filter/o2canister_refill/south_b1_eva + tag_north = ATM_NONE + tag_south = ATM_OUTPUT + tag_east = ATM_INPUT + tag_west = ATM_FILTER + tag_filter_gas_north = null + tag_filter_gas_south = null + tag_filter_gas_east = null + tag_filter_gas_west = "gas_oxygen" + +/obj/machinery/atmospherics/omni/filter/o2canister_refill/east_b1_eva + tag_north = ATM_INPUT + tag_south = ATM_NONE + tag_east = ATM_OUTPUT + tag_west = ATM_FILTER + tag_filter_gas_north = null + tag_filter_gas_south = null + tag_filter_gas_east = null + tag_filter_gas_west = "gas_oxygen" + +/obj/machinery/atmospherics/omni/filter/airlock_filter + name = "airlock contaminants filter" + color = COLOR_RED + +/obj/machinery/atmospherics/omni/filter/airlock_filter/geo + tag_north = ATM_FILTER + tag_south = ATM_FILTER + tag_east = ATM_OUTPUT + tag_west = ATM_INPUT + tag_filter_gas_north = "gas_oxygen" + tag_filter_gas_south = "gas_nitrogen" + tag_filter_gas_east = null + tag_filter_gas_west = null + +/obj/machinery/atmospherics/omni/mixer/airmix + name = "omni gas mixer (airmix)" + +/obj/machinery/atmospherics/omni/mixer/airmix/airlock + tag_north = ATM_INPUT + tag_south = ATM_INPUT + tag_east = ATM_OUTPUT + tag_west = ATM_NONE + tag_north_con = 0.21 + tag_south_con = 0.78 + +// +// Gas Harvest Vents +// + + + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester + name = "harvesting vent" + +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb1 + id_tag = "oh_gf_vent_harvest_1" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb2 + id_tag = "oh_gf_vent_harvest_2" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb3 + id_tag = "oh_gf_vent_harvest_3" + +//Buttons + +/obj/machinery/button/toggle/alternate/harvesters + name = "harvester toggle switch" + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + /obj/item/stock_parts/radio/transmitter/basic/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/radio/basic_transmitter/button/door, + /decl/stock_part_preset/terminal_setup + ) +/decl/stock_part_preset/radio/basic_transmitter/button/vent/harvester + frequency = EXTERNAL_AIR_FREQ + transmit_on_change = list("power_toggle" = /decl/public_access/public_variable/button_active) + +/obj/machinery/button/toggle/alternate/harvesters/nb1 + id_tag = "oh_gf_vent_harvest_1" +/obj/machinery/button/toggle/alternate/harvesters/nb2 + id_tag = "oh_gf_vent_harvest_2" +/obj/machinery/button/toggle/alternate/harvesters/nb3 + id_tag = "oh_gf_vent_harvest_3" + +//Helper types for whenever we have cryo networks +/obj/machinery/cryopod/despawner/main +/obj/machinery/cryopod/despawner/arrival + + +// +// Crematorium +// + +/obj/structure/crematorium/outreach + id_tag = "ob_med_crema" +/obj/machinery/button/crematorium/outreach + id_tag = "ob_med_crema" + +// +// Bot Patrol Nav Beacons +// + +/obj/machinery/navbeacon/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/engineering, + ) + +// Basement #2 +/obj/machinery/navbeacon/outreach/patrol/b2_stairwell + location = "OH B2 Stairwell" + codes = list("patrol" = TRUE, "next_patrol" = "OH B2 North Hallway") + +/obj/machinery/navbeacon/outreach/patrol/b2_hallway_north + location = "OH B2 North Hallway" + codes = list("patrol" = TRUE, "next_patrol" = "OH B2 East Hallway") +/obj/machinery/navbeacon/outreach/patrol/b2_hallway_east + location = "OH B2 East Hallway" + codes = list("patrol" = TRUE, "next_patrol" = "OH B2 South Hallway") +/obj/machinery/navbeacon/outreach/patrol/b2_hallway_south + location = "OH B2 South Hallway" + codes = list("patrol" = TRUE, "next_patrol" = "OH B2 Stairwell") + +// Basement #1 +/obj/machinery/navbeacon/outreach/patrol/b1_stairwell + location = "OH B1 Stairwell" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Security") + +/obj/machinery/navbeacon/outreach/patrol/security + location = "OH B1 Security" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Cafeteria") +/obj/machinery/navbeacon/outreach/patrol/cafeteria + location = "OH B1 Cafeteria" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Bathroom") +/obj/machinery/navbeacon/outreach/patrol/bathroom + location = "OH B1 Bathroom" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Botany") +/obj/machinery/navbeacon/outreach/patrol/botany + location = "OH B1 Botany" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Kitchen") +/obj/machinery/navbeacon/outreach/patrol/kitchen + location = "OH B1 Kitchen" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Mining Lobby") +/obj/machinery/navbeacon/outreach/patrol/mining_lobby + location = "OH B1 Mining Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH EVA B1 SOUTH") +/obj/machinery/navbeacon/outreach/patrol/EVA_b1_south + location = "OH EVA B1 SOUTH" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Medical Lobby") +/obj/machinery/navbeacon/outreach/patrol/medical_lobby + location = "OH B1 Medical Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH EVA B1 EAST") +/obj/machinery/navbeacon/outreach/patrol/EVA_b1_east + location = "OH EVA B1 EAST" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Cryo") +/obj/machinery/navbeacon/outreach/patrol/EVA_b1_cryo + location = "OH B1 Cryo" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 North Hall") +/obj/machinery/navbeacon/outreach/patrol/b1_north_hall + location = "OH B1 North Hall" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Chemistry Lobby") +/obj/machinery/navbeacon/outreach/patrol/chemistry_lobby + location = "OH B1 Chemistry Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Atmos Lobby") +/obj/machinery/navbeacon/outreach/patrol/atmos_lobby + location = "OH B1 Atmos Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 West Hall") +/obj/machinery/navbeacon/outreach/patrol/b1_west_hall + location = "OH B1 West Hall" + codes = list("patrol" = TRUE, "next_patrol" = "OH B1 Stairwell") + +// Ground Floor +/obj/machinery/navbeacon/outreach/patrol/gf_stairwell + location = "OH GF Stairwell" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF Supply Lobby") + +/obj/machinery/navbeacon/outreach/patrol/supply_lobby + location = "OH GF Supply Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF West Hallway") +/obj/machinery/navbeacon/outreach/patrol/gf_west + location = "OH GF West Hallway" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF Engineering Lobby") +/obj/machinery/navbeacon/outreach/patrol/engineering_lobby + location = "OH GF Engineering Lobby" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF Hangar") +/obj/machinery/navbeacon/outreach/patrol/hangar + location = "OH GF Hangar" + codes = list("patrol" = TRUE, "next_patrol" = "OH EVA GF EAST NORTH") +/obj/machinery/navbeacon/outreach/patrol/EVA_gf_east_north + location = "OH EVA GF EAST NORTH" + codes = list("patrol" = TRUE, "next_patrol" = "OH EVA GF EAST SOUTH") +/obj/machinery/navbeacon/outreach/patrol/EVA_gf_east_south + location = "OH EVA GF EAST SOUTH" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF South Hallway") +/obj/machinery/navbeacon/outreach/patrol/gf_south + location = "OH GF South Hallway" + codes = list("patrol" = TRUE, "next_patrol" = "OH GF Stairwell") + +// First Floor +/obj/machinery/navbeacon/outreach/patrol/f1_stairwell + location = "OH 1F Stairwell" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Hallway North") + +/obj/machinery/navbeacon/outreach/patrol/f1_hallway_north + location = "OH 1F Hallway North" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Hallway East") +/obj/machinery/navbeacon/outreach/patrol/f1_hallway_east + location = "OH 1F Hallway East" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Hallway South") +/obj/machinery/navbeacon/outreach/patrol/f1_hallway_south + location = "OH 1F Hallway South" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Hallway South West") +/obj/machinery/navbeacon/outreach/patrol/f1_hallway_south_west + location = "OH 1F Hallway South West" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Hallway West") +/obj/machinery/navbeacon/outreach/patrol/f1_hallway_south_west + location = "OH 1F Hallway West" + codes = list("patrol" = TRUE, "next_patrol" = "OH 1F Stairwell") + +// +// Bot Delivery Nav Beacons +// + +/obj/machinery/navbeacon/outreach/delivery/supply/one + location = "Supply Delivery #1" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/supply/two + location = "Supply Delivery #2" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/supply/three + location = "Supply Delivery #3" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/supply/four + location = "Supply Delivery #4" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/chemistry + location = "Chemistry" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/janitor + location = "Janitor" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/security + location = "Security" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/engineer_storage + location = "Tool Storage" + codes = list("delivery" = TRUE, "dir" = WEST) + +/obj/machinery/navbeacon/outreach/delivery/medbay + location = "Medbay" + codes = list("delivery" = TRUE, "dir" = EAST) + +/obj/machinery/navbeacon/outreach/delivery/engineering + location = "Engineering" + codes = list("delivery" = TRUE, "dir" = EAST) + +/obj/machinery/navbeacon/outreach/delivery/kitchen + location = "Kitchen" + codes = list("delivery" = TRUE, "dir" = SOUTH) + +/obj/machinery/navbeacon/outreach/delivery/hydroponics + location = "Hydroponics" + codes = list("delivery" = TRUE, "dir" = SOUTH) + + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc/buildable, + /obj/item/stock_parts/network_receiver/buildable, + /obj/item/stock_parts/radio/receiver/buildable, + ) + stock_part_presets = null + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/cabled + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal/buildable, + /obj/item/stock_parts/network_receiver/buildable, + /obj/item/stock_parts/radio/receiver/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + ) + +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/gas_tanks + id_tag = "oh_atmos_tank_emergency_scrubber" + +///Chlorine air tank +/obj/machinery/atmospherics/unary/tank/chlorine + name = "Pressure Tank (Chlorine)" + icon_state = "cl" + filling = list(/decl/material/gas/chlorine = 1) \ No newline at end of file diff --git a/maps/outreach/machinery/outreach_network.dm b/maps/outreach/machinery/outreach_network.dm new file mode 100644 index 00000000000..3b99d920b92 --- /dev/null +++ b/maps/outreach/machinery/outreach_network.dm @@ -0,0 +1,508 @@ +/datum/map/outreach + spawn_network = OUTREACH_NETWORK_NAME + +//////////////////////////////////////////////////////////////////////// +// Network Receiver Presets +//////////////////////////////////////////////////////////////////////// + +/decl/stock_part_preset/network_receiver + expected_part_type = /obj/item/stock_parts/network_receiver + var/network_tag + var/network_id + var/network_passkey + +/decl/stock_part_preset/network_receiver/do_apply(obj/machinery/machine, obj/item/stock_parts/network_receiver/part) + var/datum/extension/network_device/dev = get_extension(part, /datum/extension/network_device) + if(!dev) + CRASH("No net device initialized") + dev.disconnect() + dev.network_id = network_id + if(length(network_passkey)) + dev.key = network_passkey + if(length(network_tag)) + dev.set_network_tag(network_tag) + dev.connect() + +/// Receiver Presets + +/decl/stock_part_preset/network_receiver/outreach + network_id = OUTREACH_NETWORK_NAME + +//////////////////////////////////////////////////////////////////////// +// Network Locks Presets +//////////////////////////////////////////////////////////////////////// + +/decl/stock_part_preset/network_lock/outreach + network_id = OUTREACH_NETWORK_NAME + +/decl/stock_part_preset/network_lock/outreach/public + allowed_groups = null + +///Access to command +/decl/stock_part_preset/network_lock/outreach/command + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + ) +/decl/stock_part_preset/network_lock/outreach/command/tcomm + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND_TCOM, + ) +/decl/stock_part_preset/network_lock/outreach/command/records + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND_TCOM, + OUTREACH_USR_GRP_COMMAND_RECORDS, + ) +/decl/stock_part_preset/network_lock/outreach/command/finances + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND_FINANCES, + ) + +///Access to cargo machinery +/decl/stock_part_preset/network_lock/outreach/cargo + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_CARGO, + ) +/decl/stock_part_preset/network_lock/outreach/cargo/head + allowed_groups = list( + OUTREACH_USR_GRP_CARGO_HEAD, + OUTREACH_USR_GRP_CARGO, + ) +/decl/stock_part_preset/network_lock/outreach/cargo/vault + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_CARGO_HEAD, + OUTREACH_USR_GRP_CARGO_VAULT, + ) +/decl/stock_part_preset/network_lock/outreach/cargo/orders + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_CARGO_HEAD, + OUTREACH_USR_GRP_CARGO_REQ, + ) + +///Access to security machinery +/decl/stock_part_preset/network_lock/outreach/security + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_SECURITY, + ) +/decl/stock_part_preset/network_lock/outreach/security/head + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + ) +/decl/stock_part_preset/network_lock/outreach/security/warden + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + OUTREACH_USR_GRP_SECURITY_WARDEN, + ) +/decl/stock_part_preset/network_lock/outreach/security/detective + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + OUTREACH_USR_GRP_SECURITY_WARDEN, + OUTREACH_USR_GRP_SECURITY_DETECTIVE, + ) +/decl/stock_part_preset/network_lock/outreach/security/forensics + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + OUTREACH_USR_GRP_SECURITY_WARDEN, + OUTREACH_USR_GRP_SECURITY_DETECTIVE, + OUTREACH_USR_GRP_SECURITY_FORENSICS, + OUTREACH_USR_GRP_MEDICAL_MORGUE, + ) +/decl/stock_part_preset/network_lock/outreach/security/armory + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + OUTREACH_USR_GRP_SECURITY_ARMORY, + ) +/decl/stock_part_preset/network_lock/outreach/security/brig + allowed_groups = list( + OUTREACH_USR_GRP_SECURITY_HEAD, + OUTREACH_USR_GRP_SECURITY_BRIG, + ) + +///Access to mining machinery +/decl/stock_part_preset/network_lock/outreach/mining + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_MINING, + ) +/decl/stock_part_preset/network_lock/outreach/mining/head + allowed_groups = list( + OUTREACH_USR_GRP_MINING_HEAD, + ) +/decl/stock_part_preset/network_lock/outreach/mining/processing + allowed_groups = list( + OUTREACH_USR_GRP_MINING_HEAD, + OUTREACH_USR_GRP_MINING_PROCESSING, + ) + +///Access to medical machinery +/decl/stock_part_preset/network_lock/outreach/medical + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_MEDICAL, + OUTREACH_USR_GRP_SECURITY, + ) +/decl/stock_part_preset/network_lock/outreach/medical/head + allowed_groups = list( + OUTREACH_USR_GRP_MEDICAL_HEAD, + ) +/decl/stock_part_preset/network_lock/outreach/medical/morgue + allowed_groups = list( + OUTREACH_USR_GRP_MEDICAL_HEAD, + OUTREACH_USR_GRP_MEDICAL_MORGUE, + OUTREACH_USR_GRP_SECURITY_FORENSICS, + ) +/decl/stock_part_preset/network_lock/outreach/medical/storage + allowed_groups = list( + OUTREACH_USR_GRP_MEDICAL_HEAD, + OUTREACH_USR_GRP_MEDICAL_STORAGE, + ) + +///Access to engineering machinery +/decl/stock_part_preset/network_lock/outreach/engineering + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_ENGINEERING, + ) +/decl/stock_part_preset/network_lock/outreach/engineering/head + allowed_groups = list( + OUTREACH_USR_GRP_ENGINEERING_HEAD, + ) +/decl/stock_part_preset/network_lock/outreach/engineering/atmos + allowed_groups = list( + OUTREACH_USR_GRP_ENGINEERING_HEAD, + OUTREACH_USR_GRP_ENGINEERING_ATMOS, + ) +/decl/stock_part_preset/network_lock/outreach/engineering/storage + allowed_groups = list( + OUTREACH_USR_GRP_ENGINEERING_HEAD, + OUTREACH_USR_GRP_ENGINEERING_STORAGE, + ) +/decl/stock_part_preset/network_lock/outreach/engineering/power + allowed_groups = list( + OUTREACH_USR_GRP_ENGINEERING_HEAD, + OUTREACH_USR_GRP_ENGINEERING_GEN, + ) + +///Access to research machinery +/decl/stock_part_preset/network_lock/outreach/research + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_RESEARCH, + ) +/decl/stock_part_preset/network_lock/outreach/research/head + allowed_groups = list( + OUTREACH_USR_GRP_RESEARCH_HEAD, + ) +/decl/stock_part_preset/network_lock/outreach/research/db + allowed_groups = list( + OUTREACH_USR_GRP_RESEARCH_HEAD, + OUTREACH_USR_GRP_RESEARCH_DB, + ) +/decl/stock_part_preset/network_lock/outreach/research/chemistry + allowed_groups = list( + OUTREACH_USR_GRP_RESEARCH_HEAD, + OUTREACH_USR_GRP_RESEARCH_CHEM, + ) + +///Access to janitorial machinery +/decl/stock_part_preset/network_lock/outreach/janitor + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_JANITOR, + ) + +///Access to exterior +/decl/stock_part_preset/network_lock/outreach/exterior_airlocks + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_EXTERIOR, + OUTREACH_USR_GRP_ENGINEERING, + OUTREACH_USR_GRP_MINING, + OUTREACH_USR_GRP_EVA, + ) + +///Access to maintenance +/decl/stock_part_preset/network_lock/outreach/maintenance + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_ENGINEERING, + OUTREACH_USR_GRP_JANITOR, + OUTREACH_USR_GRP_MAINT, + ) + +///Access to eva storage +/decl/stock_part_preset/network_lock/outreach/eva + allowed_groups = list( + OUTREACH_USR_GRP_COMMAND, + OUTREACH_USR_GRP_ENGINEERING, + OUTREACH_USR_GRP_SECURITY, + OUTREACH_USR_GRP_MINING, + OUTREACH_USR_GRP_EVA, + ) + +///Access to kitchen +/decl/stock_part_preset/network_lock/outreach/kitchen + allowed_groups = list( + OUTREACH_USR_GRP_KITCHEN, + ) + +///Access to botany +/decl/stock_part_preset/network_lock/outreach/botany + allowed_groups = list( + OUTREACH_USR_GRP_BOTANY, + ) + +//////////////////////////////////////////////////////////////////////// +// Internet Uplink +//////////////////////////////////////////////////////////////////////// +#define OUTREACH_INTERNET_UPLINK_ID "ob_uplink" +/obj/machinery/internet_uplink/outreach + initial_id_tag = OUTREACH_INTERNET_UPLINK_ID + restrict_networks = TRUE + permitted_networks = list( + OUTREACH_NETWORK_NAME + ) + uncreated_component_parts = list( + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup, + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/computer/internet_uplink/outreach + initial_id_tag = OUTREACH_INTERNET_UPLINK_ID + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +#undef OUTREACH_INTERNET_UPLINK_ID + +//////////////////////////////////////////////////////////////////////// +// Networking Systems +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/network/router/outreach + initial_network_id = OUTREACH_NETWORK_NAME + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/router/outreach/Initialize(mapload, d, populate_parts) + if(!length(tag_network_tag)) + tag_network_tag = "oh_router_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" + . = ..() + +/obj/machinery/network/modem/outreach + initial_network_id = OUTREACH_NETWORK_NAME + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/modem/outreach/Initialize(mapload, d, populate_parts) + if(!length(tag_network_tag)) + tag_network_tag = "oh_modem_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" + . = ..() + +/obj/machinery/network/relay/wall_mounted/outreach + initial_network_id = OUTREACH_NETWORK_NAME + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + list(access_engine), + ) + +/obj/machinery/network/relay/wall_mounted/outreach/Initialize(mapload, d, populate_parts) + if(!length(tag_network_tag)) + tag_network_tag = "oh_relay_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" + . = ..() + +//////////////////////////////////////////////////////////////////////// +// Mainframes +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/network/mainframe/files/outreach + name = "network mainframe (files)" + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_files" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/mainframe/account/outreach + name = "network mainframe (user accounts)" + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_accounts" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/mainframe/logs/outreach + name = "network mainframe (logs)" + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_logs" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/mainframe/records/outreach + name = "network mainframe (crew records)" + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_records" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/mainframe/software/outreach + name = "network mainframe (software server)" + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_softwares" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/mainframe/empty/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_misc" + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +// + +/obj/machinery/network/bank/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_bank" + base_type = /obj/machinery/network/bank + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/network/trade_controller/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_mfrm_trade" + base_type = /obj/machinery/network/trade_controller + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/design_database/outreach + initial_network_id = OUTREACH_NETWORK_NAME + initial_network_tag = "oh_design_db" + base_type = /obj/machinery/design_database + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + +/obj/machinery/computer/design_console/outreach + initial_network_id = OUTREACH_NETWORK_NAME + initial_network_tag = "oh_design_db" + base_type = /obj/machinery/computer/design_console + uncreated_component_parts = list( + /obj/item/stock_parts/network_receiver/network_lock/buildable, + ) + stock_part_presets = list( + /decl/stock_part_preset/network_lock/outreach/command/tcomm, + ) + req_access = list( + list(access_ce), + list(access_tcomsat), + ) diff --git a/maps/outreach/machinery/outreach_turrets.dm b/maps/outreach/machinery/outreach_turrets.dm new file mode 100644 index 00000000000..fd54a4c6438 --- /dev/null +++ b/maps/outreach/machinery/outreach_turrets.dm @@ -0,0 +1,112 @@ +/////////////////////////////////////////////////// +// Base Network Turret For Outreach +/////////////////////////////////////////////////// + +/obj/machinery/turret/network/outreach + check_access = TRUE + check_weapons = FALSE + check_records = TRUE + check_arrest = TRUE + check_lifeforms = TRUE + initial_access = list(list(access_security), list(access_bridge), list(access_ce)) + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc/buildable, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/capacitor/super = 1, + /obj/item/stock_parts/scanning_module/phasic = 1, + /obj/item/stock_parts/manipulator/pico = 2, + ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_connect, + /decl/stock_part_preset/network_lock/outreach/command, + ) + +/////////////////////////////////////////////////// +// Energy Turret Basic Variants +/////////////////////////////////////////////////// + +/obj/machinery/turret/network/outreach/stun + installed_gun = /obj/item/gun/energy/taser/mounted + +/obj/machinery/turret/network/outreach/lethal + installed_gun = /obj/item/gun/energy/gun/mounted + +/obj/machinery/turret/network/outreach/lethal/canon + installed_gun = /obj/item/gun/energy/lasercannon/mounted + + +/////////////////////////////////////////////////// +// Ammo Box Variants +/////////////////////////////////////////////////// + +/obj/item/stock_parts/ammo_box/large + max_ammo = 200 + +/////////////////////////////////////////////////// +// Ammo Box Presets +/////////////////////////////////////////////////// + +/decl/stock_part_preset/ammo_box + expected_part_type = /obj/item/stock_parts/ammo_box + var/fill_with = /obj/item/ammo_casing/pistol + +/decl/stock_part_preset/ammo_box/do_apply(obj/machinery/machine, obj/item/stock_parts/ammo_box/part) + var/obj/item/ammo_casing/C = atom_info_repository.get_instance_of(fill_with) + part.stored_caliber = C.caliber + + //#FIXME: This thing is so stupid. Let's go and create 50 objects to represent bullets that only do anything for a fraction of a second in their long lives :,D + for(var/ammo_cnt = 1 to part.max_ammo) + part.stored_ammo += new fill_with(part) + +/decl/stock_part_preset/ammo_box/filled_rifle + fill_with = /obj/item/ammo_casing/rifle + +/decl/stock_part_preset/ammo_box/filled_beanbags + fill_with = /obj/item/ammo_casing/shotgun/beanbag + +/////////////////////////////////////////////////// +// Ballistic Turrets Templates +/////////////////////////////////////////////////// + +///Assault Rifle Turret +/obj/machinery/turret/network/outreach/ballistic + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc/buildable, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/capacitor/super = 1, + /obj/item/stock_parts/scanning_module/phasic = 1, + /obj/item/stock_parts/manipulator/pico = 2, + /obj/item/stock_parts/ammo_box = 1, + ) + installed_gun = /obj/item/gun/projectile/automatic/assault_rifle + stock_part_presets = list( + /decl/stock_part_preset/terminal_connect, + /decl/stock_part_preset/network_lock/outreach/command, + /decl/stock_part_preset/ammo_box/filled_rifle + ) + +///Light Machine Gun turret +/obj/machinery/turret/network/outreach/ballistic/lmg + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc/buildable, + /obj/item/stock_parts/network_receiver/network_lock/buildable, + /obj/item/stock_parts/capacitor/super = 1, + /obj/item/stock_parts/scanning_module/phasic = 1, + /obj/item/stock_parts/manipulator/pico = 2, + /obj/item/stock_parts/ammo_box/large = 1, + ) + installed_gun = /obj/item/gun/projectile/automatic/lmg/mounted + stock_part_presets = list( + /decl/stock_part_preset/terminal_connect, + /decl/stock_part_preset/network_lock/outreach/command, + /decl/stock_part_preset/ammo_box/filled_rifle + ) + +///Shotgun beanbag turret +/obj/machinery/turret/network/outreach/ballistic/shotgun/beanbag + installed_gun = /obj/item/gun/projectile/shotgun/magshot/mounted + stock_part_presets = list( + /decl/stock_part_preset/terminal_connect, + /decl/stock_part_preset/network_lock/outreach/command, + /decl/stock_part_preset/ammo_box/filled_beanbags + ) diff --git a/maps/outreach/machinery/telecomms.dm b/maps/outreach/machinery/telecomms.dm new file mode 100644 index 00000000000..3b26825f72a --- /dev/null +++ b/maps/outreach/machinery/telecomms.dm @@ -0,0 +1,23 @@ +//////////////////////////////////////////////////////////////////////// +// Telecomms +//////////////////////////////////////////////////////////////////////// + +/obj/machinery/network/telecomms_hub/outreach + initial_network_id = OUTREACH_NETWORK_NAME + tag_network_tag = "oh_hub" + req_access = list( + list(access_ce), + list(access_tcomsat), + ) + channels = list( + COMMON_FREQUENCY_DATA, + list("name" = "Science", "key" = "n", "frequency" = 1351, "color" = COMMS_COLOR_SCIENCE, "span_class" = "sciradio", "secured" = list(access_research)), + list("name" = "Medical", "key" = "m", "frequency" = 1355, "color" = COMMS_COLOR_MEDICAL, "span_class" = "medradio", "secured" = list(access_medical)), + list("name" = "Supply", "key" = "u", "frequency" = 1347, "color" = COMMS_COLOR_SUPPLY, "span_class" = "supradio", "secured" = list(access_cargo)), + list("name" = "Service", "key" = "v", "frequency" = 1349, "color" = COMMS_COLOR_SERVICE, "span_class" = "srvradio", "secured" = list(access_bar)), + list("name" = "AI Private", "key" = "p", "frequency" = 1343, "color" = COMMS_COLOR_AI, "span_class" = "airadio", "secured" = list(access_ai_upload)), + list("name" = "Entertainment", "key" = "z", "frequency" = 1461, "color" = COMMS_COLOR_ENTERTAIN, "span_class" = CSS_CLASS_RADIO, "receive_only" = TRUE), + list("name" = "Command", "key" = "c", "frequency" = 1353, "color" = COMMS_COLOR_COMMAND, "span_class" = "comradio", "secured" = list(access_bridge)), + list("name" = "Engineering", "key" = "e", "frequency" = 1357, "color" = COMMS_COLOR_ENGINEER, "span_class" = "engradio", "secured" = list(access_engine)), + list("name" = "Security", "key" = "s", "frequency" = 1359, "color" = COMMS_COLOR_SECURITY, "span_class" = "secradio", "secured" = list(access_security)), + ) diff --git a/maps/outreach/outreach-1.dmm b/maps/outreach/outreach-1.dmm index 4fcecc16093..5892339717e 100644 --- a/maps/outreach/outreach-1.dmm +++ b/maps/outreach/outreach-1.dmm @@ -10,15 +10,19 @@ /turf/exterior/rock/volcanic/outreach/abyss, /area/exoplanet/outreach/underground/d2) "ad" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/gas_tanks, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 4 }, -/turf/simulated/floor/plating, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) "ae" = ( /turf/simulated/wall/concrete, @@ -43,29 +47,26 @@ /turf/simulated/wall/concrete, /area/outreach/outpost/maint/waste/b2) "ah" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/stairwell/basement2) +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/basement2) "ai" = ( /turf/simulated/magma, /area/exoplanet/outreach/underground/d2) "aj" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northwest) "ak" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/power/b2) "al" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b2/northwest) +/turf/simulated/wall/r_ocp, +/area/exoplanet/outreach/underground/d2) "am" = ( /turf/simulated/floor/reinforced/elevator_shaft, /area/turbolift/outreach/b2) @@ -74,43 +75,43 @@ /turf/simulated/floor/reinforced/elevator_shaft, /area/turbolift/outreach/b2) "ao" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/engineering/b2/geothermals) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/engineering/b2/smes) "ap" = ( -/turf/exterior/water/outreach, +/turf/exterior/chlorine_sand/muriatic_acid_swamp, /area/exoplanet/outreach/underground/d2) "aq" = ( -/obj/structure/wall_frame/concrete, -/obj/structure/grille, -/obj/machinery/door/blast/regular/wired/open{ - density = 1; - icon_state = "pdoor0"; - id_tag = "geo_blast_doors" +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "0-2" }, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/engineering/b2/geothermals) +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) "ar" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/engineering/b2/smes) "as" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/northwest) "at" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "au" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -119,19 +120,24 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "av" = ( -/obj/structure/wall_frame/concrete, -/obj/structure/grille, /obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; density = 1; - icon_state = "pdoor0"; + dir = 4; id_tag = "geo_blast_doors" }, -/obj/structure/cable/yellow, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "aw" = ( /turf/simulated/floor/tiled/techfloor, @@ -166,22 +172,31 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "aA" = ( -/obj/structure/cable/white{ - icon_state = "2-4" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock/cabled{ + name = "outer large air vent"; + dir = 4; + id_tag = "oh_b2_geo_airlock_outer_vent" }, -/obj/effect/floor_decal/industrial/fire/corner, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) "aB" = ( -/obj/structure/cable/white{ +/obj/machinery/airlock_sensor/wired{ + id_tag = "oh_b2_geo_airlock_outer_sensor" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/fire, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, /area/outreach/outpost/engineering/b2/geothermals) "aC" = ( /obj/structure/railing/mapped{ @@ -207,39 +222,45 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "aF" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/basement2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) "aG" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/sign/warning/compressed_gas, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "aH" = ( /obj/effect/floor_decal/industrial/warning/corner, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "aI" = ( /obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "aJ" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/atmos/b2) @@ -247,25 +268,36 @@ /turf/simulated/wall/r_titanium, /area/outreach/outpost/atmospherics/b2/tank_outer) "aL" = ( -/turf/simulated/floor/tiled/techmaint, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "aM" = ( /obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/red/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "aN" = ( -/obj/machinery/alarm, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northwest) "aO" = ( -/obj/structure/sign/warning/compressed_gas{ - icon_state = "hikpa"; - dir = 1 - }, /obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "aP" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -278,55 +310,58 @@ /turf/simulated/floor/reinforced/oxygen, /area/outreach/outpost/atmospherics/b2/tank_outer) "aR" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"aS" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/structure/sign/warning/compressed_gas{ + icon_state = "hikpa"; + dir = 1 }, +/obj/effect/floor_decal/industrial/warning, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) +"aS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction/mirrored, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement2) "aT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "aU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 8 - }, +/obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/red/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "aV" = ( -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "aW" = ( /turf/simulated/floor/reinforced/oxygen, /area/outreach/outpost/atmospherics/b2/tank_outer) "aX" = ( /obj/machinery/camera/network/engineering, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "aY" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "aZ" = ( /obj/machinery/atmospherics/pipe/zpipe/up{ @@ -337,8 +372,8 @@ /area/outreach/outpost/atmospherics/b2/tank_outer) "ba" = ( /obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; icon_state = "off"; + dir = 8; id_tag = "ob_atmos_tnk1_inj"; use_power = 1 }, @@ -346,8 +381,8 @@ /area/outreach/outpost/atmospherics/b2/tank_outer) "bb" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ - dir = 4; icon_state = "map_vent"; + dir = 4; id_tag = "ob_atmos_tnk2_vnt"; use_power = 1 }, @@ -361,56 +396,50 @@ /turf/simulated/floor/reinforced/oxygen, /area/outreach/outpost/atmospherics/b2/tank_outer) "bd" = ( -/obj/machinery/atmospherics/pipe/zpipe/up{ - icon_state = "up"; - dir = 4 +/obj/machinery/light/small/reinforced{ + icon_state = "bulb_map"; + dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "be" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - icon_state = "off"; - id_tag = "ob_atmos_tnk3_inj" - }, -/turf/simulated/floor/reinforced/airless, +/obj/machinery/camera/network/engineering, +/turf/simulated/floor/reinforced/carbon_dioxide, /area/outreach/outpost/atmospherics/b2/tank_outer) "bf" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ - dir = 4; - icon_state = "map_vent"; - id_tag = "ob_atmos_tnk3_vnt" - }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/carbon_dioxide, /area/outreach/outpost/atmospherics/b2/tank_outer) "bg" = ( /obj/machinery/atmospherics/pipe/zpipe/up{ icon_state = "up"; - dir = 8 + dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "bh" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "bi" = ( /obj/machinery/air_sensor{ - id_tag = "ob_atmos_tnk1_sns"; - name = "gas sensor tank 1" + name = "gas sensor tank 1"; + id_tag = "ob_atmos_tnk1_sns" }, /turf/simulated/floor/reinforced/oxygen, /area/outreach/outpost/atmospherics/b2/tank_outer) "bj" = ( -/obj/machinery/air_sensor{ - id_tag = "ob_atmos_tnk3_sns"; - name = "gas sensor tank 3" +/obj/machinery/light/small/reinforced{ + icon_state = "bulb_map"; + dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/carbon_dioxide, /area/outreach/outpost/atmospherics/b2/tank_outer) "bk" = ( /obj/structure/cable/yellow{ @@ -450,39 +479,36 @@ "bq" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 8 + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) "br" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement2) "bs" = ( -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement2) "bt" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ - dir = 4; icon_state = "map_vent"; + dir = 4; id_tag = "ob_atmos_tnk1_vnt"; use_power = 1 }, @@ -497,43 +523,38 @@ /area/outreach/outpost/atmospherics/b2/tank_outer) "bv" = ( /obj/machinery/air_sensor{ - id_tag = "ob_atmos_tnk2_sns"; - name = "gas sensor tank 2" + name = "gas sensor tank 2"; + id_tag = "ob_atmos_tnk2_sns" }, /turf/simulated/floor/reinforced/nitrogen, /area/outreach/outpost/atmospherics/b2/tank_outer) "bw" = ( -/obj/machinery/air_sensor{ - id_tag = "ob_atmos_tnk4_sns"; - name = "gas sensor tank 4" +/obj/machinery/atmospherics/unary/outlet_injector{ + icon_state = "off"; + dir = 8; + id_tag = "ob_atmos_tnk4_inj" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "bx" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/light/small/red{ + icon_state = "bulb_map"; + dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) "by" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/northwest) "bz" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -548,91 +569,60 @@ "bB" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow{ - icon_state = "0-4" + dir = 4 }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "1-2" }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/structure/sign/warning/compressed_gas{ + icon_state = "hikpa"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "bC" = ( /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "bD" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced, /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 1 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; dir = 8 }, -/turf/simulated/floor/airless, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "bE" = ( /obj/structure/girder, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "bF" = ( -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; dir = 8 }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "2-8" +/obj/machinery/button/access/wired/exterior{ + name = "airlock access button"; + dir = 8; + id_tag = "oh_b2_geo_airlock" }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid/outreach, /area/outreach/outpost/engineering/b2/geothermals) "bG" = ( -/obj/effect/floor_decal/industrial/fire/corner, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid/outreach, /area/outreach/outpost/engineering/b2/geothermals) "bH" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/atmos/b2) +"bI" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/atmos/b2) -"bI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "bJ" = ( /obj/machinery/light{ @@ -669,7 +659,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement2) +/area/outreach/outpost/hallway/west/basement2) "bO" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -694,7 +684,16 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b2) "bR" = ( -/turf/simulated/floor/tiled/techmaint, +/obj/structure/sign/poster/bay_17{ + pixel_y = 28 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/machinery/recharge_station, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "bS" = ( /turf/simulated/wall/concrete, @@ -711,102 +710,102 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement2) "bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) -"bV" = ( -/obj/structure/sign/poster/bay_17{ - pixel_y = 28 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 10 }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"bV" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "bW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/area/outreach/outpost/maint/passage/b2/northwest) "bX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) "bY" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/area/outreach/outpost/hallway/north/basement2) "bZ" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest) +"ca" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/waste/b2) +"cb" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/door/airlock/external/glass/outreach/bolted{ + icon_state = "closed"; + dir = 8; + id_tag = "oh_b2_geo_airlock_outer_door" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/north/basement2) -"ca" = ( +/area/outreach/outpost/engineering/b2/geothermals_airlock) +"cc" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/waste/b2) -"cb" = ( -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 8 - }, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"cc" = ( +/area/outreach/outpost/maint/waste/b2) +"cd" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/waste/b2) -"cd" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 1 +/obj/structure/disposalpipe/up{ + icon_state = "pipe-u"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b2) "ce" = ( /obj/machinery/light_switch/on{ icon_state = "light0"; @@ -817,15 +816,12 @@ /area/outreach/outpost/hallway/north/basement2) "cf" = ( /obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 8 + icon_state = "2-4" }, +/obj/effect/floor_decal/industrial/fire/corner, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "cg" = ( /obj/machinery/power/smes/buildable/preset/outreach{ @@ -844,41 +840,51 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement2) "ci" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northwest) "cj" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/fire, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ck" = ( -/obj/structure/wall_frame/concrete, -/obj/structure/grille, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; density = 1; - dir = 4; - icon_state = "pdoor0"; id_tag = "geo_blast_doors" }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "cl" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "cm" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/north/basement2) "cn" = ( @@ -889,9 +895,9 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement2) "co" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -904,48 +910,45 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/atmos/b2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement2) "cp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "cq" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "cr" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b2) "cs" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -959,8 +962,12 @@ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/atmos/b2) +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/waste/b2) "ct" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -973,44 +980,34 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement2) "cu" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/alarm, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northwest) "cv" = ( +/obj/effect/floor_decal/industrial/fire/corner, /obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/structure/cable/white, -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 4 + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; - dir = 8 +/obj/structure/cable/white{ + icon_state = "2-4" }, +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "cw" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/engineering/b2/geothermals) +"cx" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/basement2) +"cy" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1022,29 +1019,23 @@ icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/smes) -"cx" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/west/basement2) -"cy" = ( -/obj/structure/sign/deck/first{ - pixel_y = 32 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) -"cz" = ( -/obj/machinery/door/airlock/glass/civilian{ +/obj/machinery/door/airlock/hatch/maintenance/outreach{ icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/maint/atmos/b2) +"cz" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) "cA" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1061,27 +1052,39 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement2) "cB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "cC" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "cD" = ( /obj/machinery/light{ @@ -1109,41 +1112,19 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement2) "cF" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) -"cG" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; +/obj/structure/disposalpipe/segment/bent, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement2) -"cH" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/atmos/b2) -"cI" = ( +"cG" = ( /obj/machinery/atmospherics/pipe/cap/hidden/supply{ icon_state = "cap-supply"; dir = 4 @@ -1152,6 +1133,39 @@ icon_state = "bulb_map"; dir = 1 }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest) +"cH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b2) +"cI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northwest) "cJ" = ( @@ -1191,76 +1205,80 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement2) "cN" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 8 - }, /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement2) "cO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement2) "cP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement2) "cQ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8; + pixel_x = 32 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement2) "cR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "cS" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "cT" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "cU" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/basement2) "cV" = ( /obj/structure/cable/yellow{ @@ -1275,18 +1293,30 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/basement2) "cW" = ( -/obj/machinery/conveyor{ - dir = 2; - id_tag = "ob_b2_conveyor_disposal" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/disposals) +/area/outreach/outpost/hallway/west/basement2) "cX" = ( -/obj/machinery/recharge_station, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "cY" = ( /obj/structure/cable/yellow, @@ -1294,22 +1324,25 @@ icon_state = "apc0"; dir = 8 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "cZ" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "da" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "db" = ( /obj/effect/floor_decal/industrial/warning/corner{ @@ -1322,29 +1355,58 @@ /obj/machinery/power/sensor{ name = "Powernet Sensor Vertical Line" }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "dc" = ( -/obj/machinery/conveyor{ - dir = 8; - id_tag = "ob_b2_conveyor_disposal" +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/disposals) +/area/outreach/outpost/hallway/west/basement2) "dd" = ( -/obj/structure/disposaloutlet{ - icon_state = "outlet"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/obj/structure/disposalpipe/trunk, -/obj/effect/decal/cleanable/dirt, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/disposals) +/area/outreach/outpost/hallway/west/basement2) "de" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/atmos/b2) +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/basement2) "df" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; @@ -1368,39 +1430,29 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement2) "dg" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/structure/sign/warning/moving_parts{ + icon_state = "movingparts"; + dir = 1; + pixel_y = -32 }, -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest) "dh" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) -"di" = ( -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement2) -"dj" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/east/basement2) +"di" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1412,32 +1464,65 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement2) -"dk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/basement2) +"dj" = ( +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/atmos/b2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement2) +"dk" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + 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/outreach/outpost/hallway/central/basement2) "dl" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/hallway/central/basement2) "dm" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b2) "dn" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/basement2) "do" = ( @@ -1445,43 +1530,60 @@ /turf/exterior/rock/volcanic/outreach/abyss, /area/exoplanet/outreach/underground/d2) "dp" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"dq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) +"dq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest) "dr" = ( /obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement2) "ds" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b2) "dt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/basement2) "du" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1493,13 +1595,8 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "dv" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1511,24 +1608,20 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "dx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1542,12 +1635,8 @@ dir = 4 }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "dy" = ( /obj/effect/geyser, /obj/machinery/geothermal{ @@ -1556,13 +1645,12 @@ /turf/exterior/rock/volcanic/outreach/abyss, /area/outreach/outpost/engineering/b2/geothermals) "dz" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/north/basement2) +/obj/structure/hygiene/drain, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b2) "dA" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -1572,95 +1660,85 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement2) "dB" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) -"dC" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 }, -/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "0-2" }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) -"dD" = ( +"dC" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/basement2) -"dE" = ( +"dD" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, /obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement2) +"dE" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) "dF" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "dG" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "dH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/obj/machinery/alarm, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "dI" = ( /obj/structure/cable/yellow, /obj/machinery/power/apc/high, @@ -1677,131 +1755,95 @@ /turf/exterior/rock/volcanic/outreach/abyss, /area/outreach/outpost/engineering/b2/geothermals) "dL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/engineering/outreach, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/power/b2) +/area/outreach/outpost/engineering/b2/smes) "dM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "dN" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/hallway/south/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b2/northwest) "dO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "dP" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/hallway/north/basement2) "dQ" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/waste/b2) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) "dR" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b2/northwest/junction) "dS" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/fire/corner{ + icon_state = "stripecorner"; dir = 8 }, /obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/structure/cable/white, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; - dir = 4 + icon_state = "4-8" }, -/turf/simulated/floor/plating, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dT" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 4 - }, /obj/structure/cable/white{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/structure/cable/white, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; +/obj/effect/floor_decal/industrial/fire/corner{ + icon_state = "stripecorner"; dir = 8 }, -/turf/simulated/floor/plating, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dU" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/structure/cable/white, -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; - dir = 4 - }, -/turf/simulated/floor/plating, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dV" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "1-4" - }, /obj/structure/cable/white, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 8 + dir = 4 }, /obj/effect/floor_decal/industrial/fire/cee{ icon_state = "stripecee"; - dir = 4 + dir = 8 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dW" = ( /obj/effect/floor_decal/industrial/fire{ @@ -1817,7 +1859,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dX" = ( /obj/effect/floor_decal/industrial/fire{ @@ -1833,7 +1875,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dY" = ( /obj/structure/cable/white{ @@ -1849,19 +1891,31 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "dZ" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; dir = 8 }, -/obj/structure/cable/white{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ea" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/power/b2) +"eb" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -1869,26 +1923,10 @@ icon_state = "apc0"; dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b2) -"eb" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "ec" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "ed" = ( /obj/structure/cable/yellow{ @@ -1907,19 +1945,22 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b2) "ee" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "ef" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) "eg" = ( @@ -1927,12 +1968,15 @@ /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "eh" = ( -/obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) "ei" = ( -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement2) "ej" = ( @@ -1943,41 +1987,44 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement2) "ek" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/disposals) -"el" = ( -/obj/structure/sign/warning/moving_parts{ - dir = 1; - icon_state = "movingparts"; - pixel_y = -32 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement2) +"el" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northwest) "em" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 4; + id_tag = "OH_l4_e_alck_outer" }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/power/apc/hyper{ - icon_state = "apc0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) "en" = ( @@ -1985,61 +2032,94 @@ /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/b2/northwest) "eo" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b2/northeast) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/hallway/north/basement2) "ep" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) "eq" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b2/southeast) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b2/northeast) "er" = ( +/obj/machinery/alarm, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/northeast) "es" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b2/southwest) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "et" = ( -/turf/simulated/wall/r_wall, -/area/exoplanet/outreach/underground/d2) -"eu" = ( +/obj/machinery/alarm, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/structure/sign/warning/compressed_gas, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"eu" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 1 + dir = 4 }, -/turf/simulated/floor/plating/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"ev" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" + }, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) +"ev" = ( +/obj/structure/sign/warning/compressed_gas{ + icon_state = "hikpa"; + dir = 4 }, -/obj/effect/catwalk_plated, /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/plating/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "ew" = ( /turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/hallway/east/basement2) "ex" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) -"ey" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/structure/cable/yellow, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 1 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest) +"ey" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) "ez" = ( @@ -2056,29 +2136,22 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "eA" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/plating/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "eB" = ( -/obj/machinery/door/airlock/hatch/maintenance{ +/obj/machinery/door/airlock/hatch/maintenance/outreach{ icon_state = "closed"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/northwest/junction) "eC" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -2088,8 +2161,8 @@ /area/exoplanet/outreach/underground/d2) "eD" = ( /obj/structure/sign/deck/first{ - dir = 1; icon_state = "deck-1"; + dir = 1; pixel_y = -32 }, /obj/machinery/light/small, @@ -2101,12 +2174,12 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b2) "eE" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/atmos/b2) "eF" = ( /obj/structure/cable/yellow{ @@ -2122,10 +2195,8 @@ /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) "eG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) "eH" = ( @@ -2133,8 +2204,7 @@ icon_state = "light0"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northeast) "eI" = ( /obj/structure/cable/yellow{ @@ -2149,16 +2219,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) "eJ" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) "eK" = ( @@ -2173,24 +2238,20 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "eM" = ( -/obj/machinery/power/apc/high, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northeast) "eN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 8 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/atmos/b2) +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/waste/b2) "eO" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2201,130 +2262,136 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/button/access/wired/exterior{ dir = 4; - id_tag = "OH_l1_e_alck"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l1_e_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "eP" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement2) +/area/outreach/outpost/disposals) "eQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "eR" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement2) "eS" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/conveyor_switch/oneway{ - id_tag = "ob_b2_conveyor_disposal" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "eT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) "eU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/sign/department/engineering{ - dir = 4; - icon_state = "engineering"; - pixel_x = -32 - }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/central/basement2) "eV" = ( -/obj/machinery/alarm, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) -"eW" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) -"eX" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"eY" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"eZ" = ( -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"fa" = ( -/obj/structure/sign/warning/compressed_gas{ - icon_state = "hikpa"; +/area/outreach/outpost/hallway/west/basement2) +"eW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement2) +"eX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"eY" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/exoplanet/outreach/underground/d2) +"eZ" = ( +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 8 + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"fa" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) "fb" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2339,9 +2406,16 @@ /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "fc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/obj/effect/catwalk_plated, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) "fd" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ dir = 1; @@ -2354,185 +2428,179 @@ /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) "fe" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) +/area/outreach/outpost/hallway/west/basement2) "ff" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement2) -"fg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 1 +/obj/machinery/door/airlock/glass/engineering/outreach/power{ + icon_state = "closed"; + dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/b2/smes) +"fg" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northeast) "fh" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/firealarm{ + icon_state = "casing"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement2) "fi" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement2) "fj" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/northeast) "fk" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "fl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) +"fm" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"fn" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) -"fm" = ( -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/area/outreach/outpost/hallway/west/basement2) +"fo" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) +"fp" = ( +/turf/simulated/wall, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"fq" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) -"fn" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"fr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) -"fo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement2) -"fp" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 8 - }, +"fs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/basement2) +"ft" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 1 + dir = 4 }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) -"fq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +"fu" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"fv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) -"fr" = ( -/obj/structure/disposalpipe/segment/bent, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) -"fs" = ( -/obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ - dir = 8; - id_tag = "OH_l1_e_alck_pump_out_external" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach/underground/d2) -"ft" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"fu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) -"fv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) -"fw" = ( -/obj/effect/wallframe_spawn/borosilicate, -/obj/structure/cable/white{ - icon_state = "4-8" +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"fw" = ( +/obj/effect/wallframe_spawn/borosilicate, +/obj/structure/cable/white{ + icon_state = "4-8" }, /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, /obj/machinery/door/blast/regular/open{ + name = "power room blast door"; dir = 4; - id_tag = "geo_blast_doors"; - name = "power room blast door" + id_tag = "geo_blast_doors" }, /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b2/smes) @@ -2541,17 +2609,28 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) "fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 6 +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/engineering/outreach{ + icon_state = "closed"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b2/northwest/junction) "fz" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2561,8 +2640,8 @@ dir = 4 }, /obj/machinery/airlock_sensor{ - id_tag = "OH_l1_e_alck_interior_sensor"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l1_e_alck_interior_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, @@ -2576,8 +2655,8 @@ dir = 4 }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l1_e_alck_inner" }, /obj/effect/decal/cleanable/dirt, @@ -2587,9 +2666,9 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ id_tag = "OH_l1_e_alck_pump_out_internal" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) @@ -2627,25 +2706,25 @@ icon_state = "4-8" }, /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - dir = 2; icon_state = "airlock_control_off"; + dir = 2; id_tag = "OH_l1_e_alck"; - tag_air_alarm = "OH_l1_e_alck_alarm"; + tag_exterior_door = "OH_l1_e_alck_outer"; + tag_interior_door = "OH_l1_e_alck_inner"; tag_airpump = "OH_l1_e_alck_pump"; tag_chamber_sensor = "OH_l1_e_alck_sensor"; - tag_exterior_door = "OH_l1_e_alck_outer"; tag_exterior_sensor = "OH_l1_e_alck_exterior_sensor"; - tag_interior_door = "OH_l1_e_alck_inner"; tag_interior_sensor = "OH_l1_e_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l1_e_alck_alarm"; tag_secure = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) "fF" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/airlock/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/engineering/b2/geothermals) "fG" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2665,8 +2744,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l1_e_alck_outer" }, /obj/effect/decal/cleanable/dirt, @@ -2696,178 +2775,174 @@ /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "fL" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; + dir = 4; + target_pressure = 15000 + }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "fM" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"fN" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) -"fO" = ( +"fN" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 4; + id_tag = "OH_l4_e_alck_outer" + }, /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement2) -"fP" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"fO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement2) +"fP" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement2) "fQ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) +"fR" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) -"fR" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) +/area/outreach/outpost/hallway/west/basement2) "fS" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) -"fT" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) +"fT" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) "fU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/northwest/junction) "fV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) +/area/outreach/outpost/hallway/central/basement2) "fW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 6 + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/northeast) "fX" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) "fY" = ( -/obj/machinery/door/airlock/hatch/maintenance{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ icon_state = "closed"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + dir = 1 }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement2) +/area/outreach/outpost/maint/passage/b2/southwest) "fZ" = ( +/obj/effect/catwalk_plated/dark, /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 1 + dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/maint/passage/b2/northeast) "ga" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; dir = 1 }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/northeast) "gb" = ( /obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ icon_state = "cap-scrubbers"; @@ -2898,9 +2973,12 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement2) "gd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) "ge" = ( /obj/effect/catwalk_plated, /obj/machinery/dummy_airlock_controller{ @@ -2914,72 +2992,77 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/basement2) "gf" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement2) +/area/outreach/outpost/hallway/west/basement2) "gg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/hygiene/drain, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) "gh" = ( -/obj/machinery/conveyor{ - dir = 2; - id_tag = "ob_b2_conveyor_disposal" - }, -/obj/machinery/recycler{ - icon_state = "grinder-o0"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/disposals) +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) "gi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest/junction) "gj" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"gk" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/structure/cable/white, +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement2) -"gk" = ( +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"gl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) -"gl" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/basement2) +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southwest) "gm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/sign/warning/high_voltage{ - dir = 4; icon_state = "shock"; + dir = 4; pixel_x = -32; pixel_y = 0 }, @@ -2987,60 +3070,83 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement2) "gn" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 10 }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/maint/passage/b2/northeast) "go" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/central/basement2) "gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"gq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) -"gr" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"gq" = ( +/obj/effect/floor_decal/industrial/warning/corner, /obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"gs" = ( -/obj/machinery/door/airlock/glass/engineering{ - icon_state = "closed" +/area/outreach/outpost/maint/passage/b2/northeast) +"gr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 }, -/obj/machinery/door/firedoor/autoset, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"gs" = ( +/obj/machinery/door/airlock/external/glass/bolted/airlock, +/obj/structure/tape_barricade/door/atmos, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/atmospherics/b2/tank_outer) "gt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump{ + name = "gas pump (airlock flush)"; + icon_state = "map_off"; + dir = 8; + target_pressure = 15000 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) "gu" = ( /obj/machinery/firealarm{ icon_state = "casing"; dir = 1 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement2) "gv" = ( @@ -3070,13 +3176,16 @@ /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b2/smes) "gx" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/structure/sign/deck/first{ + pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/disposals) +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) "gy" = ( /obj/machinery/light_switch/on{ icon_state = "light0"; @@ -3086,26 +3195,25 @@ /area/outreach/outpost/engineering/b2/smes) "gz" = ( /obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 4 + icon_state = "4-8" }, +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "gA" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/airlock/basement2) "gB" = ( -/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement2) "gC" = ( @@ -3120,51 +3228,42 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/airlock_sensor/wired{ dir = 4; - id_tag = "OH_l1_e_alck_exterior_sensor"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l1_e_alck_exterior_sensor" }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "gE" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 8 - }, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "gF" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/basement2) "gG" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/maint/passage/b2/southwest) "gH" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -3185,96 +3284,93 @@ /area/exoplanet/outreach/underground/d2) "gK" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) "gL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 1 }, -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement2) "gM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/disposals) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) "gN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "gO" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/disposals) -"gP" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement2) +"gP" = ( +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "gQ" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southeast) "gR" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement2) +/area/outreach/outpost/hallway/east/basement2) "gS" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/area/outreach/outpost/hallway/east/basement2) "gT" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3287,84 +3383,97 @@ /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "gU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 1 + dir = 8 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/northwest/junction) "gV" = ( /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 4 + dir = 8 }, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; - dir = 8 - }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "gW" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/southeast) "gX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southeast) +"gY" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "11"; - dir = 10 + dir = 4 }, -/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/northeast) -"gY" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) "gZ" = ( /turf/simulated/wall, /area/outreach/outpost/maint/atmos/b2) "ha" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; dir = 4 }, -/turf/simulated/floor/plating, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hb" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southeast) "hc" = ( -/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southwest) "hd" = ( -/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southeast) "he" = ( @@ -3374,14 +3483,8 @@ /turf/simulated/wall, /area/outreach/outpost/stairwell/basement2) "hg" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, +/obj/structure/hygiene/drain, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "hh" = ( /turf/simulated/wall, @@ -3404,10 +3507,18 @@ /turf/simulated/wall, /area/outreach/outpost/maint/passage/b2/northeast) "hm" = ( -/obj/structure/disposalpipe/junction, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/area/outreach/outpost/hallway/east/basement2) "hn" = ( /turf/simulated/wall, /area/outreach/outpost/maint/passage/b2/southwest) @@ -3419,24 +3530,24 @@ /area/outreach/outpost/maint/passage/b2/southeast) "hq" = ( /obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; icon_state = "off"; + dir = 8; id_tag = "ob_atmos_tnk2_inj"; use_power = 1 }, /turf/simulated/floor/reinforced/nitrogen, /area/outreach/outpost/atmospherics/b2/tank_outer) "hr" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - icon_state = "off"; - id_tag = "ob_atmos_tnk4_inj" +/obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ + icon_state = "map_vent"; + dir = 4; + id_tag = "ob_atmos_tnk4_vnt" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "hs" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -3446,77 +3557,70 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/disposals) "ht" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/disposals) -"hu" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement2) +"hu" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/disposals) +/area/outreach/outpost/hallway/south/basement2) "hv" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "hw" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "hx" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ - dir = 4; - icon_state = "map_vent"; - id_tag = "ob_atmos_tnk4_vnt" +/obj/machinery/atmospherics/pipe/zpipe/up{ + icon_state = "up"; + dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/chlorine, /area/outreach/outpost/atmospherics/b2/tank_outer) "hy" = ( /obj/abstract/level_data_spawner/exoplanet/outreach/underground/abyss, /turf/unsimulated/rock, /area/exoplanet/outreach/underground/d2) "hz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/area/outreach/outpost/hallway/south/basement2) "hA" = ( /obj/effect/catwalk_plated, /obj/effect/wallframe_spawn/borosilicate, @@ -3525,40 +3629,47 @@ dir = 8 }, /obj/machinery/door/blast/regular/open{ + name = "power room blast door"; dir = 4; - id_tag = "geo_blast_doors"; - name = "power room blast door" + id_tag = "geo_blast_doors" }, /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b2/smes) "hB" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow, -/obj/machinery/door/firedoor/autoset, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) +"hC" = ( +/obj/machinery/alarm, +/obj/machinery/computer/area_atmos{ + icon_state = "computer"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b2/tank_outer) -"hC" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/b2/southeast) "hD" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; dir = 8 }, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; - dir = 4 - }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hE" = ( /obj/structure/cable/yellow{ @@ -3573,64 +3684,86 @@ /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d2) "hF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "hG" = ( -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "hH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/obj/machinery/power/breakerbox/activated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "hI" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 8 + dir = 4 }, -/obj/structure/cable/white{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hJ" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 - }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southwest) "hK" = ( /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 4 + dir = 8 }, /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hL" = ( +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 4 + }, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hM" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "hN" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -3640,91 +3773,97 @@ }, /obj/effect/floor_decal/industrial/fire{ icon_state = "stripe"; - dir = 4 + dir = 8 }, /obj/effect/floor_decal/industrial/fire/cee{ icon_state = "stripecee"; - dir = 8 + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/area/outreach/outpost/maint/passage/b2/southeast) "hP" = ( /obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "2-4" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "hQ" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 8 - }, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/structure/cable/white{ icon_state = "0-2" }, +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 8 + }, /obj/effect/floor_decal/industrial/fire/cee{ icon_state = "stripecee"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "hR" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8; + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement2) +"hS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement2) +"hT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) -"hS" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) -"hT" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement2) +/area/outreach/outpost/hallway/south/basement2) "hU" = ( /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l1_e_alck_inner" }, /obj/effect/decal/cleanable/dirt, @@ -3733,26 +3872,33 @@ "hV" = ( /obj/machinery/airlock_sensor{ dir = 1; - id_tag = "OH_l1_e_alck_sensor"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l1_e_alck_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement2) "hW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/machinery/airlock_sensor{ + name = "chamber airlock sensor"; + dir = 1; + pixel_y = 0; + id_tag = "oh_b2_geo_airlock_chamber_sensor" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock/cabled{ + name = "outer large air vent"; + dir = 1; + id_tag = "oh_b2_geo_airlock_outer_vent" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement2) +/area/outreach/outpost/engineering/b2/geothermals_airlock) "hX" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 8 +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement2) "hY" = ( @@ -3761,51 +3907,86 @@ dir = 4 }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l1_e_alck_outer" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement2) "hZ" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/maintenance, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement2) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement2) "ia" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/maintenance, -/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement2) +/area/outreach/outpost/maint/power/b2) "ib" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "ic" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"id" = ( -/obj/structure/disposalpipe/junction/mirrored, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) -"ie" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/unary/tank/air/airlock{ + icon_state = ""; dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/northeast) -"if" = ( +"id" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement2) +"ie" = ( /obj/machinery/light_switch, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"if" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/southeast) "ig" = ( /obj/effect/floor_decal/industrial/fire{ @@ -3822,13 +4003,15 @@ icon_state = "stripecee"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ih" = ( /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, /obj/structure/cable/white{ icon_state = "0-2" }, @@ -3840,8 +4023,7 @@ icon_state = "stripecee"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ii" = ( /obj/structure/cable/yellow{ @@ -3859,7 +4041,7 @@ }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ik" = ( /obj/structure/cable/white{ @@ -3871,7 +4053,7 @@ }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "il" = ( /obj/effect/floor_decal/industrial/fire/corner{ @@ -3886,7 +4068,7 @@ }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "im" = ( /obj/effect/floor_decal/industrial/fire/corner{ @@ -3901,7 +4083,7 @@ }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "in" = ( /obj/effect/wallframe_spawn/borosilicate, @@ -3910,9 +4092,9 @@ dir = 8 }, /obj/machinery/door/blast/regular/open{ + name = "power room blast door"; dir = 4; - id_tag = "geo_blast_doors"; - name = "power room blast door" + id_tag = "geo_blast_doors" }, /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b2/smes) @@ -3921,7 +4103,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "ip" = ( /obj/structure/cable/yellow{ @@ -3953,13 +4135,25 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/engineering/b2/smes) "is" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement2) "it" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3987,12 +4181,9 @@ /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "iv" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/machinery/atmospherics/unary/tank/air/airlock, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "iw" = ( /obj/structure/cable/white{ icon_state = "1-8" @@ -4003,38 +4194,38 @@ }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ix" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/southwest) "iy" = ( -/obj/machinery/alarm, +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/area/outreach/outpost/maint/passage/b2/southwest) "iz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/southwest) "iA" = ( /obj/machinery/alarm{ icon_state = "alarm0"; dir = 1 }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/southwest) "iB" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/atmospherics/b2/tank_outer) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b2/southeast) "iC" = ( /obj/structure/flora/pottedplant/largebush, /obj/machinery/alarm{ @@ -4045,22 +4236,23 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement2) "iD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, /obj/structure/disposalpipe/segment/bent{ icon_state = "pipe-c"; - dir = 1 + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement2) +/area/outreach/outpost/hallway/south/basement2) "iE" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b2/southwest) "iF" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -4069,8 +4261,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/button/access/wired/exterior{ dir = 4; - id_tag = "OH_l1_e_alck"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l1_e_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, @@ -4090,124 +4282,75 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement2) "iH" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/hallway/south/basement2) "iI" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/fire/corner, +/obj/structure/cable/white{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "iJ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement2) +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b2/southeast) "iK" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement2) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/engineering/b2/geothermals_airlock) "iL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/fire/corner{ + icon_state = "stripecorner"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/structure/cable/white{ + icon_state = "2-8" }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement2) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "iM" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, /obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 1 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 10 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement2) +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/b2/geothermals_airlock) "iN" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) "iO" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/unary/tank/air/airlock{ - icon_state = ""; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northeast) +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) "iP" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -4227,8 +4370,12 @@ /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "iR" = ( +/obj/structure/sign/warning/caution{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "iS" = ( /obj/structure/cable/yellow, /obj/machinery/power/smes/buildable/preset/outreach{ @@ -4237,62 +4384,78 @@ /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/engineering/b2/smes) "iT" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/structure/sign/warning/internals_required, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/b2/geothermals_airlock) "iU" = ( -/obj/structure/sign/warning/caution{ - pixel_y = 32 - }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "iV" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 +/obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; + density = 1; + id_tag = "geo_blast_doors" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "iW" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 8 }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "iX" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/basement2) "iY" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southwest) "iZ" = ( -/obj/machinery/power/breakerbox/activated, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b2) -"ja" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/machinery/firealarm{ - icon_state = "casing"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/atmos/b2) +"ja" = ( +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "jb" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -4344,7 +4507,7 @@ icon_state = "stripecee"; dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "ji" = ( /obj/structure/cable/yellow, @@ -4432,6 +4595,11 @@ icon_state = "computer"; dir = 4 }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/structure/table, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "jp" = ( @@ -4500,6 +4668,10 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "jw" = ( @@ -4510,17 +4682,12 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, +/obj/structure/cable/white, /obj/effect/floor_decal/industrial/fire/cee{ icon_state = "stripecee"; dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "jx" = ( /obj/structure/cable/yellow{ @@ -4543,22 +4710,31 @@ /area/outreach/outpost/hallway/west/basement2) "jy" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, +/turf/simulated/floor/tiled/techfloor/grid/outreach, /area/outreach/outpost/engineering/b2/geothermals) "jz" = ( /obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/simulated/floor/plating, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "jA" = ( -/obj/effect/catwalk_plated, +/obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; + density = 1; + dir = 4; + id_tag = "geo_blast_doors" + }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-8" }, -/turf/simulated/floor/plating, -/area/exoplanet/outreach/underground/d2) +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "jB" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -4578,61 +4754,60 @@ /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/engineering/b2/smes) "jD" = ( -/obj/machinery/door/blast/regular/wired/open{ - density = 1; - icon_state = "pdoor0"; - id_tag = "geo_blast_doors" - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/machinery/door/airlock/external/glass/wired, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/engineering/b2/geothermals) +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "jE" = ( /obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "1-4" }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "jF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/outreach/outpost/disposals) "jG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 9 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "jH" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "jI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "jJ" = ( /obj/structure/sign/deck/first{ @@ -4653,11 +4828,12 @@ icon_state = "1-2" }, /obj/machinery/button/blast_door{ - dir = 4; icon_state = "blastctrl"; + dir = 4; id_tag = "geo_blast_doors" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/table, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "jM" = ( @@ -4684,25 +4860,21 @@ /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b2/smes) "jO" = ( -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 1 +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 8 }, /obj/structure/cable/white{ - icon_state = "1-8" + icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "jP" = ( /obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "jQ" = ( /obj/structure/cable/yellow{ @@ -4715,11 +4887,9 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "jR" = ( -/obj/structure/wall_frame/concrete, -/obj/structure/grille, /obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; density = 1; - icon_state = "pdoor0"; id_tag = "geo_blast_doors" }, /obj/structure/cable/yellow{ @@ -4728,26 +4898,29 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) "jS" = ( -/obj/effect/catwalk_plated, +/obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; + density = 1; + id_tag = "geo_blast_doors" + }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-2" }, +/obj/machinery/door/airlock/external/glass/wired, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/exoplanet/outreach/underground/d2) +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/outreach/outpost/engineering/b2/geothermals) "jT" = ( /obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "jU" = ( /obj/structure/cable/yellow{ @@ -4762,44 +4935,38 @@ /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/engineering/b2/smes) "jV" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southeast) +/area/outreach/outpost/maint/passage/b2/southwest) "jW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b2/southwest) "jX" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement2) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "jY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) "jZ" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; @@ -4824,34 +4991,29 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d2) "kc" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement2) +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southeast) "kd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement2) +/area/outreach/outpost/maint/passage/b2/southeast) "ke" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 8 + }, +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) +/area/outreach/outpost/maint/passage/b2/southeast) "kf" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -4861,9 +5023,11 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement2) "kg" = ( -/obj/machinery/light_switch, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b2/southeast) "kh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -4895,7 +5059,7 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "kl" = ( /obj/machinery/light_switch{ @@ -4903,7 +5067,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/power/b2) "km" = ( /obj/structure/cable/yellow{ @@ -4966,86 +5130,116 @@ /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/engineering/b2/smes) "ku" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/unary/tank/air/airlock, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) "kv" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) -"kw" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/northwest) +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement2) +"kw" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) "kx" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 8 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"ky" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"kz" = ( +/area/exoplanet/outreach/underground/d2) +"ky" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"kA" = ( +/area/exoplanet/outreach/underground/d2) +"kz" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, /obj/structure/sign/warning/compressed_gas, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"kB" = ( +/area/exoplanet/outreach/underground/d2) +"kA" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"kC" = ( +/area/exoplanet/outreach/underground/d2) +"kB" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" + dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"kD" = ( -/obj/structure/railing/mapped, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach/underground/d2) -"kE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"kC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/red{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"kD" = ( +/obj/structure/railing/mapped, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -5072,140 +5266,1246 @@ /turf/exterior/rock/volcanic/outreach/abyss, /area/exoplanet/outreach/underground/d2) "kI" = ( -/obj/effect/floor_decal/industrial/fire/corner, +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"kJ" = ( +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, /obj/structure/cable/white{ icon_state = "2-4" }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/fire/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"kK" = ( +/obj/effect/floor_decal/industrial/fire, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/outreach, /area/outreach/outpost/engineering/b2/geothermals) -"kJ" = ( -/obj/effect/floor_decal/industrial/fire, +"kL" = ( +/obj/effect/floor_decal/industrial/fire/corner{ + icon_state = "stripecorner"; + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"kM" = ( +/obj/effect/floor_decal/industrial/fire{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"kN" = ( +/obj/effect/floor_decal/industrial/fire/corner{ + icon_state = "stripecorner"; + dir = 1 + }, /obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"kO" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southeast) +"kP" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kQ" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kR" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kS" = ( +/obj/effect/floor_decal/industrial/hatch, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kT" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock/cabled{ + icon_state = "map_vent"; + dir = 8; + id_tag = "OH_l1_e_alck_pump_out_external" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"kU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sign/department/engineering{ + icon_state = "engineering"; + dir = 4; + pixel_x = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement2) +"kV" = ( +/obj/machinery/alarm, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"kW" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass/engineering/outreach/atmos, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"kX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"kY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"kZ" = ( +/obj/machinery/light/small/reinforced{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"la" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 9 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lb" = ( +/obj/machinery/light/small/reinforced{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lc" = ( +/obj/machinery/air_sensor{ + name = "gas sensor tank 4"; + id_tag = "ob_atmos_tnk4_sns" + }, +/turf/simulated/floor/reinforced/chlorine, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"ld" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement2) +"le" = ( +/obj/structure/hygiene/drain, +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 1 + }, +/obj/structure/hygiene/shower/emergency{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/b2/geothermals_airlock) +"lf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lg" = ( +/obj/machinery/light/small, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lh" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement2) +"li" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/obj/machinery/alarm/nobreach/airlock{ + dir = 8; + id_tag = "oh_b2_geo_airlock_alarm" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock/cabled{ + name = "inner large air vent"; + dir = 1; + id_tag = "oh_b2_geo_airlock_inner_vent" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/b2/geothermals_airlock) +"lk" = ( +/obj/machinery/door/blast/regular/wired/open{ + icon_state = "open"; + density = 1; + id_tag = "geo_blast_doors" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/engineering/b2/geothermals) +"ll" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/red/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lm" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"ln" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lo" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lp" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"ls" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lu" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lv" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lw" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lx" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"ly" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lz" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lC" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/outreach{ + name = "Geothermals Airlock Controller"; + id_tag = "oh_b2_geo_airlock"; + tag_exterior_door = "oh_b2_geo_airlock_outer_door"; + tag_interior_door = "oh_b2_geo_airlock_inner_door"; + tag_chamber_sensor = "oh_b2_geo_airlock_chamber_sensor"; + tag_exterior_sensor = "oh_b2_geo_airlock_outer_sensor"; + tag_interior_sensor = "oh_b2_geo_airlock_inner_sensor"; + tag_pump_out_external = "oh_b2_geo_airlock_exterior_vent"; + tag_pump_out_internal = "oh_b2_geo_airlock_interior_vent"; + tag_air_alarm = "oh_b2_geo_airlock_alarm" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/b2/geothermals_airlock) +"lF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external/glass/outreach{ + icon_state = "closed"; + dir = 4; + id_tag = "oh_b2_geo_airlock_inner_door" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/b2/geothermals_airlock) +"lG" = ( +/obj/machinery/light/small, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lI" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/engineering/b2/smes) +"lJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/engineering/b2/smes) +"lK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement2) +"lL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"lM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lP" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/gas_tanks, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lQ" = ( +/obj/machinery/atmospherics/pipe/zpipe/up{ + icon_state = "up"; + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lR" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + icon_state = "off"; + dir = 8; + id_tag = "ob_atmos_tnk3_inj" + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lS" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon/atmos/tank{ + icon_state = "map_vent"; + dir = 4; + id_tag = "ob_atmos_tnk3_vnt" + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lT" = ( +/obj/machinery/atmospherics/pipe/zpipe/up{ + icon_state = "up"; + dir = 8 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lU" = ( +/obj/machinery/air_sensor{ + name = "gas sensor tank 3"; + id_tag = "ob_atmos_tnk3_sns" + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"lV" = ( +/obj/machinery/power/apc/high, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"lY" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/atmos/b2) +"lZ" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b2) +"ma" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/disposals) +"mb" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/waste/b2) +"mc" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/waste/b2) +"md" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"me" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mf" = ( +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/southeast) +"mg" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/gas_tanks, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"mh" = ( +/obj/structure/sign/warning/compressed_gas, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) +"mi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"mj" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"mk" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"ml" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"mm" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d2) +"mn" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d2) +"mp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) +"ms" = ( +/obj/machinery/door/airlock/glass/engineering/outreach/atmos, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"mt" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/outreach/gas_tanks, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"mu" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b2/tank_outer) +"mv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"mw" = ( +/obj/machinery/airlock_sensor{ + name = "interior airlock sensor"; + dir = 1; + pixel_y = 0; + id_tag = "oh_b2_geo_airlock_inner_sensor" + }, +/obj/machinery/button/access/interior{ + name = "airlock access button"; + icon_state = "button"; + dir = 4; + id_tag = "oh_b2_geo_airlock" + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance) +"mx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"my" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"mz" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"mA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"mB" = ( +/obj/machinery/power/apc/high, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"mC" = ( +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southwest) +"mD" = ( +/obj/machinery/light_switch, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) +"mE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) +"mF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b2/northwest/junction) +"mH" = ( +/obj/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"mI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/disposals) +"mJ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"kK" = ( -/obj/effect/floor_decal/industrial/fire, -/obj/structure/cable/white{ +/area/outreach/outpost/maint/passage/b2/northwest) +"mK" = ( +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/outreach, -/area/outreach/outpost/engineering/b2/geothermals) -"kL" = ( -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 }, -/obj/structure/cable/white{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/outreach, -/area/outreach/outpost/engineering/b2/geothermals) -"kM" = ( -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 8 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/basement2) +"mL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/cable/white{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"kN" = ( -/obj/effect/floor_decal/industrial/fire{ +/obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 8 - }, -/obj/structure/cable/white{ - icon_state = "1-2" + dir = 1 }, -/obj/structure/cable/white, -/obj/effect/floor_decal/industrial/fire/cee{ - icon_state = "stripecee"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"kO" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b2/southwest) -"kP" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; +/area/outreach/outpost/hallway/north/basement2) +"mM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 1 }, -/obj/structure/cable/white{ - icon_state = "4-8" +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northwest) +"mN" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northwest) +"mO" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/power/b2) +"mP" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/power/b2) +"mQ" = ( +/obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/waste/b2) +"mR" = ( +/obj/machinery/light/small, /turf/simulated/floor/plating, -/area/outreach/outpost/engineering/b2/geothermals) -"kQ" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/disposals) +"mS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"mT" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/exoplanet/outreach/underground/d2) -"kR" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b2/northeast) +"mU" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/exoplanet/outreach/underground/d2) -"kS" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/area/outreach/outpost/disposals) +"mV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/power/b2) +"mW" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"mX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/northeast) +"mY" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) +"mZ" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/exoplanet/outreach/underground/d2) -"nD" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 4 + dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"uA" = ( -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b2/tank_outer) -"YA" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b2/southeast) +"na" = ( /obj/machinery/network/relay/wall_mounted/outreach{ icon_state = "wall_router"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/waste/b2) +"nb" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/atmospherics/b2/tank_outer) (1,1,1) = {" aa @@ -15803,7 +17103,7 @@ jf jf jf jf -jf +ac jf ac jf @@ -16005,12 +17305,12 @@ jf jf jf jf -jf -jf +ac +ab ac jf -jf -jf +ac +ac jf do ac @@ -16026,8 +17326,8 @@ ac ac do do -jf -jf +ac +ac jf jf ai @@ -16209,28 +17509,28 @@ jf jf jf ac -ac jf -jz -io -io +jf hP -kR io io -hP -kR +jz +lw io io +jz jT +lx +io +kR io io +lw kR -jT io io -kS -jf +jE +ac jf ac ac @@ -16389,7 +17689,7 @@ jf jf jf ac -ac +ab ac ac jf @@ -16413,26 +17713,26 @@ jf ac jf jf -jS -ao -ao -ck -ao -ao -ao -ck -ao -ao -ao -ck -ao -ao -ao -ck -ao -ao +kQ +fF +fF jA -jf +fF +fF +fF +jA +fF +fF +fF +jA +fF +fF +fF +jA +fF +fF +jP +ac jf ac ac @@ -16615,26 +17915,26 @@ jf ab jf jf -jA -ao -aA -cv -cv -gz -hN -hN +lu +fF +cf +dV +dV +gE +hI +hI ij jy -kI +iI dX dX -hK -ig -ig +ha +hL +hL ij -ao -jA -jf +fF +lz +ac jf jf ac @@ -16817,26 +18117,26 @@ jf jf jf jf -jA -ao -aB +jP +fF +cj dy dy gC dy dy ik -ao -kJ +fF +kK dy dy gC dy dy -kP -ao -jA -jf +kM +fF +jP +ac jf ac ac @@ -17013,32 +18313,32 @@ aD az aD az +az +az ae -ac -ac jf jf jf -jA -ao -aB +jP +fF +cj dK dK gC dK dK ik -ao +fF kK dK dK gC dK dK -kP -ao -jA -jf +kM +fF +jP +ac jf jf ac @@ -17207,40 +18507,40 @@ jf ac au aH -bh -eY -eY -eY -eY -bh -eY -ky +bq +eu +bB +eA +eA +fa +bB +eA +eA +aG gI ac jf -ac -jf jf -jA -aq -bF +jP +ck +kL dW dW -hI -hQ -hQ +gV +hK +hK il jy kL dW dW -hI -hQ -hQ +gV +hK +hK il -aq -jA -jf +lk +jP +ac jf jf jf @@ -17409,40 +18709,40 @@ jf ac aC aI -aK -aK -aK -aK -aK -aK -aK -kz +nb +nb +nb +nb +nb +nb +nb +nb +nb +kx gI ac jf -ac -jf jf aE -av -bG +iV +cv dX dX -hK -ig -ig +ha +hL +hL im jy -bG +cv dX dX -hK -ig -ig +ha +hL +hL im jR -jP -jf +kP +ac jf jf ac @@ -17610,43 +18910,43 @@ jf jf ac au -aI -aK -aK +aM +nb aK aK aK aK aK -kz +ad +nb +nb +ky gI -ac -ac jf jf jf -jS -ao -aB +kQ +fF +cj dy dy gC dy dy ik -ao +fF kK dy dy gC dy dy -kP -ao -jA -jf -jf +kM +fF +jP ac +jf +ab ac ac ac @@ -17812,41 +19112,41 @@ jf jf ac au -aM -aK +aO +nb aK bn bp bo aK -aK -kA +bx +nb +nb +kz kD ac jf -ac -jf jf -jA -ao -aB +lu +fF +cj dK dK gC dK dK ik -ao +fF kK dK dK gC dK dK -kP -ao -jA -jf +kM +fF +lz +ac jf jf ac @@ -18015,40 +19315,40 @@ jf ac au aI -aK +nb aK bo hq bv -aK -aK -kB +gs +bX +nb +nb +kA kD -ac -jf jf jf jf -jA -aq -bF +jP +lk +kL dW dW -hI -hQ -hQ +gV +hK +hK il jy kL dW dW -hI -hQ -hQ +gV +hK +hK il -aq -jA -jf +lk +jP +ac jf jf ac @@ -18217,40 +19517,40 @@ jf ac aC aI +nb aK -aK -bo +kZ bb bo aK -aK -kB +bX +nb +nb +kA gI -ac -jf jf jf ac aE -av -bG +iV +cv dX dX -hK -ig -ig +ha +hL +hL im jy -bG +cv dX dX -hK -ig -ig +ha +hL +hL im jR -jP -jf +kP +ac jf jf jf @@ -18418,41 +19718,41 @@ jf jf ac au -aO -aK +aR +nb aK bo bu bo aK -aK -kz +em +nb +nb +kx gI -ac -jf jf ac do kE -ao -aB +fF +cj dy dy gC dy dy ik -ao +fF kK dy dy gC dy -dy -kP -ao -jA -jf +dy +kM +fF +jP +ac jf jf jf @@ -18621,40 +19921,40 @@ jf ac au aI +nb aK aK aK aK aK -aK -aK -kB -kD -ac -jf +bX +nb +nb +kA +mo jf ac ac bl -ao -aB +fF +cj dK dK gC dK dK ik -ao +fF kK dK dK gC dK dK -kP -ao -jA -jf +kM +fF +jP +ac jf jf jf @@ -18822,41 +20122,41 @@ jf jf ac au -aI -aK -aK +aM +nb aK aK aK aK aK -kz +et +nb +nb +hB gI -ac -ac jf do ac bl -aq -cb +lk +dS dY dY -hL -ih -ih +hD +hN +hN il jy kL -kN +ja dW -hI -hQ -hQ +gV +hK +hK il -aq -jA -jf +lk +jP +ac jf jf jf @@ -19003,7 +20303,7 @@ jf jf jf jf -ac +ab ac jf jf @@ -19024,41 +20324,41 @@ jf jf ac au -aM -aK +aO +nb aK aQ aZ aW aK -aK -kA +bx +nb +nb +kx gI -do -ac jf ac do jQ -av -bG +iV +cv dX dX -hK -ig -ig +ha +hL +hL im jy -bG +cv dX dX -hK -ig -ig +ha +hL +hL im jR -jP -jf +kP +ac jf jf jf @@ -19226,41 +20526,41 @@ jf jf ac au -aM -aK +aO +nb aK aW ba bi aK -aK -kB +eX +mg +nb +mh gI ac ac -ac -ac -ac +aA bl -ao -aB +fF +cj dy dy gC dy dy ik -ao +fF kK dy dy gC dy dy -kP -ao -jA -jf +kM +fF +jP +ac jf jf jf @@ -19429,40 +20729,40 @@ jf ac aC aI +nb aK -aK -aW +lb bt aW -aK -aK -kC -bz -bz -bz -bz +gs +fM +nb +nb +mm +io +lt jB -bz -gJ -ao -aB +aq +lv +fF +cj dK dK gC dK dK ik -ao +fF kK dK dK gC dK dK -kP -ao -jA -jf +kM +fF +lz +ac jf jf jf @@ -19630,41 +20930,41 @@ jf jf ac au -aO -aK +aR +nb aK aW bc aW aK -aK -bx -fM -iB -al -al -al -al -al -ao -cb -dU -dU -hL -ha -ha +fN +nb +nb +nb +es +es +fF +av +fF +fF +dS +dZ +dZ +hD +hQ +hQ il jy kL dW dW -hI -hQ -hQ +gV +hK +hK il -aq -jA -jf +lk +jP +ac jf jf jf @@ -19832,41 +21132,41 @@ jf jf ac au -aM -aK -aK +aO +nb aK aK aK aK aK -em -fc -gs -hM -iX -hM -iT +kC +nb +hC +nb hM -ao +iU +cw +aB +bF bG -dT -dT -hK -gV -gV +cv +eZ +eZ +ha +ig +ig im jy -bG +cv dX dX -hK -ig -ig +ha +hL +hL im jR -jP -jf +kP +ac jf jf jf @@ -20034,41 +21334,41 @@ jf jf ac au -aR -aK -aK +aU +nb aK aK aK aK aK -eX -fN -hB -hM -iR -iR -iR -iR -ao -aB +kV +ms +mu +kW +kY +lg +iK +cb +iK +iK +cj dy dy gC dy dy ik -ao +fF kK dy dy gC dy dy -kP -ao -jA -jf +kM +fF +jP +ac jf jf jf @@ -20236,41 +21536,41 @@ jf jf ac aC -aO -aK +aR +nb aK aX -bd +bg aY aK -aK -bB -fM -iB -iU -iR -iR -hM +fN +nb +jY +nb iR -ao -aB +ml +iK +iM +hW +iK +cj dK dK gC dK dK ik -ao +fF kK dK dK gC dK dK -kP -ao -jS -jf +kM +fF +kQ +ac jf jf jf @@ -20439,40 +21739,40 @@ jf ac au aI -aK +nb aK aY -hr bw -aK -aK -bX -fL -iB -iR -hM -iR -iR -iR -ao -cf -dV -dU -hL -ha +lc +gs +fM +nb +nb +nb +iU +lD +iK +iT +le +iK +dT +gk +dZ hD +hQ +ih iw jy -kM +iL jh -dS -dZ -gE jw jO -jD -kQ -jf +kI +kJ +kN +jS +kS +ac jf jf jf @@ -20640,41 +21940,41 @@ jf jf ac au -aM -aK +aO +nb aK -aY -hx +bd +hr aY aK -aK -ad -uA -iB -iR -iR -iR -iR -hM -ao -cj -eZ -cj -cj -cj -eZ -cj -ao -cj -eZ -cj -cj -cj -eZ -cj -ao -jS -jf +kX +mt +nb +jD +iU +lG +iK +lE +lj +iK +dU +gz +dU +dU +dU +gz +dU +fF +dU +gz +dU +dU +dU +gz +dU +fF +ll +ac jf jf jf @@ -20842,41 +22142,41 @@ jf jf ac aC -aM -aK +aO +nb aK aY -bg +hx aY aK -aK -aG -fL -iB -iR -iR -iR -hM -iR -ar -ar +bx +nb +nb +iU +li +lH +iK +lF +iK +iK +ao fw hA -ar +ao hA fw -ar -ar -ar +ao +ao +ao fw in -ar +ao in fw -ar -ar -jA -jf +ao +ao +jP +ac jf jf jf @@ -21044,24 +22344,24 @@ jf jf ac au -aI -aK -aK +aM +nb aK aK aK aK aK -ad -uA -iB -iR -iR -iR -iR -iR +et +nb +iv +iW +lC +lN +lO +lX +mw ar -aw +lI fJ aw ii @@ -21075,10 +22375,10 @@ ko kp aw fJ -cl -ar -jA -jf +lJ +ao +jP +ac jf jf jf @@ -21247,21 +22547,21 @@ jf ac aC aI +nb aK aK aK aK aK -aK -aK -ad +bX +nb +ku +lf +lB fL -iB -iR -hM -hM -iR -iR +iU +mi +lV ar ay ax @@ -21278,9 +22578,9 @@ kq jm gw kt -ar -jA -jf +ao +jP +ac jf jf jf @@ -21448,23 +22748,23 @@ jf jf ac au -aO -aK -aK -aX -bd -aY +aR +nb aK +be +lQ +bf aK -ad -uA -iB -iR -iR -iR -iR -hM -ar +em +nb +iv +lA +at +gj +lM +mj +lW +dL aw cg gv @@ -21480,8 +22780,8 @@ ir ji iS cl -ar -jA +ao +jP ac jf jf @@ -21651,21 +22951,21 @@ ac ac au aI +nb aK +bf +lR +lU aK -aY -be -bj -aK -aK -ad -nD -iB -hM -iY -iW -iV -iV +bX +nb +iv +la +bU +mv +jX +mk +md ar cl jK @@ -21681,9 +22981,9 @@ aw kr jK ks -cl -ar -jA +cl +ao +lz do jf jf @@ -21852,29 +23152,27 @@ jf ac ac au -aM -aK +aO +nb aK -aY +bj +lS bf -aY -aK -aK -bD -al -al -al -al -al -ku -ku -ar -ar -ar -ar -cw -ar +gs +bX +nb +dN +dN +dN +dR +dR +fy +gp +mn +mn +mn ar +ff ar ar ar @@ -21885,7 +23183,9 @@ ar ar ar ar -jA +ao +ao +jP ac jf jf @@ -22055,39 +23355,39 @@ ac ac aC aI +nb aK +bf +lT +bf aK -aY -bg -aY -aK -aK -eu -al -ci -gG -ci -gn -iv -kv -gk -bU -gl -eU -gj +bx +nb +dN +as +by +eB +fq +fU +kB +mp +gU +mG +kU +lh gm +fY +gG gl -gp -jW -hJ -bW -kO -bW -bW hc -es +hJ +ix +hJ +hJ +iy +iE bk -jE +gJ ac jf jf @@ -22256,39 +23556,39 @@ jf ac ac au -aI -aK -aK +aM +nb aK aK aK aK aK -ev -al -fZ -ci -gG -ci -ci -ci -gq -kw +lP +nb +dN +aN +aj +fp +fu +gi +me +mq +mF cx -fh -cA -at +aF +eV +fe cx -ic -gt -bW -bW -bW -bW -ke -bW -es -bl +ie +mx +mz +mz +mz +mz +mA +hJ +iE +ls ac ac jf @@ -22459,37 +23759,37 @@ ac ac aC aI -aK -aK -aK -aK -aK -aK -aK -ev -al -ci -ci -hi -hi -hi -hi -hi -hi +nb +nb +nb +nb +nb +nb +nb +nb +dN +mN +mM +fp +fp +fp +fp +fp +fp cx -cd +fQ cE -fS -ah +fh +cx hf hf hf hf hf hf -bW -ke -es +mz +iz +iE bl do ac @@ -22660,18 +23960,18 @@ jf ac ac au -aU -bq -fa -kx -bq -kx -fa -bq -eA -al -gG -ci +bh +bD +ev +eY +bD +eY +ev +bD +fc +dN +bW +aj en am am @@ -22679,19 +23979,19 @@ am am an cx -at +fT jx -go -ah +fi +cx iG bP cD jd jZ -dR -bW -bW -es +iX +mz +hJ +iE bl ac do @@ -22871,9 +24171,9 @@ eL aP eL bl -al -ci -el +dN +bZ +dg hi am am @@ -22881,19 +24181,19 @@ am am am dJ -fi -du -gB -hZ -iK +gh +cA +fl +ah +ht cn bP cK ka hf -bW -bW -es +mz +hJ +iE kE ac ac @@ -23072,10 +24372,10 @@ ac ac do ac -bl -al -ci -ci +lq +dN +bZ +aj hi am am @@ -23083,9 +24383,9 @@ am am am dJ -at -dw -dG +fT +cW +fn bN jb ct @@ -23093,10 +24393,10 @@ hj cL dI hf -bW -ke -es -bl +mz +iz +iE +ls ac ac ac @@ -23275,9 +24575,9 @@ ac ac ac bl -al -fZ +dN ci +aj hi am am @@ -23285,19 +24585,19 @@ am am am dJ -fi -dx -at -ia +gh +cA +fT +gf jd jd jd bP bP hf -bW -hc -es +mz +iy +iE bl ac do @@ -23477,9 +24777,9 @@ do ac do bl -al -ci -gG +dN +bZ +dq hi am am @@ -23487,19 +24787,19 @@ am am am cx -at -dx -fi -ah +fT +cA +gh +cx jJ -jd +fs cJ cM jd hf -bW -bW -es +mz +hJ +iE kE ac ac @@ -23679,29 +24979,29 @@ ac ac ac bl -al -gG -ci +dN +bW +aj he he he he he he -ag -cy -fP -dH -bL +cx +gx +dc +fo +cx bM bM bM bM bM bM -ke -bW -es +mA +hJ +iE bl ac ac @@ -23880,31 +25180,31 @@ do ac ac do -bl -al -ci -ci +lq +dN +bZ +aj he -ca aL -ca +aT +cT +aT aL -ca -ag -at -dx -at -bL -cW -cW -gh -cW -ht +cx +fT +cA +fT +cx +ec +ec +fk +ec +ec bM -bW -bW -es -kE +mz +hJ +iE +ly ac do ac @@ -24083,29 +25383,29 @@ ac bk bz eC -al -aN -ci +dN +cu +aj he -aL -aL -aL -aL -aL -ag -fh -dx -eW -bL -dc +aT +ca +ee +aT +aT +cx +gB +cA +fP +cx +ec +ec +gN +hG ec -gx -gx -gx bM -ke -ft -es +mA +iA +iE bm bz gH @@ -24282,35 +25582,35 @@ jf jf ac do -bl -et -et +lL al -cI -gG +al +dN +cG +dq he -aT bI -ds -aL +cp eh -ag -at -dx -gR -bL -dc -ek -gN +aT +mQ +cx +fT +cA +fR +cx +eP +ec +hg jF -hv +mR bM -bW -gr -es -et -et -bl +mz +iY +iE +al +al +lL ac jf jf @@ -24484,35 +25784,35 @@ jf ac ac ac -bl +lL bA kG hi -fq -eT +cI +el he -ca -cp +cc +cr +eN aL -ca -YA -ag -cz -fO -cz -bL +na +cx +gF dd -eS -gO -gM -hG +gF +cx +ec +ec +hv +ma +ec bM -gi -hO +my +jV hn kb bA -bl +lL do jf jf @@ -24686,35 +25986,35 @@ ac ac jf ac -bl +lL kj fI hi -cu -aj +mJ +ex he -cc -cr -cT -ee -ag +cd +ds +mb +mc dl -fl -hR -gS dl -bL -fk -hg -hs +gK +de +fS +dl +dl +eS hw +mI +mU bM -dg -dp +mC +jW hn kb kj -bl +lL ac jf jf @@ -24888,35 +26188,35 @@ ac ac jf ac -bl +lL bE bE -dP -bZ +eo +mK dP ag ag -dQ +cs ag ag dl dr -ei -bY -iD +gM +di +cz iP dl bL bL -hu +hs bL bL bS -gf -dN +kv +iH bE bE -bl +lL ac jf jf @@ -25090,35 +26390,35 @@ ac jf jf do -bl +lL bC fI hk -cG +mL bJ -bO -ch -dj -cN -dz -dm -ei -dt -iH -hm -is -ei -jX -dh -gF -kc -ja +bO +ch +cN +dj +dt +dQ +eU +gO +di +fV +eU +eU +hu +hz +hS +hX +id kf gb ho ki bC -bl +lL ac jf jf @@ -25292,35 +26592,35 @@ jf jf jf ac -kE +lL kj fI hk df +aS +bs +aS +bY cO cP -cO -aS -cQ -di -dn -cF +cU +cU cV -iI +dk it -iE -dn +cU +cU ej -eP -gK -fo -kd -fo +ek +fr +fO +is +fO gc ho kb kj -bl +lL ac jf jf @@ -25494,7 +26794,7 @@ jf jf jf ac -bl +lL bC kG hk @@ -25502,27 +26802,27 @@ af br bT ce -bs -gA -dz -ei -cU -id -iJ -hz -dm +co +cQ +dt +eU +dQ ei -jX -fn -jY -hX -fV +di +go +dQ +eU +hu +hR +hT +hZ +iD eR kh ho kb bC -bl +lL do jf jf @@ -25696,35 +26996,35 @@ jf jf jf ac -bl +lL bE bE -dP +eo cm dP aJ aJ -co +cy aJ aJ dl dA -fr -fQ -dm +gM +dn +cz iC dl ak ak -dL +ia ak ak bS -fY -dN +lK +iH bE bE -bl +lL ac jf jf @@ -25898,35 +27198,35 @@ jf jf jf ac -bl +lL kj kG hl -as -ie +dp +eH gZ -cq -cs +aV +cB cY -dF -aJ +eE dl -dm -fT +dl +cz +dn gu dl -ak -da -ea -eQ +dl +cX +eb +ib kl hh -kg -fu +mD +kc hp kb kj -bl +lL ac jf jf @@ -26100,35 +27400,35 @@ jf jf jf do -kE +lL bA fI hl -ix -dq +ef +eM gZ -aV -cB -dO +bH +cC +cR dM ez aJ -aF -dC -aF +dh +du +dh ak bQ cZ -jI -gP -bR +eQ +jG +mO hh -gd -iz +mE +kd hp ki bA -bl +lL ac jf jf @@ -26302,35 +27602,35 @@ jf jf ac do -bl -et -et -eo -fp -by +lL +al +al +eq +ep +eT gZ -bH -cC -de -dk +cq +cF +dm +dO eD aJ -fe -dD -hS +dB +dw +gL ak ed -eb -hF -jG -hH +da +gP +jH +mP hh -er -gQ -eq -et -et -bl +kw +ke +iB +al +al +lL ac jf jf @@ -26507,29 +27807,29 @@ ac kF bz gH -eo -iy -ep +eq +er +fm gZ cS -cR cH -eN -eE +dz +lZ +lY aJ -ey dE -fR +dx +gR ak -bV -db bR -jH +db +hF jI +mV hh -er -iA -eq +kw +kO +iB bk bz eC @@ -26708,31 +28008,31 @@ ac ac ac do -kE -eo -by -ep +ln +eq +eG +fg gZ cS -aV -aV -cS +bH +dF +iZ cS aJ -fx -ff -dB +dG +dC +ey ak -cX -ib -iZ +bV +ea +hH kk -jI +mV hh -er -jV -eq -bl +kg +gX +iB +ls ac ac ac @@ -26909,11 +28209,11 @@ ac ac do ac -ac -bl -eo -ep -ep +ac +bl +eq +eJ +fm gZ gZ gZ @@ -26921,9 +28221,9 @@ gZ gZ gZ aJ -eV -iL -gL +dH +dD +gS ak hh hh @@ -26931,9 +28231,9 @@ hh hh hh hh -er -er -eq +kw +hb +iB bl ac ac @@ -27113,29 +28413,29 @@ ac ac ac kE -eo -ep -ep -ep -ep -ep -by -ep -ep -ew -dB -ff -dB -hC -jV -er -er -er -jV -er -er -er eq +eJ +fm +fm +mW +fm +fv +mX +gr +ew +ey +dC +ey +ew +if +mY +kw +kw +mZ +kw +kw +hb +iB bl ac ac @@ -27315,29 +28615,29 @@ ac ac ac bl -eo -gU -ep -by -ep -ep -ep -ex -eH +eq +eJ +fm +eT +fm +fm +mS +gd +gt ew -ey -ff -fx -hC +dE +dC +dG +ew +iN +mr if -fU -jV -er -er -er -jV -hd -eq +kw +kw +kw +if +mf +iB bl ac ac @@ -27516,31 +28816,31 @@ ac ac ac do -bl -eo -by -ep -ep -ep -gW -fX -fy +lo +eq +eG +fZ eJ -eB -eI -iM -hT -fj -fv +eJ +ft +mT fW -ga +gY +fj +eI +eW +hm +iJ +gQ +gW +hd +hO +gX hb -jV -er -er -jV -eq -bl +hb +gX +iB +lm ac ac ac @@ -27719,22 +29019,6 @@ jf ac ac bl -eo -eo -eo -eo -eo -eo -eo -eG -eM -ew -fz -ge -fx -hC -fm -jV eq eq eq @@ -27742,6 +29026,22 @@ eq eq eq eq +fX +mB +ew +fz +ge +fx +ew +iO +gX +iB +iB +iB +iB +iB +iB +iB bl ac ac @@ -27923,25 +29223,25 @@ ac bm bz bz -bz +lp bz bz gH -eo -ef -iN -fF +eq +gq +mH +gA fA -fF +gA hU -fF -gY -er -eq +gA +kg +hb +iB bk bz bz -bz +lr bz bz eC @@ -28129,17 +29429,17 @@ ac do ac kE -eo -fg -iO -fF +eq +ga +ic +gA fD fd hV -fF -jV -er -eq +gA +if +hb +iB bl ac ac @@ -28331,17 +29631,17 @@ ac ac ac bl -eo -fg -iO -fF +eq +ga +ic +gA eF gg fC -fF -er -er -eq +gA +kw +hb +iB bl ac ac @@ -28532,19 +29832,19 @@ ac jf ac do -bl -eo -gX -iO -fF +lo +eq +gn +ic +gA fE fB -hW -fF -er -jV -eq -bl +ld +gA +kw +gX +iB +lm ac ac ac @@ -28735,17 +30035,17 @@ jf ac ac bl -eo -eo -eo -fF -fH -fF -hY -fF eq eq eq +gA +fH +gA +hY +gA +iB +iB +iB bl ac ac @@ -29140,7 +30440,7 @@ jf ac kH eK -fs +kT eK ac do @@ -29148,7 +30448,7 @@ ac ac do eg -fs +kT eK do do diff --git a/maps/outreach/outreach-2.dmm b/maps/outreach/outreach-2.dmm index 02a0d935fac..9507d9d477b 100644 --- a/maps/outreach/outreach-2.dmm +++ b/maps/outreach/outreach-2.dmm @@ -1,27 +1,31 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( +"aaa" = ( /turf/unsimulated/rock, /area/exoplanet/outreach/underground/d1) -"ab" = ( +"aab" = ( /turf/exterior/wall/outreach/subterrane, /area/exoplanet/outreach/underground/d1) -"ac" = ( +"aac" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 9 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"ad" = ( +"aad" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 1 }, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"ae" = ( +"aae" = ( /turf/exterior/barren/subterrane/outreach, /area/exoplanet/outreach/underground/d1) -"af" = ( -/turf/exterior/water/outreach, +"aaf" = ( +/turf/exterior/chlorine_sand/muriatic_acid_swamp, /area/exoplanet/outreach/underground/d1) -"ag" = ( +"aag" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -31,74 +35,63 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/button/access/wired/exterior{ dir = 4; - id_tag = "OH_l2_e_alck"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l2_e_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"ah" = ( +"aah" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/lab/storage) -"ai" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"aj" = ( +"aai" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/airlock/basement1/north) +"aaj" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/sleeproom) -"ak" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/storage) -"al" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"aak" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"aal" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_n_alck_outer" }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/north) +"aam" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"am" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"an" = ( -/obj/machinery/botany, -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 4 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/passage/b1/north/atmos) +"aan" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 9 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/personal/empty, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"ao" = ( +"aao" = ( /obj/machinery/atmospherics/unary/tank/air/airlock{ icon_state = "air_mapped"; dir = 8 @@ -106,26 +99,16 @@ /obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"ap" = ( +"aap" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aq" = ( +"aaq" = ( /turf/simulated/wall/concrete, /area/exoplanet/outreach/underground/d1) -"ar" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"as" = ( +"aar" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/crematorium) +"aas" = ( /obj/structure/cable/orange{ icon_state = "0-4" }, @@ -133,61 +116,47 @@ icon_state = "bulb_map"; dir = 1 }, -/turf/simulated/floor/plating/outreach, +/turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/d1) -"at" = ( +"aat" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/power/b1) -"au" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden{ +"aau" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"av" = ( -/obj/machinery/atmospherics/binary/pump{ - icon_state = "map_off"; - dir = 4 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 + dir = 10 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"aav" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/closet/secure_closet/personal/empty, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"aw" = ( +"aaw" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/stairwell/basement1) -"ax" = ( +"aax" = ( /turf/simulated/wall/concrete/prepainted/medbay, /area/outreach/outpost/maint/atmos/b1) -"ay" = ( +"aay" = ( /obj/machinery/door/firedoor/autoset, /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed" }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/stairwell/basement1) -"az" = ( +"aaz" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/external/glass{ - dir = 4; icon_state = "closed"; + dir = 4; id_tag = "OH_l4_e_alck_inner" }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -196,97 +165,116 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/west) -"aA" = ( +"aaA" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/hatch/maintenance{ +/obj/machinery/door/airlock/hatch/maintenance/outreach{ icon_state = "closed"; dir = 1 }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/b1/north/atmos) -"aB" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aC" = ( +"aaB" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_n_alck_outer" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/north) +"aaC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + icon_state = "map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 }, -/obj/machinery/dummy_airlock_controller{ - id_tag = "OH_l2_n_alck" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"aaD" = ( +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 5 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"aD" = ( -/obj/structure/sign/warning/engineering_access{ - pixel_y = 32 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"aE" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aaE" = ( /obj/machinery/firealarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"aF" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"aaF" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + icon_state = "map_vent"; + dir = 8; + id_tag = "OH_l2_n_alck_pump_out_internal" }, +/obj/structure/sign/warning/internals_required, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"aaG" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aaH" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 5 + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"aG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + icon_state = "airlock_control_off"; + dir = 8; + id_tag = "OH_l2_n_alck"; + tag_exterior_door = "OH_l2_n_alck_outer"; + tag_interior_door = "OH_l2_n_alck_inner"; + tag_airpump = "OH_l2_n_alck_pump"; + tag_chamber_sensor = "OH_l2_n_alck_sensor"; + tag_exterior_sensor = "OH_l2_n_alck_exterior_sensor"; + tag_interior_sensor = "OH_l2_n_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l2_n_alck_alarm"; + tag_secure = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aH" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"aaI" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 1 }, -/obj/structure/closet/crate/internals, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aI" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 9 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aJ" = ( -/obj/effect/decal/cleanable/dirt, +"aaJ" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement1) -"aK" = ( +"aaK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -299,70 +287,79 @@ icon_state = "4-8" }, /obj/effect/catwalk_plated, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/basement1) -"aL" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/airlock/basement1/north) -"aM" = ( +"aaL" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"aaM" = ( /turf/simulated/wall/r_wall/prepainted/command, /area/outreach/outpost/control/cooling) -"aN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aO" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +"aaN" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/xeno/experiment) +"aaO" = ( +/obj/machinery/alarm/nobreach/airlock{ + icon_state = "alarm0"; + dir = 4; + id_tag = "OH_l2_n_alck_alarm" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + icon_state = "map_vent"; + dir = 1; + id_tag = "OH_l2_n_alck_pump_out_internal" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/light/small/red{ + icon_state = "bulb_map"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"aP" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"aaP" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"aQ" = ( -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +"aaQ" = ( +/obj/item/radio/intercom, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aR" = ( -/obj/item/radio/intercom, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +"aaR" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aS" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +"aaS" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aT" = ( +"aaT" = ( /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"aU" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ - icon_state = "down"; - dir = 4 +"aaU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 5 }, -/obj/effect/floor_decal/industrial/fire/full, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aV" = ( +"aaV" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; @@ -370,7 +367,7 @@ }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"aW" = ( +"aaW" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 6 @@ -378,18 +375,18 @@ /obj/machinery/meter, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"aX" = ( +"aaX" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/atmospherics/b1/hall) -"aY" = ( -/obj/machinery/atmospherics/pipe/zpipe/down{ - icon_state = "down"; - dir = 8 +"aaY" = ( +/obj/machinery/camera/network/security, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 9 }, -/obj/effect/floor_decal/industrial/fire/full, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"aZ" = ( +"aaZ" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 10 @@ -397,363 +394,341 @@ /obj/machinery/meter, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"ba" = ( +"aba" = ( /obj/machinery/computer/air_control{ - input_tag = "ob_atmos_tnk2_inj"; - input_toggle = 1; name = "tank 2 atmospherics control console"; - out_pressure_mode = 1; - output_tag = "ob_atmos_tnk2_vnt"; pressure_setting = 14559.6; - sensor_tag = "ob_atmos_tnk2_sns" + input_tag = "ob_atmos_tnk2_inj"; + output_tag = "ob_atmos_tnk2_vnt"; + sensor_tag = "ob_atmos_tnk2_sns"; + out_pressure_mode = 1; + input_toggle = 1 }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bb" = ( -/obj/machinery/atmospherics/valve/open, +"abb" = ( +/obj/machinery/atmospherics/valve/open{ + name = "manual valve (tank intake)" + }, /obj/effect/floor_decal/industrial/shutoff{ icon_state = "shutoff"; dir = 1 }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bc" = ( +"abc" = ( /obj/machinery/computer/air_control{ - dir = 2; + name = "tank 1 atmospherics control console"; icon_state = "computer"; + dir = 2; + pressure_setting = 14559.6; input_tag = "ob_atmos_tnk1_inj"; - input_toggle = 1; - name = "tank 1 atmospherics control console"; - out_pressure_mode = 1; output_tag = "ob_atmos_tnk1_vnt"; - pressure_setting = 14559.6; - sensor_tag = "ob_atmos_tnk1_sns" + sensor_tag = "ob_atmos_tnk1_sns"; + out_pressure_mode = 1; + input_toggle = 1 }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bd" = ( +"abd" = ( /obj/machinery/computer/air_control{ - input_tag = "ob_atmos_tnk4_inj"; name = "tank 4 atmospherics control console"; + input_tag = "ob_atmos_tnk4_inj"; output_tag = "ob_atmos_tnk4_vnt"; sensor_tag = "ob_atmos_tnk4_sns" }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"be" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bf" = ( -/obj/machinery/atmospherics/valve, +"abe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"abf" = ( +/obj/machinery/atmospherics/valve/open{ + name = "manual valve (tank intake)" + }, /obj/effect/floor_decal/industrial/shutoff{ icon_state = "shutoff"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bg" = ( +"abg" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bh" = ( -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/morgue) -"bi" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "OH_l2_n_alck_pump" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bj" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/hygiene/shower/emergency{ + icon_state = "eshower"; + dir = 8 + }, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"abh" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/op_room2) +"abi" = ( /turf/simulated/wall/r_wall, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"bk" = ( +/area/outreach/outpost/maint/passage/b1/northwest/research) +"abj" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"abk" = ( /obj/machinery/computer/air_control{ - dir = 2; + name = "tank 3 atmospherics control console"; icon_state = "computer"; + dir = 2; input_tag = "ob_atmos_tnk3_inj"; - name = "tank 3 atmospherics control console"; output_tag = "ob_atmos_tnk3_vnt"; sensor_tag = "ob_atmos_tnk3_sns" }, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/visible, +"abl" = ( +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 + }, +/obj/machinery/atmospherics/valve/open{ + name = "manual valve (tank intake)" + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/atmospherics/b1/hall) +"abm" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 5 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bm" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - icon_state = "map"; +"abn" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bn" = ( -/obj/machinery/atmospherics/binary/pump{ - icon_state = "map_off"; +"abo" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"abp" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bo" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 4; - icon_state = "securearea"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"bp" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 +"abq" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b1/hall) -"bq" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/machinery/atmospherics/unary/tank/air/airlock{ - icon_state = "air_mapped"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"br" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - icon_state = "map"; - dir = 8 +"abr" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bs" = ( +"abs" = ( /turf/simulated/wall/concrete/prepainted/medbay, /area/outreach/outpost/medbay/op_room) -"bt" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 +"abt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bu" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - icon_state = "map"; - dir = 8 +"abu" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bv" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 1 +"abv" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ + icon_state = "down"; + dir = 4 }, +/obj/effect/floor_decal/industrial/fire/full, +/turf/simulated/floor/plating, +/area/outreach/outpost/atmospherics/b1/hall) +"abw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b1/hall) -"bw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bx" = ( +/area/outreach/outpost/maint/passage/b1/northwest/research) +"abx" = ( /turf/simulated/wall, /area/outreach/outpost/maint/passage/b1/north/atmos) -"by" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 1 +"aby" = ( +/obj/machinery/atmospherics/pipe/zpipe/down{ + icon_state = "down"; + dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/effect/floor_decal/industrial/fire/full, +/turf/simulated/floor/plating, /area/outreach/outpost/atmospherics/b1/hall) -"bz" = ( +"abz" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bA" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - icon_state = "map"; - dir = 8 - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +"abA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"abB" = ( +/obj/machinery/airlock_sensor{ + dir = 4; + pixel_x = 0; + id_tag = "OH_l2_n_alck_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/north) -"bC" = ( -/obj/structure/cable/blue{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +"abC" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + icon_state = ""; + dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"bD" = ( +/area/outreach/outpost/control/cooling) +"abD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"bE" = ( +"abE" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"bF" = ( +"abF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"abG" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/atmos) +"abH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"bG" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 4 }, -/obj/machinery/light_switch, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"bH" = ( +"abI" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "OH_l2_n_alck_pump" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"abJ" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"bI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"bJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/passage/b1/north/atmos) -"bK" = ( +"abK" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bL" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 9 - }, -/obj/machinery/light{ - icon_state = "tube_map"; +"abL" = ( +/obj/structure/closet/crate/internals, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 1 }, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"bM" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"abM" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bN" = ( +"abN" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +"abO" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"bP" = ( +"abP" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 @@ -761,23 +736,23 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bQ" = ( +"abQ" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; dir = 1 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"bR" = ( +"abR" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 @@ -785,132 +760,150 @@ /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, +"abS" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/firefighter, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"bT" = ( -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 8 +"abT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 10 }, -/turf/simulated/floor/tiled/techmaint, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"bU" = ( +"abU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 9 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"bV" = ( +"abV" = ( /obj/machinery/atmospherics/omni/filter{ - tag_east = 1; - tag_filter_gas_north = "gas_carbon_dioxide"; - tag_filter_gas_south = "gas_chlorine"; tag_north = 8; tag_south = 8; - tag_west = 2 + tag_east = 1; + tag_west = 2; + tag_filter_gas_north = "gas_carbon_dioxide"; + tag_filter_gas_south = "gas_chlorine" }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bW" = ( +"abW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"bX" = ( +"abX" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"bY" = ( -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 1 +"abY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"bZ" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/machinery/firealarm, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/b1) -"ca" = ( -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"cb" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/item/radio/intercom, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"cc" = ( +"abZ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"cd" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"ce" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/north) +"aca" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"acb" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/lockers) +"acc" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"cf" = ( +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"acd" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/command/hall) +"ace" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/xeno/storage) +"acf" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 5 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"ch" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 +"acg" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 6 }, -/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"ach" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/rack, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/beakers, +/obj/item/storage/box/beakers, +/obj/item/storage/box/beakers, +/obj/item/storage/box/beakers, +/obj/item/storage/box/botanydisk, +/obj/item/storage/box/botanydisk, +/obj/item/storage/box/botanydisk, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"ci" = ( +"aci" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 4 @@ -918,8 +911,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cj" = ( -/obj/structure/closet, +"acj" = ( /obj/item/scanner/reagent, /obj/item/scanner/reagent, /obj/item/scanner/reagent, @@ -927,197 +919,159 @@ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/rack, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"ck" = ( -/obj/machinery/door/airlock/hatch/maintenance{ +"ack" = ( +/obj/machinery/door/airlock/external/glass{ icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 + dir = 1; + id_tag = "OH_l2_n_alck_inner" }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"cl" = ( +/area/outreach/outpost/airlock/basement1/north) +"acl" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/waste/b1) -"cm" = ( +"acm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/door/firedoor/autoset, /obj/effect/wallframe_spawn/reinforced/steel, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"cn" = ( +"acn" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"co" = ( +"aco" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 9 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cp" = ( +"acp" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"acq" = ( +/obj/structure/cable/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc, /obj/machinery/light_switch{ icon_state = "light0"; dir = 8 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"cq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, +"acr" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/crematorium) +"acs" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/b1) -"cr" = ( -/obj/structure/hygiene/sink{ - icon_state = "sink"; - dir = 1 - }, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/paleblue{ +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"act" = ( +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/storage/lockbox/vials, +/obj/item/storage/lockbox/vials, +/obj/item/storage/lockbox/vials, +/obj/item/storage/lockbox/vials, +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"cs" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 5 - }, -/obj/machinery/power/apc/super{ - icon_state = "apc0"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"ct" = ( -/obj/structure/closet, -/obj/item/hand_labeler, -/obj/item/hand_labeler, -/obj/item/hand_labeler, -/obj/item/hand_labeler, +/obj/structure/rack, /obj/item/storage/lockbox/vials, /obj/item/storage/lockbox/vials, /obj/item/storage/lockbox/vials, /obj/item/storage/lockbox/vials, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 1 - }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"cu" = ( +"acu" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cv" = ( +"acv" = ( /obj/machinery/atmospherics/omni/filter{ - tag_east = 1; - tag_filter_gas_north = "gas_oxygen"; - tag_filter_gas_south = "gas_nitrogen"; tag_north = 8; tag_south = 8; - tag_west = 2 + tag_east = 1; + tag_west = 2; + tag_filter_gas_north = "gas_oxygen"; + tag_filter_gas_south = "gas_nitrogen" }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +"acw" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; dir = 1 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"cx" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/effect/wallframe_spawn/no_grille/prepainted/medical, -/turf/simulated/floor/plating, -/area/outreach/outpost/medbay/op_room) -"cy" = ( -/obj/structure/closet, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/botanydisk, -/obj/item/storage/box/botanydisk, +/obj/item/radio/intercom, +/obj/item/paper_bin, +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"acx" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"acy" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/table/steel_reinforced, +/obj/machinery/faxmachine/mapped/outreach/research, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ +"acz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/cap/visible{ + icon_state = "cap"; + dir = 1 + }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cA" = ( -/obj/structure/cable/yellow{ +"acA" = ( +/obj/structure/cable/blue{ icon_state = "2-8" }, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/manifold/hidden/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"cB" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +"acB" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/op_room2) +"acC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"cC" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cD" = ( +"acD" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 @@ -1125,14 +1079,16 @@ /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cE" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 5 +"acE" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ + icon_state = "down"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/effect/floor_decal/industrial/fire/full, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, /area/outreach/outpost/atmospherics/b1/hall) -"cF" = ( +"acF" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 @@ -1144,13 +1100,13 @@ icon_state = "11"; dir = 4 }, -/obj/machinery/door/airlock/hatch/maintenance{ +/obj/machinery/door/airlock/atmos/outreach{ icon_state = "closed"; - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/atmospherics/b1/hall) -"cG" = ( +"acG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -1163,26 +1119,28 @@ /obj/effect/wingrille_spawn/reinforced/full, /turf/simulated/floor/plating, /area/outreach/outpost/atmospherics/b1/hall) -"cH" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 8 +"acH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cI" = ( +"acI" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ icon_state = "11"; dir = 10 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cJ" = ( +"acJ" = ( /obj/machinery/atmospherics/pipe/simple/visible/red, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cK" = ( +"acK" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ icon_state = "tube_map"; @@ -1190,23 +1148,24 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cL" = ( -/obj/machinery/atmospherics/pipe/cap/visible{ - icon_state = "cap"; - dir = 1 +"acL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cM" = ( +"acM" = ( /obj/machinery/door/firedoor/autoset, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/outreach/outpost/engineering/b1/storage) -"cN" = ( +"acN" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cO" = ( +"acO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 6 @@ -1214,56 +1173,81 @@ /obj/structure/cable/blue{ icon_state = "2-4" }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +"acP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 6 + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"cQ" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 4 - }, +"acQ" = ( +/obj/effect/floor_decal/techfloor/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cR" = ( +"acR" = ( /obj/machinery/atmospherics/binary/pump, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cS" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +"acS" = ( +/obj/structure/sign/directions/medical{ + icon_state = "direction_med"; + dir = 4; + pixel_y = 32 + }, +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 4; + pixel_y = 24 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"cT" = ( +"acT" = ( /obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; + name = "omni gas mixer (airmix)"; + tag_north_con = 0.79; tag_east_con = 0.21; + tag_west_con = null; tag_north = 1; - tag_north_con = 0.79; tag_south = 2; - tag_west = 0; - tag_west_con = null + tag_east = 1; + tag_west = 0 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cU" = ( +"acU" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ icon_state = "11"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"cV" = ( +"acV" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 9 @@ -1272,62 +1256,89 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"cW" = ( +"acW" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/on{ + icon_state = "map_on"; + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cX" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ - icon_state = "down"; - dir = 4 +"acX" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + icon_state = "map"; + dir = 8 }, -/obj/effect/floor_decal/industrial/fire/full, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"cY" = ( -/obj/machinery/atmospherics/valve/open, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; +"acY" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/outreach/outpost/atmospherics/b1/hall) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"da" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"acZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/research/outreach/chemistry{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/storage) +"ada" = ( +/obj/machinery/atmospherics/binary/pump{ + icon_state = "map_off"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"db" = ( +"adb" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"dc" = ( -/obj/structure/hygiene/drain, +/area/outreach/outpost/medbay/lockers) +"adc" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/item/storage/firstaid/surgery, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"dd" = ( +/area/outreach/outpost/medbay/op_room2) +"add" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"de" = ( +"ade" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"df" = ( +"adf" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -1336,7 +1347,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement1) -"dg" = ( +"adg" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 1 @@ -1344,9 +1355,10 @@ /obj/structure/rack, /obj/item/storage/toolbox/mechanical, /obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dh" = ( +"adh" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 1 @@ -1360,236 +1372,250 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"di" = ( +"adi" = ( /obj/machinery/port_gen/pacman/super, -/obj/machinery/firealarm, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dj" = ( +"adj" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/engineering/b1/storage) -"dk" = ( -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/main_hall) -"dl" = ( +"adk" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 - }, -/obj/machinery/dummy_airlock_controller{ - dir = 4; - icon_state = "airlock_control_off"; - id_tag = "OH_l2_w_alck" + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"dm" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/door/airlock/glass/medical{ +/obj/machinery/door/airlock/glass/medical/outreach/head{ icon_state = "closed"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/office) +"adl" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"adm" = ( +/obj/structure/crematorium/outreach{ + icon_state = "crematorium_closed"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/op_room) -"dn" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/crematorium) +"adn" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"do" = ( +"ado" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/cafeteria) -"dp" = ( +"adp" = ( /obj/structure/ladder, /obj/structure/lattice, /obj/structure/sign/warning/fall{ pixel_y = 24 }, /obj/machinery/light/small{ - dir = 8; - icon_state = "bulb_map" + icon_state = "bulb_map"; + dir = 8 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/b1) -"dq" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/decal/cleanable/dirt, +"adq" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 6 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"dr" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, +"adr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ads" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; dir = 1 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"ds" = ( -/obj/machinery/computer/operating{ - icon_state = "computer"; +/obj/structure/hygiene/sink{ + icon_state = "sink"; dir = 1 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"adt" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/obj/machinery/button/crematorium/outreach, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/crematorium) +"adu" = ( +/obj/machinery/alarm, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"dt" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/medical{ - icon_state = "closed"; - dir = 2 + dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/main_hall) -"du" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"dv" = ( +/area/outreach/outpost/medbay/crematorium) +"adv" = ( /turf/simulated/wall/r_wall/prepainted/command, /area/outreach/outpost/control) -"dw" = ( +"adw" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dx" = ( +"adx" = ( /turf/simulated/wall, /area/outreach/outpost/cafeteria) -"dy" = ( +"ady" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/stairwell/basement1) -"dz" = ( +"adz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dA" = ( -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 4 +"adA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"dB" = ( +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"dC" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"adB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"adC" = ( /turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/servers) -"dD" = ( +/area/outreach/outpost/control/servers/access) +"adD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dE" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 4 +"adE" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 10 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"dF" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +"adF" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - icon_state = "11"; - dir = 6 +/area/outreach/outpost/medbay/morgue) +"adG" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 8 }, /obj/machinery/light{ icon_state = "tube_map"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"dH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"adH" = ( +/obj/machinery/power/terminal, +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, /obj/machinery/light/small{ icon_state = "bulb_map"; @@ -1597,184 +1623,107 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/passage/b1/north/atmos) -"dI" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/blue, -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/servers) -"dJ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 6 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" +"adI" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/obj/structure/cable/blue{ - icon_state = "1-4" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"adJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/structure/cable/blue{ - icon_state = "0-8" +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"dK" = ( -/turf/simulated/open, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"adK" = ( +/turf/open, /area/turbolift/outreach/b1) -"dL" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +"adL" = ( +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 9 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"dM" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/button/access/wired/exterior{ - dir = 8; - id_tag = "OH_l2_w_alck"; - pixel_x = 0 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, +"adM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"adN" = ( +/turf/simulated/floor/reinforced/outreach, /area/exoplanet/outreach/underground/d1) -"dN" = ( -/obj/machinery/door/airlock/glass/engineering{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +"adO" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"adP" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, /obj/structure/cable/blue{ - icon_state = "2-4" - }, -/obj/structure/cable/blue{ - icon_state = "1-4" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/storage) -"dO" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 0 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"dP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" + icon_state = "0-2" }, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, /turf/simulated/floor/plating, /area/outreach/outpost/control/cooling) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/cable/blue{ - icon_state = "2-8" - }, -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/radiation/corner{ - icon_state = "stripecorner"; - dir = 4 +"adQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + icon_state = "map"; + dir = 1 }, +/obj/machinery/meter, +/obj/machinery/camera/network/security, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"dR" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"adR" = ( /obj/machinery/recharge_station, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 5 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"dS" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +"adS" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; dir = 4 }, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 5 + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/morgue) -"dT" = ( -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"dU" = ( +"adT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"adU" = ( /obj/machinery/atmospherics/pipe/simple/visible/black, /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; @@ -1782,12 +1731,18 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"dV" = ( +"adV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"adW" = ( /obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; + name = "pressure regulator (waste overflow)"; icon_state = "map_on"; - regulate_mode = 1; - target_pressure = 15000 + dir = 4; + target_pressure = 15000; + regulate_mode = 1 }, /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; @@ -1795,57 +1750,46 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"dW" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/atmospherics/b1/hall) -"dX" = ( +"adX" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"dY" = ( +"adY" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"dZ" = ( +"adZ" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 10 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ea" = ( +"aea" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"eb" = ( +"aeb" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 6 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ec" = ( -/obj/machinery/body_scanconsole{ - icon_state = "body_scannerconsole"; - dir = 4 +"aec" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/spline/plain/paleblue, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"ed" = ( +/area/outreach/outpost/medbay/op_room2) +"aed" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 8 @@ -1854,19 +1798,23 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"ee" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"ef" = ( +"aee" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/research/outreach/chemistry, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/storage) +"aef" = ( /obj/effect/wallframe_spawn/no_grille/concrete, +/obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, /area/outreach/outpost/sleeproom) -"eg" = ( +"aeg" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 @@ -1874,25 +1822,22 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"eh" = ( -/obj/effect/floor_decal/spline/plain/yellow{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 +"aeh" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 6 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"ei" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"aei" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"ej" = ( +"aej" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -1900,13 +1845,13 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"ek" = ( +"aek" = ( /obj/structure/rack, /obj/item/storage/toolbox/repairs, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"el" = ( +"ael" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1921,13 +1866,13 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"em" = ( +"aem" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/port_gen/pacman/super, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"en" = ( +"aen" = ( /obj/machinery/firealarm{ icon_state = "casing"; dir = 8 @@ -1936,196 +1881,168 @@ icon_state = "map_vent_out"; dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"eo" = ( +"aeo" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ep" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - icon_state = "direction_med"; - pixel_y = 32 - }, -/obj/structure/sign/directions/engineering{ - dir = 4; - icon_state = "direction_eng"; - pixel_y = 24 +"aep" = ( +/obj/machinery/oxygen_pump, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"eq" = ( +"aeq" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_n_alck_inner" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/north) -"er" = ( +"aer" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, /obj/effect/decal/cleanable/dirt, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"es" = ( -/turf/simulated/wall, -/area/outreach/outpost/cafeteria/common) -"et" = ( -/obj/machinery/airlock_sensor{ - dir = 4; - id_tag = "OH_l2_n_alck_sensor"; - pixel_x = 0 - }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aes" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/restrooms) +"aet" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aeu" = ( +/obj/effect/floor_decal/industrial/hatch/red, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"eu" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"ev" = ( -/obj/machinery/fabricator/bioprinter, +/area/outreach/outpost/medbay/morgue) +"aev" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/morgue) +"aew" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 9 - }, -/obj/item/radio/intercom, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"ew" = ( -/obj/effect/floor_decal/industrial/fire/corner{ - icon_state = "stripecorner"; - dir = 8 + dir = 5 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"ex" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, +/area/outreach/outpost/medbay/crematorium) +"aex" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "2-4" }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aey" = ( +/obj/structure/cryofeed, +/obj/machinery/cryopod/despawner{ + icon_state = "body_scanner_0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"ey" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"aez" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/eva/b1/east) +"aeA" = ( /obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/double/glass/civilian, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/double/glass/civilian, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/sleeproom) -"ez" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hydroponics) -"eA" = ( -/obj/structure/cryofeed, -/obj/machinery/cryopod/despawner{ - icon_state = "body_scanner_0"; - dir = 4 - }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +"aeB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"eC" = ( -/obj/machinery/fabricator/robotics, +/area/outreach/outpost/medbay/crematorium) +"aeC" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 5 }, +/obj/structure/iv_drip, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/alarm, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"eD" = ( +/area/outreach/outpost/medbay/op_room2) +"aeD" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 1 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"eE" = ( +"aeE" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ icon_state = "map"; dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"eF" = ( -/obj/structure/cable/green{ - icon_state = "0-2" +"aeF" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/control/generators) +"aeG" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control) -"eG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 +/obj/machinery/door/blast/shutters/server_cooling{ + icon_state = "closed"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "0-8" +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 }, -/obj/machinery/design_database, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"eH" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/control/cooling) +"aeH" = ( /obj/machinery/atmospherics/unary/freezer{ - dir = 4; icon_state = "freezer_0"; + dir = 4; set_temperature = 298; use_power = 1 }, @@ -2138,77 +2055,60 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"eI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, -/obj/structure/sign/directions/security{ - dir = 8; - icon_state = "direction_sec"; - pixel_y = 24 - }, -/obj/structure/sign/directions/engineering{ - dir = 8; - icon_state = "direction_eng"; - pixel_y = 32 +"aeI" = ( +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"eJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/area/outreach/outpost/hallway/central/basement1) +"aeJ" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white/monotile, /area/outreach/outpost/sleeproom) -"eK" = ( +"aeK" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/obj/structure/closet, -/obj/item/storage/box/beakers, -/obj/item/storage/box/beakers, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/autoinjectors, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"eL" = ( +"aeL" = ( /obj/machinery/port_gen/pacman/super, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"eM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"eN" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 4 +"aeM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"eO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/entrance) +"aeN" = ( /obj/structure/cryofeed{ icon_state = "cryo_rear"; dir = 4 @@ -2216,20 +2116,37 @@ /obj/machinery/cryopod/despawner, /turf/simulated/floor/plating, /area/outreach/outpost/sleeproom) -"eP" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 9 +"aeO" = ( +/obj/structure/cryofeed, +/obj/machinery/cryopod/despawner{ + icon_state = "body_scanner_0"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"eQ" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"aeP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"aeQ" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"eR" = ( +/obj/machinery/door/airlock/glass/research/outreach/chemistry, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab) +"aeR" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/floor_decal/industrial/outline/orange, /obj/effect/floor_decal/spline/plain/yellow{ @@ -2239,90 +2156,105 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"eS" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"eT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +"aeS" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"eU" = ( -/obj/structure/morgue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 +"aeT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 10 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"eV" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"aeU" = ( +/obj/machinery/vitals_monitor, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 9 + dir = 8 }, -/obj/machinery/cloning_pod, /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 + dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"eW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, +/area/outreach/outpost/medbay/op_room2) +"aeV" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/crematorium) +"aeW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/morgue) -"eX" = ( +"aeX" = ( +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/sleeproom) +"aeY" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/effect/wallframe_spawn/no_grille/concrete, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria) -"eY" = ( -/obj/machinery/oxygen_pump, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/east/basement1) -"eZ" = ( -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 6 +"aeZ" = ( +/obj/machinery/alarm, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"fa" = ( +/area/outreach/outpost/lab) +"afa" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 9 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fb" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"afb" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"fc" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"afc" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 10 @@ -2330,413 +2262,415 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fd" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 9 +"afd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"fe" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + icon_state = "11"; + dir = 6 + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"afe" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"ff" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +"aff" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "gas pump (to cooling loop)"; + icon_state = "map_on"; + dir = 8 }, -/obj/machinery/firealarm, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"fg" = ( -/obj/machinery/radiocarbon_spectrometer, +/area/outreach/outpost/control/cooling) +"afg" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 5 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"fh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"fi" = ( +"afh" = ( +/turf/simulated/wall/r_wall/prepainted/atmos, +/area/outreach/outpost/stairwell/basement1/atmos) +"afi" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/reinforced, /area/outreach/outpost/atmospherics/b1/hall) -"fj" = ( -/obj/machinery/light, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"fk" = ( +"afj" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/reagentgrinder, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"afk" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fl" = ( +"afl" = ( +/obj/structure/closet/secure_closet/personal/empty, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 1 }, -/obj/machinery/bodyscanner, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"fm" = ( -/obj/structure/rack, -/obj/item/radio/intercom, -/obj/item/hatchet, -/obj/item/hatchet, -/obj/item/minihoe, -/obj/item/minihoe, -/obj/item/minihoe, -/obj/item/minihoe, -/obj/item/scanner/plant, -/obj/item/scanner/plant, -/obj/item/scanner/plant, -/obj/item/scanner/plant, -/obj/item/shovel/spade, -/obj/item/shovel/spade, -/obj/item/shovel/spade, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/wirecutters/clippers, -/obj/item/wirecutters/clippers, -/obj/item/wirecutters/clippers, -/obj/item/wirecutters/clippers, -/obj/item/wirecutters/clippers, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/area/outreach/outpost/medbay/lockers) +"afm" = ( +/obj/machinery/suit_cycler/generic/prepared, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"afn" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fo" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +"afo" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 4 }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fp" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/sign/poster/bay_30{ - pixel_y = 28 +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"afp" = ( +/obj/structure/cryofeed, +/obj/machinery/cryopod/despawner{ + icon_state = "body_scanner_0"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +/obj/abstract/landmark/latejoin/observer, +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"afq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fq" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/north) +"afr" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fs" = ( +"afs" = ( /obj/structure/rack, /obj/item/cable_painter, /obj/effect/decal/cleanable/dirt, +/obj/item/inducer, +/obj/item/inducer, +/obj/item/inducer, +/obj/item/inducer, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"ft" = ( +"aft" = ( /obj/machinery/space_heater, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fu" = ( +"afu" = ( /obj/machinery/dehumidifier, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fv" = ( +"afv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fw" = ( +"afw" = ( /obj/structure/rack, /obj/item/hand_labeler, /obj/item/hand_labeler, /obj/item/hand_labeler, /obj/effect/decal/cleanable/dirt, +/obj/item/inducer, +/obj/item/inducer, +/obj/item/inducer, +/obj/item/inducer, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +"afx" = ( +/obj/structure/closet/jcloset, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"afy" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/civilian{ +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ icon_state = "closed"; dir = 1 }, -/obj/machinery/door/firedoor/autoset, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/janitorial) -"fy" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fz" = ( +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"afz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fA" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"fB" = ( -/obj/machinery/vending/hydronutrients/generic, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"fC" = ( -/turf/simulated/wall, -/area/outreach/outpost/hydroponics) -"fD" = ( -/obj/item/storage/box/parts_pack/keyboard, -/obj/item/storage/box/parts_pack/keyboard, -/obj/effect/floor_decal/spline/plain/yellow{ +"afA" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 4 + dir = 5 }, -/obj/structure/closet, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"fE" = ( -/obj/structure/cryofeed, -/obj/machinery/cryopod/despawner{ - icon_state = "body_scanner_0"; - dir = 4 - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"fF" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - icon_state = "direction_med"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"fG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 10 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"afB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"fH" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/storage) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - icon_state = "11"; - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"fJ" = ( -/obj/machinery/vending/medical, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"fK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 10 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 +/obj/machinery/dummy_airlock_controller{ + icon_state = "airlock_control_off"; + dir = 8; + id_tag = "OH_l2_e_alck" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"fL" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"fM" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/janitorial) -"fN" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"afC" = ( +/turf/simulated/wall, +/area/outreach/outpost/eva/b1/east) +"afD" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"fO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"afE" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 5 }, /turf/simulated/floor/tiled/white/monotile, /area/outreach/outpost/sleeproom) -"fP" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/spline/plain/yellow{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +"afF" = ( +/obj/machinery/firealarm, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"fQ" = ( +/area/outreach/outpost/hallway/east/basement1) +"afG" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, +/obj/structure/table/steel, +/obj/structure/closet/medical_wall/filled, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/storage) -"fR" = ( +/area/outreach/outpost/lab/xeno) +"afH" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/lab/xeno/storage) +"afI" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"afJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/crematorium) +"afK" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"afL" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"afM" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/janitorial) +"afN" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"fS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"afO" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white/monotile, /area/outreach/outpost/sleeproom) -"fT" = ( -/obj/item/storage/box/parts_pack/manipulator, -/obj/item/storage/box/parts_pack/manipulator, +"afP" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/floor_decal/industrial/outline/orange, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; - dir = 4 + dir = 8 }, -/obj/structure/closet, /obj/machinery/light{ icon_state = "tube_map"; - dir = 4 + dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"fU" = ( +"afQ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"afR" = ( +/obj/machinery/firealarm, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"afS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"afT" = ( +/obj/structure/wall_frame/hull, +/turf/exterior/barren/subterrane/outreach, +/area/exoplanet/outreach/underground/d1) +"afU" = ( +/obj/machinery/atmospherics/valve/shutoff, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/waste/b1) -"fV" = ( +/obj/effect/floor_decal/industrial/shutoff, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"afV" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 5 @@ -2744,13 +2678,13 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fW" = ( +"afW" = ( /obj/machinery/light, /obj/structure/table, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fX" = ( +"afX" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ icon_state = "11"; dir = 9 @@ -2761,17 +2695,13 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"fY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/science{ - icon_state = "closed"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/lab/storage) -"fZ" = ( +"afY" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"afZ" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, @@ -2779,64 +2709,55 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ga" = ( -/obj/structure/closet/jcloset, -/obj/effect/floor_decal/spline/plain/pink{ +"aga" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 9 + dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/glass/medical{ - icon_state = "closed"; - dir = 4 - }, +"agb" = ( +/obj/machinery/door/airlock/medical/outreach/morgue, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/autoset, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/morgue) -"gc" = ( -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/op_room) -"gd" = ( +/area/outreach/outpost/medbay/triage) +"agc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"agd" = ( /obj/structure/janitorialcart, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, /obj/item/mop, -/obj/effect/floor_decal/spline/plain/pink{ +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"ge" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 6 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" +"age" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/structure/cable/blue{ - icon_state = "0-8" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/machinery/network/modem/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"gf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"agf" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/floor_decal/industrial/outline/orange, /obj/effect/floor_decal/spline/plain/yellow{ @@ -2846,97 +2767,81 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gg" = ( -/obj/item/storage/box/parts_pack/capacitor, -/obj/item/storage/box/parts_pack/capacitor, +"agg" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 4 }, -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gh" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +"agh" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/machinery/light/small, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"gi" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"gj" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +"agi" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/double/glass/medical/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/lobby) +"agj" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + name = "disposal outlet (deliveries)"; + icon_state = "outlet"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/floor_decal/industrial/warning/cee, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"agk" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 }, +/obj/machinery/artifact_scanpad, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"agl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"gk" = ( +/area/outreach/outpost/medbay/op_room2) +"agm" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/double/glass/medical/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/triage) +"agn" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/atmospherics/b1/storage) +"ago" = ( +/obj/machinery/atmospherics/tvalve/mirrored{ + name = "manual switching valve (exterior vent)" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"gl" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/camera/network/security, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"gm" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"gn" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/atmospherics/b1/storage) -"go" = ( -/obj/machinery/atmospherics/tvalve/mirrored, /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 @@ -2948,45 +2853,38 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"gp" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"gq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"gr" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +"agp" = ( +/obj/machinery/atmospherics/binary/pump/on{ + icon_state = "map_on"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"agq" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"gs" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"agr" = ( +/obj/machinery/smartfridge/secure/medbay, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"ags" = ( /obj/structure/cable/yellow{ icon_state = "16-0" }, @@ -2998,7 +2896,7 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b1) -"gt" = ( +"agt" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, @@ -3008,137 +2906,132 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"gu" = ( +"agu" = ( /obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; icon_state = "off"; + dir = 1; id_tag = "ob_atmos_airmix_inj"; injecting = 0; use_power = 1 }, /turf/simulated/floor/reinforced/airmix, /area/outreach/outpost/atmospherics/b1/hall) -"gv" = ( +"agv" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"gw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, +"agw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"gx" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"agx" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, /obj/effect/catwalk_plated, -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"gy" = ( +/area/outreach/outpost/maint/passage/b1/northwest/research) +"agy" = ( /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"gz" = ( +"agz" = ( /obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{ - dir = 1; icon_state = "map_vent"; + dir = 1; id_tag = "ob_atmos_airmix_vnt" }, /turf/simulated/floor/reinforced/airmix, /area/outreach/outpost/atmospherics/b1/hall) -"gA" = ( +"agA" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"gB" = ( +/area/outreach/outpost/maint/passage/b1/northwest/research) +"agB" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gC" = ( +"agC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/obj/machinery/door/airlock/glass/atmos{ - icon_state = "closed"; - dir = 1 - }, +/obj/machinery/door/airlock/glass/atmos/outreach, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/atmospherics/b1/hall) -"gD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"gE" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"gF" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"agD" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/lab/research/workshop) +"agE" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/research/workshop) +"agF" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gG" = ( +"agG" = ( +/obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white/monotile, /area/outreach/outpost/sleeproom) -"gH" = ( -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"gI" = ( +"agH" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"agI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/radio/intercom, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"gJ" = ( +"agJ" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/cablelayer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gK" = ( -/obj/item/storage/box/parts_pack/laser, -/obj/item/storage/box/parts_pack/laser, +"agK" = ( +/obj/item/storage/box/parts_pack/keyboard, +/obj/item/storage/box/parts_pack/keyboard, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 4 @@ -3147,104 +3040,133 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gL" = ( +"agL" = ( /obj/machinery/pipelayer, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gM" = ( +"agM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gN" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/cafeteria/kitchen) -"gO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +"agN" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"agO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gP" = ( +"agP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 10 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"gQ" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"agQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gR" = ( +"agR" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gS" = ( +"agS" = ( /obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/highsecurity, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/highsecurity/outreach/telecom, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/control/hall) -"gT" = ( +"agT" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/fabricator/pipe, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gU" = ( +"agU" = ( /obj/effect/floor_decal/spline/plain/yellow, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gV" = ( -/obj/structure/closet/crate/radiation_gear, +"agV" = ( +/obj/item/storage/box/parts_pack/capacitor, +/obj/item/storage/box/parts_pack/capacitor, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 4 }, +/obj/structure/closet, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"gW" = ( -/obj/structure/cable/blue{ - icon_state = "2-8" - }, -/obj/machinery/alarm/nobreach{ - target_temperature = 273 - }, +"agW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "0-8" + icon_state = "0-4" }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"gX" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/access) +"agX" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"gY" = ( +"agY" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"gZ" = ( +"agZ" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/outreach/outpost/security/b1/office) -"ha" = ( +"aha" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/crematorium) +"ahb" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; @@ -3252,44 +3174,55 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"hb" = ( -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +"ahc" = ( +/obj/structure/cryofeed{ + icon_state = "cryo_rear"; + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"hc" = ( -/turf/simulated/wall, -/area/outreach/outpost/cafeteria/kitchen) -"hd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"he" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; +/obj/machinery/cryopod/despawner, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"ahd" = ( +/obj/machinery/camera/network/security, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ahe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"hf" = ( +"ahf" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "0-2" + }, +/obj/machinery/button/access/wired/exterior{ + dir = 8; + pixel_x = 0; + id_tag = "OH_l2_w_alck" }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; - dir = 4 + dir = 10 + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/machinery/light/small/wired, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"hg" = ( +"ahg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/door/firedoor/autoset, /obj/effect/wallframe_spawn/reinforced/prepainted/atmos, @@ -3298,73 +3231,68 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/atmospherics/b1/storage) -"hh" = ( +"ahh" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"hi" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 + dir = 5 }, -/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"hj" = ( +/area/outreach/outpost/hallway/north/basement1) +"ahi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"ahj" = ( /turf/simulated/wall, /area/outreach/outpost/sleeproom) -"hk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +"ahk" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"hl" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"ahl" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/structure/closet/l3closet/janitor/multi, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"ahm" = ( +/obj/structure/cryofeed, +/obj/machinery/cryopod/despawner{ + icon_state = "body_scanner_0"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"hm" = ( -/turf/simulated/wall, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"hn" = ( +/area/outreach/outpost/sleeproom) +"ahn" = ( /obj/machinery/air_sensor{ - id_tag = "ob_atmos_airmix_sns"; - name = "gas sensor airmix tank" + name = "gas sensor airmix tank"; + id_tag = "ob_atmos_airmix_sns" }, /turf/simulated/floor/reinforced/airmix, /area/outreach/outpost/atmospherics/b1/hall) -"ho" = ( +"aho" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -3372,23 +3300,31 @@ icon_state = "11-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"ahp" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"hp" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"hq" = ( +/area/outreach/outpost/medbay/morgue) +"ahq" = ( /turf/simulated/floor/reinforced/airmix, /area/outreach/outpost/atmospherics/b1/hall) -"hr" = ( +"ahr" = ( /obj/machinery/firealarm, /obj/effect/floor_decal/industrial/warning/corner{ icon_state = "stripecorner"; @@ -3400,14 +3336,10 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"hs" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, +"ahs" = ( /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"ht" = ( +/area/outreach/outpost/medbay/lockers) +"aht" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/structure/cable/blue{ icon_state = "1-8" @@ -3421,17 +3353,42 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"hu" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +"ahu" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"hv" = ( +"ahv" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/hallway/central/basement1) -"hw" = ( +"ahw" = ( +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/machinery/alarm, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"ahx" = ( +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ahy" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed"; dir = 8 @@ -3440,46 +3397,38 @@ icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/basement1) -"hx" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/west/basement1) -"hy" = ( -/obj/structure/sign/directions/engineering{ - dir = 8; - icon_state = "direction_eng"; - pixel_y = 24 +"ahz" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/structure/sign/directions/medical{ - dir = 4; - icon_state = "direction_med"; - pixel_y = 32 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"hz" = ( -/obj/structure/sign/directions/engineering{ - dir = 8; - icon_state = "direction_eng"; - pixel_y = 32 +"ahA" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"hA" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/smartfridge/foods, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_kitchen_shutters" +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/kitchen) -"hB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"ahB" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, @@ -3490,13 +3439,19 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"hC" = ( +"ahC" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/anomaly_container, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"hD" = ( +/area/outreach/outpost/lab/xeno/experiment) +"ahD" = ( /obj/structure/sign/directions/engineering{ - dir = 8; icon_state = "direction_eng"; + dir = 8; pixel_y = 32 }, /obj/structure/sign/directions/security{ @@ -3510,84 +3465,85 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement1) -"hE" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - icon_state = "direction_med"; - pixel_y = 24 +"ahE" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/structure/sign/directions/security{ - dir = 4; - icon_state = "direction_sec"; - pixel_y = 32 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/west/basement1) -"hF" = ( -/obj/structure/sign/deck/second{ - pixel_y = 32 +"ahF" = ( +/obj/machinery/computer/operating{ + icon_state = "computer"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"ahG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"hG" = ( /obj/structure/cable/blue{ icon_state = "0-2" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/power/apc/hyper{ - icon_state = "apc0"; - dir = 1 +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 5 +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"hH" = ( -/obj/structure/sign/department/chemistry{ - dir = 4; - icon_state = "chemistry"; - pixel_x = -32 +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/access) +"ahH" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"hI" = ( -/turf/simulated/wall, -/area/outreach/outpost/janitorial/hall) -"hJ" = ( +"ahI" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/office/third) +"ahJ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/reinforced/concrete, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/basement1) -"hK" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ahK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"ahL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; dir = 8 }, -/obj/structure/disposalpipe/cap, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"hL" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/smartfridge/drinks, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_kitchen_shutters" +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/kitchen) -"hM" = ( +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"ahM" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -3598,62 +3554,50 @@ }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"hN" = ( -/obj/machinery/atmospherics/valve/shutoff, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff, +"ahN" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"hO" = ( +"ahO" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"hP" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/double/glass/civilian, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria) -"hQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +"ahP" = ( +/obj/structure/cryofeed{ + icon_state = "cryo_rear"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/cryopod/despawner, +/obj/structure/cable/yellow{ + icon_state = "0-8" }, +/obj/machinery/power/apc/high, +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"ahQ" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"hR" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on/distribution, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"hS" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +"ahR" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on/distribution{ + name = "high power gas pump (distro)" }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"ahS" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"hT" = ( +/turf/simulated/floor/tiled/white/monotile, +/area/outreach/outpost/sleeproom) +"ahT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -3676,56 +3620,59 @@ /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/outreach/outpost/atmospherics/b1/storage) -"hU" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_kitchen_shutters" +"ahU" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + name = "high power gas pump (waste)"; + icon_state = "map_on"; + dir = 1; + target_pressure = 15000 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/kitchen) -"hV" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"ahV" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"hW" = ( +"ahW" = ( /turf/simulated/wall, /area/outreach/outpost/maint/passage/b1/north) -"hX" = ( +"ahX" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"hY" = ( +"ahY" = ( /obj/machinery/oxygen_pump{ icon_state = "emerg"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"hZ" = ( +"ahZ" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 8 +"aia" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"ib" = ( -/obj/machinery/media/jukebox/old, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +"aib" = ( +/obj/machinery/atmospherics/binary/pump{ + name = "gas pump (scrubber flush)"; + icon_state = "map_off"; + dir = 8 }, -/obj/structure/sign/poster/bay_4, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"ic" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/storage) +"aic" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ icon_state = "11"; dir = 9 @@ -3733,20 +3680,19 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"id" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +"aid" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/machinery/computer/modular/preset/outreach, /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"ie" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"aie" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -3755,7 +3701,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"if" = ( +"aif" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/structure/cable/blue{ icon_state = "1-2" @@ -3771,7 +3717,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ig" = ( +"aig" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; @@ -3780,10 +3726,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ih" = ( +"aih" = ( /obj/machinery/atmospherics/unary/heater{ - dir = 4; icon_state = "heater_0"; + dir = 4; set_temperature = 291; use_power = 1 }, @@ -3799,70 +3745,84 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ii" = ( +"aii" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 9 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ij" = ( +"aij" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ icon_state = "map"; dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"ik" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +"aik" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"il" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"ail" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ icon_state = "map"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"im" = ( +"aim" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"in" = ( +"ain" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/machinery/door/airlock/glass/atmos{ +/obj/machinery/door/airlock/glass/atmos/outreach{ icon_state = "closed"; - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/atmospherics/b1/storage) -"io" = ( +"aio" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ icon_state = "11"; dir = 5 }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"ip" = ( +"aip" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/green, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"iq" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/control/cooling) -"ir" = ( -/turf/simulated/wall, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"is" = ( +"aiq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"air" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"ais" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"it" = ( +"ait" = ( /obj/effect/floor_decal/industrial/outline/orange, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; @@ -3871,131 +3831,161 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"iu" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +"aiu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"iv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"iw" = ( +/area/outreach/outpost/medbay/morgue) +"aiv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"aiw" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/green, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"ix" = ( +"aix" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ icon_state = "11"; dir = 9 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"iy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"iz" = ( +"aiy" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 4 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"iA" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 8 +/area/outreach/outpost/medbay/lockers) +"aiz" = ( +/obj/machinery/optable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/suit/surgicalapron, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"iB" = ( -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/triage) -"iC" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 8 +/area/outreach/outpost/medbay/op_room2) +"aiA" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"iD" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"aiB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/main_hall) -"iE" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"iF" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"aiC" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/spline/plain/orange, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"iG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"aiD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"aiE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage) -"iH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/area/outreach/outpost/atmospherics/b1/hall) +"aiF" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/spline/plain/orange, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"iI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/atmospherics/b1/hall) +"aiG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; dir = 4 }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/storage) +"aiH" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + icon_state = "map"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"aiI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"iJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"aiJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/structure/cable/blue{ icon_state = "1-2" @@ -4011,108 +4001,124 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"iK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +"aiK" = ( +/obj/structure/cable/blue{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/outreach, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"iL" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"aiL" = ( /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"iM" = ( +"aiM" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"iN" = ( +"aiN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 6 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"iO" = ( -/obj/structure/bed/chair{ - icon_state = "chair"; - dir = 4 +"aiO" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/hallway) +"aiP" = ( +/obj/machinery/atmospherics/valve{ + name = "manual valve (tank pump output)" }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"iP" = ( -/obj/structure/bed/chair{ - icon_state = "chair"; - dir = 8 +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"iQ" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/atmospherics/b1/hall) +"aiQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4; - icon_state = "map_universal" + icon_state = "map_universal"; + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"iR" = ( -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 1 +"aiR" = ( +/obj/machinery/atmospherics/valve/open{ + name = "manual valve (tank pump output)" }, -/obj/machinery/partyalarm, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"iS" = ( -/obj/machinery/door/firedoor/autoset, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria) -"iT" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 5 +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"iU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/turf/simulated/floor/reinforced, +/area/outreach/outpost/atmospherics/b1/hall) +"aiS" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; dir = 6 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"iV" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"aiT" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aiU" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/lockers) +"aiV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"iW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm, +"aiW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; - dir = 1 + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"iX" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"aiX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"iY" = ( +"aiY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 10 @@ -4122,16 +4128,19 @@ dir = 6 }, /obj/structure/hygiene/drain, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"iZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +"aiZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"ja" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aja" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -4143,85 +4152,52 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"jb" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/science{ - icon_state = "closed"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"ajb" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/lab) -"jc" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"ajc" = ( +/obj/machinery/power/smes/buildable/preset/outreach, +/obj/structure/cable/blue{ + icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/structure/sign/warning/high_voltage, +/obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/control) -"jd" = ( +"ajd" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed" }, /obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/north/basement1) -"je" = ( -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"jf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 5 - }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"jg" = ( +"aje" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, /obj/effect/floor_decal/spline/plain/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"ji" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"ajf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -4232,15 +4208,20 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 4 }, -/obj/effect/floor_decal/spline/plain/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"jj" = ( /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "1-4" }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"ajg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/decal/cleanable/dirt, /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 @@ -4249,9 +4230,34 @@ icon_state = "spline_plain"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"ajh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aji" = ( +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"ajj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + icon_state = "map"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/atmospherics/b1/hall) -"jk" = ( +"ajk" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 8 @@ -4262,21 +4268,23 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"jl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 +"ajl" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"jm" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"ajm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -4286,99 +4294,92 @@ dir = 4 }, /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"jn" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"jo" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/machinery/door/airlock/glass/atmos/outreach{ + icon_state = "closed"; + dir = 8 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"jp" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/basement1/atmos) +"ajn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"ajo" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"ajp" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"jq" = ( +"ajq" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/portables_connector{ icon_state = "map_connector"; - dir = 4 - }, -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 + dir = 1 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 8 - }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"jr" = ( +"ajr" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"js" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +"ajs" = ( +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"jt" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"ju" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +"ajt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"aju" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"jv" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"ajv" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 9 }, -/obj/machinery/disposal, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 - }, -/obj/structure/disposalpipe/trunk, /obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pottedplant/large, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"jw" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/airlock/basement1/south) -"jx" = ( +/area/outreach/outpost/security/b1/hallway) +"ajw" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/forensics) +"ajx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -4396,48 +4397,48 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"jy" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" +"ajy" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"jz" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; +"ajz" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"jA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/chlorine, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 6 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"ajA" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/effect/catwalk_plated, +/obj/machinery/light/small, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"jB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/maint/passage/b1/northwest/research) +"ajB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 8 - }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/entrance) -"jC" = ( +/area/outreach/outpost/hallway/north/basement1) +"ajC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -4450,108 +4451,114 @@ /obj/structure/cable/blue{ icon_state = "4-8" }, +/obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"jD" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +"ajD" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"ajE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/item/radio/intercom, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"jE" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"jF" = ( +"ajF" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_s_alck_inner" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/south) -"jG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"ajG" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/passage/b1/north) -"jH" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_s_alck_inner" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/south) -"jI" = ( +"ajH" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/south/basement1) +"ajI" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 1 }, -/obj/machinery/recharger/wallcharger, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"jJ" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - icon_state = "map_off"; - dir = 4 +/area/outreach/outpost/security/b1/hallway) +"ajJ" = ( +/obj/structure/cable/yellow, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"jK" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/machinery/computer/modular/preset/cloning, -/obj/machinery/alarm, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"jL" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"ajK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, +/obj/structure/hygiene/drain, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"ajL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 10 + dir = 9 }, +/obj/structure/mopbucket, +/obj/item/mop, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"ajM" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/main_hall) -"jM" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ +"ajN" = ( +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 9 + dir = 6 }, -/obj/structure/closet, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"jN" = ( -/obj/machinery/firealarm, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"jO" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"ajO" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 4 @@ -4562,40 +4569,39 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"jP" = ( -/obj/structure/table/steel_reinforced, +"ajP" = ( /obj/machinery/door/firedoor/autoset, -/obj/item/bell, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_kitchen_shutters" - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/kitchen) -"jQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/spline/plain/red{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement1) +"ajQ" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 1 + dir = 9 }, -/obj/machinery/recharger/wallcharger, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"jR" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; +/area/outreach/outpost/command/office/third) +"ajR" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 1 }, -/obj/structure/table/steel, -/obj/item/paper_bin, -/obj/structure/reagent_dispensers/peppertank, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"jS" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"ajS" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/hallway/west/basement1) -"jT" = ( +"ajT" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 @@ -4606,38 +4612,26 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"jU" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, +"ajU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"jV" = ( -/obj/machinery/power/apc/hyper{ - icon_state = "apc0"; - dir = 1 - }, -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/radiation{ - icon_state = "stripe"; - dir = 4 +"ajV" = ( +/obj/machinery/port_gen/pacman/super{ + anchored = 1 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 9 +/obj/structure/cable/green{ + icon_state = "0-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"jW" = ( +/obj/effect/floor_decal/industrial/outline/red, +/obj/machinery/camera/network/security, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/generators) +"ajW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/structure/cable/blue{ icon_state = "1-2" @@ -4652,78 +4646,70 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"jX" = ( -/obj/structure/cable/blue{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +"ajX" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ajY" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 5 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"jY" = ( -/obj/machinery/atmospherics/binary/pump{ - icon_state = "map_off"; - dir = 8 +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage) -"jZ" = ( -/obj/structure/table/steel, -/obj/machinery/fabricator/micro, -/obj/machinery/light_switch, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 9 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"ka" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"kb" = ( -/obj/machinery/door/firedoor/autoset{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"ajZ" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/obj/machinery/door/firedoor{ icon_state = "open"; dir = 8 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/breakroom) +"aka" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 + icon_state = "0-2" }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 8 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria) -"kc" = ( -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"akb" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/hallway/to_brig) +"akc" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8; + pixel_x = 32 }, +/obj/machinery/atmospherics/valve/shutoff, +/obj/effect/floor_decal/industrial/shutoff, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"kd" = ( +"akd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -4749,7 +4735,7 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"ke" = ( +"ake" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -4762,13 +4748,13 @@ }, /obj/machinery/button/access/wired/exterior{ dir = 1; - id_tag = "OH_l2_n_alck"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_n_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"kf" = ( +"akf" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ icon_state = "pipe-t"; @@ -4778,67 +4764,68 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"kg" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +"akg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/machinery/meter, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"kh" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_n_alck_outer" +/area/outreach/outpost/maint/passage/b1/north/airlock) +"akh" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/north) -"ki" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/common) -"kj" = ( +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aki" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"akj" = ( /obj/structure/table, /obj/effect/floor_decal/spline/plain/orange, /obj/effect/decal/cleanable/dirt, /obj/item/twohanded/pipewrench, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"kk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"kl" = ( -/obj/machinery/power/apc/hyper{ - icon_state = "apc0"; - dir = 8 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 +"akk" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/research/room) +"akl" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"km" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"akm" = ( /obj/machinery/atmospherics/binary/oxyregenerator{ icon_state = "off"; dir = 8 @@ -4850,26 +4837,41 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"kn" = ( +"akn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"ko" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"ako" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"kp" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/red, -/obj/effect/decal/cleanable/dirt, +"akp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"kq" = ( -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"kr" = ( +/area/outreach/outpost/stairwell/basement1/atmos) +"akq" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"akr" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -4883,22 +4885,22 @@ icon_state = "spline_plain"; dir = 5 }, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/entrance) -"ks" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +"aks" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, -/obj/machinery/turretid/stun, +/obj/machinery/firealarm, /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 9 + dir = 5 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"kt" = ( +"akt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 6 @@ -4907,54 +4909,54 @@ icon_state = "light0"; dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/north/basement1) -"ku" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" +"aku" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"kv" = ( -/obj/structure/closet/secure_closet/paramedic, -/obj/effect/floor_decal/spline/plain/paleblue{ +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"kw" = ( -/obj/machinery/button/blast_door{ - id_tag = "ob_kitchen_shutters" - }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"kx" = ( -/obj/machinery/bodyscanner{ - icon_state = "body_scanner_0"; - dir = 8 - }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"akv" = ( +/obj/structure/mopbucket, +/obj/item/mop, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 6 }, -/obj/machinery/light, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lockers) +"akw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"akx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/hygiene/drain, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/op_room) -"ky" = ( +/area/outreach/outpost/medbay/morgue) +"aky" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -4966,79 +4968,66 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"kz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, +"akz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 10 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8; + pixel_x = 32 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"kA" = ( -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"kB" = ( -/obj/machinery/alarm, -/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"kC" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, +/area/outreach/outpost/hallway/north/basement1) +"akA" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/door/airlock/glass/command{ - dir = 4; - icon_state = "closed" +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/command_hall) -"kD" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"akB" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"akC" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"akD" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/medical, /turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"kE" = ( +/area/outreach/outpost/medbay/lobby/counter) +"akE" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, @@ -5052,142 +5041,146 @@ }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"kF" = ( -/obj/effect/floor_decal/industrial/fire{ - icon_state = "stripe"; - dir = 8 +"akF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"akG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/obj/effect/floor_decal/industrial/hatch/red, -/obj/effect/floor_decal/spline/plain/paleblue, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/morgue) -"kG" = ( +"akH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/effect/wallframe_spawn/no_grille/prepainted/medical, -/turf/simulated/floor/plating, -/area/outreach/outpost/medbay/triage) -"kH" = ( +/obj/machinery/door/airlock/glass/medical/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/op_room2) +"akI" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"akJ" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 5 + dir = 4 }, /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kI" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/medical{ - icon_state = "closed"; - dir = 2 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/storage/medical) -"kJ" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kK" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"kL" = ( +/area/outreach/outpost/medbay/morgue) +"akK" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/lobby/counter) +"akL" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"kM" = ( +"akM" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ - dir = 8; + name = "Air Vent (airlock)"; icon_state = "map_vent"; + dir = 4; id_tag = "OH_l2_w_alck_pump_out_external" }, /obj/effect/floor_decal/industrial/hatch/orange, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"kN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kO" = ( +"akN" = ( +/obj/structure/filing_cabinet/chestdrawer, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 1 + dir = 10 }, -/obj/item/radio/intercom, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kP" = ( -/obj/machinery/sleeper/standard, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +/area/outreach/outpost/medbay/morgue) +"akO" = ( +/obj/machinery/bodyscanner{ + icon_state = "body_scanner_0"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kQ" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 8 + dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"kR" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +/area/outreach/outpost/medbay/op_room2) +"akP" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 10 +/obj/structure/sign/poster/bay_19{ + pixel_y = 28 }, /turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"akQ" = ( +/obj/structure/rack/dark, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"akR" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"kS" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +"akS" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"akT" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"kT" = ( -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"kU" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/medical, +/turf/simulated/floor/plating, +/area/outreach/outpost/medbay/lockers) +"akU" = ( /obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ dir = 4; id_tag = "OH_l2_e_alck_pump_out_external" @@ -5195,7 +5188,7 @@ /obj/effect/floor_decal/industrial/hatch/orange, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"kV" = ( +"akV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -5208,100 +5201,92 @@ }, /obj/machinery/airlock_sensor/wired{ dir = 1; - id_tag = "OH_l2_n_alck_exterior_sensor"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_n_alck_exterior_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"kW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +"akW" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"akX" = ( +/obj/structure/closet/jcloset, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"akY" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 10 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"kX" = ( -/obj/structure/janitorialcart, +/obj/effect/catwalk_plated, /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 1 }, -/obj/item/mop, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"akZ" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/basement1) +"ala" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 1 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"kY" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/machinery/light, +/obj/structure/table/steel, +/obj/machinery/button/alternate/door/sec_checkpoint{ + icon_state = "doorctrl"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"kZ" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/basement1) -"la" = ( -/obj/machinery/airlock_sensor{ - dir = 8; - id_tag = "OH_l2_s_alck_sensor"; - pixel_x = 0 +/obj/item/paper_bin, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"alb" = ( +/obj/structure/cable/blue{ + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"lb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; - dir = 4 +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 1 }, /obj/structure/cable/blue{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"lc" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 5 - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/machinery/alarm, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"ld" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"alc" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-4" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"le" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"ald" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/breakroom) +"ale" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 @@ -5310,74 +5295,62 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"lf" = ( -/obj/structure/flora/pottedplant/fern, -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 9 - }, +"alf" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"lg" = ( -/obj/machinery/port_gen/pacman/super{ - anchored = 1 - }, -/obj/structure/cable/green{ - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control) -"lh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"li" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_conference) -"lj" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - icon_state = "map_on"; - name = "gas pump (from cooling loop)" - }, -/obj/structure/cable/blue{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"alg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + icon_state = "map"; + dir = 1 }, /obj/structure/cable/blue{ - icon_state = "2-8" + icon_state = "4-8" }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"alh" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/item/book/manual/chemistry_recipes, +/obj/item/storage/box/beakers, +/obj/item/scanner/reagent, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ali" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 8 + dir = 1 + }, +/obj/machinery/alarm, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"alj" = ( +/obj/structure/cable/yellow, +/obj/machinery/button/access/wired/exterior{ + dir = 8; + pixel_x = 0; + id_tag = "OH_l2_w_alck" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"lk" = ( +/obj/machinery/light/small/wired, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d1) +"alk" = ( /obj/structure/cable/yellow{ icon_state = "0-4" }, @@ -5388,64 +5361,90 @@ /obj/machinery/light/small/wired, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"ll" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"lm" = ( +"all" = ( +/obj/machinery/button/blast_door{ + icon_state = "blastctrl"; + dir = 1; + id_tag = "OH_brig_desk_shutters" + }, +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/table/steel, +/obj/item/stamp/denied, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"alm" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 }, /obj/structure/closet/firecloset, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/east/junct) -"ln" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +"aln" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/rack/dark, +/obj/item/storage/box/evidence, +/obj/item/storage/box/evidence, +/obj/item/storage/box/evidence, +/obj/item/storage/box/evidence, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/swabs, +/obj/item/storage/box/swabs, +/obj/item/storage/box/swabs, +/obj/item/storage/box/swabs, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"alo" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"lo" = ( -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"lp" = ( +/area/outreach/outpost/command/hall) +"alp" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, +/obj/structure/table/steel, +/obj/item/radio/phone, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"alq" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"lr" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"alr" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -5461,92 +5460,108 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"ls" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 +"als" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 }, -/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"lt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/area/outreach/outpost/security/b1/supply) +"alt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"alu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"lu" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"alv" = ( +/obj/structure/sign/warning/radioactive/alt, +/obj/structure/cable/green{ + icon_state = "2-4" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/structure/cable/green{ + icon_state = "2-8" }, /obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"lv" = ( -/obj/structure/cable/green{ - icon_state = "0-2" +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/structure/sign/warning/high_voltage, /turf/simulated/floor/plating, -/area/outreach/outpost/control) -"lw" = ( +/area/outreach/outpost/control/generators) +"alw" = ( /obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/sleeproom) -"lx" = ( -/obj/structure/cryofeed{ - icon_state = "cryo_rear"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/cryopod/despawner, /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "1-8" }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/hall/inner) +"alx" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "0-8" }, +/obj/structure/disposalpipe/segment, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, /turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"ly" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 8 +/area/outreach/outpost/command/hall/inner) +"aly" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + name = "pressure regulator (distro overflow)"; + icon_state = "map_off"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"lz" = ( -/obj/machinery/forensic/microscope, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"alz" = ( +/obj/machinery/microwave, /obj/structure/table/steel, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/bay_19{ + pixel_y = 28 + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"lA" = ( +/area/outreach/outpost/security/b1/breakroom) +"alA" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, @@ -5558,225 +5573,201 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"lB" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" +"alB" = ( +/obj/machinery/port_gen/pacman/super{ + anchored = 1 }, -/obj/structure/cable/blue{ +/obj/structure/cable/green{ icon_state = "0-8" }, -/obj/machinery/network/router/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"lC" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; +/obj/effect/floor_decal/industrial/outline/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/generators) +"alC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"lD" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/sign/department/telecomms{ - dir = 1; - pixel_y = -32 +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"lE" = ( -/obj/effect/floor_decal/industrial/radiation{ - icon_state = "stripe"; - dir = 8 +/obj/effect/floor_decal/spline/plain/orange, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"alD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 5 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/basement1) +"alE" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"lF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/glass/engineering{ - icon_state = "closed"; +/obj/machinery/button/blast_door/server_cooling, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; dir = 4 }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/control/cooling) -"lG" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ +"alF" = ( +/obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/entrance) -"lH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 10 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"lI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"alG" = ( +/obj/machinery/computer/operating{ + icon_state = "computer"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"lJ" = ( -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"lK" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"alH" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/lab/research/room) +"alI" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"lL" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/door/airlock/glass/atmos/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/atmospherics/b1/hall) +"alJ" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/conference) +"alK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"lM" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/secmaint) -"lN" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/secmaint) -"lO" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"alL" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/office) +"alM" = ( +/obj/item/storage/box/parts_pack/manipulator, +/obj/item/storage/box/parts_pack/manipulator, +/obj/structure/closet, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"alN" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"lP" = ( -/obj/machinery/atm, -/obj/effect/floor_decal/spline/plain/green{ +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"alO" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"lQ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"alP" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/lockers) +"alQ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"lR" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +"alR" = ( +/obj/machinery/body_scanconsole{ + icon_state = "body_scannerconsole"; + dir = 8 }, -/obj/machinery/bodyscanner, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"lS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/area/outreach/outpost/medbay/op_room2) +"alS" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/medical/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/lockers) +"alT" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"lT" = ( -/obj/structure/table, -/obj/item/storage/box/donut, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"lU" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"lV" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/structure/banner_frame/blue, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"alU" = ( +/obj/structure/sign/poster/bay_49{ + pixel_y = 28 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/common) -"lW" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"alV" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/office) +"alW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -5798,64 +5789,93 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"lX" = ( +"alX" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"lY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +"alY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/orange, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"lZ" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" +"alZ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/secmaint) -"ma" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - icon_state = "map_vent"; - id_tag = "OH_l2_n_alck_pump_out_internal" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - dir = 2; - icon_state = "airlock_control_off"; - id_tag = "OH_l2_n_alck"; - tag_air_alarm = "OH_l2_n_alck_alarm"; - tag_airpump = "OH_l2_n_alck_pump"; - tag_chamber_sensor = "OH_l2_n_alck_sensor"; - tag_exterior_door = "OH_l2_n_alck_outer"; - tag_exterior_sensor = "OH_l2_n_alck_exterior_sensor"; - tag_interior_door = "OH_l2_n_alck_inner"; - tag_interior_sensor = "OH_l2_n_alck_interior_sensor"; - tag_secure = 1 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"ama" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"mb" = ( +/obj/item/ano_scanner, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"amb" = ( /obj/machinery/power/terminal, /obj/structure/cable/yellow{ icon_state = "0-4" }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b1) -"mc" = ( +"amc" = ( +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"amd" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"ame" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/waste/b1) +"amf" = ( /obj/machinery/door/airlock/hatch/maintenance{ icon_state = "closed"; dir = 4 @@ -5871,66 +5891,74 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/power/b1) -"md" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"me" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"mf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"mg" = ( -/obj/machinery/microwave, -/obj/structure/table/steel, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +"amg" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"mh" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/effect/decal/cleanable/cobweb, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"amh" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 4; + pixel_x = -32 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/effect/catwalk_plated, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"mi" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"ami" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "OH_l2_n_alck_pump" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/hygiene/shower/emergency{ - icon_state = "eshower"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/sign/eshowers{ - icon_state = "eshowers"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"amj" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"mj" = ( +/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -5942,57 +5970,56 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/glass/science{ - icon_state = "closed"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/lab/entrance) -"mk" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"amk" = ( /obj/structure/rack, /obj/item/hoist_kit, /obj/item/hoist_kit, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"ml" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"aml" = ( +/obj/structure/sign/deck/second{ + pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement1) -"mm" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 }, -/obj/machinery/atmospherics/valve/shutoff, -/obj/effect/floor_decal/industrial/shutoff, +/obj/machinery/disposal, +/obj/structure/railing/mapped/stairwell, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"mn" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/stairwell/basement1) +"amm" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"amn" = ( +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/purple, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"mo" = ( +"amo" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -6010,144 +6037,152 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"mp" = ( -/obj/machinery/airlock_sensor{ - dir = 8; - id_tag = "OH_l2_n_alck_interior_sensor"; - pixel_x = 0 +"amp" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement1) -"mq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +"amq" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/cloning) +"amr" = ( +/obj/machinery/vending/cigarette, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/body_scanconsole{ - icon_state = "body_scannerconsole"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"mr" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"ams" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"ms" = ( -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, +/obj/machinery/button/access/wired/exterior{ + dir = 1; + pixel_y = 0; + id_tag = "OH_l2_n_alck" + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mt" = ( -/obj/machinery/alarm/nobreach/airlock{ - dir = 8; - icon_state = "alarm0"; - id_tag = "OH_l2_s_alck_alarm" +"amt" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/bed/chair/office, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"amu" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "OH_l2_s_alck_pump_out_internal" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +/obj/structure/cable/blue{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"mu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - icon_state = "map"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"mv" = ( +/area/outreach/outpost/mining/b1/foyer) +"amv" = ( /obj/structure/cable/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/light/small/wired{ icon_state = "bulb_map"; - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "OH_l2_s_alck_pump_out_internal" +"amw" = ( +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"mx" = ( -/obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ - dir = 1; - icon_state = "map_vent"; - id_tag = "OH_l2_n_alck_pump_out_external" +/obj/structure/disposalpipe/trunk, +/obj/machinery/network/pager/security{ + icon_state = "doorbell"; + dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"my" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/light/small{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"amx" = ( +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/light/small/wired{ icon_state = "bulb_map"; - dir = 1 + dir = 8 }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d1) +"amy" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" }, +/obj/machinery/power/apc/super, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/control/cooling) -"mz" = ( -/obj/machinery/alarm, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/orange, +"amz" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"mA" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"amA" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - dir = 2; icon_state = "airlock_control_off"; + dir = 2; id_tag = "OH_l2_e_alck"; - tag_air_alarm = "OH_l2_e_alck_alarm"; + tag_exterior_door = "OH_l2_e_alck_outer"; + tag_interior_door = "OH_l2_e_alck_inner"; tag_airpump = "OH_l2_e_alck_pump"; tag_chamber_sensor = "OH_l2_e_alck_sensor"; - tag_exterior_door = "OH_l2_e_alck_outer"; tag_exterior_sensor = "OH_l2_e_alck_exterior_sensor"; - tag_interior_door = "OH_l2_e_alck_inner"; tag_interior_sensor = "OH_l2_e_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l2_e_alck_alarm"; tag_secure = 1 }, /obj/machinery/camera/network/security, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"mB" = ( +"amB" = ( /obj/structure/cable/yellow{ icon_state = "1-8" }, @@ -6159,26 +6194,44 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mC" = ( -/obj/machinery/firealarm, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +"amC" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"mD" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"amD" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/exoplanet/outreach/underground/d1) -"mE" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/breakroom) +"amE" = ( /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"mF" = ( +"amF" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6189,11 +6242,11 @@ }, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"mG" = ( +"amG" = ( /obj/structure/sign/warning/biohazard, /turf/exterior/barren/subterrane/outreach, /area/exoplanet/outreach/underground/d1) -"mH" = ( +"amH" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6204,7 +6257,7 @@ }, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"mI" = ( +"amI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 5 @@ -6215,7 +6268,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mJ" = ( +"amJ" = ( /obj/structure/cable/yellow{ icon_state = "0-4" }, @@ -6230,105 +6283,94 @@ icon_state = "2-4" }, /obj/machinery/button/access/wired/exterior{ - id_tag = "OH_l2_s_alck"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_s_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mK" = ( +"amK" = ( /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"mL" = ( +"amL" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 8 }, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"mM" = ( +"amM" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 4 }, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"mN" = ( +"amN" = ( +/obj/machinery/airlock_sensor{ + dir = 8; + pixel_x = 0; + id_tag = "OH_l2_n_alck_interior_sensor" + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"amO" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_n_alck_outer" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/north) -"mO" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"mP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"amP" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/fabricator/pipe/disposal, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"mQ" = ( +"amQ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - dir = 2; icon_state = "airlock_control_off"; + dir = 2; id_tag = "OH_l2_w_alck"; - tag_air_alarm = "OH_l2_w_alck_alarm"; + tag_exterior_door = "OH_l2_w_alck_outer"; + tag_interior_door = "OH_l2_w_alck_inner"; tag_airpump = "OH_l2_w_alck_pump"; tag_chamber_sensor = "OH_l2_w_alck_sensor"; - tag_exterior_door = "OH_l2_w_alck_outer"; tag_exterior_sensor = "OH_l2_w_alck_exterior_sensor"; - tag_interior_door = "OH_l2_w_alck_inner"; tag_interior_sensor = "OH_l2_w_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l2_w_alck_alarm"; tag_secure = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"mR" = ( -/turf/simulated/wall/ocp_wall/prepainted, +"amR" = ( +/turf/simulated/wall/r_ocp, /area/outreach/outpost/airlock/basement1/west) -"mS" = ( +"amS" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 + icon_state = "1-2" }, -/obj/machinery/dummy_airlock_controller{ - dir = 8; - icon_state = "airlock_control_off"; - id_tag = "OH_l2_e_alck" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"mT" = ( -/turf/simulated/wall/ocp_wall/prepainted, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/east) +"amT" = ( +/turf/simulated/wall/r_ocp, /area/outreach/outpost/airlock/basement1/east) -"mU" = ( +"amU" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6339,19 +6381,14 @@ }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"mV" = ( -/obj/structure/cable/blue{ - icon_state = "2-4" - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 4 +"amV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + icon_state = "11"; + dir = 9 }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"mW" = ( +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"amW" = ( /obj/structure/cable/yellow{ icon_state = "0-4" }, @@ -6369,7 +6406,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"mX" = ( +"amX" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 1 @@ -6377,39 +6414,29 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"mY" = ( -/obj/machinery/alarm, -/obj/machinery/fabricator, +"amY" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 1 + dir = 9 }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/faxmachine/mapped/outreach/mining, +/obj/structure/filing_cabinet/wall, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"mZ" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/area/outreach/outpost/mining/b1/office) +"amZ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"na" = ( +"ana" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6417,13 +6444,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/airlock_sensor/wired{ dir = 8; - id_tag = "OH_l2_w_alck_exterior_sensor"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l2_w_alck_exterior_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"nb" = ( +"anb" = ( /obj/structure/cable/yellow{ icon_state = "0-4" }, @@ -6437,33 +6464,58 @@ }, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"nc" = ( +"anc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nd" = ( +"and" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/hygiene/drain, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"ne" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "OH_l2_n_alck_pump" +"ane" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/basement1) +"anf" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"nf" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"ng" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"ang" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_e_alck_inner" }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -6472,7 +6524,7 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/east) -"nh" = ( +"anh" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6484,7 +6536,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"ni" = ( +"ani" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/black, /obj/item/radio/intercom{ icon_state = "intercom"; @@ -6493,33 +6545,38 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nj" = ( +"anj" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_w_alck_outer" }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/west) -"nk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"nl" = ( +"ank" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"anl" = ( /obj/machinery/airlock_sensor{ dir = 1; - id_tag = "OH_l2_w_alck_sensor"; pixel_x = 0; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_w_alck_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nm" = ( +"anm" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -6533,7 +6590,7 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nn" = ( +"ann" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -6541,13 +6598,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/airlock_sensor/wired{ dir = 4; - id_tag = "OH_l2_e_alck_exterior_sensor"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l2_e_alck_exterior_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"no" = ( +"ano" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -6560,62 +6617,48 @@ /obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"np" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ +"anp" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "11"; - dir = 4 - }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid/outreach, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, /area/exoplanet/outreach/underground/d1) -"nq" = ( -/obj/machinery/alarm/nobreach/airlock{ - dir = 4; - icon_state = "alarm0"; - id_tag = "OH_l2_n_alck_alarm" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - icon_state = "map_vent"; - id_tag = "OH_l2_n_alck_pump_out_internal" - }, -/obj/machinery/light/small/red{ - icon_state = "bulb_map"; - dir = 8 +"anq" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/north) -"nr" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"anr" = ( /obj/machinery/light, /obj/structure/sign/warning/engineering_access{ - dir = 1; icon_state = "securearea"; + dir = 1; pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"ns" = ( +"ans" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_e_alck_outer" }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/east) -"nt" = ( +"ant" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; icon_state = "map_vent"; + dir = 1; id_tag = "OH_l2_w_alck_pump" }, /obj/machinery/camera/network/security{ @@ -6624,114 +6667,113 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nu" = ( -/obj/structure/cable/yellow, +"anu" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + icon_state = "11"; + dir = 8 + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"anv" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/button/access/wired/exterior{ - dir = 8; - id_tag = "OH_l2_w_alck"; - pixel_x = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"nv" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"nw" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"anw" = ( /obj/machinery/door/airlock/external/glass{ - dir = 4; icon_state = "closed"; + dir = 4; id_tag = "OH_l4_e_alck_inner" }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/west) -"nx" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"anx" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, +/obj/structure/table/steel, +/obj/item/storage/box/fancy/donut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"any" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - icon_state = "map_vent"; - id_tag = "OH_l2_s_alck_pump" + id_tag = "OH_l2_w_alck_pump_out_internal" }, -/obj/structure/sign/eshowers{ - icon_state = "eshowers"; +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; dir = 4 }, -/obj/structure/hygiene/shower/emergency{ - color = "#c9a344"; - dir = 4; - icon_state = "eshower" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"ny" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "OH_l2_w_alck_pump_out_internal" - }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"nz" = ( +"anz" = ( /obj/machinery/airlock_sensor{ dir = 1; - id_tag = "OH_l2_e_alck_sensor"; pixel_x = 0; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_e_alck_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"nA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +"anA" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 5 +/obj/machinery/atmospherics/binary/pump/on{ + name = "gas pump (from cooling loop)"; + icon_state = "map_on"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"nB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"anB" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"nC" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"anC" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"nD" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"anD" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ id_tag = "OH_l2_e_alck_pump_out_internal" }, +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; + dir = 8 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"nE" = ( +"anE" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -6743,61 +6785,44 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"nF" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"anF" = ( /obj/machinery/airlock_sensor{ dir = 1; - id_tag = "OH_l2_w_alck_interior_sensor"; pixel_x = 0; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_w_alck_interior_sensor" }, /obj/effect/floor_decal/industrial/hatch/orange, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"nG" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, +"anG" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/atmos/b1) -"nH" = ( -/obj/structure/cryofeed, -/obj/machinery/cryopod/despawner{ - icon_state = "body_scanner_0"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"nI" = ( +/area/outreach/outpost/hallway/west/basement1) +"anH" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/beakers, +/obj/effect/decal/cleanable/dirt, +/obj/item/hand_labeler, +/obj/item/scanner/spectrometer, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"anI" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -6813,79 +6838,71 @@ icon_state = "map-scrubbers"; dir = 1 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"anJ" = ( +/obj/item/radio/intercom, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"nJ" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; +"anK" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"anL" = ( +/obj/structure/table, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"nK" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"anM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 4 +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"nL" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/structure/cable/blue{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/secmaint) -"nM" = ( -/obj/machinery/power/breakerbox/activated, -/obj/structure/sign/warning/high_voltage{ - dir = 8; - icon_state = "shock"; - pixel_x = 32; - pixel_y = 0 + dir = 5 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control) -"nN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"anN" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ dir = 1; id_tag = "OH_l2_e_alck_pump" }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"nO" = ( +"anO" = ( /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_e_alck_inner" }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/east) -"nP" = ( +"anP" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/black, /obj/item/radio/intercom{ icon_state = "intercom"; @@ -6894,17 +6911,17 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"nQ" = ( +"anQ" = ( /obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ id_tag = "OH_l2_s_alck_pump_out_external" }, /obj/effect/floor_decal/industrial/hatch/orange, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"nR" = ( +"anR" = ( /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_w_alck_outer" }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -6913,179 +6930,148 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/west) -"nS" = ( -/obj/structure/closet/crate/plastic, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/spline/plain/yellow{ +"anS" = ( +/obj/machinery/vending/snack, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 4 + dir = 5 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"nT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"anT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"nU" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/bed/chair{ - icon_state = "chair"; - dir = 8 +/area/outreach/outpost/control/servers/access) +"anU" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"nV" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - icon_state = "map_vent"; - id_tag = "OH_l2_s_alck_pump" +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - id_tag = "OH_l2_s_alck"; - tag_air_alarm = "OH_l2_s_alck_alarm"; - tag_airpump = "OH_l2_s_alck_pump"; - tag_chamber_sensor = "OH_l2_s_alck_sensor"; - tag_exterior_door = "OH_l2_s_alck_outer"; - tag_exterior_sensor = "OH_l2_s_alck_exterior_sensor"; - tag_interior_door = "OH_l2_s_alck_inner"; - tag_interior_sensor = "OH_l2_s_alck_interior_sensor"; - tag_secure = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"anV" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"anW" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/airlock/basement1/south) -"nW" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"nX" = ( -/obj/structure/sign/department/hydro{ - pixel_y = 32 - }, -/obj/effect/floor_decal/spline/plain/green{ +"anX" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 9 + dir = 1 }, /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"nY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"anY" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/secmaint) -"nZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; +/obj/structure/banner_frame/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 8 }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"anZ" = ( /obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"oa" = ( -/obj/machinery/atmospherics/tvalve/bypass{ - dir = 4; - icon_state = "map_tvalve1"; - name = "coolant flush valve" - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"ob" = ( -/obj/effect/floor_decal/spline/plain/yellow, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +"aoa" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"oc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 4 +/obj/structure/cable/green{ + icon_state = "0-4" }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/generators) +"aob" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/atmos{ - icon_state = "closed"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"aoc" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/door/airlock/glass/atmos/outreach, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"od" = ( +/area/outreach/outpost/atmospherics/b1/hall) +"aod" = ( /obj/machinery/alarm/nobreach/airlock{ - dir = 1; icon_state = "alarm0"; + dir = 1; id_tag = "OH_l1_e_alck_alarm" }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; icon_state = "map_vent"; + dir = 8; id_tag = "OH_l2_w_alck_pump_out_internal" }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/west) -"oe" = ( +"aoe" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -7098,65 +7084,50 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"of" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"og" = ( -/obj/machinery/power/apc/hyper{ - icon_state = "apc0"; - dir = 1 - }, -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 5 - }, +/area/outreach/outpost/hallway/central/basement1) +"aof" = ( +/obj/machinery/door/airlock/medical/outreach/morgue, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/cloning) +"aog" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"oh" = ( +/area/outreach/outpost/control/servers/access) +"aoh" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, /obj/structure/cable/yellow{ icon_state = "2-8" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/basement1) +"aoi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/junction, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"oi" = ( -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"oj" = ( +/area/outreach/outpost/hallway/central/basement1) +"aoj" = ( /obj/structure/stairs/long/north, /obj/structure/railing/mapped/stairwell{ icon_state = "railing_preview"; @@ -7164,42 +7135,18 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"ok" = ( -/obj/machinery/forensic/dnascanner, -/obj/structure/table/steel, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"ol" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +"aok" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/secmaint) -"om" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/b1/east/junct) -"on" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aol" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -7211,13 +7158,31 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aom" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aon" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"oo" = ( +/area/outreach/outpost/hallway/east/basement1) +"aoo" = ( /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; dir = 10 @@ -7230,7 +7195,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"op" = ( +"aop" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 @@ -7238,196 +7203,187 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"oq" = ( -/obj/machinery/power/apc/high, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +"aoq" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 }, /obj/effect/floor_decal/spline/plain/purple, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"or" = ( +"aor" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/generators) +"aos" = ( +/obj/structure/closet/crate/radiation_gear, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aot" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aou" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"os" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/secmaint) -"ot" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aov" = ( +/obj/machinery/vending/hotfood, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/floor_decal/industrial/radiation{ - icon_state = "stripe"; - dir = 1 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"aow" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/cable/green{ - icon_state = "1-4" +/obj/structure/sign/poster/bay_19{ + pixel_y = 28 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"ou" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/radiation/corner{ - icon_state = "stripecorner"; - dir = 1 +/area/outreach/outpost/hallway/west/basement1) +"aox" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aoy" = ( +/obj/machinery/atmospherics/pipe/zpipe/up{ + icon_state = "up"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/industrial/warning/full, +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"ov" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/security{ - icon_state = "closed" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/hallway) -"ow" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"ox" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/structure/closet/emcloset/outreach, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"oy" = ( -/obj/structure/iv_drip, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 5 +/area/outreach/outpost/maint/waste/b1) +"aoz" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/conference) +"aoA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +/obj/structure/sign/directions/security{ + icon_state = "direction_sec"; + dir = 8; + pixel_y = 24 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 8; + pixel_y = 32 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"oz" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"oA" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"oB" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +"aoB" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 9 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/camera/network/security, +/obj/structure/flora/pottedplant/minitree, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoC" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/southeast) -"oC" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light_switch/on, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"oD" = ( +/obj/item/radio/intercom, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoD" = ( /obj/structure/sign/directions/medical{ - dir = 4; icon_state = "direction_med"; + dir = 4; pixel_y = 32 }, /obj/structure/flora/pottedplant/largebush, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement1) -"oE" = ( +"aoE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, -/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"oF" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 5 +/area/outreach/outpost/hallway/east/basement1) +"aoF" = ( +/obj/structure/noticeboard, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 1 }, -/obj/structure/rack/dark, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"oG" = ( +/area/outreach/outpost/command/conference) +"aoG" = ( /obj/effect/floor_decal/industrial/hatch/orange, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -7442,245 +7398,267 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"oH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"oI" = ( -/obj/structure/table/steel, -/obj/machinery/microwave, +"aoH" = ( /obj/effect/floor_decal/spline/fancy/black{ icon_state = "spline_fancy"; - dir = 5 + dir = 1 }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoI" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"oJ" = ( -/obj/machinery/fabricator/textile, +/obj/structure/noticeboard, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoJ" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/closet/secure_closet/personal/empty, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"oK" = ( -/obj/machinery/atmospherics/binary/pump, +/area/outreach/outpost/mining/b1/office) +"aoK" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"oL" = ( -/obj/machinery/camera/network/security, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aoL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"oM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/area/outreach/outpost/hallway/west/basement1) +"aoM" = ( +/obj/machinery/vending/cigarette, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/body_scanconsole{ - icon_state = "body_scannerconsole"; +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; dir = 1 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"oN" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; +/area/outreach/outpost/medbay/lobby) +"aoN" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "11"; dir = 6 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"oO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 +"aoO" = ( +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 8; + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"oP" = ( +"aoP" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 9 }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/blue{ + icon_state = "0-4" + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"oQ" = ( -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 +"aoQ" = ( +/obj/structure/sign/directions/medical{ + icon_state = "direction_med"; + dir = 4; + pixel_y = 32 }, -/obj/machinery/alarm, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"oR" = ( -/obj/machinery/recharger/wallcharger{ - icon_state = "wrecharger0"; - dir = 8 +"aoR" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/structure/table/glass, -/obj/machinery/cell_charger, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 4 + dir = 5 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"oS" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/area/outreach/outpost/medbay/lobby) +"aoS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"oT" = ( +"aoT" = ( /obj/machinery/alarm, /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"oU" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/structure/rack, +"aoU" = ( +/obj/machinery/alarm, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"oV" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/enzyme, -/obj/item/chems/condiment/enzyme, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"oW" = ( -/obj/structure/closet, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 9 + dir = 1 }, +/obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"oX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/area/outreach/outpost/mining/b1/foyer) +"aoV" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/effect/floor_decal/industrial/radiation{ - icon_state = "stripe"; +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; dir = 1 }, -/obj/structure/cable/green{ - icon_state = "1-4" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoW" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 5 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 }, +/obj/machinery/alarm, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aoX" = ( /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/cable/green{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/control) -"oY" = ( -/obj/structure/disposalpipe/segment/bent, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"oZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +"aoY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"pa" = ( -/obj/effect/floor_decal/corner/yellow/border, -/turf/exterior/concrete, -/area/exoplanet/outreach/underground/d1) -"pb" = ( -/obj/structure/hygiene/sink{ - icon_state = "sink"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"pc" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"pd" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aoZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"apa" = ( +/obj/effect/floor_decal/corner/yellow/border, +/turf/exterior/concrete, +/area/exoplanet/outreach/underground/d1) +"apb" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"pe" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"apc" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"apd" = ( +/obj/structure/sign/deck/second{ + pixel_y = 32 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/junction/yjunction, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"pf" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ape" = ( +/obj/machinery/camera/network/security, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/obj/structure/sign/directions/cryo{ + icon_state = "direction_cryo"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"apf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -7692,65 +7670,65 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/b1/north) -"pg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +"apg" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 1 + dir = 8 }, -/obj/structure/bed/padded, -/obj/machinery/flasher{ - id_tag = "OB_Cell1_flash" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/A) -"ph" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/structure/closet, -/obj/item/storage/box/lights/bulbs, -/obj/item/storage/box/lights/bulbs, -/obj/item/storage/box/lights/tubes, -/obj/item/storage/box/mousetraps, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/effect/floor_decal/spline/plain/pink{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"aph" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"pi" = ( -/obj/item/radio/intercom, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/pink{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"api" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"pj" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"apj" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"pk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"apk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -7768,25 +7746,49 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"pl" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/janitorial/hall) -"pm" = ( -/obj/structure/sign/department/janitor{ - pixel_y = 32 - }, -/obj/structure/table, -/obj/item/plunger, -/obj/effect/floor_decal/spline/plain/pink{ +"apl" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"pn" = ( +/obj/item/book/manual/detective, +/obj/item/stamp/denied, +/obj/item/stamp/boss, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"apm" = ( +/obj/structure/closet/jcloset, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"apn" = ( +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"apo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"app" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -7795,22 +7797,10 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/item/stool/wood, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"po" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"pp" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"pq" = ( +"apq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -7829,30 +7819,15 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"pr" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +"apr" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining) -"ps" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aps" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; @@ -7865,7 +7840,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/B) -"pt" = ( +"apt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 10 @@ -7883,160 +7858,136 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"pu" = ( -/obj/machinery/suit_cycler, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +"apu" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 9 + dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/quartermaster, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"pv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/area/outreach/outpost/mining/b1/office) +"apv" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"pw" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; dir = 4 }, -/obj/structure/flora/pottedplant/fern, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"apw" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 5 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"px" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"py" = ( -/obj/structure/closet/chefcloset, /obj/machinery/alarm, -/obj/item/kitchen/rollingpin, -/obj/item/kitchen/rollingpin, -/obj/item/knife/kitchen/cleaver, -/obj/item/knife/kitchen, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/suit/chef/classic, -/obj/item/storage/box/condimentbottles, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"pz" = ( -/obj/structure/cryofeed{ - icon_state = "cryo_rear"; - dir = 4 - }, -/obj/machinery/cryopod/despawner, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"apx" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/eva/b1/south) +"apy" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"pA" = ( -/obj/structure/flora/pottedplant/fern, -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/green{ +/area/outreach/outpost/command/hall/inner) +"apz" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"pB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"pC" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"apA" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"pD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"pE" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"apB" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/wallframe_spawn/reinforced/polarized/full, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/conference) +"apC" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"apD" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"pF" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/light, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"apE" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/sticky_pad, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"pG" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"pH" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/faxmachine/mapped/outreach/command, +/obj/item/radio/intercom, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"apF" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/op_room) +"apG" = ( +/obj/effect/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pI" = ( -/obj/machinery/suit_cycler, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"apH" = ( +/obj/structure/closet/secure_closet/brig, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"apI" = ( +/obj/structure/filing_cabinet/wall, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 8 + dir = 5 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"pJ" = ( +/area/outreach/outpost/mining/b1/office) +"apJ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; @@ -8049,165 +8000,155 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/C) -"pK" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"apK" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/security/b1/forensics) +"apL" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/machinery/door/airlock/civilian{ - icon_state = "closed"; - dir = 1 +/obj/structure/rack/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/kitchen) -"pL" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/workshop) -"pM" = ( +/obj/machinery/alarm, +/obj/item/tank/emergency/oxygen/double, +/obj/item/tank/emergency/oxygen/double, +/obj/item/tank/emergency/oxygen/double, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"apM" = ( /obj/effect/decal/cleanable/generic, /turf/exterior/barren/subterrane/outreach, /area/exoplanet/outreach/underground/d1) -"pN" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +"apN" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pO" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pP" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"apO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"apP" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, /obj/machinery/suit_cycler, +/obj/machinery/recharger/wallcharger, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"apQ" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/structure/flora/pottedplant/tall, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"pQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pR" = ( -/obj/structure/cable/blue{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/machinery/suit_cycler, +/area/outreach/outpost/mining/b1/foyer) +"apR" = ( +/obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 10 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"pS" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/suit_cycler, +/obj/machinery/recharger/wallcharger, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"apS" = ( +/obj/structure/sign/department/telecomms{ + dir = 1; + pixel_y = -32 }, -/obj/structure/bed/chair, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"apT" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"pT" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"apU" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"apV" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 8 + icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pU" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"pV" = ( -/obj/structure/bed/chair/office/comfy/brown, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 +/area/outreach/outpost/hallway/west/basement1) +"apW" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/engineering{ + icon_state = "closed" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"pW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/b1/storage) +"apX" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"pX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"pY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +"apY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; + icon_state = "map_off"; + dir = 1 + }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"pZ" = ( +"apZ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -8219,100 +8160,113 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"qa" = ( -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed" +"aqa" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/storage) -"qb" = ( -/obj/machinery/firealarm, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aqb" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"qc" = ( +"aqc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aqd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"qd" = ( -/obj/machinery/firealarm, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"qe" = ( +"aqe" = ( /obj/structure/sign/warning/engineering_access{ pixel_y = 32 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"qf" = ( +"aqf" = ( /obj/effect/floor_decal/corner/yellow/border, /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"qg" = ( +"aqg" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"qh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; dir = 1 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aqh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/basement1) +"aqi" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"qi" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"qj" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"aqj" = ( /obj/machinery/atmospherics/unary/tank/air/airlock{ dir = 4 }, /obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"qk" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 +"aqk" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"ql" = ( +/area/outreach/outpost/hallway/west/basement1) +"aql" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -8331,291 +8285,284 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"qm" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +"aqm" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"qn" = ( +/area/outreach/outpost/control/hall) +"aqn" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"qo" = ( +"aqo" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"qp" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +"aqp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"qq" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"qr" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aqq" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/water, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aqr" = ( +/obj/structure/sign/warning/secure_area{ + icon_state = "securearea2"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 9 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"qs" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aqs" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"qt" = ( -/obj/structure/closet/chefcloset, -/obj/item/kitchen/rollingpin, -/obj/item/kitchen/rollingpin, -/obj/item/knife/kitchen/cleaver, -/obj/item/knife/kitchen, -/obj/item/clothing/suit/chef/classic, -/obj/item/clothing/suit/chef/classic, -/obj/item/storage/box/condimentbottles, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"qu" = ( -/obj/machinery/vending/hydroseeds/generic{ - icon_state = "seeds_generic"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aqt" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aqu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aqv" = ( +/obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"qv" = ( +/obj/machinery/suit_cycler, /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/obj/structure/table, -/obj/machinery/recharger, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +/obj/machinery/recharger/wallcharger, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"qw" = ( -/obj/structure/sign/directions/medical{ - dir = 1; - icon_state = "direction_med"; - pixel_y = 32 - }, -/obj/structure/sign/directions/security{ - dir = 1; - icon_state = "direction_sec"; - pixel_y = 24 +/area/outreach/outpost/mining/b1/eva) +"aqw" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"qx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aqx" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 }, +/obj/structure/table/steel, +/obj/item/storage/box/taperolls/research, +/obj/item/storage/box/taperolls/research, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/storage) -"qy" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/storage/box/monkeycubes, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/enzyme, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"qz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"qA" = ( -/turf/simulated/open, -/area/outreach/outpost/stairwell/basement1) -"qB" = ( +/area/outreach/outpost/lab/xeno/storage) +"aqy" = ( /obj/structure/cable/blue{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"qC" = ( -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/blue{ +/area/outreach/outpost/control) +"aqz" = ( +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/processing) -"qD" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/hall) +"aqA" = ( +/turf/open, +/area/outreach/outpost/stairwell/basement1) +"aqB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"qE" = ( -/obj/structure/closet/secure_closet/paramedic, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"qF" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aqC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 8 }, -/obj/structure/closet, -/obj/item/storage/box/armband/med, -/obj/item/storage/box/armband/med, -/obj/item/storage/box/armband/med, -/obj/item/storage/box/gloves, -/obj/item/storage/box/gloves, -/obj/item/storage/box/gloves, -/obj/item/storage/box/masks, -/obj/item/storage/box/masks, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aqD" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hydroponics/backroom) +"aqE" = ( +/obj/machinery/optable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/item/clothing/suit/surgicalapron, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"qG" = ( +/area/outreach/outpost/medbay/op_room) +"aqF" = ( +/obj/structure/table/steel_reinforced, +/obj/item/ashtray, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"aqG" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 6 + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/power/b1) +"aqH" = ( +/obj/structure/table/glass, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 4 }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"qH" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 10 + dir = 9 }, -/obj/structure/flora/pottedplant/floorleaf, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"qI" = ( -/obj/structure/cable/blue{ +/area/outreach/outpost/medbay/storage) +"aqI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"qJ" = ( +/area/outreach/outpost/maint/power/b1) +"aqJ" = ( /obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction, /obj/structure/cable/yellow{ icon_state = "2-4" }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"qK" = ( -/obj/machinery/oxygen_pump, +/area/outreach/outpost/medbay/lobby) +"aqK" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"qL" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/structure/cable/yellow{ - icon_state = "0-8" +"aqL" = ( +/obj/machinery/smartfridge/secure/medbay, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/power/apc/super, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/triage) -"qM" = ( +"aqM" = ( /obj/machinery/oxygen_pump{ icon_state = "emerg"; dir = 8 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"qN" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +"aqN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/sign/poster/bay_24{ - pixel_y = 28 +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"qO" = ( +/area/outreach/outpost/medbay/lockers) +"aqO" = ( /obj/structure/sign/warning/high_voltage{ - dir = 8; icon_state = "shock"; + dir = 8; pixel_x = 32; pixel_y = 0 }, @@ -8628,78 +8575,82 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"qP" = ( +"aqP" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 4 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"qQ" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +"aqQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 1 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"qR" = ( -/obj/structure/bed/chair/office, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"qS" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed" - }, -/obj/structure/cable/blue{ - icon_state = "1-2" +"aqR" = ( +/obj/structure/table/steel_reinforced, +/obj/item/toy/desk/dippingbird, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/office) -"qT" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"aqS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 9 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"qU" = ( -/obj/machinery/recharger/wallcharger{ - icon_state = "wrecharger0"; - dir = 8 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/b1) +"aqT" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/b1) +"aqU" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"qV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aqV" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"qW" = ( +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"aqW" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -8708,63 +8659,63 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"qX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 +"aqX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/basement1) -"qY" = ( +"aqY" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"qZ" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/basement1) +"aqZ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"ara" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/concrete, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"ra" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/west/basement1) -"rb" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"arb" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"rc" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"arc" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -8779,15 +8730,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"rd" = ( -/obj/structure/sign/department/janitor{ - dir = 4; - icon_state = "janitor"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"re" = ( +"ard" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"are" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -8802,7 +8750,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"rf" = ( +"arf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 5 @@ -8810,83 +8758,110 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"rg" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, +"arg" = ( /turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"rh" = ( +/area/outreach/outpost/security/b1/forensics) +"arh" = ( /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"ri" = ( -/obj/structure/closet/crate/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"rj" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ +"ari" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 10 + dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"rk" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"arj" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"ark" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"rl" = ( -/turf/simulated/wall, -/area/outreach/outpost/restrooms) -"rm" = ( -/turf/simulated/wall, -/area/outreach/outpost/laundry) -"rn" = ( +/area/outreach/outpost/security/b1/hallway/to_brig) +"arl" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"arm" = ( /obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/medical{ - icon_state = "closed"; - dir = 2 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/highsecurity/outreach/telecom, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/storage/equipment) -"ro" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/area/outreach/outpost/control/hall) +"arn" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/structure/hygiene/urinal, -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"rp" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/research/outreach/chemistry{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/entrance) +"aro" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/clipboard, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"arp" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "11"; dir = 10 @@ -8899,32 +8874,31 @@ /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"rq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"rr" = ( -/obj/structure/cable/blue{ - icon_state = "2-4" - }, -/obj/structure/cable/blue{ - icon_state = "4-8" +"arq" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/obj/structure/disposalpipe/segment, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"arr" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 8 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"rs" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"ars" = ( /obj/machinery/atmospherics/unary/tank/air/airlock{ dir = 8; initialize_directions = 8 @@ -8932,81 +8906,93 @@ /obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"rt" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +"art" = ( +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/cable/blue{ +/obj/effect/catwalk_plated, +/obj/structure/cable/green{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/bed/chair, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"ru" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"rv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/plating, +/area/outreach/outpost/control/generators) +"aru" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/control) +"arv" = ( +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"arw" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rw" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/structure/rack, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/chems/spray/cleaner, +/obj/item/soap, +/obj/item/soap, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rx" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"arx" = ( /turf/simulated/wall/r_wall/prepainted/command, /area/outreach/outpost/control/hall) -"ry" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"ary" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/highsecurity, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/hall) -"rz" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"arz" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -9017,227 +9003,168 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"rA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +"arA" = ( +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; dir = 4 }, -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"arB" = ( +/obj/machinery/door/airlock/civilian{ + icon_state = "closed"; dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rC" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/janitorial) +"arC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 6 + dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"rE" = ( -/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"rF" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/b1/south/east) -"rG" = ( +"arD" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"arE" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"rH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 - }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"rI" = ( +"arF" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/chapel) +"arG" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"arH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/security{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"arI" = ( +/obj/machinery/vending/coffee, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1) -"rJ" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"arJ" = ( /turf/simulated/wall, -/area/outreach/outpost/vacant/b1/south/east) -"rK" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"rL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/area/outreach/outpost/chapel) +"arK" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/breakroom/backroom) +"arL" = ( +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"arM" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"rM" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"arN" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"rN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/visible{ + icon_state = "map"; + dir = 8 }, -/obj/machinery/power/apc, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"rO" = ( +"arO" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 1 }, /obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/seed_extractor, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"rP" = ( -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; - dir = 1 - }, +"arP" = ( /obj/machinery/botany/extractor, /obj/effect/floor_decal/spline/plain/purple, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"rQ" = ( +"arQ" = ( /obj/item/radio/intercom{ icon_state = "intercom"; dir = 1 @@ -9247,50 +9174,41 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"rR" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, +"arR" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/storage) -"rS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/science{ - icon_state = "closed"; - dir = 1 + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/storage) -"rT" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, +"arS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"arT" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"rU" = ( +"arU" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/lab) -"rV" = ( +"arV" = ( /obj/machinery/chem_master, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; @@ -9299,29 +9217,21 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"rW" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, +"arW" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "1-2" }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/north) -"rX" = ( +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"arX" = ( /obj/structure/cable/blue{ icon_state = "1-2" }, @@ -9332,133 +9242,125 @@ /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"rY" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow, -/obj/machinery/firealarm{ - icon_state = "casing"; +"arY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"rZ" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"arZ" = ( /turf/simulated/wall, /area/outreach/outpost/maint/waste/b1) -"sa" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +"asa" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northeast/airlock) -"sb" = ( +"asb" = ( /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"sc" = ( -/obj/machinery/atmospherics/pipe/zpipe/up{ - icon_state = "up"; +"asc" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/decal/cleanable/blood/oil, +/obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/b1) -"sd" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/obj/structure/cable/yellow, +/area/outreach/outpost/maint/atmos/b1) +"asd" = ( +/obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction/mirrored, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/b1) -"se" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +/area/outreach/outpost/maint/atmos/b1) +"ase" = ( +/turf/simulated/wall, +/area/outreach/outpost/hydroponics) +"asf" = ( +/obj/structure/rack, +/obj/item/plunger, +/obj/item/plunger, +/obj/item/plunger, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/item/holosign_creator, +/obj/item/holosign_creator, +/obj/item/storage/box/mousetraps, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"asg" = ( +/obj/machinery/computer/modular/preset/outreach/medical, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"sf" = ( -/obj/structure/janitorialcart, -/obj/item/mop, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 5 +/area/outreach/outpost/medbay/lobby/counter) +"ash" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/east) +"asi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"sg" = ( -/obj/machinery/light/small{ +/obj/machinery/light/small/wired{ icon_state = "bulb_map"; - dir = 1 + dir = 8 }, -/obj/machinery/light_switch, -/obj/effect/floor_decal/spline/plain/pink{ +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d1) +"asj" = ( +/obj/machinery/bodyscanner{ + icon_state = "body_scanner_0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 1 + dir = 10 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"sh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"ask" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"si" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"sj" = ( -/obj/machinery/atmospherics/unary/tank/air/airlock{ - dir = 4 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"sk" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/east/junct) +"asl" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 1 + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -9467,47 +9369,31 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"sl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/area/outreach/outpost/maint/passage/b1/east) +"asm" = ( +/obj/structure/closet/crate/internals, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"asn" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"sm" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"sn" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"so" = ( +/area/outreach/outpost/maint/passage/b1/east) +"aso" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -9515,35 +9401,27 @@ /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/button/access/wired/exterior{ dir = 4; - id_tag = "OH_l2_e_alck"; - pixel_x = 0 + pixel_x = 0; + id_tag = "OH_l2_e_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"sp" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/yellow{ - icon_state = "1-8" +"asp" = ( +/obj/structure/table/glass, +/obj/structure/hygiene/sink, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"sq" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"asq" = ( /obj/effect/floor_decal/industrial/hatch/orange, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -9552,93 +9430,77 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"sr" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"ss" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, +"asr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"ass" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"st" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"su" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"ast" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"sv" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/area/outreach/outpost/maint/atmos/b1) +"asu" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"sw" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"sx" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"asv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -9647,31 +9509,64 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/office) +"asw" = ( /obj/structure/disposalpipe/segment/bent{ icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"asx" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"asy" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"sy" = ( -/obj/machinery/door/firedoor/autoset, +/area/outreach/outpost/security/b1/hallway) +"asz" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/north/basement1) -"sz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"sA" = ( +"asA" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -9686,7 +9581,7 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/basement1) -"sB" = ( +"asB" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -9698,63 +9593,50 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/basement1) -"sC" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"asC" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"asD" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"sD" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/basement1) +"asE" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"sE" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b1) -"sF" = ( -/obj/item/hand_labeler, -/obj/item/hand_labeler, +"asF" = ( +/obj/machinery/papershredder, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 9 + dir = 5 }, -/obj/machinery/light_switch, -/obj/structure/rack, /obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"sG" = ( +/area/outreach/outpost/medbay/lobby/counter) +"asG" = ( /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -9769,95 +9651,100 @@ icon_state = "4-8" }, /obj/machinery/button/access/wired/exterior{ - id_tag = "OH_l2_s_alck"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l2_s_alck" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"sH" = ( -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/obj/machinery/power/apc, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"sI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +"asH" = ( +/obj/structure/sign/department/greencross{ + pixel_y = 32 }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"sJ" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"sK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 +"asI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"sL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"sM" = ( -/obj/machinery/vending/wallmed1{ - icon_state = "wallmed"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"asJ" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"sN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/airlock_sensor{ - dir = 1; - id_tag = "OH_l2_e_alck_interior_sensor"; - pixel_x = 0; - pixel_y = 0 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/east/basement1) +"asK" = ( +/obj/machinery/firealarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/basement1) -"sO" = ( +"asL" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"asM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"asN" = ( +/obj/machinery/oxygen_pump, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"asO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"sP" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"asP" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"sQ" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"asQ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -9869,292 +9756,388 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"sR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +"asR" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"sS" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-4" +"asS" = ( +/obj/item/stool/wood, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"asT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/item/stool/wood, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"sT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/steel, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"sU" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"asU" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8; + pixel_x = 32 }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"sV" = ( +"asV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"asW" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 + icon_state = "1-2" }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/cap/hidden/supply, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"sW" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 8 +/area/outreach/outpost/command/hall) +"asX" = ( +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"sX" = ( -/obj/structure/sign/department/security/alt{ - dir = 4; - icon_state = "sec_cuff"; - pixel_x = -32 +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"sY" = ( -/turf/simulated/wall/prepainted/mining, -/area/outreach/outpost/mining/b1/workshop) -"sZ" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"asY" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"ta" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"tb" = ( -/obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/modular/preset/cardslot{ + icon_state = "console-off"; + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b1) -"tc" = ( +/area/outreach/outpost/mining/b1/office) +"asZ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ata" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"td" = ( -/obj/machinery/door/firedoor/autoset, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement1) -"te" = ( -/turf/simulated/wall/prepainted/mining, +/area/outreach/outpost/hallway/west/basement1) +"atb" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/b1) +"atc" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/glasses/pint, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"atd" = ( +/obj/machinery/light_switch, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"ate" = ( +/turf/simulated/wall/r_wall/prepainted/mining, /area/outreach/outpost/mining/b1/office) -"tf" = ( -/turf/simulated/wall/prepainted/mining, +"atf" = ( +/turf/simulated/wall/r_wall/prepainted/mining, /area/outreach/outpost/mining/b1/eva) -"tg" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"th" = ( -/obj/machinery/alarm, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"ti" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +"atg" = ( +/obj/structure/synthesized_instrument/synthesizer/minimoog, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"ath" = ( +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"tj" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 4 +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 }, -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 5 +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"ati" = ( +/obj/structure/banner_frame/red, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 }, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"atj" = ( +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"atk" = ( +/obj/structure/bed/chair/office/comfy/brown, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"tk" = ( -/obj/structure/filing_cabinet/wall, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, +/area/outreach/outpost/mining/b1/office) +"atl" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 5 + dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/office) -"tl" = ( -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tm" = ( -/obj/machinery/papershredder, -/obj/structure/filing_cabinet/wall, +"atm" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 9 + dir = 8 }, +/obj/machinery/atmospherics/omni/filter/o2canister_refill/mining_eva, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"tn" = ( -/obj/machinery/alarm, +/area/outreach/outpost/mining/b1/eva) +"atn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"ato" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"atp" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/flora/pottedplant/tall, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"to" = ( +/area/outreach/outpost/mining/b1/foyer) +"atq" = ( +/obj/structure/table, +/obj/item/deck/cards, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"atr" = ( +/obj/machinery/firealarm, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"tp" = ( -/obj/machinery/light_switch/on, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"tq" = ( -/obj/structure/tank_rack/oxygen, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 5 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"ats" = ( +/obj/structure/memorial, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"tr" = ( +/obj/structure/sign/painting/monkey_painting, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"att" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment/bent{ icon_state = "pipe-c"; - dir = 8 + dir = 1 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"atu" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/flashlight/lamp, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 4 + dir = 8 }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/book/manual/engineering_construction, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/office) -"ts" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"tt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"tu" = ( -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown{ +"atv" = ( +/obj/machinery/seed_storage/garden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"atw" = ( +/obj/structure/closet/secure_closet/outreach/eva, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"atx" = ( /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/mining/b1/eva) +"aty" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/rack/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 10 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"tw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tx" = ( +/obj/item/book/manual/evaguide, +/obj/item/book/manual/excavation, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/eva) -"ty" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/camera/network/security{ - icon_state = "camera"; +"atz" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/taperecorder/empty, +/obj/item/magnetic_tape, +/obj/item/storage/box/tapes, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"atA" = ( +/obj/machinery/body_scanconsole{ + icon_state = "body_scannerconsole"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"atB" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"tz" = ( -/obj/machinery/door/airlock/hatch/maintenance{ +/obj/machinery/door/airlock/glass/mining/outreach{ icon_state = "closed"; - dir = 4 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining) +"atC" = ( +/obj/machinery/alarm, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ icon_state = "11"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"atD" = ( +/obj/item/radio/intercom, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"atE" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement1) -"tA" = ( -/turf/simulated/wall/concrete/prepainted/medbay, -/area/outreach/outpost/medbay/morgue) -"tB" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"atF" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -10162,72 +10145,32 @@ icon_state = "apc0"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/brown{ +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 1 + dir = 5 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"tC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - icon_state = "11"; - dir = 10 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"atG" = ( /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "1-8" }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/structure/cable/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"tD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/hall) -"tE" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/machinery/porta_turret/stationary/stun, -/obj/machinery/firealarm, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"tF" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/hall) -"tG" = ( -/obj/structure/cable/blue{ - icon_state = "2-8" + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"tH" = ( +"atH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ icon_state = "1-2" @@ -10235,15 +10178,16 @@ /obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/control/hall) -"tI" = ( -/obj/machinery/porta_turret/stationary/stun, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 +"atI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 6 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"tJ" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"atJ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -10254,38 +10198,32 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/control/hall) -"tK" = ( -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, +"atK" = ( +/obj/machinery/light_switch/on, +/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining) -"tL" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +"atL" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"tM" = ( +/area/outreach/outpost/command/hall) +"atM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 9 @@ -10296,332 +10234,334 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"tN" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +"atN" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 8 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"atO" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"atP" = ( +/obj/structure/closet/secure_closet/chaplain, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb1"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/b1/south/east) -"tO" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"atQ" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"tP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"atR" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"tQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm, +/area/outreach/outpost/hallway/south/basement1) +"atS" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 1 + dir = 5 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/rack/dark, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"tR" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +/area/outreach/outpost/mining/b1/foyer) +"atT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/table/woodentable_reinforced/walnut, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tS" = ( +/area/outreach/outpost/mining/b1/office) +"atU" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"atV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tT" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 4 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/office) +"atW" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"tU" = ( -/obj/structure/hygiene/drain, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"tV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"atX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"tW" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/obj/machinery/power/terminal, +/obj/structure/cable/blue{ + icon_state = "0-8" }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/flashlight/lamp, -/obj/effect/floor_decal/spline/plain/brown{ +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"atY" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"tX" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/padded/blue{ + icon_state = "chair_preview"; dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/vending/wallmed1{ + icon_state = "wallmed"; dir = 4 }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"tY" = ( -/obj/structure/table/steel, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"tZ" = ( -/obj/structure/cable/yellow{ +/area/outreach/outpost/medbay/lobby) +"atZ" = ( +/obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/exoplanet/outreach/underground/d1) -"ua" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/structure/cable/blue, +/obj/structure/flaps/airtight, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"ub" = ( -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"uc" = ( -/obj/structure/cable/blue{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"ud" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aua" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 8 }, -/obj/structure/rack/dark, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/obj/item/storage/toolbox/emergency, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/effect/floor_decal/spline/plain/brown{ +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aub" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"auc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aud" = ( +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/eva) -"ue" = ( +"aue" = ( +/obj/machinery/camera/network/security, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining) -"uf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +"auf" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"ug" = ( -/obj/structure/table, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"uh" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/area/outreach/outpost/mining/b1/foyer) +"aug" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + icon_state = "console-off"; + dir = 8 }, -/obj/machinery/disposal, -/obj/effect/floor_decal/spline/plain/brown{ +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"auh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 6 }, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"ui" = ( +/area/outreach/outpost/mining/b1/eva) +"aui" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 4 + dir = 10 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"uj" = ( +/area/outreach/outpost/mining/b1/office) +"auj" = ( /obj/structure/cable/blue{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/eva) -"uk" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/area/outreach/outpost/mining/b1/office) +"auk" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"ul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/area/outreach/outpost/mining/b1/foyer) +"aul" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/mech_recharger, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/eva) -"um" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"un" = ( -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/blue{ - icon_state = "1-2" +"aum" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/eva) -"uo" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"up" = ( -/turf/simulated/wall/prepainted/mining, -/area/outreach/outpost/mining/b1/foyer) -"uq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aun" = ( +/obj/machinery/suit_cycler/generic/prepared, /obj/machinery/light{ icon_state = "tube_map"; dir = 8 }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 8 - }, +/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"ur" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"auo" = ( +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aup" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/mining/b1/foyer) +"auq" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aur" = ( /obj/structure/cable/blue{ icon_state = "1-2" }, @@ -10629,162 +10569,213 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"us" = ( -/obj/structure/noticeboard, -/obj/structure/table, -/obj/machinery/recharger, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"ut" = ( -/obj/machinery/alarm, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +"aus" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"uu" = ( -/obj/structure/table, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"aut" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/bed/chair, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uv" = ( -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +"auu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uw" = ( -/obj/machinery/vending/cola, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +"auv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"ux" = ( +"auw" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/obj/machinery/vending/coffee, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, +/obj/structure/bed/chair, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uy" = ( -/obj/machinery/power/smes/batteryrack, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 5 - }, +"aux" = ( +/obj/structure/table, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uz" = ( -/obj/item/radio/intercom, +"auy" = ( +/obj/item/bikehorn, +/obj/effect/decal/cleanable/dirt, +/obj/structure/mattress/dirty, +/obj/item/deck/cards, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"auz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining) -"uA" = ( +"auA" = ( /turf/simulated/wall/prepainted/mining, /area/outreach/outpost/mining/b1/processing) -"uB" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"uC" = ( +"auB" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"auC" = ( /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uD" = ( -/obj/structure/cable/blue{ - icon_state = "0-2" +"auD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/obj/machinery/power/terminal{ - icon_state = "term"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, +/obj/structure/table/woodentable_reinforced/walnut, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/office) +"auE" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"uE" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/closet/medical_wall/filled, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining) -"uF" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +"auF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed"; +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining) -"uG" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"auG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction/yjunction{ + icon_state = "pipe-y"; + dir = 8 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uH" = ( +"auH" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uI" = ( -/obj/effect/decal/cleanable/dirt, +"auI" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/vending/mredispenser, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"uJ" = ( +"auJ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"auK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"auL" = ( +/obj/item/radio/intercom, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"uK" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"auM" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"auN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"auO" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -10793,239 +10784,288 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"auP" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining) -"uL" = ( +/obj/machinery/airlock_sensor/wired{ + pixel_y = 0; + id_tag = "OH_l2_s_alck_exterior_sensor" + }, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d1) +"auQ" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed"; - dir = 4 +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/office) +"auR" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/stairwell/basement1/command) +"auS" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/foyer) -"uM" = ( -/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/industrial/hatch/orange, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 10 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"auT" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining) -"uN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"uO" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"auU" = ( +/obj/structure/flaps/airtight, +/obj/structure/cable/blue, /obj/structure/cable/blue{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"auV" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"auW" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"uP" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"auX" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"auY" = ( +/obj/effect/wallframe_spawn/reinforced/polarized/full, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/turf/simulated/floor/plating, +/area/outreach/outpost/command/conference) +"auZ" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, -/obj/machinery/airlock_sensor/wired{ - id_tag = "OH_l2_s_alck_exterior_sensor"; - pixel_y = 0 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"ava" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"uQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 9 + dir = 10 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"avb" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/folder/envelope, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"avc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"uR" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/janitorial) +"avd" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/phone, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/common) -"uS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"ave" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"uT" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"uU" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"avf" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 }, -/obj/effect/wallframe_spawn/no_grille, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/common) -"uV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"avg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"uW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"avh" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"avi" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 8 }, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"uX" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"avj" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"uY" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"avk" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"uZ" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"va" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"avl" = ( +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/blue{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"vb" = ( -/obj/structure/cable/yellow{ +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"avm" = ( +/obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"vc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/area/outreach/outpost/mining/b1/foyer) +"avn" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"vd" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"avo" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -11037,32 +11077,57 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"avp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/machinery/door/airlock/civilian{ - icon_state = "closed"; +/obj/machinery/light_switch/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement1) +"avq" = ( +/obj/machinery/button/alternate/door/bolts{ + name = "bolt cell button"; + icon_state = "doorctrl"; + dir = 1; + id_tag = "OH_brig_cell_bolt" + }, +/obj/machinery/computer/modular/preset/security{ + icon_state = "console-off"; dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/janitorial/hall) -"ve" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/network/pager/security{ + icon_state = "doorbell"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vf" = ( +/obj/machinery/computer/modular/preset/security{ + icon_state = "console-off"; + dir = 8 + }, +/obj/machinery/button/flasher/security_desk{ + icon_state = "launcherbtt"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"avr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"avs" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, @@ -11074,49 +11139,59 @@ icon_state = "11-supply"; dir = 4 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"vg" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/structure/cable/blue{ +"avt" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/mining/b1/processing) +"avu" = ( +/obj/structure/table, +/obj/item/crowbar/cheap, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"avv" = ( +/obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vh" = ( -/obj/structure/cable/blue{ - icon_state = "1-8" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid/outreach, +/area/exoplanet/outreach/underground/d1) +"avw" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vi" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"avx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ icon_state = "11-supply"; - dir = 4 + dir = 6 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/foyer) -"vj" = ( /obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"avy" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -11125,163 +11200,32 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"avz" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining) -"vk" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/obj/effect/floor_decal/spline/plain/brown, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining) -"vl" = ( -/obj/structure/table, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vm" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vn" = ( -/obj/machinery/light, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vo" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"vp" = ( -/obj/machinery/alarm, -/obj/structure/flora/pottedplant/floorleaf, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement1) -"vq" = ( -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"vr" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/mining/b1/processing) -"vs" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/office) -"vt" = ( -/turf/simulated/wall/prepainted/mining, -/area/outreach/outpost/mining/b1/storage) -"vu" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/eva) -"vv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/outreach, -/area/exoplanet/outreach/underground/d1) -"vw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/foyer) -"vx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"vy" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"vz" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/office) -"vA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"avA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"vB" = ( +"avB" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 1 @@ -11289,30 +11233,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"vC" = ( -/obj/machinery/conveyor_switch{ - id_tag = "OH_mining_conveyor_1" - }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"vD" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +"avC" = ( +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/mining/b1/processing) -"vE" = ( +"avD" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b1/east) +"avE" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 4 @@ -11320,459 +11247,468 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"vF" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/computer/modular/preset/security{ - icon_state = "console-off"; - dir = 4 +"avF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/red, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"vG" = ( +/area/outreach/outpost/security/b1/brig) +"avG" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/security/b1/office) -"vH" = ( +"avH" = ( /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"vI" = ( +"avI" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/l3closet/security/multi, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"vJ" = ( -/obj/structure/cable/blue{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/area/outreach/outpost/security/b1/breakroom/backroom) +"avJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vK" = ( -/obj/structure/rack/dark, -/obj/machinery/light_switch{ - icon_state = "light0"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"avK" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/item/clothing/mask/gas/budget, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 6 - }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/eva) -"vL" = ( -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"vM" = ( -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 4 - }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"vN" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 +"avL" = ( +/obj/effect/catwalk_plated, +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"vO" = ( -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow, +/obj/item/stamp/clown, +/obj/machinery/power/apc, /turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/processing) -"vP" = ( -/obj/item/hoist_kit, -/obj/machinery/light_switch, -/obj/structure/rack/dark, -/obj/item/hoist_kit, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"vQ" = ( +/area/outreach/outpost/maint/passage/b1/southeast) +"avM" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/bed/chair, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"vR" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +"avN" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement1) +"avO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"avP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"avQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"avR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/bed/chair, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"vS" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"vT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"vU" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/brown, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"vV" = ( -/obj/effect/floor_decal/spline/plain/brown, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"vW" = ( -/obj/machinery/oxygen_pump, -/obj/effect/floor_decal/spline/plain/brown{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 1 + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"vX" = ( -/obj/structure/cable/blue{ +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"avS" = ( +/obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"vY" = ( -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"vZ" = ( -/obj/machinery/camera/network/security, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wa" = ( -/obj/machinery/alarm, -/obj/structure/rack/dark, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"avT" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 }, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"avU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"we" = ( -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wf" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wg" = ( -/obj/machinery/door/firedoor/autoset{ +/obj/machinery/door/firedoor{ icon_state = "open"; dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed"; - dir = 4 - }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/processing) -"wh" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"wi" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"wj" = ( +/area/outreach/outpost/maint/passage/b1/east/junct) +"avV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 9 + dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b1) -"wk" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"avW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/catwalk_plated/dark, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"wl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"avX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wm" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/structure/cable/blue{ - icon_state = "2-4" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"avY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wn" = ( -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"avZ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/processing) -"wo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"awa" = ( +/obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"wp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"awb" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awc" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/spline/plain/purple, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - icon_state = "mining_brace"; +/obj/item/book/manual/chemistry_recipes, +/obj/item/storage/box/beakers, +/obj/item/scanner/reagent, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"awd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"awe" = ( /turf/simulated/floor/tiled, /area/outreach/outpost/mining/b1/storage) -"wr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"ws" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +"awf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 6 }, -/obj/effect/wallframe_spawn/concrete, -/turf/simulated/floor/plating, -/area/outreach/outpost/mining/b1/processing) -"wt" = ( -/obj/machinery/door/firedoor/autoset, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"awg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awh" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"awi" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/sortjunction/mining{ + icon_state = "pipe-j1s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"awj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"awk" = ( +/obj/machinery/atmospherics/valve/shutoff, +/obj/effect/floor_decal/industrial/shutoff, +/obj/structure/sign/department/janitor{ + icon_state = "janitor"; + dir = 4; + pixel_x = -32 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"wu" = ( +"awl" = ( +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awm" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/item/storage/box/monkeycubes, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"awn" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"awo" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"awp" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wv" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/office) +"awq" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/mining/b1/processing) -"ww" = ( -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wx" = ( -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/structure/rack/dark, -/obj/structure/closet/walllocker, +/area/outreach/outpost/mining/b1/storage) +"awr" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 1 + dir = 4 }, /turf/simulated/floor/tiled, /area/outreach/outpost/mining/b1/storage) -"wy" = ( +"aws" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"awt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"awu" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/computer/modular/preset/security, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"awv" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"aww" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"awx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 5 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"awy" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"wz" = ( +"awz" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 8 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"wA" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +"awA" = ( +/obj/machinery/forensic/microscope, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/b1) -"wB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"awB" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, @@ -11783,119 +11719,96 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"wC" = ( -/obj/effect/floor_decal/industrial/loading{ - icon_state = "loadingarea"; +"awC" = ( +/obj/effect/decal/cleanable/blood, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awD" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wD" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awE" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wE" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/rack/dark, -/obj/structure/closet/walllocker, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 5 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"awF" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wF" = ( -/obj/machinery/light_switch, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, +/obj/machinery/door/airlock/glass/mining/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/foyer) +"awG" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 1 + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wG" = ( +/obj/structure/ore_box, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - icon_state = "mining_brace"; +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/outreach/outpost/mining/b1/storage) -"wI" = ( +"awH" = ( +/obj/structure/vending_refill, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awI" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 }, /turf/simulated/floor/tiled, /area/outreach/outpost/mining/b1/storage) -"wJ" = ( -/obj/item/scanner/mining, -/obj/item/scanner/mining, -/obj/item/scanner/mining, -/obj/item/scanner/mining, -/obj/structure/cable/blue{ - icon_state = "1-2" +"awJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"awL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/rack/dark, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wK" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"wL" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"wM" = ( +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"awM" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -11907,124 +11820,107 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"wN" = ( -/obj/structure/closet, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +"awN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"awO" = ( +/obj/machinery/suit_cycler/generic/prepared, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"awP" = ( +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"awQ" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wO" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 + dir = 4 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/obj/machinery/vending/coffee{ dir = 8 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 5 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"awR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wP" = ( -/obj/machinery/material_processing/unloader, -/obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "stripecee"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wQ" = ( -/obj/machinery/conveyor{ - dir = 4; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"awS" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wS" = ( -/obj/machinery/atmospherics/binary/pump{ - icon_state = "map_off"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"wT" = ( -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 }, -/obj/structure/closet, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"awT" = ( +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"awU" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/mining/b1/storage) -"wU" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +"awV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"wV" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_s_alck_outer" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/catwalk_plated, +/obj/machinery/network/relay/wall_mounted/outreach, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"awW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 10 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/south) -"wW" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_s_alck_outer" +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/south) -"wX" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"awX" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -12032,10 +11928,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"wY" = ( +"awY" = ( /obj/machinery/alarm/nobreach/airlock{ - dir = 1; icon_state = "alarm0"; + dir = 1; id_tag = "OH_l2_e_alck_alarm" }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ @@ -12045,15 +11941,15 @@ /obj/machinery/light/small/red, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/airlock/basement1/east) -"wZ" = ( -/obj/structure/closet/crate/internals, +"awZ" = ( +/obj/structure/vending_refill, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"xa" = ( +/area/outreach/outpost/maint/passage/b1/east) +"axa" = ( /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l2_e_alck_outer" }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -12062,29 +11958,21 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/basement1/east) -"xb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +"axb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ icon_state = "11"; - dir = 6 + dir = 10 }, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 }, /obj/structure/cable/blue{ - icon_state = "1-4" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"xc" = ( +/area/outreach/outpost/control/servers/access) +"axc" = ( /obj/structure/cable/yellow{ icon_state = "32-4" }, @@ -12092,46 +11980,44 @@ /obj/structure/sign/deck/second{ pixel_y = 32 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/b1) -"xd" = ( -/obj/structure/morgue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 9 +"axd" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; + dir = 8 }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/morgue) -"xe" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_n_alck_inner" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/north) -"xf" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"axe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 }, -/obj/machinery/door/airlock/external/glass{ - dir = 1; - icon_state = "closed"; - id_tag = "OH_l2_n_alck_inner" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"axf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/basement1/north) -"xg" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"axg" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 1 }, -/obj/item/radio/intercom, +/obj/structure/table/steel, +/obj/structure/reagent_dispensers/peppertank, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"xh" = ( +/area/outreach/outpost/security/b1/office) +"axh" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 8 @@ -12139,61 +12025,111 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"xi" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/outreach/outpost/sleeproom) -"xj" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +"axi" = ( +/obj/structure/closet/crate/plastic, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 9 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"xk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"xl" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 4; - icon_state = "securearea"; - pixel_x = -32 - }, -/obj/effect/floor_decal/spline/plain/pink{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"axj" = ( +/obj/machinery/forensic/dnascanner, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"xm" = ( -/obj/structure/closet/jcloset, -/obj/effect/floor_decal/spline/plain/pink{ +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"axk" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 5 + }, +/obj/item/scanner/autopsy, +/obj/item/scanner/autopsy, +/obj/item/scanner/health, +/obj/item/scanner/health, +/obj/item/storage/briefcase/crimekit, +/obj/item/storage/box/evidence, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/freezer, +/obj/item/storage/box/swabs, +/obj/item/storage/evidence, +/obj/item/storage/box/evidence, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/swabs, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"axl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"axm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/closet/crate/trashcart, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"xn" = ( +"axn" = ( /obj/machinery/oxygen_pump{ icon_state = "emerg"; dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monotile, /area/outreach/outpost/stairwell/basement1) -"xo" = ( +"axo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 6 @@ -12205,342 +12141,358 @@ /obj/structure/hygiene/drain, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"xp" = ( +"axp" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"xq" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 5 +"axq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"xr" = ( +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"axr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"xs" = ( -/obj/machinery/atmospherics/portables_connector{ - icon_state = "map_connector"; - dir = 8 +"axs" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, -/obj/effect/floor_decal/industrial/outline/orange, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"xt" = ( +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"axt" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"xu" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/mining{ - icon_state = "closed" - }, -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/processing) -"xv" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +"axu" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"axv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"axw" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"axx" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"xw" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 4 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"axy" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"axz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"xx" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"axA" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"xy" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"xz" = ( -/obj/structure/cable/blue{ - icon_state = "2-4" - }, -/obj/machinery/alarm/nobreach{ - target_temperature = 273 - }, -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/machinery/network/mainframe/account/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"xA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"xB" = ( +/area/outreach/outpost/maint/passage/b1/east/junct) +"axB" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/maint/passage/b1/southeast) -"xC" = ( -/obj/structure/hygiene/sink{ - icon_state = "sink"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/green{ +"axC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"axD" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"axE" = ( +/obj/machinery/vending/medical, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"xD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"axF" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"axG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"xE" = ( -/obj/effect/floor_decal/industrial/fire, -/obj/effect/floor_decal/spline/plain/paleblue{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"xF" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 5 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"xG" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"axH" = ( +/obj/structure/bed/chair/padded/blue{ + icon_state = "chair_preview"; + dir = 8 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"axI" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + icon_state = "11"; dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"xH" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/effect/floor_decal/spline/plain/paleblue{ +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"axJ" = ( +/obj/machinery/light/spot{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/floor_decal/spline/plain/green{ icon_state = "spline_plain"; dir = 9 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"axK" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; dir = 4 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"axL" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"xI" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"xJ" = ( -/obj/structure/hygiene/drain, -/obj/structure/table/steel, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"xK" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"xL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"axM" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"axN" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + icon_state = "11"; + dir = 9 }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"axO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"xM" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/item/storage/box/water, -/obj/item/storage/box/water, -/obj/item/storage/box/water, -/obj/item/storage/box/freezer, -/obj/machinery/alarm/cold, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"xN" = ( -/obj/structure/closet/crate/freezer/meat, -/obj/item/storage/box/condimentbottles, -/obj/item/storage/box/condimentbottles, -/obj/item/storage/box/canned/beans, -/obj/item/storage/box/canned/beans, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"xO" = ( -/obj/machinery/gibber, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"xP" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/spline/plain/green{ +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"xQ" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"axP" = ( +/obj/machinery/light_switch/on, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"axQ" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monotile, /area/outreach/outpost/stairwell/basement1) -"xR" = ( +"axR" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 }, -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"xS" = ( -/obj/structure/morgue, -/obj/machinery/alarm, -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/area/outreach/outpost/security/b1/hallway) +"axS" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"axT" = ( +/obj/structure/closet/secure_closet/medical1, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 1 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"axU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"axV" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/staff_room) +"axW" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/spline/plain/purple, +/obj/item/storage/box/beakers, /obj/effect/decal/cleanable/dirt, +/obj/item/hand_labeler, +/obj/item/scanner/spectrometer, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"xT" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ +/area/outreach/outpost/lab) +"axX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"axY" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"axZ" = ( +/turf/simulated/floor/airless, +/area/exoplanet/outreach/underground/d1) +"aya" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 8 }, @@ -12548,398 +12500,338 @@ icon_state = "tube_map"; dir = 8 }, -/obj/structure/closet, -/obj/item/storage/box/rxglasses, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"ayb" = ( +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"ayc" = ( +/obj/effect/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"ayd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"xU" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/medical{ - icon_state = "closed"; - dir = 2 +/area/outreach/outpost/medbay/morgue) +"aye" = ( +/obj/item/caution, +/obj/item/chems/spray/cleaner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"ayf" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"ayg" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/medical/outreach, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/lobby) -"xV" = ( -/obj/machinery/papershredder, -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/paleblue{ +/area/outreach/outpost/medbay/staff_room) +"ayh" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 5 + dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"xW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"xX" = ( -/obj/structure/hygiene/urinal, -/obj/structure/window/basic{ - icon_state = "window"; - dir = 8 +/obj/machinery/button/alternate/door/sec_checkpoint{ + icon_state = "doorctrl"; + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"xY" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"ayi" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/basement1) -"xZ" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"ayj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"ya" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"ayk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"ayl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 }, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"yb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"yc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"yd" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 8 }, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/trauma, -/obj/item/storage/firstaid/trauma, -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"ye" = ( -/obj/structure/table, +/area/outreach/outpost/medbay/lobby/counter) +"aym" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/cable/blue{ + icon_state = "0-4" + }, /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/rack/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"ayn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/item/clipboard, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"yf" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 8 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"yg" = ( -/obj/structure/crematorium{ - dir = 4; - icon_state = "crematorium_closed"; - id_tag = "ob_med_crema" +/area/outreach/outpost/medbay/lobby/counter) +"ayo" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, -/obj/effect/floor_decal/spline/plain/paleblue{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"ayp" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 10 }, +/obj/machinery/light, +/obj/machinery/flasher/security_desk{ + icon_state = "mflash1"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"ayq" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/button/crematorium{ - dir = 4; - id_tag = "ob_med_crema" +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"yh" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"ayr" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"yi" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/area/outreach/outpost/security/b1) +"ays" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/item/storage/picnic_basket, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"yj" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"ayt" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/bookcase/manuals/medical, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"yk" = ( +/area/outreach/outpost/medbay/lobby) +"ayu" = ( +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"yl" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"ym" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/spline/plain/paleblue{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/basement1/command) +"ayv" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"yn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 4 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"yo" = ( -/obj/structure/closet/secure_closet/medical3, -/obj/effect/floor_decal/spline/plain/paleblue{ +/area/outreach/outpost/security/b1/forensics) +"ayw" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 8 }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"yp" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/security/b1/forensics) +"ayx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"ayy" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"ayz" = ( +/obj/machinery/chemical_dispenser, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"yq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, +/area/outreach/outpost/lab) +"ayA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"yr" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"ys" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ayB" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"yt" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ayC" = ( +/obj/structure/sign/poster/bay_24{ + pixel_y = 28 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/floor_decal/corner/grey/diagonal, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 1 + dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"yu" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/area/outreach/outpost/medbay/staff_room) +"ayD" = ( +/obj/machinery/reagentgrinder, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"ayE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, +/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"yv" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"yw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"yx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/passage/b1/north) -"yy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yz" = ( -/obj/machinery/chemical_dispenser, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yA" = ( -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/reagentgrinder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yB" = ( -/obj/machinery/firealarm, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yC" = ( -/obj/machinery/alarm, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yD" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/oxygen_pump, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"yE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"yF" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"ayF" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"yG" = ( +"ayG" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -12953,14 +12845,14 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"yH" = ( +"ayH" = ( /obj/structure/railing/mapped/stairwell{ icon_state = "railing_preview"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"yI" = ( +"ayI" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -12976,28 +12868,43 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/west/basement1) -"yJ" = ( +"ayJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"yK" = ( +"ayK" = ( /obj/structure/cable/yellow, /obj/machinery/power/apc/high, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"yL" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +"ayL" = ( +/obj/item/storage/box/parts_pack/laser, +/obj/item/storage/box/parts_pack/laser, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement1) -"yM" = ( -/obj/item/flashlight/lamp, -/obj/structure/table, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"yN" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"ayM" = ( +/obj/effect/floor_decal/spline/fancy/black, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"ayN" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -13009,34 +12916,39 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/basement1) -"yO" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 +"ayO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"yP" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"ayP" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"yQ" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 - }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; +"ayQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"yR" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"ayR" = ( /obj/structure/cable/yellow, /obj/machinery/power/apc{ icon_state = "apc0"; @@ -13044,57 +12956,43 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"yS" = ( -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"yT" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +"ayS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"ayT" = ( +/obj/machinery/atmospherics/binary/pump{ + name = "gas pump (airlock refill)" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"ayU" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"yU" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, +/obj/structure/table/steel, +/obj/item/storage/box/fancy/donut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"ayV" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/fancy/black, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/high, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement1) -"yV" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/table, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"yW" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"ayW" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -13106,62 +13004,33 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/basement1) -"yX" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"yY" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"yZ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"za" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"ayX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"ayY" = ( +/obj/machinery/washing_machine, +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 9 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"zb" = ( +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"ayZ" = ( +/obj/structure/table/woodentable/walnut, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"zc" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aza" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -13170,101 +13039,125 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"zd" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"ze" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-4" }, /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "1-4" }, -/obj/machinery/power/smes/buildable/preset/outreach/substation, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/power/b1) -"zf" = ( -/obj/machinery/door/airlock/security{ +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "OH_brig_desk_shutters" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/security/outreach/checkpoint{ icon_state = "closed"; - dir = 4 + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1) +"azb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"azc" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/office) -"zg" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/door/airlock/glass/security/outreach/forensics{ + icon_state = "closed"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/forensics) +"azd" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"aze" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zi" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/smes/buildable/preset/outreach/substation, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/power/b1) +"azf" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"azg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_brig_cell2_bolt" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/office) +"azh" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"azi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 6 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"zj" = ( +/area/outreach/outpost/control/servers/access) +"azj" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 4 @@ -13275,123 +13168,128 @@ /obj/machinery/power/smes/buildable/preset/outreach/substation, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b1) -"zk" = ( +"azk" = ( /turf/simulated/floor/tiled/dark, /area/outreach/outpost/security/b1/office) -"zl" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/button/blast_door{ +"azl" = ( +/obj/machinery/atmospherics/binary/pump{ + name = "gas pump (airlock flush)"; + icon_state = "map_off"; dir = 1; - icon_state = "blastctrl"; - id_tag = "OH_brig_desk_shutters" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zm" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" + target_pressure = 15000 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"azm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/light, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"zn" = ( -/obj/structure/cable/blue{ - icon_state = "1-4" +/area/outreach/outpost/control/servers/access) +"azn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zo" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; - dir = 4 - }, /obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"zp" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/cable/blue{ + icon_state = "1-4" }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/cooling) +"azo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"zq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"azp" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"azq" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/basement1) -"zr" = ( -/obj/effect/floor_decal/industrial/radiation{ - icon_state = "stripe"; +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 1 }, -/obj/structure/cable/green{ - icon_state = "2-8" - }, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"azr" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zs" = ( -/obj/structure/table/steel, -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 - }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/servers/access) +"azs" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"zt" = ( +"azt" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"azu" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -13403,363 +13301,357 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/hall) -"zu" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 + icon_state = "2-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"azv" = ( +/obj/machinery/washing_machine, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/hall) -"zv" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"zw" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"azw" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"zx" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/closet/crate/secure/biohazard/alt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"azx" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 6 }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast) -"zy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/structure/flora/pottedplant/minitree, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"zz" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"azy" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/light, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"azz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/vending_refill, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"zA" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"zB" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/basement1) -"zC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/bed/chair{ - icon_state = "chair"; - dir = 8 +/area/outreach/outpost/maint/passage/b1/east) +"azA" = ( +/obj/structure/cable/blue{ + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"zD" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement1) -"zE" = ( -/obj/structure/sign/deck/second{ - pixel_y = 32 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 }, -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"azB" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/disposal, -/obj/structure/railing/mapped/stairwell, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/obj/machinery/vending/cigarette{ dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement1) -"zF" = ( -/obj/structure/hygiene/drain, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"azC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"azD" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"azE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/morgue) -"zG" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc/high{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement1) +"azF" = ( +/obj/machinery/body_scan_display, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ icon_state = "apc0"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/red{ +/obj/machinery/bodyscanner, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 10 + dir = 9 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"azG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zH" = ( +/area/outreach/outpost/command/office/third) +"azH" = ( /obj/effect/decal/cleanable/dirt, /turf/exterior/barren/subterrane/outreach, /area/exoplanet/outreach/underground/d1) -"zI" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +"azI" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"azJ" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/archives) +"azK" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/lockers) +"azL" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/bed/chair/office, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zJ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/area/outreach/outpost/security/b1/breakroom) +"azM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"zK" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/button/blast_door{ - dir = 1; - icon_state = "blastctrl"; - id_tag = "OH_brig_desk_shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zL" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/bed/chair/office, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zM" = ( -/obj/machinery/button/alternate/door/bolts{ - dir = 1; - icon_state = "doorctrl"; - id_tag = "OH_brig_cell_bolt"; - name = "bolt cell button" - }, -/obj/machinery/computer/modular/preset/security{ - icon_state = "computer"; - dir = 8 +/area/outreach/outpost/security/b1/breakroom) +"azN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/red{ +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 6 + dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"zN" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, -/obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"zO" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/medbay/storage) +"azO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"azP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"azQ" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 10 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"zP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"azR" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"azS" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"azT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 5 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zQ" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"azU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zS" = ( /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"azV" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/black, /obj/structure/cable/blue{ - icon_state = "2-8" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zT" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/structure/cable/blue{ + icon_state = "1-8" }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"azW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"zU" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 10 +/obj/structure/cable/blue{ + icon_state = "1-4" }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"zV" = ( -/obj/structure/sign/department/telecomms{ - dir = 4; - icon_state = "tcomm"; - pixel_x = -32 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 +/area/outreach/outpost/control/servers/access) +"azX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"zW" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"zX" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/area/outreach/outpost/control/servers/access) +"azY" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "11"; - dir = 8 - }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"zY" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - icon_state = "11"; - dir = 8 + dir = 9 }, -/turf/exterior/barren/subterrane/outreach, +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, /area/exoplanet/outreach/underground/d1) -"zZ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +"azZ" = ( +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"aAa" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"Aa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aAb" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/tank_rack/oxygen, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aAc" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"Ab" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"Ac" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/lobby) -"Ad" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aAd" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, /turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"Ae" = ( +/area/outreach/outpost/security/b1/lockers) +"aAe" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -13771,66 +13663,93 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"Af" = ( -/obj/machinery/seed_storage{ - icon_state = "seeds"; - dir = 8 +"aAf" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 4 + dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"Ag" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"aAg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/spline/plain/green, +/obj/structure/table, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"Ah" = ( +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/obj/item/storage/box/taperolls/atmos, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aAh" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"Ai" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 +"aAi" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"Aj" = ( +"aAj" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/catwalk_plated/dark, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, /turf/simulated/floor/plating, /area/outreach/outpost/control/hall) -"Ak" = ( -/obj/structure/closet/crate/trashcart, -/obj/item/storage/box/canned/beans, -/obj/item/storage/box/canned/beans, +"aAk" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"Al" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - icon_state = "map_on"; +/area/outreach/outpost/maint/passage/b1/east) +"aAl" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 1 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"aAm" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"Am" = ( +/obj/structure/disposalpipe/up{ + icon_state = "pipe-u"; + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"aAn" = ( /obj/structure/ladder, /obj/structure/lattice, /obj/machinery/atmospherics/pipe/zpipe/down/supply{ @@ -13841,39 +13760,17 @@ icon_state = "down-scrubbers"; dir = 1 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/atmos/b1) -"An" = ( -/obj/structure/lattice, -/obj/structure/sign/deck/second{ - dir = 1; - icon_state = "deck-2"; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - icon_state = "up-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - icon_state = "up-scrubbers"; - dir = 1 - }, -/obj/structure/disposalpipe/down{ - icon_state = "pipe-d"; - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/b1) -"Ao" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - icon_state = "map"; - dir = 8 +"aAo" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + icon_state = "map"; + dir = 8 }, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Ap" = ( +"aAp" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ icon_state = "11"; dir = 4 @@ -13881,101 +13778,84 @@ /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Aq" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/green{ +"aAq" = ( +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Ar" = ( -/obj/structure/cable/yellow, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; dir = 1 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"As" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"aAr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/structure/disposalpipe/junction/yjunction, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"At" = ( -/obj/machinery/atmospherics/valve/shutoff, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "OH_brig_desk_shutters" }, -/obj/effect/floor_decal/industrial/shutoff, +/obj/machinery/door/airlock/glass/security/outreach/brig, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/brig) +"aAs" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/detective_office) +"aAt" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"Au" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 +"aAu" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 9 }, -/obj/machinery/atmospherics/valve/shutoff, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Av" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Aw" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aAv" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 4 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aAw" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aAx" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aAy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aAz" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aAA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"Ax" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -13985,30 +13865,14 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Ay" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Az" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"AA" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/maint/passage/b1/north) -"AB" = ( +"aAB" = ( /obj/machinery/power/terminal, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -14016,125 +13880,129 @@ /obj/structure/cable/yellow, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/b1) -"AC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"AD" = ( +"aAC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aAD" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"AE" = ( +"aAE" = ( /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"AF" = ( +"aAF" = ( /obj/machinery/oxygen_pump{ icon_state = "emerg"; dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"AG" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/computer/modular/preset/security{ - icon_state = "console-off"; +"aAG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/office) -"AH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"AI" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "OH_brig_desk_shutters" +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/window/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/office) -"AJ" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aAH" = ( /obj/machinery/alarm, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"AK" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"AL" = ( -/turf/simulated/wall/r_wall/prepainted/security, -/area/outreach/outpost/security/b1) -"AM" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/maint/passage/b1/east/junct) +"aAI" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aAJ" = ( +/turf/simulated/wall, +/area/outreach/outpost/restrooms) +"aAK" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, /turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"AN" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "OH_brig_desk_shutters" - }, -/obj/machinery/door/window/southright{ - dir = 2; - icon_state = "right" +/area/outreach/outpost/maint/passage/b1/east/junct) +"aAL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/autoset, +/obj/effect/catwalk_plated/dark, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/office) -"AO" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/alarm, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"AP" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"AQ" = ( +/area/outreach/outpost/command/hall) +"aAM" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement1) +"aAN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aAO" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"aAP" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"aAQ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden, /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -14143,7 +14011,7 @@ /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"AR" = ( +"aAR" = ( /obj/effect/floor_decal/corner/yellow/border{ icon_state = "bordercolor"; dir = 8 @@ -14152,97 +14020,140 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete, /area/exoplanet/outreach/underground/d1) -"AS" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +"aAS" = ( +/obj/machinery/door_timer{ + id_tag = "OB_Cell1" + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aAT" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/machinery/camera/network/security, +/obj/machinery/faxmachine/mapped, +/obj/structure/table/woodentable/maple, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aAU" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"aAV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/janitorial/hall) -"AT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/cat_hide, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/effect/floor_decal/spline/plain/pink, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"AU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"AV" = ( -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"AW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/effect/floor_decal/spline/plain/pink{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aAW" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 1 + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"AX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aAX" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, +/obj/structure/table/steel, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"AY" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"aAY" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"AZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 10 +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c1{ + icon_state = "closed"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/brig) +"aAZ" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"Ba" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"aBa" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aBb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -14254,54 +14165,51 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Bb" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 1 +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c2{ + icon_state = "closed"; + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Bc" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "OH_brig_desk_shutters" +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/brig) +"aBc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/table/steel_reinforced, -/obj/structure/window/reinforced, -/obj/structure/plushie/beepsky, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/office) -"Bd" = ( +/area/outreach/outpost/security/b1/hallway) +"aBd" = ( /turf/simulated/wall, /area/outreach/outpost/maint/passage/b1/east/junct) -"Be" = ( +"aBe" = ( /obj/structure/cable/blue{ icon_state = "1-4" }, -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/effect/catwalk_plated, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/catwalk_plated, +/obj/structure/reagent_dispensers/watertank/firefighter, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/north/atmos) -"Bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"Bg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +"aBf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 10 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/b1) -"Bh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -14310,132 +14218,138 @@ icon_state = "11-supply"; dir = 5 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"aBg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"Bi" = ( +"aBh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"aBi" = ( /obj/structure/sign/warning/moving_parts{ - dir = 1; icon_state = "movingparts"; + dir = 1; pixel_y = -32 }, /obj/structure/cable/blue{ icon_state = "0-8" }, /obj/structure/sign/warning/high_voltage{ - dir = 8; icon_state = "shock"; + dir = 8; pixel_x = 32; pixel_y = 0 }, -/obj/machinery/power/smes/buildable/preset/outreach, +/obj/machinery/power/smes/buildable/preset/outreach{ + name = "power storage unit (atmos substation)" + }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/passage/b1/north/atmos) -"Bj" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/passage/b1/north) -"Bk" = ( +"aBj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Bl" = ( -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Bm" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"aBk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Bn" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Bo" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/area/outreach/outpost/command/hall) +"aBl" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/machinery/firealarm{ - icon_state = "casing"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aBm" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/passage/b1/north) -"Bp" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aBn" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/control/cooling) +"aBo" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"aBp" = ( +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"Bq" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/blue, -/obj/machinery/porta_turret/stationary/stun, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Br" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; +"aBq" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/bed/chair{ + icon_state = "chair"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"Bs" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"aBr" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/control/servers/mainframe_room) +"aBs" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -14445,207 +14359,234 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Bt" = ( +/area/outreach/outpost/security/b1/brig) +"aBt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Bu" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway) +"aBu" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "2-8" + icon_state = "0-8" }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Bv" = ( -/obj/structure/bed/chair/office{ - icon_state = "officechair"; +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/access) +"aBv" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 8 }, /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"Bw" = ( +"aBw" = ( /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"Bx" = ( +"aBx" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/maint/passage/b1/east/junct) -"By" = ( -/obj/machinery/power/apc/hyper, +"aBy" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 9 + icon_state = "1-2" }, /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "2-8" }, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "2-4" }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Bz" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/machinery/door/airlock/glass/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/servers/mainframe_room) +"aBz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aBA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue{ - icon_state = "0-2" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/servers) -"BA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"aBB" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"BB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/blue{ - icon_state = "1-2" +/area/outreach/outpost/control/generators) +"aBC" = ( +/obj/structure/sign/department/telecomms{ + icon_state = "tcomm"; + dir = 4; + pixel_x = -32 }, /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"BC" = ( -/obj/structure/table/steel, +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aBD" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/control/servers/controller_room) +"aBE" = ( +/obj/machinery/power/breakerbox/activated, +/obj/structure/sign/warning/high_voltage{ + icon_state = "shock"; + dir = 8; + pixel_x = 32; + pixel_y = 0 + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"aBF" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"BD" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue{ - icon_state = "0-2" +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBG" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/storage) -"BE" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aBH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; - dir = 1 + dir = 4 }, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"BF" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"BG" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"aBI" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/generators) +"aBJ" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 6 + dir = 8 }, -/obj/machinery/turretid/stun{ - icon_state = "control_stun"; - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aBK" = ( +/obj/machinery/door_timer{ + id_tag = "OB_Cell2" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"BH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/machinery/power/apc, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"BI" = ( +"aBM" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, /obj/structure/cable/blue{ - icon_state = "0-4" + icon_state = "2-8" }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/cable/blue{ + icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/machinery/door/airlock/glass/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/servers/controller_room) +"aBN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/cooling) -"BJ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -14654,290 +14595,232 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"BK" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"BL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aBP" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aBQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"aBR" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/obj/machinery/power/apc, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"BM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"BN" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aBS" = ( +/obj/machinery/door_timer{ + id_tag = "OB_Cell3" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBT" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/armory) +"aBU" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aBV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"BO" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBW" = ( +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aBX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aBY" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aBZ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"BP" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aCa" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aCb" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aCc" = ( /obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"BQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"BR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"BS" = ( -/obj/machinery/light_switch, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aCd" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 + dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"BT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/area/outreach/outpost/security/b1/brig) +"aCe" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/visible{ + icon_state = "map"; dir = 4 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; +/obj/machinery/meter, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aCf" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"BU" = ( +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aCg" = ( +/obj/machinery/fabricator, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aCh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"BV" = ( -/obj/machinery/door/airlock/glass/security{ - dir = 8; - icon_state = "closed"; - id_tag = "OH_brig_cell2_bolt" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aCi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/cell/B) -"BW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"BX" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"BY" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"BZ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Ca" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/obj/structure/closet/crate/trashcart, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"Cb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/spline/plain/green, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"Cc" = ( -/obj/machinery/material_processing/extractor, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Cd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Ce" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb_map" - }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Cf" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Cg" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"Ch" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +"aCj" = ( +/obj/effect/decal/cleanable/generic, +/obj/structure/closet/emcloset/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"aCk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"Ci" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 10 +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Cj" = ( -/obj/effect/floor_decal/spline/plain/brown, -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Ck" = ( -/obj/structure/closet/jcloset, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/effect/floor_decal/spline/plain/purple, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"Cl" = ( +"aCl" = ( /obj/machinery/reagent_temperature, /obj/structure/table/steel_reinforced, /obj/machinery/light{ @@ -14951,65 +14834,63 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"Cm" = ( -/turf/simulated/wall, -/area/outreach/outpost/stairwell/basement1) -"Cn" = ( -/turf/simulated/wall, -/area/outreach/outpost/janitorial) -"Co" = ( +"aCm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Cp" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "1-4" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Cq" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/effect/floor_decal/spline/plain/pink{ +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aCn" = ( +/turf/simulated/wall, /area/outreach/outpost/janitorial) -"Cr" = ( -/obj/structure/cable/blue{ - icon_state = "2-4" +"aCo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/hydrant, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aCp" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aCq" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aCr" = ( /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Cs" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; dir = 1 }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aCs" = ( /obj/effect/floor_decal/spline/plain/purple, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"Ct" = ( +"aCt" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -15023,77 +14904,87 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/b1) -"Cu" = ( -/obj/structure/rack/dark, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 10 +"aCu" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/item/pickaxe/drill, -/obj/item/pickaxe/drill, -/obj/item/pickaxe/drill, -/obj/item/pickaxe/drill, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"Cv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 6 +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/conveyor{ - dir = 4; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aCv" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; dir = 1 }, +/obj/structure/flaps/airtight, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aCw" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Cw" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"aCx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"aCy" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"Cx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/area/outreach/outpost/hallway/east/basement1) +"aCz" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"Cy" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aCA" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"Cz" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"CA" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"CB" = ( +"aCB" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, /obj/machinery/alarm{ icon_state = "alarm0"; - dir = 1 + dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"CC" = ( +/area/outreach/outpost/hallway/south/basement1) +"aCC" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 8 @@ -15104,69 +14995,100 @@ }, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"CD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, +"aCD" = ( /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/control) -"CE" = ( -/obj/machinery/alarm, +"aCE" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"CF" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"CG" = ( +/area/outreach/outpost/hallway/south/basement1) +"aCF" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"CH" = ( +/area/outreach/outpost/maint/passage/b1/east/junct) +"aCG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"CI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/area/outreach/outpost/security/b1) +"aCH" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"CJ" = ( -/obj/machinery/conveyor{ - dir = 2; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 5 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aCI" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"CK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/machinery/vending/sol, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aCJ" = ( +/obj/abstract/landmark/skip_test, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aCK" = ( /obj/structure/cable/orange{ icon_state = "1-2" }, @@ -15174,249 +15096,285 @@ /obj/abstract/landmark/skip_test, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"CL" = ( +"aCL" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"CM" = ( -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "OH_brig_desk_shutters" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/southright, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/office) -"CN" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/turretid/stun{ - icon_state = "control_stun"; - dir = 8 + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_s_alck_inner" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"CO" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/south) +"aCM" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"CP" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"aCN" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"CQ" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/hall) +"aCO" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"CR" = ( -/obj/machinery/vending/cola{ - icon_state = "Cola_Machine"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining) +"aCP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"CS" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aCQ" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 9 - }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 + dir = 10 }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/structure/cable/yellow, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"CT" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"CU" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/mining/b1/processing) -"CV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 5 +/area/outreach/outpost/security/b1/office) +"aCR" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/meter, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"CW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 9 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"CX" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/mining) +"aCS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aCT" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 1 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"CY" = ( -/obj/structure/bed/chair{ - icon_state = "chair"; +/area/outreach/outpost/security/b1/hallway) +"aCU" = ( +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aCV" = ( +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/structure/flaps/airtight, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aCW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aCX" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aCY" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"CZ" = ( -/obj/structure/table/steel, -/obj/machinery/firealarm{ - icon_state = "casing"; +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"aCZ" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"Da" = ( -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown, -/obj/item/crowbar/cheap, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining) +"aDa" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/power/smes/batteryrack/outreach, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/mining/b1/foyer) -"Db" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +"aDb" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/item/radio/intercom, -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"Dc" = ( -/obj/structure/table/steel_reinforced, -/obj/item/ashtray, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/lobby) -"Dd" = ( -/obj/machinery/conveyor{ - dir = 2; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" +"aDc" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/no_grille/prepainted/medical, +/turf/simulated/floor/plating, +/area/outreach/outpost/medbay/triage) +"aDd" = ( +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/abstract/landmark/skip_test, +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/d1) +"aDe" = ( +/obj/machinery/conveyor/outreach/mining/stacker{ + icon_state = "conveyor0"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"De" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 4 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/mining/b1/processing) -"Df" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +"aDf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Dg" = ( -/obj/structure/cable/blue{ - icon_state = "1-8" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance/outreach/mining{ + icon_state = "closed" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/southeast) +"aDg" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"Dh" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"aDh" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/outreach/outpost/security/b1/brig) -"Di" = ( -/obj/effect/wallframe_spawn/reinforced, +"aDi" = ( /obj/machinery/door/firedoor/autoset, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "OH_brig_desk_shutters" + }, +/obj/structure/table/steel_reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/structure/window/reinforced, /turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/brig) -"Dj" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/security/b1/office) +"aDj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/obj/machinery/door/airlock/security{ - icon_state = "closed" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/brig) -"Dk" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aDk" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"Dl" = ( +"aDl" = ( /obj/machinery/firealarm{ icon_state = "casing"; dir = 8 @@ -15424,7 +15382,7 @@ /obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement1) -"Dm" = ( +"aDm" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 4 @@ -15432,291 +15390,283 @@ /obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/basement1) -"Dn" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow, -/obj/machinery/light{ - icon_state = "tube_map"; +"aDn" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/highsecurity/outreach/telecom{ + icon_state = "closed"; dir = 4 }, -/obj/structure/cable/green{ - icon_state = "0-8" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control) -"Do" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control) +"aDo" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining) +"aDp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"Dp" = ( -/obj/machinery/door/firedoor/autoset, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 9 + dir = 4 }, -/obj/machinery/door/airlock/glass/atmos{ - icon_state = "closed"; - dir = 1 +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/foyer) +"aDq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/atmospherics/b1/hall) -"Dq" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 4 }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/medbay/lobby) -"Dr" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +"aDr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/caution, -/obj/item/chems/spray/cleaner, -/obj/item/chems/spray/cleaner, -/obj/item/chems/spray/cleaner, -/obj/item/chems/spray/cleaner, -/obj/item/chems/spray/cleaner, -/obj/item/chems/spray/cleaner, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/pink{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/item/cat_hide{ + name = "runtime hide" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 8 + dir = 6 }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/janitorial) -"Ds" = ( -/obj/structure/bed/chair/janicart, -/obj/item/janicart_key, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"Dt" = ( +"aDs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aDt" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" - }, -/obj/effect/wallframe_spawn/reinforced, /obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/cooling) -"Du" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Dv" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"Dw" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 +/obj/structure/cable/blue{ + icon_state = "0-4" }, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Dx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/access) +"aDu" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aDv" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/office) +"aDw" = ( +/obj/machinery/door/firedoor, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/security/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/lockers) +"aDx" = ( +/obj/structure/rack/dark, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/item/clothing/mask/gas/budget, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/effect/floor_decal/spline/plain/purple{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aDy" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/entrance) -"Dy" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/green, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"Dz" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aDz" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "1-2" }, /obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/northwest/airlock) -"DA" = ( +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"aDA" = ( +/obj/structure/rack, +/obj/item/auto_cpr, +/obj/item/auto_cpr, +/obj/item/auto_cpr, +/obj/item/auto_cpr, +/obj/item/auto_cpr, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/storage/toggle/fr_jacket/ems, +/obj/item/clothing/suit/storage/toggle/fr_jacket, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/structure/closet, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 + dir = 5 }, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/surgery, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, +/obj/item/storage/box/taperolls/medical, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"DB" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 6 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/structure/cable/blue{ - icon_state = "0-8" - }, -/obj/machinery/network/message_server, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"DC" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"DD" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/area/outreach/outpost/medbay/storage) +"aDB" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/control/servers/uplink_room) +"aDC" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/door/airlock/highsecurity{ - dir = 4; - icon_state = "closed" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control) -"DE" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 - }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"aDD" = ( /obj/structure/cable/blue{ icon_state = "4-8" }, -/obj/structure/cable/blue{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent, +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aDE" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "0-8" + icon_state = "0-4" }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"DF" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/mainframe_room) +"aDF" = ( /obj/structure/cable/yellow, /obj/machinery/light/small/wired{ icon_state = "bulb_map"; @@ -15728,131 +15678,136 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"DG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - icon_state = "11"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +"aDG" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "0-8" + icon_state = "1-2" }, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/servers) -"DH" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/machinery/door/airlock/glass/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/servers/uplink_room) +"aDH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair"; + dir = 4 }, -/obj/machinery/light/small, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 10 + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/lab/entrance) -"DI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aDI" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "0-8" }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/mainframe_room) +"aDJ" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"DJ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 - }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aDK" = ( +/obj/machinery/network/mainframe/account/outreach, /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "0-2" }, /obj/structure/cable/blue{ - icon_state = "1-4" - }, -/obj/structure/cable/blue, -/obj/machinery/network/acl/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"DK" = ( -/obj/machinery/door/airlock/external/glass{ - icon_state = "closed"; - dir = 8 + icon_state = "2-4" }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 6 }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/obj/machinery/alarm/server{ + icon_state = "alarm0"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/servers) -"DL" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"DM" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aDL" = ( +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + icon_state = "1-4" + }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "11"; - dir = 8 + dir = 9 }, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aDM" = ( +/obj/machinery/network/mainframe/files/outreach, /obj/structure/cable/blue{ - icon_state = "1-8" + icon_state = "0-2" }, /obj/structure/cable/blue{ - icon_state = "0-2" + icon_state = "2-8" }, -/obj/machinery/network/mainframe/files/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"DN" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 }, -/obj/structure/cable/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aDN" = ( /obj/structure/cable/blue{ icon_state = "1-4" }, /obj/structure/cable/blue{ icon_state = "1-8" }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/servers) -"DO" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aDO" = ( /obj/structure/disposalpipe/up{ icon_state = "pipe-u"; dir = 1 @@ -15860,66 +15815,72 @@ /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"DP" = ( -/obj/structure/cable/green{ +"aDP" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"DQ" = ( -/obj/machinery/door/airlock/external/glass{ - icon_state = "closed"; - dir = 8 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/servers) -"DR" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"aDQ" = ( +/obj/structure/cable/green{ + icon_state = "1-4" }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 8 +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"aDR" = ( +/obj/structure/sign/warning/server_room{ + icon_state = "server"; + dir = 4; + pixel_x = -32 }, /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 4 + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"DS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +"aDS" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/effect/catwalk_plated/dark, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/control/hall) -"DT" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +"aDT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"DU" = ( +"aDU" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 8 @@ -15931,39 +15892,48 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"DV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; - dir = 5 - }, +"aDV" = ( +/obj/machinery/network/modem/outreach, /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "0-2" }, /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "2-4" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 6 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/alarm/server{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"DW" = ( -/obj/structure/bed/chair/office{ - icon_state = "officechair"; - dir = 8 +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aDW" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "2-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"DX" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 6 + }, +/obj/machinery/alarm/server{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aDX" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/item/stool/wood, /obj/effect/floor_decal/spline/plain/red{ @@ -15976,16 +15946,20 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/A) -"DY" = ( -/obj/effect/floor_decal/industrial/loading{ - icon_state = "loadingarea"; - dir = 4 +"aDY" = ( +/obj/machinery/material_processing/stacker, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/ore_box, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/mining/b1/processing) -"DZ" = ( +"aDZ" = ( /obj/machinery/power/apc/high{ icon_state = "apc0"; dir = 4 @@ -15999,493 +15973,464 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/A) -"Ea" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - icon_state = "map_off"; - name = "gas pump (coolant flush)" - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Eb" = ( +"aEa" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/computer/internet_uplink/outreach{ - icon_state = "computer"; - dir = 4 +/obj/structure/cable/blue{ + icon_state = "1-4" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 +/obj/structure/cable/blue{ + icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"Ec" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - icon_state = "map_universal"; +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aEb" = ( +/obj/structure/cable/blue{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Ed" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "0-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Ee" = ( -/obj/machinery/alarm, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aEc" = ( +/obj/machinery/network/router/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" + }, +/obj/structure/cable/blue{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aEd" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 1 + dir = 8 + }, +/obj/machinery/computer/message_monitor{ + icon_state = "computer"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aEe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/blue{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Ef" = ( +/area/outreach/outpost/control/cooling) +"aEf" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 8 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"Eg" = ( +"aEg" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"aEh" = ( +/obj/machinery/network/mainframe/logs/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" + }, /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Eh" = ( -/obj/machinery/computer/design_console{ - icon_state = "computer"; - dir = 4 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aEi" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "0-4" }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/controller_room) +"aEj" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 10 +/obj/structure/cable/blue{ + icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"Ei" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/controller_room) +"aEk" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "11"; - dir = 9 + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aEl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aEm" = ( +/obj/machinery/network/mainframe/records/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" }, /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/structure/cable/blue, -/obj/machinery/network/area_controller/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Ej" = ( -/obj/machinery/porta_turret/stationary/stun, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"Ek" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 6 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aEn" = ( +/obj/machinery/network/acl/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" }, /obj/structure/cable/blue{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aEo" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/blue{ - icon_state = "0-2" + icon_state = "0-8" }, -/obj/machinery/network/mainframe/logs/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"El" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/uplink_room) +"aEp" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aEq" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/controller_room) +"aEr" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/mining/b1/processing_hall) +"aEs" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aEt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/pink{ +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aEu" = ( +/obj/machinery/reagent_temperature/cooler, +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 4 + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Em" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aEv" = ( /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"En" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aEw" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Eo" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/double/glass/mining/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/processing_hall) +"aEx" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/processing_hall) +"aEy" = ( +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; dir = 8 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/servers) -"Ep" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/railing/mapped, +/turf/open, +/area/outreach/outpost/maint/waste/b1) +"aEz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/structure/closet/jcloset, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"Eq" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/structure/cable/blue{ +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aEA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/cable/blue, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Er" = ( -/obj/machinery/material_processing/smeltery, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aEB" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Es" = ( -/obj/item/plunger, -/obj/item/plunger, -/obj/item/plunger, -/obj/item/plunger, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/structure/rack, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"Et" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; +/obj/machinery/door/airlock/double/glass/mining/outreach{ + icon_state = "preview"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/cable/blue{ - icon_state = "0-4" + icon_state = "2-8" }, /obj/structure/cable/blue{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/machinery/internet_uplink/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Eu" = ( -/obj/machinery/reagent_temperature/cooler, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; - dir = 8 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/storage) +"aEC" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"Ev" = ( -/obj/machinery/door_timer{ - id_tag = "OB_Cell1" +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aED" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 9 }, /obj/machinery/light_switch/on, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Ew" = ( -/obj/machinery/conveyor{ - dir = 4; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" - }, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Ex" = ( -/obj/machinery/material_processing/stacker, -/obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "stripecee"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Ey" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/plasticflaps/airtight, -/obj/machinery/conveyor{ - dir = 4; - icon_state = "conveyor0"; - id_tag = "OH_mining_conveyor_1" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/processing) -"Ez" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aEE" = ( +/obj/structure/closet/secure_closet/personal/empty, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 5 - }, -/obj/structure/closet/secure_closet/brig, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 1 + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aEF" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/machinery/alarm, +/obj/machinery/flasher/security_desk, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"EA" = ( +/area/outreach/outpost/security/b1) +"aEG" = ( /obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/hygiene/drain, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"EB" = ( -/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/blue{ + icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"EC" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"ED" = ( -/obj/structure/table/steel, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/obj/item/chems/condiment/small/peppermill, -/obj/item/chems/condiment/small/saltshaker, -/obj/effect/floor_decal/spline/fancy/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"EE" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aEH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/structure/closet/secure_closet/security/outreach/gear, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 5 + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"EF" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"EG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/spline/plain/blue{ +/area/outreach/outpost/security/b1/brig) +"aEI" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"EH" = ( -/obj/structure/table/steel, -/obj/machinery/light, -/obj/item/chems/drinks/teapot, -/obj/effect/floor_decal/spline/fancy/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"EI" = ( -/obj/structure/table/steel, -/obj/structure/hygiene/sink, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 + dir = 5 }, -/obj/effect/floor_decal/spline/fancy/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"EJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aEJ" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/structure/cable/blue, +/turf/simulated/floor/plating, /area/outreach/outpost/mining/b1/storage) -"EK" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/item/auto_cpr, -/obj/item/auto_cpr, -/obj/item/auto_cpr, -/obj/item/auto_cpr, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"EL" = ( +"aEK" = ( +/obj/machinery/network/relay/wall_mounted/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aEL" = ( /obj/abstract/level_data_spawner/exoplanet/outreach/underground, /turf/unsimulated/rock, /area/exoplanet/outreach/underground/d1) -"EM" = ( +"aEM" = ( /obj/structure/cable/orange{ icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"EN" = ( +"aEN" = ( /obj/structure/cable/orange{ icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"EO" = ( -/obj/effect/floor_decal/industrial/loading{ - icon_state = "loadingarea"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, +"aEO" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/conveyor_switch/oneway/outreach/mining/stacker, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"EP" = ( +/area/outreach/outpost/mining/b1/processing) +"aEP" = ( /obj/structure/cable/yellow, /obj/machinery/light/small/wired{ icon_state = "bulb_map"; @@ -16497,7 +16442,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/exoplanet/outreach/underground/d1) -"EQ" = ( +"aEQ" = ( /obj/structure/cable/orange{ icon_state = "1-4" }, @@ -16508,31 +16453,30 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"ER" = ( +"aER" = ( /obj/structure/door/osmium, /obj/structure/cable/orange{ icon_state = "1-2" }, /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach/underground/d1) -"ES" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" +"aES" = ( +/obj/structure/sign/department/security/alt{ + icon_state = "sec_cuff"; + dir = 4; + pixel_x = -32 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"ET" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aET" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"EU" = ( +"aEU" = ( /obj/structure/cable/orange{ icon_state = "1-8" }, @@ -16542,207 +16486,226 @@ }, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"EV" = ( -/obj/machinery/conveyor{ - dir = 1; - id_tag = "OH_mining_conveyor_1" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +"aEV" = ( +/obj/machinery/material_processing/smeltery, +/obj/effect/floor_decal/industrial/warning/cee, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/mining/b1/processing) -"EW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"aEW" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/processing_hall) +"aEX" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/book/manual/atmospipes, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aEY" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"EX" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"EY" = ( +"aEZ" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"aFa" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; dir = 4 }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"EZ" = ( -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aFb" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aFc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining) +"aFd" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Fa" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aFe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aFf" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, +/obj/structure/banner_frame/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aFg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aFh" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aFi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "OH_brig_desk_shutters" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fd" = ( -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fe" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ +/obj/machinery/door/airlock/glass/security/outreach/public{ icon_state = "closed"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Ff" = ( -/obj/structure/hygiene/drain, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1) +"aFj" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/mining/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/eva) +"aFk" = ( +/obj/effect/floor_decal/spline/plain/red, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aFl" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fh" = ( -/obj/structure/hygiene/toilet, -/obj/structure/window/basic{ - icon_state = "window"; - dir = 8 +/obj/structure/table/woodentable/maple, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aFm" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 }, -/obj/structure/curtain/open/shower, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fi" = ( -/obj/structure/hygiene/toilet, -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aFn" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; dir = 4 }, -/obj/structure/window/basic{ - icon_state = "window"; - dir = 8 - }, -/obj/structure/curtain/open/shower, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fj" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb_map" - }, -/obj/structure/hygiene/sink, -/obj/structure/table, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fk" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aFo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aFp" = ( +/obj/structure/sign/directions/medical{ + icon_state = "direction_med"; + dir = 1; + pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fl" = ( -/obj/structure/hygiene/drain, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/obj/structure/sign/directions/security{ + icon_state = "direction_sec"; + dir = 1; + pixel_y = 24 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aFq" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fn" = ( -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fo" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Fp" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -16752,137 +16715,117 @@ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/chapel) +"aFr" = ( +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 +"aFs" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_s_alck_inner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/south) +"aFt" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fs" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/light_switch, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Ft" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/item/radio/intercom, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Fu" = ( -/obj/machinery/light/small, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Fv" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Fw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"aFu" = ( +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 8 }, -/obj/machinery/light/small, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Fx" = ( +/obj/structure/cable/yellow, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/command, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/command_room) -"Fy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Fz" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"FA" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aFv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aFw" = ( +/obj/structure/stairs/long, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aFx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/office) +"aFy" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 8 }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aFz" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/door/airlock/civilian{ - icon_state = "closed"; +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aFA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/catwalk_plated, +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"FB" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aFB" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"FC" = ( -/obj/structure/table, -/obj/item/storage/box/detergent, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"FD" = ( +/obj/structure/flora/pottedplant/floorleaf, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement1) +"aFC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aFD" = ( /obj/machinery/power/apc/super{ icon_state = "apc0"; dir = 4 @@ -16899,84 +16842,115 @@ icon_state = "spline_plain"; dir = 6 }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"FE" = ( +"aFE" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ icon_state = "11"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/structure/cable/blue{ - icon_state = "0-8" + dir = 10 }, -/obj/machinery/internet_repeater, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"FF" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/beakers, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"FG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aFF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction/chemistry{ + icon_state = "pipe-j1s"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aFG" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/blue{ - icon_state = "1-2" + icon_state = "0-4" }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"FH" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 5 +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/uplink_room) +"aFH" = ( +/obj/machinery/network/message_server, +/obj/structure/cable/blue{ + icon_state = "0-2" }, /obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aFI" = ( /obj/structure/cable/blue{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/network/mainframe/records/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"FI" = ( -/obj/structure/cable/green{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"FJ" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aFJ" = ( +/obj/structure/sign/warning/secure_area{ + icon_state = "securearea2"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/basement1) -"FK" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/flora/pottedplant/shoot, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aFK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled/white, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/window/reinforced/outreach/chemistry{ + icon_state = "leftsecure"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/lab) -"FL" = ( +"aFL" = ( /obj/machinery/chem_master, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; @@ -16985,45 +16959,84 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"FM" = ( +"aFM" = ( /obj/machinery/chemical_dispenser, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"FN" = ( +"aFN" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 8 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"FO" = ( -/obj/effect/floor_decal/spline/plain/purple{ - icon_state = "spline_plain"; +"aFO" = ( +/obj/machinery/smartfridge/chemistry{ + icon_state = "fridge_sci"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"FP" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"FQ" = ( -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/pink, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"FR" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"FS" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab) +"aFP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aFQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aFR" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"aFS" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; dir = 8 @@ -17034,39 +17047,40 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"FT" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"FU" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ +"aFT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; - dir = 8 - }, -/obj/structure/cable/blue{ - icon_state = "1-4" + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/structure/cable/blue{ - icon_state = "0-4" +/obj/effect/floor_decal/spline/plain/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/network/mainframe/software/outreach, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"FV" = ( -/obj/machinery/light_switch, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aFU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"FW" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aFV" = ( +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aFW" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 4 @@ -17074,497 +17088,522 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"FX" = ( -/obj/structure/cable/blue{ - icon_state = "0-8" +"aFX" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/sign/warning/high_voltage{ - dir = 8; - icon_state = "shock"; - pixel_x = 32; - pixel_y = 0 +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/control/generators) +"aFY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/power/smes/buildable/preset/outreach, -/turf/simulated/floor/plating, -/area/outreach/outpost/control) -"FY" = ( -/obj/structure/bed/chair/office{ - icon_state = "officechair"; - dir = 8 +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "ob1_comm_blast_doors"; - name = "lockdown button" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"FZ" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/hall) +"aFZ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"Ga" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 8 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"aGa" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Gb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aGb" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/lab/entrance) -"Gc" = ( -/obj/machinery/vending/coffee{ - icon_state = "coffee"; +"aGc" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Gd" = ( -/obj/structure/sign/warning/server_room{ - dir = 4; - icon_state = "server"; - pixel_x = -32 - }, /obj/structure/cable/blue{ icon_state = "1-2" }, +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aGd" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 8 }, -/obj/machinery/porta_turret/stationary/stun, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"Ge" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aGe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 }, -/obj/machinery/light/small, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gg" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/machinery/light/small, +/obj/effect/floor_decal/spline/plain/orange, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gh" = ( +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aGf" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/structure/sign/warning/high_voltage{ - dir = 4; - icon_state = "shock"; - pixel_x = -32; - pixel_y = 0 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, /obj/effect/catwalk_plated, +/obj/machinery/dummy_airlock_controller{ + icon_state = "airlock_control_off"; + dir = 1; + id_tag = "OH_l2_s_alck" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gi" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +/area/outreach/outpost/hallway/south/basement1) +"aGg" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/stairwell/basement1/atmos) +"aGh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security/outreach/warden{ + icon_state = "closed" }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/supply) +"aGi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"Gj" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/sign/warning/high_voltage{ +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aGj" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + icon_state = "map_vent"; dir = 8; - icon_state = "shock"; - pixel_x = 32; - pixel_y = 0 + id_tag = "OH_l2_s_alck_pump" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "OH_l2_s_alck"; + tag_exterior_door = "OH_l2_s_alck_outer"; + tag_interior_door = "OH_l2_s_alck_inner"; + tag_airpump = "OH_l2_s_alck_pump"; + tag_chamber_sensor = "OH_l2_s_alck_sensor"; + tag_exterior_sensor = "OH_l2_s_alck_exterior_sensor"; + tag_interior_sensor = "OH_l2_s_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l2_s_alck_alarm"; + tag_secure = 1 }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gl" = ( -/obj/item/bikehorn, -/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGk" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + icon_state = "map"; + dir = 4 + }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Gm" = ( +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aGl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aGm" = ( /obj/machinery/door/airlock/hatch/bolted, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/b1/north/atmos) -"Gn" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +"aGn" = ( +/obj/machinery/airlock_sensor{ + dir = 8; + pixel_x = 0; + id_tag = "OH_l2_s_alck_sensor" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Go" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGo" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/power/terminal{ - icon_state = "term"; +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + icon_state = "map_vent"; + dir = 1; + id_tag = "OH_l2_s_alck_pump" + }, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 4 + }, +/obj/structure/hygiene/shower/emergency{ + icon_state = "eshower"; + dir = 4; + color = "#c9a344" + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGq" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/obj/machinery/light/small, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gp" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aGr" = ( +/obj/machinery/alarm/nobreach/airlock{ + icon_state = "alarm0"; + dir = 8; + id_tag = "OH_l2_s_alck_alarm" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Gq" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 9 +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "OH_l2_s_alck_pump_out_internal" }, -/obj/machinery/camera/network/security, -/obj/structure/table/woodentable/walnut, -/obj/item/paper_bin, -/obj/item/sticky_pad, -/obj/item/stamp/denied, -/obj/item/pen/fancy, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Gr" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Gs" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGs" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/machinery/power/apc/high{ +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aGt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ icon_state = "apc0"; - dir = 1 - }, -/obj/machinery/photocopier, -/obj/machinery/firealarm{ - icon_state = "casing"; dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 5 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Gt" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"Gu" = ( -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Gv" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aGu" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Gw" = ( -/obj/machinery/vending/coffee{ - icon_state = "coffee"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aGv" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 8 }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Gx" = ( -/obj/structure/filing_cabinet, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/area/outreach/outpost/security/b1/lockers) +"aGw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Gy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - icon_state = "11"; - dir = 5 +/obj/machinery/door/airlock/mining/outreach{ + icon_state = "closed"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/foyer) +"aGx" = ( /obj/structure/cable/blue{ - icon_state = "1-4" + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/brown, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"Gz" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/spline/plain/pink, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"GA" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - icon_state = "map_on"; - name = "gas pump (to cooling loop)" - }, -/obj/structure/cable/blue{ - icon_state = "1-4" - }, +/area/outreach/outpost/mining/b1/office) +"aGy" = ( /obj/structure/cable/blue{ - icon_state = "1-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 6 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"GB" = ( -/obj/structure/hygiene/sink, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"GC" = ( -/obj/structure/table/steel_reinforced, -/obj/item/toy/desk/dippingbird, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"GD" = ( -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/no_grille/prepainted/medical, -/turf/simulated/floor/plating, -/area/outreach/outpost/medbay/triage) -"GE" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aGz" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 + dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/computer/modular/preset/cardslot/command, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"GF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aGA" = ( +/obj/machinery/internet_repeater, +/obj/structure/cable/blue{ + icon_state = "0-2" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"GG" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/cable/yellow{ +/obj/structure/cable/blue{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GH" = ( -/obj/machinery/alarm, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GI" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 10 }, -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"GJ" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 5 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aGB" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"GK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"GL" = ( +/obj/machinery/door/airlock/glass/mining/outreach/qm, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/office) +"aGC" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aGD" = ( +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 8; + pixel_y = 24 + }, +/obj/structure/sign/directions/medical{ + icon_state = "direction_med"; + dir = 4; + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aGE" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aGF" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, /obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/machinery/dummy_airlock_controller{ - dir = 1; - icon_state = "airlock_control_off"; - id_tag = "OH_l2_s_alck" +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"GM" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aGG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 + }, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aGH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 8 }, -/obj/structure/filing_cabinet, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"GN" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aGI" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GO" = ( -/obj/structure/table/steel_reinforced, -/obj/item/bell, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"GP" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aGJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"GQ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GR" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aGK" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aGL" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-4" }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ icon_state = "map-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GS" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/machinery/power/apc/super, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"GT" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; - dir = 4 + dir = 8 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"aGM" = ( /obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"GU" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/area/outreach/outpost/command/office) +"aGN" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"GV" = ( -/obj/structure/rack, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aGO" = ( +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/structure/disposalpipe/junction/mirrored, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 8 @@ -17573,145 +17612,243 @@ icon_state = "tube_map"; dir = 8 }, -/obj/item/defibrillator/loaded, -/obj/item/defibrillator/loaded, -/obj/item/defibrillator/loaded, -/obj/item/defibrillator/loaded, -/obj/item/defibrillator/loaded, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"GW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/area/outreach/outpost/medbay/main_hall) +"aGP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/sortjunction/medical{ + icon_state = "pipe-j1s"; dir = 8 }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"GX" = ( -/obj/structure/noticeboard, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 1 +/area/outreach/outpost/medbay/main_hall) +"aGQ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/disposalpipe/segment/bent, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"GY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/catwalk_plated, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aGR" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"GZ" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"aGS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"aGT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 }, -/obj/machinery/disposal, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Ha" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aGU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/table/woodentable/walnut, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aGV" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"aGW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aGX" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/flasher/security_desk, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Hb" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 10 +/area/outreach/outpost/security/b1) +"aGY" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aGZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/structure/table/woodentable/walnut, -/obj/item/paper_bin, -/obj/item/sticky_pad, -/obj/item/stamp/denied, -/obj/item/pen/fancy, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Hc" = ( -/obj/effect/floor_decal/spline/fancy/black, -/obj/machinery/computer/modular/preset/cardslot/command{ - icon_state = "console-off"; +/area/outreach/outpost/security/b1/brig) +"aHa" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Hd" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aHb" = ( /obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"He" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 6 +/area/outreach/outpost/command/office) +"aHc" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/structure/table/woodentable/walnut, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Hf" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/brown, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Hg" = ( -/obj/effect/floor_decal/industrial/loading{ - icon_state = "loadingarea"; +/area/outreach/outpost/security/b1/lockers) +"aHd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aHe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/brown, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Hh" = ( -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"aHf" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "OH_l2_s_alck_pump_out_internal" + }, +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; dir = 1 }, -/obj/machinery/light_switch{ - icon_state = "light0"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aHg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + icon_state = "map"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 8 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/airlock/basement1/south) +"aHh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 6 + dir = 8 }, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/lab/entrance) -"Hi" = ( -/obj/machinery/material_processing/unloader, -/obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "stripecee"; - dir = 8 +"aHi" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 1; + id_tag = "OH_l2_s_alck_outer" }, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Hj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/south) +"aHj" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; dir = 8 @@ -17724,185 +17861,202 @@ /obj/item/stool/wood, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/B) -"Hk" = ( +"aHk" = ( /obj/item/radio/intercom{ icon_state = "intercom"; dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"Hl" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +"aHl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/C) -"Hm" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"aHm" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Hn" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aHn" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/outreach/outpost/security/b1/cell/B) -"Ho" = ( -/obj/machinery/material_processing/compressor, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Hp" = ( -/obj/machinery/conveyor{ +"aHo" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; dir = 1; - id_tag = "OH_mining_conveyor_1" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 6 + id_tag = "OH_l2_s_alck_outer" }, -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Hq" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/basement1/south) +"aHp" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"Hr" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/area/outreach/outpost/mining/b1/processing_hall) +"aHq" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aHr" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/B) -"Hs" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aHs" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/basement1) -"Ht" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Hu" = ( -/obj/item/radio/intercom, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Hv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/radio/intercom, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Hw" = ( -/obj/structure/cable/blue{ +"aHt" = ( +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/alarm/nobreach, -/obj/machinery/turretid/stun{ - icon_state = "control_stun"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 1 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aHu" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control/servers) -"Hx" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Hy" = ( -/obj/effect/floor_decal/spline/fancy/black, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Hz" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/area/outreach/outpost/hallway/south/basement1) +"aHv" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, -/obj/effect/floor_decal/spline/fancy/black, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"HA" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aHw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aHx" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/door/airlock/glass/security/outreach/brig, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aHy" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"HB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/outreach/outpost/control/cooling) -"HC" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; +/area/outreach/outpost/hallway/south/basement1) +"aHz" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aHA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/oxygen_pump{ - icon_state = "emerg"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"HD" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 4 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aHB" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/obj/item/scanner/health, -/obj/item/scanner/health, -/obj/item/scanner/health, -/obj/item/scanner/health, -/obj/item/scanner/health, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aHC" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"aHD" = ( /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"HE" = ( +/area/outreach/outpost/medbay/triage) +"aHE" = ( /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 @@ -17917,209 +18071,249 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/C) -"HF" = ( -/obj/structure/closet/secure_closet/medical3, +"aHF" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/cell/apc, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 4 + }, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 9 + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/machinery/light_switch, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"HG" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/spline/plain/green{ +/area/outreach/outpost/medbay/storage) +"aHG" = ( +/obj/structure/railing/mapped, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/l3closet/security/multi, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aHH" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"HH" = ( -/obj/machinery/power/apc/high, +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aHI" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aHJ" = ( /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "4-8" }, -/obj/structure/table/steel, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 10 +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"HI" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 8 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aHK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"HJ" = ( -/obj/machinery/vending/lavatory, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb_map" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"HK" = ( -/obj/machinery/washing_machine, -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"HL" = ( -/obj/machinery/washing_machine, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"HM" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"HN" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 1 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/green, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"HO" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aHL" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aHM" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aHN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 4 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"HP" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"HQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"HR" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/hydroponics) -"HS" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"HT" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aHO" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"HU" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aHP" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/machinery/light_switch{ +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"aHQ" = ( +/obj/machinery/light_switch/on{ icon_state = "light0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aHR" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 8 }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aHS" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/effect/catwalk_plated, +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aHT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"aHU" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/catwalk_plated, +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aHV" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 5 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"HV" = ( /obj/machinery/alarm{ icon_state = "alarm0"; - dir = 4 + dir = 8 }, -/obj/machinery/light_switch, -/obj/structure/closet/secure_closet/security/outreach/forensics, -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"aHW" = ( +/obj/structure/noticeboard, +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 9 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"HW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aHX" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 8 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"HX" = ( +/area/outreach/outpost/security/b1/hallway/to_brig) +"aHY" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"HY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"HZ" = ( +/area/outreach/outpost/command/hall) +"aHZ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -18132,32 +18326,39 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Ia" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/area/outreach/outpost/command/hall) +"aIa" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 8 }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/common) -"Ib" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aIb" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aIc" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, +/obj/effect/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -18166,130 +18367,96 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Ic" = ( +/area/outreach/outpost/command/hall) +"aId" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; - dir = 10 + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Id" = ( -/obj/machinery/porta_turret/stationary/stun, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/computer/modular/preset/outreach/command/telecomm{ + icon_state = "console-off"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"Ie" = ( -/obj/machinery/firealarm, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aIe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aIf" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"If" = ( -/obj/item/radio/intercom, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Ig" = ( -/obj/structure/cryofeed, -/obj/machinery/cryopod/despawner{ - icon_state = "body_scanner_0"; +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIg" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/abstract/landmark/latejoin/observer, -/turf/simulated/floor/plating, -/area/outreach/outpost/sleeproom) -"Ih" = ( -/obj/effect/floor_decal/spline/plain/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Ii" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Ij" = ( -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Ik" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Il" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/blue, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Im" = ( +/area/outreach/outpost/security/b1/armory/warden_office) +"aIh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"In" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"Io" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Ip" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"aIi" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"Iq" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -18297,162 +18464,223 @@ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"Ir" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/hall) +"aIj" = ( +/obj/machinery/network/mainframe/software/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" + }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; dir = 6 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_hall) -"Is" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aIk" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"aIl" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/obj/effect/floor_decal/spline/plain/blue, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"It" = ( -/obj/machinery/turretid/stun{ - icon_state = "control_stun"; - dir = 4 +/area/outreach/outpost/command/hall) +"aIm" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIn" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 8 + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"Iu" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 9 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 }, -/obj/structure/cable/blue{ - icon_state = "0-4" +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIo" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Iv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aIp" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 8 }, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aIq" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/l3closet/security, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Iw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Ix" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Iy" = ( +/area/outreach/outpost/security/b1/supply) +"aIr" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIs" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 4 }, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"Iz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IA" = ( -/obj/structure/table/steel, -/obj/machinery/reagentgrinder, -/obj/effect/floor_decal/spline/fancy/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"IB" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +"aIt" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IC" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/machinery/door/airlock/civilian{ - icon_state = "closed"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aIu" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aIv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"ID" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aIw" = ( +/obj/machinery/optable, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"aIx" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/southeast) +"aIy" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aIz" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aIA" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"IE" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"IF" = ( -/obj/structure/table/steel, -/obj/machinery/reagentgrinder/juicer, -/obj/effect/floor_decal/spline/fancy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"IG" = ( +/area/outreach/outpost/security/b1/forensics) +"aIB" = ( +/obj/machinery/light, +/obj/structure/bed/chair/office{ + icon_state = "officechair_preview"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aIC" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aID" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -18464,116 +18692,132 @@ icon_state = "11-supply"; dir = 4 }, -/obj/item/flashlight/lamp, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; dir = 8 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"IH" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/light, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/enzyme, -/obj/effect/floor_decal/spline/fancy/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"II" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/flour, -/obj/item/chems/condiment/enzyme, -/obj/effect/floor_decal/spline/fancy/black, +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"IJ" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aIE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"IK" = ( -/obj/item/flashlight/lamp/lava/orange, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 10 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"IL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"IM" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"aIG" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/obj/structure/mopbucket, -/obj/item/mop, -/obj/item/caution, -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 1 +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"IN" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aIH" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aII" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aIJ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/door/airlock/freezer{ - icon_state = "closed"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aIK" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aIL" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach/underground/d1) +"aIM" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aIN" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aIO" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -18583,29 +18827,26 @@ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IR" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aIQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aIR" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 8 @@ -18620,18 +18861,16 @@ }, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"IS" = ( -/obj/machinery/turretid/stun{ - icon_state = "control_stun"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 10 +"aIS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/hall) -"IT" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aIT" = ( /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -18642,83 +18881,87 @@ }, /turf/simulated/floor/tiled/dark, /area/outreach/outpost/control/hall) -"IU" = ( -/obj/effect/floor_decal/spline/plain/blue{ +"aIU" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"IV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IW" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/machinery/door/airlock/freezer{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/area/outreach/outpost/security/b1/hallway/to_brig) +"aIV" = ( +/obj/structure/closet/secure_closet/exile, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"IX" = ( -/obj/structure/cable/blue{ - icon_state = "4-8" +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIW" = ( +/obj/structure/sign/warning/armory{ + icon_state = "armory"; + dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 +/obj/effect/floor_decal/spline/plain/red, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aIX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/control) -"IY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; - dir = 9 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"IZ" = ( +"aIY" = ( +/obj/machinery/network/mainframe/empty/outreach, /obj/structure/cable/blue{ - icon_state = "2-8" + icon_state = "0-2" }, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Ja" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aIZ" = ( /obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aJa" = ( +/obj/machinery/network/bank/outreach, +/obj/structure/cable/blue{ + icon_state = "0-2" + }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; dir = 6 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/cooling) -"Jb" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aJb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -18737,7 +18980,7 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jc" = ( +"aJc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -18760,7 +19003,7 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jd" = ( +"aJd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -18783,33 +19026,24 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Je" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 4; - icon_state = "securearea"; - pixel_x = -32 +"aJe" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Jf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/orange, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/hall) -"Jg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aJf" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aJg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -18835,30 +19069,25 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jh" = ( -/obj/structure/cable/blue{ - icon_state = "0-4" +"aJh" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/workshop) -"Ji" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aJi" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/powered/scrubber, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Jj" = ( +"aJj" = ( /obj/machinery/alarm, /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/powered/scrubber, @@ -18866,7 +19095,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Jk" = ( +"aJk" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 1 @@ -18877,26 +19106,26 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Jl" = ( +"aJl" = ( /obj/machinery/computer/air_control{ - dir = 4; icon_state = "computer"; + dir = 4; input_tag = "ob_atmos_airmix_inj"; - input_toggle = 1; - out_pressure_mode = 1; output_tag = "ob_atmos_airmix_vnt"; - sensor_tag = "ob_atmos_airmix_sns" + sensor_tag = "ob_atmos_airmix_sns"; + out_pressure_mode = 1; + input_toggle = 1 }, /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jm" = ( +"aJm" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/meter, /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jn" = ( +"aJn" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 6 @@ -18905,7 +19134,7 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jo" = ( +"aJo" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ icon_state = "11"; dir = 4 @@ -18914,7 +19143,7 @@ /obj/effect/floor_decal/spline/plain/orange, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"Jp" = ( +"aJp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 9 @@ -18928,114 +19157,103 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Jq" = ( -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"Jr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +"aJq" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 }, -/obj/machinery/reagentgrinder, +/obj/structure/closet/secure_closet/research_director, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"aJr" = ( +/obj/machinery/light, +/obj/structure/table, +/obj/effect/floor_decal/spline/plain/orange, +/obj/item/hand_labeler, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aJs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"Js" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/basement1) -"Jt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aJt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"Ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 }, -/obj/structure/bed/chair/office/dark{ - icon_state = "officechair"; - dir = 4 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/entrance) +"aJu" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 }, +/obj/machinery/light/small, /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; - dir = 4 + dir = 10 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/entrance) +"aJv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/hygiene/drain, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"Jv" = ( -/obj/machinery/smartfridge/chemistry{ - icon_state = "fridge_sci"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +"aJw" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, +/obj/machinery/light, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/lab) -"Jw" = ( -/obj/machinery/airlock_sensor{ - dir = 8; - id_tag = "OH_l2_s_alck_interior_sensor"; - pixel_x = 0; - pixel_y = 0 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aJx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Jx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, -/obj/machinery/door/window/eastright, /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/lab) -"Jy" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/entrance) +"aJy" = ( /obj/effect/floor_decal/spline/plain/purple, +/obj/structure/closet/wardrobe/chemistry_white, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"Jz" = ( +"aJz" = ( /obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 6 @@ -19043,448 +19261,488 @@ /obj/structure/closet/secure_closet/chemical, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"JA" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; +"aJA" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 6 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"JB" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/item/paper_bin, -/obj/item/pen, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"JC" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aJB" = ( +/obj/effect/floor_decal/spline/plain/purple{ icon_state = "spline_plain"; dir = 8 }, -/obj/item/storage/box/bloodpacks, -/obj/item/storage/box/bloodpacks, -/obj/item/storage/box/bloodpacks, -/obj/item/storage/box/bloodpacks, -/obj/item/storage/box/bloodpacks, -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"JD" = ( -/obj/machinery/power/apc, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/floor_decal/spline/plain/pink, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"JE" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"aJC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, +/obj/structure/hygiene/drain, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"aJD" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"JF" = ( -/obj/structure/rack, -/obj/item/chems/drinks/jar, -/obj/item/hand_labeler, -/obj/item/hand_labeler, -/obj/item/storage/box/glasses/pint, -/obj/item/storage/box/glasses/pint, -/obj/item/storage/box/mousetraps, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"JG" = ( -/obj/structure/hygiene/sink, -/obj/structure/table/steel, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"JH" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/area/outreach/outpost/command/office/third) +"aJE" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/pink, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"JI" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/janitorial) -"JJ" = ( -/obj/machinery/vending/snack{ - icon_state = "snack"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aJF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"aJG" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aJH" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JK" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"JL" = ( -/obj/structure/table, +/obj/structure/banner_frame/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aJI" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/supply) +"aJJ" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, /obj/effect/floor_decal/spline/plain/green{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JM" = ( -/obj/item/remains/human, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"JN" = ( -/obj/structure/noticeboard{ - icon_state = "nboard00"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/green, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JO" = ( -/obj/effect/floor_decal/spline/plain/green, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JP" = ( -/obj/machinery/vending/snix{ - icon_state = "snix"; - dir = 8 +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aJK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/green{ - icon_state = "spline_plain"; - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JQ" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 - }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aJL" = ( +/obj/effect/floor_decal/spline/plain/blue{ icon_state = "spline_plain"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"JR" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aJM" = ( +/obj/item/remains/human, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/tracks/body{ + icon_state = "trail1"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"JS" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/turf/exterior/barren/subterrane/outreach, +/area/exoplanet/outreach/underground/d1) +"aJN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"JT" = ( -/obj/machinery/smartfridge/drying_rack, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aJO" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/outreach/outpost/cafeteria/kitchen/backroom) -"JU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/orange, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/basement1) -"JV" = ( +"aJP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aJQ" = ( /obj/effect/floor_decal/spline/plain/brown, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/drill, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"JW" = ( -/obj/machinery/door_timer{ - id_tag = "OB_Cell2" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 9 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aJR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"JX" = ( -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"JY" = ( +/area/outreach/outpost/command/office) +"aJS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/plain/red, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"JZ" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/floor_decal/spline/plain/pink{ - icon_state = "spline_plain"; - dir = 10 +/area/outreach/outpost/security/b1/supply) +"aJT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Ka" = ( -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 6 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/structure/rack/dark, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/hammer, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"Kb" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/floor_decal/spline/plain/pink, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Kc" = ( -/obj/machinery/light/small, -/obj/structure/closet/crate/secure/biohazard, -/obj/effect/floor_decal/spline/plain/pink, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Kd" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"Ke" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/junction/yjunction{ + icon_state = "pipe-y"; dir = 4 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"Kf" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aJU" = ( +/obj/structure/closet/secure_closet/security/outreach/gear, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 1 }, -/obj/effect/floor_decal/spline/plain/pink, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/janitorial/hall) -"Kg" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 9 - }, -/obj/machinery/camera/network/security, -/obj/structure/flora/pottedplant/minitree, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Kh" = ( /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Ki" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Kj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 - }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aJV" = ( /obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining) -"Kk" = ( +/obj/structure/rack/dark, +/obj/item/tool/hammer, +/obj/item/tool/hammer, +/obj/item/tool/hammer, +/obj/item/tool/hammer, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aJW" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aJX" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/highsecurity/outreach/armory, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aJY" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aJZ" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/highsecurity/outreach/evidence, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/east/junct) -"Kl" = ( -/obj/effect/floor_decal/spline/plain/brown, -/obj/structure/closet/secure_closet/miner, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"Km" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/structure/flora/pottedplant/tall, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aKa" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 6 + dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"Kn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Ko" = ( -/obj/structure/undies_wardrobe, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Kp" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Kq" = ( -/obj/machinery/power/apc/hyper, +/area/outreach/outpost/mining/b1/processing_hall) +"aKb" = ( /obj/structure/cable/blue{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/structure/table, /obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aKc" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 6 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Kr" = ( -/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/morgue) +"aKd" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/plushie/beepsky, +/obj/machinery/power/apc, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"aKe" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/chief_office) +"aKf" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/plain/brown, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/processing) -"Ks" = ( /obj/structure/cable/blue{ - icon_state = "0-4" + icon_state = "2-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aKg" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aKh" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement1) +"aKi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aKj" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aKk" = ( +/obj/structure/table/woodentable/maple, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 8 }, +/obj/item/paper_bin, +/obj/item/storage/briefcase, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aKl" = ( /obj/effect/floor_decal/spline/plain/brown{ icon_state = "spline_plain"; - dir = 10 + dir = 9 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 }, +/obj/machinery/light_switch/on, +/obj/structure/cable/blue{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/miner, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aKm" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aKn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aKo" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aKp" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/rack/dark, +/obj/machinery/recharger/wallcharger, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aKq" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"aKr" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aKs" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, /area/outreach/outpost/mining/b1/office) -"Kt" = ( -/turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/storage/equipment) -"Ku" = ( +"aKt" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room2) +"aKu" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/b1) -"Kv" = ( +"aKv" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 1 @@ -19492,128 +19750,148 @@ /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"Kw" = ( +"aKw" = ( /obj/item/radio/intercom{ icon_state = "intercom"; dir = 1 }, /obj/effect/catwalk_plated, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"Kx" = ( +"aKx" = ( /turf/simulated/wall/concrete/prepainted/medbay, /area/outreach/outpost/hallway/central/basement1) -"Ky" = ( +"aKy" = ( /turf/simulated/wall/prepainted/medbay, /area/outreach/outpost/medbay/lobby) -"Kz" = ( -/obj/structure/disposalpipe/segment/bent, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, +"aKz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/b1) -"KA" = ( +/area/outreach/outpost/hallway/south/basement1) +"aKA" = ( /obj/effect/floor_decal/industrial/warning/corner{ icon_state = "stripecorner"; dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 8 + }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/b1) -"KB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +"aKB" = ( +/obj/machinery/firealarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aKC" = ( +/obj/machinery/body_scanconsole{ + icon_state = "body_scannerconsole"; + dir = 4 + }, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"KC" = ( -/obj/structure/closet/secure_closet/medical1, +/area/outreach/outpost/medbay/triage) +"aKD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"KD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"KE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/area/outreach/outpost/medbay/op_room) +"aKE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 9 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"KF" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"KG" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/structure/closet/wardrobe/medic_white, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"KH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/door/airlock/glass/medical/outreach{ + icon_state = "closed"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"KI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/op_room) +"aKF" = ( +/obj/structure/sign/warning/biohazard, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aKG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aKH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/button/access/wired/exterior{ +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/b1) +"aKI" = ( +/obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ + icon_state = "map_vent"; dir = 1; - id_tag = "OH_l2_n_alck"; - pixel_y = 0 + id_tag = "OH_l2_n_alck_pump_out_external" }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/hatch/orange, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"KJ" = ( +"aKJ" = ( /turf/simulated/wall/prepainted/medbay, -/area/outreach/outpost/medbay/storage/medical) -"KK" = ( +/area/outreach/outpost/medbay/storage) +"aKK" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, @@ -19624,7 +19902,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/outreach, /area/exoplanet/outreach/underground/d1) -"KL" = ( +"aKL" = ( /obj/machinery/reagent_temperature/cooler, /obj/structure/table/steel_reinforced, /obj/effect/floor_decal/spline/plain/purple{ @@ -19634,35 +19912,27 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/outreach/outpost/lab) -"KM" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"KN" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/spline/plain/purple, +"aKM" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aKN" = ( +/obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"KO" = ( -/obj/machinery/door/firedoor/autoset, -/obj/effect/wallframe_spawn/reinforced/prepainted/medical, -/turf/simulated/floor/plating, -/area/outreach/outpost/medbay/lobby) -"KP" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"KQ" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/spline/plain/purple, -/obj/item/storage/box/beakers, -/obj/effect/decal/cleanable/dirt, +/area/outreach/outpost/medbay/main_hall) +"aKO" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/office) +"aKP" = ( +/turf/simulated/wall/r_ocp, +/area/exoplanet/outreach/underground/d1) +"aKQ" = ( +/obj/structure/bed/roller, +/obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/lab) -"KR" = ( +/area/outreach/outpost/medbay/main_hall) +"aKR" = ( /obj/structure/cable/orange{ icon_state = "2-4" }, @@ -19673,7 +19943,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"KS" = ( +"aKS" = ( /obj/structure/cable/orange{ icon_state = "0-8" }, @@ -19682,514 +19952,406 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/outreach, +/turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/d1) -"KT" = ( +"aKT" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/d1) -"KU" = ( +"aKU" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/d1) -"KV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"KW" = ( +"aKV" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"KX" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +/area/outreach/outpost/security/b1/hallway/to_hos) +"aKW" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aKX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/east/junct) -"KY" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/plain/brown, +/area/outreach/outpost/security/b1/supply) +"aKY" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, /obj/structure/closet/secure_closet/miner, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"KZ" = ( -/obj/structure/cable/blue, -/obj/machinery/power/smes/buildable/preset/outreach/substation, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"La" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"Lb" = ( -/obj/machinery/smartfridge/secure/medbay{ - icon_state = "fridge_sci"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aKZ" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aLa" = ( +/obj/machinery/resleever, /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 10 + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"Lc" = ( -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 8 +/area/outreach/outpost/medbay/cloning) +"aLb" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 }, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"Ld" = ( -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"Le" = ( -/obj/structure/closet/crate/internals, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"Lf" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aLc" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/structure/rack/dark, +/obj/machinery/recharger/wallcharger, +/obj/item/storage/box/holobadge, +/obj/item/storage/box/holobadge, +/obj/item/storage/box/holobadge, +/obj/item/storage/box/holobadge, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aLd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/airlock/command{ - dir = 4; - icon_state = "closed" +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/medical/outreach{ + icon_state = "closed"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/command_office) -"Lg" = ( -/obj/structure/closet/secure_closet/personal/empty, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 +/area/outreach/outpost/medbay/lobby/counter) +"aLe" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aLf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Lh" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"Li" = ( -/obj/structure/rack, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security/outreach/head, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/chief_office) +"aLg" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/chief_office/storage) +"aLh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"Lj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Lk" = ( -/obj/structure/table/glass, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aLi" = ( /obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 6 + dir = 5 }, -/obj/item/wheelchair_kit, -/obj/item/wheelchair_kit, -/obj/item/wheelchair_kit, -/obj/item/wheelchair_kit, -/obj/item/wheelchair_kit, -/obj/item/storage/box/freezer, -/obj/item/storage/box/freezer, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/medical) -"Ll" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/obj/structure/closet/secure_closet/personal/empty, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; +/area/outreach/outpost/medbay/triage) +"aLj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Lm" = ( -/turf/simulated/wall/concrete/prepainted/medbay, -/area/outreach/outpost/medbay/storage/equipment) -"Ln" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 8 }, -/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aLk" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/alarm, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Lo" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/floor_decal/spline/plain/green{ icon_state = "spline_plain"; - dir = 8 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Lp" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Lq" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/triage) -"Lr" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/structure/closet/secure_closet/personal/empty, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Ls" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 10 +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aLl" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Lt" = ( -/obj/structure/closet/secure_closet/personal/empty, -/obj/effect/floor_decal/spline/plain/blue{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aLm" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/office) +"aLn" = ( +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"Lu" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/medical{ - icon_state = "closed"; - dir = 2 + dir = 8 }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/triage) -"Lv" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Lw" = ( -/obj/machinery/alarm, +/area/outreach/outpost/security/b1/lockers) +"aLo" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aLp" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aLq" = ( /obj/effect/floor_decal/spline/fancy/black{ icon_state = "spline_fancy"; - dir = 9 + dir = 5 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/large, +/obj/structure/rack/dark, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Lx" = ( -/obj/structure/table/woodentable/walnut, +/area/outreach/outpost/security/b1/chief_office/storage) +"aLr" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Ly" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 6 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"aLs" = ( +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/storage/equipment) -"Lz" = ( -/turf/simulated/wall/concrete/prepainted/medbay, -/area/outreach/outpost/medbay/lobby) -"LA" = ( -/obj/machinery/door/airlock/double/glass/medical{ - icon_state = "closed" +/obj/machinery/power/apc, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLt" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/medbay/lobby) -"LB" = ( -/obj/structure/table/woodentable/walnut, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"LC" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"LD" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"LE" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"LF" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"LG" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 6 - }, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"LH" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/stamp/denied, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/structure/table/woodentable/walnut, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LJ" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"LK" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/hand_labeler, -/obj/item/sticky_pad, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LL" = ( -/obj/structure/table/woodentable/walnut, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aLu" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/medical/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/op_room) +"aLv" = ( +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LM" = ( -/obj/structure/kitchenspike, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"LN" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"LO" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLw" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 5 + dir = 6 }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/structure/closet/secure_closet/security/outreach/forensics, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/B) -"LP" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"LQ" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 10 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/security/b1/forensics) +"aLx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/obj/structure/table/woodentable/walnut, -/obj/machinery/faxmachine, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LR" = ( -/obj/effect/floor_decal/spline/fancy/black, -/obj/structure/table/woodentable/walnut, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LS" = ( -/obj/structure/table/woodentable/walnut, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 6 +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLy" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/light, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"LT" = ( +/area/outreach/outpost/security/b1/supply) +"aLz" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/lobby) +"aLA" = ( +/obj/effect/floor_decal/industrial/hatch/blue, /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 5 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"LU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aLB" = ( +/obj/machinery/light, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLC" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"LV" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/spline/plain/red{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aLD" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; dir = 9 }, -/obj/item/stool/wood, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/C) -"LW" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/item/storage/firstaid/surgery, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"aLE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aLF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aLG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -20198,73 +20360,247 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aLH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLI" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aLJ" = ( +/obj/machinery/light, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLK" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/machinery/airlock_sensor{ + dir = 1; + pixel_x = 0; + pixel_y = 0; + id_tag = "OH_l2_e_alck_interior_sensor" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aLL" = ( +/obj/effect/decal/cleanable/filth, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"LX" = ( +/area/outreach/outpost/command/office/third) +"aLM" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 8 +/obj/machinery/light_switch/on, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aLN" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"LY" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aLO" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 10 + dir = 5 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/B) +"aLP" = ( +/obj/machinery/door/airlock/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/armory) +"aLQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aLR" = ( +/obj/effect/floor_decal/spline/plain/red, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aLS" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/light{ icon_state = "tube_map"; dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aLT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"LZ" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/effect/decal/cleanable/dirt, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aLU" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/eva/b1/south) +"aLV" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/item/stool/wood, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/C) +"aLW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Ma" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/area/outreach/outpost/security/b1/supply) +"aLX" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aLY" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aLZ" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/light_switch/on, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aMa" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Mb" = ( +/area/outreach/outpost/command/office/third) +"aMb" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 6 + dir = 10 }, -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Mc" = ( -/obj/structure/sign/poster/bay_49{ - pixel_y = 28 +/area/outreach/outpost/security/b1/hallway/to_brig) +"aMc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Md" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aMd" = ( /obj/structure/rack, /obj/item/inducer, /obj/item/inducer, @@ -20273,7 +20609,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"Me" = ( +"aMe" = ( /obj/machinery/light, /obj/effect/floor_decal/spline/plain/yellow, /obj/effect/floor_decal/industrial/outline/yellow, @@ -20281,125 +20617,149 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"Mf" = ( +"aMf" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/floor_decal/spline/plain/yellow, /obj/machinery/floorlayer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"Mg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +"aMg" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/obj/machinery/space_heater, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aMh" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aMi" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 4; + pixel_x = -32 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Mh" = ( -/obj/structure/wall_frame/hull, -/obj/structure/grille, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Mi" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 6 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Mj" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 10 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aMj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Mk" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 5 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Ml" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aMk" = ( +/obj/structure/bed/chair/office{ + icon_state = "officechair"; dir = 8 }, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Mm" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 9 +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"aMl" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/exterior/barren/subterrane/outreach, -/area/exoplanet/outreach/underground/d1) -"Mn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 +/obj/machinery/camera/network/security, +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aMm" = ( +/obj/machinery/airlock_sensor{ + dir = 8; + pixel_x = 0; + pixel_y = 0; + id_tag = "OH_l2_s_alck_interior_sensor" }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"Mo" = ( -/obj/effect/floor_decal/spline/plain/yellow, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/engineering/b1/storage) -"Mp" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 8 }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/blue, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/storage) -"Mq" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aMn" = ( +/obj/machinery/network/area_controller/outreach, /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "0-2" }, /obj/structure/cable/blue{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/cable/blue{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 4 }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "ob1_comm_blast_doors"; - name = "comms blast door" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aMo" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aMp" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/cooling) -"Mr" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 6 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aMq" = ( +/obj/machinery/internet_uplink/outreach, +/obj/structure/cable/blue, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aMr" = ( /obj/structure/closet/crate/uranium, /obj/effect/floor_decal/spline/plain/yellow{ icon_state = "spline_plain"; @@ -20408,18 +20768,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/engineering/b1/storage) -"Ms" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/engineering{ - icon_state = "closed" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/engineering/b1/storage) -"Mt" = ( +"aMs" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/workshop) +"aMt" = ( /obj/machinery/door/airlock/glass/engineering{ icon_state = "closed" }, @@ -20432,14 +20784,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/engineering/b1/storage) -"Mu" = ( +"aMu" = ( /obj/machinery/portable_atmospherics/powered/scrubber, /obj/machinery/atmospherics/portables_connector, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Mv" = ( +"aMv" = ( /obj/machinery/portable_atmospherics/powered/pump, /obj/effect/floor_decal/spline/plain/orange{ icon_state = "spline_plain"; @@ -20448,7 +20800,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Mw" = ( +"aMw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/structure/cable/blue{ icon_state = "1-2" @@ -20461,138 +20813,116 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"Mx" = ( +"aMx" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/green, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"My" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Mz" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 5 +"aMy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"aMz" = ( /obj/structure/cable/blue{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/cable/blue{ - icon_state = "0-4" + icon_state = "1-4" }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"MA" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 9 +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "4-8" +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"aMA" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/structure/cable/blue{ - icon_state = "1-4" +/obj/machinery/computer/internet_uplink/outreach{ + icon_state = "computer"; + dir = 4 }, -/obj/structure/cable/blue{ - icon_state = "0-4" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aMB" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 }, /obj/machinery/camera/network/security{ icon_state = "camera"; - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"MB" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 5 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/structure/cable/blue{ - icon_state = "0-4" - }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"MC" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 9 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" + dir = 4 }, -/obj/machinery/light/small, -/obj/structure/cable/blue{ - icon_state = "0-4" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/control/hall) +"aMC" = ( +/obj/structure/bed/chair/office{ + icon_state = "officechair"; + dir = 8 }, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"MD" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aMD" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"ME" = ( -/obj/machinery/door_timer{ - id_tag = "OB_Cell3" - }, +"aME" = ( +/obj/structure/filing_cabinet, /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 9 + dir = 5 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"MF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 4 - }, -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"MG" = ( -/obj/effect/floor_decal/spline/plain/orange{ - icon_state = "spline_plain"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"MH" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, -/obj/machinery/computer/modular/preset/cardslot/command{ - icon_state = "console-off"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"MI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aMF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aMG" = ( +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/triage) +"aMH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"aMI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/light/small, -/obj/effect/floor_decal/spline/plain/orange, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"MJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aMJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -20610,59 +20940,31 @@ }, /obj/effect/floor_decal/spline/plain/orange, /obj/effect/decal/cleanable/dirt, +/obj/machinery/light, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/hall) -"MK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" +"aMK" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/item/chems/spray/extinguisher, -/obj/item/chems/spray/extinguisher, -/obj/item/chems/spray/extinguisher, -/obj/item/chems/spray/extinguisher, -/obj/structure/closet/firecloset, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/spline/plain/orange, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage) -"ML" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 4 +/obj/structure/closet/l3closet/scientist/multi, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"aML" = ( +/obj/machinery/power/apc/high, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/floor_decal/spline/plain/purple, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/obj/structure/cable/blue{ - icon_state = "4-8" - }, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/scanner/gas, -/obj/item/scanner/gas, -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/spline/plain/orange, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/atmospherics/b1/storage) -"MM" = ( +/obj/structure/closet/l3closet/scientist/multi, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"aMM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -20687,25 +20989,26 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"MN" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +"aMN" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"aMO" = ( +/obj/structure/sign/warning/secure_area{ + icon_state = "securearea2"; dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"MO" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 8 +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"MP" = ( +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aMP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -20717,10 +21020,13 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/effect/floor_decal/spline/plain/red, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, /turf/simulated/floor/tiled/dark/monotile, /area/outreach/outpost/security/b1/cell/A) -"MQ" = ( +"aMQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -20740,7 +21046,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"MR" = ( +"aMR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -20762,7 +21068,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"MS" = ( +"aMS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ icon_state = "11"; dir = 4 @@ -20787,349 +21093,264 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/atmospherics/b1/storage) -"MT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +"aMT" = ( +/obj/machinery/light{ + icon_state = "tube_map"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/control/storage) -"MU" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aMU" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aMV" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 4 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"MV" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 + dir = 1 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 1 }, -/obj/structure/table, -/obj/effect/floor_decal/spline/plain/green{ +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"aMW" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"MW" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"MX" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 + dir = 9 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/machinery/chemical_dispenser, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/common) -"MY" = ( -/obj/effect/floor_decal/spline/plain/brown, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/port_gen/pacman, -/turf/simulated/floor/tiled, -/area/outreach/outpost/mining/b1/storage) -"MZ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aMX" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Na" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/chem_master, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aMY" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; - dir = 1 + dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Nb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"Nc" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/cable/blue{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aMZ" = ( +/obj/structure/table/steel, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/button/blast_door/cafetaria{ + icon_state = "blastctrl"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Nd" = ( -/obj/structure/flora/pottedplant/fern, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aNa" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 8 }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Ne" = ( -/obj/effect/floor_decal/spline/plain/green, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria) -"Nf" = ( -/turf/simulated/wall/concrete/prepainted/medbay, -/area/outreach/outpost/medbay/storage/medical) -"Ng" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 1 + dir = 6 }, -/obj/effect/floor_decal/spline/plain/green, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"Nh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aNb" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/fancy/black, +/obj/item/megaphone, +/obj/item/radio/phone, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aNc" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/armory/warden_office) +"aNd" = ( +/obj/structure/filing_cabinet, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 9 }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Ni" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/obj/machinery/camera/network/security, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"aNe" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aNf" = ( +/obj/machinery/vending/wallmed1{ + icon_state = "wallmed"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/basement1) -"Nj" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/spline/plain/green{ +/obj/effect/floor_decal/spline/plain/paleblue{ icon_state = "spline_plain"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/outreach/outpost/cafeteria/common) -"Nk" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Nl" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood, -/obj/item/knife/kitchen/cleaver, -/turf/simulated/floor/tiled/freezer, -/area/outreach/outpost/cafeteria/kitchen/freezer) -"Nm" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Nn" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/main_hall) -"No" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/bed/chair/padded/blue{ + icon_state = "chair_preview"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, -/area/outreach/outpost/laundry) -"Np" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/b1/northeast/airlock) -"Nq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/area/outreach/outpost/medbay/lobby) +"aNg" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aNh" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Nr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "1-8" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Ns" = ( +/area/outreach/outpost/security/b1/chief_office) +"aNi" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/lobby) +"aNj" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; - dir = 6 - }, -/obj/structure/bed/chair{ - icon_state = "chair"; - dir = 8 + dir = 1 }, +/obj/machinery/recharger/wallcharger, +/obj/structure/closet/secure_closet/personal/empty, /obj/machinery/light{ icon_state = "tube_map"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Nt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" + dir = 1 }, -/obj/effect/floor_decal/spline/plain/red, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Nu" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/area/outreach/outpost/security/b1/armory/warden_office) +"aNk" = ( +/obj/structure/lattice, +/obj/structure/sign/deck/second{ + icon_state = "deck-2"; + dir = 1; + pixel_y = -32 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + icon_state = "up-supply"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Nv" = ( -/obj/structure/sign/poster/bay_19{ - pixel_y = 28 +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + icon_state = "up-scrubbers"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"Nw" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 1 }, +/obj/machinery/light/small, +/turf/open, +/area/outreach/outpost/maint/atmos/b1) +"aNl" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/basement1) -"Nx" = ( -/obj/structure/sign/department/greencross{ - pixel_y = 32 - }, +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"Ny" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/area/outreach/outpost/hallway/south/basement1) +"aNm" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 4 }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"aNn" = ( +/obj/machinery/cloning_pod, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"Nz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"aNo" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 }, -/obj/effect/catwalk_plated, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aNp" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"aNq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -21138,188 +21359,115 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/basement1) -"NA" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/basement1) -"NB" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/medical/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/cloning) +"aNr" = ( +/obj/machinery/door/firedoor/autoset, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 6 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/basement1) -"NC" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/basement1) -"ND" = ( -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"NE" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, +/area/outreach/outpost/atmospherics/b1/hall) +"aNs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"NF" = ( -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/basement1) -"NG" = ( -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 10 - }, -/obj/machinery/vending/cigarette{ - icon_state = "cigs"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"NH" = ( -/obj/effect/wallframe_spawn/no_grille/concrete, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 8 }, /turf/simulated/floor/plating, -/area/outreach/outpost/cafeteria/kitchen) -"NI" = ( +/area/outreach/outpost/hallway/west/basement1) +"aNt" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, /obj/effect/floor_decal/spline/fancy/black{ icon_state = "spline_fancy"; - dir = 10 + dir = 9 }, -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"NJ" = ( -/obj/effect/floor_decal/spline/plain/paleblue, -/obj/machinery/power/apc, /obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"NK" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/effect/floor_decal/spline/plain/paleblue{ - icon_state = "spline_plain"; - dir = 6 - }, -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/medbay/lobby) -"NL" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 6 + icon_state = "0-2" }, -/obj/structure/bed/chair{ - icon_state = "chair"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, +/obj/structure/table/steel, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"NM" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 8 +/area/outreach/outpost/security/b1/chief_office/storage) +"aNu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aNv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 }, -/obj/machinery/power/apc/high, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 6 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aNw" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/cafeteria/kitchen) -"NN" = ( -/obj/machinery/door/airlock/glass/mining{ - icon_state = "closed" +/obj/item/trash/cigbutt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aNx" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/blue{ +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/b1/storage) +"aNy" = ( +/obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/mining/b1/workshop) -"NO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"NP" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"NQ" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 1; - icon_state = "securearea"; - pixel_y = -32 +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/basement1) -"NS" = ( -/turf/simulated/wall/prepainted/mining, -/area/outreach/outpost/vacant/b1/south/east) -"NT" = ( +"aNz" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement1) +"aNA" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -21329,355 +21477,14590 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/door/airlock/security{ - icon_state = "closed"; +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"aNB" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1) -"NX" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/b1/south/east) -"Oa" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 8 - }, -/obj/machinery/porta_turret/stationary/stun, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"Oc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/structure/filing_cabinet, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Od" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 10 - }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 - }, -/obj/machinery/alarm{ - icon_state = "alarm0"; dir = 4 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/A) -"Oi" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_hall) -"On" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"Oo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/basement1) +"aNC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"aND" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/B) -"Op" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aNE" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"aNF" = ( +/obj/effect/wallframe_spawn/reinforced/steel, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Ot" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/security/b1/hallway) -"Ow" = ( -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"OK" = ( -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; +/turf/simulated/floor/plating, +/area/outreach/outpost/lab/entrance) +"aNG" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"OP" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, -/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/control/hall) -"OR" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/area/outreach/outpost/maint/atmos/b1) +"aNH" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/alarm, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aNI" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; dir = 5 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; +/obj/structure/flora/pottedplant/stoutbush, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aNJ" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"aNK" = ( +/obj/structure/closet/wardrobe/medic_white, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aNL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"aNM" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 1 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/b1) +"aNN" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/processing) +"aNO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/A) -"Pc" = ( -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"Pk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"aNP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"Pp" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"aNQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" }, -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Pv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/porta_turret/stationary/stun, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/control) -"PB" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"PK" = ( +/area/outreach/outpost/mining/b1/processing_hall) +"aNR" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/security/outreach/warden{ + icon_state = "closed"; + dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/security/b1/hallway) -"PV" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"PW" = ( -/turf/simulated/wall/r_wall/prepainted/atmos, -/area/outreach/outpost/atmospherics/b1/storage) -"PX" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/armory/warden_office) +"aNS" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/mining/b1/storage) +"aNT" = ( +/obj/structure/sign/warning/engineering_access{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aNU" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aNV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 5 + }, +/obj/machinery/dummy_airlock_controller{ + icon_state = "airlock_control_off"; + dir = 4; + id_tag = "OH_l2_w_alck" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"aNW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 1 }, +/obj/structure/closet/l3closet/general/multi, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/stairwell/basement1/atmos) +"aNX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/basement1) -"Qc" = ( +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"aNY" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aNZ" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aOa" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/polarized/full, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/conference) +"aOb" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/conference) +"aOc" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/door/firedoor/autoset, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/vault/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/archives) +"aOd" = ( /obj/effect/floor_decal/spline/plain/red{ icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/A) +"aOe" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/hall/inner) +"aOf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair_preview"; + dir = 1 + }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Qt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/area/outreach/outpost/command/office) +"aOg" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aOh" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/flora/pottedplant/tall, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; dir = 1 }, -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aOi" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Qw" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/area/outreach/outpost/command/hall) +"aOj" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aOk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aOl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; + icon_state = "map_off"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"aOm" = ( +/obj/machinery/light_switch, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"aOn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"aOo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/B) +"aOp" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aOq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/medical/outreach/morgue{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/crematorium) +"aOr" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aOs" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/cell/apc, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aOt" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aOv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/padded/blue{ + icon_state = "chair_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"aOw" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOx" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"aOy" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"aOz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east) +"aOA" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOB" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOC" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOD" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOE" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOF" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aOG" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aOH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aOI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOJ" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"aOK" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOL" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aOM" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc, +/obj/structure/flora/pottedplant/large, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aON" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aOO" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"aOP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/hall) +"aOQ" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aOR" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aOS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"aOT" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/office/third) +"aOU" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/office) +"aOV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aOW" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aOX" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/lockers) +"aOY" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/structure/flora/pottedplant/tropical, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aOZ" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/fancy/black, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aPa" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/office) +"aPb" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPc" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aPd" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aPe" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aPf" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/mining/outreach/processing{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/processing) +"aPg" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/mining/b1/ore_sorting) +"aPh" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/blue{ + icon_state = "0-2" + }, +/obj/machinery/fabricator, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aPi" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock{ + icon_state = "air_mapped"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aPj" = ( +/obj/structure/closet/crate/secure/explosives, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aPk" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aPl" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aPm" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/armory) +"aPn" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aPo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aPp" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/rack/dark, +/obj/item/gps/mining, +/obj/item/gps/mining, +/obj/item/gps/mining, +/obj/item/scanner/gas, +/obj/item/scanner/gas, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aPq" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aPr" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"aPs" = ( +/turf/simulated/wall/prepainted/mining, +/area/outreach/outpost/mining/b1/ore_sorting) +"aPt" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aPu" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/ore_sorting) +"aPv" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/mining/outreach/processing{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/ore_sorting) +"aPw" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/maint/passage/b1/southeast) +"aPx" = ( +/obj/item/hoist_kit, +/obj/structure/rack/dark, +/obj/item/hoist_kit, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/item/storage/box/large/ore_detectors, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aPy" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/basement1) +"aPz" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aPA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aPB" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/supplies) +"aPC" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aPD" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/basement1) +"aPE" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aPF" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aPG" = ( +/obj/machinery/light_switch/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"aPH" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aPI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/structure/flora/pottedplant/floorleaf, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPJ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPK" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aPM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aPN" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aPO" = ( +/obj/structure/stairs/long/north, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"aPP" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/rack/dark, +/obj/item/tool/drill, +/obj/item/tool/drill, +/obj/item/tool/drill, +/obj/item/tool/drill, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aPQ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPR" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aPS" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/supplies) +"aPT" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"aPU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/hologram/holopad, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aPV" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aPW" = ( +/turf/simulated/wall/r_wall/prepainted/atmos, +/area/outreach/outpost/atmospherics/b1/storage) +"aPX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aPY" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"aPZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aQa" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/highsecurity/outreach/sec_chief_storage{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/chief_office/storage) +"aQb" = ( +/obj/machinery/alarm, +/obj/structure/rack/dark, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/storage/box/large/dual_band_radios, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aQc" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aQd" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aQe" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aQf" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/conveyor_switch/outreach/mining/raw_proc, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aQg" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQh" = ( +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/structure/rack/dark, +/obj/structure/closet/walllocker, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aQi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aQk" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aQl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQm" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/window/reinforced/right/outreach/security/warden, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/armory/warden_office) +"aQn" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQo" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aQp" = ( +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/structure/rack/dark, +/obj/structure/closet/walllocker, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aQq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aQr" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/item/holowarrant, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/csi_markers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aQs" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aQt" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aQu" = ( +/obj/structure/morgue{ + icon_state = "morgue_closed"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"aQv" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/structure/table/marble, +/obj/machinery/faxmachine/mapped/outreach/security, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aQw" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQx" = ( +/obj/machinery/conveyor/outreach/mining/stacker{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQy" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/closet/l3closet/general/multi, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"aQz" = ( +/obj/machinery/material_processing/compressor, +/obj/effect/floor_decal/industrial/warning/cee, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQA" = ( +/obj/machinery/material_processing/extractor, +/obj/effect/floor_decal/industrial/warning/cee, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aQC" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQD" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aQF" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aQG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQH" = ( +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"aQI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/eva) +"aQJ" = ( +/obj/machinery/conveyor/outreach/mining/stacker{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQK" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aQL" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/office/second) +"aQM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aQN" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aQO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aQP" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aQQ" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/hyper{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aQR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aQT" = ( +/obj/structure/sign/department/bridge{ + icon_state = "bridge"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"aQU" = ( +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQV" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aQW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aQX" = ( +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQY" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aQZ" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; + icon_state = "map_off"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRa" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRb" = ( +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRc" = ( +/obj/structure/cable/blue, +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + icon_state = "map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRf" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)"; + icon_state = "map_off"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRg" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRh" = ( +/obj/machinery/conveyor/outreach/mining/stacker{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRi" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRk" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRm" = ( +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRn" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRo" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRq" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/mining/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRr" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRs" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/storage/box/canned/beans, +/obj/item/storage/box/canned/beans, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"aRt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/obj/machinery/conveyor/outreach/mining/unloader_out{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRu" = ( +/obj/machinery/conveyor/outreach/mining/unloader_out{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRv" = ( +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/machinery/conveyor/outreach/mining/unloader_out{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRw" = ( +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRx" = ( +/obj/machinery/conveyor_switch/outreach/mining/unloader_out, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRy" = ( +/obj/effect/floor_decal/spline/fancy/black, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aRz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRA" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRB" = ( +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/ore_sorting) +"aRC" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRG" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aRI" = ( +/obj/machinery/disposal/deliveryChute{ + name = "delivery chute (directly to supply dept.)" + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRJ" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"aRK" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/flaps, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/machinery/conveyor/outreach/mining/cargo_delivery{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRL" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 10 + }, +/obj/machinery/conveyor/outreach/mining/cargo_delivery{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRM" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRN" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aRO" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/light_switch/on, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aRP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aRQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aRT" = ( +/obj/machinery/conveyor_switch/outreach/mining/raw_proc, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/meter, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRV" = ( +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRW" = ( +/obj/machinery/atmospherics/unary/tank, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRX" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aRZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aSa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/omni/filter/material_extractor, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aSb" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/closet/secure_closet/miner, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aSc" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aSd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aSe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aSf" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 5 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aSg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"aSh" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/eva) +"aSi" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 9 + }, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aSj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSk" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSl" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/machinery/computer/modular/preset/security{ + icon_state = "console-off"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSm" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSn" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSo" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/structure/closet/secure_closet/guncabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSq" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSr" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSs" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aSt" = ( +/obj/effect/floor_decal/spline/fancy/black, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSu" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aSw" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/fancy/black, +/obj/structure/closet/secure_closet/hos, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSx" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 6 + }, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aSy" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aSz" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/sign/department/bridge{ + icon_state = "bridge"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aSA" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aSB" = ( +/obj/structure/bed/chair/office/comfy/red{ + icon_state = "comfyofficechair_preview"; + dir = 1 + }, +/obj/structure/safe/floor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/table/woodentable/maple, +/obj/item/book/manual/detective, +/obj/item/pen/fancy, +/obj/item/magnetic_tape, +/obj/item/taperecorder/empty, +/obj/item/storage/briefcase/crimekit, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/evidence, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/swabs, +/obj/item/storage/box/tapes, +/obj/item/storage/evidence, +/obj/item/storage/box/evidence, +/obj/item/storage/box/csi_markers, +/obj/item/storage/box/matches, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aSD" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aSE" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aSF" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/pottedplant/tropical, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aSG" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/sortjunction/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aSH" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/office/second) +"aSI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aSJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/security/outreach/bolted/cell_door/c3{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/brig) +"aSK" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aSL" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/office/second) +"aSM" = ( +/obj/structure/mirror, +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aSN" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aSO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/radio/intercom, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aSP" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aSQ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/rack/dark, +/obj/machinery/recharger/wallcharger, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/office) +"aSR" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/slide_projector, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/conference) +"aSS" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/machinery/disposal, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aST" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aSU" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aSV" = ( +/obj/machinery/design_database/outreach, +/obj/structure/cable/blue{ + icon_state = "1-4" + }, +/obj/structure/cable/blue, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aSW" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 8 + }, +/obj/machinery/light, +/obj/effect/floor_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aSX" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aSY" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aSZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aTb" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aTc" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aTd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aTe" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTf" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aTg" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aTi" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aTj" = ( +/obj/machinery/computer/modular/preset/security{ + icon_state = "console-off"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aTk" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aTl" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aTm" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aTn" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light_switch, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aTo" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aTp" = ( +/obj/structure/table/steel, +/obj/machinery/chemical_dispenser/bar_coffee, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aTq" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/pens, +/obj/item/storage/box/pens, +/obj/item/storage/box/pens, +/obj/item/storage/box/pens, +/obj/item/storage/box/pens, +/obj/item/storage/box/pens, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aTr" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aTs" = ( +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "OH_brig_desk_shutters" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/table/steel_reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/window/reinforced/outreach/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/office) +"aTt" = ( +/obj/structure/table/glass, +/obj/structure/hygiene/sink, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aTu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"aTv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/newscaster{ + icon_state = "frame"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aTw" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/headset, +/obj/item/storage/box/headset, +/obj/item/storage/box/headset, +/obj/item/storage/box/headset, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aTx" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aTy" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/detective_office) +"aTz" = ( +/obj/machinery/sleeper, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aTA" = ( +/obj/structure/sign/department/watercloset, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/cola, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aTB" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/miner, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aTC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/bed/padded, +/obj/machinery/flasher{ + id_tag = "OB_Cell1_flash" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/A) +"aTD" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "OH_brig_desk_shutters" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"aTE" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/flasher/security_desk{ + icon_state = "mflash1"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aTF" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/forensics) +"aTG" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1) +"aTH" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aTI" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTJ" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTK" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/A) +"aTL" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aTM" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTN" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/button/alternate/door/sec_checkpoint{ + icon_state = "doorctrl"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aTO" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTP" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTQ" = ( +/obj/structure/sign/department/forensics{ + icon_state = "forensics"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway) +"aTR" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTS" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTT" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTU" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall/inner) +"aTV" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aTW" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"aTX" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aTY" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/airlock/basement1/south) +"aTZ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUa" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/flora/pottedplant/floorleaf, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUb" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUc" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUd" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUe" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"aUf" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUg" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUh" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/sortjunction/command{ + icon_state = "pipe-j1s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUi" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light_switch, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aUj" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUk" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"aUl" = ( +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aUm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aUn" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/rack/dark, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aUo" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aUp" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aUq" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aUr" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/flora/pottedplant/large, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUs" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aUt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUu" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUv" = ( +/obj/machinery/light_switch, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/spiderling_remains, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUw" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aUx" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/lockers) +"aUy" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aUz" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUA" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"aUB" = ( +/obj/structure/closet/secure_closet/security/outreach/gear, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aUC" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/office/third) +"aUD" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb1"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aUE" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aUF" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/office/second) +"aUG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"aUH" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"aUI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/bed/chair/office/comfy/beige, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"aUJ" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/basement1/command) +"aUK" = ( +/obj/structure/reagent_dispensers/peppertank, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/camera/network/security, +/obj/item/classic_baton, +/obj/item/classic_baton, +/obj/item/classic_baton, +/obj/item/classic_baton, +/obj/item/classic_baton, +/obj/item/classic_baton, +/obj/item/flashlight/maglight, +/obj/item/flashlight/maglight, +/obj/item/flashlight/maglight, +/obj/item/scanner/breath, +/obj/item/scanner/breath, +/obj/structure/rack/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"aUL" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aUM" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/security/outreach/detective{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/detective_office) +"aUN" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"aUO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"aUP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"aUQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aUR" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"aUS" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow, +/obj/structure/disposalpipe/segment, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/chief_office) +"aUT" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 9 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aUU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aUV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aUW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aUX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"aUY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aUZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aVa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVb" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/eva/b1/south) +"aVc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"aVf" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/civilian/outreach/eva{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/b1/south) +"aVg" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVh" = ( +/obj/structure/tank_rack/oxygen, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aVj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aVk" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"aVl" = ( +/obj/structure/closet/secure_closet/outreach/hazard_suit, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVm" = ( +/obj/machinery/door/airlock/glass/civilian/outreach/eva{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/b1/south) +"aVn" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"aVo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/C) +"aVp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"aVq" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aVr" = ( +/obj/effect/floor_decal/spline/plain/red, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aVs" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/item/radio/intercom, +/obj/structure/rack/dark, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/obj/item/storage/lockbox, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aVt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aVu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aVv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"aVw" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/lockers) +"aVx" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aVy" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aVz" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/C) +"aVA" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"aVB" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/security/b1/forensics) +"aVC" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/cell/A) +"aVD" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/security/b1/detective_office) +"aVE" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/security/b1/supply) +"aVF" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"aVG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"aVH" = ( +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/structure/cable/blue, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/mainframe_room) +"aVI" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/fabricator/industrial/filled, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"aVJ" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aVK" = ( +/obj/machinery/network/trade_controller/outreach, +/obj/structure/cable/blue{ + icon_state = "1-4" + }, +/obj/structure/cable/blue, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aVL" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aVM" = ( +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/structure/cable/blue, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"aVN" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aVO" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/computer/design_console/outreach{ + icon_state = "computer"; + dir = 1 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"aVP" = ( +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport_return, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aVQ" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"aVR" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"aVS" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aVT" = ( +/obj/machinery/smartfridge/secure/medbay{ + icon_state = "fridge_sci"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aVU" = ( +/obj/structure/filing_cabinet, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"aVV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aVW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"aVX" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"aVY" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/hygiene/shower, +/obj/structure/curtain/open/medical, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aVZ" = ( +/obj/effect/decal/cleanable/blood/tracks/body{ + icon_state = "trail1"; + dir = 4 + }, +/turf/exterior/barren/subterrane/outreach, +/area/exoplanet/outreach/underground/d1) +"aWa" = ( +/obj/structure/closet/wardrobe/medic_white, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aWb" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/hygiene/shower, +/obj/structure/curtain/open/medical, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aWc" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aWd" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/medical/outreach/storage{ + icon_state = "closed"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/storage) +"aWe" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aWf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"aWg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aWh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aWi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"aWj" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"aWk" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"aWl" = ( +/obj/machinery/smartfridge/secure/medbay{ + icon_state = "fridge_sci"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aWm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWn" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/drill, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aWo" = ( +/obj/machinery/seed_extractor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWp" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/wallframe_spawn/no_grille/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria) +"aWq" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/wallframe_spawn/no_grille/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria) +"aWr" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/security/b1/cell/C) +"aWs" = ( +/obj/machinery/bodyscanner{ + icon_state = "body_scanner_0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aWt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWu" = ( +/obj/machinery/smartfridge/seeds, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/lavatory, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aWw" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/mining/b1/foyer) +"aWx" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aWy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aWz" = ( +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aWA" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWB" = ( +/obj/item/storage/box/detergent, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aWC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWE" = ( +/obj/machinery/light/spot{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWF" = ( +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWG" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/drill, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aWH" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/engineering/b1/storage) +"aWI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aWJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aWK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aWL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/closet/crate/hydroponics/beekeeping, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aWM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/hygiene/drain, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"aWP" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/B) +"aWQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aWS" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/civilian/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cafeteria) +"aWT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/hydroponics) +"aWU" = ( +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWV" = ( +/obj/machinery/light/spot{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/hygiene/drain, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aWX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aWY" = ( +/turf/simulated/wall/r_wall/prepainted/atmos, +/area/outreach/outpost/atmospherics/b1/hall) +"aWZ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aXb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXc" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXd" = ( +/obj/structure/disposalpipe/sortjunction/hydroponics{ + icon_state = "pipe-j1s"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXe" = ( +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aXf" = ( +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXg" = ( +/obj/machinery/light/spot{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/hygiene/drain, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXh" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXi" = ( +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXj" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/no_grille/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria) +"aXk" = ( +/obj/machinery/disposal, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/closet/secure_closet/hydroponics/outreach, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aXm" = ( +/obj/structure/closet/crate/hydroponics, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aXn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXo" = ( +/obj/structure/window/reinforced/tinted/frosted, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aXp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aXq" = ( +/obj/structure/bed/roller/ironingboard, +/obj/structure/window/reinforced, +/obj/item/ironingiron, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/item/storage/laundry_basket, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aXr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXs" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aXt" = ( +/obj/structure/flora/pottedplant/floorleaf, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aXu" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/steel, +/turf/simulated/floor/plating, +/area/outreach/outpost/hydroponics) +"aXv" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian/outreach/botany, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hydroponics) +"aXw" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/smartfridge, +/turf/simulated/floor/plating, +/area/outreach/outpost/hydroponics) +"aXx" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/hydroponics) +"aXy" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian/outreach/botany, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hydroponics) +"aXz" = ( +/turf/simulated/wall, +/area/outreach/outpost/cafeteria/kitchen) +"aXA" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/structure/flaps/airtight, +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/ore_sorting) +"aXB" = ( +/obj/structure/hygiene/sink/kitchen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXC" = ( +/obj/machinery/reagentgrinder/juicer, +/obj/structure/table/steel, +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXD" = ( +/obj/structure/disposaloutlet{ + name = "disposal outlet (mining delivery)" + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aXE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aXG" = ( +/obj/structure/sign/department/hydro, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXH" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/vending/coffee, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/alarm, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"aXJ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atm, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXK" = ( +/obj/effect/decal/cleanable/fruit_smudge, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXL" = ( +/obj/structure/sign/department/hydro, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/vending/snack, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXM" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"aXN" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"aXO" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/vending/hotfood, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXQ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXS" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/dinnerware, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aXU" = ( +/obj/machinery/chem_master/condimaster, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXV" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXW" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXX" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/blast/shutters/open/cafetaria{ + icon_state = "open"; + dir = 4 + }, +/obj/machinery/smartfridge/foods{ + icon_state = "fridge_food"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria/kitchen) +"aXY" = ( +/obj/structure/hygiene/drain, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aXZ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYa" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYb" = ( +/obj/structure/hygiene/drain, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aYh" = ( +/obj/structure/hygiene/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/tinted/frosted, +/obj/structure/curtain/open/privacy, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aYi" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aYk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYl" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"aYm" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/blue{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aYn" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/outreach, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"aYo" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"aYp" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/civilian/outreach/kitchen{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cafeteria/kitchen) +"aYq" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/blast/shutters/open/cafetaria{ + icon_state = "open"; + dir = 4 + }, +/obj/machinery/smartfridge/drinks{ + icon_state = "fridge_dark"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria/kitchen) +"aYr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/table/steel, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/storage/tray/metal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYs" = ( +/obj/structure/rack, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/beakers, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aYt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aYu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/table/steel, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/item/chems/drinks/pitcher, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYy" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"aYz" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/chefcloset, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment/bent, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/flora/pottedplant/fern, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYH" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/item/storage/box/frags, +/obj/item/storage/box/frags, +/obj/item/storage/box/frags, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/shotgunammo/large, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/smokes, +/obj/item/storage/box/smokes, +/obj/item/storage/box/smokes, +/obj/structure/rack/dark, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"aYI" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/item/storage/box/condimentbottles, +/obj/item/storage/box/condimentbottles, +/obj/item/storage/box/canned/beans, +/obj/item/storage/box/canned/beans, +/obj/item/storage/box/canned/beef, +/obj/item/storage/box/canned/tomato, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/storage/box/glasses/pint, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYJ" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/blast/shutters/open/cafetaria{ + icon_state = "open"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria/kitchen) +"aYK" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYL" = ( +/obj/structure/hygiene/shower{ + icon_state = "shower"; + dir = 4 + }, +/obj/structure/curtain/open/shower, +/obj/structure/window/reinforced, +/obj/item/soap, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aYM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/steel, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/knife/kitchen, +/obj/item/kitchen/rollingpin, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYN" = ( +/turf/simulated/wall, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aYO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aYP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYQ" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYR" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"aYS" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"aYT" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"aYU" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYW" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aYX" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/high, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/steel, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/chems/drinks/teapot, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aYZ" = ( +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZa" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZb" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/blood/splatter, +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZd" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZf" = ( +/obj/machinery/light, +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/item/minihoe, +/obj/item/hatchet, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"aZg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/kitchenspike, +/obj/item/knife/kitchen/cleaver, +/obj/effect/decal/cleanable/blood/splatter, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZi" = ( +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction/kitchen{ + icon_state = "pipe-j1s"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZk" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZl" = ( +/obj/machinery/cooker/oven, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZp" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZq" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/civilian/outreach/kitchen{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cafeteria/kitchen) +"aZr" = ( +/obj/machinery/cooker/fryer, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZs" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZt" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZu" = ( +/obj/machinery/power/smes/buildable/preset/outreach/substation, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/blue{ + icon_state = "0-8" + }, +/obj/structure/sign/warning/high_voltage{ + icon_state = "shock"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"aZv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/hygiene/drain, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/flour, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZx" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZz" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/freezer/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/hygiene/drain, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZD" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZE" = ( +/obj/structure/table/plastic, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZF" = ( +/obj/structure/table/plastic, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZH" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"aZI" = ( +/obj/machinery/cooker/grill, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZJ" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZK" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/hydroponics/backroom) +"aZL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"aZM" = ( +/obj/structure/disposaloutlet, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"aZN" = ( +/obj/structure/hygiene/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/tinted/frosted, +/obj/structure/curtain/open/privacy, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"aZO" = ( +/obj/structure/flaps/airtight, +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/structure/cable/blue, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/ore_sorting) +"aZP" = ( +/obj/structure/flaps/airtight, +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue, +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating, +/area/outreach/outpost/mining/b1/ore_sorting) +"aZQ" = ( +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/storage/box/freezer, +/obj/item/storage/box/freezer, +/obj/item/hand_labeler, +/obj/item/scanner/xenobio, +/obj/item/scanner/xenobio, +/obj/item/scanner/reagent, +/obj/item/scanner/reagent, +/obj/item/scanner/breath, +/obj/item/scanner/breath, +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aZR" = ( +/obj/machinery/microwave, +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"aZS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"aZT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"aZU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/body_scanconsole{ + icon_state = "body_scannerconsole"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"aZV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"aZW" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"aZX" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + icon_state = "mining_brace"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"aZY" = ( +/obj/structure/closet/secure_closet/outreach/eva, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"aZZ" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/b1/east) +"baa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/eva/b1/east) +"bab" = ( +/obj/machinery/disposal, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"bac" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"bad" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + icon_state = "mining_brace"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"bae" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"baf" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach/mining{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/southeast) +"bag" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bah" = ( +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bai" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"baj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bak" = ( +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/supplies) +"bal" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/directions/cryo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"bam" = ( +/obj/structure/sign/directions/medical{ + icon_state = "direction_med"; + dir = 4; + pixel_y = 24 + }, +/obj/structure/sign/directions/security{ + icon_state = "direction_sec"; + dir = 4; + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"ban" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"bao" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"bap" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/office/third) +"baq" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/command/outreach{ + icon_state = "closed"; + dir = 1 + }, +/obj/structure/disposalpipe/cap, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/lockers) +"bar" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"bas" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bat" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bau" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"bav" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"baw" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom) +"bax" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/lockers) +"bay" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "OH_brig_desk_shutters" + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"baz" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"baA" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"baB" = ( +/obj/machinery/door/airlock/glass/security/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/security/b1/breakroom/backroom) +"baC" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"baD" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/closet/secure_closet/brig, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"baE" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"baF" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"baG" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"baH" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"baI" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"baJ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"baK" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/secmaint) +"baL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/taperolls/bureaucracy, +/obj/item/storage/box/taperolls/bureaucracy, +/obj/item/storage/box/taperolls/bureaucracy, +/obj/item/storage/box/taperolls/bureaucracy, +/obj/item/storage/box/taperolls/bureaucracy, +/obj/item/storage/box/taperolls/bureaucracy, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"baM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/rack/dark, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/supplies) +"baN" = ( +/obj/structure/rack/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/supplies) +"baO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"baP" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"baQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/closet/secure_closet/outreach/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"baR" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"baS" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"baT" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/office/second) +"baU" = ( +/obj/structure/disposaloutlet, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"baV" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"baW" = ( +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"baX" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"baY" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"baZ" = ( +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"bba" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"bbb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bbc" = ( +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bbd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbe" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbf" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbg" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbh" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bbj" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbk" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbl" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbm" = ( +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"bbn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bbo" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/stairwell/basement1/command) +"bbp" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbq" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"bbr" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/supplies) +"bbs" = ( +/obj/machinery/door/airlock/security/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbt" = ( +/obj/machinery/door/airlock/command/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/basement1/command) +"bbu" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbv" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/blue{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/servers/uplink_room) +"bbw" = ( +/obj/machinery/door/airlock/command/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbx" = ( +/obj/effect/floor_decal/spline/fancy/black{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/structure/rack/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office/storage) +"bby" = ( +/obj/structure/closet/secure_closet/outreach/hazard_suit, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bbz" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 6 + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbB" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbC" = ( +/obj/machinery/door/airlock/command/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbD" = ( +/obj/structure/bed/chair/janicart, +/obj/item/janicart_key, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbE" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbF" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbG" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bbH" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbJ" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbK" = ( +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bbL" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbM" = ( +/obj/machinery/light_switch/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbN" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bbO" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbP" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbS" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bbT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bbU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbV" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bbW" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbX" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/alarm, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbY" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bbZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bca" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bcb" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcd" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/cap/visible/supply, +/obj/machinery/atmospherics/pipe/cap/visible/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bce" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcf" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcg" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bch" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bci" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bck" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcl" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcn" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bco" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bcp" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bcq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcr" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bcs" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/eva/b1/east) +"bct" = ( +/obj/structure/closet/secure_closet/outreach/hazard_suit, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcv" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian/outreach/eva, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/b1/east) +"bcw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcx" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bcy" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"bcz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcA" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + icon_state = "mining_brace"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"bcB" = ( +/obj/machinery/atmospherics/omni/filter/o2canister_refill/east_b1_eva, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcC" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + icon_state = "mining_brace"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/outreach/outpost/mining/b1/storage) +"bcD" = ( +/obj/machinery/conveyor/outreach/mining/raw_proc{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bcE" = ( +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bcF" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcG" = ( +/obj/structure/tank_rack/oxygen, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/department/eva{ + icon_state = "eva"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/basement1) +"bcI" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/department/eva{ + icon_state = "eva"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bcJ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bcK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/autoset, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"bcL" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcM" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/hygiene/drain, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 1 + }, +/obj/structure/hygiene/shower/emergency{ + icon_state = "eshower"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/east) +"bcN" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/hygiene/drain, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 4 + }, +/obj/structure/hygiene/shower/emergency{ + icon_state = "eshower"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bcO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/hygiene/shower{ + icon_state = "shower"; + dir = 4 + }, +/obj/structure/curtain/open/shower, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"bcP" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"bcQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"bcR" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/item/plunger, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"bcS" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/blast/shutters/open/cafetaria{ + icon_state = "open"; + dir = 4 + }, +/obj/item/bell{ + pixel_x = -6 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cafeteria/kitchen) +"bcT" = ( +/obj/structure/hygiene/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/curtain/open/privacy, +/obj/effect/floor_decal/spline/plain{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/restrooms) +"bcU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bcV" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bcW" = ( +/obj/structure/table/steel, +/obj/machinery/fabricator/micro/filled, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"bcX" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/closet/crate/freezer/meat, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer, +/area/outreach/outpost/cafeteria/kitchen/freezer) +"bcY" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bcZ" = ( +/obj/structure/table/steel, +/obj/item/book/manual/barman_recipes, +/obj/item/book/manual/chef_recipes, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"bda" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/item/hand_labeler, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bdb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/box/water, +/obj/item/storage/box/water, +/obj/item/storage/box/water, +/obj/item/storage/box/water, +/obj/item/storage/box/water, +/obj/item/storage/box/water, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"bdc" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"bdd" = ( +/obj/machinery/atmospherics/tvalve/bypass{ + name = "coolant flush valve"; + icon_state = "map_tvalve1"; + dir = 4 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"bde" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"bdf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdg" = ( +/obj/structure/rack, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/organ/internal/brain_interface/radio_enabled/empty, +/obj/item/paicard, +/obj/item/robot_parts/robot_suit/flyer, +/obj/item/robot_parts/chest, +/obj/item/robot_parts/l_arm, +/obj/item/robot_parts/r_arm, +/obj/item/robot_parts/head, +/obj/item/robot_parts/robot_component/binary_communication_device, +/obj/item/robot_parts/robot_component/camera, +/obj/item/robot_parts/robot_component/camera, +/obj/item/robot_parts/robot_component/diagnosis_unit, +/obj/item/robot_parts/robot_component/radio, +/obj/item/robot_parts/robot_component/actuator, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdh" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/triage) +"bdi" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/iv_drip, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"bdj" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdk" = ( +/obj/machinery/vitals_monitor, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"bdl" = ( +/obj/structure/rack, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdm" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/structure/plushie/beepsky, +/obj/item/paper_bin, +/obj/item/stamp/hos, +/obj/item/stamp/denied, +/obj/item/storage/box/holobadge, +/obj/item/storage/box/cdeathalarm_kit, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/chief_office) +"bdn" = ( +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdo" = ( +/obj/machinery/computer/modular/preset/outreach/medical, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bdp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/bloodpacks, +/obj/structure/rack, +/obj/item/storage/box/armband/med, +/obj/item/storage/box/gloves, +/obj/item/storage/box/masks, +/obj/item/storage/box/rxglasses, +/obj/item/scanner/health, +/obj/item/scanner/health, +/obj/item/scanner/health, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdq" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bds" = ( +/obj/structure/rack, +/obj/item/storage/firstaid/trauma, +/obj/item/storage/firstaid/trauma, +/obj/item/storage/firstaid/trauma, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/stab, +/obj/item/storage/firstaid/stab, +/obj/item/storage/firstaid/stab, +/obj/item/storage/firstaid/stab, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdt" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/psychiatry, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bdw" = ( +/obj/structure/bed/chair/office, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bdx" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdy" = ( +/obj/structure/rack, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/obj/item/flashlight/pen, +/obj/item/flashlight/pen, +/obj/item/flashlight/pen, +/obj/item/flashlight/pen, +/obj/item/flashlight/pen, +/obj/item/storage/box/freezer, +/obj/item/storage/box/freezer, +/obj/item/storage/box/freezer, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdz" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bdA" = ( +/obj/structure/table/steel_reinforced, +/obj/item/bell, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bdB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bdC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/structure/iv_drip, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdE" = ( +/obj/machinery/body_scanconsole{ + icon_state = "body_scannerconsole"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdF" = ( +/obj/structure/rack, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/storage/firstaid/surgery, +/obj/item/storage/firstaid/surgery, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bdG" = ( +/obj/structure/hygiene/drain, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"bdH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/iv_drip, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"bdK" = ( +/turf/simulated/wall/prepainted/medbay, +/area/outreach/outpost/medbay/head_office) +"bdL" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bdM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bdN" = ( +/obj/machinery/computer/modular/preset/outreach/medical/cloning{ + icon_state = "console-off"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"bdO" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bdP" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/medical, +/turf/simulated/floor/plating, +/area/outreach/outpost/medbay/head_office) +"bdQ" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"bdS" = ( +/obj/structure/skele_stand, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdT" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bdV" = ( +/obj/item/book/manual/robotics_cyborgs, +/obj/item/paper_bin, +/obj/item/stamp/denied, +/obj/item/stamp/cmo, +/obj/item/pen, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/item/gps/medical, +/obj/structure/table/woodentable/mahogany, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/item/toy/desk/dippingbird, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdW" = ( +/obj/machinery/computer/modular/preset/outreach/medical/cmo, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdX" = ( +/obj/machinery/faxmachine/mapped/outreach/medical, +/obj/structure/table/woodentable/mahogany, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bdZ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/disposalpipe/junction/yjunction, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bea" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"beb" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bec" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bed" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bee" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bef" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"beg" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"beh" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bei" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/medical/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/staff_room) +"bej" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bek" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bel" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/bed/roller, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bem" = ( +/obj/item/pen/red, +/obj/item/pen/green, +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"ben" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beo" = ( +/obj/machinery/sleeper, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bep" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/hygiene/drain, +/obj/structure/iv_drip, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"beq" = ( +/obj/structure/bed/chair/office/comfy/black{ + icon_state = "comfyofficechair_preview"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"ber" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bes" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"bet" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beu" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bev" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bew" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bex" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bey" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bez" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beA" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beB" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beC" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beD" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/power/apc, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"beE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"beF" = ( +/obj/structure/table/woodentable/mahogany, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/storage/box/cdeathalarm_kit, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"beG" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"beH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beI" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/directions/cryo{ + icon_state = "direction_cryo"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"beJ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/iv_drip, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"beL" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/surgery, +/obj/item/scanner/autopsy, +/obj/item/hand_labeler, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/item/paicard, +/obj/item/flashlight/pen, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"beM" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/item/newspaper, +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"beN" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"beO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"beP" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"beQ" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/table/woodentable/mahogany, +/obj/item/toy/desk/dippingbird, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"beR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"beS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"beT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"beU" = ( +/obj/structure/bed/chair/pew/left/mahogany, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"beV" = ( +/obj/structure/bed/chair/office/comfy/black{ + icon_state = "comfyofficechair_preview"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"beW" = ( +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"beX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"beY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"beZ" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bfa" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bfb" = ( +/obj/structure/table/woodentable/mahogany, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bfc" = ( +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bfd" = ( +/obj/structure/deity/altar, +/obj/item/storage/bible, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"bfe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bff" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"bfg" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bfh" = ( +/obj/structure/flora/pottedplant/tropical, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bfi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bfj" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bfk" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/super, +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bfl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"bfm" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bfn" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bfo" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_hos) +"bfp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bfq" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bfr" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bfs" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bft" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bfu" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bfv" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bfw" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bfx" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bfy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"bfz" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"bfA" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"bfB" = ( +/obj/structure/cable/blue{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"bfC" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 8 + }, +/obj/machinery/light, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/controller_room) +"bfD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/machinery/computer/account_database{ + icon_state = "computer"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"bfE" = ( +/obj/machinery/camera/network/security, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/servers/access) +"bfF" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 8 + }, +/obj/machinery/light, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"bfG" = ( +/obj/structure/cable/blue{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + icon_state = "11"; + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/control/servers/uplink_room) +"bfH" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/blue{ + icon_state = "0-8" + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/control) +"bfI" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/outreach/outpost/command/hall) +"bfJ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"bfK" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/basement1/command) +"bfL" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"bfM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"bfN" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"bfO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"bfP" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "OH_brig_desk_shutters" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1) +"bfQ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bfR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"bfS" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bfT" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bfU" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bfV" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bfW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bfX" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/lab/research) +"bfY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"bfZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"bga" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/fabricator/imprinter/filled, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bgb" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/iv_drip, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bgc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bgd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bge" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgf" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"bgh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"bgi" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bgk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgm" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgo" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgp" = ( +/obj/structure/hygiene/drain, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bgq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"bgr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bgs" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bgt" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bgu" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bgv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgw" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bgx" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgy" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgA" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bgB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgC" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bgE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bgF" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bgG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bgH" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bgI" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bgJ" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/research) +"bgK" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/fabricator/protolathe/filled, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bgL" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bgM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bgN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bgO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/structure/closet/firecloset, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/orange, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/storage) +"bgP" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/hygiene/sink{ + icon_state = "sink"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bgQ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/artifact_analyser, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bgR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/artifact_harvester, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bgS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bgT" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/recharge_station, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bgU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bgV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bgW" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bgX" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bgY" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/fabricator/robotics/filled, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bgZ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/mech_recharger, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bha" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment/bent, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhd" = ( +/obj/machinery/light, +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/item/scanner/plant, +/obj/item/scanner/plant, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bhe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhg" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bhh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhi" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/research/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/research) +"bhj" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/closet/excavation, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/experiment) +"bhk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"bhl" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"bhm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/lab) +"bhn" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bho" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/floor_decal/spline/plain/purple, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bhp" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bhr" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno/storage) +"bhs" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/research/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/xeno/experiment) +"bht" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/research/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/xeno/storage) +"bhu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhv" = ( +/turf/simulated/wall, +/area/outreach/outpost/lab/xeno) +"bhw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhx" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/computer/robotics, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bhy" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhA" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/suspension_gen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bhB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhC" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bhD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bhE" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/window/reinforced/outreach/security/warden, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/armory/warden_office) +"bhF" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhG" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhJ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhK" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhL" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/rack/dark, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/item/storage/box/taperolls/police, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/breakroom/backroom) +"bhM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhN" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bhO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"bhP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bhQ" = ( +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"bhR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"bhS" = ( +/obj/machinery/optable, +/obj/structure/hygiene/shower{ + icon_state = "shower"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/cloning) +"bhT" = ( +/obj/structure/table/glass, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bhU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bhV" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bhW" = ( +/obj/machinery/sleeper, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bhX" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bhY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/basement1) +"bhZ" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bia" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bib" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/fabricator/robotics, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bic" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/op_room) +"bid" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bie" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bif" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"big" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bih" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bii" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/flora/pottedplant/tropical, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bij" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/medical/outreach/head{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/head_office) +"bik" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bil" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bim" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bin" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bio" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bip" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"biq" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bir" = ( +/obj/structure/flora/pottedplant/tropical, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"bis" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/research/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/research) +"bit" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biu" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biv" = ( +/obj/machinery/alarm, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biw" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bix" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/item/scanner/gas, +/obj/item/scanner/gas, +/obj/structure/closet/toolcloset, +/obj/effect/floor_decal/spline/plain/orange, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/storage) +"biy" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biA" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biB" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biC" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biE" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biF" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/lab/xeno) +"biG" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/light, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biH" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"biI" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"biJ" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research) +"biK" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/research/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/xeno) +"biL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biO" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biP" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biR" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"biS" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"biV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biX" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"biY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"biZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bja" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/research/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/xeno) +"bjb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bjc" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bjd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/marble, +/obj/item/flame/candle, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bje" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"bjf" = ( +/turf/simulated/wall/r_wall/prepainted/mining, +/area/outreach/outpost/chapel) +"bjg" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/civilian/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/restrooms) +"bjh" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/third) +"bji" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/secure_closet/outreach/command, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"bjj" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/fabricator/filled, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"bjk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"bjl" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/rack/dark, +/obj/structure/window/reinforced, +/obj/item/storage/box/tapes, +/obj/item/storage/box/tapes, +/obj/item/storage/box/tapes, +/obj/item/storage/box/tapes, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"bjm" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bjn" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/structure/rack/dark, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"bjo" = ( +/obj/machinery/bodyscanner{ + icon_state = "body_scanner_0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bjp" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/triage) +"bjq" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bjr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bjs" = ( +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby) +"bjt" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bju" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bjv" = ( +/obj/structure/iv_drip, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bjw" = ( +/obj/structure/bed/roller, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bjx" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bjy" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/woodentable/mahogany, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bjz" = ( +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bjA" = ( +/obj/structure/filing_cabinet, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bjB" = ( +/obj/structure/cryofeed{ + icon_state = "cryo_rear"; + dir = 4 + }, +/obj/machinery/cryopod/despawner, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"bjC" = ( +/obj/structure/cryofeed, +/obj/machinery/cryopod/despawner{ + icon_state = "body_scanner_0"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/sleeproom) +"bjD" = ( +/obj/machinery/conveyor_switch/outreach/mining/cargo_delivery, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"bjE" = ( +/obj/structure/closet/secure_closet/outreach/eva, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bjF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bjG" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/atmospherics/b1/hall) +"bjH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + icon_state = "11"; + dir = 6 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"bjI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"bjJ" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "11"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/control/cooling) +"bjK" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/supply) +"bjL" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office) +"bjM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjN" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"bjO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/command/archives) +"bjP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjQ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjS" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair_preview"; + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjT" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/bed/chair/office/comfy/beige, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjU" = ( +/obj/effect/decal/cleanable/filth, +/obj/item/trash/cigbutt/jerichos, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjV" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjW" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/structure/table/woodentable/walnut, +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjX" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjY" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bjZ" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bka" = ( +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/fabricator/filled, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/workshop) +"bkb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/medical/outreach{ + icon_state = "closed"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/workshop) +"bkc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkd" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bke" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkf" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkg" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bki" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkj" = ( +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bkk" = ( +/obj/machinery/photocopier, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bkl" = ( +/obj/structure/filing_cabinet, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/lobby/counter) +"bkm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/storage) +"bkn" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bko" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bkp" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bkq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/main_hall) +"bkr" = ( +/obj/structure/coatrack, +/obj/effect/floor_decal/spline/plain/paleblue, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bks" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/structure/bed/psych/leather, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bkt" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/office) +"bku" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bkv" = ( +/obj/effect/floor_decal/spline/plain/paleblue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bkw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 5 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing) +"bkx" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bky" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light_switch, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bkz" = ( +/obj/structure/cable/blue, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bkA" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/structure/disposaloutlet{ + name = "disposal outlet (mining delivery)" + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"bkB" = ( +/obj/structure/cable/blue{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"bkC" = ( +/obj/structure/cable/blue{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bkD" = ( +/obj/machinery/material_processing/unloader{ + input_turf = 4; + output_turf = 1 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bkE" = ( +/obj/machinery/conveyor/outreach/mining/unloader_out{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bkF" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" + }, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bkG" = ( +/turf/simulated/wall, +/area/outreach/outpost/hydroponics/backroom) +"bkH" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"bkI" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/processing_hall) +"bkJ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"bkK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bkL" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/civilian/outreach/botany, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hydroponics/backroom) +"bkM" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"bkN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"bkO" = ( +/obj/machinery/atmospherics/omni/filter/o2canister_refill/south_b1_eva, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bkP" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + icon_state = "11"; + dir = 9 + }, +/obj/structure/closet/secure_closet/outreach/eva, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/b1/south) +"bkQ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bkR" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bkS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"bkT" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bkU" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bkV" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bkW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southwest) +"bkX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bkY" = ( +/obj/machinery/light, +/obj/structure/table/marble, +/obj/item/urn, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bkZ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest) +"bla" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"blb" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"blc" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"bld" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"ble" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"blf" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"blg" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"blh" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"bli" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"blj" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/megaphone, +/obj/item/stamp/ward, +/obj/item/stamp/denied, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"blk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/hologram/holopad, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"bll" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blm" = ( +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"bln" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/machinery/computer/modular/preset/security{ + icon_state = "console-off"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/armory/warden_office) +"blo" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blp" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blq" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blr" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bls" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blu" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"blv" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blw" = ( +/obj/structure/sign/department/forensics{ + icon_state = "forensics"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory) +"blx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"bly" = ( +/obj/structure/closet/secure_closet/security/outreach, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"blz" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"blA" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"blB" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"blC" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/weapons) +"blD" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/security/b1/armory/vault/evidences) +"blE" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"blF" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/secmaint) +"blG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"blH" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/secmaint) +"blI" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/internals, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/control) +"blJ" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blK" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/camera/network/security, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blL" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blM" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blN" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/hall) +"blO" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blP" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blQ" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall) +"blR" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"blS" = ( +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"blT" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"blU" = ( +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/archives) +"blV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/supplies) +"blW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/filth, +/obj/item/trash/cigbutt/jerichos{ + pixel_y = 3; + pixel_w = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"blX" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/structure/filing_cabinet, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"blY" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/table/woodentable/walnut, +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair"; + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb2"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/office/second) +"blZ" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"bma" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"bmb" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/B) +"bmc" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/brig) +"bmd" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/machinery/recharger/wallcharger{ + icon_state = "wrecharger0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"bme" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/monotile, +/area/outreach/outpost/security/b1/cell/C) +"bmf" = ( +/obj/effect/floor_decal/spline/plain/red, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/lockers) +"bmg" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/security/b1/hallway/to_brig) +"bmh" = ( +/obj/effect/floor_decal/spline/plain/red{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/security/b1/hallway/to_brig) +"bmi" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"bmj" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/basement1) +"bmk" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/basement1) +"bml" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"bmm" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"bmn" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bmo" = ( +/obj/effect/wallframe_spawn/no_grille/concrete, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/chapel) +"bmp" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/basement1) +"bmq" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/basement1) +"bmr" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bms" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bmt" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bmu" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bmv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bmw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bmx" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bmy" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmz" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bmA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bmB" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmC" = ( +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bmD" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bmF" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east/junct) +"bmG" = ( +/obj/structure/sign/department/chemistry{ + icon_state = "chemistry"; + dir = 4; + pixel_x = -32 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bmI" = ( +/obj/structure/disposalpipe/segment/bent, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bmK" = ( +/obj/structure/cable/blue{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/atmospherics/b1/hall) +"bmL" = ( +/obj/machinery/atmospherics/valve/shutoff, +/obj/effect/floor_decal/industrial/shutoff, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bmN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bmO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bmP" = ( +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bmQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bmR" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"bmS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bmT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bmU" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bmV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bmW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/storage) +"bmX" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/hall/inner) +"bmY" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bmZ" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bna" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bnb" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bnc" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/internals, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bnd" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"bne" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/radiocarbon_spectrometer, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnf" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bng" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bni" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bnj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"bnk" = ( +/obj/structure/filing_cabinet, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/head_office) +"bnl" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/paleblue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/medbay/staff_room) +"bnm" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/staff_room) +"bnn" = ( +/obj/effect/wallframe_spawn/no_grille/prepainted/medical, +/turf/simulated/floor/plating, +/area/outreach/outpost/medbay/lobby) +"bno" = ( +/obj/machinery/door/airlock/double/glass/medical{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/medbay/lobby) +"bnp" = ( +/turf/simulated/wall/concrete/prepainted/medbay, +/area/outreach/outpost/medbay/lobby/counter) +"bnq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/floor_decal/spline/plain/purple, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bnr" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/computer/modular/preset/outreach{ + icon_state = "console-off"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/workshop) +"bns" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/research/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/research/workshop) +"bnt" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bnu" = ( +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bnv" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bnw" = ( +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/research/room) +"bnx" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/research/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/lab/research/room) +"bny" = ( +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnA" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnB" = ( +/obj/effect/floor_decal/spline/plain/purple, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnC" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/obj/effect/floor_decal/spline/plain/purple{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/lab/xeno) +"bnD" = ( +/obj/structure/bed/chair/armchair/beige{ + icon_state = "armchair_preview"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"bnE" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/outreach/outpost/chapel) +"bnF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/obj/structure/table/marble, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box/incense, +/obj/item/storage/candle_box/incense, +/obj/item/storage/candle_box/incense, +/obj/item/storage/candle_box/incense, +/obj/item/storage/candle_box/incense, +/obj/item/storage/candle_box/incense, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bnG" = ( +/obj/structure/table/marble, +/obj/item/flame/candle, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/outreach/outpost/chapel) +"bnH" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnI" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnJ" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnK" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/commandmaint) +"bnL" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster{ + icon_state = "frame"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/arcade/orion_trail, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cafeteria) +"bnO" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bnP" = ( +/obj/machinery/light, +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bnQ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/green, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bnR" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/green{ + icon_state = "spline_plain"; + dir = 6 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hydroponics) +"bnS" = ( +/obj/machinery/door/firedoor, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" }, -/turf/simulated/floor/tiled/dark, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "OH_brig_desk_shutters" + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/security, +/turf/simulated/floor/plating, /area/outreach/outpost/security/b1/brig) -"Qx" = ( -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"QD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 +"bnT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"bnU" = ( +/obj/effect/floor_decal/spline/plain/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"bnV" = ( +/obj/machinery/light/small, +/obj/effect/floor_decal/spline/plain/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"bnW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/floor_decal/spline/plain/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"bnX" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/firealarm{ + icon_state = "casing"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/floor_decal/spline/plain/orange{ + icon_state = "spline_plain"; + dir = 6 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/maint/passage/b1/north) +"bnY" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"QF" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-4" }, /obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/plating, +/area/outreach/outpost/control/hall) +"bnZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/freezer/meat, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/black, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"boa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/spline/plain/black{ + icon_state = "spline_plain"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/cafeteria/kitchen) +"bob" = ( +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 9 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"QL" = ( -/obj/structure/barricade/wood, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Re" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"boc" = ( +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bod" = ( +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Rk" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"boe" = ( +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Ry" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "1-2" + dir = 9 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"RA" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_conference) -"RH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"RO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 4 +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bof" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 }, +/obj/structure/reagent_dispensers/watertank/firefighter, /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/secmaint) -"RR" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/taperecorder/empty, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"RS" = ( -/obj/machinery/camera/network/security, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bog" = ( +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northeast/airlock) +"boh" = ( +/obj/effect/decal/cleanable/generic, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"RW" = ( -/obj/machinery/door/airlock/glass/security{ - dir = 8; - icon_state = "closed"; - id_tag = "OH_brig_cell3_bolt" - }, +/area/outreach/outpost/mining/b1/processing_hall) +"boi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -21686,383 +36069,378 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/mining/b1/ore_sorting) +"boj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast/airlock) +"bok" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southwest/airlock) +"bol" = ( +/obj/effect/decal/cleanable/generic, +/obj/structure/disposalpipe/up, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/east/junct) +"bom" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/blue{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/cell/C) -"Si" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bon" = ( +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"boo" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Sr" = ( /obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Sz" = ( +/area/outreach/outpost/maint/passage/b1/southeast) +"bop" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/mining, +/obj/structure/closet/emcloset/outreach, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Tc" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/area/outreach/outpost/mining) +"boq" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bor" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Tl" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_conference) -"Tr" = ( -/obj/machinery/door/airlock/glass/security{ - dir = 8; - icon_state = "closed"; - id_tag = "OH_brig_cell1_bolt" +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bos" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bot" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bou" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/security/b1/cell/A) -"Ts" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bov" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"bow" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"TH" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"box" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"TI" = ( -/obj/structure/closet, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"TW" = ( -/obj/structure/noticeboard, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/effect/catwalk_plated, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"TY" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/b1/southeast) -"Ug" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boy" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ icon_state = "11-supply"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/control/command_hall) -"Uh" = ( -/turf/simulated/wall/r_wall/prepainted/security, -/area/outreach/outpost/security/b1/hallway) -"Ui" = ( -/obj/structure/hygiene/shower{ - icon_state = "shower"; - dir = 1 +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boz" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/window/basic{ - icon_state = "window"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boA" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/outreach/outpost/restrooms) -"Uk" = ( /turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"Uz" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/folder/envelope, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"UL" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/noticeboard, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"UO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/office/comfy/beige{ - icon_state = "comfyofficechair"; +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Vd" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boC" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"Vl" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 5 +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boD" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/closet/secure_closet/brig, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"Vs" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_room) -"Vt" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Vv" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/basement1) -"Vz" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boG" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ icon_state = "apc0"; - dir = 4 + dir = 8 }, -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 5 +/obj/structure/cable/yellow{ + icon_state = "0-4" }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boH" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/C) -"VC" = ( -/turf/simulated/wall/r_wall/prepainted/security, -/area/outreach/outpost/security/b1/cell/A) -"VE" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - icon_state = "11"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boI" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/porta_turret/stationary/stun, -/turf/simulated/floor/bluegrid, -/area/outreach/outpost/control/servers) -"VO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boL" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/command{ - dir = 4; - icon_state = "closed" +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boM" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/manifold/visible{ + icon_state = "map"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/control/command_conference) -"Wc" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"Wm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"Wr" = ( -/turf/simulated/wall/r_wall/prepainted/security, -/area/outreach/outpost/security/b1/cell/C) -"Ws" = ( -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/passage/b1/north/atmos) -"Ww" = ( -/obj/structure/cable/blue{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/plain/brown{ - icon_state = "spline_plain"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/mining/b1/foyer) -"WH" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/engineering/b1/storage) -"WO" = ( -/turf/simulated/wall/r_wall/prepainted/atmos, -/area/outreach/outpost/atmospherics/b1/storage/canister) -"WP" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +"boN" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 - }, -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; - dir = 10 + dir = 4 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/B) -"WX" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"boO" = ( /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ icon_state = "map-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; + dir = 9 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_room) -"WY" = ( -/turf/simulated/wall/r_wall/prepainted/atmos, -/area/outreach/outpost/atmospherics/b1/hall) -"Xv" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southwest/airlock) -"XA" = ( /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"XM" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"boP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"Yj" = ( -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/outreach/outpost/maint/passage/b1/southeast) -"Yl" = ( -/obj/effect/floor_decal/spline/fancy/black, -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_conference) -"Yy" = ( -/turf/simulated/floor/tiled/techfloor/grid, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/b1/northwest/airlock) -"Yz" = ( -/obj/effect/floor_decal/spline/plain/blue{ - icon_state = "spline_plain"; - dir = 8 - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 +"boQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"YB" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boR" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/catwalk_plated, -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/b1/southeast/airlock) -"YI" = ( +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"boS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/airlock) +"boT" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -22070,40515 +36448,40682 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/hallway) -"YM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) -"YR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/northwest/atmos) +"boV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/effect/floor_decal/spline/plain/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/outreach/outpost/security/b1/cell/C) -"Zg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 6 + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"boW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"boX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_office) -"Zn" = ( -/obj/effect/floor_decal/spline/plain/red{ - icon_state = "spline_plain"; +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 1 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"ZF" = ( -/turf/simulated/wall/r_wall/prepainted/command, -/area/outreach/outpost/control/command_office) -"ZJ" = ( -/obj/effect/floor_decal/spline/fancy/black{ - icon_state = "spline_fancy"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"boY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/high{ - icon_state = "apc0"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"ZR" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/clipboard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/b1/northwest/research) +"boZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/hatch/orange, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 6 + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/control/command_conference) -"ZS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bpa" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/dummy_airlock_controller{ + id_tag = "OH_l2_n_alck" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bpb" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/north/airlock) +"bpc" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bpd" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bpe" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1/brig) -"ZW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bpf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bpg" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bph" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/basement1) +"bpi" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/basement1) +"bpj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 10 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bpk" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bpl" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/outreach/outpost/security/b1) +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/b1/southeast) +"bpm" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"bpn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/southeast) +"bpo" = ( +/obj/structure/railing/mapped, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/bombclosetsecurity, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/security/b1/hallway/to_brig) +"eOX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) +"ilu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/b1/east) (1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EL +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aEL "} (2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (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 -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (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 -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (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 -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (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 -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -pM -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +apM +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -zH -ae -zH -ae -zH -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +azH +aae +azH +aae +azH +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -wy -vH -vH -vH -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +awy +avH +avH +avH +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -mK -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +amK +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -wy -mX -mE -pa -wy -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +awy +amX +amE +apa +awy +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -mK -mX -vH -pa -mK -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +amK +amX +avH +apa +amK +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -wy -ad -vH -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +awy +aad +avH +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -vH -qf -wy -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +avH +aqf +awy +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mX -mE -qf -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amX +amE +aqf +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ae -ae -ae -ab -ae -ab -ae -ae -ab -ae -ae -ae -ab -ae -ae -ab -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aae +aae +aae +aab +aae +aab +aae +aae +aab +aae +aae +aae +aab +aae +aae +aab +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awy +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ae -ab -ab -ae -ae -ae -ae -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aae +aab +aab +aae +aae +aae +aae +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -mX -vH -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +amX +avH +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -mK -mX -mE -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +amK +amX +amE +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +awy +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +afT +afT +afT +afT +afT +afT +afT +afT +afT +aKP +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeh +amC +aeh +amC +aeh +amC +aeh +amC +aIL +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amX +amE +apa +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wy -mX -mE -qf -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awy +amX +amE +aqf +awy +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wy -ad -mE -qf -wy -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awy +aad +amE +aqf +awy +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -vH -qf -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +avH +aqf +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -mK -mX -vH -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +amK +amX +avH +apa +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +awy +amX +amE +apa +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ae -ab -ae -ae -ae -ae -ae -ab -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -mK -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -wy -ae -Mh -Mh -Mh -Mh -Mh -Mh -Mh -Mh -Mh -Mh -Mh -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +awy +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -mX -vH -pa -mK -ae -Mh -ae -Mi -Mk -Mi -Mk -Mi -Mk -Mi -Mk -Mh -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +amX +avH +apa +amK +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ae -ab -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -wy -mX -mE -pa -mK -ae -Mh -Mi -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mm -Mh -ae -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ab -ae -ae -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aae +aab +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +awy +amX +amE +apa +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aae +aab +aae +aae +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -wy -ad -mE -pa -wy -ae -Mh -Mj -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mk -Mh -ae -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +awy +aad +amE +apa +awy +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ae -Mh -Mi -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mm -Mh -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +aKP +aae +axZ +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -wy -zH -Mh -Mj -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mk -Mh -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +awy +afT +aeT +anp +anp +anp +anp +anp +anp +anp +amC +aKP +axZ +axZ +axZ +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -wy -ae -Mh -Mi -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mm -Mh -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +awy +afT +aeh +anp +anp +anp +anp +anp +anp +anp +azY +acd +acd +acd +acd +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +bbe +aKP +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -mK -mX -mE -qf -wy -zH -Mh -Mj -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mk -Mh -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +amK +amX +amE +aqf +awy +afT +aeT +anp +axI +anp +anp +anp +anp +azY +aIL +acd +blJ +atN +blO +bbe +aPG +bcn +bbD +bbg +bcm +bbg +bbg +bcm +bce +bcm +bbg +bcm +bcc +bcm +bbg +bcm +bbg +bbg +bcm +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mX -vH -pa -wy -ae -Mh -Mi -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mm -Mh -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amX +avH +apa +awy +afT +aiq +anu +axN +aeT +azY +aeT +azY +aIL +aIL +acd +aku +auJ +aIk +bbw +bbu +bbG +bbG +bck +bcb +bck +bbG +bck +bbG +bbG +bck +bcd +bci +bmY +bcf +bcf +bmZ +bcf +bcg +bcm +bbe +aKP +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -wy -mX -mE -pa -wy -zH -Mh -Mj -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mk -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aKP +akM +amX +amE +apa +akM +aKP +afd +amV +adN +adN +adN +adN +adN +adN +adN +acd +akA +blN +aIl +ahI +ahI +ahI +ahI +ahI +ahI +ahI +ahI +aOe +aOe +aOe +azJ +azJ +azJ +azJ +azJ +azJ +azJ +azJ +bna +bbg +bbe +aKP +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -hB -dM -lA -na -nh -nu -nA -Mh -Mi -Ml -Ml -Ml -Ml -Ml -Ml -Ml -Mm -Ix -pU -pU -pU -pU -pU -pU -Ix -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ae -ab -ae -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aKP +ahf +alA +ana +anh +alj +aBn +aeG +adC +adC +adC +aBr +aBr +aBr +aBr +aBr +aBr +akC +auM +blP +ahI +ajQ +aPH +baR +aJe +bbq +aOh +aUC +aPI +bmX +aUa +azJ +aSI +aSX +aTi +bfO +bfO +baJ +azJ +bfq +bcm +bbe +aKP +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aae +aab +aae +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -hf -mR -nj -mR -nR -mR -np -Mh -zY -zY -Mj -Mm -Mj -Mm -Mj -Mm -ae -Ix -pU -px -px -px -px -pU -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aKP +amR +anj +amR +anR +aBn +aBn +alE +adC +ard +azT +aDE +aDK +aEh +aIj +aSV +aBr +blK +auM +aIl +ahI +atU +ayb +ayZ +aLL +ayZ +aMa +aUC +aOt +aPN +aUb +azJ +aSN +aVp +aSY +aVp +aVp +baP +azJ +bch +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kM -mR -mQ -ny -ni -mR -kM -aM -lb -tC -Br -DI -DI -DI -Em -Gy -HB -iq -pU -px -px -px -px -pU -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aaL +aaL +aaL +aaL +aaL +aaL +amR +amQ +any +ani +aBn +abC +alF +adC +atI +axX +aBy +aDL +aEk +aIu +aSW +aBr +akA +auM +aIl +ahI +akW +aPM +azC +aOg +aPL +aNw +aOT +aOt +aQc +aSD +azJ +aSO +aSZ +aUl +aUl +aUG +blb +azJ +bch +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -aB -aB -aB -aB -aB -mR -nm -nc -od -aM -aM -aM -dP -aM -aM -aM -aM -aM -aM -Dt -aM -Oi -Oi -Oi -Oi -px -px -pU -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aaL +aaL +aaL +aaL +aaL +aaL +amR +anm +anc +aod +aBn +acY +azQ +adC +anT +azi +aDI +aDM +aEm +aIY +aVH +aBr +blL +auM +aIl +ahI +ali +aTa +azG +aJs +aTd +aUw +bap +aOw +aTe +aUc +aOc +aTL +aTh +aUm +bji +baQ +bfN +azJ +bfq +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -qj -qj -qj -BH -mR -mW -nt -nl -aM -dO -mV -lj -xb -BB -BB -DV -Eg -En -GA -aM -HP -ku -Ic -Oi -PB -PB -PB -Ix -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaL +aaL +aqj +aqj +aqj +aBH +amR +amW +ant +anl +aBn +adI +bjJ +adC +avJ +azm +aBD +aBD +aEj +aEj +aBD +aBD +alf +auM +aMy +ahI +aOp +axY +baZ +aOg +baZ +aNZ +aUC +aPJ +aTg +aUb +azJ +aUi +aSY +aVp +aSY +blU +blc +azJ +bna +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -aB -rp -AP -AQ -BL -mR -az -mR -nw -aM -my -oK -BM -zo -dC -dC -DG -dC -dC -DG -dC -HT -My -Ii -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +bgA +arp +aAP +aAQ +aBL +amR +aaz +amR +anw +aBn +adO +anA +adC +bfE +azo +aEi +aDV +aEn +aJa +aVK +aBD +alo +avj +aOi +ahI +apv +aUI +bba +aJD +bjh +aPF +aUC +aOA +aTg +aUd +azJ +aUn +aTx +aUy +aTx +bjO +bjN +azJ +bch +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -ap -xy -fe -AZ -Dz -am -au -dl -nF -aM -mz -zW -oa -IY -dC -xz -DM -Ek -FH -FU -dC -cd -HY -Ij -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +bms +acg +aOl +boM +boP +arW +aNU +aNV +anF +aaM +aff +alg +agW +aog +azU +aBM +aDN +aFE +aIN +bfC +aBD +alO +avW +aPr +aiU +alP +alP +alP +alP +alP +alP +alP +aOB +aTI +aSP +bbr +bbr +bbr +bbr +bbr +bbr +bbr +bbr +bna +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -fe -Yy -Wc -Kv -ap -aD -el -pp -aM -mC -zW -Ea -IZ -dI -dJ -VE -DC -VE -Iu -dC -cd -My -Ih -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bmu +bmu +bmu +bmw +aju +bmw +bmu +acc +boA +bmw +bmu +boG +boI +boJ +aau +afe +boN +aKv +aap +aNT +app +apr +aaM +adQ +aEe +ahG +axz +azV +aEq +aEc +aFH +aMn +aVM +aBD +anB +axq +aVF +aiU +axM +aya +azI +azI +aya +aTW +alP +aPJ +aTg +aUb +bbr +bjn +aVq +aUL +aUo +aUo +bld +bbr +bfq +bbg +bbe +aKP +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -ju -cc -cc -lu -cc -cc -cc -lu -cc -cc -cc -lu -cc -cc -cc -cc -BA -Kw -ap -aE -jx -ow -aM -og -zm -Ec -Ja -dC -eG -DC -DC -DC -Mz -dC -cd -My -Ij -Oi -PB -PB -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +boD +bmv +boB +bmv +alu +axy +aAZ +aDz +boF +boH +boK +boL +boH +boQ +boR +boS +boO +aKw +aap +aaE +ajx +apT +aaM +aff +aEg +aBu +anT +azm +aDB +aDB +aEo +aEo +aDB +aDB +anB +ayE +baF +aiU +aVw +aFe +aAN +aOj +aJN +aTl +aOX +aOt +aQo +aUb +bbr +aVs +aUE +aUq +aVt +aUq +baW +bbr +bch +bbg +bbe +aKP +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -aB -be -ap -bi -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WO -WO -WO -WO -WO -WO -bj -ep -el -gv -aM -aM -BI -lF -Mq -dC -ge -DC -Et -FG -MA -dC -HT -My -Ij -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +bgA +bms +bmu +bot +aWY +aWY +aWY +aWY +aWY +aWY +aWY +aWY +aWY +aWY +aWY +afh +afh +afh +afh +afh +afh +aGg +acS +ael +blR +aaM +afD +aVG +adC +atC +azX +aFG +aDW +aGy +aMp +bfB +aDB +alo +axq +blQ +aiU +apw +aFg +aCS +aOH +aOV +aOL +baq +aOC +aTJ +aSD +bbr +aXI +aVt +bak +bak +aUq +ble +bbr +bch +bbg +bbe +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -aB -be -ap -bi -WY -aI -cH -cH -cH -da -dG -dU -go -ia -ig -fh -kn -kn -iH -MF -jf -bj -qK -el -pc -ak -fd -or -nT -zU -dC -lB -DC -FE -DC -MB -dC -cd -HY -Ii -Oi -px -px -PB -Ix -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +bgA +bms +bmw +bos +aWY +aac +abn +adG +abn +acL +bjH +adU +ago +bjI +aig +agC +aiW +ajg +akp +akn +aFP +aGg +aep +ael +apX +aaM +aak +amy +adC +axb +azW +aDG +aEa +aGA +aMq +bfF +aDB +anX +aAL +aPr +aiU +azD +ayi +aCY +aOJ +ayi +aUx +alP +aPK +aTg +aTb +bbr +aSS +aUq +bak +bak +aVt +baW +bbr +bch +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -aB -be -ap -bi -WY -aQ -bW -aU -ba -ac -bz -ca -cI -cR -iF -WO -kp -gp -Jq -iK -jg -bj -gv -el -gv -ak -Ee -Ed -MT -Bq -dC -DB -DC -DC -DC -MC -dC -cd -My -Ij -Oi -px -px -PB -Ix -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +bgA +bms +bmw +bos +aWY +aaI +abW +abv +aba +acQ +abz +aca +acI +acR +aiF +afh +aaD +aji +aFw +aFv +aFT +aGg +agv +ael +agv +aaM +adM +anM +adC +axP +aBf +bbv +aEb +aFI +aMz +bfG +aDB +anB +axq +aPr +alL +alV +alV +alV +alV +alV +alV +alV +aOt +aQo +aUf +aPB +aST +aUs +bak +bak +bfl +baW +bbr +bfq +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aR -aT -aV -bb -dq -bK -fI -ca -hV -Jl -WY -WY -WY -WY -MG -MI -bj -gv -el -Ki -ak -ff -Mg -Mn -Bu -dI -DE -Oa -zX -Oa -MB -dC -cd -My -Ij -Oi -PB -PB -PB -Ix -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaQ +aaT +aaV +abb +acW +abK +afI +aca +ahV +aJl +afh +afh +afh +afh +aNW +aGe +aGg +agv +ael +ahe +aaM +adP +azn +adC +azr +aDt +adv +adv +bfH +bfH +adv +adv +blM +axq +aPr +alL +anK +ayO +auT +aFh +apA +aOM +alV +aOt +aTM +aUg +aPS +aSU +aVu +baM +baN +bjk +blf +bbr +bch +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bw -WY -aS -bW -aW -bb -bm -bM -ci -cJ -cT -Jm -fi -gu -hn -WY -iW -ji -bj -Hv -ky -oO -ak -hG -bC -zi -BG -dC -gW -DJ -Ei -Eq -By -dC -HT -My -Ij -Oi -px -px -PB -Ix -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bot +aWY +aaR +abW +aaW +aiR +acX +abM +aci +acJ +acT +aJm +afi +agu +ahn +afh +abj +aje +aGg +agI +aky +aqk +adv +age +amz +aou +aqa +aBv +aDR +aEd +aId +aMA +aVN +adv +alo +axq +blQ +alL +apl +aqu +aGM +aqt +aJR +aOF +aPa +aPJ +aTg +aUh +aPB +aTk +aUq +aVt +aUq +blV +baX +bbr +bch +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -by -aT -aY -bW -bn -bz -cn -ca -Ap -Jn -fi -gz -hq -WY -je -jm -bj -RS -el -pp -ak -BD -dN -Mp -ak -dC -Bz -DN -Eo -dC -DK -dC -cd -My -Ih -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaS +aaT +aby +abW +ada +abz +acn +aca +aAp +aJn +afi +agz +ahq +afh +aiK +ajf +aGg +ahd +ael +aqK +adv +alb +aot +aqy +aoK +atG +aDT +azs +azs +aMC +aVO +adv +anB +axq +aVF +alL +apE +auV +aHb +aOf +bjL +aON +aOU +aPQ +aTJ +aSD +bbr +aTn +aVt +aUq +aUq +aUq +blg +bbr +bch +bbg +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -bv -ac -cW -ac -bp -bz -cn -ca -cU -Jo -WY -WY -WY -WY -WO -oc -bj -gv -el -gv -dv -jV -dQ -zn -zs -BC -DL -Eb -Eh -dC -Hw -dC -cd -My -Ii -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +aaU +abp +abY +abp +adq +abz +acn +aca +acU +aJo +aWY +aWY +aWY +afh +afh +ajm +aGg +blR +ael +agv +adv +ajc +aqV +aCD +aDQ +azs +aEt +aBp +aBp +azs +bfD +adv +anB +axq +aOi +alL +ari +aug +aHH +aJL +aNY +aOO +alV +aOA +aTg +aUd +bbr +aTw +aTq +baL +bjl +baU +baY +bbr +bnb +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -bY -ac -cW -ac -ac -bz -cn -hV -cU -dX -eH -ih -jj -jq -jz -lW -aX -Ki -yI -gv -dv -eF -ot -tG -Bp -Bp -Bv -DW -FY -dC -DQ -dC -cd -My -Ij -Oi -PB -PB -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaY +abn +acC +abn +adE +abz +acn +ahV +acU +adX +aeH +aih +bmK +aKg +aKj +alW +aaX +ahe +ayI +blR +aeF +aeF +aeF +aeF +azS +azP +aFU +aIX +aBp +aBp +biH +adv +anB +axq +aPr +alL +alV +auQ +auQ +auQ +auQ +alV +alV +aPJ +aQo +aTc +baT +baT +baT +baT +baT +baT +baT +baT +bna +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aQ -aT -cX -bc -cW -bN -cn -ca -cU -dY -fk -fk -cR -ii -ca -Jb -aX -gv -kz -gv -dv -lv -oX -Pv -Bf -zP -tG -zS -Bp -Gd -HA -dv -HT -My -Ij -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +bgA +bms +bmu +bot +aWY +aaI +aaT +acE +abc +adV +abN +acn +aca +acU +adY +afk +aii +aca +ahV +aca +aJb +aaX +agv +ael +agv +aeF +ajV +aoa +aBB +azR +aBz +aHw +azs +azs +aBp +aVL +adv +aUe +axq +baG +alc +alT +aph +aph +aph +aph +avi +aFf +aOD +aTg +aSD +aQL +aUr +aUz +baV +baO +bjQ +blX +baT +bch +bcm +bbe +aKP +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -aB -be -ap -bw -WY -aS -aT -aZ -cY -bl -cv -co -ca -cU -dX -ca -hV -ca -hV -ca -MJ -aX -CA -lI -Ki -dv -lg -zr -zQ -zR -CD -BE -jc -DP -FI -IX -dv -cd -My -Ij -Oi -px -px -PB -Ix -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaR +aaT +aaZ +abf +agp +acv +aco +aca +acU +adY +acR +ajq +aca +ahV +aca +aMJ +aaX +ahx +ayI +ahe +aeF +alv +art +aFX +aoX +aBp +aHA +aBp +aBp +azs +biI +adv +anB +aBk +baH +alw +anU +apy +apy +apy +apy +apy +aIb +apy +aTO +aUj +aSH +aUt +bbn +bbb +bbb +bjR +bjV +baT +bch +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -bW -aW -bb -br -bP -cu -hX -ic -dX -fr -ca -ca -ca -ca -Jc -aX -he -on -he -dv -lE -ou -zT -CN -CO -DR -DT -nM -Dn -FX -dv -cd -My -Ih -Oi -px -px -PB -Ix -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +aaR +abW +aaW +aiR +aiH +abP +acu +ahX +aic +adX +afr +aca +aca +aca +aca +aJc +aaX +ahy +amj +ahy +aeF +alB +aor +aBI +aBE +aDP +aIt +aIZ +aMg +aMT +blI +adv +api +aCM +baI +alx +anY +apz +apz +apz +apz +bfJ +aJH +aOE +aTP +aUf +aUF +aTV +bjP +bbi +aVy +blW +bbc +baT +bfq +bcm +bbe +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -by -aT -aY -aT -bn -eg -ca -bX -ca -dX -fz -gX -ca -ca -ca -Jd -aX -Kh -oE -sr -dv -dv -dv -dv -dv -DD -dv -dv -dv -dv -dv -dv -hb -Sz -Ii -Oi -PB -PB -PB -Ix -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmC +bos +aWY +aaS +aaT +aby +aaT +ada +aeg +aca +abX +aca +adX +afz +agX +aca +aca +aca +aJd +aaX +ahz +ael +agv +aeF +aeF +aeF +aeF +adv +aru +aDn +adv +adv +adv +adv +adv +arr +aDC +bdc +alJ +aoz +apB +apB +auY +auY +aoz +aoz +aPJ +aTP +aUb +aSL +aUv +baj +bjY +bbi +bjM +blh +baT +bna +bcm +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -ac -cW -ac -bt -eo -fL -aX -fL -dZ -jh -gY -hR -ij -iM -jC -gC -gv -el -pW -lD -rx -ks -tI -zV -zt -It -tI -IR -tI -IS -rx -EG -Ug -Ij -Oi -px -px -PB -Ix -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bov +aWY +abm +abr +acH +abr +aiS +aeo +afL +aaX +aEX +adZ +ajh +agY +ahR +aij +aiM +ajC +alI +agv +ael +aqX +apS +arx +adJ +atE +aBC +aDJ +aDS +aGd +aIR +aMB +aIy +arx +asT +aHP +bbm +alJ +aoB +apC +aIo +apC +apC +aOY +aoz +aOI +aTR +aUp +aSL +aTX +bjU +bbi +blT +aVy +blh +baT +bch +bbg +bbe +aKP +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -ac -ac -ac -cW -eo -fW -aX -id -ea -fK -iy -lY -jJ -iy -Jf -jU -jl -qc -zq -rb -ry -tD -tF -tD -zu -DS -tH -tJ -OP -Aj -gS -iE -nB -Ik -Oi -px -px -PB -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bou +aWY +aac +abn +abn +abn +acL +aeo +afW +aaX +aAg +aea +agP +aiE +ajU +aly +aiE +alY +aNr +aNs +amZ +ara +apV +agS +aAj +aqz +aqm +aCN +aFY +atH +atJ +aOP +bnY +arm +asW +aHT +bdc +alJ +aoC +apD +apD +apD +apD +aOZ +aoz +aOK +aTg +aSD +aSL +aUu +aVy +bbN +bah +bjS +bjW +baT +bch +bco +bbe +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -aB -be -ap -bw -WY -aQ -bW -aU -bd -ac -eo -fL -aX -ie -eb -ha -cN -Al -il -iM -Do -Dp -dA -el -qX -gv -rx -tE -CC -Id -Is -DU -Iy -Ej -FW -IT -rx -FV -Bk -Il -Oi -px -px -PB -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaI +abW +abv +abd +acQ +aeo +afL +aaX +aie +aeb +ahb +acN +ahU +ail +aiM +alC +aoc +agv +ael +arH +aQT +arx +aks +aCC +aBG +aIs +aDU +aBG +aFW +aFW +aIT +arx +atd +aHY +bfy +alJ +aoF +aqq +atj +auZ +atj +ayc +aOa +aPJ +aQt +beD +aSL +aUD +bjX +bfw +aYo +bjT +blY +baT +bfr +bcj +bbe +aKP +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -aT -aV -bf -bl -bR -cf -cK -dd -eo -ik -iL -jk -hV -jO -Jg -aX -kB -zp -Vv -dj -dj -dj -dj -dj -dj -dj -dj -dj -dj -dj -WH -Ie -HZ -Ij -Oi -PB -PB -PB -PB -PB -PB -Tl -Tl -Tl -Tl -Tl -Tl -Tl -Tl -Ix -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +aaR +aaT +aaV +abl +agp +abR +acf +acK +add +aeo +ahQ +aiL +ajk +aOn +ajO +aJg +aaX +aFV +ael +bmi +adj +adj +adj +adj +adj +adj +adj +adj +adj +adj +adj +aWH +atr +aHZ +bbm +alJ +aoH +arl +ato +ava +avd +aRy +aOb +aOw +aTS +bfL +aSL +aSL +aSL +aSL +baT +baT +baT +baT +bch +bbg +bbe +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -bW -aW -bf -bu -bR -cz -cL -de -eo -kf -PW -PW -in -PW -hT -gn -hx -mZ -cS -dj -cV -ed -eR -eR -fP -gf -gf -gf -it -oo -WH -If -QF -Ij -Oi -px -px -px -px -px -px -Tl -Kg -Hm -Hm -Hm -Hm -NI -Tl -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bov +aWY +aaR +abW +aaW +aiP +ajj +acz +acn +aca +ade +aeo +akf +aPW +aPW +ain +aPW +ahT +agn +ahE +anE +asD +adj +acV +aed +aeR +aeR +afP +agf +agf +agf +ait +aoo +aWH +atD +aIc +bbm +alJ +aoI +aro +atz +avb +aSR +ayM +aOa +aOW +aTT +aTf +auR +aPO +aUH +bai +bbo +aCj +bnc +bbg +bch +bbf +baK +baK +baK +baK +baK +baK +baK +baK +baK +baK +baK +aKP +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -by -aT -aY -aT -bn -eo -cn -hV -ca -eo -fj -PW -Ji -io -jT -kd -gn -CA -cw -eM -Ms -cZ -dB -eQ -eQ -eQ -eQ -gw -gw -gP -ob -WH -cd -QF -Ii -Oi -px -px -px -px -px -px -Tl -Lv -Ow -Ow -Ow -Ow -Hx -Tl -Ix -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaS +aaT +aby +aaT +ada +aeo +acn +ahV +aca +aeo +aJr +aPW +aJi +aio +ajT +akd +agn +ahx +anG +apO +apW +adz +aqp +asr +asr +asr +asr +aNu +aNu +aNv +aNx +aWH +anB +aIc +bfz +alJ +aoV +arM +arM +arM +arM +ayV +aoz +aPR +aTU +aVx +ayu +aUA +aVv +bfK +bbt +bbg +bcm +bcm +bch +bbF +baK +bbM +blu +bbZ +blx +bbh +blx +bbh +bbh +blx +baK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -cW -ac -ac -dW -eo -cn -ca -hV -eo -kj -PW -Jj -Mx -iN -MK -gn -hy -lI -Ki -cM -dn -dD -fn -eS -fn -eS -eS -eS -gQ -gU -WH -cd -QF -Ij -Oi -px -px -px -px -px -px -Tl -TW -PV -PV -PV -PV -Hy -Tl -Ix -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +abm +abt +abu +abu +ajz +aeo +acn +aca +ahV +aeo +akj +aPW +aJj +aMx +aiN +bgO +agn +aGD +ael +ahe +acM +adn +adD +afn +aeS +afn +aeS +aeS +aeS +agQ +agU +aWH +anB +aIc +bbm +alJ +aoW +asL +auW +auW +auW +azx +aoz +aPb +aTZ +aVA +aUJ +aQy +bao +ban +bbo +aRJ +bnK +bbg +bfs +bcl +bbC +blr +bbl +bft +bbE +bbE +bfu +blE +bbH +bbh +baK +aKP +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bw -WY -aS -ac -cW -ac -cW -eo -cn -hV -ca -eo -kj -PW -Jk -ip -iQ -ML -gn -Mc -lI -gv -dj -dg -ek -fs -fw -eS -fn -gB -gL -mk -Md -WH -cd -QF -Ih -ZF -ZF -ZF -ZF -ZF -ZF -ZF -Tl -UL -Lx -LB -LB -LJ -Hz -Tl -Ix -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +aac +abn +acC +abn +acL +aeo +acn +ahV +aca +aeo +akj +aPW +aJk +aip +aiQ +bix +agn +alU +ael +agv +adj +adg +aek +afs +afw +aeS +afn +agB +agL +amk +aMd +aWH +anB +aIc +bdc +aVB +apK +apK +apK +apK +apK +aVD +aVD +aVD +aVD +aVD +aVE +aVE +aVE +aVE +aVE +aJI +aNc +aNc +aNc +aNc +aBT +aLP +aBT +aJW +aJW +aJW +aJW +aJW +bbO +bbh +baK +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aQ -bW -aU -bk -ac -cD -cn -hV -ca -eE -fV -PW -Mu -ip -jY -MM -gn -Hu -lI -pp -dj -dh -em -ft -ft -eS -eS -gF -gR -gR -Me -WH -HT -QF -Ij -ZF -Gq -GM -GM -GM -Ln -Hb -Tl -UL -ZR -RR -Uz -Tc -Hy -Tl -Ix -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bot +aWY +aaI +abW +abv +abk +acQ +acD +acn +ahV +aca +aeE +afV +aPW +aMu +aip +aib +aMM +agn +anJ +ael +bmj +adj +adh +aem +aft +aft +aeS +aeS +agF +agR +agR +aMe +aWH +alo +aIc +bbm +aVB +awu +alq +ayw +azd +azw +aAs +aAu +aCX +aKk +aTj +aJI +aUB +aKr +aIq +bjj +aJI +aNd +blj +blm +aNc +aHI +blp +aIV +aJW +bly +aPj +blB +aJW +bfv +blx +baK +aKP +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -aT -aZ -bf -bl -bV -co -ca -hV -eo -km -PW -Mu -iw -ix -MQ -gn -hd -nW -oO -dj -di -eL -fu -fu -fn -eS -gJ -gT -mP -Mf -WH -cd -QF -Ij -ZF -GE -Qx -Qx -Qx -Qx -Hc -Tl -XM -Op -lo -lo -lo -LP -Tl -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmu +bos +aWY +aaR +aaT +aaZ +abl +agp +abV +aco +aca +ahV +aeo +akm +aPW +aMu +aiw +aix +aMQ +agn +aow +bhY +aqk +adj +adi +aeL +afu +afu +afn +aeS +agJ +agT +amP +aMf +aWH +api +aIc +bbm +aVB +awA +arg +aIw +arg +azy +aAs +aPk +aPU +aFl +aIB +aJI +aJU +aJP +bfM +aLR +aGh +bli +aHe +aMk +aQm +blq +aIr +aIW +aJW +aLM +aPt +aVr +aJW +blF +bbh +baK +aKP +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -WY -aS -aT -aW -bf -bu -bR -cC -cL -ca -eE -fX -PW -Mu -ix -iV -MR -gn -gv -lI -Ki -cM -dz -ei -eS -eS -eS -eS -fn -eS -gM -Mo -WH -hb -QF -Io -ZF -GI -UO -Zg -Lj -Qt -Hd -Tl -lc -Si -ZJ -Vt -Vt -Pp -Tl -Ix -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bgA +bms +bmw +bos +aWY +aaR +aaT +aaW +aiP +ajj +acz +aca +aca +aca +aeE +afX +aPW +aMu +aix +aiV +aMR +agn +blR +ael +ahe +acM +adw +aei +aeS +aeS +aeS +aeS +afn +aeS +agM +aMo +aWH +arr +aIc +bdc +aVB +axj +ayS +ayX +azf +aKq +aAs +aAT +aDj +aSC +aTy +aJI +aUK +aJS +aLW +aLy +aJI +aNj +blk +aPT +bhE +aHO +bls +blv +aJX +aPq +aQq +blC +aJW +bbO +bbh +baK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -aB -aB -aB -aB -aB -aB -be -ap -bi -WY -by -bW -aY -aT -bn -fc -Ao -cN -cN -fa -fZ -PW -Mv -MD -MD -MS -gn -gv -nI -gI -Mt -dw -ej -fv -eT -eT -eT -fv -eT -gO -gU -WH -HU -Ib -Ir -ZF -GJ -GT -JE -GZ -Ha -He -Tl -li -VO -Tl -RA -RA -Yl -Tl -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +aaG +bgA +bgA +bgA +bgA +bgA +bms +bmu +bos +aWY +aaS +abW +aby +aaT +ada +afc +aAo +acN +acN +afa +afZ +aPW +aMv +aMD +aMD +aMS +agn +agv +anI +asZ +aMt +aqc +aej +afv +agO +agO +agV +ayL +aos +axi +aMr +aWH +atF +aIh +bfA +aVB +axk +ayv +aIA +azp +aLw +aAs +aPn +aQB +aIa +aJA +aJI +aQr +baS +aLb +bjK +aJI +aNm +aIg +bln +aNc +aHW +aIE +aJf +aJW +aLY +blA +aYH +aJW +bfv +blx +baK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -be -be -be -be -be -ap -bw -WY -cE -cQ -cQ -cQ -dE -jO -dV -cO -if -iJ -ht -hg -Mw -iG -jW -Jp -gn -aE -lI -gv -dj -dR -lX -eh -fD -fT -gg -gK -gV -nS -Mr -WH -Oi -kC -Oi -ZF -ZF -ZF -Lf -ZF -ZF -ZF -Vs -Lw -ln -MO -LH -LK -LQ -Vs -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aaG +abi +abi +abi +abi +abi +abi +abi +abi +abi +abi +abi +abi +bms +bms +bms +bms +bms +bms +bmu +bov +aWY +abm +abu +aia +abu +bjG +ajO +adW +acO +aif +aiJ +aht +ahg +aMw +aiG +ajW +aJp +agn +aKB +ael +blR +adj +adR +alX +agg +agK +alM +aiO +aiO +aiO +aiO +aiO +aiO +atL +aIi +bfI +ajw +ajw +ajw +azc +aTF +ajw +aAs +aAs +aUM +aAs +aAs +aJI +aJI +aKX +aJI +als +aJI +aNc +aNR +aNc +aNc +aIf +aIO +aJE +aJY +aJY +aJY +aJY +aJY +blF +bbh +baK +aKP +aKP +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -ap -ap -ap -ap -ap -bi -WY -WY -WY -WY -WY -WY -WY -cG -cF -WY -WY -WY -PW -PW -PW -PW -PW -gn -hx -qm -ra -dy -dy -dy -dy -dy -dy -dy -dj -dj -dj -dj -Ot -HV -kD -Ga -Gw -HS -Yz -YI -HW -Lo -Ls -Vs -BS -kW -Gu -Lp -Gu -MH -Vs -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aaG +abi +bfZ +abo +bfZ +abo +bfZ +abo +abo +abo +bfZ +abo +abi +bmu +bmw +bmu +boA +bmw +bmu +bmw +bos +aWY +aWY +aWY +aWY +aWY +aWY +aWY +acG +acF +aWY +aWY +aWY +aPW +aPW +aPW +aPW +aPW +agn +ahE +anW +ata +ady +ady +ady +ady +ady +ady +aiO +ajv +apn +azh +aAV +aBZ +ayq +avR +aSz +aBJ +axx +aTQ +aID +aBa +aQE +azK +aAW +aUN +aGv +aGI +blZ +aIG +aLn +aGv +aFJ +azK +aED +bll +aKo +blp +aNe +aIE +blw +aJY +aLZ +aPz +aQs +aJY +bbO +blx +baK +baK +baK +aKP +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bg -cc -cc -gA -cc -jA -aA -bE -bH -bO -bO -cg -cP -fG -jX -rX -Be -Gm -dK -dK -dK -dK -dK -jS -Ki -lI -Ht -aw -vp -oj -yH -xn -FJ -yL -lM -RO -nL -ol -ov -PK -pe -Ad -KH -KH -Aw -AM -Pk -On -On -Fx -ld -WX -Wm -Rk -OK -LR -Vs -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ae -ae -ae -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aaG +abi +abo +aex +bfY +aYy +aGW +bfY +aYy +bfY +bgg +aYy +bgh +bmv +bor +boz +boB +bmv +boC +boB +boE +aaA +abG +abE +abH +abE +abJ +abO +abT +acA +arX +aBe +aGm +adK +adK +adK +adK +adK +ajS +ahe +ael +auq +aaw +avp +aoj +ayH +axn +aFB +aiO +ajI +akq +ass +asy +avS +atO +axR +ave +auK +avQ +awj +axR +aBc +aBt +aDw +aDy +aUO +bax +aGT +aEl +aIP +aLt +aEl +aSG +aDw +aHa +aJT +aLI +aIm +aMI +blt +aPl +aJZ +blz +aPA +blD +aJY +bfv +blx +blx +bbh +baK +aKP +aab +aae +aae +aae +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aae +aae +aae +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -Yy -ee -bi -Yy -Yy -bx -bG -bJ -bT -Ws -cA -dH -fR -lh -rY -Bi -bx -dK -dK -dK -dK -dK -kZ -Ki -lI -gv -ay -yJ -yJ -yF -ko -NQ -Cm -lN -lZ -nY -os -Uh -EE -sp -Gv -Iv -IU -Ax -Lg -Ll -Lr -Lt -Vs -Gs -Gx -Oc -LI -LL -LS -Vs -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aaG +abi +abo +agA +aaN +aaN +aaN +aaN +aaN +bhv +biK +bhv +bhv +bmu +bos +aah +aah +aah +acZ +aah +aah +arU +arU +arU +arU +arU +arU +arU +aam +acP +adH +aBi +abx +adK +adK +adK +adK +adK +akZ +ahe +ael +agv +aay +ayJ +ayJ +ayF +ako +ayJ +aiO +ajY +ank +asu +aum +aCT +asC +axK +aAG +avo +ayk +aTN +aIv +axL +alt +aAd +aAw +aCq +aCq +bfR +aCq +aCq +bfR +aCq +bmf +azK +aEI +aPY +blo +aHm +aIn +aGu +aMO +aJY +aME +aPC +aQu +aJY +bbY +bbE +bca +blG +baK +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -aB -be -ap -bw -ah -ah -fY -ah -ah -rU -rU -rU -rU -rU -rU -rU -hW -pf -hW -hW -hW -dK -dK -dK -dK -dK -kZ -Ki -nI -qY -hJ -ml -ml -yG -Ah -yK -Cm -hI -hI -AS -hI -gZ -gZ -zf -gZ -gZ -AL -NT -AL -AL -VC -VC -VC -Hn -Hn -Hn -Hn -Wr -Wr -Wr -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aaG +abi +bfZ +agA +aaN +agk +aJB +bgQ +aaN +bhA +biL +bne +bhv +bmu +bot +aah +aan +bmz +bhc +akR +aah +arV +aCl +aEu +aFL +aCl +aKL +arU +ahW +afq +ahW +ahW +ahW +adK +adK +adK +adK +adK +akZ +ahe +anI +ahJ +aqY +aNy +azE +ayG +aAh +ayK +ald +ajZ +ajZ +amD +ald +ajZ +ajZ +ald +agZ +asv +agZ +agZ +aTD +aza +bay +azK +aOR +aTH +aHc +aEE +bma +bmd +aTH +aTH +aNa +azK +aBT +aPm +aBT +aLo +aLo +aQn +aSE +aKe +aKe +aKe +aKe +aKe +aKe +aKe +bbW +blH +baK +bbj +bbj +bbj +bbj +bbj +bbj +bbj +bbj +bbj +bbj +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -aB -be -ap -bi -ah -an -fH -kR -ah -rV -Cl -Eu -FL -Cl -KL -rU -hZ -pq -dL -hZ -hW -dK -dK -dK -dK -dK -kZ -Ki -oe -zA -zB -zD -yH -FS -yH -Hk -Cm -oW -xl -AY -JZ -gZ -jv -zg -zG -gZ -CS -Bs -BY -LY -VC -DX -Od -Hn -Hj -WP -Hn -LV -HE -Wr -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aaG +abi +bfZ +ajA +aaN +ahC +aNC +bgR +aaN +bhC +biM +bnf +bhv +bmw +bos +aah +aav +ais +aim +amn +aah +ayz +aAz +alh +aFM +aAz +awc +arU +adL +aAA +aBo +blS +ahW +adK +adK +adK +adK +adK +akZ +ahe +ael +agv +aay +aNz +aPy +aFS +ayH +aHk +ald +akl +arq +axG +aAf +anx +ayU +ald +aSQ +avw +aCQ +agZ +aJG +axO +aIK +aVC +aVC +aVC +aHn +aHn +aHn +aHn +aWr +aWr +aWr +akb +aqr +ark +aMb +aLo +aNo +aQw +aUR +aUS +aUT +aSm +aQv +aSl +aVk +aKe +bbX +bbI +baK +bbk +bbk +axv +bbP +bkS +bbk +bbU +bbk +bkZ +bbj +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -aB -be -ap -bi -ah -av -im -mn -ah -yz -Az -EX -FM -Az -KN -rU -js -ql -vA -hZ -hW -dK -dK -dK -dK -dK -jS -Kn -nW -oO -aw -zE -qA -qA -qA -xQ -Cm -pb -AU -Co -Kb -gZ -jD -zh -zl -gZ -AO -ZW -Pc -CT -VC -pg -OR -Hn -ps -Hr -Hn -pJ -Hl -Wr -px -px -px -px -px -px -px -px -px -px -px -px -px -px -px -px -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaG +abi +abo +agA +aaN +aid +bgc +bgW +bhs +bhD +biN +bng +bhv +bmu +bou +aah +ach +ais +aiX +aoq +aah +afj +adB +anH +ayD +bhk +axW +arU +ajr +aql +avA +bnT +ahW +adK +adK +adK +adK +adK +ajS +aoL +aky +aqk +aaw +aml +aqA +aqA +aqA +axQ +ald +alz +asx +azL +bau +baw +aBq +ald +aKp +aBO +aFk +azg +aDu +aAU +aJw +aVC +aDX +aOd +aHn +aHj +aWP +aHn +aLV +aHE +aWr +aHG +aIU +aUU +aIC +aLo +aMl +aQi +aSy +aKe +aQQ +aTm +aQK +aSB +aNb +aKe +bbY +bfx +bbs +bbB +bbL +bbJ +aGL +bbp +bfp +bkW +bbV +bkS +bbj +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -aB -be -ap -bi -ah -ch -iX -oq -ah -yA -Bw -FF -Jr -Bw -KQ -rU -hZ -pq -hZ -hZ -rZ -rZ -rZ -rZ -rZ -rZ -cl -hz -lI -pp -fM -Cn -Cn -Cn -Cn -Cn -Cn -ph -AV -Cp -Kc -gZ -jI -zh -vF -AI -Bb -LU -YM -CT -VC -DZ -MP -Hn -LO -Oo -Hn -Vz -YR -Wr -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -px -px -Ix -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaG +abi +abw +agx +aaN +ama +bgw +bhj +aaN +afG +biO +bny +bhv +bmu +bov +aah +acj +bmV +bhg +aML +aah +acw +arY +aBw +aBR +bhl +ajX +arU +ajs +apq +ahZ +bnU +arZ +arZ +arZ +arZ +arZ +arZ +acl +aoO +ael +aqK +afM +aCn +aCn +aCn +aCn +aCn +ald +alZ +aoZ +azM +aAl +axl +bar +ald +aLc +avy +anV +agZ +aTG +aHl +ayh +aVC +aTC +aTK +aHn +aps +bmb +aHn +apJ +bme +aWr +aIe +aqw +aLT +aNg +aLo +aNH +aQN +aSA +aLf +aNh +aPX +bdm +aPE +aSt +aKe +apx +apx +apx +apx +apx +apU +aVJ +apU +apU +apU +apU +apU +aSK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bw -ah -cj -iY -qx -rS -yy -BR -BR -EY -FK -Jy -rU -hZ -pk -hZ -Bj -rZ -sc -qM -FN -hO -rh -cl -hE -lI -gv -fM -ga -xm -Ck -Dr -Es -Cn -pi -BK -BN -Kf -gZ -jQ -vx -zI -AN -Bb -Ba -Pc -CT -VC -VC -Tr -Hn -Hn -BV -Hn -Wr -RW -Wr -px -Gr -TI -Sr -Ce -Vd -Vd -Vd -Vd -Ce -Vd -Vd -CL -pU -px -px -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -vH -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaG +abi +abo +akh +aaN +aaN +aaN +aaN +aaN +biv +biP +bnz +bhv +bgD +bgE +aah +act +ais +aiY +bhb +aee +adr +ayA +aJv +aFF +bhm +aJy +arU +ajs +apk +ahZ +bnV +arZ +aoy +aqM +aFN +aJF +arh +acl +bam +ael +blR +afM +afx +akX +apm +arw +arA +ald +anS +aov +amr +arI +azu +aKd +ald +aFb +avG +ala +agZ +aTD +aza +bay +aVC +aDZ +aMP +aHn +aLO +aOo +aHn +aVz +aVo +aWr +bpo +avZ +aUU +aAI +aLo +aNI +bfo +aQD +aKe +aRO +aPZ +aSr +aSn +aSF +aKe +bby +aVn +bcN +aVh +apx +avx +bbd +ayT +bbS +aFt +aFt +aFt +aSK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +avH +avH +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -be -ap -bi -ah -ct -kL -rO -ah -yB -Bw -FO -Jt -Ju -Jz -rU -hZ -pt -yx -yx -cm -bU -bD -rf -rh -hO -cl -hF -lI -pc -fM -gd -sb -vc -po -JD -Cn -pm -AV -pn -FQ -gZ -jR -vG -zK -gZ -xg -LW -Pc -LZ -Dh -Ev -Re -Dh -JW -JY -Dh -ME -Nt -Dh -px -Gr -KV -pH -KV -Xv -KV -Xv -Xv -KV -Xv -KV -Fu -pU -px -px -Ix -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -mE -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaG +abi +acp +aGC +ace +amm +bgF +bhn +ace +aMK +biQ +bnA +bhv +bmw +bow +aah +acy +ais +bmW +arO +aah +afR +aBw +aND +aEY +aDH +aJz +arU +ajs +apt +ayx +bnW +acm +abU +abD +arf +arh +ahO +acl +apd +ael +apX +afM +aga +asb +avc +apo +asf +arK +arK +arK +arK +arK +baB +arK +arK +auX +azk +all +agZ +aEF +axO +ayp +aDh +aDh +aAY +aDh +aDh +aBb +aDh +aDh +aSJ +aDh +akb +aCo +aUV +aIz +aLo +aLo +aLo +aLo +aLg +aLg +aQa +aLg +aLg +aLg +aLg +aVl +bbT +bbT +aVg +apx +awL +bbd +azl +aCe +aGk +aGk +aHR +aSK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +avH +amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -ap -ap -bi -ah -cy -is -rP -ah -yC -Cs -rU -Jv -Jx -rU -rU -jr -rc -hZ -hZ -rZ -Ai -rh -Bg -hO -Ku -cl -aE -lI -CB -fM -kX -po -xo -xr -AT -fx -AW -AX -sS -FQ -gZ -lz -zk -AG -Bc -Bb -xv -Cd -Bt -Di -Zn -Nr -lp -JX -Nr -lp -RH -Qw -Dh -px -Gr -Gr -TH -Gr -Gr -Gr -Gr -QL -Gr -Gr -Xv -pO -pU -pU -pU -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -mE -vH -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaG +abi +abA +aGF +ace +aFZ +bgG +bho +bht +biz +biT +bnB +bhv +bmC +box +aah +aeK +bhe +akL +arP +aah +aeZ +aCs +arU +aFO +aFK +arU +arU +ajy +arc +ahZ +bnU +arZ +abS +aAi +aBg +ahO +aKu +acl +beI +ael +avf +afM +agd +apo +axo +axr +axm +arK +atc +apg +bat +baA +baC +bfQ +arK +axg +ays +axD +aDi +azt +aCG +aMU +bnS +aAS +aBs +baD +aBK +aBN +baD +aBS +aBV +apH +aQP +aqw +aUW +aNg +aLo +aPd +aPd +aQC +aLg +aNt +aSp +aQS +aSo +bbx +aLg +awO +aUQ +aVc +bkO +aVm +aVi +bkR +bbQ +bkU +bkX +axw +aYn +aSK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +amE +avH +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aB -aG -aN -bA -ah -eK -is -rQ -ah -yD -Ch -jb -jB -Dx -DH -Gb -oT -re -vB -hZ -rZ -hO -bS -Bh -rh -rh -cl -he -sv -he -fM -sf -Ds -xp -po -JH -Cn -sg -Du -vb -Gz -gZ -ok -zk -zL -CM -CX -xw -CI -Ma -Dj -Nq -QD -lq -Ry -QD -Qc -ZS -Nu -Dh -px -Gr -qi -ls -pX -Gr -KW -px -KW -px -Gr -nk -pQ -sj -sj -sj -Ix -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -mE -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaG +abi +abL +aGU +ace +aHC +bgN +bhq +ace +biA +biY +bny +bhv +abF +boy +aah +afg +bhf +ais +arQ +aah +aYS +ayB +aeQ +aJt +aHh +aJu +aGb +aoT +are +avB +bnT +arZ +aAm +aNL +aiI +arh +arh +acl +ahy +aob +ahy +afM +ahl +asS +axp +apo +aCk +arK +bhL +aBQ +asV +bav +axU +aAX +arK +alp +aBP +amt +aTs +aPV +ayr +aHr +aAr +aCm +aEz +aEH +aEH +aFa +aFo +aGl +aGJ +avF +aHx +aKi +aUX +aQO +aLo +aKV +aPd +aPd +aLg +aSk +aQj +aSj +aVe +aSw +aLg +awO +aUY +aVd +bjE +apx +awV +aAC +bbR +bok +bbz +aHN +aHS +aSK +aKP +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +avH +amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -zH -ae -ae -ae -ae -ae -ae -ae -ae -zH -zH -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -zH -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -hB -ms -mx -aB -aH -Yy -bI -ah -fg -fQ -rR -ah -Cg -FD -rU -kr -lG -Hh -Gb -jy -rT -AA -Bo -rZ -bZ -cp -cq -sd -cl -hv -oL -qT -Hq -hv -fM -xq -Cq -Ep -JI -Cn -tj -Dw -El -JA -gZ -oF -vI -zM -gZ -LT -rk -LX -Mb -Dh -Ez -Ns -Dh -Vl -NL -Dh -Vl -NL -Dh -px -Gr -vS -lt -qi -Gr -px -KW -px -KW -Gr -pN -pT -sk -Bl -Bn -Ix -nQ -rz -mI -ae -aq -zH -ae -aq -ae -ae -aq -ae -ae -aq -ae -zH -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -mG -ae -aq -aq -mE -vH -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +azH +aae +aae +aae +aae +aae +aae +aae +aae +azH +azH +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +azH +aae +aae +aae +ahB +amv +aKI +aaG +abi +aer +boX +ace +aJq +aqx +bhr +ace +biE +biZ +bnC +bhv +bof +boT +aah +afQ +arR +bha +ajN +aah +aCg +aFD +arU +akr +aeM +aJx +aGb +arT +aBj +aYR +bnX +arZ +aEy +aNM +alK +acq +ahv +ahv +ape +aoe +avh +ahv +ahv +anL +arv +ary +aDr +arK +aln +bas +baz +avI +bfn +bfS +arK +amw +aCb +avq +agZ +aGX +aIF +aTE +aDh +avk +aBF +aBY +baE +bmc +aHV +aBY +aCd +aGZ +bmg +bmh +aHX +aIH +aLo +aPd +aPo +aQC +aLg +aLq +aQk +aSu +aSq +aSx +aLg +bbK +aVa +bjF +bkP +apx +awW +ayQ +aCc +aCf +bbA +aHL +aHU +aSK +anQ +arz +amI +azH +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +amG +aae +aaq +aaq +amE +avH +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ae -mK -mK -mK -mK -mK -mK -mK -mK -wy -wy -mK -mK -mK -mK -mK -mK -mK -mK -wy -wy -mK -mK -mK -mK -mK -mK -mK -mK -wy -wy -mK -mK -wy -mK -mK -mK -mK -mK -mK -mK -wy -wy -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -wy -ke -aL -aL -aL -aL -aL -aO -ah -ah -ah -ah -ah -rU -rU -rU -Gb -mj -Gb -Gb -jG -rW -jG -jG -cl -cl -cl -fU -cl -hv -hD -aJ -zd -NC -Dl -hv -fM -fM -fM -fM -fM -pl -pl -vd -pl -gZ -gZ -gZ -gZ -gZ -AL -rI -AL -AL -Dh -Dh -Dh -Dh -Dh -Dh -Dh -Dh -Dh -Dh -Gr -Gr -qw -tc -pX -Gr -Gr -Gr -Gr -Gr -Gr -Gr -Gr -tz -jw -jw -jw -jw -jw -mJ -tZ -wM -ET -wX -wM -ET -ET -wM -ET -ET -wM -ET -ET -mF -ET -ET -mF -ET -ET -mF -ET -ET -wM -ET -wX -wM -ET -ET -wM -ET -wX -wM -ET -ET -wM -wX -ET -DF -aq -as -KT -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aae +amK +amK +amK +amK +amK +amK +amK +amK +awy +awy +amK +amK +amK +amK +amK +amK +amK +amK +awy +awy +amK +amK +amK +amK +amK +amK +amK +amK +awy +awy +amK +amK +awy +amK +amK +amK +amK +amK +amK +amK +awy +awy +amK +amK +amK +ake +aai +aai +aai +aai +aai +boY +afH +afH +afH +afH +afH +biF +bja +biF +biF +boq +boU +aah +aah +aah +aah +aah +aah +arU +arU +arU +aGb +arn +aNF +aGb +ajG +apf +ajG +ajG +acl +acl +acl +ame +acl +ahv +ahD +adT +aoe +adT +aDl +ahv +afM +afM +afM +arB +arK +arK +arK +arK +arK +arK +arK +arK +agZ +agZ +agZ +agZ +aTD +aFi +bfP +aDh +aDh +aDh +aDh +aDh +aDh +aDh +aDh +aDh +aDh +akb +aFp +akb +aIQ +aLo +aLo +aLo +aLo +aLg +aLg +aLg +aLg +aLg +aLg +aLg +aLU +aVb +aVf +aLU +aLU +ajH +ajH +ajH +ajH +aFQ +aTY +aTY +aTY +aTY +aTY +amJ +aET +amF +aET +aET +amF +aET +aET +amF +aET +aET +awM +aET +awX +awM +aET +aET +awM +aET +awX +awM +aET +aET +awM +awX +aET +aDF +aaq +aas +aKT +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -pM -ae -mE -mL -mL -mL -mL -mL -mL -mL -mL -xh -xh -mL -mL -mL -mL -mL -mL -mL -xh -mL -xh -mL -mL -mL -mL -xh -mL -mL -mL -mL -mL -mL -xh -mL -mL -mL -mL -mL -mL -xh -xh -xh -AR -mL -mL -mL -mL -mL -mL -mL -mL -mL -mL -mL -mL -xh -xh -hM -kh -bB -nq -et -xe -al -bo -en -hu -Ni -hC -hY -lK -hu -hH -nE -hC -jd -jE -ja -hk -hC -hu -kt -hN -nC -jd -aJ -aJ -st -sx -yS -yX -aJ -sU -nJ -At -oZ -pd -pX -rd -rK -qi -td -sW -qi -HO -Hs -sX -PX -qi -pX -sZ -qi -qi -Js -qi -Hs -qi -Dk -qi -sW -NA -pX -qV -tc -pX -vq -td -vN -Hs -Dk -wz -wK -Je -yT -jF -kl -nx -mr -wV -oG -xh -xh -xh -mL -xh -mL -xh -xh -xh -mL -mL -xh -xh -mL -mL -mL -mL -mL -mL -mL -mL -mL -xh -xh -mL -xh -mL -mL -xh -xh -xh -mL -mL -mL -mL -xh -xh -EM -ER -EQ -KU -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +apM +aae +amE +amL +amL +amL +amL +amL +amL +amL +amL +axh +axh +amL +amL +amL +amL +amL +amL +amL +axh +amL +axh +amL +amL +amL +amL +axh +amL +amL +amL +amL +amL +amL +axh +amL +amL +amL +amL +amL +amL +axh +axh +axh +aAR +amL +amL +ahM +aal +aaC +aaO +abB +ack +boZ +amh +axe +axf +aGR +bpd +ahN +bfV +ahN +bpg +aGS +boV +ahN +ahN +aen +ahk +bmy +ahN +ahY +aik +bmD +bmG +aNA +bmI +ajd +ajl +aja +ajB +ahN +bmD +akt +afU +bmM +ajd +aKM +aKM +aLj +aoe +aLp +bmk +aKM +avN +avT +awk +arC +awz +awK +aCp +aAt +aCp +aAM +aCA +aAt +aCB +aDk +aTv +aES +bmn +aJO +aHq +aCp +aAt +aAt +aAt +bmp +aAt +aHs +aCp +aCA +aKh +aHu +aKn +aLS +aNl +aAt +aAM +aCp +aCp +aHs +aMc +aMh +aAt +aVj +aCp +aCp +aLS +aUZ +asR +bcI +bkQ +aVj +aAt +bkT +aMi +auS +aCL +aFu +aGo +aGY +aHi +aoG +axh +amL +amL +amL +amL +amL +amL +amL +amL +amL +axh +axh +amL +axh +amL +amL +axh +axh +axh +amL +amL +amL +amL +axh +axh +aEM +aER +aEQ +aKU +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ae -pM -mE -mE -mE -mE -vH -vH -mE -mE -mE -mE -vH -mE -mE -mE -mE -vH -mE -mE -mE -vH -vH -mE -mE -mE -mE -mE -mE -mE -vH -mE -mE -vH -mE -mE -mE -mE -mE -mE -mE -mE -vH -mE -mE -mE -mE -mE -mE -mE -vH -mE -mE -mE -vH -mE -mE -mE -vH -kV -aL -ma -er -ne -aL -aC -df -gD -df -df -df -df -df -df -hK -oh -ox -sy -ox -oh -xD -ox -xG -xR -xY -gr -sy -yk -yq -yN -Ny -yW -yZ -ss -rE -ys -gq -hl -rG -rw -rB -rA -rw -vo -rw -rw -rv -rw -rw -rA -rw -rw -rw -rB -rw -rC -rw -rw -rw -tL -rw -rw -rE -rw -rG -rH -bQ -qW -vy -qW -sQ -qW -pZ -wL -qW -GL -jw -nV -ll -mw -jw -uP -vH -mE -mE -mE -mE -mE -mE -mE -mE -mE -mE -mE -vH -vH -mE -mE -mE -mE -mE -mE -mE -vH -vH -vH -vH -mE -mE -mE -mE -vH -mE -mE -mE -mE -vH -mE -mE -wy -aq -KR -CK -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aae +apM +amE +amE +amE +amE +avH +avH +amE +amE +amE +amE +avH +amE +amE +amE +amE +avH +amE +amE +amE +avH +avH +amE +amE +amE +amE +amE +amE +amE +avH +amE +amE +avH +amE +amE +amE +amE +amE +amE +amE +amE +avH +amE +amE +amE +amE +akV +aai +aaF +abe +abI +aai +bpa +ami +adf +bmE +bpe +adf +adf +bfW +adf +bph +adf +boW +adf +adf +bmA +adf +adf +adf +adf +adf +bmE +adA +bmH +adf +afN +adf +afK +bmJ +bmE +adA +ahh +amp +asz +afN +alD +alD +ayN +aoh +ayW +alD +aqh +aqs +aqB +aqZ +arE +apZ +aqW +asQ +aqW +aqW +asE +aqW +aqW +atR +awt +aqW +awo +aqW +aKz +aQM +aqW +aqW +aRP +aqW +aqW +aqW +bmq +aqW +aqW +aqs +aqW +apZ +aHd +asQ +aqW +aGs +aqW +aQM +aqW +aIJ +agH +aSv +aSv +aSv +aSv +ajF +aLX +aUP +ajF +bcK +aSv +ajF +ajF +aMj +aGf +aTY +aGj +aGp +aHf +aTY +auP +avH +avH +amE +amE +amE +amE +amE +amE +amE +avH +avH +avH +avH +amE +amE +amE +amE +avH +amE +amE +amE +amE +avH +amE +amE +awy +aaq +aKR +aCK +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ae -ae -mE -mM -mM -vE -vE -mM -mM -mM -mM -mM -mM -mM -mM -mM -vE -vE -mM -mM -mM -mM -vE -vE -mM -mM -mM -mM -mM -mM -vE -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -mM -vE -vE -mM -mM -vE -vE -vE -vE -mM -mM -kE -mN -eq -mi -ex -xf -aF -mp -gE -KM -Cw -hC -hC -hC -hC -iZ -hC -hC -jd -hC -hC -KM -hC -Cx -lH -mm -hh -jd -lU -yr -yO -zc -sz -aJ -sw -sU -sD -Au -Nh -Cy -qi -sR -MW -qi -wt -qi -kc -hQ -qi -qi -qi -qi -qi -MW -sR -Kp -tc -JK -qi -qi -hQ -pX -Cy -NA -qk -ta -uJ -vT -pX -wt -pX -vT -pX -EO -pX -Jw -JU -jH -la -mt -mu -wW -sq -vE -vE -mM -vE -mM -vE -vE -mM -mM -vE -mM -vE -vE -mM -vE -vE -mM -mM -vE -vE -vE -vE -vE -vE -mM -vE -vE -mM -mM -mM -mM -mM -vE -vE -vE -vE -vE -EN -ER -EU -KU -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aae +aae +amE +amM +amM +avE +avE +amM +amM +amM +amM +amM +amM +amM +amM +amM +avE +avE +amM +amM +amM +amM +avE +avE +amM +amM +amM +amM +amM +amM +avE +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +amM +akE +aaB +aaH +abg +abZ +aeq +aWj +amN +bpc +aBA +bpf +bmy +bmy +bfV +bmy +bpi +bmy +bgU +ahN +bmy +bmB +ahu +ahH +bmy +ahN +bmy +ahN +ajb +ahN +bmy +ajd +ahN +bmy +ahu +bmy +ajE +akz +bmL +akB +ajd +aLe +aLe +aLl +aoe +aLr +aKM +aaJ +avN +abQ +akc +aqC +aHv +aAt +arb +arG +aAt +ajP +aAt +asw +avg +aYT +aCp +aAt +aCp +aAt +aCp +arG +asU +bhR +aBU +aCp +aAt +aHt +aHu +aCE +aKh +aIp +aLN +aCh +aLQ +aHu +aPD +aNl +aHy +aHu +aIS +aNl +aAt +aAt +aCp +aCp +aCp +aAt +aII +aCp +bcJ +aAt +aCp +aAt +aMm +aHJ +aFs +aGn +aGr +aHg +aHo +asq +avE +amM +avE +avE +amM +amM +avE +avE +avE +avE +avE +avE +amM +avE +avE +amM +amM +amM +amM +amM +avE +avE +avE +avE +avE +aEN +aER +aEU +aKU +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -pM -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -wy -xt -wy -mK -mK -mK -mK -wy -wy -wy -wy -mK -mK -mK -mK -mK -mK -wy -mK -wy -mK -mK -mK -mK -mK -mK -mK -mK -wy -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -mK -wy -mK -wy -wy -mK -wy -KI -aL -aL -aL -aL -aL -ck -aP -aP -aP -aP -aP -aP -aP -aP -tA -tA -tA -tA -bs -bs -bs -bs -bs -ax -ax -nG -ax -Kx -oD -oY -za -aJ -Dm -hv -at -mc -at -at -do -do -eX -do -eX -do -eX -do -kb -do -gN -gN -NH -NH -gN -gN -om -KX -rF -rF -rF -tN -rF -rF -rF -rF -uF -pr -uF -vr -vr -ws -wg -ws -Ey -vr -vr -yU -jw -jw -jw -jw -jw -sG -mD -mH -ET -ET -Ae -ET -ET -Ae -wX -ET -mH -ET -ET -mH -ET -wX -Ae -wX -ET -Ae -ET -ET -mH -ET -ET -Ae -ET -ET -mH -ET -ET -mH -ET -ET -Ae -ET -ET -EP -aq -KS -KT -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +apM +amK +amK +amK +amK +amK +amK +amK +amK +amK +amK +awy +axt +awy +amK +amK +amK +amK +awy +awy +awy +awy +amK +amK +amK +amK +amK +amK +awy +amK +awy +amK +amK +amK +amK +amK +amK +amK +amK +awy +amK +amK +amK +amK +amK +amK +ams +aai +aai +aai +aai +aai +ane +agD +agD +agD +agD +agD +bfX +bhi +bfX +bfX +bgi +bgV +aar +aar +aar +abh +abh +abh +abh +abh +abs +abs +abs +abs +abs +aKO +aKO +aKO +aKO +aKO +aax +aNG +amf +aax +aKx +aoD +adT +aoe +adT +aDm +ahv +aat +aqG +aat +aat +aes +aes +aes +aes +aes +aes +aes +aWp +aWS +aWq +ado +ado +aXj +aXj +ado +ado +aom +avU +arF +bmo +bmo +aFq +arF +bmo +arF +arF +atB +bop +atB +avt +avt +avt +avt +avt +avt +avt +aPg +aPg +aPg +aPg +aPg +aPg +ajH +ajH +ajH +ajH +ajH +ajH +ajH +aHK +aTY +aTY +aTY +aTY +aTY +asG +aET +amH +aET +awX +aAe +awX +aET +aAe +aET +aET +amH +aET +aET +aAe +aET +aET +amH +aET +aET +amH +aET +aET +aAe +aET +aET +aEP +aaq +aKS +aKT +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -zH -ae -ae -ae -ae -ae -ae -zH -ae -zH -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -zH -ae -ae -ae -ae -ae -KK -mv -mx -Np -ai -ar -mh -bF -fb -fb -fb -fb -fb -fb -jo -bh -xd -xE -yg -gc -bL -cB -ds -gc -jN -qQ -hi -Ar -ax -Kx -Cz -Nz -MN -hv -at -hr -sE -yR -AE -dx -lf -lJ -uq -JL -Aq -JL -MV -MZ -Nd -hc -jZ -rg -rg -EC -hc -lm -BJ -rJ -tg -ts -tO -uo -Gt -NO -NS -tp -uK -uE -vO -vC -wv -CU -wv -CU -Ci -uA -Fs -Gf -Gk -KP -nQ -si -tM -ae -aq -zH -ae -aq -ae -zH -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -ae -zH -aq -ae -ae -aq -ae -ae -aq -ae -ae -aq -zH -ae -aq -mG -ae -aq -aq -vH -mE -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +azH +aae +aae +aae +aae +aae +aae +azH +aae +azH +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aKK +amx +aKI +aet +afY +aka +bgd +agE +aVI +bit +bmt +agE +bgL +bhp +biu +bgJ +abq +bgl +acr +adm +aeB +acB +adc +aeU +ahF +akO +apF +aLD +bdk +alG +asj +aLm +aVU +beQ +bjy +aKO +asc +anC +ast +ajJ +aKx +aKx +aeI +aoi +aHQ +ahv +ahv +ahr +aqI +ayR +aAE +aAJ +ayY +aWB +aXq +aYL +bcO +aAJ +aCI +aYx +aYG +aZa +aZA +aZG +bcU +bcY +adx +alm +avV +arJ +atg +aua +beS +bfm +bjb +bjd +bjf +atK +aCO +awn +avt +aQx +aEV +aRi +aRC +aRT +aSc +aXA +aQe +bcD +aRa +bkD +aPg +bkM +aFr +bkN +aok +aFr +aBl +aCi +aHB +aHM +bla +aNp +anQ +asi +atM +aae +aaq +aae +aae +aaq +aae +aae +aaq +aae +azH +aaq +aae +aae +aaq +aae +aae +aaq +aae +aae +aaq +azH +aae +aaq +amG +aae +aaq +aaq +avH +amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -ao -bq -ao -ce -mO -gy -gy -gy -gy -nf -jp -bh -eU -ew -kF -gc -cb -db -du -gc -qo -qo -me -qh -Am -ax -hw -qZ -hw -at -dp -le -wj -AD -AF -dx -lP -pG -zC -nU -um -nU -zC -Na -pD -pK -rM -rM -se -ED -hc -Av -BJ -rJ -th -tg -BT -NO -tg -BX -NS -tB -uM -vU -uA -vD -ww -ww -ww -ww -Hf -uA -Ft -Gg -Le -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -vH -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +afY +akg +bgI +agE +bfU +biD +bmx +bns +bgM +bhu +biy +bgJ +aTu +bgm +acr +adt +aeV +acB +ads +agc +aiz +alR +apF +aMV +bdJ +aqE +atA +aLm +bdo +beV +bkp +aKO +aqo +aBh +aCx +ajR +aAn +aax +aeY +aol +aeY +aat +adp +ale +aqS +aAD +aAF +aAJ +azv +aWW +aXs +aXe +bcP +aAJ +aTA +aXS +aYV +aYQ +aZD +aXS +aYQ +bnH +adx +aYl +avV +arJ +ath +auo +aNO +beT +bfc +bkY +bjf +atQ +aCR +aAO +avt +aQJ +avC +aRz +bje +avC +aSf +aPs +aQf +bcE +aRt +bkE +aPg +bkN +bkN +aFr +boj +aFr +bkN +aCP +bkN +bnd +bkN +aNp +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaq +avH +avH +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -aP -aP -aP -aP -aP -aP -aP -aP -iu -jp -bh -xS -zF -eW -gc -cr -dc -ec -gc -eD -qo -mf -As -An -ax -qb -su -sH -at -xc -qn -wA -Ct -wB -dx -lP -to -dT -dT -dT -oH -Iw -qs -JN -hc -kw -sT -EF -EH -hc -Ay -BJ -rJ -tg -NO -tP -NX -tg -tg -NS -tK -vj -vV -vO -vL -wC -ww -DY -ww -Hg -uA -Fv -CF -CF -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -mE -mE -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +afY +anq +bgf +agE +bga +biS +bnh +agE +aAq +bhz +biB +bgJ +akS +agh +acr +adu +afJ +acB +aec +agl +ajK +apc +aLu +aNJ +bgq +aJC +aMN +aLm +bdv +bfe +bks +aKO +aeD +aCw +aKH +aqQ +aNk +aax +afF +aon +aLs +aat +axc +aqn +aqT +aCt +awB +aAJ +aSM +aXe +aXF +aYO +bcQ +bjg +aXE +aYd +aZo +aZx +aZx +aYw +aZx +bnI +adx +bmF +avV +arJ +ati +avr +aNP +beU +beW +bnj +bjf +aue +aCZ +aEZ +avt +aRh +aQz +aQU +awN +aRY +aRk +aPu +aVR +aRe +aRu +bkF +aPg +apG +aNp +aNp +apG +aNp +aNp +aNp +apG +aNp +aNp +aNp +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +aaq +amE +amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -Np -Np -Np -Np -Np -Np -Np -Np -Np -aP -gy -pj -bh -dS -eB -eZ -gc -cs -dF -kx -gc -md -md -qo -Kz -DO -ax -oQ -sC -ND -at -gs -op -tb -mb -ze -dx -hS -tv -CP -CP -pC -yV -yV -HX -Ne -hA -kY -tY -Im -EI -hc -AC -BO -rJ -ti -tt -ua -BW -tg -NX -NS -tQ -vk -Kj -uA -vW -wP -ww -wP -ww -Hi -uA -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -mE -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +aFn +bgv +agE +bgK +biV +bni +agE +bgS +bhB +biC +bgJ +agy +anZ +acr +aew +aha +acB +aeC +agq +aki +aKt +apF +bdi +bic +aKD +azq +aLm +bdL +bhU +bkt +aKO +amd +amd +aCw +asd +aDO +aax +ahw +aox +aLv +aat +ags +aop +atb +amb +aze +aAJ +aSM +aXe +aYg +aXe +bcR +aAJ +aXH +aYw +aYB +aYU +aYU +aXS +aYU +bnJ +adx +axC +awh +arJ +ats +azO +aNX +beW +bfd +bnD +bjf +auz +aDo +aFc +avt +aQJ +aQA +aRV +aRE +aQR +aRb +aPu +bag +bml +aRv +aSi +aZO +apN +apN +atZ +apN +apN +apN +atZ +apN +apN +apN +atZ +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCr +aCv +aCr +aCJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -bh -bh -gb -bh -gc -cx -dm -gc -gc -qo -md -qP -KA -Ef -ax -eI -sV -sI -at -gt -qO -yP -AB -zj -dx -ib -to -iP -iP -oH -iP -iP -xj -JO -hL -kY -xJ -Im -IA -hc -Av -BP -rJ -tg -NX -tg -tg -tg -tg -NS -ue -vj -vV -vO -vL -wQ -ww -wQ -ww -wQ -uA -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -vH -vH -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aet +ajo +aGG +bgy +agE +bgY +biW +bnq +agE +bgT +bhI +biG +bgJ +bgn +aGN +acr +acr +aOq +acB +acB +acB +akH +acB +apF +apF +apF +aKE +apF +aLm +bdO +bjq +beb +aKO +aqo +amd +aqP +aKA +aEf +aax +aoA +aoE +aLx +aat +agt +aqO +ayP +aAB +azj +aAJ +aWv +aXo +aYh +aZN +bcT +aAJ +aXJ +aXS +aYD +aZD +aYQ +aYw +aZD +bnH +adx +aww +awR +arJ +ati +azZ +aWO +beX +beW +bnE +bjf +auE +aCZ +aEZ +avt +aRh +aRW +aRU +aQG +bkw +aSs +aPv +bcp +aRm +aRw +aTr +aZP +arL +asX +auU +arL +asX +arL +auU +arL +asX +arL +auU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCU +aCV +aCU +aDd +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -dk -ev -gj -iC -gi -hp -ho -qH -Kt -Kt -Kt -Kt -Kt -Kt -Lm -fF -xx -sJ -aj -hj -hj -hj -hj -hj -dx -iR -to -CY -iO -dT -iO -iO -Nc -JO -hU -kY -tY -Im -IF -hc -Av -BP -rJ -tg -tg -tg -NO -tg -NP -NS -uz -vj -vU -uA -vY -Cc -CV -Er -ww -Ho -uA -Fw -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aet +ajo +aiZ +bob +agE +bhx +biX +bnr +agE +bgZ +bhO +biJ +bgJ +agy +agh +aev +acx +aeW +akN +bdh +agr +aLA +bhW +beo +aTz +bhW +bhZ +bfk +aLm +aLm +adk +aLm +aLm +aKy +aKy +aKy +aKy +aKy +aLz +aoQ +asA +aLB +aaj +ahj +ahj +ahj +ahj +ahj +ase +ase +ase +ase +ase +ase +ase +aXL +aYe +aYE +aZE +aZE +aZe +aZF +bmr +adx +bol +att +arJ +ath +aBW +beR +beY +aBX +bnF +bjf +auL +aCZ +aAO +avt +aDe +aEO +bdd +aRD +aSa +aVQ +aPu +bkV +aRn +aRx +aVP +aPg +aNp +aNp +aNp +aNp +aNp +aNp +aNp +aNp +aNp +aNp +aNp +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +amE +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -dk -fJ -jL -iv -iv -iv -GQ -LC -Kt -sF -yd -DA -JC -Lb -Lm -zb -xx -zb -ef -eA -fE -nH -fE -Ig -dx -oC -uT -yM -lT -dT -ug -yE -IJ -JO -jP -JS -xk -Iq -IH -hc -Av -BP -rJ -tg -NO -tg -tg -tg -tg -NS -uE -vj -uE -vO -vL -Cv -CW -wQ -ww -wQ -uA -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +aGH +boc +agE +agE +agE +agE +agE +bgJ +bis +bgJ +bgJ +bgn +aGN +aev +adF +agw +akQ +bdh +aqL +bia +bdC +aHD +bdC +aHD +aZV +big +bdh +bjv +bkq +bfh +aKy +amg +atY +aNf +aNf +beM +aLz +bal +asA +aoS +aef +aey +aeO +afp +bjC +ahm +ase +axJ +aWF +aWV +aXh +aXk +aXu +aXO +aYw +aYD +aYU +aYU +aYw +aYU +bnL +adx +aAv +avY +arJ +atP +aGt +bfa +bil +bjc +bnG +bjf +awn +aCZ +awn +avt +aDY +aQl +aRd +aRF +aQZ +aRf +aPs +bcr +aRo +boi +bjZ +aPg +aNp +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -iu -jp -iD -eC -iz -iz -iz -kT -GR -iv -rn -kK -xW -GP -La -Lh -Lm -oA -xL -NE -ey -eJ -fO -ly -lL -xi -hP -oH -qq -dT -oH -oH -dT -dT -xj -Ne -hc -mg -kA -Im -II -hc -Ay -BP -sY -sY -sY -sY -sY -sY -up -up -uL -vw -uL -uA -vD -CJ -Dd -Ew -EV -Hp -uA -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -aq -aq -aq -aq -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +bge +bod +akk +ayy +bgX +bhG +bhK +biR +biU +bnt +akk +agy +anZ +aev +adS +aho +alN +bdh +axE +aZV +aMF +bdj +beP +bdt +bia +bhX +aDc +beK +beu +bkg +aKy +aoM +axF +axF +bdR +beN +bnn +aqb +aoY +aJK +aeA +aeP +afE +agG +ahA +ahL +ase +aIM +aWD +aWI +aWX +aXn +aXv +aXP +aYf +aYF +aZd +aYW +aZd +aZp +bnM +adx +axu +axA +ate +ate +ate +ate +ate +ate +aup +aup +awF +aDp +awF +avt +aQg +aRg +aRX +aQX +aRc +aQY +aPs +bcx +bkx +bjm +bkz +aPg +aNp +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aaq +aaq +aaq +aaq +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -iB -iB -kG -GD -iB -yl -ho -Nn -Kt -oy -ym -GU -ym -Ly -Lm -HQ -yh -sK -lw -eN -gG -lC -lO -fS -iS -oH -qq -iO -iO -dT -dT -oH -xj -Ne -hc -oI -CZ -rL -NM -hc -Av -BP -sY -oU -tu -tX -Jh -sY -oP -qp -Kd -Ke -wh -vO -vL -wR -ww -Ex -ww -Cj -uA -Fw -CF -CF -KP -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +bge +boc +akk +aNE +bhh +bhH +bhM +bhM +bmS +bnu +akk +bgn +aOk +aev +acx +ahp +amc +bdh +aKF +aLC +bdD +bep +bgb +bdI +bdM +bip +agm +bdT +ben +bhV +aKy +aqi +axH +aOv +axH +bff +aLz +aqd +asB +aLH +aeX +aeJ +afo +afO +agN +ahS +ase +aJJ +aWA +aWJ +aWZ +aXr +aXu +aXT +aYC +aYP +aZi +aYC +aZH +bcV +bnN +adx +aww +avY +ate +amY +asY +atu +aui +ate +aoP +apQ +aAx +aDs +aKm +avt +auA +aNN +auA +aPf +auA +auA +aPs +aPs +aRq +aRB +aPs +aPg +aNp +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -Np -aP -nf -jp -iB -eV -kQ -rj -GD -yl -ho -LD -Kt -Kt -Kt -Kt -Kt -Kt -Lm -Nv -xx -oA -ef -lx -eO -pz -eO -eO -dx -pw -nK -EZ -JQ -oH -CR -Gc -JJ -JP -hm -hm -hm -IC -hm -hm -Av -BP -sY -mY -tl -uf -uc -NN -Ww -ur -uG -vJ -wi -uA -vZ -wR -De -wC -GY -Cj -uA -FP -Gh -Gn -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ab -ae -ae -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +aWi +boe +akk +bfT +bhw +bhy +bhy +bhP +bmT +bnv +akk +bgn +ajp +aev +aeu +aiu +apj +agb +aLh +aLF +bdE +aKC +aKC +bdE +aZV +bjp +aMG +aKN +bdZ +bet +agi +aqJ +ayj +aVW +bef +bjs +bno +arj +asI +aqb +aef +aeN +bjB +aeN +ahc +ahP +ase +aIM +aWC +aWK +aXb +aXt +ase +aXz +aXX +aYq +aYJ +bcS +aXz +aZq +aXz +aXz +axu +avY +ate +aoJ +atk +atT +auj +aDv +auf +auC +auv +auO +avn +aEr +aKl +aKY +aSb +aKb +aTB +aTB +aSb +aTB +aKb +bkA +aVS +aEr +aNp +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aab +aae +aae +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -Np -aP -gy -jp -iB -jK -lS -Lq -GD -yl -ho -GS -Ky -xH -yf -sM -sM -NG -Lz -Nw -yu -oS -aj -hj -hj -hj -hj -hj -es -es -uU -ki -es -Ia -es -MX -lV -es -hm -oV -ya -ID -IM -hm -Av -BP -sY -oJ -tw -tS -uk -sY -qv -uC -uC -rr -wk -qC -vX -wl -wm -EA -wD -Cr -xu -FR -KZ -Go -KP -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ae -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aet +ajo +aGK +bgx +akk +bgs +bhy +bhy +bhP +bhy +bhy +bnu +bnx +agy +ajp +aev +adF +aiv +aiC +bdh +aLi +aLG +bjo +aWs +aWs +bjo +bid +aTo +aDc +beB +beu +bez +aNi +aus +ayo +ayt +aDb +bes +aNi +aCy +asA +aqb +aaj +ahj +ahj +ahj +ahj +ahj +ase +aLk +aWA +aWJ +aWZ +aZf +ase +aMZ +aXV +aYk +aZc +aZc +aZs +aZJ +bab +aXz +axu +avY +ate +apu +aFx +auD +aGx +aGB +amu +auu +auG +avl +awi +aEw +aGa +aQF +aHp +aKf +aMY +aHp +aQF +aQV +aRr +bkB +bkH +aEr +aNp +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aae +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -iB -fl -oM -kJ -iB -yj -dr -kS -xU -yp -zJ -KD -yn -NJ -Lz -oA -xx -oA -ez -eP -oz -xC -Dv -HH -es -nX -qr -uV -xP -kq -HI -Ip -IG -IK -hm -py -yb -IE -JF -hm -Av -BP -sY -ub -tR -ui -uh -pL -us -uC -uH -vQ -vl -uA -wF -wS -Df -ww -ww -Kr -uA -FT -Gj -Gp -KP -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -JM -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +bge +bpb +akk +bgH +bhF +bhJ +biw +biw +bmU +bnw +akk +agy +aOk +aev +adS +akx +axd +amq +amq +aNq +amq +amq +aMs +aMs +bkb +aMs +aMs +aKQ +bke +bie +aKy +aoR +aFR +aDq +ayf +bir +aLz +asH +asA +aqb +aqD +atv +aWx +aWL +aXm +aYs +bkG +aWo +aWD +aWM +aXc +bda +ase +aTp +aXW +aYr +aYK +aYK +aZh +aZt +bcW +aXz +aww +avY +ate +apI +atl +atV +awp +aKs +auk +auC +auH +avm +aBm +aEx +aGq +aHz +aRj +aKW +aNQ +aHz +bjD +aQW +boh +aRG +bkI +aEr +aNp +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aJM +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ae -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -iu -jp -iB -gl -kN -qJ -Lu -GG -fN -LE -Ky -GX -zN -zO -zZ -KF -LA -xK -yw -NF -ez -fm -rq -gH -iU -xZ -uR -uS -uW -uX -JR -uY -JR -uZ -va -Ng -hm -qt -yc -EB -JG -hm -Ay -BP -te -te -te -te -te -te -ut -uC -uI -pS -vm -uA -wO -xs -Df -ye -yQ -Kq -uA -Fw -CF -CF -KP -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aae +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +ajo +ajo +ajo +alH +alH +alH +alH +alH +alH +alH +alH +alH +bgn +bgk +aev +acx +akF +axS +amq +azF +aZU +asp +amq +aMW +aWc +bfi +aTt +aMs +aKQ +beu +bjx +akK +akK +aqF +aqR +bdA +akK +bnp +aqb +asM +aLJ +aqD +aub +aWy +aXa +aXp +aYt +bkL +aWt +aWm +aWN +aXd +bhd +ase +aXB +aXY +aYu +aYM +aYY +aZj +aZv +bcZ +aXz +aAv +avY +atf +atf +atf +atf +atf +atf +aoU +auC +aFd +avs +aEp +aEW +aPe +aJh +aKa +aKZ +aPc +aRI +aRK +aRL +aRN +bae +aXM +aEr +aNp +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aVZ +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ae -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -iB -lR -mq -qL -iB -qN -gk -LC -KO -hs -Dc -GC -Aa -Ab -Ac -yv -NB -oA -ez -fo -rq -qz -pv -Ag -es -pA -pE -xI -MU -CQ -HM -xI -pE -Nj -hm -qy -yi -IL -JT -hm -AH -BQ -te -tm -tT -tW -Ks -vs -uu -uC -uC -vR -vn -uA -uA -uA -wn -uA -uA -uA -uA -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aae +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aet +aet +aet +aet +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aaP +bgn +ajp +aev +aeu +aiv +aeu +amq +aLa +bde +beL +amq +aMX +aWg +bgp +bhT +aMs +bel +bev +bif +akD +asg +ayl +bdw +ber +bkj +bnp +aqb +aNB +aqb +aqD +awa +aWz +aXl +aXD +aZK +bkG +aWu +aWD +aWQ +aXc +bnO +ase +aXC +aXZ +aYv +bmm +aXW +aZk +aZw +bnZ +aXz +aAy +aAK +atf +apL +atm +atW +aym +atf +atp +auC +auC +aEv +aEs +aNS +aNS +aNS +aNS +awU +aEB +aEJ +aNS +aNS +aNS +baf +aPw +aPw +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -iB -kO -GW -Lq -GD -yt -gk -LC -KO -hs -qR -GO -GF -FZ -Lz -oi -sA -oA -ez -fp -gH -gH -pB -Cb -fC -rl -Fe -rl -rl -rl -rm -rm -FA -rm -ir -ir -ir -IN -ir -ir -Av -BU -te -qD -pV -qG -qI -qS -Ts -qB -qB -rt -Da -vt -vM -wJ -Dg -wN -wT -Cu -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +bgn +aOk +aev +adF +akG +ayd +aof +aMH +bdG +bhQ +amq +aVY +aZW +bgr +bib +aMs +bjw +bew +bkh +akD +asF +ayn +bdz +aZS +bkl +bnp +akP +asA +aqb +aez +afC +afC +afC +afC +afC +afC +aJJ +aWA +aWR +aXc +bnP +ase +aXG +aYa +aXW +aZl +aZr +aZI +aZL +boa +aXz +axu +aCu +atf +apP +atn +aGi +azA +aFj +aWw +aur +aur +aEG +aEC +aNS +aPh +aFy +aGc +aRM +aQd +awq +awG +aFm +aNS +bky +aXN +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -iB -kH -kP -of -GD -GH -gm -LF -Ky -xV -Dq -JB -HC -NK -Lz -Nx -sA -zb -ez -fq -gH -tU -pB -Cb -fC -ro -Fa -Fo -Fj -rl -HJ -Fk -Fp -FB -ir -ri -ES -IO -LM -ir -Av -BU -te -tk -tr -tV -vz -vs -uv -uC -uC -ru -wo -qa -wu -wb -wp -wp -wH -JV -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +agy +bgk +aev +adS +akI +acx +amq +aNn +bdN +bhS +amq +aWb +bed +bgt +bka +aMs +beC +bke +bif +akK +akK +aLd +akK +akK +akK +bnp +aoS +asA +bcH +aez +afm +aun +bct +bct +aws +afC +aIM +aWC +aWT +aXb +aXr +aXw +aXK +aXZ +aYz +aYN +aYN +aYN +aZz +aYN +aYN +aww +aCu +atf +apP +aud +auc +aAa +aSh +aut +aux +atq +awS +aGE +aNS +aPp +awe +awe +aRQ +aRl +aRQ +awT +bcy +aNS +bkC +aUk +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -Np -aP -gy -jp -iB -iB -kG -GD -iB -Db -iI -pF -KJ -KJ -KJ -KJ -KJ -KJ -Nf -CE -aK -oA -ez -fy -rq -rq -pB -Cb -fC -xX -Fb -Ff -GB -rl -HK -Fl -Fr -FC -ir -xM -In -IP -Nl -ir -AJ -BU -te -te -te -te -te -te -uw -uC -uN -ve -Kl -vt -vP -wc -wq -wq -EJ -JV -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +bgn +ajp +aev +acx +akJ +aKc +amq +amq +amq +amq +amq +aMs +aMs +aMs +aMs +aMs +beC +beu +bjx +axV +ayC +bdB +bej +bin +bkk +bnm +asJ +aaK +asJ +aez +aOm +bcL +arS +awd +bcM +afC +aJJ +aWA +aCa +aXf +bnQ +aXx +aXQ +aYb +aYA +aYN +aYZ +aZm +aZB +bcX +aYN +aAH +aCu +atf +aqv +atx +auh +aAb +aSh +aut +aux +auN +aAc +aJQ +aNS +aPx +aRS +aRp +aRZ +aRR +aSd +aSe +aJV +aNS +bkC +bkJ +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -Np -aP -nv -jp -dk -jM -iA -qF -xT -kT -ho -Nn -KJ -HF -yo -GV -Lc -Li -Nf -qd -qg -oA -ez -fo -gH -sL -uQ -Dy -fC -Fh -Fc -Fg -Ui -rl -HL -Fm -Fy -Nm -ir -xN -Iz -IQ -LN -ir -Ay -BU -tf -pu -pI -pP -pR -vu -ux -uC -uC -vf -KY -vt -wa -wd -wG -wG -wI -MY -vt -Fw -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +aEK +aOk +acb +acb +acb +acb +acb +anf +aGO +bdn +bey +beJ +bek +bey +beJ +bdU +ajM +bex +bki +axV +aZR +bea +beE +bio +bkn +bnm +asK +aqg +aWk +bcv +aOx +avP +bcu +bcz +bcG +afC +aIM +aWA +aCa +aWD +aXr +aXy +aXR +aYc +aYI +aYN +aZb +aZn +aZC +aYZ +aYN +awE +aCu +atf +apR +aud +aQI +avz +atf +auw +aux +avu +aDD +aOQ +aNS +aQb +awI +awe +awe +aRQ +awe +aYj +aPP +aNS +bkC +bpm +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -Np -aP -jn -jp -dt -fA -kT -kT -kT -kT -eu -iv -kI -KB -GK -KE -Ld -KG -Nf -eY -sA -oA -ez -fB -gH -gH -uB -HN -fC -Fi -Fd -Fz -Ui -rl -Ko -Fn -Nk -No -ir -xO -IB -IV -LN -ir -Gl -BU -tf -tn -tx -ul -uj -un -Ww -ur -ur -vg -Kl -vt -wx -we -we -we -we -MY -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +agy +bgk +acb +adb +agj +aiA +akT +anv +aGP +bdH +bdq +bdH +bdr +bdu +bdH +bkc +bdH +bkf +bih +ayg +aWf +bee +beO +biq +bko +bnm +asN +asA +aqb +bcs +arS +bcq +bcw +awf +awx +afC +aWE +aWU +aXg +aXi +bnR +ase +aXU +aYi +aYX +aYN +aZg +aZy +aZM +bac +aYN +auy +aCF +atf +apP +atx +atx +avK +atf +auI +auC +auC +avM +aOG +aNS +aQh +awe +awe +aRQ +awe +aWn +aZX +bcA +aNS +bkC +bpn +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -Np -aP -gy -jp -dk -kv -qE -qU -oR -GN -GN -LG -KJ -xF -KC -HD -EK -Lk -Nf -Nb -sB -sN -ez -iT -qu -Af -HG -HR -fC -rl -rl -rl -rl -rl -rm -rm -rm -rm -ir -ir -ir -IW -ir -ir -Bd -BU -tf -tq -ty -ud -vK -vu -uy -uD -uO -vh -Km -vt -wE -wf -wr -wr -wU -Ka -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aiT +aaP +bgn +ajp +acb +adl +ahi +aiB +alS +apb +aGV +bec +beH +bdx +bgu +bju +beA +bdx +bkd +bfg +bii +axV +bgP +beg +bfj +bjt +bnl +bnm +azb +aCz +aLK +aez +atw +aZY +avX +bcB +bcF +afC +ase +ase +ase +ase +ase +ase +aXz +aYp +aXz +aYN +aYN +aYN +aYN +aYN +aYN +aBd +aCu +atf +aty +aul +auF +aDx +atf +atS +awQ +azB +atX +aDa +aNS +aQp +aGz +aRA +awr +awr +aWG +bad +bcC +aNS +bom +aYm +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jp -dk -dk -dk -dk -dk -dk -dk -dk -KJ -KJ -KJ -KJ -KJ -KJ -Nf -qe -sA -nr -ez -fC -fC -fC -fC -fC -fC -Uk -Uk -zz -Uk -Yj -Uk -zz -Uk -Uk -Uk -zz -Uk -zy -Uk -Gi -Bd -BZ -tf -tf -tf -tf -tf -tf -up -up -up -vi -up -vt -vt -vt -vt -vt -vt -vt -vt -Fv -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aiT +aaP +agy +aOk +acb +afb +ahs +aqN +aKJ +aKJ +aKJ +aKJ +aWd +aKJ +aKJ +bdK +bdP +bdP +bdP +bij +bdK +axV +axV +bei +axV +axV +axV +bnm +aqe +asA +anr +aez +afC +afC +aZZ +baa +afC +afC +awg +awb +awg +awg +awl +awg +ilu +eOX +awH +awZ +azz +awZ +awZ +aye +aDg +aBd +aCH +atf +atf +atf +atf +atf +atf +aup +aup +aup +aGw +aup +aNS +aNS +aNS +aNS +aNS +aNS +aNS +aNS +aNS +aNS +bon +aZu +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gy -jt -fb -fb -fb -fb -fb -fb -gx -fb -fb -fb -fb -lQ -oN -rD -BF -lr -mS -sP -oB -sh -sm -xA -xA -zx -yY -xA -xA -xA -yY -xA -xA -xA -xA -xA -xA -xA -xA -xA -xA -xA -Bm -Kk -Cf -CG -CH -EW -CH -CH -YB -EW -CH -Fq -CH -EW -CH -CH -CH -EW -CH -CH -CH -Ge -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aiT +aaP +agy +ajp +acb +afl +ahK +aiD +aKJ +aqH +aHF +aOs +aWe +azN +bdl +bdK +bdQ +bdY +beG +bik +aVX +bdK +aGQ +alQ +apY +arN +asa +afy +alr +afB +afS +amS +asl +asP +aOy +aOz +amO +avO +asO +asO +asO +asO +asO +awm +awm +asO +asO +asO +asO +asO +asO +asO +asO +ask +aCW +aDf +aVV +aEA +aFz +aEA +aEA +aFA +aFz +aFC +bpj +aRH +aFz +aEA +aEA +aEA +bpk +aEA +aEA +aFz +aEA +bpl +boo +avL +axB +aIx +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -gh -gy -gy -gy -gh -nf -gy -gy -gh -gy -nf -ka -kk -nZ -pY -rN -mT -ng -mT -nO -mT -sO -sn -xB -xB -xB -xB -xB -xB -xB -xB -xB -AK -Uk -zw -zz -Uk -Uk -Ca -Uk -zz -Ak -Bx -Bx -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -CF -XA -KP -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aiT +aaP +bgn +bgk +acb +afl +ahs +ajn +aKJ +auB +aKG +aOu +aWh +aZT +bdp +bdK +bdS +beh +beZ +bim +bkr +bdK +akY +bmR +aoN +aqU +aOr +amT +ang +amT +anO +amT +akw +awg +awb +awg +awg +asn +awb +awg +awb +asn +awg +awv +awC +awD +awJ +awP +awP +axs +aAk +bdb +aRs +aBx +axu +axB +aOS +aQH +aOS +aOS +aQH +aOS +aQH +aOS +aOS +aQH +aQH +aOS +aOS +aQH +aQH +aOS +aOS +aQH +aOS +aQH +aOS +aOS +axB +aIx +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -Np -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -aP -gy -kg -ao -ao -rs -sa -mT -mo -nN -nz -mT -sl -wZ -xB -zv -zv -zv -zv -zv -zv -zv -xB -xB -xB -xB -xB -xB -xB -xB -xB -xB -xB -xB -zv -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -XA -KP -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aiT +aaP +agy +aOk +acb +afb +ahK +ajt +aKJ +axT +aLE +aVT +aWl +bdf +bds +bdK +bdV +bem +bfb +bjr +bku +bdK +ajp +arD +aao +aPi +ars +amT +amo +anN +anz +amT +aSg +asm +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +avD +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +axB +aIx +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -Np -mT -no -nd -wY -mT -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -TY -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -KP -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aiT +aaP +agy +bgk +acb +afl +air +ajL +aKJ +auB +bkm +bkm +bkm +ajD +bdy +bdK +bdW +beq +bgj +bjz +bkv +bdK +ajp +bgn +aiT +aiT +aiT +amT +ano +and +awY +amT +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +ash +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aIx +aab +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kU -mT -mA -nD -nP -mT -kU -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aiT +aaP +bog +bgk +acb +afA +aiy +akv +aKJ +aDA +aNK +aWa +aZQ +bdg +bdF +bdK +bdX +beF +bhN +bjA +bnk +bdK +bgC +agy +aiT +aKP +akU +amT +amA +anD +anP +amT +akU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -lk -mT -ns -mT -xa -mT -nb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aiT +aaP +bgn +ajp +acb +acb +acb +acb +aKJ +aKJ +aKJ +aKJ +aKJ +aKJ +aKJ +bdK +bdK +bdK +bdK +bdK +bdK +bdK +ajp +bgn +aiT +aKP +alk +amT +ans +amT +axa +amT +anb +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -KK -ag -mB -nn -mU -so -vv -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aiT +aaP +bgn +bgo +acs +bmO +acs +acs +bgz +bmN +acs +bgz +acs +bmN +bgz +acs +acs +bmO +bmN +acs +bgz +acs +bmQ +bgB +aiT +aKP +aKK +aag +amB +ann +amU +aso +avv +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -wy -mX -mE -qf -wy -zH -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aiT +aaP +agy +bgn +agy +agy +agy +bgn +bgn +agy +agy +bgn +agy +agy +bgn +bgn +bgn +agy +agy +bmP +agy +bgn +agy +bkK +aiT +aKP +aae +awy +amX +amE +aqf +awy +azH +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -mK -mX -mE -pa -wy -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aiT +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aaP +aiT +aKP +aae +amK +amX +amE +apa +awy +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -mK -ad -mE -pa -mK -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aiT +aKP +aae +amK +aad +amE +apa +amK +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ae -mK -ad -mE -pa -wy -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aae +amK +aad +amE +apa +awy +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ae -wy -ad -mE -qf -wy -zH -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aae +awy +aad +amE +aqf +awy +azH +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ae -mK -ad -mE -pa -mK -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aae +amK +aad +amE +apa +amK +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ae -ae -ae -ab -ae -ae -ae -ae -ab -ab -ab -ae -wy -mX -mE -pa -mK -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aae +aae +aae +aab +aae +aae +aae +aae +aab +aab +aab +aae +awy +amX +amE +apa +amK +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -ad -vH -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +aad +avH +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -mK -ad -mE -qf -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +amK +aad +amE +aqf +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -ad -mE -pa -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +aad +amE +apa +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -wy -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +awy +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +awy +amX +amE +apa +amK +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mX -mE -pa -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aab +aaf +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amX +amE +apa +amK +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -wy -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +awy +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -vH -qf -mK -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +avH +aqf +amK +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -ab -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -mK -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aae +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +amK +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ae -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aae +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -mK -ad -mE -qf -mK -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aab +aaf +aaf +aaf +aaf +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +amK +aad +amE +aqf +amK +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -af -af -ab -af -ab -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -ad -vH -qf -wy -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aab +aaf +aab +aab +aaf +aaf +aaf +aaf +aaf +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +aad +avH +aqf +awy +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -af -af -ab -ab -ab -af -af -af -af -af -af -ab -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aae +aab +aae +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ae -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aae +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -ab -ab -ab -af -af -af -af -af -af -af -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -mK -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aae +aaf +aae +aab +aab +aab +aab +aab +aae +aab +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +amK +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aae +aab +aab +aae +aab +aae +aaf +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +awy +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -af -ab -af -ab -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -wy -mX -vH -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaf +aab +aaf +aab +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aae +aab +aab +aab +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +awy +amX +avH +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -af -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ae -ab -ae -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aab +aaf +aaf +aaf +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aae +aab +aae +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -vH -pa -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ab -ab -ab -ae -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +avH +apa +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aab +aab +aab +aae +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ae -ab -ae -ae -ab -ab -ae -ae -ab -ab -ae -ae -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aab +aaf +aaf +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aae +aab +aae +aae +aab +aab +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ab -ab -ae -ae -ae -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aae +aab +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aab +aab +aae +aae +aae +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ab -ae -ae -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aaf +aaf +aaf +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aab +aae +aae +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ab -ae -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aab +aae +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -ab -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ae -ae -ae -ae -ae -ae -ab -ae -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aae +aae +aae +aae +aae +aae +aab +aae +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aab +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ab -ae -ae -ab -ae -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aaf +aaf +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aab +aae +aae +aab +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ae -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aae +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -vH -pa -mK -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ab -ae -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +avH +apa +amK +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aae +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ae -ae -ae -ae -ae -ab -ae -ae -ae -ab -ae -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aae +aae +aae +aae +aab +aae +aae +aae +aab +aae +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wy -ad -mE -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aab +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awy +aad +amE +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -mK -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +amK +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -wy -ad -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +awy +aad +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ab -ab -ab -mK -mX -mE -qf -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aab +aab +aab +amK +amX +amE +aqf +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ae -ae -ab -ab -ab -ab -ab -wy -mX -vH -qf -wy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aab +aae +aae +aab +aab +aab +aab +aab +awy +amX +avH +aqf +awy +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aae +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ae -ab -ae -ab -ab -ab -ab -ab -wy -mX -vH -pa -xt -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aaf +aaf +aae +aae +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aae +aab +aae +aab +aab +aab +aab +aab +awy +amX +avH +apa +axt +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -af -af -af -ab -ab -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -wy -mX -mE -pa -mK -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aab +aaf +aaf +aaf +aab +aab +aab +aab +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +awy +amX +amE +apa +amK +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -wy -ad -mE -qf -wy -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aaf +aaf +aae +aab +aab +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +awy +aad +amE +aqf +awy +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ab -ab -ab -ab -ab -mK -mX -mE -pa -wy -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaf +aab +aab +aae +aab +aae +aae +aaf +aaf +aaf +aaf +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aab +aab +aab +amK +amX +amE +apa +awy +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mK -mE -vH -vH -wy -ab -ab -ab -ae -ab -ae -ae -ae -ae -ab -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aaf +aaf +aaf +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +amK +amE +avH +avH +awy +aab +aab +aab +aae +aab +aae +aae +aae +aae +aab +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -zH -zH -ae -zH -ae -ab -ab -ab -ae -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aaf +aaf +aaf +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azH +azH +aae +azH +aae +aab +aab +aab +aae +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -zH -ae -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aab +aab +aaf +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +azH +aae +aab +aab +aab +aab +aab +aab +aae +aae +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aae +aae +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} (200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa "} diff --git a/maps/outreach/outreach-3.dmm b/maps/outreach/outreach-3.dmm index 71df2320901..0cf7cffb67b 100644 --- a/maps/outreach/outreach-3.dmm +++ b/maps/outreach/outreach-3.dmm @@ -5,18 +5,14 @@ "ab" = ( /obj/effect/floor_decal/corner/grey/border{ icon_state = "bordercolor"; - dir = 8 + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, +/turf/simulated/floor/reinforced/concrete, /area/exoplanet/outreach) "ac" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) +/area/outreach/outpost/maint/passage/ground/east/eva) "ad" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -60,7 +56,7 @@ /turf/simulated/wall/concrete, /area/outreach/outpost/vacant/ground/swroom) "aj" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/vacant/ground/swroom) "ak" = ( /obj/structure/cable/yellow{ @@ -103,24 +99,24 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) "ap" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/docking_beacon/mapped{ + icon_state = "injector0"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, +/obj/abstract/landmark/skip_test, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) +/area/outreach/outpost/hangar/north) "aq" = ( /turf/unsimulated/rock, /area/exoplanet/outreach) @@ -140,7 +136,21 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/south) "at" = ( -/turf/simulated/wall, +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/ce_storage) +"au" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) "av" = ( /obj/effect/decal/cleanable/dirt, @@ -200,31 +210,27 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) "aB" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, /obj/machinery/atmospherics/omni/filter{ name = "EVA refill gas filter north"; - tag_east = 2; - tag_filter_gas_west = "gas_oxygen"; tag_south = 1; - tag_west = 8 + tag_east = 2; + tag_west = 8; + tag_filter_gas_west = "gas_oxygen" }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) "aC" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /obj/machinery/meter, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) "aD" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) @@ -305,6 +311,7 @@ /obj/item/clothing/mask/gas/budget, /obj/item/clothing/mask/gas/budget, /obj/item/clothing/mask/gas/budget, +/obj/item/book/manual/evaguide, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) "aM" = ( @@ -331,19 +338,15 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/south) "aP" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) "aQ" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -384,6 +387,7 @@ /obj/item/clothing/mask/gas/budget, /obj/item/clothing/mask/gas/budget, /obj/item/clothing/mask/gas/budget, +/obj/item/book/manual/evaguide, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/south) "aS" = ( @@ -412,10 +416,6 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/south) "aV" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -427,19 +427,32 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/eva/gf/north) "aW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"aX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 9 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"aY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -447,34 +460,50 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) "aZ" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) +/area/outreach/outpost/hangar/north) "ba" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/ground) "bb" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/down{ - icon_state = "pipe-d"; - dir = 1 +/obj/machinery/atmospherics/pipe/zpipe/down{ + icon_state = "down"; + dir = 4 }, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/ground) +/obj/structure/railing/mapped, +/obj/structure/sign/warning/fall{ + pixel_y = 24 + }, +/turf/open, +/area/outreach/outpost/maint/waste/ground) "bc" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) +"bd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) "be" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -482,75 +511,122 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 9 + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) +/area/outreach/outpost/maint/passage/ground/east/airlock) +"bf" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) "bg" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach) "bh" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, +/obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) +/area/outreach/outpost/maint/passage/ground/east/airlock) +"bi" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) "bj" = ( /obj/structure/flora/pottedplant/largebush, /obj/structure/sign/directions/medical{ - dir = 8; icon_state = "direction_med"; + dir = 8; pixel_y = 24 }, /obj/structure/sign/directions/security{ - dir = 8; icon_state = "direction_sec"; + dir = 8; pixel_y = 32 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/ground) "bk" = ( +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 4 + }, +/turf/open, +/area/outreach/outpost/maint/waste/ground) +"bl" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, /obj/machinery/power/apc{ icon_state = "apc0"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"bl" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/ground/south/offices) +"bm" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/chief) "bn" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - icon_state = "map"; - dir = 4 +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 }, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "0-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/light/spot/wired{ + icon_state = "tube_map"; + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced/outreach, /area/exoplanet/outreach) "bo" = ( -/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) +"bp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"bq" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/workshop) "br" = ( /obj/machinery/light_switch{ icon_state = "light0"; @@ -558,54 +634,47 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) +"bs" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/hall) "bt" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/obj/machinery/atmospherics/valve/shutoff, +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) +/area/outreach/outpost/hallway/north/ground) "bu" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/ground) +"bv" = ( +/turf/simulated/wall/r_ocp, +/area/exoplanet/outreach) "bw" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/structure/cable/yellow{ + 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/outreach/outpost/hallway/west/ground) +/area/outreach/outpost/hallway/north/ground) "bx" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -638,11 +707,21 @@ icon_state = "open"; dir = 8 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/east/ground) "bB" = ( -/obj/structure/sign/department/eva{ - pixel_y = 32 +/obj/machinery/firealarm, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) @@ -652,15 +731,15 @@ icon_state = "2-4" }, /obj/machinery/airlock_sensor{ - id_tag = "OH_l3_e_alck_interior_sensor"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l3_e_alck_interior_sensor" }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) "bD" = ( /obj/machinery/door/airlock/external/glass{ - dir = 8; icon_state = "closed"; + dir = 8; id_tag = "OH_l3_e_alck_outer" }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -688,6 +767,29 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) +"bF" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/maint/passage/ground/northwest) +"bG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/ce_storage) +"bH" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/west) +"bI" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/west2) +"bJ" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/hall) "bK" = ( /obj/structure/cable/cyan{ icon_state = "4-8" @@ -702,9 +804,20 @@ /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) "bL" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/ground) "bM" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -714,70 +827,79 @@ /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/ground) "bN" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) +/area/outreach/outpost/hallway/north/ground) "bO" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 + }, +/obj/machinery/atmospherics/valve/shutoff, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"bP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/ground) +"bQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"bP" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"bQ" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"bR" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "2-4" }, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -787,106 +909,63 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"bR" = ( +/area/outreach/outpost/hallway/north/ground) +"bS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"bS" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) "bT" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"bU" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/waste/ground) +"bU" = ( +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) +/area/outreach/outpost/maint/atmos/ground) "bV" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) +/area/outreach/outpost/hallway/north/ground) "bW" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -905,6 +984,26 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/ground) +"bY" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"bZ" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) "ca" = ( /obj/effect/catwalk_plated/dark, /obj/structure/cable/cyan{ @@ -912,32 +1011,97 @@ }, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"ci" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +"cb" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"cc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"cd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/ground) +"ce" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/stamp/cargo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"cf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 9 }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"cg" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"ch" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"ci" = ( +/obj/structure/sign/eshowers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/ground) "cj" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 1 +/obj/structure/sign/department/engineering, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/area/outreach/outpost/hallway/west/ground) "ck" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"cl" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/ground/south/offices) "cm" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -951,28 +1115,54 @@ /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/ground) "cn" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 1 }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/area/outreach/outpost/hallway/east/ground) "co" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/obj/item/radio/intercom, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) +"cp" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/cargo/outreach/public, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/hall) "cq" = ( /obj/effect/floor_decal/industrial/hatch/orange, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "11" + icon_state = "11"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) @@ -981,255 +1171,392 @@ /obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/airlock_sensor{ dir = 1; - id_tag = "OH_l3_e_alck_sensor"; - pixel_y = 0 + pixel_y = 0; + id_tag = "OH_l3_e_alck_sensor" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) -"cy" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"cB" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/power/ground) -"cE" = ( -/obj/machinery/light_switch{ +"cs" = ( +/obj/machinery/light_switch/on{ icon_state = "light0"; - dir = 1 + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"cJ" = ( -/obj/structure/flora/pottedplant/largebush, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ct" = ( +/obj/machinery/conveyor/outreach/cargo/mail{ + icon_state = "conveyor0"; + dir = 10 }, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"cK" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 8 - }, +/area/outreach/outpost/cargo/distribution) +"cu" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"cL" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"cN" = ( -/obj/structure/ladder, -/obj/structure/lattice, -/turf/simulated/open, -/area/outreach/outpost/maint/power/ground) -"cO" = ( +/area/outreach/outpost/hallway/west/ground) +"cv" = ( /obj/structure/cable/yellow{ - icon_state = "32-8" + icon_state = "4-8" }, -/obj/structure/lattice, -/obj/structure/sign/warning/fall{ - pixel_y = 24 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/open, -/area/outreach/outpost/maint/power/ground) -"cR" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"cS" = ( -/turf/simulated/wall, -/area/outreach/outpost/eva/gf/south) -"cT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/wallframe_spawn/concrete, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/meter, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/eva/gf/south) -"cZ" = ( -/obj/machinery/door/firedoor/autoset, +/area/outreach/outpost/hallway/west/ground) +"cw" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"cx" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"db" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"dc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"de" = ( +/area/outreach/outpost/engineering/gf/ce_storage) +"cy" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/engineering/outreach/head{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/ce_storage) +"cz" = ( +/obj/machinery/conveyor/outreach/cargo/mail{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/structure/window/reinforced, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"df" = ( -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/area/outreach/outpost/cargo/distribution) +"cA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/power/ground) -"dk" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 1 }, -/obj/machinery/atmospherics/unary/tank/air/airlock, -/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"dl" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +"cB" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/power/ground) +"cC" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"cD" = ( +/obj/machinery/conveyor/outreach/cargo/mail{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/structure/flaps, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"cE" = ( /obj/machinery/light_switch{ icon_state = "light0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"dm" = ( -/obj/structure/stairs/long, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; +/area/outreach/outpost/vacant/ground/office3) +"cF" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + name = "disposal outlet (incoming cargo)"; + icon_state = "outlet"; dir = 8 }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"cG" = ( +/obj/structure/closet/shipping_wall/filled, +/obj/structure/table/steel, +/obj/machinery/camera/network/security, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"do" = ( +/area/outreach/outpost/cargo/distribution) +"cH" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, /obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"cI" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 9 + }, +/obj/structure/filing_cabinet/chestdrawer, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"cJ" = ( +/obj/structure/flora/pottedplant/largebush, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"cK" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"cL" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 9 + dir = 4 }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"dp" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 +/area/outreach/outpost/hallway/west/ground) +"cM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 10 + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"cN" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/open, +/area/outreach/outpost/maint/power/ground) +"cO" = ( +/obj/structure/cable/yellow{ + icon_state = "32-8" + }, +/obj/structure/lattice, +/obj/structure/sign/warning/fall{ + pixel_y = 24 + }, +/turf/open, +/area/outreach/outpost/maint/power/ground) +"cP" = ( +/obj/machinery/telepad_cargo/sorting_hall, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/conveyor/outreach/cargo/distribution{ + icon_state = "conveyor0"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"dz" = ( +/area/outreach/outpost/cargo/distribution) +"cQ" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/cargo/distribution{ + icon_state = "conveyor0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"cR" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"cS" = ( +/turf/simulated/wall, +/area/outreach/outpost/eva/gf/south) +"cT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/effect/wallframe_spawn/concrete, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/outreach/outpost/eva/gf/south) +"cU" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"cV" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/structure/flaps, +/obj/machinery/conveyor/outreach/cargo/distribution{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"cW" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"dA" = ( -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 1 +/area/outreach/outpost/hallway/west/ground) +"cX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/valve/shutoff, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"dE" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/obj/effect/wallframe_spawn/concrete, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - icon_state = "map_on"; - name = "gas pump (eva oxy)"; - target_pressure = 15000 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, /turf/simulated/floor/plating, -/area/outreach/outpost/eva/gf/south) -"dF" = ( +/area/outreach/outpost/hallway/west/ground) +"cY" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"cZ" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "11" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"da" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1242,18 +1569,15 @@ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/eva/gf/south) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "11" - }, +/obj/effect/wallframe_spawn/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"db" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -1263,70 +1587,56 @@ icon_state = "11-supply"; dir = 4 }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/ground) +"dc" = ( /obj/effect/floor_decal/industrial/warning/corner{ icon_state = "stripecorner"; - dir = 4 + dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"dI" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"dd" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"de" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/south/offices) -"dQ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"dR" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"dT" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, +/area/outreach/outpost/eva/gf/south) +"df" = ( +/obj/machinery/power/smes/buildable/max_cap_in_out, /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"dV" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/maint/power/ground) +"dg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office3) -"dY" = ( +"dh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1334,101 +1644,146 @@ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 + dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/ground) +"di" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/south/offices) +"dj" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"dk" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, +/obj/machinery/atmospherics/unary/tank/air/airlock, +/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"ea" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) -"ec" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +"dl" = ( +/obj/machinery/light/small, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"ed" = ( +/area/outreach/outpost/maint/passage/ground/east/eva) +"dm" = ( +/obj/structure/stairs/long, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"dn" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"do" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"ee" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/ground/west/junct) -"eg" = ( +/area/outreach/outpost/hallway/central/ground) +"dp" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, +/obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"eh" = ( -/obj/structure/sign/warning/engineering_access{ - icon_state = "securearea"; - dir = 8 +/area/outreach/outpost/hallway/east/ground) +"dq" = ( +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/obj/structure/window/reinforced, +/obj/machinery/disposal/deliveryChute{ + name = "delivery chute (tagged delivery)"; + icon_state = "intake"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"ei" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/ground/south/offices) -"ej" = ( +/area/outreach/outpost/cargo/distribution) +"dr" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"ek" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"ep" = ( +/area/outreach/outpost/hallway/east/ground) +"ds" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/ground) +"dt" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 6 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"eq" = ( +/area/outreach/outpost/hallway/east/ground) +"du" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"dv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1440,166 +1795,134 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"er" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/area/outreach/outpost/hallway/east/ground) +"dw" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/warehouse) +"dx" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 }, /obj/machinery/alarm{ icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/light_switch/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"dy" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"es" = ( +/area/outreach/outpost/hallway/east/ground) +"dz" = ( /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"ez" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"eE" = ( -/obj/machinery/light_switch/on{ - dir = 8; - icon_state = "light0" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"eG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 }, -/obj/machinery/alarm{ - icon_state = "alarm0"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/ground) +"dA" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"eI" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office5) -"eK" = ( -/obj/structure/sign/warning/engineering_access{ - icon_state = "securearea"; - dir = 4 +/obj/machinery/computer/modular/preset/engineering, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"dB" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"dC" = ( +/obj/structure/cable/yellow{ + icon_state = "16-0" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"eL" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office5) -"eP" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office7) -"eT" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"eW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/structure/sign/deck/third{ + pixel_y = 32 }, -/obj/item/caution/cone, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"eY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) -"eZ" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) -"fd" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"fh" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"fj" = ( +/area/outreach/outpost/maint/power/ground) +"dD" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"fm" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office6) -"fp" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/area/outreach/outpost/hallway/south/ground) +"dE" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, +/obj/effect/wallframe_spawn/concrete, +/obj/machinery/atmospherics/binary/pump/on{ + name = "gas pump (eva oxy)"; + icon_state = "map_on"; + dir = 8; + target_pressure = 15000 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"fu" = ( +/area/outreach/outpost/eva/gf/south) +"dF" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 1 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"fv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"dG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -1611,319 +1934,274 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"fD" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office6) -"fF" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/obj/structure/disposalpipe/cap, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"fI" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/gf/south) +"dH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"fN" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"fO" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/obj/structure/disposalpipe/cap, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"fQ" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 4 }, -/obj/structure/cable/yellow, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"fS" = ( +"dI" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"fT" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 + icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"fV" = ( -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/ground/business_wing) -"fZ" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; dir = 8 }, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"gb" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/loading, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"dJ" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office5) -"ge" = ( +/area/outreach/outpost/stairwell/ground) +"dK" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gg" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office8) -"gh" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"gi" = ( -/obj/structure/disposalpipe/segment/bent, +/area/outreach/outpost/hallway/south/ground) +"dL" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/ground) -"gl" = ( +"dM" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/caution/cone, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gm" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; dir = 8 }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gn" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/area/outreach/outpost/maint/power/ground) +"dN" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"go" = ( -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gp" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"dO" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/ground/business_wing) -"gq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/sign/number/eight{ - icon_state = "number_8"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gs" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"gu" = ( +"dP" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"dQ" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 + icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gv" = ( -/obj/structure/stairs/long/east, -/obj/structure/railing/mapped/stairwell, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"gy" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"dR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"dS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/warehouse) +"dT" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"dU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gA" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"dV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 1 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"dW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/hallway/south/ground) +"dX" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/ground) +"dY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/high_power{ + name = "high power gas pump (airlock flush)" }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"dZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"ea" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"eb" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" }, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment/bent, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gC" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/hallway/south/ground) +"ec" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ed" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ee" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ef" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gD" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"eg" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 + icon_state = "1-2" }, +/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 10 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office8) -"gE" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground) +"eh" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -1933,717 +2211,793 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"ei" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/ground/south/offices) +"ej" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"ek" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"gF" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 8 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"el" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 8 +/obj/machinery/faxmachine/mapped/outreach/engineering, +/obj/structure/table/woodentable/ebony, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"em" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 8 +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"en" = ( +/obj/structure/disposalpipe/junction, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"eo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"ep" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"gH" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"gJ" = ( -/obj/structure/sign/number/six{ - icon_state = "number_6"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; dir = 1 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gK" = ( +/area/outreach/outpost/cargo/hall) +"eq" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/caution/cone, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gL" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 8 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground) +"er" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"es" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"gN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/area/outreach/outpost/hallway/south/ground) +"et" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"gO" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/area/outreach/outpost/hallway/south/ground) +"eu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/south/ground/business_wing) -"gT" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office6) -"gW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" +"ev" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"gX" = ( +/area/outreach/outpost/maint/waste/ground) +"ew" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"hb" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office8) -"hc" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ex" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"hd" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/west2) +"ey" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, +/obj/structure/closet/secure_closet/engineering_chief, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/ce_storage) +"ez" = ( +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"eA" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/up{ + icon_state = "pipe-u"; + dir = 8 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"hg" = ( -/obj/machinery/light/small, +/area/outreach/outpost/maint/waste/ground) +"eB" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"hj" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office9) -"hk" = ( +/area/outreach/outpost/maint/waste/ground) +"eC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"eD" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"hl" = ( -/obj/structure/stairs/long/north, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 8 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"hn" = ( -/obj/structure/stairs/long/north, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"hq" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/area/outreach/outpost/maint/atmos/ground) +"eE" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"hs" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 + }, +/obj/machinery/atmospherics/valve/shutoff, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/north) -"hB" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/area/outreach/outpost/hallway/south/ground) +"eF" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hC" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - icon_state = "11"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/meter, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hF" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/omni/filter{ - name = "EVA refill gas filter south"; - tag_east = 2; - tag_north = 1; - tag_west = 8 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" +/area/outreach/outpost/maint/waste/ground) +"eG" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, -/obj/machinery/meter, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4; - icon_state = "11" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - icon_state = "11"; - dir = 9 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"eH" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hK" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"hM" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"hX" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/area/outreach/outpost/maint/waste/ground) +"eI" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/ground/office5) +"eJ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 5 }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"hY" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 9 +/obj/structure/table/woodentable/ebony, +/obj/item/book/manual/engineering_hacking, +/obj/item/book/manual/supermatter_engine, +/obj/item/book/manual/rust_engine, +/obj/item/book/manual/nuclear, +/obj/item/book/manual/engineering_singularity_safety, +/obj/item/book/manual/engineering_particle_accelerator, +/obj/item/book/manual/engineering_guide, +/obj/item/book/manual/engineering_construction, +/obj/item/book/manual/atmospipes, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"eK" = ( +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 1 }, +/obj/machinery/atmospherics/valve/shutoff, /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"ic" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/north) -"id" = ( +/area/outreach/outpost/hallway/south/ground) +"eL" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/ground/office5) +"eM" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"ie" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"eN" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 9 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"if" = ( +/obj/structure/rack, +/obj/item/book/manual/engineering_construction, +/obj/item/book/manual/engineering_guide, +/obj/item/book/manual/engineering_particle_accelerator, +/obj/item/book/manual/engineering_singularity_safety, +/obj/item/book/manual/nuclear, +/obj/item/book/manual/rust_engine, +/obj/item/book/manual/supermatter_engine, +/obj/item/book/manual/atmospipes, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/obj/item/storage/box/taperolls/engineering, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"eO" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/north) -"ig" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"ii" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_gf_shed_s_shutters" - }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"eP" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/ground/office7) +"eQ" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/south) -"io" = ( -/obj/machinery/door/airlock/external/bolted{ - icon_state = "closed"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"ir" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"eR" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"iz" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"iD" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"iG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"eS" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/stairwell/ground/atmos) +"eT" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/open, -/area/outreach/outpost/stairwell/ground) -"iI" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"iK" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"iN" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office1) -"iR" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/vacant/ground/office3) +"eU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/chief) +"eV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"eW" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/ground) -"iS" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"iU" = ( +"eX" = ( +/obj/structure/bed/chair/office/comfy/yellow, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"eY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"eZ" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 8 + dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"fa" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/hangar/north) +"fb" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/maint/waste/ground) +"fc" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/tank_rack/hydrogen, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"iW" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/cyan, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"iX" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; +/area/outreach/outpost/engineering/gf/workshop) +"fd" = ( +/obj/structure/hand_cart, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"jb" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"jd" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "OH_l3_e_alck_pump" +/area/outreach/outpost/cargo/hall) +"fe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ff" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 +/obj/structure/closet/toolcloset, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fg" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/reinforced, -/area/outreach/outpost/airlock/ground) -"je" = ( -/obj/structure/girder/displaced, +/obj/structure/rack, +/obj/item/cable_painter, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/hand_labeler, +/obj/item/paint_sprayer, +/obj/item/paint_sprayer, +/obj/item/paint_sprayer, +/obj/item/paint_sprayer, +/obj/item/scanner/gas, +/obj/item/scanner/gas, +/obj/item/scanner/gas, +/obj/item/scanner/gas, +/obj/item/scanner/network, +/obj/item/scanner/network, +/obj/item/scanner/network, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/storage/box/armband/engine, +/obj/item/storage/box/armband/engine, +/obj/item/storage/box/armband/engine, +/obj/item/storage/box/armband/engine, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fh" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach) -"jk" = ( -/obj/structure/door/osmium, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"fi" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fj" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/south) -"jl" = ( -/obj/effect/floor_decal/corner/grey/bordercorner, /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, +/obj/effect/decal/cleanable/blood, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"fk" = ( +/turf/simulated/floor/reinforced/concrete, /area/exoplanet/outreach) -"jq" = ( +"fl" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 9 + }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"fm" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/ground/office6) +"fn" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment/bent{ icon_state = "pipe-c"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fo" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"ju" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/obj/machinery/vending/coffee, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"fp" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"jv" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/storage_shed/gf/north) -"jx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"fq" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; dir = 4 }, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"jz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/obj/item/caution/cone, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"jD" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"jI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"jJ" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"fr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/caution/cone, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"jQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/area/outreach/outpost/maint/passage/ground/north/hangar) +"fs" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 }, -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"jR" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"ft" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 }, -/obj/machinery/light/spot/wired{ +/obj/machinery/fabricator, +/obj/machinery/light{ icon_state = "tube_map"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"jX" = ( -/obj/structure/ladder, -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - icon_state = "up-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - icon_state = "up-supply"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fu" = ( +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; dir = 1 }, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/ground) -"jY" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office3) -"ka" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"kh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"ki" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"kq" = ( +/area/outreach/outpost/cargo/distribution) +"fv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"fw" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/floor_decal/industrial/loading, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"fx" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) -"kr" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fy" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 1 }, +/obj/machinery/vending/snack, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"fz" = ( /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"kt" = ( -/obj/structure/stairs/long/east, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/workshop) +"fA" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/blast/shutters/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/workshop) +"fB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fC" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 1 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"kx" = ( +/obj/machinery/vending/cola, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"fD" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/ground/office6) +"fE" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/staffroom) +"fF" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, /turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"fG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"fH" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/entrance) +"fI" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fJ" = ( +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/ground/north/hangar) -"ky" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/south/ground/business_wing) -"kB" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; +"fK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/item/drain, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/structure/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/inflatable_dispenser, +/obj/item/inflatable_dispenser, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fM" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; +/obj/structure/hygiene/sink{ + icon_state = "sink"; dir = 1 }, -/obj/machinery/atmospherics/valve/shutoff, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"kH" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"kI" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/closet/medical_wall/filled, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"fN" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"kJ" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"kM" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"fO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"fP" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"kO" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" +/obj/machinery/suit_cycler/engineering/prepared/atmospheric, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/ce_storage) +"fQ" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/ground/business_wing) -"kW" = ( -/obj/structure/sign/number/five, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"kY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm, +/obj/structure/cable/yellow, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"kZ" = ( +/area/outreach/outpost/maint/passage/ground/east/airlock) +"fR" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; dir = 4 @@ -2652,1288 +3006,9230 @@ icon_state = "map-scrubbers"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"lb" = ( -/turf/simulated/floor/airless, -/area/exoplanet/outreach) -"le" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/toy/shipmodel, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"fS" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"lj" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 1 - }, -/obj/machinery/docking_beacon/mapped{ - icon_state = "injector0"; - dir = 1 - }, -/obj/structure/cable/cyan{ - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/effect/catwalk_plated/dark, -/obj/abstract/landmark/skip_test, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"lq" = ( -/obj/machinery/door/airlock/external/glass{ - density = 1; - dir = 8; - icon_state = "closed"; - id_tag = "OH_l3_e_alck_inner" +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "11" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/ground) -"ls" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"fT" = ( /obj/machinery/light_switch{ icon_state = "light0"; - dir = 4 + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"lv" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office5) -"lw" = ( +"fU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/table/woodentable/ebony, +/obj/item/clipboard, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"fV" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"lA" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, -/turf/simulated/floor/tiled/steel_ridged/outreach, -/area/exoplanet/outreach) -"lD" = ( -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"lE" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"fW" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/cable/yellow, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"lH" = ( -/obj/structure/cable/yellow{ - icon_state = "16-0" - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/structure/sign/deck/third{ - pixel_y = 32 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"fX" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/structure/disposaloutlet{ + icon_state = "outlet"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/power/ground) -"lI" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) -"lJ" = ( -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "ob_gf_shed_s_shutters"; - name = "shutters control" +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"fY" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/sign/eshowers, +/obj/structure/hygiene/drain, +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/hygiene/shower/emergency, +/obj/machinery/camera/network/security, +/obj/structure/disposalpipe/segment/bent, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"fZ" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 4 }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ga" = ( +/turf/open, +/area/outreach/outpost/stairwell/ground/atmos) +"gb" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"lK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"lL" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/area/outreach/outpost/hallway/south/ground) +"gc" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"lU" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"mb" = ( -/turf/exterior/water/outreach, -/area/exoplanet/outreach) -"mh" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/door/airlock/glass/engineering/outreach/atmos{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/ground/atmos) +"gd" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/sign/eshowers, +/obj/structure/hygiene/drain, +/obj/effect/floor_decal/industrial/hatch/blue, +/obj/structure/hygiene/shower/emergency, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"ge" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/wallframe_spawn/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gf" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"mq" = ( /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"gg" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/ground/office8) +"gh" = ( +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"mt" = ( -/obj/machinery/atmospherics/pipe/zpipe/down{ - icon_state = "down"; - dir = 4 +/area/outreach/outpost/vacant/ground/office8) +"gi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/railing/mapped, -/obj/structure/sign/warning/fall{ - pixel_y = 24 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/turf/simulated/open, -/area/outreach/outpost/maint/waste/ground) -"mv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gj" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"mx" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/stairwell/ground/atmos) +"gk" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gm" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/stairwell/ground/command) +"gn" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"mz" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"mC" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 +/area/outreach/outpost/vacant/ground/office7) +"go" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"mI" = ( +/area/outreach/outpost/vacant/ground/office7) +"gp" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gq" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"mJ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"gr" = ( +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"gs" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office7) +"gt" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/noticeboard{ + icon_state = "nboard"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gu" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"mL" = ( +/area/outreach/outpost/vacant/ground/office7) +"gv" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gw" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"gx" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"gy" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"mO" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/area/outreach/outpost/hallway/south/ground/business_wing) +"gz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/caution/cone, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gA" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 1 }, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"mP" = ( -/obj/machinery/atmospherics/unary/tank/air/airlock, -/obj/effect/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"mQ" = ( +/area/outreach/outpost/hallway/south/ground/business_wing) +"gB" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"gC" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"mW" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"mY" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 8 +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"gD" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"mZ" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"nc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"nf" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 8 +/area/outreach/outpost/hallway/south/ground/business_wing) +"gE" = ( +/obj/machinery/conveyor/outreach/cargo/mail, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"gF" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"gG" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/high, +/obj/effect/floor_decal/spline/plain/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"gH" = ( /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"nn" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"gI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"no" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"nq" = ( -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/ground/business_wing) -"nr" = ( +"gK" = ( +/obj/machinery/door/firedoor/autoset, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 4 +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/tape_barricade/door/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office3) +"gL" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/tape_barricade/door/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office5) +"gM" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"nx" = ( +/area/outreach/outpost/eva/gf/south) +"gN" = ( +/obj/structure/sign/warning/engineering_access{ + icon_state = "securearea"; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged/outreach, -/area/exoplanet/outreach) -"ny" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"nA" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 1 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"nB" = ( -/obj/effect/floor_decal/industrial/warning, +/area/outreach/outpost/hallway/south/ground) +"gO" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"gP" = ( +/obj/effect/floor_decal/spline/plain/yellow, /turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"nC" = ( -/obj/machinery/power/terminal, +/area/outreach/outpost/engineering/gf/workshop) +"gQ" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "4-8" }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gR" = ( +/obj/effect/floor_decal/spline/fancy/wood, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/power/ground) -"nD" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"nH" = ( +/obj/structure/flora/pottedplant/fern, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"gS" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"nO" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gT" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gV" = ( +/obj/structure/hygiene/drain, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"gW" = ( /obj/machinery/light{ icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"gX" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"nQ" = ( -/turf/simulated/wall, -/area/outreach/outpost/hangar/north) -"nU" = ( -/obj/structure/cable/cyan{ - icon_state = "1-8" +/area/outreach/outpost/vacant/ground/office6) +"gY" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"gZ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"ha" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/engineering, +/turf/simulated/floor/plating, +/area/outreach/outpost/engineering/gf/chief) +"hb" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/ground/office8) +"hc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"hd" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"he" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"hf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"hg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hh" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"hi" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"hj" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/stairwell/ground/se) +"hk" = ( +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"hl" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"hm" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"hn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/bordercorner, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ho" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"hp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"hq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/south/ground/business_wing) +"hr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"hs" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/north) +"ht" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/engineering, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/engineering/gf/hall) +"hu" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"hv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/item/drain, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"hw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/conveyor_switch/outreach/cargo/mail, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"hx" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"hy" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"hz" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"hA" = ( +/obj/machinery/atmospherics/omni/filter{ + name = "EVA refill gas filter south"; + tag_north = 1; + tag_east = 2; + tag_west = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"hC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/meter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hF" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/se) +"hG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + icon_state = "11"; + dir = 4 + }, +/obj/machinery/meter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped/stairwell, +/obj/structure/stairs/long/east, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/se) +"hI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + icon_state = "11"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hK" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"hL" = ( +/turf/simulated/wall, +/area/outreach/outpost/stairwell/ground/se) +"hM" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"hN" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/ground/se) +"hO" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/ground) +"hR" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"hT" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hU" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"hV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"hW" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/ground) +"hX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"hY" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"hZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"ia" = ( +/obj/machinery/light, +/obj/structure/stairs/long/west, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/se) +"ib" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/ground) +"ic" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/north) +"id" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/se) +"ie" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"if" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/north) +"ig" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ih" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ii" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/shutters/open{ + id_tag = "ob_gf_shed_s_shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/south) +"ij" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/ground/se) +"ik" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"il" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/engineering/outreach/head{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/chief) +"im" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/structure/noticeboard, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"in" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"io" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/engineering, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/atmos) +"ip" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"iq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"ir" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"is" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/engineering/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/staffroom) +"it" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"iu" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"iv" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"iw" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/engineering/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/hall) +"ix" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"iy" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"iz" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/ce_storage) +"iA" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"iB" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/outreach/outpost/engineering/gf/hall) +"iC" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"iD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"iE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"iF" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/item/cell/high/empty, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"iG" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/open, +/area/outreach/outpost/stairwell/ground) +"iH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"iI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"iJ" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/engineering, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/atmos) +"iK" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"iL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/engineering/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/staffroom) +"iM" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"iN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"iO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"iP" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"iQ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"iR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"iS" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"iT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"iU" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"iV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"iW" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/cyan, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"iX" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"iY" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"iZ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/fabricator/imprinter, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"ja" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jb" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jd" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "OH_l3_e_alck_pump" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/airlock/ground) +"je" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jf" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"jg" = ( +/obj/structure/closet/secure_closet/atmos_personal, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"jh" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/suit_cycler/engineering/prepared, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"ji" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/suit_cycler/engineering/prepared, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"jk" = ( +/obj/structure/door/osmium, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/south) +"jl" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"jm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"jn" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/ce_storage) +"jo" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/button/blast_door/engineering{ + icon_state = "blastctrl"; + dir = 1 + }, +/obj/item/cell/high/empty, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"jp" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/camera/network/security, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jq" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/high, +/obj/effect/floor_decal/spline/plain/yellow, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"jr" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/structure/closet/secure_closet/personal/empty, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"js" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/structure/closet/secure_closet/personal/empty, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jt" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/light, +/obj/structure/closet/secure_closet/personal/empty, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"ju" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"jv" = ( +/turf/simulated/wall/ocp_wall/prepainted, +/area/outreach/outpost/storage_shed/gf/north) +"jw" = ( +/obj/structure/sign/department/cargo{ + icon_state = "cargo"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"jx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"jy" = ( +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"jz" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"jA" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/flora/pottedplant/largebush, +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 8; + pixel_y = 24 + }, +/obj/structure/sign/directions/supply{ + icon_state = "direction_supply"; + dir = 8; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"jB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/department/mail_delivery{ + icon_state = "mail"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"jC" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/light, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"jE" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"jF" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jG" = ( +/obj/item/cash/c1{ + pixel_x = 6; + pixel_y = -16 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jH" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/noticeboard, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"jI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"jJ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"jK" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jL" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jM" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jN" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jO" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/northwest) +"jP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/northwest) +"jQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"jR" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/light/spot/wired{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"jS" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/engineering/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/ground) +"jT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"jU" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"jV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"jW" = ( +/obj/machinery/light/small, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"jX" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + icon_state = "up-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + icon_state = "up-supply"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/atmos/ground) +"jY" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/ground/office3) +"jZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ka" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/south) +"kb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/west/junct) +"kc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kd" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ke" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kf" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"ki" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/radio/intercom, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"kj" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"kk" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"kl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"km" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kn" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"ko" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"kp" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"kq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kr" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ks" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"kt" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ku" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"kv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"kw" = ( +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 8 + }, +/obj/machinery/conveyor_switch/outreach/cargo/distribution, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"kx" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"ky" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office8) +"kz" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office2) +"kA" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office4) +"kB" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"kC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"kD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"kE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"kF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kG" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/ground/se) +"kH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharge_station, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"kI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"kJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"kK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kL" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kM" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"kN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"kO" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kP" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"kQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kR" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"kS" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/destTagger/outreach, +/obj/item/destTagger/outreach, +/obj/item/destTagger/outreach, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/stamp/denied, +/obj/item/stamp/cargo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"kT" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/hall) +"kU" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/computer/modular/preset/supply_public{ + icon_state = "console-off"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"kV" = ( +/obj/structure/disposalpipe/sortjunction/cargo, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"kW" = ( +/obj/structure/sign/number/three, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"kX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"kY" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"kZ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"la" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lb" = ( +/turf/simulated/floor/airless, +/area/exoplanet/outreach) +"lc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ld" = ( +/obj/machinery/conveyor/outreach/cargo/mail, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"le" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lf" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/drain, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lh" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"li" = ( +/obj/structure/disposalpipe/sortjunction/untagged, +/obj/structure/cable/yellow, +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lj" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/obj/machinery/docking_beacon/mapped{ + icon_state = "injector0"; + dir = 1 + }, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/obj/effect/catwalk_plated/dark, +/obj/abstract/landmark/skip_test, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"lk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"ll" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"lm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"ln" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"lo" = ( +/obj/machinery/computer/modular/preset/supply_public{ + icon_state = "console-off"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lp" = ( +/obj/effect/floor_decal/corner/grey/border, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"lq" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + density = 1; + dir = 8; + id_tag = "OH_l3_e_alck_inner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/ground) +"lr" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"ls" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground) +"lt" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"lu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lw" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"lx" = ( +/obj/effect/floor_decal/corner/grey/border, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ly" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 10 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"lz" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"lA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_ridged/outreach, +/area/exoplanet/outreach) +"lB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"lD" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"lF" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lG" = ( +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"lH" = ( +/obj/machinery/conveyor/outreach/cargo/desk{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window{ + icon_state = "left"; + dir = 8 + }, +/obj/machinery/telepad_cargo/desk_delivery, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"lI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lJ" = ( +/obj/machinery/button/blast_door{ + name = "shutters control"; + dir = 1; + id_tag = "ob_gf_shed_s_shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"lK" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"lL" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"lM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lN" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lO" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lP" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/hall) +"lQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lS" = ( +/obj/machinery/alarm, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"lT" = ( +/obj/machinery/network/pager/cargo{ + icon_state = "doorbell"; + dir = 1 + }, +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"lU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"lV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lW" = ( +/obj/structure/disposalpipe/sortjunction/cargo_hall{ + icon_state = "pipe-j1s"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lX" = ( +/obj/structure/disposaloutlet{ + name = "disposal outlet (delivery desk)"; + icon_state = "outlet"; + dir = 2 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lY" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"lZ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"ma" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"mb" = ( +/turf/exterior/chlorine_sand/muriatic_acid_swamp, +/area/exoplanet/outreach) +"mc" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"md" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"me" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/blast/shutters/open/cargo, +/obj/machinery/door/window/reinforced/right/outreach/cargo{ + icon_state = "rightsecure"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/office) +"mf" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/hall) +"mg" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"mh" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/button/blast_door/wired{ + name = "shutters control"; + icon_state = "blastctrl"; + dir = 1; + id_tag = "ob_gf_shed_n_shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"mi" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"mj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"mk" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/blast/shutters/open/cargo, +/obj/machinery/door/window/reinforced/outreach/cargo{ + icon_state = "leftsecure"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/office) +"ml" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"mm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"mo" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"mp" = ( +/obj/machinery/conveyor/outreach/cargo/desk{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/structure/flaps, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"mq" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/hall) +"mr" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/hand_cart{ + icon_state = "cart"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"ms" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"mt" = ( +/obj/structure/lattice, +/obj/structure/sign/deck/third{ + icon_state = "deck-3"; + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + icon_state = "down-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + icon_state = "down-scrubbers"; + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/disposalpipe/up{ + icon_state = "pipe-u"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/atmos/ground) +"mu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"mv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"mw" = ( +/obj/machinery/navbeacon/outreach/delivery/supply/one, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"mx" = ( +/obj/structure/disposalpipe/junction/mirrored, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"my" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"mz" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"mA" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/office) +"mB" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mC" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/ground/west) +"mD" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"mE" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity/outreach/cargo_warehouse{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"mF" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair_preview"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/office) +"mH" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/distribution) +"mI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"mJ" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"mK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/distribution) +"mL" = ( +/obj/machinery/disposal/deliveryChute{ + name = "delivery chute (delivery desk only)"; + icon_state = "intake"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"mM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"mN" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/distribution) +"mO" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"mP" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"mQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/sign/eshowers, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"mR" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/distribution) +"mS" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/distribution) +"mT" = ( +/obj/machinery/computer/modular/preset/supply_public{ + icon_state = "console-off"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/machinery/button/blast_door/cargo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mU" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mV" = ( +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"mW" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"mX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"mY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/tile/floor, +/turf/exterior/concrete, +/area/exoplanet/outreach) +"mZ" = ( +/turf/simulated/wall, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"na" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nb" = ( +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"nc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"nd" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"ne" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/conveyor_switch/outreach/cargo/desk, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"nf" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"ng" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/desk_teleporter) +"nh" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"ni" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"nj" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/paper_bin, +/obj/item/pen/blue{ + pixel_x = 2 + }, +/obj/item/pen/red{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/pen, +/obj/item/stamp/denied, +/obj/item/stamp/cargo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nk" = ( +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nl" = ( +/obj/structure/disposalpipe/sortjunction/untagged, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nm" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"nn" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"no" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"np" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/office) +"nq" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/caution/cone, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"nr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ns" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/desk_teleporter) +"nt" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"nu" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nv" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/woodentable/ebony, +/obj/item/paper_bin, +/obj/item/pen/red, +/obj/item/pen, +/obj/item/stamp/ce, +/obj/item/stamp/denied, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"nw" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"nx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged/outreach, +/area/exoplanet/outreach) +"ny" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"nz" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"nA" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"nB" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"nC" = ( +/obj/machinery/power/terminal, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/power/ground) +"nD" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"nE" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"nF" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"nG" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nI" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/engineering/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/entrance) +"nJ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"nK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nL" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nM" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/item/hand_labeler, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nN" = ( +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/prepainted/engineering, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/engineering/gf/entrance) +"nO" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"nP" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/machinery/recharge_station, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"nQ" = ( +/obj/machinery/power/apc/high, +/obj/structure/cable/yellow, +/obj/effect/floor_decal/spline/plain/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nR" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/hand_cart{ + icon_state = "cart"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nS" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/engineering/outreach/storage, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/workshop) +"nT" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"nU" = ( +/obj/structure/cable/cyan{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"nV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nW" = ( +/obj/machinery/conveyor_switch/outreach/cargo/desk, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/department/mail_delivery{ + icon_state = "mail"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"nY" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"nZ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"ob" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oc" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"od" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"oe" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/denied, +/obj/item/stamp/cargo, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"of" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"og" = ( +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"oh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"oi" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/central/ground) +"oj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"ok" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/disposal) +"ol" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"om" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/disposal) +"on" = ( +/obj/structure/disposalpipe/tagger/cargo_hall{ + icon_state = "pipe-tagger"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oo" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/docking_beacon/mapped, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/structure/cable/cyan, +/obj/effect/catwalk_plated/dark, +/obj/abstract/landmark/skip_test, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"op" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"or" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"os" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"ot" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"ou" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"ov" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/brown, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"ow" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/disposal) +"ox" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"oy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"oz" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"oB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"oC" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"oD" = ( +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 1 + }, +/obj/structure/disposaloutlet{ + name = "disposal outlet (waste)" + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"oE" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"oF" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/disposal) +"oG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 10 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"oH" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"oJ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"oK" = ( +/obj/machinery/light, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oM" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/clipboard, +/obj/item/storage/box/pens, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"oN" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/super, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"oO" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/hallway/west/ground) +"oP" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"oQ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/closet/radiation, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/atmos) +"oR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/workshop) +"oS" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 6 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/engineering/gf/chief) +"oT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/door/airlock/glass/cargo/outreach{ + icon_state = "closed" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/workshop) +"oU" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"oV" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/workshop) +"oW" = ( +/obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; + dir = 8; + id_tag = "OH_l3_e_alck_outer" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/airlock/ground) +"oX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"oY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/item/radio/intercom, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"oZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"pa" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"pb" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) +"pc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/cargo/outreach/head, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/qm) +"pd" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"pe" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/light_switch, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"pf" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/cargo/warehouse) +"pg" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/blood/tracks/wheels{ + icon_state = "wheels"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"ph" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/north/ground) +"pi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/disposal, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; + dir = 4 + }, +/obj/structure/flaps, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"pj" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"pk" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"pl" = ( +/obj/item/trash/raisins, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"pm" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/papershredder, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/office) +"pn" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/qm) +"po" = ( +/obj/abstract/level_data_spawner/exoplanet/outreach, +/turf/unsimulated/rock, +/area/exoplanet/outreach) +"pp" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/south/offices) +"pq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"pr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"ps" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/ground) +"pt" = ( +/turf/simulated/wall, +/area/outreach/outpost/stairwell/ground) +"pu" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"pv" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/atmos/ground) +"pw" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"px" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/ground) +"py" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"pz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"pA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"pB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"pC" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pD" = ( +/obj/structure/sign/deck/third{ + pixel_y = 32 + }, +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"pE" = ( +/obj/structure/cable/cyan{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"pF" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/ground) +"pG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/sign/directions/medical{ + pixel_y = 24 + }, +/obj/structure/sign/directions/security{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pI" = ( +/obj/structure/sign/deck/third{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/light_switch/on, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pK" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"pL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"pM" = ( +/obj/structure/sign/department/eva{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"pN" = ( +/obj/structure/girder/displaced, +/turf/exterior/concrete, +/area/exoplanet/outreach) +"pO" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pP" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/ground) +"pQ" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"pR" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"pS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"pT" = ( +/obj/effect/floor_decal/corner/grey/border, +/obj/effect/decal/cleanable/dirt, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"pU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"pV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/sign/directions/engineering{ + icon_state = "direction_eng"; + dir = 8; + pixel_y = -24 + }, +/obj/structure/sign/directions/supply{ + icon_state = "direction_supply"; + dir = 8; + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"pY" = ( +/obj/structure/cable/yellow, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/qm) +"pZ" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qa" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qb" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qc" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"qd" = ( +/obj/item/stack/tile/floor, +/turf/exterior/concrete, +/area/exoplanet/outreach) +"qe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"qf" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qg" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"qh" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qi" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"qj" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"qk" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/south) +"ql" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"qm" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"qn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/airless, +/area/exoplanet/outreach) +"qo" = ( +/obj/structure/disposalpipe/sortjunction/engineering{ + icon_state = "pipe-j1s"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"qp" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"qq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"qr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"qs" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"qt" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/shutters/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/engineering/gf/workshop) +"qu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"qw" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"qx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/exterior/clay, +/area/exoplanet/outreach) +"qy" = ( +/obj/machinery/power/terminal, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/power/ground) +"qz" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"qA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/exoplanet/outreach) +"qB" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/ground) +"qC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/sign/warning/secure_area, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"qD" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"qE" = ( +/obj/structure/disposalpipe/junction/yjunction{ + icon_state = "pipe-y"; + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"qF" = ( +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"qG" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/outline/orange, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"qH" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"qI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"qJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qL" = ( +/obj/structure/sign/number/seven{ + icon_state = "number_7"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"qN" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qO" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/ground/office3) +"qP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/item/caution/cone, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/item/caution/cone, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qS" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qT" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/sign/number/eight{ + icon_state = "number_8"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/exterior/barren/outreach, +/area/exoplanet/outreach) +"qX" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"qY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"qZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ra" = ( +/obj/structure/sign/number/five, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rb" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rc" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"re" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rf" = ( +/obj/structure/sign/number/four{ + icon_state = "number_4"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"ri" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"rj" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/closet/crate/secure/large/reinforced, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"rk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rm" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/caution/cone, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"ro" = ( +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"rp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"rq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"rr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"rs" = ( +/obj/machinery/light_switch, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"rt" = ( +/obj/machinery/light_switch, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"ru" = ( +/obj/machinery/light_switch, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"rv" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"rw" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"rx" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/ground/office6) +"ry" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"rz" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/ground) +"rA" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/ground) +"rB" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"rC" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rD" = ( +/obj/effect/floor_decal/industrial/shutoff{ + icon_state = "shutoff"; + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff{ + icon_state = "map_vclamp0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rF" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/sign/eshowers{ + icon_state = "eshowers"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rI" = ( +/obj/structure/sign/department/eva{ + icon_state = "eva"; + dir = 1; + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/ground) +"rJ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/structure/disposaloutlet, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rK" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"rM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"rO" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hangar/north) +"rP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"rQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"rR" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"rS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"rT" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"rU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"rV" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/atmos/ground) +"rW" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rX" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rY" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"rZ" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"sa" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/vacant/ground/office2) +"sb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction/hangar{ + icon_state = "pipe-j1s"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"sc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"sd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"se" = ( +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"sf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"sg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"sh" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/ground) +"si" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/concrete, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"sj" = ( +/obj/effect/floor_decal/corner/grey/border, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"sk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"sl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/northwest) +"sm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/northwest) +"sn" = ( +/obj/structure/closet/l3closet/general/multi, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"so" = ( +/obj/structure/closet/toolcloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"sp" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"sq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/eva) +"sr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"ss" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"st" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"su" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 8 + }, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"sv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"sw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"sx" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"sy" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/structure/closet/crate/large, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"sz" = ( +/obj/structure/cable/yellow, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/outreach/outpost/cargo/qm) +"sA" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/shutters/open{ + id_tag = "ob_gf_shed_s_shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/south) +"sB" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"sC" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"sD" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"sE" = ( +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"sF" = ( +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/obj/machinery/photocopier, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"sG" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"sH" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/closet/toolcloset, +/obj/structure/sign/warning/nosmoking_1, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"sI" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/sign/warning/nosmoking_1, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"sJ" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"sK" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/engineering/gf/workshop) +"sL" = ( +/obj/item/remains/human, +/turf/exterior/chlorine_sand/outreach, +/area/exoplanet/outreach) +"sM" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"sN" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/structure/largecrate/animal/corgi, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"sO" = ( +/obj/effect/floor_decal/industrial/outline/orange, +/obj/structure/largecrate, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"sP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"sQ" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch/on, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"sR" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"sS" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"sT" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/steel, +/obj/item/trash/waffles, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"sU" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"sV" = ( +/obj/structure/reagent_dispensers/watertank/firefighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"sW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/disposal) +"sX" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"sY" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"sZ" = ( +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"ta" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tb" = ( +/obj/machinery/network/relay/wall_mounted/outreach, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"tc" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/outreach/outpost/maint/passage/ground/east/eva) +"td" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/disposal, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"te" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tf" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"th" = ( +/obj/machinery/conveyor_switch/outreach/disposal, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"ti" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tj" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tk" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tl" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/fabricator/filled, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tm" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 8 + }, +/obj/structure/filing_cabinet, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tn" = ( +/obj/structure/rack, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"to" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 6 + }, +/obj/machinery/computer/modular/preset/cardslot{ + icon_state = "console-off"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tp" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/pen/fancy/quill, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tq" = ( +/obj/structure/stairs/long, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"tr" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/clipboard, +/obj/item/book/union_charter, +/obj/item/paper_bin, +/obj/item/stamp/qm, +/obj/item/stamp/denied, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"tt" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/faxmachine/mapped/outreach/cargo, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tu" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/disposal{ + icon_state = "conveyor0"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"tv" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/recycler{ + icon_state = "grinder-o0"; + dir = 4 + }, +/obj/machinery/conveyor/outreach/disposal{ + icon_state = "conveyor0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"tw" = ( +/obj/item/stack/tile/floor, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"tx" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/disposal{ + icon_state = "conveyor0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"ty" = ( +/obj/machinery/conveyor/outreach/disposal{ + icon_state = "conveyor0"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"tz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/exterior/concrete, +/area/exoplanet/outreach) +"tA" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/material_processing/stacker{ + icon_state = "stacker"; + dir = 1; + output_turf = 1 + }, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"tB" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 10 + }, +/obj/structure/closet/secure_closet/quartermaster, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tC" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"tD" = ( +/obj/structure/bed/chair/office/comfy/beige{ + icon_state = "comfyofficechair_preview"; + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"tE" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/ground/office7) +"tF" = ( +/turf/simulated/wall, +/area/outreach/outpost/maint/atmos/ground) +"tG" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"tH" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"tI" = ( +/obj/machinery/fabricator/textile, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/workshop) +"tJ" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/workshop) +"tK" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west2) +"tL" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"tM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"tN" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"tO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/blood/oil, +/obj/effect/floor_decal/spline/plain/brown{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/item/trash/jupiter, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"tP" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass/civilian/outreach/eva{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/gf/north) +"tQ" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian/outreach/eva{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/eva/gf/south) +"tR" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/decal/cleanable/dirt, +/turf/exterior/concrete/reinforced, +/area/exoplanet/outreach) +"tS" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 6 + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/machinery/button/access/wired/exterior{ + dir = 4; + pixel_x = 0; + id_tag = "OH_l3_e_alck" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tT" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ + icon_state = "map_vent"; + dir = 8; + id_tag = "OH_l3_e_alck_pump_out_external" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tU" = ( +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tV" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + icon_state = "map"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/airlock_sensor/wired{ + dir = 4; + pixel_x = 0; + id_tag = "OH_l3_e_alck_exterior_sensor" + }, +/obj/structure/cable/cyan{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tY" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"tZ" = ( +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 5 + }, +/obj/machinery/light/small/wired, +/obj/machinery/button/access/wired/exterior{ + dir = 4; + pixel_x = 0; + id_tag = "OH_l3_e_alck" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ua" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"ub" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"uc" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ud" = ( +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/light/spot/wired{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ue" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uf" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ug" = ( +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow, +/obj/machinery/light/spot/wired{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uh" = ( +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"ui" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"uj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"uk" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/button/blast_door{ + name = "shutters control"; + id_tag = "ob_gf_shed_n_shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"ul" = ( +/obj/structure/tank_rack/oxygen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/north) +"um" = ( +/obj/effect/shuttle_landmark/automatic{ + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"un" = ( +/obj/effect/shuttle_landmark/automatic{ + dir = 2 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"uo" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/north) +"up" = ( +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uq" = ( +/obj/machinery/button/blast_door/wired{ + name = "shutters control"; + icon_state = "blastctrl"; + dir = 1; + id_tag = "ob_gf_shed_n_shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ur" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"us" = ( +/obj/machinery/light/small/wired, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ut" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/button/blast_door/wired{ + name = "shutters control"; + icon_state = "blastctrl"; + dir = 2; + id_tag = "ob_gf_shed_s_shutters" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uu" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uv" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uw" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"ux" = ( +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uy" = ( +/obj/machinery/button/blast_door/wired{ + name = "shutters control"; + icon_state = "blastctrl"; + dir = 2; + id_tag = "ob_gf_shed_s_shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uz" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uA" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uB" = ( +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/outreach, +/area/exoplanet/outreach) +"uC" = ( +/obj/structure/stairs/long, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uD" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uE" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uG" = ( +/obj/structure/cable/yellow, +/obj/machinery/light/small/wired, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"uH" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"uJ" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uK" = ( +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uL" = ( +/obj/structure/stairs/long, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uM" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"uN" = ( +/obj/effect/floor_decal/corner/grey/bordercorner, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uO" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uP" = ( +/obj/structure/stairs/long/east, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uQ" = ( +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"uR" = ( +/obj/structure/stairs/long/west, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uS" = ( +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uT" = ( +/obj/structure/stairs/long/east, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uU" = ( +/obj/machinery/shieldgen, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"uV" = ( +/obj/structure/stairs/long/west, +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uW" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"uX" = ( +/obj/structure/stairs/long/east, +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"uY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"uZ" = ( +/obj/structure/stairs/long/north, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"va" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/long/north, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"vb" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/long/east, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"vd" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"ve" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vf" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vg" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vh" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vi" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vj" = ( +/obj/effect/floor_decal/corner/grey/bordercorner, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vk" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vl" = ( +/obj/effect/floor_decal/corner/grey/diagonal{ + icon_state = "corner_white_diagonal"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vm" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vn" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vo" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vp" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vq" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + icon_state = "warningcorner_dust"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vr" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west2) +"vs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs/long/east, +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"vt" = ( +/obj/structure/stairs/long/north, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/concrete/slab, +/area/exoplanet/outreach) +"vu" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vv" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 6 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vw" = ( +/obj/effect/floor_decal/corner/grey/bordercorner{ + icon_state = "bordercolorcorner"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vy" = ( +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vz" = ( +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vA" = ( +/obj/structure/handrail, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vB" = ( +/turf/simulated/wall/ocp_wall/prepainted, +/area/outreach/outpost/harvesting/tower1) +"vC" = ( +/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/obj/structure/door/osmium, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"vD" = ( +/turf/simulated/wall/ocp_wall/prepainted, +/area/outreach/outpost/harvesting/tower2) +"vE" = ( +/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/obj/structure/door/osmium, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"vF" = ( +/turf/simulated/wall/ocp_wall/prepainted, +/area/outreach/outpost/harvesting/tower3) +"vG" = ( +/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/obj/structure/door/osmium, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"vH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 6 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"vI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, +/obj/machinery/meter, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"vJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"vK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/machinery/button/toggle/alternate/harvesters/nb1{ + icon_state = "doorctrl"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"vL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 6 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"vM" = ( +/obj/machinery/light_switch, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/north) +"vN" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, +/obj/machinery/meter, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"vO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/machinery/button/toggle/alternate/harvesters/nb2{ + icon_state = "doorctrl"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"vP" = ( +/turf/simulated/wall, +/area/outreach/outpost/maint/passage/ground/south/offices) +"vQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"vR" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, +/obj/machinery/meter, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"vS" = ( +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 1 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vT" = ( +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 8 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vU" = ( +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 4 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"vV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/machinery/button/toggle/alternate/harvesters/nb3{ + icon_state = "doorctrl"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"vW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"vX" = ( +/obj/structure/ladder, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + icon_state = "up"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/cable/yellow{ + icon_state = "16-0" + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/harvesting/tower1) +"vY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"vZ" = ( +/obj/structure/ladder, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + icon_state = "up"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/cable/yellow{ + icon_state = "16-0" + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/harvesting/tower2) +"wa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"wb" = ( +/obj/structure/ladder, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + icon_state = "up"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/cable/yellow{ + icon_state = "16-0" + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/harvesting/tower3) +"wc" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"wd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"we" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"nV" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"nZ" = ( +/obj/machinery/portable_atmospherics/canister/empty, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-8" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower1) +"wf" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"og" = ( -/obj/effect/catwalk_plated/dark, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"oi" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/central/ground) -"oo" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/machinery/docking_beacon/mapped, -/obj/structure/cable/cyan{ - icon_state = "1-2" +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"wg" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 4 }, -/obj/structure/cable/cyan, -/obj/effect/catwalk_plated/dark, -/obj/abstract/landmark/skip_test, -/turf/simulated/floor/plating/outreach, +/turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"oq" = ( +"wh" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"or" = ( +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"wi" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/empty, /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "1-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower2) +"wj" = ( +/obj/effect/floor_decal/industrial/hatch/orange, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"ot" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/sign/directions/medical{ - pixel_y = 24 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/outreach/outpost/airlock/ground) +"wk" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 }, -/obj/structure/sign/directions/security{ - pixel_y = 32 +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"oA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"oB" = ( -/obj/item/radio/intercom, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"wl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"oE" = ( /obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"wm" = ( +/obj/machinery/atmospherics/portables_connector{ + icon_state = "map_connector"; + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/outreach/outpost/harvesting/tower3) +"wn" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"oG" = ( +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"wo" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 6 + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"oO" = ( +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/exterior/chlorine_sand/outreach, -/area/exoplanet/outreach) -"oT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"oU" = ( +/area/outreach/outpost/hallway/south/ground/business_wing) +"wp" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"wq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"oW" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 8; +/obj/machinery/door/airlock/glass/command/outreach{ icon_state = "closed"; - id_tag = "OH_l3_e_alck_outer" + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/autoset, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/airlock/ground) -"oX" = ( +/area/outreach/outpost/stairwell/ground/command) +"wr" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 9 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 10 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"oY" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"pb" = ( -/obj/machinery/light{ - icon_state = "tube_map"; dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) -"ph" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/north/ground) -"pj" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/ground/east/eva) -"pn" = ( -/obj/machinery/door/firedoor/autoset, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ws" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office4) -"po" = ( -/obj/abstract/level_data_spawner/exoplanet/outreach, -/turf/unsimulated/rock, -/area/exoplanet/outreach) -"pp" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"pt" = ( -/turf/simulated/wall, -/area/outreach/outpost/stairwell/ground) -"pu" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"pw" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"wt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/stairwell/ground/command) +"wu" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"py" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"pA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"wv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"pD" = ( -/obj/structure/sign/deck/third{ - pixel_y = 32 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"ww" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/shutters/open{ + id_tag = "ob_gf_shed_n_shutters" }, -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/north) +"wx" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"wy" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/obj/machinery/light_switch, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"pE" = ( -/obj/structure/cable/cyan{ - icon_state = "2-4" +/area/outreach/outpost/stairwell/ground/command) +"wz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"pI" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/passage/ground/northwest) -"pK" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - icon_state = "corner_white_diagonal"; +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/structure/sign/deck/third{ + icon_state = "deck-3"; dir = 4 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"pL" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"wA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"wB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"pM" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 1 + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"pN" = ( -/obj/structure/girder/displaced, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"pT" = ( -/obj/effect/floor_decal/corner/grey/border, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"pU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 +/area/outreach/outpost/stairwell/ground/command) +"wC" = ( +/obj/structure/stairs/long/north, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"qd" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"wD" = ( +/obj/machinery/light{ + icon_state = "tube_map"; dir = 4 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"qj" = ( -/obj/machinery/atmospherics/unary/tank/air/airlock, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"qk" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"ql" = ( -/obj/effect/decal/cleanable/dirt, +/area/outreach/outpost/vacant/ground/office8) +"wE" = ( +/turf/open, +/area/outreach/outpost/stairwell/ground/command) +"wF" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"qn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach) -"qq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/area/outreach/outpost/stairwell/ground/command) +"wG" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/structure/sign/department/bridge{ + icon_state = "bridge"; dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"qu" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; +/area/outreach/outpost/hallway/south/ground/business_wing) +"wH" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/ground) +"wI" = ( /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "2-8" }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"wJ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"wK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"wL" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; dir = 1 }, -/obj/machinery/atmospherics/valve/shutoff, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"qw" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/hidden/black, +/area/outreach/outpost/stairwell/ground/command) +"wM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"wN" = ( +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"wO" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"qx" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground) +"wP" = ( /obj/effect/decal/cleanable/dirt, -/turf/exterior/mud/dark, -/area/exoplanet/outreach) -"qy" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/sign/deck/third{ + icon_state = "deck-3"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/power/ground) -"qz" = ( -/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"wQ" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"qA" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/ground/south/offices) -"qB" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/ground) -"qG" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"qH" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"qM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"qO" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office3) -"qP" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/ground) +"wR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/west2) +"wS" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west2) +"wT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/ground/west) +"wU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 6 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"wV" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/ground/west2) +"wW" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/power/ground) -"qT" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"qW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/exterior/barren/outreach, -/area/exoplanet/outreach) -"ra" = ( -/obj/machinery/shieldgen, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) -"rc" = ( -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"rf" = ( -/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"wX" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/hatch/maintenance/outreach, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office3) -"rh" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"rl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, +/area/outreach/outpost/engineering/gf/staffroom) +"wY" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/south/offices) +"wZ" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"rs" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/vacant/ground/depot) -"rx" = ( -/obj/item/radio/intercom, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"rz" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"xa" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 }, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hangar/north) -"rB" = ( -/obj/effect/floor_decal/industrial/warning, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "0-4" }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"rC" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"rL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"rO" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west2) +"xb" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/passage/ground/west2) +"xc" = ( +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-4" }, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"rR" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"rU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/area/outreach/outpost/hallway/west/ground) +"xd" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"rV" = ( +/area/outreach/outpost/hallway/west/ground) +"xe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/west) +"xf" = ( +/obj/effect/floor_decal/corner/grey/diagonal, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"xg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"sa" = ( -/obj/item/stool, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"sb" = ( +/area/outreach/outpost/maint/passage/ground/west2) +"xh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west2) +"xi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"sd" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 9 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"sg" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"sj" = ( -/obj/effect/floor_decal/corner/grey/border, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"so" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"sx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"sA" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_gf_shed_s_shutters" +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xk" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 }, /obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/south) -"sB" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 + icon_state = "0-4" }, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xl" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/outreach/outpost/airlock/ground) +"xm" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"sC" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"sD" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"sG" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"sH" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"sJ" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/ground) -"sL" = ( -/obj/item/remains/human, -/turf/exterior/chlorine_sand/outreach, -/area/exoplanet/outreach) -"sM" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"sR" = ( -/obj/structure/sign/number/three, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"sS" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"sV" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xn" = ( /obj/machinery/alarm{ icon_state = "alarm0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"sW" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"ta" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xo" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xp" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"tc" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/outreach/outpost/maint/passage/ground/east/eva) -"tg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"tq" = ( -/obj/structure/stairs/long/west, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xq" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"tw" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 1 +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west) +"xr" = ( /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"ty" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 8 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"xs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"xt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"tz" = ( +/area/outreach/outpost/hallway/west/ground) +"xu" = ( /obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"tD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"tE" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office7) -"tF" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/atmos/ground) -"tG" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"tH" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/ground) +"xv" = ( +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/south/offices) -"tK" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; - dir = 1 +"xw" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xx" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/department/id_office, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"tL" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"tN" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"tR" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"tV" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office9) -"ua" = ( +/area/outreach/outpost/stairwell/ground/command) +"xy" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 4 + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"ub" = ( -/obj/machinery/light{ - icon_state = "tube_map"; +/turf/simulated/floor/tiled/steel_ridged/outreach, +/area/exoplanet/outreach) +"xz" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office5) -"ue" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"xA" = ( +/obj/structure/sign/number/two{ + icon_state = "number_2"; dir = 1 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"uk" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" +/area/outreach/outpost/hallway/south/ground/business_wing) +"xB" = ( +/obj/structure/sign/number/six{ + icon_state = "number_6"; + dir = 1 }, -/obj/machinery/button/blast_door{ - id_tag = "ob_gf_shed_n_shutters"; - name = "shutters control" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"ul" = ( -/obj/structure/tank_rack/oxygen, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"xC" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/north) -"uo" = ( +/area/outreach/outpost/stairwell/ground/command) +"xD" = ( +/obj/structure/closet/l3closet/general/multi, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"xE" = ( +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 5 + }, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"xF" = ( +/obj/structure/handrail, +/obj/effect/floor_decal/corner/grey/border, +/turf/simulated/floor/reinforced/concrete, +/area/exoplanet/outreach) +"xG" = ( +/obj/structure/closet/firecloset/chief, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"xH" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"xJ" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"xK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/north) -"uq" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" + dir = 10 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"uy" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"uC" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"uG" = ( -/obj/structure/cable/yellow, -/obj/machinery/light/small/wired, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"uI" = ( -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"uK" = ( +/area/outreach/outpost/maint/passage/ground/west2) +"xL" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"xM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"xN" = ( +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/ground/business_wing) -"uM" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"uN" = ( +"xO" = ( +/obj/structure/closet/firecloset, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -3941,467 +12237,468 @@ icon_state = "apc0"; dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/ground/northwest) -"uQ" = ( -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"uT" = ( -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; +"xP" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 1 }, -/obj/machinery/atmospherics/valve/shutoff, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"uY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"vb" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"vc" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/structure/flora/pottedplant/largebush, -/obj/structure/sign/directions/engineering{ - dir = 8; - icon_state = "direction_eng"; - pixel_y = 24 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west2) +"xS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"vd" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"vf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/area/outreach/outpost/maint/passage/ground/west) +"xT" = ( +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; dir = 1 }, -/obj/structure/sign/eshowers{ - icon_state = "eshowers"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"xU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"vi" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"xV" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"vk" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground) +"xW" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) -"vl" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"vq" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"vr" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"vs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"vy" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"vF" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 10 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"vI" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/south/offices) +"xX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"vJ" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-8" + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"xY" = ( +/obj/machinery/firealarm{ + icon_state = "casing"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 9 + dir = 5 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"vM" = ( -/obj/machinery/light_switch, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/north) -"vP" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/passage/ground/south/offices) -"vR" = ( +/area/outreach/outpost/hallway/north/ground) +"xZ" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/south/offices) -"wg" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 4 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"wj" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 - }, +"ya" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yb" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/outreach/outpost/airlock/ground) -"wn" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/cyan{ - icon_state = "1-2" +/obj/machinery/network/relay/wall_mounted/outreach, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"wp" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"ww" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/blast/shutters/open{ - id_tag = "ob_gf_shed_n_shutters" +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/north) -"wx" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"yd" = ( /obj/machinery/light_switch{ icon_state = "light0"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"wy" = ( -/obj/machinery/light/small/wired, -/obj/structure/cable/yellow, -/obj/machinery/light/spot/wired{ - icon_state = "tube_map"; dir = 8 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"ye" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"wB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"yf" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, +/obj/structure/disposalpipe/segment/bent, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) -"wD" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/area/outreach/outpost/maint/passage/ground/south/offices) +"yg" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"wE" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"yh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yi" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/cyan{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/cyan{ + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"wF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"yj" = ( +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-4" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"wG" = ( -/obj/effect/floor_decal/corner/grey/bordercorner, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"wK" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yk" = ( +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yl" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"ym" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"wM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm, +/area/outreach/outpost/maint/passage/ground/west) +"yn" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/barricade/wood, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"wO" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"yo" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"wQ" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yp" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"wT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"wU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yq" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yr" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"wX" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/south/offices) +"ys" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; dir = 1 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"wZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/ground) +"yt" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"yu" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 4 + dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"xc" = ( -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"xd" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yv" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 1 }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 +/obj/effect/floor_decal/industrial/outline/orange, +/obj/structure/hand_cart{ + icon_state = "cart"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"yw" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"xk" = ( -/obj/machinery/alarm, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"xl" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/airlock/ground) -"xm" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yx" = ( +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"xr" = ( -/obj/machinery/light_switch, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"xs" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"yy" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) -"xu" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"yz" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"xy" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"yA" = ( +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yB" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged/outreach, -/area/exoplanet/outreach) -"xB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"xJ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"yC" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ icon_state = "bulb_map"; - dir = 8 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"xK" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light_switch, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yD" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"xS" = ( -/obj/structure/barricade/wood, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/south/offices) -"xU" = ( +"yE" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/light_switch, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"xY" = ( -/obj/machinery/firealarm{ - icon_state = "casing"; +/area/outreach/outpost/maint/passage/ground/west2) +"yF" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"yG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"ya" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/area/outreach/outpost/hallway/south/ground/business_wing) +"yH" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 8 +/obj/machinery/alarm, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"yI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"yJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"yc" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -4411,259 +12708,459 @@ icon_state = "11-supply"; dir = 4 }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/south) +"yK" = ( +/obj/structure/barricade/wood, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"yL" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/barricade/wood, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) -"yd" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 +/area/outreach/outpost/maint/passage/ground/north/hangar) +"yM" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yN" = ( +/obj/structure/barricade/wood, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"yO" = ( +/obj/structure/barricade/wood, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"yg" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/area/outreach/outpost/vacant/ground/office2) +"yP" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/cyan{ + icon_state = "1-4" }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach) +"yQ" = ( +/obj/structure/tank_rack/oxygen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/eva/gf/south) +"yR" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/power/ground) +"yS" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/atmos/ground) +"yT" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; dir = 4 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"yU" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office9) -"yi" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/cyan{ - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - icon_state = "1-8" +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/ground/business_wing) +"yV" = ( /obj/structure/cable/cyan{ icon_state = "2-8" }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"yk" = ( +"yW" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"yX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/north/hangar) +"yY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/exterior/concrete, +/area/exoplanet/outreach) +"yZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/ground/south/offices) +"za" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/west) +"zb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom, /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"yn" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/waste/ground) -"ys" = ( +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/ground/se) +"zc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"zd" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 +/obj/machinery/button/blast_door{ + name = "shutters control"; + dir = 1; + id_tag = "ob_gf_shed_s_shutters" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"yv" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/airless, +/area/outreach/outpost/storage_shed/gf/south) +"ze" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/structure/hand_cart{ - icon_state = "cart"; +/obj/item/radio/intercom, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"zf" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"yJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 5 +"zg" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/item/radio/intercom, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"zh" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"zi" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zj" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ - icon_state = "1-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/power/apc/high{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/light{ + icon_state = "tube_map"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zk" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/item/radio/intercom, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"yK" = ( +/area/outreach/outpost/hallway/west/ground) +"zl" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"zm" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; dir = 1 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"zn" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"yN" = ( -/obj/structure/sign/number/four{ - icon_state = "number_4"; +/area/outreach/outpost/hallway/west/ground) +"zo" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/alarm, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"zp" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"yQ" = ( -/obj/structure/tank_rack/oxygen, +/area/outreach/outpost/hallway/west/ground) +"zq" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/eva/gf/south) -"yR" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /obj/machinery/light{ icon_state = "tube_map"; dir = 1 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/ground) -"yS" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/machinery/button/blast_door/wired{ - dir = 2; - icon_state = "blastctrl"; - id_tag = "ob_gf_shed_s_shutters"; - name = "shutters control" +"zr" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"yU" = ( -/obj/structure/sign/number/two{ - icon_state = "number_2"; +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"zs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; dir = 1 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/item/radio/intercom, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"yV" = ( -/obj/structure/cable/cyan{ - icon_state = "2-8" +/area/outreach/outpost/engineering/gf/hall) +"zt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 1 }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"yX" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"zu" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 1 }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"zv" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"zw" = ( +/obj/machinery/recharge_station, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"zx" = ( +/obj/machinery/light, +/obj/effect/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"yY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"zd" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "2-4" }, -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "ob_gf_shed_s_shutters"; - name = "shutters control" +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/outreach/outpost/storage_shed/gf/south) -"zf" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"zg" = ( +"zB" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"zh" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"zp" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zC" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"zw" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/power/apc/hyper, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"zx" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"zy" = ( -/obj/machinery/power/apc, -/obj/structure/cable/yellow{ - icon_state = "0-8" +"zE" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"zF" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) +"zH" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zI" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) "zJ" = ( /obj/machinery/door/airlock/external/glass{ + icon_state = "closed"; density = 1; dir = 8; - icon_state = "closed"; id_tag = "OH_l3_e_alck_inner" }, /obj/structure/cable/yellow{ @@ -4672,101 +13169,255 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/airlock/ground) -"zR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/sign/eshowers, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"zT" = ( -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; +"zK" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zL" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 8 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"zU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; dir = 1 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zN" = ( +/obj/structure/hand_cart{ + icon_state = "cart"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/cargo/warehouse) +"zO" = ( +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"zP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"zQ" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/machinery/conveyor/outreach/disposal, +/obj/item/trash/pluto, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/disposal) +"zR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"zS" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/south/ground/business_wing) +"zT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/navbeacon/outreach/delivery/supply/two, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"zU" = ( +/obj/machinery/navbeacon/outreach/delivery/supply/three, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"zV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/navbeacon/outreach/delivery/supply/four, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/west/junct) +"zW" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) "zX" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Ad" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"Af" = ( -/turf/simulated/wall, -/area/outreach/outpost/hallway/west/ground) -"Ai" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +"zY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"zZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"Aa" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"Ab" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"Ac" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office5) +"Ad" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"Ae" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office3) +"Af" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"Aj" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"Ag" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"Ah" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"Ai" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/west/junct) -"Al" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office2) +"Aj" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"Ak" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"An" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"Al" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"Am" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"An" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office4) +"Ao" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office6) +"Ap" = ( +/obj/machinery/door/airlock/command/outreach, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/ground/command) "Aq" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) "Ar" = ( /obj/machinery/door/airlock/hatch/maintenance{ icon_state = "closed"; @@ -4775,9 +13426,29 @@ /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/stairwell/ground) +"As" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office7) "At" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"Au" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) "Av" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -4786,83 +13457,251 @@ /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/north) "Aw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office8) +"Ax" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"Ay" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"Az" = ( +/obj/item/drain, +/obj/item/trash/cigbutt, +/obj/item/trash/popcorn, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"AA" = ( +/obj/item/trash/pistachios, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) +/area/outreach/outpost/vacant/ground/office3) +"AB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/cargo/disposal) +"AC" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/semki, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/ground/office4) +"AD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/sosjerky, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) "AE" = ( -/obj/structure/stairs/long, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 4 +/obj/effect/floor_decal/spline/plain/yellow, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) "AF" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/steel, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/outreach/outpost/engineering/gf/staffroom) +"AG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/yellow{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/entrance) +"AH" = ( +/obj/effect/floor_decal/spline/plain/yellow, +/obj/structure/closet/secure_closet/personal/empty, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/engineering/gf/hall) +"AI" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"AG" = ( +/area/outreach/outpost/engineering/gf/entrance) +"AJ" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"AK" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/ground) +"AL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"AM" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; - dir = 4 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; - dir = 4 + dir = 5 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"AI" = ( +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"AL" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"AQ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/se) +"AR" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"AP" = ( -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AS" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) "AT" = ( -/obj/structure/barricade/wood, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"AU" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/floor_decal/spline/plain/blue, +/obj/machinery/camera/network/security{ + icon_state = "camera"; dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AU" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/ground/command) +"AV" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) "AW" = ( /obj/effect/shuttle_landmark/automatic{ dir = 2 @@ -4872,135 +13711,248 @@ "AX" = ( /turf/simulated/wall/concrete, /area/exoplanet/outreach) -"Bc" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" +"AY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hangar/north) -"Bd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/plain/brown, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/desk_teleporter) +"AZ" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"Ba" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"Bb" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; dir = 4 }, +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) +/area/outreach/outpost/hallway/north/ground) +"Bc" = ( +/obj/structure/closet/crate/trashcart, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"Bd" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + icon_state = "spline_fancy"; + dir = 5 + }, +/obj/structure/closet/secure_closet/personal/empty, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/cargo/qm) +"Be" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/cargo/desk_teleporter) "Bf" = ( +/obj/effect/floor_decal/spline/plain/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"Bg" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/ground/business_wing) +"Bh" = ( +/obj/structure/rack, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/material/cardstock/mapped/cardboard/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/obj/item/stack/package_wrap/fifty, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/cargo/distribution) +"Bi" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/trash/cigbutt, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/northwest) +"Bj" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) +"Bk" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) +"Bl" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"Bm" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"Bn" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) +/area/outreach/outpost/maint/passage/ground/east/eva) "Bo" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) +"Bp" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock, +/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/north/hangar) +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/east/airlock) "Br" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/hangar/north/shuttle_area) +"Bs" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/ground/south/offices) +"Bt" = ( +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/open, +/area/outreach/outpost/maint/passage/ground/south/offices) +"Bu" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) "Bv" = ( /obj/item/radio/intercom, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) "Bw" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"BA" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"BE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"BI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 1 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) -"BQ" = ( +/area/outreach/outpost/maint/passage/ground/south/offices) +"Bx" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/disposalpipe/segment/bent{ icon_state = "pipe-c"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"By" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"BT" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) +"Bz" = ( +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/waste/ground) +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/ground/south/offices) "BY" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/meter, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"Cb" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/ground/west/junct) -"Cc" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Cf" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Ch" = ( /obj/structure/railing/mapped/stairwell{ icon_state = "railing_preview"; @@ -5008,78 +13960,12 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/ground) -"Cp" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"Cq" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; - dir = 8 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"CA" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"CD" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "CE" = ( /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"CF" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) "CH" = ( /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office2) -"CI" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office7) "CL" = ( /obj/effect/floor_decal/industrial/warning/fulltile, /obj/machinery/door/blast/shutters/open{ @@ -5101,51 +13987,9 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"CR" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/depot) -"CS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach) "CT" = ( /turf/simulated/wall, /area/outreach/outpost/vacant/ground/office4) -"CU" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"CV" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office3) -"Dd" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/light/spot/wired{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Dg" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) "Dh" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; @@ -5153,54 +13997,9 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"Dn" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"Dw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"DB" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"DC" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"DE" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) "DF" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) -"DG" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) "DJ" = ( /obj/structure/cable/yellow, /obj/machinery/power/apc{ @@ -5209,31 +14008,6 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office7) -"DN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"DO" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) "DP" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -5253,34 +14027,9 @@ /obj/structure/hygiene/drain, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) -"DV" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"DY" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) "Eg" = ( /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) -"El" = ( -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"En" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Ep" = ( /obj/effect/catwalk_plated/dark, /obj/structure/cable/cyan{ @@ -5289,154 +14038,30 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"Eq" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Ex" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) "Ey" = ( /obj/structure/closet/toolcloset, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"EB" = ( -/obj/structure/sign/warning/moving_parts{ - dir = 1; - icon_state = "movingparts"; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"EE" = ( -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/light/spot/wired{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"EF" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) "EG" = ( /obj/effect/floor_decal/industrial/warning/fulltile, /obj/machinery/door/blast/shutters/open{ - id_tag = "ob_gf_shed_s_shutters" - }, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/south) -"EI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"EK" = ( -/obj/structure/sign/number/nine{ - icon_state = "number_9"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"EQ" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 6 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"ER" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"EU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) -"Fa" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"Fb" = ( -/obj/machinery/alarm, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"Fc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"Fd" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"Ff" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 + id_tag = "ob_gf_shed_s_shutters" }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/south) +"Fa" = ( /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) +/area/outreach/outpost/maint/passage/ground/east/eva) +"Fc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/hangar/north) "Fh" = ( /obj/machinery/light/small, /obj/machinery/power/smes/buildable/max_cap_in_out, @@ -5448,58 +14073,6 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/ground) -"Fm" = ( -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"Fn" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"Fp" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"Fs" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"Ft" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) "Fx" = ( /obj/structure/cable/cyan{ icon_state = "1-8" @@ -5510,47 +14083,6 @@ /obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"Fz" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"FD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/storage/ground) -"FG" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/south/offices) -"FL" = ( -/obj/machinery/button/blast_door/wired{ - dir = 1; - icon_state = "blastctrl"; - id_tag = "ob_gf_shed_n_shutters"; - name = "shutters control" - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"FN" = ( -/obj/structure/sign/number/one, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) "Gb" = ( /obj/effect/floor_decal/corner/grey/border{ icon_state = "bordercolor"; @@ -5559,29 +14091,6 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"Gc" = ( -/obj/machinery/light/small, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Ge" = ( -/obj/structure/cable/yellow, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) "Gj" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/eva/gf/south) @@ -5603,77 +14112,6 @@ /obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/stairwell/ground) -"Gq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"Gt" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"Gv" = ( -/obj/structure/lattice, -/obj/structure/sign/deck/third{ - dir = 1; - icon_state = "deck-3"; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - icon_state = "down-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - icon_state = "down-scrubbers"; - dir = 1 - }, -/obj/machinery/light/small, -/obj/structure/disposalpipe/up{ - icon_state = "pipe-u"; - dir = 1 - }, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/ground) -"Gx" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"Gz" = ( -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"GF" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"GG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) "GH" = ( /obj/effect/catwalk_plated/dark, /obj/structure/cable/cyan{ @@ -5682,21 +14120,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"GJ" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"GK" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) "GO" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -5713,12 +14136,6 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"GT" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) "GU" = ( /obj/effect/floor_decal/industrial/warning/corner{ icon_state = "stripecorner"; @@ -5729,14 +14146,6 @@ "GX" = ( /turf/simulated/wall/ocp_wall/prepainted, /area/exoplanet/outreach) -"GZ" = ( -/obj/structure/stairs/long/north, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 4 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Hn" = ( /obj/effect/floor_decal/corner/grey/border{ icon_state = "bordercolor"; @@ -5744,28 +14153,6 @@ }, /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"Hq" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/outer_wall/ground) -"Ht" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"Hv" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Hy" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -5773,107 +14160,13 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"HD" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"HE" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 - }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"HH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) -"HK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) -"HM" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) "HQ" = ( /turf/simulated/wall/ocp_wall/prepainted, /area/outreach/outpost/storage_shed/gf/south) -"HT" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) "HW" = ( /obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/north) -"Ib" = ( -/obj/structure/stairs/long/west, -/obj/structure/railing/mapped/stairwell, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Ie" = ( -/obj/structure/sign/number/seven{ - icon_state = "number_7"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) "Ih" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ dir = 1; @@ -5885,28 +14178,10 @@ }, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) -"Ii" = ( -/obj/structure/cable/yellow, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Ij" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) -"Im" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Iu" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Iw" = ( /obj/machinery/light{ icon_state = "tube_map"; @@ -5914,14 +14189,6 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office2) -"IA" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "IC" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, @@ -5937,19 +14204,8 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"IN" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) "IP" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/outreach/ground_floor) "IR" = ( /obj/machinery/atmospherics/pipe/zpipe/up{ @@ -5960,111 +14216,15 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/ground) -"IS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"IU" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Ja" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"Jd" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office6) -"Jk" = ( -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"Jm" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/obj/structure/disposalpipe/cap, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) -"Jo" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"Jp" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) "Jr" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach) -"Jv" = ( -/obj/machinery/door/airlock/glass/maintenance{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/eva/gf/north) "Jz" = ( /turf/exterior/barren/outreach, /area/exoplanet/outreach) -"JA" = ( -/obj/machinery/firealarm, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"JB" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) "JD" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -6094,34 +14254,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/ground) -"JK" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"JM" = ( -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 5 - }, -/obj/machinery/light/small/wired, -/obj/machinery/button/access/wired/exterior{ - dir = 4; - id_tag = "OH_l3_e_alck"; - pixel_x = 0 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"JQ" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "JV" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/cable/yellow{ @@ -6130,22 +14262,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"JY" = ( -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Kc" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Kd" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -6162,35 +14278,12 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/ground) -"Ki" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"Kk" = ( -/obj/machinery/shieldgen, -/obj/structure/cable/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "Kn" = ( /obj/effect/floor_decal/industrial/outline/orange, /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Ko" = ( -/obj/structure/stairs/long/west, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Kq" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) "Ks" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, @@ -6198,13 +14291,6 @@ "Ku" = ( /turf/simulated/wall, /area/outreach/outpost/eva/gf/north) -"KB" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) "KD" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; @@ -6213,74 +14299,20 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) "KE" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office8) -"KF" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"KG" = ( -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"KN" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"KO" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) +/area/outreach/outpost/vacant/ground/office8) +"KF" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/ground) "KR" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"KU" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/west/junct) -"KV" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) "KW" = ( /obj/structure/cable/yellow{ icon_state = "16-0" @@ -6299,51 +14331,25 @@ icon_state = "4-8" }, /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ - cycle_to_external_air = 1; - dir = 2; icon_state = "airlock_control_off"; + dir = 2; id_tag = "OH_l3_e_alck"; - tag_air_alarm = "OH_l3_e_alck_alarm"; + tag_exterior_door = "OH_l3_e_alck_outer"; + tag_interior_door = "OH_l3_e_alck_inner"; tag_airpump = "OH_l3_e_alck_pump"; tag_chamber_sensor = "OH_l3_e_alck_sensor"; - tag_exterior_door = "OH_l3_e_alck_outer"; tag_exterior_sensor = "OH_l3_e_alck_exterior_sensor"; - tag_interior_door = "OH_l3_e_alck_inner"; tag_interior_sensor = "OH_l3_e_alck_interior_sensor"; + cycle_to_external_air = 1; + tag_air_alarm = "OH_l3_e_alck_alarm"; tag_secure = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) -"Ld" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "Le" = ( /turf/simulated/wall, /area/outreach/outpost/vacant/ground/office2) -"Lf" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Li" = ( /obj/machinery/suit_cycler/emergency/prepared{ locked = 0 @@ -6369,59 +14375,12 @@ /obj/structure/table/steel_reinforced, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Lo" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "Lp" = ( /obj/effect/shuttle_landmark/automatic{ dir = 1 }, /turf/simulated/floor/airless, /area/exoplanet/outreach) -"Lq" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 8 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Lt" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/north/ground) -"LB" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) "LC" = ( /obj/structure/cable/cyan{ icon_state = "4-8" @@ -6430,25 +14389,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"LD" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "LL" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; @@ -6456,113 +14396,9 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/ground) -"LO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) -"LP" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office2) -"LR" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"LV" = ( -/obj/effect/floor_decal/corner/grey/bordercorner, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"Mh" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) "Mj" = ( /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"Mk" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/ground) -"Mm" = ( -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"Mn" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 10 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"Mo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"Mq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"Mr" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Mu" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -6570,61 +14406,6 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/ground) -"My" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"MD" = ( -/obj/structure/barricade/wood, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"ME" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground) -"MF" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"MI" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"MK" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) "MP" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed" @@ -6641,59 +14422,12 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) -"MU" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"MY" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/office1) -"Nd" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/outer_wall/ground) "Ng" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/atmos/ground) -"Nl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"No" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground) "Nr" = ( /turf/exterior/chlorine_sand/outreach, /area/exoplanet/outreach) -"Nt" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "Nv" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ icon_state = "map_vent_out"; @@ -6724,29 +14458,6 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"NO" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"NR" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/item/caution/cone, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) "NW" = ( /obj/machinery/door/firedoor/autoset{ icon_state = "open"; @@ -6754,146 +14465,34 @@ }, /obj/effect/wallframe_spawn/concrete, /obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - icon_state = "map_on"; name = "gas pump (eva oxy)"; + icon_state = "map_on"; + dir = 8; target_pressure = 15000 }, /turf/simulated/floor/plating, /area/outreach/outpost/eva/gf/north) -"Oa" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"Ob" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Oe" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/machinery/light_switch/on, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"Ok" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/airlock_sensor/wired{ - dir = 4; - id_tag = "OH_l3_e_alck_exterior_sensor"; - pixel_x = 0 - }, -/obj/structure/cable/cyan{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "Ol" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/meter, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) -"On" = ( -/obj/structure/railing/mapped/stairwell, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Or" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office3) -"OC" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 4 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "OH" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) -"OK" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) "OT" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/vacant/ground/office2) -"OV" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Pb" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - icon_state = "warning_dust"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Ph" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "Pm" = ( /obj/machinery/button/blast_door{ - id_tag = "ob_gf_shed_n_shutters"; - name = "shutters control" + name = "shutters control"; + id_tag = "ob_gf_shed_n_shutters" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -6910,113 +14509,14 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/eva) -"Pv" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) "PA" = ( /obj/effect/floor_decal/industrial/warning/fulltile, /obj/machinery/door/blast/shutters/open{ - id_tag = "ob_gf_shed_s_shutters" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/outreach/outpost/storage_shed/gf/south) -"PB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) -"PE" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/ground/east/airlock) -"PM" = ( -/obj/structure/stairs/long, -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 8 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"PQ" = ( -/obj/machinery/door/airlock/glass/maintenance{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/eva/gf/south) -"PS" = ( -/turf/simulated/wall, -/area/outreach/outpost/maint/storage/ground) -"PU" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"Qf" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/ground) -"Qg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/ground) -"Qh" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/office2) + id_tag = "ob_gf_shed_s_shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/outreach/outpost/storage_shed/gf/south) "Qi" = ( /obj/structure/cable/cyan{ icon_state = "1-2" @@ -7024,38 +14524,6 @@ /obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"Qj" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"Qm" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "Qn" = ( /obj/machinery/alarm, /turf/simulated/floor/plating, @@ -7063,36 +14531,6 @@ "Qo" = ( /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach) -"Qr" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"Qw" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/ground) "QB" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -7102,59 +14540,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"QL" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/hyper, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"QM" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"QO" = ( -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 - }, -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/south/ground/business_wing) "QR" = ( /obj/machinery/light, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office7) -"QU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "QV" = ( /obj/effect/catwalk_plated/dark, /obj/effect/decal/cleanable/dirt, @@ -7167,17 +14556,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Ra" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) -"Rc" = ( -/obj/structure/stairs/long, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Rd" = ( /obj/machinery/alarm{ icon_state = "alarm0"; @@ -7186,24 +14564,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office2) -"Rg" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) "Rh" = ( /obj/effect/floor_decal/industrial/outline/orange, /obj/effect/decal/cleanable/dirt, @@ -7226,20 +14586,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"Ro" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"Rq" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office1) "Rr" = ( /obj/structure/cable/yellow{ icon_state = "16-0" @@ -7250,22 +14596,9 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/storage_shed/gf/south) -"Ru" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) "Rw" = ( -/turf/exterior/mud/dark, +/turf/exterior/clay, /area/exoplanet/outreach) -"RB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) "RD" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -7275,58 +14608,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/ground) -"RF" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"RH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"RI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"RL" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) "RM" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -7335,121 +14616,28 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"RN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"RP" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) "RS" = ( /turf/simulated/floor/plating, /area/outreach/outpost/hangar/north/shuttle_area) "RU" = ( /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/ground/east/airlock) -"RY" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Sa" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/northwest) "Sc" = ( /obj/machinery/door/airlock/hatch/bolted, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/ground/northwest) -"Sg" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) "Sh" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/vacant/ground/office4) "Sj" = ( /turf/simulated/wall, /area/outreach/outpost/maint/power/ground) -"Sk" = ( -/obj/machinery/docking_beacon/mapped{ - icon_state = "injector0"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "stripecee"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hangar/north) -"Sm" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/unary/vent_pump/cabled/airlock{ - dir = 8; - icon_state = "map_vent"; - id_tag = "OH_l3_e_alck_pump_out_external" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Sr" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/outer_wall/ground) "Ss" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach) -"Sx" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/exoplanet/outreach) "SG" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -7470,93 +14658,10 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/ground) -"SO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) "SQ" = ( /obj/structure/boulder, /turf/exterior/chlorine_sand/outreach, /area/exoplanet/outreach) -"SV" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"SY" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/machinery/button/blast_door/wired{ - dir = 1; - icon_state = "blastctrl"; - id_tag = "ob_gf_shed_n_shutters"; - name = "shutters control" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"SZ" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/ground) -"Tb" = ( -/obj/structure/cable/yellow, -/obj/item/radio/intercom{ - icon_state = "intercom"; - dir = 1 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"Te" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - icon_state = "warningcorner_dust"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Ti" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/ground) -"Tn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) "To" = ( /obj/structure/railing/mapped/stairwell{ icon_state = "railing_preview"; @@ -7565,29 +14670,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/ground) -"Tv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/vacant/ground/depot) -"Tz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"TC" = ( -/obj/structure/sign/deck/third{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) "TE" = ( /obj/effect/floor_decal/corner/grey/border{ icon_state = "bordercolor"; @@ -7596,18 +14678,6 @@ /obj/effect/decal/cleanable/dirt, /turf/exterior/concrete/reinforced, /area/exoplanet/outreach) -"TO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"TS" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "TU" = ( /obj/machinery/power/apc{ icon_state = "apc0"; @@ -7619,118 +14689,16 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office2) -"TZ" = ( -/obj/structure/sign/department/eva{ - dir = 1; - icon_state = "eva"; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) -"Ua" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "Ub" = ( /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Ug" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office4) -"Uh" = ( -/obj/structure/stairs/long/east, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"Uq" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/vacant/ground/office1) -"Ut" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"Uv" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"Uy" = ( -/turf/simulated/wall, -/area/outreach/outpost/vacant/ground/depot) -"UB" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/atmos/ground) -"UD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/obj/structure/sign/directions/engineering{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"UF" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) "UH" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach) -"UI" = ( -/obj/machinery/light/small/wired, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "UK" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ icon_state = "11"; @@ -7738,123 +14706,22 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/ground) -"UM" = ( -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) -"UO" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) "US" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"UV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/hangar/north) -"UW" = ( -/obj/effect/floor_decal/corner/grey/border, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) -"Va" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) -"Vc" = ( -/obj/machinery/light/small/wired{ +/obj/machinery/light/small{ icon_state = "bulb_map"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/ground) "Ve" = ( /obj/machinery/door/firedoor/autoset, /obj/effect/wallframe_spawn/concrete, /turf/simulated/floor/plating, /area/outreach/outpost/eva/gf/north) -"Vf" = ( -/obj/structure/barricade/wood, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"Vl" = ( -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"Vn" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"Vo" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small/wired, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "Vt" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office4) -"Vu" = ( -/obj/effect/floor_decal/corner/grey/bordercorner{ - icon_state = "bordercolorcorner"; - dir = 1 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) -"VG" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/east/eva) "VI" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -7872,59 +14739,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged/outreach, /area/exoplanet/outreach) -"VV" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/vacant/ground/depot) -"VY" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 8 - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) "VZ" = ( /obj/machinery/light, /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office8) -"Wg" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/ground) -"Wl" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/stairwell/ground) "Wo" = ( /obj/item/radio/intercom{ icon_state = "intercom"; @@ -7933,21 +14751,6 @@ /obj/structure/closet/secure_closet/engineering_welding, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Wp" = ( -/obj/machinery/button/blast_door/wired{ - dir = 2; - icon_state = "blastctrl"; - id_tag = "ob_gf_shed_s_shutters"; - name = "shutters control" - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "Ws" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ dir = 8; @@ -7964,45 +14767,10 @@ /obj/effect/floor_decal/industrial/hatch/blue, /turf/simulated/floor/reinforced, /area/outreach/outpost/airlock/ground) -"Wv" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/storage/ground) "Wx" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/ground) -"WH" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"WI" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"WK" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/shutoff{ - icon_state = "shutoff"; - dir = 8 - }, -/obj/machinery/atmospherics/valve/shutoff{ - icon_state = "map_vclamp0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/ground) "WN" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/cable/yellow{ @@ -8010,24 +14778,9 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"WO" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "WP" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/hallway/west/ground) -"WT" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 4 - }, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/ground/business_wing) "WU" = ( /obj/structure/cable/cyan{ icon_state = "2-8" @@ -8046,26 +14799,8 @@ /obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach) -"WZ" = ( -/obj/machinery/light/small/wired, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"Xj" = ( -/obj/machinery/door/airlock/external/bolted{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/ground/east/eva) "Xo" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/ground) "Xp" = ( /obj/machinery/light/small{ @@ -8075,13 +14810,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/south) -"Xq" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) "XM" = ( /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office3) @@ -8101,134 +14829,17 @@ "XS" = ( /turf/simulated/floor/plating, /area/outreach/outpost/vacant/ground/office4) -"Yb" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/ground/northwest) "Ye" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/stairwell/ground) -"Yf" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/south/offices) -"Ym" = ( -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/exterior/concrete, -/area/exoplanet/outreach) "Yu" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/eva/gf/north) -"YH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"YI" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 6 - }, -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/machinery/button/access/wired/exterior{ - dir = 4; - id_tag = "OH_l3_e_alck"; - pixel_x = 0 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/exoplanet/outreach) -"YL" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/ground/business_wing) -"YO" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/north/ground) -"YP" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/ground) -"YQ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) -"YR" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/wallframe_spawn/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) -"YS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/maint/storage/ground) "YW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/stairwell/ground) -"YY" = ( -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 1 - }, -/turf/exterior/concrete/reinforced, -/area/exoplanet/outreach) "Za" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; @@ -8240,16 +14851,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Zb" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/ground) "Zd" = ( /obj/structure/cable/cyan{ icon_state = "4-8" @@ -8267,13 +14868,6 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/outreach/outpost/storage_shed/gf/north) -"Zk" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/storage/ground) -"Zm" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/exoplanet/outreach) "Zs" = ( /obj/effect/floor_decal/corner/grey/border{ icon_state = "bordercolor"; @@ -8288,28 +14882,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"Zx" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office9) -"Zy" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/ground/north/hangar) -"ZA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/ground) "ZM" = ( /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/airless, @@ -8318,35 +14890,6 @@ /obj/effect/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/hangar/north) -"ZQ" = ( -/obj/structure/cable/cyan{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating/outreach, -/area/exoplanet/outreach) -"ZU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/ground) -"ZV" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/ground) -"ZW" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/vacant/ground/office7) (1,1,1) = {" aq @@ -17930,15 +24473,15 @@ aa Nr aa Nr -aa -aa -aa Nr Nr Nr -aa -aa -aa +Nr +Nr +Nr +Nr +Nr +Nr Nr Jz Jz @@ -18135,7 +24678,7 @@ aa aa Nr Nr -Nr +Jz Nr Nr aa @@ -18151,8 +24694,8 @@ Jz Jz Nr Nr -Nr -Nr +Jz +Jz Nr Nr Nr @@ -18334,12 +24877,12 @@ Nr aa Nr Nr +Jz Nr Nr -Nr -Nr -Nr -Nr +Jz +Jz +Jz Nr Nr Nr @@ -18352,20 +24895,20 @@ sj Jz Jz Jz -Nr -Nr -Nr -Nr -Nr -Nr +Jz Jz Nr Nr Nr +Jz +Jz Nr Nr Nr +Jz Nr +Jz +Jz Nr Nr aa @@ -18531,15 +25074,15 @@ Nr Nr aa aa +Jz Nr Nr Nr +Jz Nr Nr -Nr -Nr -Nr -Nr +Jz +Jz Nr aa Nr @@ -18555,21 +25098,21 @@ Jz Jz Jz Nr -Nr -Nr -Nr Jz Nr +Jz +Jz +Jz Nr aa Nr +Jz Nr -Nr -Nr -Nr -Nr -Nr -Nr +Jz +Jz +Jz +Jz +Jz Nr Nr Nr @@ -18733,18 +25276,18 @@ Nr Nr aa Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -aa -Nr +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz Jz @@ -18757,22 +25300,22 @@ qW Jz Jz Jz -Nr Jz -Nr -Nr Jz Jz Jz Jz -Nr -Nr -Nr Jz -Nr -Nr -Nr -Nr +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Nr Nr Nr @@ -18932,44 +25475,46 @@ Nr Nr aa aa -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -qW -TE -Mj -sj -qW -qW -Jz -Jz -Jz -Jz -qW -qW -Jz Jz +Nr Jz Jz -Nr +vm +hm +dj +dj +dj +hm +dj +dj +dj +dj +dj +dj +hm +hm +dj +dj +uD +fk +lz +dj +hm +dj +hm +dj +hm +hm +dj +dj +dj +dj +dj +dj +dj +hm +ly Jz -oO Jz Nr Nr @@ -18978,8 +25523,6 @@ Nr Nr Nr Nr -Nr -Nr aa Nr Nr @@ -19130,52 +25673,52 @@ Nr Nr Nr Nr -Nr +Jz aa Nr +Jz Nr -Nr -aa aa -Nr Jz -IA -GS -Hn -Hn -GS -Hn -Hn -Hn -Hn -Hn -Hn -GS -GS -Hn -Hn -Vu -Mj -Lq -Hn -GS -Hn -GS -Hn -GS -GS -Hn -Hn -Hn -Hn -Hn -Hn -GS -vF -Nr -Nr -Nr -Nr +Jz +hl +fk +fk +fk +fk +fk +fk +lc +fk +lc +lc +fk +fk +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +lc +fk +fk +fk +lx +Jz +Jz +Jz Nr Nr Nr @@ -19333,51 +25876,51 @@ Nr Nr Nr Nr -aa -Nr -Nr -Nr -aa -aa -aa Jz -nA -Mj -Mj -Mj -Mj -Mj -NM -Mj -NM -NM -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -pT Jz -Nr -Nr -Nr +Jz +Jz +Jz +Jz +Jz +hl +lc +vj +sD +sD +sD +sD +sD +sD +uE +sD +sD +sD +sD +sD +sD +sD +uE +uE +sD +sD +sD +sD +sD +sD +sD +uE +sD +sD +sD +sD +sD +fZ +fk +lp +Jz +Jz +Jz Jz Nr Nr @@ -19532,53 +26075,53 @@ aa Nr Nr Nr -Nr -Nr -Nr -aa -Nr -Nr -Nr +Jz Nr Jz Jz Jz -nA -NM -jl -wg -wg -wg -wg -wg -Gb -wg -wg -wg -wg -wg -wg -wg -Gb -Gb -wg -wg -wg -wg -wg -wg -wg -Gb -wg -wg -wg -wg -OC -Mj -sj Jz -Nr -Nr +Jz +Jz +Jz +Jz +hl +lc +lp +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +hl +lc +lp +Jz +Jz Nr Jz Nr @@ -19734,53 +26277,53 @@ Nr Nr Nr Nr -Nr -Nr -Nr -Nr -aa -aa -Nr -Nr -aa Jz Jz -nA -NM -sj -lb -Zm -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -qn -nA -NM -sj Jz -Nr -Nr +Jz +uK +uK +uK +uK +uK +uK +hl +lc +lp +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uK +uK +uK +uK +sd +uK +uK +uK +uK +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +hl +lc +lp +Jz +Jz Nr Nr Nr @@ -19937,53 +26480,53 @@ Nr Nr Nr Nr -Nr -Nr -Nr -aa -Nr -Nr -Nr Jz Jz Jz -nA -Mj -sj -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -Zm -qn -qn -lb -lb -lb -je -lb -Zm -lb -nA -Mj -sj +uK +fk +fk +fk +fk +uK +hl +fk +lp +uK +uK +bv +uK +uK +bv +uK +uK +bv +uK +uK +bI +bI +oO +oO +oO +bH +bH +uK +sd +qA +uK +uK +bv +uK +uK +bv +uK +uK +hl +fk +lp Jz Jz Nr -Nr Jz Nr aa @@ -20140,56 +26683,56 @@ Nr aa Nr Nr -Nr -Nr -Nr -aa -Nr -Nr Jz Jz +uK +fk +fk +fk +fk +uK +hl +fk +lp +bI +bI +bI +bI +bI +bI +bI +bI +bI +bI +bI +bI +xb +WP +WP +hQ +mC +bH +bH +bH +bH +bH +bH +bH +bH +bH +bH +bH +bH +hl +fk +lp Jz -nA -Mj -sj -lb -lb -Zm -lb -Zm -lb -lb -lb -lb -lb -lb -Zm -lb -lb -qn -lb -lb -lb -lb -qn -qn -lb -lb -qn -qn -Zm -lb -nA -Mj -sj Jz Jz Jz Jz Jz Jz -Nr -Nr Jz Jz Jz @@ -20338,52 +26881,53 @@ Nr Nr aa Nr -Nr -Nr Jz +Nr Jz Jz -Nr -Nr -aa -aa -Nr -Nr Jz Jz -nA -Mj -sj -lb -lb -lb -qn -lb -lb -lb -qn -lb -lb -lb -lb -qn -lb -lb -lb -lb -Zm -lb -lb -qn -qn -Zm -lb -qn -qn -Zm -nA -Mj -pT +uK +fk +fk +fk +fk +uK +hl +fk +lp +bI +bY +cU +bY +bY +bY +jU +bY +bY +kR +wW +xa +xb +uU +wQ +uU +mC +xk +xm +xn +xo +xo +xp +xo +xo +xo +xq +xo +bH +hl +fk +lx Jz Jz Jz @@ -20394,7 +26938,6 @@ Jz Jz Jz Jz -Nr Jz Jz Nr @@ -20545,64 +27088,64 @@ Jz Jz Jz Jz -Nr -Nr -aa -aa -Nr +Jz +uK +fk +fk +fk +fk +uK +hl +lc +lp +bI +tK +xg +xh +xh +xh +xh +xh +xh +xh +xK +xR +wR +wI +xc +xt +xe +xS +za +xU +xU +xU +xU +xU +xU +xU +yh +yj +bH +hl +lc +lp Jz Jz Jz -nA -NM -sj -Zm -lb -Zm -qn -qn -lb -lb -lb -lb -lb -lb -Zm -qn -qn -qn -lb -lb -lb -Zm -lb -lb -qn -lb -lb -Zm -qn -lb -nA -NM -sj Jz Jz Jz Jz -Nr -Nr Jz Jz Jz Jz -Nr Jz Nr +Jz Nr -Nr -Nr -Nr +Jz Nr Jz Jz @@ -20748,64 +27291,64 @@ Jz Jz Jz Jz -Jz -Nr -Jz -Nr +uK +fk +fk +fk +fk +uK +hl +fk +lp +bI +vr +at +at +at +at +eS +eS +eS +eS +eS +eS +eS +wH +xd +xu +dw +dw +dw +dw +dw +dw +dw +dw +dw +dw +dw +yk +bH +hl +fk +lz +dj +dj +dj +dj +dj +dj +dj +dj +dj +ly Jz Jz Jz -nA -Mj -sj -lb -lb -lb -lb -qn -qn -lb -lb -lb -Zm -lb -lb -Zm -lb -qn -qn -Zm -lb -lb -lb -lb -lb -lb -lb -lb -Zm -lb -TE -Mj -sj -qW -Jz -Jz Nr -Jz -Jz -Jz -Jz -Jz Nr Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr +Jz Jz Jz Jz @@ -20950,48 +27493,60 @@ Jz Jz Jz Jz +uK +fk +fk +fk +fk +uK +hl +fk +lp +bI +vr +at +ey +fP +jn +eS +ga +ga +iQ +iC +nP +eS +qf +qg +qh +dw +dB +mc +dB +nm +nw +zH +sO +mc +sO +dw +yl +bH +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp Jz Jz Jz -Jz -Jz -Jz -qW -nA -Mj -sj -lb -je -lb -lb -Zm -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -Zm -lb -lb -nA -Mj -sj -Jz -Nr Nr Nr Nr @@ -21008,18 +27563,6 @@ Nr Nr Nr Nr -Jz -Nr -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr Nr Nr @@ -21152,67 +27695,67 @@ Jz Jz Jz Jz +uK +fk +fk +fk +fk +uK +uJ +lc +lp +bI +vr +at +bG +cx +iz +eS +gd +iv +nJ +fW +oQ +eS +bu +ck +bu +dw +dB +dB +dB +ri +dP +zH +dB +dB +dB +dw +yl +bH +hl +hn +sD +sD +sD +sD +sD +sD +sD +sD +fZ +fk +lp Jz Jz -Jz -Jz -Jz -Jz -qW -TE -NM -sj -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -nA -Mj -pT -Jz -aa Nr Nr Nr Nr Jz -Nr Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr +Jz +Jz Nr Nr Nr @@ -21354,50 +27897,66 @@ aa Jz Jz Jz +uK +fk +fk +fk +fk +uK +hl +lc +lp +bI +wS +at +at +cy +at +eS +eS +gj +io +gc +iJ +eS +bu +cu +bu +dw +dN +dN +mM +ye +dP +zI +dN +dN +mM +dw +yk +bH +hl +lp +uh +uh +uh +uh +uh +uh +uh +uh +hl +fk +lp Jz Jz Jz +Nr Jz +Nr Jz Jz Jz -nA -NM -sj -lb -lb -lb -Zm -lb -lb -lb -qn -qn -lb -lb -lb -je -qn -lb -lb -lb -Zm -qn -qn -lb -lb -lb -lb -qn -lb -Zm -nA -Mj -sj -Jz -Nr -Nr -Nr Nr Nr Nr @@ -21411,22 +27970,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Jz Nr Nr @@ -21551,77 +28094,77 @@ Nr aa Nr Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr +Jz Nr Jz Jz Jz +uK +fk +fk +fk +fk +uK +hl +lc +lx +bI +vr +bm +cI +eO +fs +gf +gw +ha +cf +iS +jh +iB +bu +cu +pG +dw +lS +lC +ln +of +oh +oj +oj +oy +pf +dw +yl +bH +uO +uS +uh +uh +uh +uh +uh +uh +uh +uh +hl +fk +lp +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz -nA -NM -pT -qn -lb -Zm -lb -lb -lb -lb -lb -qn -lb -Zm -lb -lb -qn -qn -qn -Zm -lb -lb -qn -qn -qn -lb -lb -lb -lb -Zm -nA -Mj -pT Jz Jz -Nr -Nr -Nr Jz Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Jz -Nr -Nr -Nr Nr Nr Nr @@ -21748,83 +28291,83 @@ aa Nr Nr Nr -Nr +Jz Nr Nr aa Nr -Nr +Jz Nr aa -Nr -Nr -Nr -Nr -Nr +Jz +Jz +uK +fk +fk +fk +fk +uK +hl +fk +lp +bI +vr +bm +dn +eQ +fG +gr +gR +ha +ik +ja +ji +iB +zl +ck +bu +dw +ll +ll +ll +zi +ml +zK +zM +ll +zN +dw +yl +bH +uP +uX +bv +uK +uK +bv +uK +uK +uh +uh +hl +fk +lp +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz Jz Jz -nA -Mj -sj -lb -lb -Zm -lb -lb -lb -lb -lb -qn -lb -Zm -lb -lb -lb -lb -lb -Zm -lb -lb -lb -qn -qn -lb -lb -lb -Zm -lb -nA -NM -pT Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Jz Jz Jz -Nr -Nr Nr Nr Nr @@ -21943,96 +28486,96 @@ Nr aa aa Nr +Jz +Jz Nr Nr Nr Nr +Jz Nr -Nr -Nr -Nr -Nr +Jz Nr Nr Jz Jz Jz Nr -Nr -Nr -Nr -Jz -Jz Jz Jz +uK +fk +fk +fk +fk +uK +hl +lc +lp +bI +vr +bm +dA +eR +fR +gH +iH +il +nK +jc +jr +iB +bu +ck +bu +dw +dB +dB +dB +ri +mn +zH +dB +nn +dB +dw +yl +bH +bH +bH +bH +bH +bH +bH +bH +uK +uh +uh +hl +lc +uF +hm +dj +dj +hm +hm +hm +dj +dj +dj +dj +hm +dj +uW Jz Jz -nA -NM -sj -Zm -lb -lb -lb -Zm -qn -qn -lb -qn -lb -lb -qn -Zm -lb -lb -lb -Zm -Zm -lb -qn -qn -lb -lb -lb -lb -Zm -lb -nA -Mj -pT -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Jz Jz Nr Nr Nr Nr Nr -Nr -Nr -Nr Jz Jz Jz @@ -22150,7 +28693,7 @@ Jz Jz Jz Jz -Nr +Jz Nr Jz Jz @@ -22162,76 +28705,76 @@ Jz Jz Jz qW -qW -Jz -Jz -Jz -Jz -Jz -Jz -nA -NM -sj -Zm -lb -lb -lb -lb -qn -qn -qn -qn -lb -lb -qn -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -qn -lb -Zm -nA -Mj -pT -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr +sd +fk +fk +fk +fk +uK +hl +lc +lp +bI +wS +bm +el +eX +fU +hr +iT +eU +ik +he +js +iB +zr +ck +bu +dw +sN +mD +lm +zj +lZ +zL +dB +rj +sy +dw +ym +yo +yo +yp +yo +yo +yo +yq +bH +uZ +bi +dj +uD +fk +fk +lc +lc +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +lx Jz Jz Jz Jz Nr Nr -Nr -Nr -Nr Jz Jz Nr @@ -22339,99 +28882,99 @@ aa aa Nr Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -Jz -qW -Jz -Jz -qW -qW -Jz -Jz -Jz -Jz -Jz -qW -qW -nA -Mj -sj -qn -lb -Zm -lb -lb -qn -lb -qn -lb -lb -lb -Sx -lb -lb -lb -Sx -lb -lb -lb -lb -lb -lb -lb -lb -Zm -lb -qn -nA -Mj -pT +Nr +Nr +aa +Nr +Nr +Nr Jz Jz Jz Jz Jz -Nr Jz Jz Jz -Nr -Nr -Nr Jz Jz Jz Jz -Nr -Nr -Nr -Nr -Nr +qW +Jz +qW Jz Jz +qW +qW +uK +uK +uK +uK +uK +sd +hl +fk +lp +bI +vr +bm +eJ +fq +nv +ix +oS +eU +sJ +he +jt +iB +zo +ck +bu +dw +dw +dS +dw +dS +mE +dw +dw +dw +dS +dw +om +om +om +om +sW +om +om +yk +wT +va +cw +sD +sD +uE +sD +sD +uE +sD +uE +sD +uH +uN +sD +sD +sD +fZ +fk +lp Jz Jz Nr -Nr -Nr +Jz Nr Nr Nr @@ -22544,95 +29087,95 @@ Nr Nr Nr Nr -Nr -Nr -Nr -Nr Jz +Jz +Jz +Jz +Jz +ab +dj +hm +dj +hm +hm +dj +dj +dj +dj +dj +hm +hm +dj +dj +hm +dj +dj +dj +dj +hm +hm +hm +uD +fk +lx +bI +vr +bm +eU +bm +bm +bm +bm +bm +jp +ja +js +iB +zp +zn +zm +mH +ct +gE +ld +lF +mX +mr +mH +ce +nh +ol +ok +oD +pi +zQ +td +tu +om +yl +bH sd -Hn -GS -Hn -GS -GS -Hn -Hn -Hn -Hn -Hn -GS -GS -Hn -Hn -GS -Hn -Hn -Hn -Hn -GS -GS -GS -Hn -Vu -Mj -pT -qn -lb -qn -lb -Zm -lb -lb -lb -lb -lb -lb -Sx -lb -lb -lb -Sx -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Zm -nA -NM -Lq -Hn -Hn -Hn -GS -Hn -Hn -Hn -GS -GS -Hn -Hn -GS -Hn -Hn -GS -GS -GS -Hn -Hn -Hn -Hn -GS -Hn -sD +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +hl +lp +uh +uh +uh +uJ +fk +lp +Jz Jz Jz -Nr Nr aa aa @@ -22748,90 +29291,90 @@ Nr aa Nr Nr -Nr -Nr Jz -TE -Mj -NM -NM -Mj -NM -Mj -NM -Mj -NM -Mj -Mj -Mj -Mj -NM -NM -NM -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -sj -Zm -Zm -lb -qn -lb -lb -lb -lb -qn -lb -lb -Sx -lb -qn -lb -Sx -lb -qn -lb -qn -lb -lb -lb -lb -qn -lb -Zm -nA -Mj -Mj -NM -Mj -Mj -NM -NM -Mj -NM -NM -Mj -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -pT +Jz +Jz +uJ +fk +lc +lc +fk +lc +fk +lc +fk +lc +fk +fk +fk +fk +lc +lc +lc +lc +lc +fk +fk +fk +fk +fk +fk +lp +bI +vr +bq +eN +fL +ft +iZ +it +bq +zs +he +AH +iB +zk +cu +bu +mH +cz +gF +iN +le +ma +Bf +mK +lk +AV +oH +om +pe +sE +rd +th +tv +om +yl +bH +uK +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uO +uS +uh +uh +uh +uJ +fk +lp Jz Jz Nr @@ -22953,87 +29496,87 @@ Nr Nr Jz Jz -nA -Mj -wG -wg -wg -Gb -OC -wG -Gb -wg -wg -wg -wg -Gb -Gb -wg -wg -wg -wg -Gb -Gb -wg -wg -wg -wg -TS -sj -lb -lb -Zm -qn -lb -lb -qn -lb -lb -lb -lb -Sx -lb -qn -qn -Sx -lb -qn -lb -lb -lb -lb -lb -lb -lb -qn -Zm -TE -wG -wg -wg -wg -wg -wg -Gb -wg -wg -wg -wg -Gb -wg -wg -Gb -wg -Gb -wg -TS -wG -wg -wg -wg -OC -Mj -sj +hl +fk +uN +sD +sD +uE +fZ +uN +uE +sD +sD +sD +sD +uE +uE +sD +sD +sD +sD +uE +uE +sD +sD +sD +uH +lp +bI +wS +bq +sH +eV +iR +fI +jm +bq +jH +he +js +iB +bu +cu +pG +mH +cD +hw +lf +lQ +lR +Bf +mN +lG +nz +oq +ow +oG +sP +Az +zP +tx +om +yt +bH +uK +bv +uK +uK +bv +uK +uK +qA +uK +uK +bv +vc +vs +uK +uh +uh +uJ +fk +lx qW Jz Nr @@ -23155,87 +29698,87 @@ Nr Nr Jz Jz -nA -Mj -sj -qW -Jz -Jz -TE -pT -Jz -Jz -Jz -qW -qW -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -TE -pT -Zm -lb -lb -lb -lb -lb -qn -lb -lb -qn -lb -Sx -qn -qn -qn -Sx -lb -qn -lb -lb -lb -lb -qn -lb -lb -qn -Zm -TE -pT -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -TE -pT -Jz -Jz -Jz -TE -Mj -sj +hl +fk +lp +ui +uh +uh +uJ +lx +uh +uh +uh +ui +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uJ +lx +bI +vr +bq +ff +qs +fB +qr +jj +nS +qv +hv +js +iB +pG +cu +pG +mH +cF +iM +ms +Bh +lM +oE +mH +lH +op +ov +oF +pg +ts +rh +AB +ty +om +wY +pp +pp +di +di +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +uZ +bi +hm +uD +fk +lp Jz Jz Jz @@ -23338,112 +29881,112 @@ aa Nr aa aa -Nr -aa -Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -aa -aa -Nr -Jz -nA -Mj -pT -qW -qW -qW -YY -On -qW -Jz -Jz -qW -Jz -Jz -Jz -Jz -qW -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -YY -On -lb -Zm -lb -lb -lb -lb -lb -qn -qn -lb -lb -GX -qn -qn -qn -GX -lb -lb -lb -qn -qn -qn -qn -lb -qn -lb -Zm -YY -On -qW -qW -Jz -Jz -qW -Jz -Jz -qW -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -YY -On -Jz +Nr +aa +Nr +Nr +Nr +aa +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +aa +aa +Nr Jz -qW -TE -Mj -pT +hl +fk +lx +ui +ui +ui +uO +uS +ui +uh +uh +ui +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uO +uS +bI +vr +bq +fg +fI +fK +ho +gG +fz +qC +he +AH +iB +zq +cu +pG +mH +cG +kn +lf +lg +md +mu +mH +mp +nX +oz +om +oY +tO +sU +sX +tA +om +yC +yD +yg +yu +yg +yg +yg +yu +yg +yg +yg +yu +yg +yz +pp +vt +cw +uE +fZ +fk +lx Jz Jz Nr Nr Nr -Nr +Jz Nr Nr Nr @@ -23557,109 +30100,109 @@ Nr Nr aa Jz -Nr Jz -nA -NM -sj Jz +hl +lc +lp +uh +uh +sd +uP +uT +bv +sd +sd +bv +sd +uK +bv +sd +sd +bv +sd +uK +bv +sd +uK +bv +uP +uX +bI +yE +bq +fc +fn +iO +qo +gP +fA +qD +he +js +iB +pG +ck +pG +mH +cP +kn +lf +lf +lM +ni +mH +mL +nE +oK +om +om +om +sW +sW +om +sW +XR +yr +cl +XR +XR +cl +gm +wt +gm +gm +wt +wt +gm +xZ +pp +bv +ui +uh +hl +fk +lp Jz -qW -kt -Uh -GX -tz -tz -GX -tz -aN -GX -tz -tz -GX -tz -aN -GX -tz -aN -tz -GX -Uh -Uh -GX -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -GX -qn -lb -qn -GX -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -GX -Uh -Uh -GX -tz -aN -tz -GX -aN -tz -GX -aN -tz -GX -tz -aN -GX -tz -tz -GX -Uh -gv -qW -qW Jz -nA -Mj -sj +Nr Jz Jz Nr Nr Nr -Nr -Nr -Nr -Nr Jz Jz -Nr Jz Nr +Jz Nr +Jz Nr aa Nr Nr -Nr +Jz aa Nr Nr @@ -23761,107 +30304,107 @@ aa aa Jz Jz -nA -Mj -Lq -GS -zT -PM -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp +hl +fk +lz +hm +bi +tq +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +bI +wS +bq +sI +fx +qq +qE +sK +qt +qp +ja +js +iB +bu +ck +AK +mH +cQ +fu +fv +kv +la +oE +mR +on +nZ +oL +oR +oZ +qY +sF +te +tn +tJ +tC +xN +wv +Bg +wG +zS +gm +AM +wz +wE +wE +wL +gm +yx pp -Nd -Nd -Nd -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA +sd +ui +uh hl -zT -GS -Vu -Mj -sj +fk +lp +Jz +Jz Jz Jz -aa -Nr -Nr -Nr -Nr Jz Jz Jz -Nr Jz Jz Jz Nr +Jz +Jz +Jz +Jz +Jz Nr -Nr -Nr -Nr -Nr +Jz +Jz +Jz Nr aa Nr @@ -23963,94 +30506,99 @@ Jz Jz Jz Jz -TE -NM -wG -Gb -xc -Rc -pp -rV -Iu -RH -RH -Iu -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -Iu -RH -RH -oE -Iu -Iu -RH -Iu -RH -RH -RH -RH -RH -RH -RH -Ii +uJ +lc +uN +uE +cw +uC +cg sC -Hq -Sr -Hq -XR -GT -Gq -Vn -Gq -Vn -Gq -Gq -Vn -Gq -Gq -Vn -Gq -Gq -Vn -Gq -Gq -Gq -Gq -Gq -Gq -Vn -Gq -Vn -Gq -Gq -Gq -Gq -Gq -Gq -Gq -gH -qA -hn -xc -Gb -OC -Mj -pT +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +wV +ex +bq +fi +fX +gZ +iF +jo +bq +ox +he +jC +iB +bu +cu +bu +mH +cV +kw +lh +lN +lI +mx +mS +nb +ob +AY +oT +pa +rN +tk +ti +sZ +tJ +dd +eu +wA +dO +yU +ws +wq +AN +AO +wF +AR +AT +gm +xZ +pp +sd +ui +uh +hl +fk +lx +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz -Nr -Nr -Nr -Nr -Nr Jz Jz Jz @@ -24060,11 +30608,6 @@ Jz Jz Jz Jz -Nr -Nr -Nr -Nr -Nr Nr Nr Rw @@ -24165,109 +30708,109 @@ aa Jz Jz Jz -TE -Mj -sj -Jz -qW -GX -pp -CD -sC -sC -sC -sC -sC +uJ +fk +lp +uh +ui +bv +cg sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -Yb -Yb -Yb -Zk -Zk -Zk -Zk -Zk -Zk -Zk -Af -Af -Af -rs -rs -rs -rs -rs -rs -rs -Cb -Cb -Cb -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -Tz -qA -GX -qW -Jz -nA -NM -sj -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Nr -Nr -Nr -Jz -Jz +fJ +fJ +fJ +fJ +fJ +jL +fJ +fJ +fJ +fJ +jL +fJ +fJ +fJ +fJ +jL +fJ +fJ +jG +jK +bq +bq +bq +bq +bq +bq +bq +sJ +ja +nM +iB +AJ +ck +bu +mH +dq +kS +li +lO +lT +my +mH +ne +oc +oN +oV +sR +sG +tf +tl +tI +tJ +gT +wo +cC +xN +yW +AL +gm +wy +wB +xz +wN +AU +Ap +xZ +pp +bv +ui +uh +hl +lc +lp +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK Jz Nr -Nr -Nr -Nr -Nr aa aa Rw @@ -24367,111 +30910,111 @@ Nr aa Nr Jz -nA -Mj -sj -Jz -Jz -tz -pp -xU +hl +fk +lp +uh +uh +sd +cg sC -YH -Cc -YH -Cc -zh -YH -Cc -Cc -YH -zh -YH -YH -Cc -Cc -IU -Cc -Cc -YH -YH -Bo -Mh -GG -sg -PS -sS -Ru -Ru -qq -Uv -Wv -ra -Lo -Kk -CR -Bw -IS -CA -CA -CA -Uy -Gt -rL -Dn -FG -vq -qT -kH -AI -tH -kH -Fm -kH -kH -KV -kH -kH -kH -AI -tH -kH -AI -kH -AI -XR +fJ +fr mJ -qA -tz -qW -Jz -nA -Mj -sj -qW -Jz -Nr -Nr -Nr -Nr -Nr -Jz -Nr -Jz -Jz -Jz -Nr -Nr -Jz -Nr -Jz +oX +mJ +mJ +oX +mJ +mJ +oX +mJ +oX +oX +mJ +mJ +mJ +mJ +mJ +oX +bp +wX +fl +gt +gS +iy +jf +is +nL +ip +nQ +iB +bu +cu +AK +bs +bs +kT +bs +lP +mf +mA +mA +ng +ns +Be +mA +mA +pn +pn +pn +pn +pn +tH +ew +tH +OT +OT +OT +gm +gm +gm +wt +xx +Ay +gm +xZ +pp +sd +ui +uh +hl +fk +lp +sd +ab +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +ly +uK Jz Nr Nr Nr -Nr -Nr -Nr Rw Rw Rw @@ -24569,111 +31112,111 @@ Nr Nr Jz Jz -TE -NM -sj -Jz -Jz -aN -pp -xU +uJ +lc +lp +uh +uh +uK +cg sC -UO -YH -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -YH -Cc -Cc -sV -Gc -mZ -iz -Sa -nH -FD -uC -uC -PU +bf +jK +du +jF +fJ +fJ +fJ +fJ +jF +fJ +fJ +fJ +fJ +jF +fJ +du +fJ +fJ +jN +jW +fE +fo +gQ +gU +xf jq -AF -xK -ZA -RL -nr -le -pw -BQ -Tv -Tv -Tv -VV -mL -so -Dn -MY -MY -MY -MY -MY -MY -MY -Uq -ky -ky -ky +fE +nT +iq +nR +iB +ci +cv +jw +bs +dx +kU +lo +lY +mg +mA +mT +nj +nu +nW +or +pk +pn +sQ +tm +tB +pn +gJ +wo +tH OT -Le -Le -Le -Le -Le -Le -Le -hg -XR -Tz -qA -tz -qW -Jz -nA -Mj -pT -qW -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Nr +rp +Rd +CH +gm +wC +wM +AS +xC +gm +yx +pp +sd +ui +uh +hl +fk +lx +sd +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Nr -Nr -Nr -Nr -Nr -Jz Jz Nr -Nr -Nr -Nr -Nr -Nr Rw Nr Rw @@ -24771,105 +31314,109 @@ Nr aa Jz Jz -nA -Mj -sj -Jz -qW -GX -pp -xU +hl +fk +lp +uh +ui +bv +cg sC -Cc -Cc -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -Fb -OK -Mh -PS -Ru -Ru -Ru -UM -zy -Wv -NO -Ld -Ro -CR -El -IN -CA -CA -CA -Uy -Fn -Kq -mx -MY -Bf -GK -Bf -lI -Rq -DE -Uq -Aq -YL -Dg +fJ +jK +fJ +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fE +fy +gv +gV +iV +AE +fE +ht +iw +ht +iB +cj +cv +jy +bJ +en +kV +kZ +lV +mi +me +mF +mU +nl +nY +od +ou +pc +rw +ta +tj +pn +gT +ig +xA OT -no -Rd +rs +zY CH -no -mC -no -Le -kH -XR -mJ -qA -GX -qW -Jz -nA -NM -pT -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz +gm +wt +gm +gm +gm +gm +xZ +pp +bv +ui +uh +hl +lc +lx +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr Jz -Nr -Nr -Nr -Nr -Nr -Nr Jz Nr Nr @@ -24881,10 +31428,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr -Nr aa Nr Nr @@ -24969,22 +31512,22 @@ aa Nr Nr Nr -Nr -Nr Jz Jz -nA -Mj -sj Jz Jz -tz -pp -CD +hl +fk +lp +uh +uh +sd +cg sC -Cc -Cc -nQ +fJ +jK +gY +fa zX py py @@ -25001,77 +31544,80 @@ QW iU pL KR -nQ -AT -OK -AT -PS -YS -Ru -Ru -rC -Fd -Wv -NO -Wg -ql -CR -rh -vy -CA -CA -CA -Uy -rL -Kq -Dn -MY -lI -lI -lI -Bf -lI -vk -Uq -FN -rU -yU -OT -xr -no +fE +fC +gI +hf +iY +sT +fE +im +AG +oP +nN +ju +iE +jV +cp +ep +kX +lu +lv +mj +mk +mm +mB +nH +nG +os +oJ +pY +sY +tr +zh +pn +tH +gA +rl +kz +kC +Ah +CH +yO CH CH -no CH +no Le -AI -XR -Tz -qA -tz -qW -qW -nA -Mj -sj -Nr -Nr -Nr -Nr -Nr -Nr -Nr -aa -Nr -Jz -Nr -Jz -Jz -Nr +xZ +pp +sd +ui +ui +hl +fk +lp +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr -Nr -Nr Jz Nr Nr @@ -25099,9 +31645,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr Jz Jz aa @@ -25170,23 +31713,23 @@ Nr aa Nr Nr +Jz Nr Nr Nr -Nr -Jz -nA -NM -sj Jz -Jz -aN -pp -xU +hl +lc +lp +uh +uh +uK +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa uM Br RS @@ -25203,80 +31746,80 @@ RS Kd wU Fc -nQ -AT -Fs -AT -PS -Ru -YS -Ru -rC -Gz -Wv -NO -LD -ql -CR -rx -vy -CA -CA -CA -Uy -rL -kI -rL -MY -Bf -lI -lI -Bf -Jm -xs -iN -sG -RP -oq -Qh -DO -LP -CH -CH +fE +fM +gv +xf +iY +AF +fE +iA +iu +AI +nI +iD +iP +pW +bJ +eM +lB +kZ +lW +mo +mG +na +nk +nV +oa +oI +pd +sz +sS +tp +tD +pn +tH +wr +tH +OT +ir +Ai CH +yO +no +no CH +no Le -AI -XR -Tz -qA -tz -Jz -Jz -nA -NM -sj -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Nr -Nr -Jz -Jz -Nr +xZ +pp +sd +uh +uh +hl +lc +lp +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr -Nr -Nr -Nr aa aa Nr @@ -25377,18 +31920,18 @@ aa Nr Jz Jz -nA -Mj -sj -Jz -qW -GX -pp -xU +hl +fk +lp +uh +ui +bv +cg sC -Cc -YH -nQ +fJ +jK +du +fa kJ RS RS @@ -25405,80 +31948,80 @@ RS RM Za qG -nQ -Mh -Fs -sg -PS -YS -YS -Ru -iS -xd -Wv -yR -KO -ue -CR -Ad -iD -CA -CA -CA -Uy -KU -Kq -Dn -MY -lI -lI -Bf -lI -lI -CF -Uq -Dg -RI -ta +fE +gk +hh +hi +jE +zO +fE +fY +yB +gx +nN +qm +cH +jB +bs +fd +hU +lD +lX +mq +mA +nd +mV +oM +oe +oC +pm +sz +Bd +tt +to +pn +yH +jJ +tH OT -ir -CH +TU +Iw CH +yO CH no CH +no Le -AI -XR -mJ -qA -GX -qW -Jz -nA -Mj -sj -Jz -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +yx +pp +bv +ui +uh +hl +fk +lp +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr -Nr -Nr aa aa Nr @@ -25575,22 +32118,22 @@ Nr aa Nr Nr +Jz Nr Nr -Nr -Jz -nA -Mj -pT Jz -Jz -tz -pp -xU +hl +fk +lx +uh +uh +sd +cg sC -UO -Cc -nQ +bf +jK +fJ +fa Ub RS RS @@ -25607,76 +32150,79 @@ RS RM Za Kn -nQ -Mh -Fs -GG -PS -PS -PS -PS -PS -PS -Wv -SZ -Qm -SZ -Ye -pt -pt -pt -pt -pt -pt -Dn -kI -Dn -MY -Bf -lI -lI -lI -JB -Bf -Uq -Dg -Gx -Dg +fE +fE +iL +fE +fE +fE +fE +fH +fH +fH +fH +pF +cL +pF +bs +bs +bs +bs +bs +bs +mA +mA +np +mA +mA +mA +mA +pn +pn +pn +pn +pn +zg +ke +gT OT -TU -Iw +Le +Le sa -CH -CH -no Le -hg -XR -Tz -qA -aN -Jz -Jz -nA -Mj -pT -Jz -Jz -Jz -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +Le +Le +Le +Le +Le +xZ +pp +uK +uh +uh +hl +fk +fk +dj +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Nr Nr @@ -25706,9 +32252,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr Jz aa aq @@ -25778,21 +32321,21 @@ aa aa aa Nr -Nr Jz Jz -nA -Mj -sj -qW -qW -tz -pp -xU +Jz +hl +fk +lp +ui +ui +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa Bv RS RS @@ -25809,10 +32352,10 @@ RS Kd pA Wo -nQ -Mh -OK -Mh +fa +kx +jO +xL Sc IP IP @@ -25820,64 +32363,68 @@ IP IP IP WP -ql -LD -Fp +pG +cv +pC Ye -rc +hW Xo iG Xo To Ar -Dn -kI -rL -MY -MY -MY -MY -MY -MY -MY -Uq -Dg -Gx -Dg -OT -Le -Le -Le -Le -Le -Le -Le -AI -XR -Tz -qA -tz -Jz -Jz -TE -Mj -sj -Jz -Nr -Jz -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Nr -Nr -Jz -Jz -Jz +cs +nr +kH +jY +Or +tG +hy +Or +XM +kk +qO +gW +kc +re +Sh +rq +XS +XS +iK +AC +Vt +CT +xr +ya +xZ +pp +sd +uh +uh +uJ +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Jz @@ -25907,10 +32454,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr -Nr Jz aa aq @@ -25983,18 +32526,18 @@ Nr Nr Jz Jz -nA -NM -sj -Jz -qW -GX -pp -xU +hl +lc +lp +uh +ui +bv +cg sC -Cc -Cc -nQ +fJ +jK +gY +fa Ub RS RS @@ -26011,20 +32554,20 @@ RS Kd Za Ey -nQ -Mh -Fs -EB -pI +fa +kY +jO +wZ +bF IP IP IP IP IP qB -ql -Wg -ql +pG +cM +pG MP YW JJ @@ -26032,55 +32575,58 @@ Ch jx iX pt -Fn -Kq -Dn +ez +nF +zw jY Or -tG XM -Or -vb -CV +hp +XM +XM +fF qO -CU -Cp -zU +kW +jJ +rf Sh -Vt -iK +rt +XS +XS +Ax XS XS -LB -Vt CT -kH -XR -Tz -qA -GX -Jz -Jz -nA -Mj -sj -Jz -Nr -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Nr -aa -Nr -Jz -Jz -Jz +ya +yw +yA +pp +bv +uh +uh +hl +fk +fk +sD +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Nr @@ -26110,9 +32656,6 @@ Nr Nr Nr Nr -Nr -Nr -Nr Jz aa aq @@ -26185,18 +32728,18 @@ Jz Jz Jz Jz -nA -NM -sj -qW -Jz -tz -pp -xU +hl +lc +lp +ui +uh +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa uM RS RS @@ -26213,20 +32756,20 @@ RS Kd pA ZO -nQ -Mh -OK -Mh -pI +fa +jg +jO +rP +bF IP IP IP IP IP qB -ql -wB -YQ +pG +cW +pV Gl wO vJ @@ -26234,63 +32777,63 @@ iI XN ny pt -rL -Kq -Dn +ed +dI +mw jY -Or -XM XM XM -XM -dV -qO -sR -Gx -yN -Sh -Jk -XS -XS -XS +zZ +dg +hS +gB +gK +kQ +kd +rl +kA +kD +Ad +Aj +An XS XS CT -kH -XR -Tz -qA -tz -Jz -Jz -nA -Mj -sj -Jz -Jz -Nr -Nr -Nr -Jz -Jz -Jz +ya +xZ +ya +pp +sd +uh +uh +hl +fk +lp +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr -Nr -Nr -Nr -Nr Jz Jz Jz Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr Jz Nr Nr @@ -26387,18 +32930,18 @@ Jz Jz Jz Jz -nA -Mj -sj -Jz -qW -aN -pp -xU +hl +fk +lp +uh +ui +uK +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa kJ RS RS @@ -26415,81 +32958,81 @@ RS Kd pA zx -nQ -Mh -OK -sg -pI +fa +so +jO +sp +bF IP IP IP IP IP qB +pG +cM +in +dJ +dZ +dZ +qi +dZ ql -kq -nV -Qf -Va -Va -Wl -Va -yX pt -Gt -Kq -rL +er +dI +zT jY XM -XM Or XM -fF -fN -rf -sG -Pv -oq -pn -xu -An -Vt +Ae +Or +cE +qO +tH +jJ +tH +Sh +ki XS +Ak XS +Vt XS CT -AI +yb +xZ XR -mJ -qA -tz -Jz -Jz -nA -Mj -pT -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr +pp +sd +uh +uh +hl +fk +lx +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz -Nr -Nr -Nr -Nr -Nr Jz Jz Jz @@ -26589,18 +33132,18 @@ aa aa Nr Jz -nA -Mj -sj -Jz -Jz -GX -pp -xU +hl +fk +lp +uh +uh +bv +cg sC -UO -Cc -nQ +bf +jK +fJ +fa Ub RS RS @@ -26617,82 +33160,82 @@ RS Kd Za ZO -nQ -Mh -OK -Mh -pI +fa +rP +jO +sp +bF IP IP IP IP IP WP -ql -LD -ql +pG +cv +pG Ye pD -YW +ib sB dm RD pt -Dn -Kq -Dn +ez +dI +zU jY -XM Or XM XM -Or -cE +AA +eT +rn qO -Dg -RI -ta +tH +ke +tH Sh -Ug +dT +nO XS XS XS Vt -XS CT -JK +ya +yx XR -mJ -qA -GX +pp +bv +uh +ui +hl +fk +lx +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz -qW -nA -Mj -pT Jz Jz -aa -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz Jz Nr Nr @@ -26791,18 +33334,18 @@ Nr Nr Jz Jz -TE -Mj -sj -Jz -qW -tz -pp -xU +uJ +fk +lp +uh +ui +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa uM Br RS @@ -26819,20 +33362,20 @@ RS RM pA Ln -nQ -Mh -OK -Mh -yn -yn -yn -yn -yn -yn +fa +ej +jP +xM +fb +fb +fb +fb +fb +fb CO -ot -KO -UD +pH +cH +pX Ye pt pt @@ -26840,58 +33383,58 @@ pt pt pt pt -Dn -Kq -rL +tb +fw +zV +jY +jY +jY +jY +jY +jY jY -Or -XM -XM -XM -eT -Or qO -Dg -Gx -Dg +gT +jJ +rg Sh -dT -nO -XS -XS -XS -Vt CT -kH +CT +CT +CT +CT +CT +CT +ya +xZ XR -Tz -qA -tz -Jz -Jz -nA -Mj -pT -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz -Nr -Nr -Nr -Nr -Jz -Jz -Jz -Jz +pp +sd +uh +uh +hl +fk +lx +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Nr @@ -26988,23 +33531,23 @@ Nr Nr Nr Nr -Nr +Jz Nr Jz Jz qW -TE -Mj -sj -qW -Jz -aN -pp -xU +uJ +fk +lp +ui +uh +uK +cg sC -Cc -Cc -nQ +fJ +jK +gY +fa Ub RS RS @@ -27021,20 +33564,20 @@ RS QB Za Ln -nQ -Mh -OK -Mh -yn -mt -Ex -KF +fa +sV +sl +zE +fb +bb +Bj +eH KF Wx CO -TC -QU -Jo +pI +cX +pZ ai aj aj @@ -27042,58 +33585,58 @@ aj aj aj am -rL -kI -Dn -jY -jY -jY -jY -jY -jY -jY -qO -Dg -gu -nq -Sh -CT -CT -CT -CT -CT -CT -CT -kH +ed +fN +nt +eI +tg +hx +kj +lK +tg +ku +eL +gJ +wu +gT +fm +rr +tN +tN +lr +lt +tN +fD +ya +xZ XR -Tz -qA -tz -qW -Jz -nA -Mj -sj -Jz -Jz -Jz -Nr -Nr -Nr -Nr -Jz -Nr -Jz -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +sd +ui +uh +hl +fk +lp +uK +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Jz @@ -27189,24 +33732,24 @@ aa aa aa Nr -Nr -Nr Jz +Nr Jz Jz Jz -nA -Mj -sj Jz -qW -GX -pp -xU +hl +fk +lp +uh +ui +bv +cg sC -Cc -Cc -nQ +fJ +jK +xT +fa Ub RS Br @@ -27223,20 +33766,20 @@ RS RM Za Rh -nQ -Mh -OK -Mh -yn +fa +xD +sl +rP +fb IR Mu Wx KF -Wx +zt CO -Oe -Nt -tK +pJ +cY +qa ai aj aj @@ -27244,58 +33787,58 @@ aj aj aj am -Dn -Kq -Dn +ez +fS +pj eI -tg -aZ lK lK -lv -or +zW +tg +lK +dV eL -Aq -Gx -Dg +ra +jJ +xB fm -fh -mq +ru tN -tN -hq +fh +Ab +fh tN fD -AI +xr +xZ XR -Tz -qA -GX -qW -Jz -nA -Mj -sj -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +bv +ui +uh +hl +fk +lp +sd +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Jz @@ -27392,23 +33935,23 @@ aa aa aa Nr -Nr Jz Jz Jz Jz -nA -NM -sj Jz -Jz -tz -pp -xU +hl +lc +lp +uh +uh +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa kJ RS RS @@ -27425,20 +33968,20 @@ RS Kd Za Zu -nQ -Mh -OK -sg -yn -ya -oT +fa +sn +sl +sp +fb +ev +nc SJ LL nD CO -bt -bw -ci +pO +cZ +qb ai aj aj @@ -27446,58 +33989,58 @@ aj aj aj am -Gt -Kq +er +fS rL eI lK -lK -lK tg -lK -ki -eL -kW -NR -gJ -fm -Jd -tN -fh +Ac +fO +kN +gC +gL +nq +kd +rm +rx +kE +Af +Al +Ao tN -fh tN fD -kH +xr +xZ XR -Tz -qA -tz -Jz -Jz -nA -NM -sj -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +sd +uh +uh +hl +lc +lp +uK +xE +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +vv +uK Jz Jz Jz @@ -27599,18 +34142,18 @@ Jz Jz Jz Jz -nA -NM -pT -Jz -Jz -aN -pp -xU +hl +lc +lx +uh +uh +uK +cg sC -UO -Cc -nQ +bf +jK +fJ +fa uM RS RS @@ -27627,20 +34170,20 @@ RS Kd Za yv -nQ -wM -oG -yK -yn -xk -Wx -ZU +fa +xG +sl +Bi +fb +bk +eB +ot KF -AP +Wx CO -bu -bN -bu +pP +da +pP ai aj aj @@ -27648,89 +34191,89 @@ aj aj aj am -ec -ep -er +fe +jT +yc eI lK -tg lK lK -fO -fS -gb -gl -Pv -gK -gT -gW -hc -tN -tN +Aa +lK +fT +eL +rc +kf +rc +fm +ze +fh +Am tN tN +fh fD -JK +ya +yx XR -Tz -qA -aN -qW -Jz -nA -Mj -sj -Jz +pp +uK +ui +uh +hl +fk +lp +uK Qo tL GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX aq aq @@ -27801,18 +34344,18 @@ Jz qW Jz Jz -nA -Mj -pT -qW -qW -GX -pp -xU +hl +fk +lx +ui +ui +bv +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa Ub RS RS @@ -27829,60 +34372,60 @@ RS Kd pA mW -nQ -uN -PB -MU -yn -Wx -RF -vi -Tb -CO +fa +xO +sm +Bc +fb +eA +eF +pr +zv +oi +oi +pQ +db +qc oi -bk -bO -cj oi -ai aj aj aj aj am -ed -eq -ez +fj +jZ +yd eI lK lK lK tg ub -fT +ro eL -gm -gy -gL +yH +kg +tH fm gX hd -fh tN tN -fh +tN +tN fD -AI +AD +xZ XR -Tz -qA -GX -Jz -Jz -nA -NM -pT -Jz +pp +bv +uh +uh +hl +lc +lx +uK nx AX AX @@ -28003,18 +34546,18 @@ Hn Hn Hn GS -Vu -Mj -sj -qW -Jz -aN -pp -xU +uD +fk +lp +ui +uh +uK +cg sC -Cc -Cc -nQ +fJ +jK +gY +fa Bv RS RS @@ -28030,21 +34573,21 @@ RS RS Kd pA -AU -nQ +rK +fa ph -YO +jS ph CO CO CO -BT +bT CO oi bj -At -Ff -ck +pR +dh +qe bM oi ai @@ -28053,7 +34596,7 @@ ai ai ai ee -Aj +kb ee eL eL @@ -28063,9 +34606,9 @@ eL eL eL eL -gn -gz -nq +tH +jJ +rg fm fm fm @@ -28074,17 +34617,17 @@ fm fm fm fm -AI +hq +xZ XR -Tz -qA -tz -Jz -Jz -TE -NM -fZ -wQ +pp +sd +uh +uh +uJ +lc +lz +dj Jr VQ JD @@ -28205,18 +34748,18 @@ Mj Mj Mj Mj -Mj -Mj -sj -Jz -Jz -tz -pp -xU +fk +fk +lp +uh +uh +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa Ub RS RS @@ -28230,113 +34773,113 @@ RS Br RS RS -RM -Za -Ny -Bc -My -wE -Qg -Ja kB +lU +rM +rO +sf +rQ +sg +sh +bO xY -wE -Lt -EI -At -Bd -ap -Vl -YP -DY -sJ -DC -ty -qu -ME -eK -iR -DV -kO -uK +bQ +px +pz +pB +pS +dh +qF +pB +cK +dX +ef es -Dg -jz -nq -fV -WT -go -gA -gN -nq -fV -Dg -nq -Dg -Mo -nq -ky -kH +eE +eW +gq +ks +gO +kO +qu +qK +xN +qP +yG +qS +qN +qT +kl +qV +qR +qS +yI +zc +xN +AP +ec +rb +ih +xZ XR -Tz -qA -tz -Jz -Jz -nA -Mj -Mj -Mj +pp +sd +uh +uh +hl +fk +fk +fk VI -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj +fk +fk +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk Qo aq aq @@ -28407,18 +34950,18 @@ Mj Mj Mj Mj -Mj -Mj -sj -Jz -qW -GX -pp -xU +fk +fk +lp +uh +ui +bv +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa kJ RS Br @@ -28432,113 +34975,113 @@ RS Br RS RS -Kd -UV -wF -rz -Zb -QM -kZ -HM -AL -nZ -rO -YR -Mk -yd +pu +zz +zD +aZ +ba +bw +bL +bN +bP +ps +bR +bV +cd +cd bz -bQ -cm -cy -Mk -cZ -cL do -dz -HH -No -dF -dQ -zw -RB -fj -fu -Mq -jJ -fd +cm +cd +cd +dD +dK +dW +eb +eg +eq +ls +gb ge gp -gB -gO -RB -fd -RB -RB -KN -ig -HE -QO -AI +gi +gl +gy +gz +gD +gp +gp +km +gp +gp +gD +gp +gp +kF +kK +kL +tH +rk +xZ XR -mJ -qA -GX -qW -Jz -nA -Mj -Mj -Mj +pp +bv +ui +uh +hl +fk +fk +fk VI -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk Qo aq aq @@ -28609,18 +35152,18 @@ Gb wg wg Gb -OC -Mj -pT -Jz -Jz -tz -pp -xU +fZ +fk +lx +uh +uh +sd +cg sC -UO -Cc -nQ +bf +jK +fJ +fa Ub RS RS @@ -28634,63 +35177,63 @@ RS Br Br RS -RM -DN -xB -Bc -BA -wE -sH -Mn -uT -LR -Oa -Lt -EI -gi -ba -bR -SO -At -cK -sJ -iR -dp -dA -dR +rW +sb +zB +rO +Bb +rQ +rS +rT +bt +rU +bS +px +pz +pz +hu +dh +qI +pB +dL +dX eh -iR -eE -kO -Ra -Ie -fv -eW -Dg -fV -Ra -gq -gC -ta -nq +et +eK fV -Ra -EK -fv -wT -ju -ky -JK +gN +xV +jz +kO +qJ +qL +rv +qQ +hk +qS +qJ +qU +kq +qX +qR +qS +qJ +qN +rv +qZ +qR +qT +ih +yx XR -mJ -qA -tz -qW -Jz -nA -Mj -LV -Ym +pp +sd +ui +uh +hl +fk +uN +uE xy UH lE @@ -28811,18 +35354,18 @@ Jz qW qW Jz -nA -Mj -sj -Jz -Jz -aN -pp -xU +hl +fk +lp +uh +uh +uK +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa Ub RS RS @@ -28837,62 +35380,62 @@ RS RS RS Kd -DN -QL -nQ +sc +zC +fa jb -OV +yT jb Ng Ng -Ng -UB +si +pv Ng oi -vc -bL -bS -EI +jA +pR +dh +qe cJ oi cB -qP +dM cB cB cB ei -dI +xW ei tE tE tE -CI +gs tE tE tE gg gg -gD +ky gg gg gg hj -hj -yg +hN +kG +hN hj hj -hj -kH +ih +xZ XR -Tz -qA -aN -Jz -Jz -nA -NM -sj -Jz +pp +uK +uh +uh +hl +lc +lp +uK Ss AX AX @@ -29013,18 +35556,18 @@ Jz aa Jz Jz -nA -NM -pT -Jz -qW -GX -pp -xU +hl +lc +lx +uh +ui +bv +cg sC -Cc -Cc -nQ +fJ +jK +gY +fa uM RS RS @@ -29039,112 +35582,112 @@ RS RS RS RM -RN -lU -nQ -kx -AG -yk +zy +zF +fa +xH +xi +xP tF -GO -sW -HD -Ge -Ng +pq +pw +sr +zu +oi +oi +qe +dh +rA oi -EI -bT -cn oi -cB ua -Qw +dQ DP ys Sj -ej -MK bl +xX +eG eP -eY -ZW -yc +gn +go +gu DJ eY eP -gh -gs -gE +ko +kp +ry fp gh hb -hk -ls -Rg -Zx -hk -tV -kH +zb +hI +hT +AQ +hZ +hL +ya +xZ XR -Tz -qA -GX -Jz -Jz -nA -NM -pT -Jz +pp +bv +uh +uh +hl +lc +lx +uK lA WX GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX -aN -aN +uK +uK GX aq aq @@ -29215,107 +35758,107 @@ Nr aa Jz Jz -nA -Mj -pT -Jz -Jz -tz -pp -xU +hl +fk +lx +uh +uh +sd +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa GU Rj zf zf zf zf -Sk -zf -Qj -Rj -Rj -Rj -zf -pu -Al -Nl -nQ -kY -oX -Im +ap +aP +rX +rY +rY +rY +aP +rZ +zA +zG +fa +eC +xj +xQ tF Qn -tD -Tn -Qr +ss +sv +bZ jX Ng bA -bU +dp bA cB cN aG -Ht +dR uY Kh -Sj -ek -EF -eG +yR +xI +zR +jD eP eZ ea -VY -eY +hc +As QR eP KE wp -gF -wp +Au +Ag VZ hb -HT -UF -Ut -UF -lD -tV -kH +hF +hO +hR +hV +ia +hL +ya +xZ XR -Tz -qA -tz -Jz -Jz -nA -Mj -pT -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +sd +uh +uh +hl +fk +lx +uK +ab +dj +dj +vT +dj +vT +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +dj +ly +uK Jz Jz Jz @@ -29417,18 +35960,18 @@ Nr Nr aa Jz -nA -Mj -sj -Jz -Jz -aN -pp -xU +hl +fk +lp +uh +uh +uK +cg sC -Cc -Cc -nQ +fJ +jK +fJ +fa CP VN Ny @@ -29443,81 +35986,81 @@ VN VN Ny VN -Jp -Ny -nQ -YH -xU -Zy +rJ +sk +fa +du +jK +gY tF US -TO -BE -aP -Gv +st +sw +eD +mt Ng -JA -bV -vI +bB +dr +rC cB -lH -bP -rl +dC +dF +dU oU mI Sj -jD -mJ -kH +ek +By +ya eP ea -ea -eY +cc +Aq ea ea eP wp -wp -gh +At +Aw wp wp hb -hk -UF -hk -UF -UF -tV -kH +hH +hP +kI +hO +id +hL +ya +xZ XR -Tz -qA -aN -Jz -Jz -TE -Mj -pT -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +uK +uh +uh +uJ +fk +lx +uK +hl +fk +vB +vB +vB +vB +vB +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Jz @@ -29619,58 +36162,58 @@ Nr Nr Jz Jz -TE -Mj -sj -Jz -qW -GX -pp -xU +uJ +fk +lp +uh +ui +bv +cg sC -UO -Cc -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -nQ -Cc -xU -YH -tF +bf +jK +fJ +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fa +fJ +jK +du +yS GO GO -ZV -SV -bb +bU +cb +rV Ng -WK -BI -Mm +cn +ds +rD cB cO -db -HK +em +eo nC Fh Sj -kH -Tz -kH +ya +Bz +xr eP eY ea @@ -29684,42 +36227,42 @@ wD wp gh hb -hk -hk -Ki -UF -hk -tV -JK +hI +wP +kP +yF +ij +hL +ya +yx XR -Tz -qA -GX -Jz -Jz -TE -Mj -sj -Jz -Jz -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz +pp +bv +uh +uh +uJ +fk +lp +uK +hl +vS +vB +vH +vW +wc +vB +vA +fk +fk +fk +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Nr @@ -29821,48 +36364,48 @@ Nr Jz Jz qW -TE -Mj -sj -Jz -Jz -tz -pp -xU +uJ +fk +lp +uh +uh +sd +cg sC -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -Cc -YH -YH -GF -Cc +fJ +jK +fJ +fJ +fJ +fJ +jL +fJ +fJ +fJ +fJ +jL +fJ +fJ +fJ +fJ +jL +fJ +fJ +fJ +du +du +jK +fJ tF GO GO -GO -DB +Bk +su bx Ng -oB -EU co +dt +rE cB cR dc @@ -29870,9 +36413,9 @@ nB qy df Sj -kH -Yf -kH +ya +By +ya eP eP eP @@ -29880,47 +36423,48 @@ eP eP eP eP -gg -gg -gg -gg -gg hb -tV -tV -tV -tV -tV -tV -AI +hb +hb +hb +hb +hb +hL +hL +hL +hL +hL +hL +xr +xZ XR -Tz -qA -tz -qW -qW -TE -Mj -sj -Jz -Nr -aa -Nr -Nr -Nr -Jz -Jz -Jz -Jz -Jz -Jz -Nr -Jz -Nr -Jz -Jz -Jz -Jz +pp +sd +ui +ui +uJ +fk +lp +uK +hl +fk +vC +vI +vX +wd +vB +uN +sD +sD +sD +sD +sD +sD +sD +sD +sD +vv +uK Jz Jz Nr @@ -29933,7 +36477,6 @@ Nr Nr Nr Nr -Nr Jz Jz Jz @@ -30023,38 +36566,38 @@ Nr Jz Jz qW -nA -Mj -pT -Jz -Jz -aN -pp -xU +hl +fk +lx +uh +uh +uK +cg sC -Cc -Cc -Cc -wZ -Cc -Cc -Cc -Cc -wZ -Cc -Cc -Cc -Cc -wZ -Cc -Cc -Cc -Cc -Ua -Cc -Cc -Cc -YH +fJ +jM +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +mJ +xw +du Ku Ku Ku @@ -30062,9 +36605,9 @@ Ku Ku Ku by -pM -Sg lw +dv +rF Gj cS cS @@ -30072,60 +36615,60 @@ cS cS cS cS -AI -kH -kH -AI -WI -kH -AI -kH -kH -WI -kH -kH -kH -kH -WI -kH -AI -kH -kH -WI -kH -kH -AI +xr +Bz +ya +xr +ya +ya +xr +ya +ya +ya +ya +ya +xr +ya +Bs +Bt +xr +ya +ya +xr +ya +xr +xr +xZ XR -mJ -qA -tz +pp +sd +uh +ui +hl +fk +lp +sd +hl +vS +vB +vK +vW +we +vB +xF +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK +Jz Jz -qW -nA -Mj -pT -qW -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr Nr Nr @@ -30225,37 +36768,37 @@ Nr Jz Jz Jz -nA -Mj -sj -Jz -qW -GX -pp -xU -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC -sC +hl +fk +lp +uh +ui +bv +cg sC -Kc +fJ +fJ +fJ +fJ +jF +fJ +fJ +fJ +fJ +jF +fJ +fJ +fJ +fJ +jF +fJ +fJ +fJ +fJ +jF +fJ +fJ +wJ mZ Ku an @@ -30264,9 +36807,9 @@ MQ MQ aH by -zR -Ti -vf +mQ +dy +rG Gj aM Li @@ -30275,59 +36818,59 @@ as av cS vP -jD -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR +yf +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bu +Bw +Bx +yg +AZ +yg +yg +yg +yg +yg +yy XR -Tz -qA -GX +pp +bv +uh +uh +hl +fk +lx +uK +hl +fk +vB +vB +vB +vB +vB +lp +uK +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz -nA -Mj -pT Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr Nr Nr @@ -30427,37 +36970,37 @@ Nr Nr Jz Jz -nA -Mj -Lq -GS -zT -Rc -pp -oY -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -RH -Cf +hl +fk +lz +hm +bi +tq +cg +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC sC -Cc +sC +sC +sC +sC +sC +sC +sC +sC +sC +sC +yK +yL mZ ul Eg @@ -30465,11 +37008,11 @@ ic aK aQ hs -Jv -Ai -Ft -mQ -PQ +tP +oB +dz +rH +tQ SG ka Nv @@ -30477,59 +37020,59 @@ gM IC yQ vP -AI +xs +ya +ya +yM +ya +ya +ya +ya +yM +ya +xr +ya +xr +Ba +ya +xr +ya +ya +Ba +ya +xr +ya +ya XR -WH -Vn -Gq -Vn -Gq -Gq -Gq -Gq -Vn -Vn -Gq -Gq -Gq -Gq -Vn -Gq -Vn -Gq -Vn -Gq -Gq -id -qA -hn -zT -Hn -Vu -Mj -sj +pp +sd +uh +uh +hl +fk +lp +uK +hl +fk +fk +vz +fk +vz +fk +lp +uK +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz -Nr -Nr -Nr -Nr -Nr -Nr -aa -Nr -Nr Jz Jz Jz Jz -Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr Nr Nr Nr @@ -30629,98 +37172,98 @@ Nr aa Nr Jz -nA -NM -wG -Gb -xc -AE -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -pp -xU +hl +lc +uN +uE +cw +uL +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg sC -Vf +fJ +se mZ ul Yu -Eg +Yu bc if aJ by -bB -bW -TZ +pM +rz +rI Gj aO de Gk qk -qk +IC yQ vP -xS +yn +yN XR -Tz -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -qA -GZ -xc -Gb -OC -NM -sj -Jz +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +XR +pp +uZ +bi +dj +uD +lc +lp +uK +hl +fk +fk +fk +fk +fk +fk +lp +uK Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Jz Jz Jz @@ -30825,43 +37368,43 @@ Nr Nr aa Nr -Nr +Jz Nr Nr aa Nr Jz -nA -Mj -sj -Jz -Jz -qW -tq -Ko -GX -tz -aN -GX -aN -aN -GX -aN -tz -GX -aN -tz -GX -tz -aN -tz -GX -Ko -Ko -pp -xU +hl +fk +lp +uh +uh +sd +uR +uV +bv +sd +uK +bv +uK +uK +bv +uK +sd +bv +uK +sd +bv +sd +uK +sd +bv +uR +uV +cg sC -MD +du +je mZ Ku aw @@ -30881,47 +37424,47 @@ aT aU cS vP -xS +xv +pl XR -mJ -qA -Ko -Ko -GX -tz -aN -aN -GX -tz -tz -GX -tz -aN -GX -tz -tz -GX -aN -tz -GX -Ko -Ib -qW -Jz -Jz -nA -Mj -sj -qW -Jz -Nr -Jz -Jz -Jz -Jz -Jz -Nr -Nr +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +pp +vt +cw +uE +fZ +fk +lp +sd +hl +fk +fk +vy +fk +vy +fk +lp +uK Jz Jz Jz @@ -31028,43 +37571,43 @@ Nr aa aa Nr -Nr -Nr -Nr -Jz -Jz -nA -NM -pT -Jz -Jz -qW -YY -On -qW -Jz -Jz -Jz -Jz -qW -qW -Jz Jz Jz +Nr Jz Jz -Jz -qW -Jz -qW -Jz -YY -Mj -pp -xU +hl +lc +lx +uh +uh +ui +uO +uS +ui +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +ui +uh +ui +uh +uO +uS +cg sC -YH -Cc +fJ +wK +mZ Ku NW Ku @@ -31082,49 +37625,49 @@ cS cS dE cS -AI -AI +vP +hB +xr XR -Tz -qA -Mj -On -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -YY -On -Jz -Jz -qW -TE -Mj -sj -qW -qW -Nr -Nr -Nr -Nr -Nr -Jz -Jz +pp +uR +uV +bv +sd +uK +uK +bv +sd +sd +bv +sd +uK +bv +sd +sd +bv +uK +sd +bv +uR +uV +sd +uh +ui +uJ +fk +lp +sd +vx +fk +vD +vD +vD +vD +vD +lp +uK Jz -Nr Jz Jz Jz @@ -31230,102 +37773,102 @@ Nr aa aa Nr -Nr -Nr -Nr -Jz -Jz -nA -Mj -pT -qW -Jz -Jz -nA -sj -Jz -Jz -Jz -Jz Jz Jz Jz Jz Jz -Jz -Jz -Jz -Jz -Jz -qW -qW -qW -TE -pT -pp -xU +hl +fk +lx +ui +uh +uh +hl +lp +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +ui +uJ +lx +cg sC -Cc -Kc -at -aA +du +se +tM ar +aA +hz Pt -aW +au br xl zJ xl lq xl -dl -dH +qj +be fQ -hB +Bl hE -hC -jD -kH +Bm +vP +xv +xr XR -Tz -qA -nA -sj -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -nA -sj -Jz -Jz -Jz -nA -NM -sj -Jz -qW -Nr -Nr -Nr -Nr -aa -Nr -Jz -Jz +pp +uO +uS +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uO +uS +uh +uh +uh +hl +lc +lp +uK +vx +vS +vD +vL +vY +wf +vD +xF +uK Jz Jz Jz @@ -31433,47 +37976,47 @@ Nr Nr Nr Nr -Nr +Jz Nr aa Jz -nA -Mj -Lq -GS -Hn -Hn -tw -Lq -GS -GS -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -Hn -Hn -Hn -Hn -Hn -Vu -pT -pp -xU +hl +fk +lz +ui +uh +uh +vx +lp +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +ui +uJ +lx +cg sC -YH -YH -at +fJ +ch +yX +Ij aB Ol OH -VG +aW Ij xl bE @@ -31481,53 +38024,53 @@ jd cr xl mP -sb +bh Ks BY -hF -hC -AI -AI +hA +RU +yZ +xs +ya XR -Tz -qA -nA -Lq -Hn -GS -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Vu -Lq -Hn -Hn -Hn -Vu -Mj -sj -Jz -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr +pp +hl +lp +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +hl +lp +uh +uh +uh +hl +lc +lp +uK +hl +fk +vE +vN +vZ +wh +vD +lp +uK Jz Jz Jz @@ -31639,97 +38182,97 @@ Nr Nr aa Jz -nA -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -NM -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -sj -pp -xU -sC +hl +fk +lz +hm +dj +dj +vb +lz +hm +hm +dj +dj +dj +dj +dj +hm +dj +dj +dj +dj +dj +dj +dj +dj +dj +uD +lp +cg sC +fJ +du sC -pj +Fa aC Fa kh -be -Fa +aX +dl xl Lj DS Ws xl -qj -dY +Bp +cA KD -RU +uI hG -PE -XR +RU XR +xr +ya XR -mJ -qA -TE -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -NM -sj -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr +pp +uJ +lz +dj +hm +dj +dj +dj +dj +dj +hm +dj +dj +dj +dj +dj +hm +dj +dj +dj +uD +lz +dj +dj +dj +uD +fk +lp +uK +hl +vS +vD +vO +vY +wi +vD +xF +uK Jz Jz Jz @@ -31840,100 +38383,100 @@ Nr Nr Nr aa -Nr -nA -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL +Jz +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +lc +lc +lc +fk +fk +fk +fk +fk +fk +fk Mj sj -pp -ac -RH -Iu -Cf -pj +cg +sC +sC +sC +sC +Fa aD -KB -vd -bh -bo +Ij +Fa +aY +Ij xl La Ih wj xl dk -eg -fI -MI -hH -PE -DG -Gq -Vn -id -qA -nA -Mj -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -sj +dH +dY +hC +bd +RU +XR +XR +XR +XR +pp +hl +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +lc +lz +dj +uD +fk +vD +vD +vD +vD +vD +lp +uK +Jz Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr Nr Nr @@ -32040,44 +38583,44 @@ Nr Nr Nr Nr -Nr -Nr +Jz +Jz qW -nA +hl +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL tL -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj tL Mj pT -pp -pp -pp -pp -CD -pj +cg +cg +cg +cg +sC +Fa aE -zg +ac oA qM tc @@ -32089,52 +38632,52 @@ xl mz sx Ks -nn +hD hJ -PE -Tz -qA -qA -qA -qA -nA -NM +RU +XR +pp +pp +pp +pp +hl +lc tL -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj tL -sj +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +fk +fk +fk +fk +fk +vz +fk +vz +fk +lp +uK Jz -Nr -Nr -Nr -aa -Nr -Nr -Nr -Nr -Nr -Nr Jz Jz Jz @@ -32241,101 +38784,101 @@ Jz Nr aa aa -Nr +Jz Nr Jz qW -nA -tL -En -qd -qd -qd -MF -qd -qd -qd -qd -qd -qd -qd -qd -qd -MF -qd -qd -qd -qd -MF -zp -Mj +hl tL -Mj -Lq -ab -vl -pp -pp -xU -pj +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +tL +fk +lz +hm +uW +cg +cg +sC aF -uq -nc -LO +Fa +Fa +sq +bo tc -YI -bn -Ok -qw -JM +tS +tV +tX +tY +tZ mz -vs +hg Dh -Dw +RU +RU hK -PE -mJ -qA -qA -hY -wQ -Vu -Mj -tL -NM -En -qd -qd -qd -qd -qd -qd -MF -qd -qd -qd -qd -qd -qd -qd -qd -qd -MF -qd -qd -zp +XR +pp +pp +vm +dj +uD +fk +tL +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +fk +fk +fk tL -sj -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr +uN +sD +fZ +fk +fk +fk +fk +fk +fk +lp +uK Jz Jz Jz @@ -32447,97 +38990,97 @@ aa Nr Jz qW -nA -tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -Mj +hl tL -Mj -Mj -Mj -Lq -vl -pp -xU -pj +jl +pK +pK +pK +vd +pK +pK +pK +pK +pK +pK +pK +pK +pK +vd +pK +pK +pK +pK +vd +ve +fk +tL +fk +fk +fk +lz +uW +cg +sC +Fa Ij -uq +Fa Ij tc tc -Sm -Fz +tT +tW Zd -Fz -Sm +tW +tT mz mz uI -Aw uI -PE -Tz -qA -hY -tw -Mj -NM -Mj +uI +RU +XR +pp +vm +vb +fk +lc +fk tL -Mj -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +lc +jl +pK +pK +pK +pK +pK +pK +vd +pK +pK +pK +pK +pK +pK +pK +pK +pK +vd +pK +pK +ve tL -sj -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz +lp +uK +hl +fk +fk +vy +fk +vy +fk +lp +uK Jz Jz Jz @@ -32649,97 +39192,97 @@ aa Nr Nr Jz -nA -tL -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr -Mj +hl tL -Mj -Mj -Mj -Mj -UW -pp -CD -pj -pj -Xj -pj +sM +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +fk +tL +fk +fk +fk +fk +lx +cg +sC +Fa +Fa +Bn +tc tc jR -Ob -KG +qw +tU Zd -KG -ER -Dd +tU +uc +ud mz -PE -io -PE -PE -Tz -qA -Zs -Mj -Mj -Mj -Mj -tL -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -qn -lb -lb -qn -lb -lb -lb -Mr +mz +Bo +RU +RU +XR +pp +hl +fk +fk +fk +fk +tL +fk +vn +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -pT -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Jz +lp +uK +hl +fk +vF +vF +vF +vF +vF +lp +uK Jz Jz Nr @@ -32804,146 +39347,146 @@ Jz Nr Nr Nr -aa -Nr -Nr -aa -aa -Nr -aa -Nr -Nr -Nr -Nr -Nr -Nr -aa -Nr -Nr -aa -aa -Nr -Nr -aa -Rw -Rw -mb -mb -mb -aa -Rw -Rw -Nr -Nr -aa -Nr -Nr -Nr -Nr -aa -aa -aa -aa -Nr -Jz -Jz -Nr -aa -Jz -Jz -nA -tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -Mj -tL -Mj -NM -Mj -Mj -ag -pp -ac -Iu -RH -Lf -pp -pp -pU -KG -KG -Zd -KG -KG -Vo -qA -qA -wK -Gq -Vn -vR -qA -Zs -Mj -Mj -Mj -NM -tL -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -vr -tL -sj -Jz -Jz -Nr +aa +Nr +Nr +aa +aa +Nr +aa Nr Nr Nr Nr Nr Nr -Jz +aa +Nr +Nr +aa +aa +Nr +Nr +aa +Rw +Rw +mb +mb +mb +aa +Rw +Rw +Nr +Nr +aa +Nr +Nr +Nr +Nr +aa +aa +aa +aa Nr +Jz +Jz Nr +aa +Jz +Jz +hl +tL +tR +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg +fk +tL +fk +lc +fk +fk +lp +cg +sC +sC +sC +sC +cg +cg +pU +tU +tU +Zd +tU +tU +ue +pp +pp +XR +XR +XR +XR +pp +hl +fk +fk +fk +lc +tL +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +ui +uh +uh +ui +uh +uh +uh +vg +tL +lp +uK +hl +vS +vF +vQ +wa +wk +vF +xF +uK +Jz +Jz Jz Jz Jz @@ -33053,99 +39596,99 @@ Nr Nr Jz Jz -TE +hl tL sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -vr -Mj -tL -Mj -Mj -Mj -Mj -sj +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +fk +tL +fk +fk +fk +fk +lp +cg +cg +cg +cg +cg +cg +bn +qw +tU +tU +Zd +tW +tU +uf +ug pp pp pp pp pp pp -EE -Ob -KG -KG -Zd -Fz -KG -RY -wy -qA -qA -qA -qA -qA -qA -nA -NM -Mj -Mj -Mj -tL -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -qn -lb -lb -vr +hl +lc +fk +fk +fk +tL +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +vf tL -sj -Jz -Jz -Jz +lp +uK +hl +fk +vG +vR +wb +wl +vF +lp +uK Jz -Nr -Nr -Nr -Nr -Nr -Nr Jz -Nr Jz Jz Jz @@ -33253,99 +39796,99 @@ Nr Nr Nr Nr -Nr Jz -nA +Jz +uJ tL sM -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -Mj -tL -Mj -Mj -NM -Mj -Lq -Hn -Hn -Hn -Hn -GS -GS -NM -Mj -Mj -NM +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +vf +fk +tL +fk +fk +lc +fk +lz +dj +dj +dj +dj +hm +hm +lc +fk +fk +lc Zd -Mj -Mj -Mj -NM -Hn +fk +fk +fk +lc +dj Hn GS Hn Hn Hn -Vu -Mj -Mj -Mj -Mj -tL -Mj -tR -lb -lb -qn -lb -qn -qn -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -qn -qn -lb -vr +uD +fk +fk +fk +fk +tL +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +ui +uh +uh +vf tL -pT -qW -Jz -Jz -Jz -Jz -Nr -Nr -Nr -Nr -Jz +lp +sd +hl +vS +vF +vV +wa +wm +vF +xF +uK Jz Jz Jz @@ -33453,34 +39996,34 @@ aa Nr Nr Nr -Nr -Nr -Nr Jz -nA +Jz +Jz +Jz +hl tL -tR -lb -qn -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -vr -NM +sM +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +fk pE Qi Qi @@ -33513,41 +40056,41 @@ Qi Qi Qi Qi -ZQ -Mj -sM -lb -lb -lb -lb -qn -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -vr +yP +fk +vn +uh +uh +ui +uh +ui +ui +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +ui +ui +uh +vf tL -sj -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Nr -Nr -Jz +lp +uK +hl +fk +vF +vF +vF +vF +vF +lp +uK Jz Jz Nr @@ -33655,102 +40198,102 @@ Nr Nr Nr Nr -Nr +Jz Nr Nr Jz -nA +hl tL -sM -lb -lb -lb -qn -qn -qn -lb -lb -qn -qn -qn -lb -lb -lb -lb -qn -lb -lb -qn -vr -Mj -Zd -wG -wg -wg -wg -wg -wg -Gb -wg -wg -Gb -Mj -Mj -NM -Mj -Mj +tR +uh +ui +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +vf +lc Zd -Mj -NM -Mj -Mj -Mj -wg -wg -wg -Gb -wg -wg -wg -wg -wg -OC +uN +sD +sD +sD +sD +sD +uE +sD +sD +uE +fk +fk +lc +fk +fk Zd -Mj -sM -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -qn -lb -lb -lb -qn -qn -lb -lb -lb -Mr +fk +lc +fk +fk +fk +sD +sD +sD +uE +sD +sD +sD +sD +sD +fZ +ca +fk +vo +uh +uh +uh +uh +ui +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj -Jz -Jz -Jz -Nr -Jz +lp +uK +xE +sD +sD +vU +sD +vU +sD +vv +uK Jz -Nr -Nr -Nr -Nr -Nr Jz Nr Nr @@ -33861,32 +40404,32 @@ Nr aa Jz Jz -nA +hl tL sM -lb -lb -qn -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -qn -vr -Mj +uh +uh +uh +ui +ui +ui +uh +uh +ui +ui +ui +uh +uh +uh +uh +ui +uh +uh +ui +vf +fk Zd -pT +lx jv jv jv @@ -33896,17 +40439,17 @@ jv jv jv jv -WO -Mj -Mj -Mj -Mj +vk +fk +fk +fk +fk Zd -Mj -Mj -Mj -NM -pK +fk +fk +fk +lc +vl HQ HQ HQ @@ -33916,45 +40459,45 @@ HQ HQ HQ HQ -nA +hl Zd -Mj -sM -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -vr -tL -pT -Jz -Jz -Jz -Nr -Jz -Jz -Jz -Nr +fk +vo +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +ui +uh +uh +uh +ui +ui +uh +uh +uh +vg +tL +lp +uK +uK +uK +uK +uK +uK +uK +uK +uK +uK Jz -Nr Jz Nr -Nr Jz Jz Nr @@ -34063,33 +40606,33 @@ Nr Nr Jz Jz -nA +hl tL sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -qn -qn -lb -lb -lb -vr -Mj +uh +uh +ui +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +ui +vf +fk Zd -Mj -SY +lc +mh jv uk ae @@ -34099,15 +40642,15 @@ ax KW jv Jz -WO -Mj -Mj -Mj +vk +fk +fk +fk Zd -Mj -Mj -Mj -pK +fk +fk +fk +vl Jz HQ Rr @@ -34117,45 +40660,45 @@ xJ hX zd HQ -yS -Mj +ut +fk Zd -NM -sM -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +vf tL -sj +lx +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz -Nr -Nr -Nr -Nr -Nr Jz Jz -Nr -Nr -Nr Nr Nr Jz @@ -34265,33 +40808,33 @@ Nr Nr Nr Jz -TE +hl tL sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -AW -lb -lb -qn -lb -qn -lb -lb -qn -lb -lj -Qi -Fx -Mj -Xq +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +ui +ui +uh +uh +uh +vf +fk +Zd +fk +mO CL ad af @@ -34302,13 +40845,13 @@ jv jv Jz Jz -WO -NM -NM +vk +lc +lc Zd -Mj -Mj -pK +fk +fk +vl Jz Jz HQ @@ -34319,44 +40862,44 @@ CE mv ie ii -mO -NM -WU -Qi -oo -lb -lb -qn -lb -lb -lb -lb -lb -lb -Lp -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +uu +lc +Zd +lc +vo +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz Jz Jz -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr Nr Nr Jz @@ -34467,33 +41010,33 @@ aa Nr Jz Jz -TE -QV -tR -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -qn -lb -Mr -Mj -Zd -Mj -uy +uJ +tL +sM +uh +uh +uh +uh +uh +uh +uh +uh +uh +un +uh +uh +ui +uh +ui +uh +uh +ui +uh +lj +Qi +Fx +fk +rB ww Zj uQ @@ -34505,11 +41048,11 @@ jv Jz Jz Jz -WO -Mj +vk +fk Zd -Mj -pK +fk +vl Jz Jz Jz @@ -34521,33 +41064,33 @@ mv mv qz EG -mh -NM -Zd -NM -sM -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +uv +lc +WU +Qi +oo +uh +uh +ui +uh +uh +uh +uh +uh +uh +um +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -34669,33 +41212,33 @@ aa Jz Jz Jz -nA +uJ QV -sM -lb -lb -lb -lb -qn -lb -lb -lb -qn -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -Mr -NM +tR +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +ui +uh +vg +fk Zd -Mj -uy +fk +rB ww lL uQ @@ -34708,9 +41251,9 @@ Jz qW Jz Jz -nA +hl Zd -sj +lp Jz Jz Jz @@ -34723,33 +41266,33 @@ CE CE qz EG -JQ -Mj +uw +fk Zd -NM -sM -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -Mr +lc +vo +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -sj +lp Jz Jz Nr @@ -34871,33 +41414,33 @@ Nr Nr Jz Jz -nA +hl QV sM -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -vr -NM +uh +uh +uh +uh +ui +uh +uh +uh +ui +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +vg +lc Zd -Mj -UI +fk +up jv jI ah @@ -34910,9 +41453,9 @@ Jz qW Jz Jz -nA +hl Zd -sj +lp Jz Jz Jz @@ -34925,33 +41468,33 @@ ZM ZM jQ HQ -Vc -Mj +ux +fk Zd -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -Mr +lc +vo +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +vg tL -pT +lp Jz Jz Jz @@ -35073,33 +41616,33 @@ aa aa Jz Jz -nA +hl QV -tR -lb -lb -lb -lb -lb -qn -lb -qn -qn -qn -lb -lb -qn -qn -lb -lb -lb -qn -lb -vr -NM +sM +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +vf +lc Zd -NM -FL +fk +uq jv Pm GP @@ -35112,9 +41655,9 @@ Jz Jz Jz Jz -nA +hl Zd -sj +lp Jz Jz Jz @@ -35127,33 +41670,33 @@ ZM ZM lJ HQ -Wp -NM -LC -Mj -tR -lb -qn -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr +uy +lc +Zd +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +vg tL -sj +lx Jz Jz Nr @@ -35275,33 +41818,33 @@ Nr Nr Nr Jz -TE -tL -sM -lb -qn -lb -lb -lb -lb -qn -qn -lb -qn -qn -lb -lb -qn -lb -lb -qn -qn -lb -vr -Mj +hl +QV +tR +uh +uh +uh +uh +uh +ui +uh +ui +ui +ui +uh +uh +ui +ui +uh +uh +uh +ui +uh +vf +lc Zd -Mj -Xq +lc +mO CL ad uQ @@ -35314,9 +41857,9 @@ Jz Jz Jz Jz -nA +hl Zd -sj +lp Jz Jz Jz @@ -35329,33 +41872,33 @@ CE mv ie sA -Ph -Mj -Zd -Mj -tR -lb -lb -lb -lb -qn -CS -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +uz +fk +LC +fk +vn +uh +ui +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg tL -pT +lp Jz Jz Nr @@ -35477,33 +42020,33 @@ Nr Nr aa Jz -TE -QV +uJ +tL sM -lb -lb -lb -lb -qn -qn -qn -lb -lb -lb -qn -lb -qn -qn -lb -lb -qn -lb -lb -vr -Mj +uh +ui +uh +uh +uh +uh +ui +ui +uh +ui +ui +uh +uh +ui +uh +uh +ui +ui +uh +vf +fk Zd -Mj -uy +fk +rB ww lL ah @@ -35516,9 +42059,9 @@ Jz Jz Jz Jz -nA +hl Zd -pT +lx Jz Jz Jz @@ -35531,33 +42074,33 @@ CE hM JV PA -JQ -Mj +uw +fk Zd -Mj -sM -lb -lb -lb -lb -CS -qn -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +fk +vn +uh +uh +uh +uh +ui +uj +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -sj +lx Jz Jz Nr @@ -35679,33 +42222,33 @@ Jz Jz Jz Jz -nA -tL +uJ +QV sM -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -qn -lb -qn -lb -lb -qn -CS -lb -lb -vr -Mj +uh +uh +uh +uh +ui +ui +ui +uh +uh +uh +ui +uh +ui +ui +uh +uh +ui +uh +uh +vf +fk Zd -Mj -rB +fk +ur CL kM ah @@ -35718,9 +42261,9 @@ Jz Jz Jz Jz -nA +hl Zd -pT +lx Jz Jz Jz @@ -35733,33 +42276,33 @@ mv ZM WN sA -xm -NM +uA +lc Zd -Mj -sM -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +uh +uj +ui +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -sj +lp Jz Jz Nr @@ -35881,33 +42424,33 @@ Nr Jz Jz Jz -nA +hl tL sM -qn -lb -lb -qn -qn -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -qn -lb -lb -lb -vr -Mj +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +ui +uh +ui +uh +uh +ui +uj +uh +uh +vf +fk Zd -Mj -WZ +fk +us jv vM ah @@ -35920,9 +42463,9 @@ Jz Jz Jz Jz -nA +hl Zd -pT +lx Jz Jz Jz @@ -35935,33 +42478,33 @@ Xp ZM wx HQ -JY -Mj +uB +fk Zd -Mj -tR -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -vr +fk +vo +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -36083,32 +42626,32 @@ Nr Jz Jz Jz -nA +hl tL sM -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -qn -lb -vr -Mj +ui +uh +uh +ui +ui +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +ui +uh +uh +uh +vf +fk Zd -sj +lp jv jv jv @@ -36122,9 +42665,9 @@ Jz Jz Jz Jz -nA +hl Zd -pT +lx Jz Jz Jz @@ -36138,32 +42681,32 @@ HQ HQ HQ HQ -nA +hl Zd -NM -sM -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr +fk +vn +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -36285,87 +42828,87 @@ Nr Nr Jz Jz -nA +hl tL -Eq -Pb -mY -mY -Pb -mY -mY -mY -mY -mY -mY -mY -mY -Pb -Pb -mY -mY -mY -mY -mY -kr -Mj +sM +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +ui +uh +vf +fk Zd -Lq -Hn -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -Hn -Hn -Vu -ca -Lq -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -GS -Hn -Hn -Vu -LC -Mj -Cq -mY -mY -mY -Pb -mY -mY -mY -mY -Pb -mY -mY -mY -mY -mY -mY -mY -mY -Pb -mY -wX +lp +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +hl +Zd +lx +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +hl +Zd +lc +vo +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg tL -sj +lp Jz Jz Nr @@ -36487,87 +43030,87 @@ aa aa Jz qW -TE -QV -NM -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj +hl +tL +hY +kt +rR +rR +kt +rR +rR +rR +rR +rR +rR +rR +rR +kt +kt +rR +rR +rR +rR +rR +vh +fk Zd -Mj -NM -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj +lz +dj +dj +dj +dj +dj +dj +hm +dj +dj +dj +dj +dj +dj +uD ca -Mj -NM -Mj -Mj -Mj -NM -Mj -NM -Mj -Mj -NM -NM -NM -Mj -Mj -Zd -Mj -Mj -Mj -Mj -NM -Mj -Mj -NM -Mj -Mj -NM -NM -Mj -Mj -Mj -NM -Mj -Mj -Mj -NM -Mj -Mj +lz +dj +dj +dj +dj +dj +hm +dj +dj +dj +dj +hm +dj +dj +uD +LC +fk +kr +rR +rR +rR +kt +rR +rR +rR +rR +kt +rR +rR +rR +rR +rR +rR +rR +rR +kt +rR +vi tL -pT +lp Jz Jz Nr @@ -36686,90 +43229,90 @@ Nr Nr Nr aa -aa -Jz -Jz -nA -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -Zd -tL -tL -tL +aa +Jz +Jz +uJ QV -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL +lc +fk +fk +lc +lc +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +lc +fk +fk +fk +fk +Zd +fk +lc +fk +lc +lc +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk ca -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL +fk +lc +fk +fk +fk +lc +fk +lc +fk +fk +lc +lc +lc +fk +fk Zd +fk +fk +fk +fk +lc +fk +fk +lc +fk +fk +lc +lc +fk +fk +fk +lc +fk +fk +fk +lc +fk +fk tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -sj +lx Jz Jz Jz @@ -36891,87 +43434,87 @@ Jz Jz Jz Jz -nA +hl +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL tL -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj Zd -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj +tL +tL +tL +QV +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL ca -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL Zd -Mj -NM -NM -Mj -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -NM tL -sj +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +lp Jz Jz Jz @@ -37093,87 +43636,87 @@ Jz Nr Jz Jz -nA +hl tL -En -qd -qd -qd -qd -qd -qd -qd -qd -qd -MF -qd -qd -qd -qd -qd -qd -qd -MF -MF -zp -Mj +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +lc +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk Zd -wG -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -Gb -Gb -TS +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +fk ca -wG -wg -wg -Gb -wg -wg -wg -wg -wg -wg -wg -wg -wg -wg -OC +fk +fk +fk +fk +fk +lc +fk +fk +lc +fk +fk +fk +fk +fk +fk Zd -NM -rR -qd -qd -qd -qd -MF -qd -qd -MF -qd -qd -MF -qd -qd -qd -qd -qd -qd -MF -qd -Te +fk +lc +lc +fk +fk +fk +lc +lc +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +lc tL -sj +lp Jz Jz Jz @@ -37295,87 +43838,87 @@ Nr Jz Jz Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -Mj +jl +pK +pK +pK +pK +pK +pK +pK +pK +pK +vd +pK +pK +pK +pK +pK +pK +pK +vd +vd +ve +fk Zd -sj -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -nA +uN +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +uE +uE +uH ca -sj -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -nA +uN +sD +sD +uE +sD +sD +sD +sD +sD +sD +sD +sD +sD +sD +fZ Zd -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -vr +lc +vp +pK +pK +pK +pK +vd +pK +pK +vd +pK +pK +vd +pK +pK +pK +pK +pK +pK +vd +pK +vq tL -sj +lp Jz Jz Jz @@ -37497,87 +44040,87 @@ aa Nr Jz Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -vr -Mj +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +fk Zd -sj +lp Rw -pN -aN -aN -aN -aN -aN -aN -tz -aN -aN -pN Rw -nA +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl ca -sj +lp Rw -pN -aN -aN -aN -tz -aN -aN -aN -aN -aN -pN Rw -nA +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl Zd -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -37699,34 +44242,34 @@ Nr Jz Jz Jz -nA +hl tL -sM -qn -qn -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -NM +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +vf +fk Zd -sj +lp Rw -aN +pN aN aN aN @@ -37736,50 +44279,50 @@ aN tz aN aN -aN +pN Rw -nA +hl ca -sj +lp Rw +pN aN aN -tz aN tz -tz aN -tz -tz aN aN +aN +aN +pN Rw -nA +hl Zd -Mj -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -Mr +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -pT +lp Jz Jz Nr @@ -37901,87 +44444,87 @@ Nr Jz Jz Jz -TE -QV -sM -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr -Mj +hl +tL +vo +ui +ui +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +lc Zd -sj +lp Rw aN aN aN aN -tz -tz aN aN aN +tz +aN aN aN Rw -nA +hl ca -sj +lp Rw aN aN -aN -aN -aN -aN tz aN +tz +tz aN +tz +tz aN aN Rw -nA +hl Zd -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vn +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +vg tL -sj +lx Jz Jz Nr @@ -38103,37 +44646,36 @@ Nr Nr Nr Jz -nA +uJ QV -sM -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -qn -lb -lb -qn -qn -lb -vr -Mj +vo +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf +fk Zd -sj +lp Rw aN aN aN -tz aN tz tz @@ -38141,10 +44683,11 @@ aN aN aN aN +aN Rw -nA +hl ca -sj +lp Rw aN aN @@ -38152,38 +44695,38 @@ aN aN aN aN -aN tz aN -tz +aN +aN aN Rw -nA +hl Zd -NM -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Nr Nr Nr @@ -38305,87 +44848,87 @@ Nr aa Nr Jz -nA +hl QV -sM -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -qn -lb -lb -qn -qn -qn -lb -qn -lb -vr -Mj +vo +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +ui +uh +uh +ui +ui +uh +vf +fk Zd -sj +lp Rw aN aN aN -aN -aN +tz aN tz tz aN aN aN +aN Rw -TE +hl ca -pT +lp Rw aN aN -tz -aN aN aN aN aN aN +tz aN +tz aN Rw -nA +hl Zd -Mj -sM -lb -lb -qn -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +lc +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +vf tL -sj +lp Jz Nr Nr @@ -38507,32 +45050,32 @@ Jz Jz Jz Jz -nA -tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -qn -lb -qn -lb -qn -lb -qn -lb -vr -Mj -LC -sj +hl +QV +vo +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +ui +uh +uh +ui +ui +ui +uh +ui +uh +vf +fk +Zd +lp Rw aN aN @@ -38540,54 +45083,54 @@ aN aN aN aN -aN tz tz aN aN +aN Rw -nA +uJ ca -pT +lx Rw aN aN tz -tz aN aN -tz -tz -tz +aN +aN +aN +aN aN aN Rw -TE +hl Zd -Mj -tR -lb -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +ui +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -sj +lp Jz Nr Nr @@ -38709,32 +45252,32 @@ aa DR Jz Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -qn -lb -lb -lb -qn -lb -vr -Mj -Zd -pT +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +ui +uh +ui +uh +ui +uh +ui +uh +vf +fk +LC +lp Rw aN aN @@ -38743,53 +45286,53 @@ aN aN aN aN -aN -aN +tz +tz aN aN Rw -nA +hl ca -sj +lx Rw aN aN -aN tz -aN -aN +tz aN aN tz tz +tz +aN aN Rw -TE +uJ Zd -Mj -sM -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vn +uh +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Nr Nr Nr @@ -38911,32 +45454,32 @@ aa Nr aa Jz -nA +hl tL -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -lb -qn -lb -vr -Mj +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +ui +uh +uh +uh +ui +uh +vf +fk Zd -sj +lx Rw aN aN @@ -38946,52 +45489,52 @@ aN aN aN aN +qd aN -aN -aN +qd Rw -nA +hl ca -sj +lp Rw +uh aN aN -tz -yY -tz -aN +mY aN aN aN aN tz +tz +aN Rw -nA +uJ Zd -Mj -sM -lb -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -39113,87 +45656,87 @@ Jz Nr Jz Jz -nA +hl tL -tR -qn -lb -lb -lb -lb -lb -lb -lb -lb -AW -lb -qn -qn -qn -lb -qn -lb -CS -lb -lj -Qi -Fx -sj +vn +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +uh +ui +uh +vf +fk +Zd +lp Rw -tz aN -tz aN aN aN aN aN aN -tz -aN -NL -wn -yi -wn -iW aN aN aN +uh +Rw +hl +ca +lp +Rw +uh +uh +tz +yY tz aN aN aN aN -tz -aN aN +tz Rw -nA -WU -Qi -oo -lb -lb -lb -lb -qn -lb -lb -lb -lb -Lp -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr +hl +Zd +fk +vo +uh +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Jz Nr @@ -39315,32 +45858,32 @@ Jz Jz Jz Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -qn -lb -qn -lb -CS -lb -vr -Mj -Zd -sj +vn +ui +uh +uh +uh +uh +uh +uh +uh +uh +un +uh +ui +ui +ui +uh +ui +uh +uj +uh +lj +Qi +Fx +lp Rw tz aN @@ -39348,19 +45891,19 @@ tz aN aN aN -tz -aN -aN -aN -aN -Rw -nA -ca -sj -Rw -aN aN aN +qd +ui +uh +NL +wn +yi +wn +iW +uh +uh +uh tz aN aN @@ -39370,32 +45913,32 @@ tz aN aN Rw -nA -Zd -Mj -sM -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -vr +hl +WU +Qi +oo +uh +uh +uh +uh +ui +uh +uh +uh +uh +um +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg tL -sj +lp Jz Jz Nr @@ -39517,87 +46060,87 @@ aa aa Jz Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -qn -lb -lb -lb -CS -lb -vr -Mj +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +ui +uh +ui +uh +uj +uh +vf +fk Zd -sj +lp Rw tz aN tz aN aN -tz -tz +aN tz aN aN -tz +qd +uh Rw -nA +hl ca -pT +lp Rw +uh +tw aN +mY aN aN aN aN -aN -aN -tz tz aN aN Rw -nA +hl Zd -Mj -sM -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -vr +fk +vo +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +vf tL -sj +lp Jz Nr Nr @@ -39719,87 +46262,87 @@ Nr Nr Nr Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -qn -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr -Mj +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +ui +uh +uh +uh +uj +uh +vf +fk Zd -sj +lp Rw tz aN -aN +tz aN aN tz -aN +tz tz aN aN -tz +mY Rw -nA +hl ca -pT +lx Rw -tz +uh +qd aN aN aN aN aN tz +tz aN aN -aN -tz Rw -TE -LC -Mj -sM -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -vr +hl +Zd +fk +vo +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +vf tL -pT +lp Jz Nr Nr @@ -39921,87 +46464,87 @@ Nr aa Nr Jz -nA +hl tL -sM -lb -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -Mr -NM +vo +uh +uh +uh +uh +uh +uh +ui +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg +fk Zd -sj +lp Rw +tz aN aN aN aN tz -tz aN tz -tz aN aN +tz Rw -nA +hl ca -sj +lx Rw tz aN aN aN -tz -tz -tz aN aN +tz +aN aN aN +tz Rw -nA +uJ LC -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +vf tL -sj +lx Jz Jz Jz @@ -40113,97 +46656,97 @@ aa Jz Jz Nr -Jz -Jz -Nr -Nr -Nr -Nr -Nr -Nr -aa -Jz -nA -tL -tR -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -vr -NM +Jz +Jz +Nr +Nr +Nr +Nr +Nr +Nr +aa +Jz +hl +tL +vo +uh +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vg +lc Zd -sj +lp Rw aN aN aN +aN tz tz aN -aN -aN +tz tz aN aN Rw -nA +hl ca -sj +lp Rw -aN +tz aN aN aN tz +tz +tz aN aN aN aN -tz -aN Rw -nA +hl LC -NM -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +fk +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Jz Jz @@ -40325,87 +46868,87 @@ Nr Nr aa Jz -nA -QV -tR -lb -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -vr -Mj +hl +tL +vn +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +vf +lc Zd -pT +lp Rw aN aN aN tz +tz aN aN aN +tz aN -yY aN -tz -qx -nA +Rw +hl ca -sj +lp Rw aN aN -tz -tz aN aN +tz aN aN aN aN +tz aN Rw -nA -Zd -NM -sM -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr +hl +LC +lc +vo +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf tL -sj +lp Jz Nr Nr @@ -40527,87 +47070,87 @@ Nr Nr Nr Jz -nA +hl QV -sM -lb -lb -qn -lb -lb -lb -lb -lb -qn -lb -lb -lb -lb -qn -lb -qn -qn -lb -lb -vr -Mj -LC -pT +vn +uh +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +vf +fk +Zd +lx Rw aN aN aN +tz aN aN aN aN +yY aN tz -tz -aN -Rw -TE -GH -sj +qx +hl +ca +lp Rw aN aN -aN +tz tz aN aN aN aN -tz -tz +aN +aN aN Rw -nA +hl Zd -Mj -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -qn -Mr -QV -sj +lc +vo +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +tL +lp Jz Jz Nr @@ -40729,87 +47272,87 @@ Nr Nr Nr Jz -TE +hl QV -sM -lb -lb -qn -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -Mj -Zd -sj +vo +uh +uh +ui +uh +uh +uh +uh +uh +ui +uh +uh +uh +uh +ui +uh +ui +ui +uh +uh +vf +fk +LC +lx Rw -pN -tz -tz -tz aN aN aN aN aN aN -pN +aN +aN +tz +tz +aN Rw -nA +uJ GH -sj -qx -pN -aN +lp +Rw aN aN aN +tz aN aN aN aN +tz +tz aN -pN Rw -nA +hl Zd -Mj -tR -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -lb -lb -vr +fk +vn +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +ui +vg QV -pT +lp Jz Jz Jz @@ -40931,87 +47474,87 @@ aa Nr Jz Jz -nA -tL -sM -lb -lb -qn -qn -qn -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -vr -NM +uJ +QV +vo +uh +uh +ui +uh +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +fk Zd -sj -Rw -Rw -qx -Rw -Rw -Rw -Rw -qx -Rw -Rw -Rw +lp Rw +pN +tz +tz +tz +aN +aN +aN +aN +aN +aN +pN Rw -nA -ca -pT +hl +GH +lp qx +pN +aN +aN +aN +aN +aN +aN +aN +aN +aN +pN Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -nA +hl Zd -Mj -sM -lb -lb -lb -qn -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -lb -vr -tL -pT +fk +vn +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +uh +uh +vf +QV +lx Jz Jz Jz @@ -41133,87 +47676,87 @@ Jz Jz Jz Jz -nA +hl tL -Cq -mY -mY -Pb -Pb -mY -mY -mY -Pb -Pb -mY -mY -mY -mY -mY -mY -mY -mY -mY -mY -wX -NM +vo +uh +uh +ui +ui +ui +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +vf +lc Zd -Lq -Hn -Hn -Hn -Hn -Hn -Hn -Hn -GS -GS -Hn -Hn -GS -GS -Vu -GH -Hv -Hn -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -Hn -Hn -GS -tw +lp +Rw +Rw +qx +Rw +Rw +Rw +Rw +qx +Rw +Rw +Rw +Rw +Rw +hl +ca +lx +qx +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl Zd -Mj -Cq -mY -mY -mY -mY -Pb -Pb -mY -mY -Pb -Pb -mY -mY -mY -mY -Pb -Pb -mY -mY -mY -wX +fk +vo +uh +uh +uh +ui +ui +uh +uh +uh +uh +uh +uh +uh +uh +uh +uh +ui +ui +uh +uh +vf tL -sj +lx Jz Jz Nr @@ -41335,87 +47878,87 @@ Jz Jz Jz Jz -nA +hl tL -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -NM -NM -Mj -Zd -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj +kr +rR +rR +kt +kt +rR +rR +rR +kt +kt +rR +rR +rR +rR +rR +rR +rR +rR +rR +rR +vi +lc +Zd +lz +dj +dj +dj +dj +dj +dj +dj +hm +hm +dj +dj +hm +hm +uD GH -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -NM -NM -NM -Mj -Mj -Mj +vw +dj +dj +dj +dj +dj +hm +dj +dj +dj +dj +dj +dj +hm +vb Zd -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -NM -Mj -Mj -NM -NM -NM -Mj -Mj -NM -Mj -Mj -Mj -Mj -Mj +fk +kr +rR +rR +rR +rR +kt +kt +rR +rR +kt +kt +rR +rR +rR +rR +kt +kt +rR +rR +rR +vi tL -sj +lp Jz Jz Jz @@ -41537,87 +48080,87 @@ Jz Jz Jz Jz -TE -QV -QV -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -tL -QV -QV -QV +hl tL +fk +fk +fk +lc +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk +fk +lc +lc +fk Zd -tL -tL -tL -tL -QV -QV -tL -tL -tL -tL -tL -tL -tL -tL -QV +fk +fk +fk +lc +fk +fk +fk +fk +fk +lc +fk +fk +fk +fk +fk GH -tL -tL -tL -tL -tL -QV -QV -tL -tL -tL -tL -tL -tL -tL -tL +fk +fk +fk +fk +fk +lc +fk +fk +fk +lc +lc +lc +fk +fk +fk Zd +fk +fk +fk +fk +fk +fk +fk +lc +lc +fk +fk +lc +lc +lc +fk +fk +lc +fk +fk +fk +fk +fk tL -tL -tL -tL -tL -tL -tL -tL -QV -QV -QV -QV -tL -QV -QV -QV -QV -tL -tL -tL -tL -tL -tL -sj +lp Jz Jz Jz @@ -41739,87 +48282,87 @@ Jz Nr aa Jz -TE +uJ QV -Mj -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -Mj -Mj -NM -NM -Mj -Mj -Mj +QV +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +tL +QV +QV +QV +tL Zd -Mj -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -NM -Mj -Mj -Mj -NM -NM -ca -Mj -Mj -Mj -Mj -NM -NM -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj +tL +tL +tL +tL +QV +QV +tL +tL +tL +tL +tL +tL +tL +tL +QV +GH +tL +tL +tL +tL +tL +QV +QV +tL +tL +tL +tL +tL +tL +tL +tL Zd -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -Mj -NM -NM -Mj -Mj tL -sj +tL +tL +tL +tL +tL +tL +tL +QV +QV +QV +QV +tL +QV +QV +QV +QV +tL +tL +tL +tL +tL +tL +lp Jz Jz Jz @@ -41941,87 +48484,87 @@ Nr Nr aa Nr -nA -tL -En -qd -qd -qd -MF -qd -qd -qd -MF -qd -qd -qd -qd -qd -qd -qd -MF -MF -qd -qd -zp -Mj +uJ +QV +fk +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lc +fk +fk +lc +lc +fk +fk +fk Zd -wG -wg -wg -Gb -wg -wg -wg -wg -wg -wg -wg -wg -Gb -Gb -OC +fk +fk +fk +lc +lc +fk +fk +fk +fk +lc +fk +fk +fk +lc +lc ca -wG -wg -wg -Gb -Gb -wg -wg -wg -wg -wg -Gb -wg -wg -wg -OC +fk +fk +fk +fk +lc +lc +fk +fk +fk +fk +fk +fk +fk +fk +fk Zd -Mj -En -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -MF -qd -qd -Te +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +fk +lc +lc +fk +fk tL -pT +lp Jz Jz Nr @@ -42143,87 +48686,87 @@ SQ Nr Nr Jz -nA +hl tL -sM -lb -qn -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -Mr -NM +jl +pK +pK +pK +vd +pK +pK +pK +vd +pK +pK +pK +pK +pK +pK +pK +vd +vd +pK +pK +ve +fk Zd -sj -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -nA +uN +sD +sD +uE +sD +sD +sD +sD +sD +sD +sD +sD +uE +uE +fZ ca -sj -Rw -Rw -qx -Rw -Rw -Rw -Rw -Rw -qx -Rw -Rw -Rw -Rw -nA +uN +sD +sD +uE +uE +sD +sD +sD +sD +sD +uE +sD +sD +sD +fZ Zd -Mj -sM -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -lb -qn -qn -lb -qn -vr +fk +jl +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +pK +vd +pK +pK +vq tL -sj +lx Jz Nr Jz @@ -42345,12 +48888,11 @@ Nr Nr Nr Jz -TE +hl tL -sM +vo lb qn -qn lb lb lb @@ -42359,51 +48901,52 @@ lb lb lb lb -qn -qn -qn lb lb lb -qn lb -vr -NM +lb +lb +lb +lb +qn +vg +lc Zd -sj +lp Rw -pN -tz -aN -aN -aN -aN -aN -aN -aN -tz -pN Rw -nA +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl ca -sj +lp Rw -pN -aN -aN -aN -aN -aN -aN -aN -aN -aN -pN Rw -nA +qx +Rw +Rw +Rw +Rw +Rw +qx +Rw +Rw +Rw +Rw +hl Zd -Mj -sM +fk +vo lb lb lb @@ -42420,12 +48963,12 @@ lb lb lb qn -lb +qn lb qn -vr +vf tL -sj +lp Jz Nr Nr @@ -42547,14 +49090,12 @@ aa Nr Jz Jz -nA +uJ tL -sM -lb +vo lb qn -lb -lb +qn lb lb lb @@ -42569,43 +49110,45 @@ qn lb lb lb -vr -Mj +qn +lb +vf +lc Zd -pT +lp Rw +pN tz aN aN aN -tz -tz aN -tz aN aN aN +tz +pN Rw -TE -GH -sj +hl +ca +lp Rw +pN aN aN aN aN aN -tz -aN aN aN aN aN +pN Rw -nA +hl Zd -Mj -sM +fk +vo lb lb lb @@ -42613,7 +49156,6 @@ lb lb lb lb -qn lb lb lb @@ -42621,13 +49163,14 @@ lb lb lb lb -qn lb +qn lb lb -vr +qn +vf tL -sj +lp Jz Jz Nr @@ -42749,14 +49292,12 @@ aa Nr Jz Jz -nA +hl tL -sM +vo lb lb qn -qn -lb lb lb lb @@ -42769,55 +49310,55 @@ lb lb qn qn +qn lb lb -vr -Mj +lb +vf +fk Zd -pT +lx Rw +tz aN aN aN -aN -aN -aN +tz +tz aN tz aN aN -tz +aN Rw -TE +uJ GH -pT +lp Rw aN aN +aN +aN +aN tz aN aN aN aN -tz -tz aN -tz Rw -nA +hl Zd -Mj -tR -qn +fk +vo lb lb lb lb lb -qn -qn lb lb +qn lb lb lb @@ -42825,11 +49366,13 @@ lb lb lb lb +qn lb lb -vr -QV -pT +lb +vf +tL +lp Jz Jz Nr @@ -42951,14 +49494,13 @@ Nr aa Jz Jz -nA +hl tL -sM -lb +vo lb lb qn -lb +qn lb lb lb @@ -42973,51 +49515,49 @@ lb qn qn lb -vr -Mj +lb +vf +fk Zd -pT +lx Rw aN aN -tz -aN aN aN aN aN aN tz +aN +aN tz Rw -nA -ca -pT +uJ +GH +lx Rw aN aN +tz aN aN aN aN +tz +tz aN -aN -aN -aN -aN +tz Rw -nA +hl Zd -Mj -sM -qn +fk +vn qn lb lb lb lb -qn -lb lb qn qn @@ -43029,9 +49569,12 @@ lb lb lb lb -Mr +lb +lb +lb +vf QV -sj +lx Jz Jz Nr @@ -43153,48 +49696,48 @@ aa aa Nr Jz -nA -QV -tR +hl +tL +vo lb lb lb qn -qn lb lb lb -qn lb lb lb lb -qn -qn +lb +lb +lb lb lb qn +qn lb -vr -Mj +vf +fk Zd -sj +lx Rw aN -tz aN tz -tz aN aN aN aN aN aN +tz +tz Rw -nA +hl ca -pT +lx Rw aN aN @@ -43208,20 +49751,20 @@ aN aN aN Rw -nA +hl Zd -Mj -sM -lb +fk +vo +qn qn lb lb lb lb +qn lb lb -lb -lb +qn qn lb lb @@ -43231,9 +49774,9 @@ lb lb lb lb -Mr -tL -sj +vg +QV +lp Jz Nr Nr @@ -43355,38 +49898,38 @@ aa Nr Jz Jz -TE +hl QV -tR -lb +vn lb lb lb qn +qn lb lb lb -lb +qn lb lb lb lb qn -lb +qn lb lb qn lb -vr -NM +vf +fk Zd -sj +lp Rw aN +tz aN -aN -aN -aN +tz +tz aN aN aN @@ -43394,28 +49937,28 @@ aN aN aN Rw -nA +hl ca -sj +lx Rw aN aN -tz -tz -tz aN -tz -tz +aN +aN +aN +aN +aN aN aN aN Rw -nA +hl Zd -NM -sM -lb +fk +vo lb +qn lb lb lb @@ -43427,15 +49970,15 @@ lb qn lb lb -qn -qn lb lb lb -qn -Mr +lb +lb +lb +vg tL -sj +lp Jz Jz Nr @@ -43557,17 +50100,17 @@ Nr Nr Jz Jz -TE -tL -sM +uJ +QV +vn lb lb lb lb +qn lb lb lb -qn lb lb lb @@ -43579,43 +50122,43 @@ lb lb qn lb -vr -Mj +vf +lc Zd -sj +lp Rw aN aN aN aN -tz aN aN aN -tz +aN +aN aN aN Rw -nA +hl ca -sj +lp Rw aN aN +tz +tz +tz aN -aN -aN -aN -aN -aN +tz +tz aN aN aN Rw -nA +hl Zd -NM -sM +lc +vo lb lb lb @@ -43630,14 +50173,14 @@ qn lb lb qn -lb qn lb lb lb -vr +qn +vg tL -sj +lp Jz Jz Nr @@ -43759,9 +50302,9 @@ Nr Nr Jz Jz -nA +uJ tL -sM +vo lb lb lb @@ -43769,58 +50312,55 @@ lb lb lb lb +qn +lb lb lb lb -qn lb -qn qn lb lb lb qn lb -vr -Mj +vf +fk Zd -sj +lp Rw aN aN -tz aN aN +tz +aN aN aN tz -tz -tz +qd aN Rw -nA +hl ca -sj +lp Rw aN +qd +aN aN aN aN aN -tz -tz aN aN aN aN Rw -nA +hl Zd -Mj -sM -lb -lb -qn +lc +vo lb lb lb @@ -43831,15 +50371,18 @@ lb lb lb lb +qn lb lb +qn lb +qn lb lb lb -vr +vf tL -pT +lp Jz Jz Jz @@ -43961,65 +50504,65 @@ aa Nr Nr Jz -nA +hl tL -sM +vo lb -qn lb lb lb lb -qn lb lb -AW lb lb -qn lb +qn lb +qn +qn lb lb lb +qn lb -lj -Qi -nU -sj +vf +fk +Zd +lp Rw -tz -aN -tz -aN -aN -tz aN -tz aN tz aN -NL -wn -yi -wn -iW aN aN aN +tz +tz +ui +qd +Rw +hl +ca +lp +Rw +uh +qd aN aN aN tz tz -tz +aN +aN aN aN Rw -nA -yV -Qi -oo +hl +Zd +fk +vo lb lb qn @@ -44029,7 +50572,6 @@ lb lb lb lb -Lp lb lb lb @@ -44039,9 +50581,10 @@ lb lb lb lb -vr +lb +vf tL -pT +lx Jz Jz Jz @@ -44163,75 +50706,75 @@ Nr Nr Jz Jz -nA +hl tL -sM -lb -lb -lb +vo lb +qn lb lb lb lb +qn lb lb +AW lb lb +qn lb lb lb -qn lb lb lb -vr -Mj -tL -sj +lj +Qi +nU +lp Rw -aN -aN tz aN tz -tz aN -tz aN tz aN -Rw -nA -ca -sj -Rw -aN -aN -aN -aN -aN +mY +uh +ui +uh +NL +wn +yi +wn +iW +uh +uh +qd aN aN aN tz tz +tz +aN aN Rw -nA -tL -Mj -sM +hl +yV +Qi +oo lb lb qn lb lb -qn lb lb lb lb +Lp lb lb lb @@ -44241,9 +50784,9 @@ lb lb lb lb -vr +vf tL -pT +lx Jz Jz Jz @@ -44365,14 +50908,15 @@ Nr Nr aa Jz -nA +hl tL -sM +vo +lb +lb lb lb lb lb -qn lb lb lb @@ -44382,35 +50926,32 @@ lb lb lb lb -qn qn lb lb lb -vr -NM -QV -pT +vf +fk +tL +lp Rw aN -tz -tz aN tz aN +tz +tz aN +mY aN -aN -aN -aN +mY +uh Rw -nA +hl ca -sj +lp Rw -aN -tz -aN +uh aN aN aN @@ -44418,34 +50959,36 @@ aN aN aN aN +tz +tz aN Rw -nA +hl tL -NM -tR +fk +vo lb lb +qn lb lb qn -qn lb lb lb -qn lb lb lb lb lb -qn -qn lb lb -vr +lb +lb +lb +vf tL -pT +lx Jz Jz Jz @@ -44567,16 +51110,14 @@ Nr Jz Jz Jz -nA +hl tL -sM -lb -lb -lb +vo lb lb lb lb +qn lb lb lb @@ -44587,17 +51128,19 @@ lb lb lb qn +qn lb lb -vr -Mj -tL -pT +lb +vf +lc +QV +lx Rw aN tz -aN tz +aN tz aN aN @@ -44606,48 +51149,48 @@ aN aN aN Rw -nA +hl ca -sj +lp Rw aN -tz +mY +aN +aN aN -tz aN aN aN aN aN -tz aN Rw -nA +hl tL -NM -sM +lc +vn lb lb lb lb qn +qn lb lb lb +qn lb lb lb lb lb +qn +qn lb lb -lb -lb -lb -lb -vr +vf tL -sj +lx Jz Jz Jz @@ -44769,10 +51312,9 @@ Jz Jz Jz Jz -TE +hl tL -sM -lb +vo lb lb lb @@ -44789,45 +51331,46 @@ lb lb lb lb +qn lb lb -Mr -Mj +vf +fk tL -pT +lx Rw aN -aN +tz aN tz +tz aN aN aN -tz -tz aN -tz +qd +aN Rw -TE -GH -sj +hl +ca +lp Rw aN tz aN +tz +aN aN aN -tz -tz aN aN tz aN Rw -nA +hl tL -Mj -sM +lc +vo lb lb lb @@ -44836,7 +51379,6 @@ qn lb lb lb -qn lb lb lb @@ -44847,9 +51389,10 @@ lb lb lb lb -vr +lb +vf tL -sj +lp Jz Jz Jz @@ -44971,65 +51514,65 @@ Nr Jz Jz Jz -TE +uJ tL -sM +vo lb -qn -qn lb lb lb -qn -qn lb lb lb lb -qn -qn -qn lb lb lb lb -vr -Mj +lb +lb +lb +lb +lb +lb +lb +vg +fk tL -pT +lx Rw aN aN -tz -tz aN +tz aN aN aN tz +tz aN -aN +tz Rw -nA +uJ GH -sj +lp Rw aN tz aN aN aN -aN +tz tz aN aN tz aN Rw -nA +hl tL -Mj -sM +fk +vo lb lb lb @@ -45037,7 +51580,7 @@ lb qn lb lb -qn +lb qn lb lb @@ -45049,9 +51592,9 @@ lb lb lb lb -vr +vf tL -sj +lp qW Jz Jz @@ -45173,34 +51716,35 @@ Nr aa Jz Jz -TE -QV -sM -lb +uJ +tL +vo lb qn qn lb lb lb +qn +qn lb lb lb lb qn qn +qn lb lb lb lb -lb -lb -vr -Mj +vf +fk tL -pT +lx Rw aN +aN tz tz aN @@ -45208,52 +51752,51 @@ aN aN aN tz -tz aN aN Rw -nA +hl GH -sj +lp Rw aN -aN +tz aN aN aN aN tz -tz +aN aN tz aN Rw -nA +hl tL -Mj -tR +fk +vo +lb lb lb lb -qn qn lb lb +qn +qn +lb lb lb lb lb lb lb -qn -qn lb lb lb -qn -vr +vf tL -sj +lp qW Jz Jz @@ -45375,13 +51918,13 @@ Nr Nr Jz Jz -nA +uJ QV -tR -lb +vo lb lb qn +qn lb lb lb @@ -45390,33 +51933,33 @@ lb lb lb qn +qn lb lb lb lb lb lb -lb -Mr -Mj -QV -pT +vf +fk +tL +lx Rw aN -aN tz +tz +aN aN aN aN tz tz aN -tz aN Rw -nA -ca -sj +hl +GH +lp Rw aN aN @@ -45424,22 +51967,21 @@ aN aN aN aN +tz +tz aN -aN -aN -aN +tz aN Rw -nA +hl tL -Mj -sM +fk +vn lb lb lb qn -lb -lb +qn lb lb lb @@ -45450,12 +51992,13 @@ lb lb qn qn -qn +lb +lb lb qn -Mr +vf tL -sj +lp qW qW Nr @@ -45577,12 +52120,13 @@ Nr Jz Jz Jz -nA -tL -tR +hl +QV +vn lb lb lb +qn lb lb lb @@ -45591,36 +52135,34 @@ lb lb lb qn -qn lb lb -qn -qn lb lb -qn -vr -NM +lb +lb +lb +vg +fk QV -sj +lx Rw -pN -aN -aN aN aN +tz aN aN aN +tz +tz aN +tz aN -pN Rw -nA +hl ca -sj +lp Rw -pN aN aN aN @@ -45630,20 +52172,17 @@ aN aN aN aN -pN +aN +aN Rw -nA +hl tL -NM -sM -lb -lb -lb -lb -lb +fk +vo lb lb lb +qn lb lb lb @@ -45654,10 +52193,14 @@ lb lb lb lb +qn +qn +qn lb -Mr +qn +vg tL -pT +lp Jz qW Jz @@ -45779,10 +52322,9 @@ aa Nr Jz Jz -nA +hl tL -sM -qn +vn lb lb lb @@ -45792,74 +52334,75 @@ lb lb lb lb -qn -lb -lb lb qn +qn lb lb +qn +qn lb lb -vr -NM -tL -sj -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw +qn +vf +lc +QV +lp Rw +pN +aN +aN +aN +aN +aN +aN +aN +aN +aN +pN Rw -nA +hl ca -sj -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw -Rw +lp Rw +pN +aN +aN +aN +aN +aN +aN +aN +aN +aN +pN Rw -nA +hl tL -Mj -sM +lc +vo +lb lb lb lb lb lb -qn -qn lb lb lb lb lb -qn -qn lb lb lb lb lb -Mr +lb +lb +lb +vg tL -sj +lx Jz qW Jz @@ -45981,87 +52524,87 @@ Nr Nr Jz Jz -nA +hl tL -Eq -Pb -mY -mY -mY -mY -Pb -Pb -mY -mY -mY -mY -Pb -mY -mY -mY -mY -mY -mY -mY -wX -NM +vo +qn +lb +lb +lb +lb +lb +lb +lb +lb +lb +qn +lb +lb +lb +qn +lb +lb +lb +lb +vf +lc tL -Lq -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Hn -GS -Hn -Hn -Hn -Vu +lp +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl ca -Lq -GS -Hn -GS -GS -Hn -Hn -Hn -Hn -Hn -GS -GS -Hn -Hn -tw +lp +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +Rw +hl tL -Mj -Cq -mY -mY -mY -mY -mY -mY -Pb -mY -mY -mY -mY -Pb -Pb -mY -mY -mY -mY -mY -mY -wX +fk +vo +lb +lb +lb +lb +lb +qn +qn +lb +lb +lb +lb +lb +qn +qn +lb +lb +lb +lb +lb +vg tL -sj +lp Jz Jz Jz @@ -46183,87 +52726,87 @@ Nr Nr aa Jz -nA -QV -QV -tL -tL -tL -tL -QV -QV -tL -tL -tL -tL -tL -QV -QV -tL -QV -tL -tL -tL -tL -QV -QV -tL -tL -tL -tL -tL -QV -QV -tL -tL -tL -tL -tL -tL -tL -tL -tL -Ep -QV -tL -tL -QV -og -QV -QV -tL -tL -QV -tL -QV -QV -tL -QV -tL -tL -QV -tL -tL -tL -tL -tL -tL -tL -QV -tL -tL -QV -QV -tL -tL -tL -tL -tL -tL +hl tL +hY +kt +rR +rR +rR +rR +kt +kt +rR +rR +rR +rR +kt +rR +rR +rR +rR +rR +rR +rR +vi +lc +tL +lz +dj +dj +dj +dj +hm +dj +dj +dj +dj +hm +dj +dj +dj +uD +ca +lz +hm +dj +hm +hm +dj +dj +dj +dj +dj +hm +hm +dj +dj +vb tL +fk +kr +rR +rR +rR +rR +rR +rR +kt +rR +rR +rR +rR +kt +kt +rR +rR +rR +rR +rR +rR +vi tL -sj +lp Jz Jz Jz @@ -46385,87 +52928,87 @@ Nr Nr aa Jz -GJ -Gb -wg -wg -wg -wg -wg -Gb -wg -wg -Gb -wg -wg -wg -wg -Gb -Gb -Gb -wg -wg -Gb -wg -Gb -wg -wg -wg -wg -wg -Gb -Gb -wg -wg -wg -Gb -wg -wg -Gb -wg -Gb -NM -NM -Mj -wg -wg -wg -wg -wg -wg -wg -wg -Gb -wg -wg -wg -wg -Gb -wg -Gb -Gb -wg -wg -wg -Gb -wg -wg -wg -wg -wg -Gb -Gb -wg -wg -wg -wg -wg -wg -Gb -wg -wg -wg -EQ +hl +QV +QV +tL +tL +tL +tL +QV +QV +tL +tL +tL +tL +tL +QV +QV +tL +QV +tL +tL +tL +tL +QV +QV +tL +tL +tL +tL +tL +QV +QV +tL +tL +tL +tL +tL +tL +tL +tL +tL +Ep +QV +tL +tL +QV +og +QV +QV +tL +tL +QV +tL +QV +QV +tL +QV +tL +tL +QV +tL +tL +tL +tL +tL +tL +tL +QV +tL +tL +QV +QV +tL +tL +tL +tL +tL +tL +tL +tL +tL +lp Jz Jz Jz @@ -46587,87 +53130,87 @@ Nr Nr Jz Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -Jz -Jz -Jz -Jz -Jz -Jz -Jz -qW -qW -Jz -Jz -Jz +vu +uE +sD +sD +sD +sD +sD +uE +sD +sD +uE +sD +sD +sD +sD +uE +uE +uE +sD +sD +uE +sD +uE +sD +sD +sD +sD +sD +uE +uE +sD +sD +sD +uE +sD +sD +uE +sD +uE +lc +lc +fk +sD +sD +sD +sD +sD +sD +sD +sD +uE +sD +sD +sD +sD +uE +sD +uE +uE +sD +sD +sD +uE +sD +sD +sD +sD +sD +uE +uE +sD +sD +sD +sD +sD +sD +uE +sD +sD +sD +vv Jz Jz Jz diff --git a/maps/outreach/outreach-4.dmm b/maps/outreach/outreach-4.dmm index 51fc65971c3..eaeaf80d45b 100644 --- a/maps/outreach/outreach-4.dmm +++ b/maps/outreach/outreach-4.dmm @@ -3,19 +3,14 @@ /turf/exterior/wall/outreach/mountain, /area/exoplanet/outreach/sky) "ab" = ( -/obj/structure/lattice, -/obj/structure/sign/deck/fourth{ - dir = 1; - icon_state = "deck-4"; - pixel_y = -32 - }, -/obj/machinery/light/small, -/obj/structure/disposalpipe/down{ - icon_state = "pipe-d"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 2; + icon_state = "11" }, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/f1) +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) "ac" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -28,28 +23,34 @@ /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) "ad" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; dir = 1 }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) +/area/outreach/outpost/maint/waste/f1) "ae" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/floor1) "af" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -58,8 +59,8 @@ /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) "ag" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/hallway/south/floor1) +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/west) "ah" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/vacant/f1/swroom) @@ -68,7 +69,7 @@ /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) "aj" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/vacant/f1/swroom) "ak" = ( /obj/effect/floor_decal/industrial/traffic/corner{ @@ -78,14 +79,23 @@ /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) "al" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/vacant/f1/swroom) +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) "am" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, +/obj/effect/catwalk_plated, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"an" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) "ao" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -98,33 +108,179 @@ /obj/effect/shuttle_landmark/automatic, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"aq" = ( +/obj/machinery/atmospherics/pipe/zpipe/down{ + icon_state = "down"; + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/sign/warning/fall{ + pixel_y = 24 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/open, +/area/outreach/outpost/maint/waste/f1) +"ar" = ( +/obj/structure/sign/warning/nosmoking_1{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"as" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"at" = ( +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) "au" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"av" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/down, +/turf/open, +/area/outreach/outpost/maint/waste/f1) +"aw" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/room) +"ax" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"ay" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"az" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"aA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) +/area/outreach/outpost/hallway/north/floor1) +"aB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"aC" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) "aD" = ( /obj/structure/cable/yellow{ icon_state = "32-1" }, /obj/structure/lattice, -/turf/simulated/open, +/obj/effect/catwalk_plated, +/turf/open, /area/exoplanet/outreach/sky) "aE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"aF" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"aG" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"aH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/floor1) "aI" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -132,62 +288,168 @@ /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) "aJ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"aK" = ( -/obj/structure/ladder, -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - icon_state = "down-supply"; - dir = 1 +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - icon_state = "down-scrubbers"; - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/simulated/open, -/area/outreach/outpost/maint/atmos/f1) -"aO" = ( -/obj/machinery/atmospherics/unary/tank/air/airlock{ - icon_state = "air_mapped"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"aY" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"aZ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 1 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/waste/f1) +"aK" = ( /obj/machinery/door/airlock/hatch/maintenance{ icon_state = "closed"; - dir = 1 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/floor1) -"bb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/atmos/f1) +"aL" = ( +/turf/simulated/wall, +/area/outreach/outpost/hallway/west/floor1) +"aM" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/office10) +"aN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"aO" = ( +/obj/machinery/atmospherics/unary/tank/air/airlock{ + icon_state = "air_mapped"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"aP" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/office10) +"aQ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/northeast) +"aR" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"aS" = ( +/turf/simulated/wall, +/area/outreach/outpost/stairwell/floor1) +"aT" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/swroom) +"aU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"aV" = ( /obj/structure/cable/yellow{ icon_state = "0-2" }, /obj/machinery/power/apc{ icon_state = "apc0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"aW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"aX" = ( +/obj/machinery/light{ + icon_state = "tube_map"; dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) +/area/outreach/outpost/vacant/f1/office10) +"aY" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"aZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/northwest) +"ba" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"bb" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) "bc" = ( /obj/effect/catwalk_plated, /obj/structure/cable/white{ @@ -195,6 +457,37 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"bd" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/northwest) +"be" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"bf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) "bg" = ( /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ cycle_to_external_air = 1; @@ -235,8 +528,16 @@ icon_state = "bulb_map"; dir = 4 }, +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/airlock/floor1) +"bi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall, +/area/outreach/outpost/hallway/west/floor1) "bj" = ( /obj/effect/floor_decal/industrial/traffic/corner{ icon_state = "stripecorner"; @@ -245,6 +546,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) +"bk" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) "bl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/airlock_sensor/wired{ @@ -259,6 +567,22 @@ /obj/structure/cable/white, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"bm" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) "bn" = ( /obj/effect/floor_decal/industrial/traffic/corner{ icon_state = "stripecorner"; @@ -276,116 +600,106 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"br" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 +"bp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/floor1) +"bq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"bs" = ( -/obj/structure/cable/yellow{ +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/structure/cable/white{ icon_state = "4-8" }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"br" = ( /obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"bs" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/wallframe_spawn/reinforced/concrete, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/floor1) +/area/outreach/outpost/hallway/north/floor1) "bt" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) "bu" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ icon_state = "map-supply"; - dir = 1 + dir = 4 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/floor1) +/area/outreach/outpost/maint/atmos/f1) "bv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"bw" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/floor1) +"bx" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 5 + }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/floor1) -"bw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/floor1) -"bx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 5 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 8 +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 8 }, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/east/floor1) @@ -462,20 +776,57 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"bD" = ( +/obj/machinery/light_switch, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest) +"bE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"bF" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) "bG" = ( /turf/simulated/wall/r_wall, /area/outreach/outpost/maint/power/f1) "bH" = ( -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 +/obj/machinery/alarm, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) +/area/outreach/outpost/hallway/central/floor1) "bI" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/east/floor1) "bJ" = ( /obj/machinery/power/smes/buildable/max_cap_in_out, @@ -484,19 +835,67 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/f1) +"bK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) "bL" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 1; - icon_state = "securearea"; - pixel_y = -32 +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/east/floor1) +"bM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"bN" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/west) "bO" = ( /obj/effect/floor_decal/industrial/traffic/corner, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) +"bP" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/northeast) +"bQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) "bR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/light/small/wired{ @@ -510,19 +909,24 @@ /obj/structure/cable/white, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 6 +"bS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"bT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/floor1) +"bU" = ( /obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "0-4" + icon_state = "32-8" }, -/turf/simulated/floor/airless, +/turf/open, /area/exoplanet/outreach/sky) "bV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -535,6 +939,78 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"bW" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northwest) +"bX" = ( +/obj/machinery/alarm, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"bY" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged/airless, +/area/exoplanet/outreach/sky) +"bZ" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"ca" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"cb" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cc" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"cd" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"ce" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) "cf" = ( /obj/machinery/door/airlock/hatch/maintenance{ icon_state = "closed"; @@ -555,472 +1031,5878 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"ci" = ( -/obj/machinery/light_switch, -/obj/item/clothing/head/chicken, -/obj/item/clothing/suit/chickensuit, +"ch" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, /obj/structure/cable/white{ - icon_state = "2-8" + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"ci" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northwest) "cj" = ( /turf/exterior/planet_edge, /area/exoplanet/outreach/sky) -"cp" = ( +"ck" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"cl" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"cm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"cn" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"co" = ( /obj/structure/cable/yellow{ icon_state = "1-8" }, +/obj/effect/catwalk_plated, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"cq" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/f1/southeast) -"cC" = ( +"cp" = ( /obj/structure/cable/yellow{ icon_state = "32-2" }, /obj/structure/lattice, -/turf/simulated/open, +/obj/effect/catwalk_plated, +/turf/open, /area/exoplanet/outreach/sky) -"cN" = ( +"cq" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"cr" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"cs" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"ct" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"cu" = ( +/obj/structure/skele_stand, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/floor1/se) +"cv" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/stairwell/floor1/se) +"cw" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cx" = ( +/turf/simulated/wall, +/area/outreach/outpost/stairwell/floor1/se) +"cy" = ( +/turf/simulated/wall, +/area/outreach/outpost/maint/passage/f1/south) +"cz" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cA" = ( +/obj/structure/railing/mapped/stairwell, +/turf/open, +/area/outreach/outpost/stairwell/floor1/se) +"cB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cC" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"cD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cE" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"cF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cI" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cJ" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"cK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"cM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/airless, /area/exoplanet/outreach/sky) +"cO" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"cP" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"cR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cT" = ( +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"cU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) "cV" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 1 }, -/obj/machinery/atmospherics/unary/tank/air/airlock{ - icon_state = "air_mapped"; +/obj/machinery/atmospherics/unary/tank/air/airlock{ + icon_state = "air_mapped"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"cW" = ( +/obj/structure/sign/deck/fourth{ + pixel_y = 32 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cX" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"cY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"cZ" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"da" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"db" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor/autoset, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/east/floor1) +"dc" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) +"dd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"de" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/floor1/se) +"df" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"dg" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"dh" = ( +/obj/structure/sign/warning/engineering_access{ + pixel_y = 32 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"di" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"dj" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"dk" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/west) +"dl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) +"dm" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dn" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"do" = ( +/obj/structure/railing/mapped, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dp" = ( +/obj/effect/floor_decal/techfloor/corner{ + icon_state = "techfloor_corners"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dq" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dr" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"ds" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"dt" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"du" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dv" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/northeast) +"dw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dx" = ( +/obj/effect/floor_decal/techfloor/corner{ + icon_state = "techfloor_corners"; + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"dy" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) +"dz" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + icon_state = "down-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + icon_state = "down-scrubbers"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/atmos/f1) +"dA" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"dB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"dC" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"dD" = ( +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/stairwell/floor1/se) +"dE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"dF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"dG" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"dH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/floor1) +"dI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"dJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dN" = ( +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dO" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/central/floor1) +"dP" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"dR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"dS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest) +"dT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"dU" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/southwest) +"dV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + 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/outreach/outpost/hallway/central/floor1) +"dW" = ( +/obj/structure/cable/yellow{ + icon_state = "32-4" + }, +/obj/structure/lattice, +/obj/structure/sign/deck/fourth{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/power/f1) +"dX" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/floor1) +"dY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/floor1) +"dZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/floor1) +"ea" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/floor1) +"eb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"ec" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/east/floor1) +"ed" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"ee" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/abstract/landmark/skip_test, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"ef" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/east/floor1) +"eg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"eh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/autoset, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/floor1) +"ei" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"ej" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"ek" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"el" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"em" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/floor1) +"en" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/wallframe_spawn/reinforced/concrete, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"eo" = ( +/obj/structure/sign/deck/fourth{ + pixel_y = 32 + }, +/obj/structure/railing/mapped/stairwell, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ep" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"eq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"er" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"es" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"et" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"eu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ev" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ew" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ex" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ey" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"ez" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"eA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/floor1) +"eB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"eC" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"eD" = ( +/obj/structure/railing/mapped/stairwell, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"eE" = ( +/obj/structure/railing/mapped/stairwell, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"eF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"eG" = ( +/turf/open, +/area/outreach/outpost/stairwell/floor1/se) +"eH" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"eI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"eJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"eK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"eL" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/floor1) +"eM" = ( +/turf/simulated/wall, +/area/outreach/outpost/hallway/west/south/floor1) +"eN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"eO" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"eP" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/maint/passage/f1/south) +"eQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/south) +"eR" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/airlock/floor1) +"eS" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"eT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/south) +"eU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/west) +"eV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"eW" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"eX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"eY" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"eZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/west) +"fa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fb" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"ff" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"fg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"fh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"fi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"fj" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"fk" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"fl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"fm" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"fn" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/autoset, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fo" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"fp" = ( +/obj/structure/sign/warning/engineering_access{ + dir = 8; + icon_state = "securearea"; + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/floor1) +"fq" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/floor1) +"fr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/north/floor1) +"fs" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/north/floor1) +"ft" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"fu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fv" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fw" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"fx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fy" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"fA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fC" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fD" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/floor1) +"fE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"fF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"fG" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"fH" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/floor1) +"fI" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/central/floor1) +"fK" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"fL" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"fM" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/floor1) +"fN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/west/floor1) +"fO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"fP" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fQ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"fR" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fS" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fT" = ( +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"fU" = ( +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"fV" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"fW" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"fX" = ( +/obj/machinery/alarm, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"fY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"fZ" = ( +/obj/structure/sign/warning/engineering_access{ + dir = 1; + icon_state = "securearea"; + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"ga" = ( +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/hallway/south/floor1) +"gb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"gc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/sign/warning/moving_parts{ + dir = 1; + icon_state = "movingparts"; + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"gd" = ( +/obj/structure/sign/warning/engineering_access{ + dir = 8; + icon_state = "securearea"; + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"ge" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"gf" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"gg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"gh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/floor1) +"gi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"gj" = ( +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"gk" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/hallway/west/south/floor1) +"gl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"gm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"gn" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"go" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"gp" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"gq" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"gr" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"gs" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"gt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"gu" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"gv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/autoset, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/obj/structure/tape_barricade/door/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/room) +"gw" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"gx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"gy" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/room) +"gz" = ( +/obj/structure/lattice, +/obj/structure/sign/deck/fourth{ + dir = 1; + icon_state = "deck-4"; + pixel_y = -32 + }, +/obj/machinery/light/small, +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 1 + }, +/turf/open, +/area/outreach/outpost/maint/atmos/f1) +"gA" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/cap{ + icon_state = "pipe-cap"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"gB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"gC" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"gD" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"gE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor/autoset{ + icon_state = "open"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/northeast) +"gF" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/southeast) +"gG" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"gH" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/maint/passage/f1/south) +"gI" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/south/floor1) +"gJ" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"gK" = ( +/obj/structure/catwalk, +/turf/open, +/area/exoplanet/outreach/sky) +"gL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/harvesting/power) +"gM" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/open, +/area/exoplanet/outreach/sky) +"gN" = ( +/obj/structure/railing/mapped, +/obj/structure/catwalk, +/turf/open, +/area/exoplanet/outreach/sky) +"gO" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 9 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gP" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gQ" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/open, +/area/exoplanet/outreach/sky) +"gR" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/turf/open, +/area/exoplanet/outreach/sky) +"gS" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 5 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gT" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 8 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gU" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gV" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp, +/obj/structure/cable/white, +/obj/machinery/power/terminal, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/harvesting/power) +"gX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gY" = ( +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"gZ" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"ha" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hb" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 9 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hc" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 5 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hd" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb1, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"he" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hf" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 10 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hg" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb2, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hi" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 5 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hj" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 8 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hk" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 6 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hl" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 5 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hm" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 10 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hn" = ( +/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 6 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"ho" = ( +/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 10 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hp" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 6 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hq" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 9 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hr" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hs" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"ht" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hu" = ( +/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hv" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hw" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + icon_state = "map"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hy" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hz" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hA" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + icon_state = "11"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hC" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hD" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hE" = ( +/obj/structure/lattice, +/obj/structure/ladder, +/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ + icon_state = "down"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "32-1" + }, +/turf/open, +/area/exoplanet/outreach/sky) +"hF" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb3, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hG" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb1{ + icon_state = "map_vent_in"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb2{ + icon_state = "map_vent_in"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hJ" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + icon_state = "warning_dust"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/cabled/siphon/on/harvester/nb3{ + icon_state = "map_vent_in"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hL" = ( +/turf/simulated/wall/r_ocp, +/area/outreach/outpost/harvesting/power) +"hM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hN" = ( +/obj/machinery/power/smes/buildable/outpost_substation, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating/outreach, +/area/outreach/outpost/harvesting/power) +"hO" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/door/osmium{ + icon_state = "metal"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/harvesting/power) +"hP" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hS" = ( +/obj/effect/catwalk_plated, +/obj/structure/sign/warning/high_voltage{ + icon_state = "shock"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hT" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/junction/mirrored{ + icon_state = "pipe-j2"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"hU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hW" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/sky) +"hZ" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"ia" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 4 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"ib" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/arrivals/lobby) +"ic" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/arrivals/office) +"id" = ( +/obj/machinery/network/relay/wall_mounted/outreach{ + icon_state = "wall_router"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"ie" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/wallframe_spawn/reinforced/steel, +/turf/simulated/floor/plating, +/area/outreach/outpost/arrivals/entrance) +"if" = ( +/obj/structure/railing/mapped, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"ig" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/arrivals/entrance) +"ih" = ( +/turf/simulated/wall, +/area/outreach/outpost/arrivals/entrance) +"ii" = ( +/obj/structure/barricade, +/turf/simulated/floor/plating, +/area/outreach/outpost/arrivals/entrance) +"ij" = ( +/turf/simulated/wall, +/area/outreach/outpost/arrivals/teleporter) +"ik" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"il" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"im" = ( +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"in" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/camera/network/security, +/obj/machinery/alarm, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"io" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northwest) +"ip" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"iq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/item/radio/intercom, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"ir" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"is" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"it" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/central/floor1) +"iu" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"iv" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/door/airlock/command/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/arrivals/lobby) +"iw" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"ix" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"iy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"iz" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 9 + }, +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"iA" = ( +/obj/machinery/alarm, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"iB" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 + }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"iC" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest) +"iD" = ( +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"iE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iG" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"iH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/obj/structure/sign/department/id_office{ + icon_state = "id"; + dir = 1 + }, +/obj/machinery/photocopier, +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iI" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"iK" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iL" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/machinery/door/blast/shutters/open/arrival{ + icon_state = "open"; + dir = 4 + }, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/arrivals/lobby) +"iM" = ( +/turf/open, +/area/exoplanet/outreach/sky) +"iN" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"iO" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"iP" = ( +/obj/machinery/holomap, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"iQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/entrance) +"iR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"iS" = ( +/obj/machinery/arrival_spawner, +/turf/simulated/floor/bluegrid, +/area/outreach/outpost/arrivals/teleporter) +"iT" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) +"iU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"iV" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"iW" = ( +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"iX" = ( +/turf/simulated/wall/prepainted/command, +/area/outreach/outpost/command/arrivals/lobby) +"iY" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/arrivals/office) +"iZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open/arrival, +/obj/effect/wallframe_spawn/reinforced/prepainted/command, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/arrivals/office) +"ja" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/steel, +/obj/machinery/door/blast/shutters/open/arrival, +/turf/simulated/floor/plating, +/area/outreach/outpost/arrivals/lobby) +"jb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/arrivals/lobby) +"jc" = ( +/turf/simulated/wall, +/area/outreach/outpost/arrivals/lobby) +"jd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"je" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"jf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + icon_state = "techfloor_edges"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/arrivals/teleporter) +"jg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/command/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/command/arrivals/lobby) +"jh" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/machinery/power/apc/super{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/light_switch/on, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"ji" = ( +/obj/structure/disposalpipe/junction, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jk" = ( +/obj/machinery/computer/modular/preset/outreach/command, +/obj/machinery/alarm, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jl" = ( +/obj/machinery/light_switch/on{ + icon_state = "light0"; + dir = 4 + }, +/obj/structure/table/plastic, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jn" = ( +/obj/structure/sign/poster/bay_21, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"jo" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 2 + }, +/obj/structure/sign/poster/bay_49, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jp" = ( +/obj/structure/sign/poster/bay_19, +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 2 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jq" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/steel, +/turf/simulated/floor/plating, +/area/outreach/outpost/arrivals/teleporter) +"jr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/arrivals/teleporter) +"js" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"ju" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"jv" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jw" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"jy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jz" = ( +/obj/effect/catwalk_plated, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"jA" = ( +/obj/structure/sign/deck/fourth{ + icon_state = "deck-4"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"jB" = ( +/obj/structure/bed/chair{ + icon_state = "chair"; + dir = 2 + }, +/obj/machinery/holomap, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jC" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/door/blast/shutters/open/arrival{ + icon_state = "open"; + dir = 4 + }, +/obj/machinery/door/window/outreach/arrivals{ + icon_state = "left"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/command/arrivals/office) +"jD" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/structure/sign/department/id_office{ + icon_state = "id"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"jE" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jF" = ( +/obj/structure/sign/department/id_office{ + icon_state = "id"; + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"jH" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/structure/sign/poster/bay_4, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/floor1/se) +"jI" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/item/paper_bin, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"jL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"jM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jQ" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jS" = ( +/obj/structure/disposaloutlet{ + dir = 2; + name = "disposal outlet (arrival delivery)" + }, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/cee{ + icon_state = "stripecee"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jT" = ( +/obj/structure/disposalpipe/sortjunction/arrival, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/structure/bed/chair/office/dark{ + icon_state = "officechair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"jW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"jY" = ( +/turf/open, +/area/outreach/outpost/stairwell/floor1/command) +"jZ" = ( +/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"ka" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/blue, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"kb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"kc" = ( +/obj/machinery/computer/modular/preset/outreach/command{ + icon_state = "console-off"; + dir = 1 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"kd" = ( +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"ke" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"kf" = ( +/obj/machinery/light, +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"kg" = ( +/obj/machinery/faxmachine/mapped/outreach/arrival, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"kh" = ( +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"ki" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/bed/chair{ + icon_state = "chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"kj" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/stairwell/floor1/command) +"kk" = ( +/obj/structure/cryofeed{ + icon_state = "cryo_rear"; + dir = 2 + }, +/obj/machinery/cryopod/despawner/arrival{ + icon_state = "body_scanner_0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"kl" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/bananapeel, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/south) +"km" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"kn" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 8 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"ko" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kp" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"kq" = ( +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"kr" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"ks" = ( +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"kt" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"ku" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/small/backroom) +"kv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kw" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"ky" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"kz" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/storefront/small) +"kA" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/storefront/small) +"kB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/civilian/outreach, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/storefront/small) +"kC" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/f1/office10) +"kD" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"kE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kH" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/office11) +"kI" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/storefront/large) +"kJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/civilian/outreach, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/storefront/large) +"kK" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/storefront/large) +"kL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"kM" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"kN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"kP" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"kR" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"kS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"kT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"kU" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kW" = ( +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"kX" = ( +/obj/abstract/map_data{ + height = 4; + name = "Outreach Map Data" + }, +/turf/exterior/planet_edge, +/area/exoplanet/outreach/sky) +"kY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"kZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"la" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"lb" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lc" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"ld" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"le" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lh" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/civilian/outreach{ + icon_state = "closed"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/office10) +"li" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/f1/storefront/small) +"lj" = ( +/obj/machinery/door/firedoor, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/f1/storefront/large) +"lk" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/civilian/outreach, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/tape_barricade/door/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/storefront/small) +"ll" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"lm" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"ln" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"lo" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"lp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"lq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"lr" = ( +/obj/structure/cable/yellow, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"ls" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"lt" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/civilian/outreach, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/tape_barricade/door/engineering, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/storefront/large) +"lu" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"lv" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 + }, +/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/vacant/f1/office11) +"lw" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"lx" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"ly" = ( +/obj/machinery/alarm, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"lz" = ( +/turf/simulated/wall, +/area/outreach/outpost/vacant/f1/office11) +"lA" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"lB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lD" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"lE" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"lF" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"lH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"lI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lJ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lK" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"lL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lM" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"lN" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lO" = ( +/obj/machinery/power/apc, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/vacant/f1/storefront/large/backroom) +"lP" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"lQ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"lR" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"lS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"lT" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"lU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"lV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"lW" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lX" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lY" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"lZ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"ma" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"mb" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"md" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"me" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + icon_state = "light0"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mh" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/south/floor1) +"mj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/woodentable/walnut, +/obj/item/clipboard, +/obj/item/clipboard, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"mk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/on{ + dir = 8; + icon_state = "light0" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"ml" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/glass/bolted{ + icon_state = "closed"; + dir = 4 + }, +/obj/structure/tape_barricade/door/police{ + icon_state = "tape_door_0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/northwest) +"mm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mn" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mo" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mp" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"mq" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"mr" = ( +/obj/machinery/button/blast_door/arrival{ + icon_state = "blastctrl"; + dir = 8 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"ms" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/vacant/f1/room) +"mt" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"mv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"mw" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 10 + }, +/obj/structure/disposalpipe/segment/bent, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"mx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northwest) +"my" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"mz" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mA" = ( +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 4 + }, +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mB" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"mG" = ( +/obj/structure/railing/mapped/stairwell{ + icon_state = "railing_preview"; + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"mH" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"mI" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1/se) +"mJ" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"mK" = ( +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"mL" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mM" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"mN" = ( +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/stairwell/floor1) +"mO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"mP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"mQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 9 + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"mR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest) +"mS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"mT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"mU" = ( +/obj/structure/sign/warning/internals_required{ + icon_state = "securearea"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"mV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/button/access/interior{ + dir = 8; + id_tag = "OH_l4_e_alck"; + pixel_x = 0 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"mW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"mX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light_switch, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"mY" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"mZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"na" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nb" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"nc" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/south) +"nd" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"ne" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + icon_state = "11"; + dir = 5 + }, +/obj/structure/railing/mapped, +/obj/machinery/meter, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"nf" = ( +/obj/machinery/alarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"ng" = ( +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"nh" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 8 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"ni" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"nj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"nk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/f1/northeast) -"db" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +"nl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"nm" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ + icon_state = "cap-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/cap/hidden/supply{ + icon_state = "cap-supply"; dir = 1 }, +/obj/effect/catwalk_plated/dark, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/f1/northwest) -"dc" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"nn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"no" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"dn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/south) +"np" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/northeast) +"nq" = ( +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/disposalpipe/segment/bent, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 1 + }, +/obj/structure/disposalpipe/cap, +/obj/machinery/alarm, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"dq" = ( +/area/outreach/outpost/hallway/north/floor1) +"nr" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"ns" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"nt" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"nu" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; - dir = 8 + dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/airless, /area/exoplanet/outreach/sky) -"dt" = ( -/turf/simulated/wall, -/area/outreach/outpost/hallway/west/floor1) -"dv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"dz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "11" +"nv" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/cap/hidden/supply, +/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"dR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 6 +/area/outreach/outpost/maint/passage/f1/northeast) +"nw" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"dT" = ( +/area/outreach/outpost/maint/passage/f1/northwest) +"nx" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"dW" = ( +/area/outreach/outpost/maint/passage/f1/northeast) +"ny" = ( /obj/structure/cable/yellow{ - icon_state = "32-4" - }, -/obj/structure/lattice, -/obj/structure/sign/deck/fourth{ - pixel_y = 32 + icon_state = "1-2" }, /obj/machinery/light/small{ icon_state = "bulb_map"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"nz" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; dir = 1 }, -/turf/simulated/open, -/area/outreach/outpost/maint/power/f1) -"dZ" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" +/obj/structure/cable/yellow{ + icon_state = "1-2" }, /obj/machinery/door/firedoor/autoset, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/south/floor1) -"ee" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/white{ +/area/outreach/outpost/maint/passage/f1/northwest) +"nA" = ( +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/abstract/landmark/skip_test, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"ef" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"eC" = ( -/obj/structure/sign/deck/fourth{ - pixel_y = 32 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/floor1) -"eF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +"nB" = ( +/obj/machinery/light_switch, +/obj/item/clothing/head/chicken, +/obj/item/clothing/suit/chickensuit, +/obj/structure/cable/white{ + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"eJ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"nC" = ( +/obj/structure/cable/white{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"ff" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"nD" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"nE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 }, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/f1) -"fw" = ( /obj/machinery/alarm, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"fD" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/hallway/west/floor1) -"fI" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/south) +"nF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nG" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) -"gc" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"nH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"nI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ icon_state = "map-scrubbers"; dir = 8 }, -/obj/effect/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"gj" = ( -/obj/machinery/door/firedoor/autoset, +/area/outreach/outpost/maint/passage/f1/west) +"nJ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) -"gl" = ( -/obj/effect/catwalk_plated, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nK" = ( +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/small) +"nL" = ( +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/storefront/large) +"nM" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office10) +"nN" = ( /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"gr" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"gt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/f1) -"gC" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"gX" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) -"hj" = ( +/area/outreach/outpost/vacant/f1/office11) +"nO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/atmos/f1) +"nP" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 9 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"hB" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/floor1) -"hW" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; dir = 8 }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nQ" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"hZ" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 1 - }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"id" = ( -/obj/machinery/network/relay/wall_mounted/outreach{ - icon_state = "wall_router"; - dir = 1 +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/f1) -"if" = ( -/obj/structure/railing/mapped, +"nR" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"io" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"nS" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/f1/southeast) -"it" = ( -/turf/simulated/wall/concrete, +"nT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/floor1) -"iB" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 8 - }, -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 1 +"nU" = ( +/obj/structure/cable/white, +/obj/machinery/power/smes/buildable/preset/outreach/substation{ + name = "power storage unit (airlock)" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"iC" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 1 +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"nV" = ( +/obj/machinery/door/firedoor{ + icon_state = "open"; + dir = 8 }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/f1/southwest) -"iF" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/obj/machinery/door/airlock/glass/civilian/outreach{ + icon_state = "closed"; dir = 8 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"iM" = ( -/turf/exterior/open, -/area/exoplanet/outreach/sky) -"iT" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"iY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/tape_barricade/door/engineering{ + icon_state = "tape_door_0"; + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/floor1) -"jd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/office11) +"nW" = ( +/obj/machinery/door/firedoor/autoset, +/obj/machinery/door/airlock/glass/civilian{ + icon_state = "closed" + }, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/stairwell/floor1) -"jp" = ( +"nX" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"jz" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"kz" = ( +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest/wall) +"nZ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"kD" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"kT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 5 + }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"kX" = ( -/obj/abstract/map_data{ - height = 4; - name = "Outreach Map Data" - }, -/turf/exterior/planet_edge, -/area/exoplanet/outreach/sky) -"kY" = ( +/area/outreach/outpost/maint/passage/f1/south) +"oa" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "1-4" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 1 +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 9 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"lq" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"ob" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"lr" = ( -/obj/structure/cable/yellow, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 +/turf/simulated/wall, +/area/outreach/outpost/hallway/west/south/floor1) +"oc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"od" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/power/apc{ - icon_state = "apc0"; +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"oe" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/alarm, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"of" = ( +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"og" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"lv" = ( -/obj/effect/catwalk_plated, +/area/outreach/outpost/maint/passage/f1/northeast) +"oh" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"lP" = ( -/obj/effect/catwalk_plated, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"lR" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"oi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 8 }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"ml" = ( +/area/outreach/outpost/maint/passage/f1/northeast) +"oj" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -1031,206 +6913,204 @@ /obj/effect/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/f1/northeast) -"mo" = ( +"ok" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"ol" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/alarm{ + icon_state = "alarm0"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; +/obj/machinery/atmospherics/pipe/simple/hidden{ + icon_state = "11"; + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"mw" = ( -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"mz" = ( +/area/outreach/outpost/maint/passage/f1/northeast) +"om" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-2" }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/floor1) -"mC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"on" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"mQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"mR" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"mV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/button/access/interior{ - dir = 8; - id_tag = "OH_l4_e_alck"; - pixel_x = 0 +/obj/machinery/power/apc{ + icon_state = "apc0"; + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/manifold/hidden{ + icon_state = "map"; + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) -"ne" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - icon_state = "11"; - dir = 5 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "stripe"; + dir = 4 }, -/obj/structure/railing/mapped, -/obj/machinery/meter, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"nf" = ( -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 4 +/area/outreach/outpost/maint/passage/f1/northeast) +"oo" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"nq" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, +/area/outreach/outpost/maint/passage/f1/southwest) +"op" = ( /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" }, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"oq" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, -/obj/structure/disposalpipe/cap, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/floor1) -"nu" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; +/area/outreach/outpost/maint/passage/f1/southwest) +"or" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"ny" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"nP" = ( +/area/outreach/outpost/maint/passage/f1/southwest) +"os" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/light_switch, -/obj/effect/decal/cleanable/dirt, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southwest) +"ot" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, /area/outreach/outpost/maint/passage/f1/southeast) -"nT" = ( +"ou" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"oj" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; - dir = 4 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"op" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"ot" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"ov" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"oX" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"ow" = ( +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/west) +"ox" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_ridged/airless, /area/exoplanet/outreach/sky) -"pj" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; +"oy" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/atmos/f1) +"oz" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"pk" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/power/f1) +"oA" = ( +/obj/machinery/door/airlock/hatch/maintenance/bolted, +/obj/structure/tape_barricade/door/police, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/vacant/f1/swroom) +"oB" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach{ + icon_state = "closed"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/floor1) +"oC" = ( +/obj/machinery/door/airlock/hatch/maintenance/outreach/command, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/stairwell/floor1/command) +"oD" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 @@ -1239,51 +7119,126 @@ icon_state = "11-scrubbers"; dir = 4 }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"oE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated/dark, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/light/small, /turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/south) +"oF" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm{ + icon_state = "alarm0"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/west/floor1) -"pl" = ( -/turf/simulated/floor/tiled/dark/monotile/airless, -/area/exoplanet/outreach/sky) -"pC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; +"oG" = ( +/obj/machinery/light, +/obj/structure/cryofeed{ + icon_state = "cryo_rear"; + dir = 2 + }, +/obj/machinery/cryopod/despawner/arrival{ + icon_state = "body_scanner_0"; dir = 1 }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"pF" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"pG" = ( -/turf/simulated/wall/ocp_wall/prepainted, +/area/outreach/outpost/arrivals/lobby) +"oH" = ( +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/f1/northeast) -"pQ" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 +"oI" = ( +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"oJ" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/arrivals/lobby) +"oK" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/light, +/obj/structure/table/woodentable/walnut, +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/office) +"oL" = ( +/obj/structure/table/plastic, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"oM" = ( +/obj/structure/table/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + icon_state = "intercom"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/arrivals/lobby) +"oN" = ( +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"oO" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/outreach/outpost/stairwell/floor1/se) +"oP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/power/f1) -"qh" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + icon_state = "map-supply"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oQ" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "11-scrubbers"; dir = 4 @@ -1292,465 +7247,474 @@ icon_state = "11-supply"; dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/concrete, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oR" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-s"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"qk" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"qo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; + dir = 4 + }, +/obj/machinery/light_switch/on, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"qp" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oS" = ( +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oT" = ( +/obj/structure/disposalpipe/segment/bent{ + icon_state = "pipe-c"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"qs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain/blue, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/power/apc/high{ + icon_state = "apc0"; + dir = 8 + }, +/obj/structure/cable/yellow, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/command/arrivals/lobby) +"oV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, /obj/machinery/power/apc{ icon_state = "apc0"; dir = 4 }, +/obj/machinery/light_switch/on, /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "0-8" }, -/obj/machinery/light_switch{ - icon_state = "light0"; +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"oW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "11-supply"; + dir = 5 + }, +/obj/effect/floor_decal/spline/plain/blue{ + icon_state = "spline_plain"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/deck/fourth{ + icon_state = "deck-4"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"qA" = ( -/obj/structure/railing/mapped, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/turf/simulated/floor/tiled/dark, +/area/outreach/outpost/stairwell/floor1/command) +"oX" = ( +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"qO" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"oY" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/vacant/f1/office11) +"oZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"qS" = ( -/obj/machinery/power/apc/hyper, /obj/machinery/camera/network/security{ icon_state = "camera"; - dir = 4 + dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - icon_state = "map_vent"; - id_tag = "OH_l4_e_alck_pump" +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 }, -/obj/structure/cable/white, -/obj/machinery/light/small{ - icon_state = "bulb_map"; +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/east/floor1) +"pa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/outreach/outpost/airlock/floor1) -"rd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "11" - }, -/obj/machinery/power/terminal{ - icon_state = "term"; - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"pb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube_map"; + dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/south/floor1) +"pc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/wall/concrete, +/area/outreach/outpost/hallway/west/south/floor1) +"pd" = ( /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"pe" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/outreach/outpost/maint/passage/f1/southeast) +"pf" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"re" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/southeast) +"pg" = ( +/obj/machinery/light/small{ + icon_state = "bulb_map"; dir = 4 }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_ridged, +/obj/effect/catwalk_plated/dark, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/passage/f1/southeast) -"ro" = ( -/obj/effect/catwalk_plated, +"ph" = ( +/turf/simulated/wall/r_wall/prepainted/command, +/area/outreach/outpost/command/arrivals/office) +"pi" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"rq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/catwalk_plated, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; +/turf/simulated/floor/plating, +/area/outreach/outpost/hallway/west/south/floor1) +"pj" = ( +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"rx" = ( -/obj/effect/overmap/visitable/sector/planetoid/outreach, -/turf/exterior/planet_edge, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"pk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/on, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/west/south/floor1) +"pl" = ( +/turf/simulated/floor/tiled/dark/monotile/airless, /area/exoplanet/outreach/sky) -"rI" = ( +"pm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + icon_state = "map_scrubber_on"; + dir = 8 + }, /obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 1 + dir = 8; + icon_state = "light0" }, /turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"rT" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/maint/passage/f1/northwest) -"sg" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/passage/f1/northwest) -"sj" = ( +/area/outreach/outpost/hallway/south/floor1) +"pn" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/catwalk_plated/dark, +/obj/machinery/light/small, /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"sp" = ( -/turf/simulated/wall/concrete, -/area/outreach/outpost/maint/waste/f1) -"sq" = ( +/area/outreach/outpost/maint/passage/f1/northeast) +"po" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/catwalk_plated/dark, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northwest) +"pp" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/obj/effect/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/passage/f1/northeast) +"pq" = ( /obj/machinery/alarm{ icon_state = "alarm0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - icon_state = "11"; - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"pr" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"ss" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + icon_state = "light0"; dir = 1 }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"su" = ( -/obj/effect/catwalk_plated, -/obj/structure/sign/warning/vent_port{ - dir = 1; - icon_state = "securearea"; - pixel_y = -32 +/turf/simulated/floor/plating, +/area/outreach/outpost/maint/waste/f1) +"ps" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-s"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/outreach/outpost/hallway/north/floor1) +"pt" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"sM" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/door/airlock/external/glass/bolted{ + icon_state = "closed"; + dir = 4 + }, +/obj/structure/tape_barricade/door/police{ + icon_state = "tape_door_0"; + dir = 8 }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/northeast) +"pF" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"sR" = ( +"pQ" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; + dir = 4 + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"tg" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/structure/flora/pottedplant/largebush, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"tk" = ( -/obj/effect/catwalk_plated, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"tr" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"tw" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, -/obj/machinery/alarm, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/power/f1) -"tx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark/monotile/airless, -/area/exoplanet/outreach/sky) -"tB" = ( +"qk" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"tK" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"tL" = ( -/turf/simulated/floor/plating, -/area/exoplanet/outreach/sky) -"tO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/white{ - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"tT" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/alarm, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 +"qS" = ( +/obj/machinery/power/apc/hyper, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"uf" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + icon_state = "map_vent"; + id_tag = "OH_l4_e_alck_pump" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/structure/cable/white, +/obj/machinery/light/small{ + icon_state = "bulb_map"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 +/turf/simulated/floor/tiled/techfloor, +/area/outreach/outpost/airlock/floor1) +"rd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 2; + icon_state = "11" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; +/obj/machinery/power/terminal{ + icon_state = "term"; dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /obj/effect/catwalk_plated, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"re" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + icon_state = "closed"; dir = 4 }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"uk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, +/turf/simulated/floor/tiled/steel_ridged, +/area/outreach/outpost/maint/passage/f1/southeast) +"rq" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; dir = 4 }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "11-scrubbers"; dir = 4 }, /turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"uq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"uy" = ( -/turf/simulated/wall/r_wall, /area/outreach/outpost/maint/waste/f1) -"uJ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/exoplanet/outreach/sky) -"uM" = ( -/obj/effect/floor_decal/industrial/traffic{ - icon_state = "stripe"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/airless, +"rx" = ( +/obj/effect/overmap/visitable/sector/planetoid/outreach, +/turf/exterior/planet_edge, /area/exoplanet/outreach/sky) -"uO" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; +"rT" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/passage/f1/northwest) +"sp" = ( +/turf/simulated/wall/concrete, +/area/outreach/outpost/maint/waste/f1) +"su" = ( +/obj/effect/catwalk_plated, +/obj/structure/sign/warning/vent_port{ + dir = 1; icon_state = "securearea"; - pixel_x = 32 + pixel_y = -32 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"tg" = ( /obj/machinery/light{ icon_state = "tube_map"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/floor1) -"vg" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"vo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"vq" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/floor1) -"vG" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; dir = 1 }, +/obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/floor1) -"vH" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/sign/warning/moving_parts{ - dir = 1; - icon_state = "movingparts"; - pixel_y = -32 - }, +"tk" = ( +/obj/effect/catwalk_plated, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"wa" = ( +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) +"tw" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "stripecorner"; + dir = 4 + }, +/obj/machinery/alarm, +/obj/machinery/power/apc{ + icon_state = "apc0"; dir = 8 }, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"tx" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"wk" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/tiled/dark/monotile/airless, +/area/exoplanet/outreach/sky) +"tB" = ( +/obj/structure/railing/mapped{ + icon_state = "railing_preview"; + dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid/airless, /area/exoplanet/outreach/sky) -"wq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/outer_wall/f1) -"wF" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) +"uy" = ( +/turf/simulated/wall/r_wall, +/area/outreach/outpost/maint/waste/f1) +"uM" = ( +/obj/effect/floor_decal/industrial/traffic{ + icon_state = "stripe"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) "wO" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/atmos/f1) @@ -1767,28 +7731,10 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"xx" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) "xC" = ( /obj/abstract/level_data_spawner/exoplanet/outreach/sky, /turf/exterior/planet_edge, /area/exoplanet/outreach/sky) -"xJ" = ( -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/floor1) "xZ" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -1796,52 +7742,6 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"yc" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"yg" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"yk" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/exoplanet/outreach/sky) -"ys" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) "yA" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1855,17 +7755,9 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"yE" = ( -/obj/structure/railing/mapped/stairwell{ - icon_state = "railing_preview"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) "yK" = ( /obj/structure/lattice, -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/sky) "zl" = ( /obj/structure/cable/yellow{ @@ -1885,34 +7777,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"zu" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) -"zC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"zF" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "stripecorner"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) "zJ" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; @@ -1921,20 +7785,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"Aa" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/f1/southwest) -"Af" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"Ax" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/f1/northeast) "AF" = ( /obj/machinery/button/access/wired/exterior{ dir = 4; @@ -1961,7 +7811,7 @@ /obj/structure/sign/warning/fall{ pixel_y = 24 }, -/turf/simulated/open, +/turf/open, /area/outreach/outpost/maint/power/f1) "Bb" = ( /obj/structure/cable/yellow{ @@ -1975,35 +7825,10 @@ /obj/effect/catwalk_plated, /turf/simulated/floor/plating, /area/outreach/outpost/hallway/central/floor1) -"Bm" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) -"BG" = ( -/turf/simulated/wall/r_wall, -/area/outreach/outpost/stairwell/floor1) -"BX" = ( -/obj/machinery/light_switch{ - icon_state = "light0"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) "Ct" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged/airless, /area/exoplanet/outreach/sky) -"Cw" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) "CB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2022,48 +7847,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/airless, /area/exoplanet/outreach/sky) -"CI" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) -"CN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) "De" = ( /obj/structure/railing/mapped, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"Dl" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) "Du" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2072,29 +7861,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"DC" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"DI" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/outer_wall/f1) -"DK" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"DM" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) "DU" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -2105,49 +7871,6 @@ "DV" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/stairwell/floor1) -"Ec" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"Ep" = ( -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"Ev" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/sign/warning/internals_required{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) "Ew" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2210,60 +7933,6 @@ "Gi" = ( /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"Gj" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"Gl" = ( -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers{ - icon_state = "cap-scrubbers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply{ - icon_state = "cap-supply"; - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/cap{ - icon_state = "pipe-cap"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) -"Go" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"GB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) "GG" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2271,77 +7940,6 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"GH" = ( -/obj/machinery/door/airlock/glass/maintenance, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/floor1) -"GI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) -"GJ" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/north/floor1) -"GM" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"GO" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"GV" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"GX" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"GZ" = ( -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) "Hj" = ( /obj/structure/railing/mapped, /obj/structure/railing/mapped{ @@ -2358,27 +7956,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) -"Hq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"Hr" = ( -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) "HI" = ( /obj/machinery/atmospherics/unary/outlet_injector/cabled/on, /obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) "HJ" = ( -/turf/simulated/open, +/turf/open, /area/turbolift/outreach/f1) "HV" = ( /obj/machinery/door/airlock/hatch/maintenance{ @@ -2390,13 +7974,6 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/f1/southwest) -"IE" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) "II" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2406,14 +7983,8 @@ icon_state = "railing_preview"; dir = 8 }, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"IK" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) "IQ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2424,45 +7995,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"Jf" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Jl" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"Jr" = ( -/turf/simulated/wall, -/area/outreach/outpost/hallway/south/floor1) -"Ju" = ( -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"Jy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/floor1) "JF" = ( /obj/effect/floor_decal/industrial/traffic/corner{ icon_state = "stripecorner"; @@ -2471,13 +8003,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"Kw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light_switch, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) "KC" = ( /obj/machinery/camera/network/security{ icon_state = "camera"; @@ -2490,40 +8015,11 @@ /obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/floor1) -"KE" = ( -/obj/machinery/power/terminal{ - icon_state = "term"; - dir = 4 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) "KG" = ( /obj/machinery/light, /obj/structure/flora/pottedplant/largebush, /turf/simulated/floor/tiled/steel_grid, /area/outreach/outpost/hallway/central/floor1) -"KH" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"KL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) "KX" = ( /obj/effect/catwalk_plated, /obj/structure/cable/white{ @@ -2531,14 +8027,6 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"Lc" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) "Lk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2556,82 +8044,14 @@ }, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"Lm" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/west/floor1) "Lv" = ( /obj/structure/railing/mapped, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"Lx" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"LA" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"LS" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) "LT" = ( /obj/machinery/door/airlock/hatch/bolted, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/maint/passage/f1/northwest) -"LY" = ( -/obj/structure/sign/warning/engineering_access{ - dir = 8; - icon_state = "securearea"; - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/south/floor1) "Mz" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -2653,28 +8073,6 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) -"MP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/obj/machinery/light_switch/on{ - icon_state = "light0"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/north/floor1) -"MQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external/glass/bolted{ - icon_state = "closed"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/passage/f1/northeast) "MW" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2700,93 +8098,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"Nx" = ( -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) -"ND" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) "NI" = ( /turf/simulated/floor/tiled/steel_ridged/airless, /area/exoplanet/outreach/sky) -"NX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Oz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"OB" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"OE" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/maint/passage/f1/northwest) -"OO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"OS" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/outer_wall/f1) -"Pk" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Pm" = ( -/obj/structure/sign/warning/engineering_access{ - pixel_y = 32 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) "Pp" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/f1) -"Pu" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) "Pw" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2795,7 +8114,7 @@ /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) "PB" = ( -/turf/simulated/open, +/turf/open, /area/outreach/outpost/stairwell/floor1) "PC" = ( /obj/effect/catwalk_plated, @@ -2832,11 +8151,6 @@ }, /turf/simulated/floor/tiled/techfloor, /area/outreach/outpost/airlock/floor1) -"PV" = ( -/obj/structure/cable/white, -/obj/machinery/power/smes/buildable/preset/outreach/substation, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) "Qc" = ( /obj/machinery/light/small{ icon_state = "bulb_map"; @@ -2844,44 +8158,13 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) -"Qj" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction/yjunction{ - icon_state = "pipe-y"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/north/floor1) "Qn" = ( /obj/effect/floor_decal/industrial/traffic/corner{ icon_state = "stripecorner"; dir = 4 }, /turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"Qq" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) +/area/exoplanet/outreach/sky) "Qr" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2900,45 +8183,6 @@ }, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"Qv" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"QG" = ( -/turf/simulated/wall/ocp_wall/prepainted, -/area/outreach/outpost/airlock/floor1) -"QJ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"QL" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) "QO" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -2947,111 +8191,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"QR" = ( -/obj/structure/disposalpipe/junction/mirrored{ - icon_state = "pipe-j2"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/central/floor1) -"QT" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"Rh" = ( -/obj/machinery/door/airlock/glass/civilian{ - icon_state = "closed"; - dir = 8 - }, -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/hallway/east/floor1) -"Ro" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Ry" = ( -/obj/machinery/door/airlock/glass/maintenance, -/obj/machinery/door/firedoor/autoset, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/floor1) -"RI" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"RO" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"RP" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 8 - }, -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 8 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 32 - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) "RT" = ( /obj/structure/sign/warning/nosmoking_1{ pixel_y = 32 @@ -3070,46 +8209,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/power/f1) -"St" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) "Sw" = ( /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/f1) "SB" = ( /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"SI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) -"SN" = ( -/obj/structure/cable/yellow, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) "SV" = ( /turf/simulated/floor/tiled/techfloor/grid/airless, /area/exoplanet/outreach/sky) @@ -3117,24 +8222,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) -"Tc" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/sign/warning/airlock{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Ti" = ( -/obj/structure/disposalpipe/segment/bent{ - icon_state = "pipe-c"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) "Ts" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -3142,101 +8229,26 @@ }, /turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) -"Ty" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/south/floor1) -"TD" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) "TR" = ( /obj/machinery/light_switch{ icon_state = "light0"; dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/f1) -"TY" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"Uk" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid/airless, -/area/exoplanet/outreach/sky) -"UJ" = ( -/obj/structure/railing/mapped, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"UW" = ( -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"Vj" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"Vu" = ( -/obj/structure/cable/yellow, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 1 - }, -/obj/machinery/power/apc{ - icon_state = "apc0"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/waste/f1) -"Vy" = ( -/obj/structure/sign/deck/fourth{ - pixel_y = 32 - }, -/obj/structure/railing/mapped/stairwell, -/obj/structure/disposalpipe/trunk{ - icon_state = "pipe-t"; - dir = 8 - }, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"VC" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/outreach/outpost/maint/power/f1) +"Uk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid/airless, +/area/exoplanet/outreach/sky) +"UJ" = ( +/obj/structure/railing/mapped, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/airless, +/area/exoplanet/outreach/sky) +"UW" = ( /turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) +/area/outreach/outpost/maint/atmos/f1) "VH" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -3245,59 +8257,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor/grid/airless, /area/exoplanet/outreach/sky) -"VN" = ( -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) "VP" = ( /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/west/floor1) -"VT" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - icon_state = "bulb_map"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) "VU" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/outreach/outpost/maint/power/f1) -"VW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"Wc" = ( -/obj/machinery/atmospherics/pipe/zpipe/down{ - icon_state = "down"; - dir = 8 - }, -/obj/structure/railing/mapped, -/obj/structure/sign/warning/fall{ - pixel_y = 24 - }, -/turf/simulated/open, -/area/outreach/outpost/maint/waste/f1) -"Wf" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southeast) -"Wj" = ( -/obj/structure/cable/yellow{ - icon_state = "32-8" - }, -/turf/exterior/open, -/area/exoplanet/outreach/sky) "Wo" = ( /obj/structure/railing/mapped{ icon_state = "railing_preview"; @@ -3305,40 +8272,6 @@ }, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"Ws" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"Wy" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/maint/waste/f1) "WC" = ( /obj/machinery/door/airlock/glass/civilian{ icon_state = "closed" @@ -3347,14 +8280,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_ridged, /area/outreach/outpost/hallway/south/floor1) -"WF" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) "WM" = ( /obj/machinery/light/small/wired{ icon_state = "bulb_map"; @@ -3370,29 +8295,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/exoplanet/outreach/sky) -"WO" = ( -/obj/machinery/door/firedoor/autoset{ - icon_state = "open"; - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced/concrete, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/east/floor1) "WS" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -3404,101 +8306,13 @@ "WV" = ( /turf/simulated/floor/tiled/techfloor/airless, /area/exoplanet/outreach/sky) -"WX" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - icon_state = "map-supply"; - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/west/floor1) "Xl" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/outreach/outpost/maint/waste/f1) -"Xo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - icon_state = "tube_map"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/east/floor1) -"Xt" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_ridged/airless, -/area/exoplanet/outreach/sky) -"Xz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"XI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) "XM" = ( /turf/simulated/wall/concrete, /area/outreach/outpost/maint/power/f1) -"XN" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"XT" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/alarm{ - icon_state = "alarm0"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/southwest) -"Yh" = ( -/obj/machinery/door/firedoor/autoset, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/reinforced/concrete, -/turf/simulated/floor/tiled/steel_ridged, -/area/outreach/outpost/stairwell/floor1) -"Ym" = ( -/obj/structure/railing/mapped{ - icon_state = "railing_preview"; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/airless, -/area/exoplanet/outreach/sky) -"Yt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/stairwell/floor1) -"Yx" = ( -/obj/machinery/alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_grid, -/area/outreach/outpost/hallway/west/floor1) "YA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ icon_state = "11-supply"; @@ -3518,79 +8332,17 @@ }, /obj/effect/floor_decal/industrial/warning{ icon_state = "stripe"; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/atmos/f1) -"YX" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"Zl" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outreach/outpost/hallway/central/floor1) -"Zo" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/cap/hidden/supply, -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northeast) -"Zw" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "stripe"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/outreach/outpost/maint/power/f1) -"ZD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outreach/outpost/maint/passage/f1/northwest) -"ZF" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/exoplanet/outreach/sky) -"ZW" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - icon_state = "closed"; - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "11-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "11-supply"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - icon_state = "pipe-s"; - dir = 4 + dir = 8 }, -/turf/simulated/floor/tiled/steel_ridged, +/turf/simulated/floor/plating, /area/outreach/outpost/maint/atmos/f1) +"YX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/airless, +/area/exoplanet/outreach/sky) (1,1,1) = {" cj @@ -15204,13 +19956,13 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -15315,238 +20067,7 @@ cj cj cj cj -cj -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -cj -cj -cj -cj -cj -cj -cj -"} -(60,1,1) = {" -cj -cj -cj -cj -cj -cj -cj -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +cj iM iM iM @@ -15626,6 +20147,35 @@ iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -15712,7 +20262,7 @@ cj cj cj "} -(61,1,1) = {" +(60,1,1) = {" cj cj cj @@ -15799,35 +20349,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -15914,7 +20464,7 @@ cj cj cj "} -(62,1,1) = {" +(61,1,1) = {" cj cj cj @@ -16001,35 +20551,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -16116,7 +20666,7 @@ cj cj cj "} -(63,1,1) = {" +(62,1,1) = {" cj cj cj @@ -16203,35 +20753,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -16318,7 +20868,7 @@ cj cj cj "} -(64,1,1) = {" +(63,1,1) = {" cj cj cj @@ -16405,35 +20955,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -16520,7 +21070,7 @@ cj cj cj "} -(65,1,1) = {" +(64,1,1) = {" cj cj cj @@ -16607,35 +21157,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -16722,7 +21272,7 @@ cj cj cj "} -(66,1,1) = {" +(65,1,1) = {" cj cj cj @@ -16809,35 +21359,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -16924,7 +21474,7 @@ cj cj cj "} -(67,1,1) = {" +(66,1,1) = {" cj cj cj @@ -17011,35 +21561,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -17126,7 +21676,7 @@ cj cj cj "} -(68,1,1) = {" +(67,1,1) = {" cj cj cj @@ -17213,35 +21763,35 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB iM iM iM @@ -17328,7 +21878,7 @@ cj cj cj "} -(69,1,1) = {" +(68,1,1) = {" cj cj cj @@ -17415,6 +21965,42 @@ iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +NI +NI +Ew +Ew +Ew +Ew +gJ iM iM iM @@ -17486,6 +22072,22 @@ iM iM iM iM +cj +cj +cj +cj +cj +cj +cj +"} +(69,1,1) = {" +cj +cj +cj +cj +cj +cj +cj iM iM iM @@ -17522,22 +22124,6 @@ iM iM iM iM -cj -cj -cj -cj -cj -cj -cj -"} -(70,1,1) = {" -cj -cj -cj -cj -cj -cj -cj iM iM iM @@ -17581,6 +22167,42 @@ iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +SV +SV +SV +SV +SV +SV +NI iM iM iM @@ -17652,6 +22274,23 @@ iM iM iM iM +cj +cj +cj +cj +cj +cj +cj +"} +(70,1,1) = {" +cj +cj +cj +cj +cj +cj +cj +iM iM iM iM @@ -17724,28 +22363,53 @@ iM iM iM iM -cj -cj -cj -cj -cj -cj -cj -"} -(71,1,1) = {" -cj -cj -cj -cj -cj -cj -cj iM iM iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +SV +SV +SV +SV +SV +SV +NI +iM +iM +iM +iM +iM iM iM iM @@ -17812,6 +22476,22 @@ iM iM iM iM +cj +cj +cj +cj +cj +cj +cj +"} +(71,1,1) = {" +cj +cj +cj +cj +cj +cj +cj iM iM iM @@ -17891,6 +22571,42 @@ iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +SV +SV +SV +SV +SV +SV +kD iM iM iM @@ -17926,22 +22642,6 @@ iM iM iM iM -cj -cj -cj -cj -cj -cj -cj -"} -(72,1,1) = {" -cj -cj -cj -cj -cj -cj -cj iM iM iM @@ -17978,6 +22678,22 @@ iM iM iM iM +cj +cj +cj +cj +cj +cj +cj +"} +(72,1,1) = {" +cj +cj +cj +cj +cj +cj +cj iM iM iM @@ -18057,6 +22773,42 @@ iM iM iM iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +SV +SV +SV +SV +SV +SV +kD iM iM iM @@ -18223,42 +22975,42 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +SB +Lv +SV +SV +SV +SV +SV +SV +kD iM iM iM @@ -18425,55 +23177,55 @@ iM iM iM iM -iM +SB II +dl xZ +dl +dl xZ +dl xZ -xZ -xZ -Ym -Ym -xZ -xZ -xZ +dl xZ xZ xZ +dl +dl xZ xZ -Ym +dl xZ +dl +dl +dl xZ xZ xZ xZ +dl xZ -xZ -xZ -xZ -hW -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +Ew +SV +SV +SV +SV +SV +SV +SV +Ew +Ew +Ew +Ew +Ew +Ew +Ew +Ew +Ew +Ew +Ew +NI +Ct iM iM iM @@ -18627,7 +23379,7 @@ iM iM iM iM -iM +SB GG pF WV @@ -18654,28 +23406,28 @@ WV WV WV pF -Fq -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +WV +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dm +dp +NI iM iM iM @@ -18829,70 +23581,70 @@ iM iM iM iM -iM -GG -WV -lP -lP -lP -lP -lP -tk -lP -lP -lP -mw -lP -lP -lP -lP -lP -lP -lP -lP -lP -tk -lP -lP -lP -pF -UJ -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +SB +GG +WV +ag +ag +ag +ag +ag +ag +ag +ag +ag +eZ +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +eZ +ag +ag +ag +ag +ag +ag +ag +ag +gG +gG +gG +gG +gG +gG +gG +gG +gH +gH +gH +gH +dt +kD +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM iM iM iM @@ -19029,57 +23781,57 @@ dq Ew Ew dq -Ew Ct Ct +Ew pF WV -lP -yk -SB -lq -SB -lq -SB -lq -SB -lq -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -lq -yk -lP -pF -WV -Ct -Ct -Ew -Ew -Ew -Ew -Ew -dq -dq -Ew -Ew -dq -Ew -Ew -Ew -Ew -Ew -dq -Ew -Ct -Ct +ag +al +nh +nj +al +nj +nh +nj +al +nj +nh +al +al +al +nh +nj +al +al +nh +al +nj +al +nh +nj +al +nj +ov +al +al +ow +nh +nj +gG +eO +mH +nF +mY +eO +mY +nF +gH +nc +no +gH +du +CD iM iM iM @@ -19232,56 +23984,56 @@ Uk SV SV SV -NI -Ct -WV -WV -lP -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -lq -lq -SB -SB -SB -tL -tk -WV -WV -Ct -NI -SV -SV -SV -SV -Uk -Uk -SV -SV -SV SV Uk -Uk -SV -SV -SV -SV -SV -NI -NI +WV +WV +ag +al +ay +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +eU +eU +eU +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +cq +nI +cq +eN +nJ +nP +nX +nX +nX +nX +nY +eT +nZ +oa +gH +dt +kD iM iM iM @@ -19400,72 +24152,24 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -nu -Uk -iB -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Wo -Fh -SV -SV -GG -pF -lP -SB -lq -lq -SB -SB -lq -SB -SB -ef -SB -lq -SB -ef -SB -SB -SB -lq -SB -lq -SB -SB -lP -WV -Fq -SV -SV -hZ +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +nu +Uk +iB Wo Wo Wo @@ -19474,15 +24178,63 @@ Wo Wo Wo Wo -WF -WF -WF Wo Wo Wo Wo -Lv +Wo +Wo +Wo +Fh +SV SV +GG +pF +ag +aB +be +aw +aw +aw +aw +aw +aw +aw +aL +bi +dk +aL +aL +eM +eM +ob +eM +ob +eM +eM +eM +eM +eM +eM +eM +eM +eM +eM +bN +eM +gk +eS +mW +nF +nF +mY +nF +na +eP +nE +oc +gH +dt CD iM iM @@ -19640,51 +24392,51 @@ Uk SV GG IQ -lP -SB -lq -lq -SB -SB -lq -lq -SB -ef -SB -SB -lq -ef -SB -lq -SB -SB -SB -lq -SB -SB -tk -WV -UJ -Uk -SV -hZ -SB -SB -SB -lq -lq -SB -SB -lq -lq -SB -SB -SB -SB -lq -lq -Lv -SV +ag +al +bf +aw +ax +ax +bv +aN +dN +ms +cz +fO +ed +oF +eL +ip +fP +dr +fP +pa +dr +fe +fP +mm +dr +fP +fP +kO +fP +lF +lI +fC +ib +ib +ib +ib +ib +kj +kj +kj +kj +kj +oc +gH +dt kD iM iM @@ -19842,51 +24594,51 @@ Uk Uk QO WV -lP -SB -SB -SB -SB -lq -SB -SB -SB -yk -QT -IE -QT -yk -SB -SB -SB -lq -SB -SB -SB -lq -tk -WV -UJ -SV -SV -hZ -SB -SB -SB -lq -lq -lq -lq -lq -lq -SB -SB -lq -lq -lq -SB -Lv -SV +ag +aE +br +aw +ax +aN +bK +dK +dP +ms +df +cb +eg +eg +eh +ej +pi +fg +eX +eX +eX +fh +eX +eX +eX +eX +lH +eX +eX +eX +mT +mn +ib +ik +iE +oU +jg +ju +oW +jY +jY +kj +od +gH +dt kD iM iM @@ -20044,51 +24796,51 @@ Uk SV QO WV -lP -ef -SB -lq -SB -lq -SB -SB -lq -DI -DI -DI -DI -DI -zC -SB -SB -SB -SB -lq -SB -KH -tk -WV -Fq -SV -Uk -hZ -SB -SB -SB -lq -SB -SB -SB -SB -lq -SB -SB -lq -SB -SB -SB -Lv -Uk +ag +bt +bE +aw +ax +aW +dw +dL +dQ +gv +gg +cB +aC +bS +fN +mk +pj +gl +bZ +az +bZ +fB +mM +az +bZ +az +go +bZ +az +az +fi +mo +ib +oP +iF +iW +iX +oV +jL +km +kn +oC +oc +gH +du kD iM iM @@ -20246,51 +24998,51 @@ Uk SV GG WV -lP -yk -SB -SB -SB -SB -lq -lq -SB -DI -wq -wq -OS -DI -lq -SB -SB -lq -SB -SB -SB -yk -lP -pF -UJ -SV -Uk -Du -SB -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -SB -lq -Lv -Uk +ag +ca +bF +aw +ax +ax +dJ +dM +gy +ms +aG +cF +bS +fD +bp +gI +gI +pc +gI +gI +gI +aR +aR +aR +kz +kz +kz +kz +kz +cE +fl +fS +ib +in +oS +ic +ic +ic +ic +ic +ic +ph +oc +gH +du kD iM iM @@ -20448,51 +25200,51 @@ Uk Uk GG pF -lP -OE -OE -OE -OE -OE -OE -OE -OE -OE -dt -dt +bd +bd +aZ +aw +aw +aw +aw +aw +aw +ms +df +cG +aC +fD +bD +dS +iC +iC +iC +mR +iC +ck +fj +ks +kA +iV +kU +lQ +lk +lJ +fm +gj +ib +iq +iH +ic +jh +jI +kg +jS +jZ +ph +oc +gH dt -Aa -Aa -Aa -Aa -Aa -Aa -Aa -Aa -Aa -lP -WV -Fq -SV -SV -hZ -SB -SB -lq -SB -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -lq -Lv -SV kD iM iM @@ -20647,54 +25399,54 @@ SB SB Lv SV -SV -GG -pF -lP -OE -TD -ZD -VT -qo -ZD -RI -qs -db -wa -ys -wa -iC -vg -XT -dT -dT -Hq -TY -IK -Aa -lP -WV -Fq -SV -Uk -hZ -SB -SB -lq -lq -SB -SB -SB -SB -SB -lq -SB -SB -SB -lq -lq -Lv -SV +SV +GG +pF +bd +ci +au +nw +ny +oh +nw +ok +om +nz +nA +cH +dT +dU +fz +kT +mO +mO +mP +mQ +mS +ck +gm +kt +kB +kN +kY +kV +kz +lB +gi +mt +ib +oQ +iI +iY +ji +jv +jv +jT +ka +ph +od +gH +dt kD iM iM @@ -20852,51 +25604,51 @@ Uk SV GG pF -lP -OE -xx +bd +io +bm rT rT rT rT rT rT -sg -Nx -LS -ND +fD +cw +cI +aC DV -BG -BG -BG -BG -BG -BG -kT -Aa -lP -pF -Fq -SV -Uk -hZ -lq -SB -SB -lq -lq -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -Lv -SV +aS +aS +aS +aS +aS +aS +oo +ck +gq +ku +kA +jx +kZ +lT +li +az +fi +fR +ib +is +oT +iZ +jj +jw +mj +jU +oK +ph +oc +gH +dt kD iM iM @@ -21054,9 +25806,9 @@ SV SV GG WV -lP -OE -Xz +bd +bW +bM LT HJ HJ @@ -21064,41 +25816,41 @@ HJ HJ HJ fD -dv -RO -ND +aG +cK +aC DV -GZ -Pu -oj -Pu -jd -BG -sj -Aa -lP -WV -UJ -SV -Uk -hZ -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -SV +ek +ep +et +mN +el +aS +op +ck +gr +iu +kA +nK +la +lU +li +bZ +fi +mL +ib +oR +iK +ic +jk +jy +mr +jV +kc +ph +oc +gH +dt kD iM iM @@ -21256,9 +26008,9 @@ SV SV QO WV -lP -OE -vH +bd +mx +gc rT HJ HJ @@ -21266,41 +26018,41 @@ HJ HJ HJ VP -ND -pk -dv -GH -jd -Yt -jd -ny -BX -BG -sj -Aa -lP -WV -UJ -SV -Uk -hZ -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -SB -lq -SB -Lv -Uk +aF +cM +bS +nW +el +eq +el +ew +ep +oB +op +ck +gu +gu +kA +kP +ko +lV +li +bZ +fi +jD +ib +iv +iL +ic +ic +jC +ic +jC +ic +ph +oc +gH +du kD iM iM @@ -21458,9 +26210,9 @@ SV Uk GG WV -lP -OE -KL +bd +bd +ml rT HJ HJ @@ -21468,41 +26220,41 @@ HJ HJ HJ VP -dv -uf -Dl -Yh -kz -hj -gr -yg -wF -BG -QL -Aa -lP -WV -Fq -SV -Uk -hZ -SB -SB -SB -lq -lq -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -Lv -Uk +gh +cP +cS +em +gw +er +eu +ex +ez +aS +oq +cC +cC +cC +kI +kI +kI +kI +kK +iP +fi +im +ie +iw +iN +ja +jl +kb +jF +kb +oL +oJ +od +gH +du kD iM iM @@ -21660,9 +26412,9 @@ SV Uk GG pF -lP -OE -Xz +bd +oI +po rT HJ HJ @@ -21670,41 +26422,41 @@ HJ HJ HJ VP -ND -SI -Cw -Ry -Ti -nf -yE -nf -jd -BG -kT -Aa -lP -WV -UJ -SV -SV -hZ -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -Lv -SV +aF +cR +aC +nW +gx +es +ev +es +ey +aS +oo +cC +il +ky +kI +jK +lc +lW +kK +jn +lA +gp +ig +ix +iO +jb +jt +jm +jJ +js +ke +oJ +oc +gH +dt kD iM iM @@ -21862,9 +26614,9 @@ SV SV GG pF -lP -OE -DC +bd +bd +gD rT HJ HJ @@ -21872,41 +26624,41 @@ HJ HJ HJ fD -dv -Oz -dv +aG +cR +bS DV -Vy +eo PB PB PB -jd -BG -sj -Aa -tk -pF -Fq -SV -SV -hZ -lq -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -SB -SB -Lv -SV +eA +aS +op +cC +kp +kQ +kI +kR +kx +lX +lj +bZ +fi +mB +ih +iy +iQ +jc +jo +js +jM +jR +kf +oJ +oc +gH +dt CD iM iM @@ -22060,55 +26812,55 @@ lq lq SB Lv -SV -SV -GG -WV -lP -lP -su -uy -uy -uy -uy -uy -uy -sp -vo -WX -pC -DV -DV -DV -DV -DV -DV -BG -sj -Aa -lP -WV -Fq -Uk -SV -hZ -lq -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -lq -SB -Lv -Uk +SV +SV +GG +WV +lP +lP +su +uy +uy +uy +uy +uy +uy +fD +cD +cU +fE +DV +aS +aS +aS +aS +aS +aS +op +cC +kq +iG +kI +nL +le +lb +lj +az +fi +fR +ih +ih +ih +jc +jB +kb +jN +kb +kh +oJ +oc +gH +du kD iM iM @@ -22269,48 +27021,48 @@ pF tk HI rd -dz +ab ne lR +nQ +pq Xl -Sw -Xl -sp -eC -Oz -dv -ah +fD +cW +cR +bS +fD aj aj aj aj aj -al -kT -Aa -lP -WV -Fq -SV -SV -hZ -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -Lv -SV +aT +oo +cC +kq +kW +kI +kR +kL +lY +lj +lC +lD +mh +ih +ii +ii +jc +jp +js +jN +js +ki +oJ +od +gH +dt kD iM iM @@ -22472,47 +27224,47 @@ tk tk YX uy -Wc +aq lR -Sw +Xl Sw Xl -sp -Yx -Oz -Ju -ah +fD +cX +cR +fK +fD aj aj aj aj aj -al -sj -Aa -tk -WV -Fq -SV -SV -hZ -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -SV +oA +op +cC +ir +lM +kJ +kS +lf +lZ +lj +bZ +fi +fR +ij +ij +ij +ij +ij +jE +jN +js +oM +oJ +oc +gH +dt kD iM iM @@ -22670,51 +27422,51 @@ SV Uk GG pF -lP -pG -Ax +bP +bP +gE uy -RP -eJ +ar +as dR eF Pp -sp -kY -QJ -rI -ah +fD +fG +cY +fL +fD aj aj aj aj aj -al -yc -Aa -lP -WV -UJ -Uk -SV -hZ -SB -lq -lq -lq -lq -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -Lv -SV +aT +or +cC +kq +lO +kI +jK +lg +ld +kK +az +fi +fR +ij +iz +iR +jd +jq +kb +jO +jW +kk +oJ +oc +gH +dt kD iM iM @@ -22872,51 +27624,51 @@ Uk Uk GG pF -lP -pG -Tc +bP +oH +pp uy -Xl -Sw +gB +lR YA Sw id -sp -Lm -qh -Lm -ah +fD +fH +dn +fM +fD aj aj aj aj aj -al -kT -Aa -lP -WV -De -Uk -Uk -hZ -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -Lv -SV +aT +oo +cC +kr +iJ +kI +kR +lL +mw +lt +lS +eY +hT +ij +iA +iS +je +jr +jm +jP +jX +oG +oJ +oc +gH +dt kD iM iM @@ -23074,110 +27826,110 @@ Uk SV GG WV -lP -pG -GM +bP +bP +pt uy -Xl -iF -rq -Vu -sp -it -jp -uk -nT -it -ah -aj -aj -aj -aj -al -Kw -Aa -lP -WV -UJ -SV -SV -hZ -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -SB -lq -SB -SB -Lv -Uk -kD -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq -lq +av +ad +rq +pr +it +it +fI +dH +nT +it +it +aj +aj +aj +aj +aT +os +cC +ir +kq +kI +jK +lN +my +kK +pk +fi +mo +ij +iD +iU +jf +jq +js +jQ +kd +kk +oJ +od +gH +du +kD +cr +cr +cr +cr +cr +cr +cr +cr +cm +hR +hR +hR +hR +hV +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX +gX cj cj cj @@ -23276,110 +28028,110 @@ SV SV GG pF -lP -pG -MQ +bP +mU +nr uy sp -sp -Wy +at +aJ sp it tg +fJ +dO nT -Ws -OB KC it ah ah ah ah -al +ah HV -Aa -lP -pF -UJ -SV -SV -hZ -SB -SB -SB -lq -SB -SB -SB -lq -SB -lq -SB -SB -SB -SB -SB -Lv -SV +fk +fk +fk +kK +kK +kK +kK +kK +cJ +gn +fT +ij +ij +ij +ij +ij +jc +jc +jc +jc +jc +oc +gH +dt kD iM +yK iM +yK iM +yK iM -iM -iM -iM -iM -lq -lq -lq -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -lq -SB -SB -lq -SB -SB -SB -lq -SB -SB +yK +ct +cr +gL +hL +hL +hW +gX +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gX +gX +gY +gY +gY +gY +gY +gY +gY +gX +gY +gY +gY +gY +gY +gY +gX +gY +gY +gX +gY +gY +gY +gX +gY +gY cj cj cj @@ -23446,120 +28198,18 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -tB -SV -hZ -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB -if -SV -SV -GG -pF -Qv -pG -Ev -MX -xJ -MP -iY -GJ -nT -nT -OO -mo -QR -OB -nT -WC -gX -GI -fI -Jr -ad -ag -XN -WV -Fq -SV -SV -hZ -lq -SB -SB -lq -lq -SB -SB -lq -lq -lq -lq -SB -SB -SB -SB -Lv -SV -kD -yK -yK -yK -yK -yK -yK -yK -yK -SB -lq -lq -SB -lq -SB -lq -zC -SB -lq -SB -SB -lq -lq -SB -lq -SB -lq -SB -SB -lq -lq -SB -lq -lq -lq -SB -SB +iM +iM +iM +iM +iM +iM +iM +iM +iM +tB +SV +hZ SB lq SB @@ -23567,10 +28217,6 @@ SB SB SB SB -lq -SB -SB -SB SB SB SB @@ -23579,9 +28225,115 @@ SB lq SB SB -SB -SB -lq +if +SV +SV +GG +pF +aQ +nd +nk +MX +fq +ps +ae +fs +fu +fu +fx +dO +PE +nT +nT +WC +cZ +dd +dg +di +dj +lE +cO +di +mJ +ei +mp +dg +di +ei +lG +cT +fU +fQ +pb +lK +jG +mK +mq +fQ +fV +cy +oc +gH +dt +kD +iM +yK +iM +yK +iM +yK +iM +yK +hP +cn +gW +hN +gL +hW +gX +hh +gY +gX +gY +gY +gX +gX +gY +gX +gY +gX +gY +gY +gX +gX +gY +gX +gX +gX +gY +gY +gY +gX +gY +gY +gY +gY +gY +gX +gY +gY +gY +gY +gY +gY +gY +gY +gX +gY +gY +gY +gY +gX cj cj cj @@ -23680,110 +28432,110 @@ SV SV GG WV -Go -pG -tT +dv +ni +nk MX nq -Jy -Qj -vq -Zl -op +fr +aA +bs +bw +bT Bb -GX +dV FY -mC -Vj -gj -CI -Ty -Gl -Jr -ae -ag -ss -WV -Fq -SV -SV -hZ -SB -SB -SB -SB -lq -SB -lq -SB -SB -SB -SB -SB -lq -SB -SB -Lv -SV +bT +bT +en +eK +fa +dF +dG +eb +dG +dG +dG +fb +dG +dG +dG +dG +dG +fc +fd +fn +fd +fd +fd +fF +fd +fb +mi +oN +kl +oE +gH +dt kD +iM yK +iM yK +iM yK +iM yK -yK -yK -yK -yK -SB -lq -SB -SB -SB -lq -SB -SB -lq -SB -SB -SB -lq -lq -SB -lq -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -lq -SB -SB -lq -SB -SB -SB -SB -lq -SB -lq -SB -lq -SB -lq -lq -SB -lq -lq -SB -lq -SB +hP +cs +hL +hO +hL +hX +gY +gY +gX +gY +gY +gY +gX +gX +gY +gX +gY +gY +gY +gY +gY +gX +gY +gY +gY +gY +gY +gY +gX +gY +gY +gX +gY +gY +gY +gY +gX +gY +gX +gY +gX +gY +gX +gX +gY +gX +gX +gY +gX +gY cj cj cj @@ -23877,115 +28629,115 @@ SB SB SB SB -Lv -SV -Uk -GG -WV -Qv -pG -GO -MX -Mz -uO -mz -GJ -nT -Hr -vG -Ec -mQ -PE -nT -dZ -zu -LY -Bm -Jr -ad -ag -ss -pF -Fq -SV -Uk -hZ -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -Lv -SV -CD -iM -iM -iM -iM -iM -iM -iM -iM -SB -SB -SB -lq -SB -SB -SB -lq -lq -lq -lq -lq -SB -SB -SB -SB -SB -lq -SB -lq -SB -SB -lq -lq -lq -SB -SB -lq -lq -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -lq -lq -SB -lq -SB -SB -SB -lq +Lv +SV +Uk +GG +WV +aQ +ni +nk +MX +Mz +fp +aH +fs +fu +fv +fy +dO +fA +fv +fu +ga +gb +gd +ge +cL +gf +fQ +fQ +fQ +gs +fQ +cL +fQ +fQ +fQ +ls +fQ +fU +fQ +cL +fQ +pm +fQ +oD +fQ +fW +cy +oc +gH +dt +CD +iM +yK +iM +yK +iM +yK +iM +yK +hP +cs +hS +hI +hS +hW +gY +gX +gX +gX +gX +gX +gY +gY +gY +gY +gY +gX +gY +gX +gY +gY +gX +gX +gX +gY +gY +gX +gX +gY +gY +gY +gY +gX +gY +gY +gY +gY +gY +gY +gY +gY +gX +gX +gY +gX +gY +gY +gY +gX cj cj cj @@ -24084,110 +28836,110 @@ SV Uk GG pF -lP -pG -GV +bP +nd +pn Fu wO wO -ZW +aK wO it AI -Hr -sR -nT +bb +dO +fJ KG it XM pQ XM XM -bG +XM re -cq -lP -WV -Fq -SV -SV -hZ -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -Jl -qA -oX -oX -ZF -oX -oX -ZF -ZF -oX -mR -lq -lq -SB -SB -lq -SB -SB -lq -lq -lq -lq -lq -SB -lq -SB -SB -lq -SB -SB -lq -SB -SB -lq -lq -SB -SB -SB -SB -SB -lq -lq -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB +aM +aM +aM +lh +kC +kC +aM +kH +kH +nV +lv +lv +kH +cv +cv +cv +de +dD +de +cv +cx +oc +gH +cc +do +cl +cl +cl +cl +cl +cl +cl +cl +hQ +hU +an +hM +gV +hY +gY +gY +gX +gX +gX +gX +gX +gY +gX +gY +gY +gX +gY +gY +gX +gY +gY +gX +gX +gY +gY +gY +gY +gY +gX +gX +gY +gX +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY +gX +gY +gY cj cj cj @@ -24286,51 +29038,51 @@ SV SV GG WV -tk -pG -GV +bP +nf +nr Fu SY Hp -Gj +ba lr -wO it -fw -Lx -nT it -XM +bH +dO +fJ +it +it tw zl TR gt bG -nP -cq -lP -WV -Fq -SV -SV -hZ -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -wk +mX +aP +aV +cQ +kF +lm +ma +aP +lw +mf +nN +mC +mE +lz +cu +cx +mG +ds +dE +dA +oO +cx +od +gH +cd kD iM iM @@ -24340,11 +29092,11 @@ iM iM iM iM -Wj -iM -iM -iM +bU iM +gZ +gK +gN iM iM iM @@ -24488,51 +29240,51 @@ SV SV GG WV -lP -pG -GV +bP +nd +pd Fu -SY +nO Ts -CN +bu aI -aK +dz wO -Rh -WO -hB +bI +dX +ef XM AT zJ Lk Gi Gi -bG -Wf -cq -lP -WV -Fq -Uk -SV -hZ -SB -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -wk +oz +mZ +aP +aX +kv +kG +ln +lu +aP +lx +mc +mg +mD +oY +lz +cu +cx +cA +dA +dI +eD +eG +cx +oc +gH +cd kD iM iM @@ -24541,15 +29293,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gO +gT +hC +gK +hb +gT +hm +yK iM iM iM @@ -24690,51 +29442,51 @@ SV SV GG pF -lP -pG -GM +bP +nd +ns Fu Qc MM -dn -aJ -ab +eJ +ft +gz wO -bb -bs -bH -XM -dW -Zw -MW -ff -VU -bG -pj -cq -lP -WV -UJ -Uk -SV -hZ -SB -SB -SB -SB -lq -SB -SB -SB -SB -lq -SB -lq -SB -SB -SB -Lv -wk +bL +dY +fw +XM +dW +fo +MW +ff +VU +bG +nb +aP +bX +kw +kM +lp +kw +aP +ly +mF +mz +md +md +lz +cu +cx +cA +dB +eB +eE +eG +cx +oe +gH +cd kD iM iM @@ -24743,15 +29495,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +hd +hz +hx +hJ +hG +hu +yK iM iM iM @@ -24892,61 +29644,52 @@ SV Uk QO pF -tk -pG -Jf -Fu +bP +ni +nt +oy SY UW UW -zF +gA YG wO -Xo -bu -GB +da +ea +oZ XM RT yD yA Gi -gt +nR bG -Wf -cq -tk -WV -Fq -SV -SV -hZ -SB -lq -SB -SB -SB -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -Lv -wk -CD -iM -iM -iM -iM -iM -iM -iM -iM -iM +mZ +aP +dC +kE +ll +nM +lp +aP +mb +me +mA +oX +md +lz +cu +cx +jH +jA +eC +mI +eH +cx +oc +gH +cd +kD iM iM iM @@ -24954,6 +29697,15 @@ iM iM iM iM +yK +gS +gU +hA +hB +hc +gU +hn +yK iM iM iM @@ -25094,9 +29846,9 @@ Uk SV GG WV -lP -pG -GV +bP +nd +nr Fu SY SY @@ -25104,9 +29856,9 @@ SY UW SY wO -VN -bv -bI +fX +ec +fY XM bJ Fp @@ -25114,31 +29866,31 @@ PH gt gt bG -DK -cq -lP -WV -UJ -SV -SV -hZ -SB -SB -SB -SB -SB -lq -SB -SB -SB -SB -lq -SB -SB -SB -lq -Lv -wk +nl +aP +aP +aP +aP +aP +aP +aP +lz +lz +lz +lz +lz +lz +cx +cx +cx +cx +cx +cx +cx +cx +od +gH +cd kD iM iM @@ -25147,15 +29899,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gM +gK +ha +hE +gK +gK +gR +yK iM iM iM @@ -25296,9 +30048,9 @@ Uk SV GG pF -lP -pG -GV +bP +ni +nr Fu Fu Fu @@ -25306,9 +30058,9 @@ Fu Fu Fu Fu -Pm -bw -bL +dh +dZ +fZ bG bG bG @@ -25316,31 +30068,31 @@ bG bG bG bG -Wf -cq -lP -WV -Fq -Uk -SV -hZ -lq -SB -SB -SB -SB -SB -SB -SB -SB -SB -lq -SB -SB -SB -lq -Lv -St +mZ +pe +nD +nD +pe +nD +nD +nD +pe +nD +nD +nD +pe +nD +pe +nD +nD +nD +pe +nD +pe +cy +of +gH +cd kD iM iM @@ -25349,15 +30101,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +hq +hj +hC +gK +hb +hj +ho +yK iM iM iM @@ -25498,51 +30250,51 @@ SV SV GG pF -lP -pG -Zo -Pk -au -gc -ml -sq -Ro -aZ +bP +ng +nv +nx +og +oi +oj +ol +on +db mV bx CB cf -tO -br -Ep -KE -Qq -VC -tr -cq -tk -WV -Fq -SV -SV -hZ -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Pw -Lv -wk +eI +eV +eW +ia +mu +mv +nm +bQ +pf +nG +bQ +pf +bQ +pg +bQ +pf +bQ +nG +bQ +pf +bQ +nG +pf +bQ +bQ +nG +bQ +eQ +nH +gH +cd kD iM iM @@ -25551,15 +30303,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +gY +hD +gK +ht +gY +hu +yK iM iM iM @@ -25696,65 +30448,56 @@ SV Uk Uk SV -NI -Ct +SV +Uk WV pF -lP -pG -XI -XI -NX -aE -bt +bP +nd +ni +ni +nn +aU +np aO cV -QG -QG +eR +eR by -QG -QG -ci -io -DM -PV -VW -uq -Af -cq -lv -sM -tK -uJ -uJ -LA -qp -qp -qp -qp -LA -qp -qp -qp -qp -qp -LA -LA -qp -qp -qp -qp -Xt -NI -iM -iM -iM -iM -iM -iM -iM -iM -iM +eR +eR +nB +nC +nS +nU +lo +ot +ou +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gH +gH +gH +cd +kD iM iM iM @@ -25762,6 +30505,15 @@ iM iM iM iM +yK +hi +hr +hA +gK +hc +hr +hp +yK iM iM iM @@ -25865,94 +30617,89 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -Ct -Ct -VH -VH -gC -gC -gC -gC -gC -gC -gC -gC -gC -VH -VH -gC -gC -gC -gC -Ct -NI -WV -WV -lP -pG -pG -pG -pG -pG -pG -pG -pG -QG -bg -bz -qS -QG -cq -cq -cq -cq -cq -cq -cq -cq -ro -WV -pF +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM +iM Ct Ct -gC -gC +VH VH gC gC gC gC -VH -VH gC gC gC gC gC VH +VH +gC +gC gC gC Ct -Ct -iM -iM -iM -iM -iM +NI +WV +WV +bP +bP +bP +bP +bP +bP +bP +bP +bP +eR +bg +bz +qS +eR +gF +gF +gF +gF +gF +gF +gF +gF +WV +WV +WV +WV +WV +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +dx +NI iM iM iM @@ -25960,10 +30707,15 @@ iM iM iM iM +yK iM iM +hy +gK +gR iM iM +yK iM iM iM @@ -26104,7 +30856,7 @@ iM iM GG WV -lP +WV lP lP lP @@ -26113,52 +30865,43 @@ lP lP KX PC -QG +eR bh bA PM -QG -Lc -SN -qO -qO -ot -qO -qO -ot -gl -WV -Fq -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +eR +bk +dy +dy +dy +dy +dy +dy +dy +dy +dy +dy +bY +bY +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ch +ox +NI iM iM iM @@ -26166,6 +30909,15 @@ iM iM iM iM +yK +gO +gT +hC +gK +hb +gT +hm +yK iM iM iM @@ -26315,12 +31067,12 @@ WV WV WV aY -QG -QG +eR +eR bB -QG -QG -bU +eR +eR +bq cg WV pF @@ -26359,15 +31111,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +hg +hw +hx +hJ +hH +hu +yK iM iM iM @@ -26561,15 +31313,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gS +gU +hA +hB +hc +gU +hn +yK iM iM iM @@ -26763,15 +31515,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gM +gK +ha +hE +gK +gK +gR +yK iM iM iM @@ -26965,15 +31717,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +hq +hj +hC +gK +hb +hj +ho +yK iM iM iM @@ -27167,15 +31919,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +gY +hD +gK +ht +gY +hu +yK iM iM iM @@ -27369,15 +32121,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +hi +hr +hA +gK +hc +hr +hp +yK iM iM iM @@ -27571,15 +32323,15 @@ iM iM iM iM +yK iM iM +hy +gK +gR iM iM -iM -iM -iM -iM -iM +yK iM iM iM @@ -27773,15 +32525,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gO +gT +hC +gK +hb +gT +hm +yK iM iM iM @@ -27975,15 +32727,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +hF +he +hx +hJ +hK +hu +yK iM iM iM @@ -28177,15 +32929,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gS +gU +hA +hB +hc +gU +hn +yK iM iM iM @@ -28379,15 +33131,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gM +gK +hv +hE +gK +gK +gR +yK iM iM iM @@ -28581,15 +33333,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +hq +hj +hf +gK +hb +hj +ho +yK iM iM iM @@ -28783,15 +33535,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +gP +gY +hs +gK +ht +gY +hu +yK iM iM iM @@ -28985,15 +33737,15 @@ iM iM iM iM -iM -iM -iM -iM -iM -iM -iM -iM -iM +yK +hi +hr +hk +gQ +hl +hr +hp +yK iM iM iM @@ -29334,12 +34086,12 @@ iM iM iM tx -SB -SB -SB +lP +lP +lP am -ZF -ZF +af +af aD pl iM @@ -29354,13 +34106,13 @@ iM iM iM pl -cC -ZF -ZF cp -SB -SB -SB +af +af +co +lP +lP +lP pl iM iM diff --git a/maps/outreach/outreach.dm b/maps/outreach/outreach.dm index 11fe09a2966..b6608b881af 100644 --- a/maps/outreach/outreach.dm +++ b/maps/outreach/outreach.dm @@ -1,6 +1,10 @@ #if !defined(USING_MAP_DATUM) #define OUTREACH_SURFACE_TURF /turf/exterior/barren/outreach #define OUTREACH_PLANETOID_ID "outreach" + + ///////////////////////////////////////////////////////////////////// + // Level IDs + ///////////////////////////////////////////////////////////////////// #define OUTREACH_LEVEL_ID_SKY "outreach_sky" #define OUTREACH_LEVEL_ID_SURFACE "outreach_surface" #define OUTREACH_LEVEL_ID_UNDERGROUND "outreach_underground" @@ -10,9 +14,66 @@ #define OUTREACH_LEVEL_ID_SOUTH_UNDERGROUND "outreach_south_underground" #define OUTREACH_LEVEL_ID_SOUTH_MOUNTAIN "outreach_south_mountain" + ///////////////////////////////////////////////////////////////////// + // Networking + ///////////////////////////////////////////////////////////////////// + #define OUTREACH_NETWORK_NAME "outreach_net" + ///////////////////////////////////////////////////////////////////// + // Netork Groups (Access) + ///////////////////////////////////////////////////////////////////// + + #define OUTREACH_USR_GRP_MAINT "oh_maintenance" + #define OUTREACH_USR_GRP_JANITOR "oh_janitorial" + #define OUTREACH_USR_GRP_EVA "oh_eva" + #define OUTREACH_USR_GRP_EXTERIOR "oh_exterior" + #define OUTREACH_USR_GRP_KITCHEN "oh_kitchen" + #define OUTREACH_USR_GRP_BOTANY "oh_botany" + + #define OUTREACH_USR_GRP_COMMAND "oh_command" + #define OUTREACH_USR_GRP_COMMAND_TCOM "oh_telecomms" + #define OUTREACH_USR_GRP_COMMAND_FINANCES "oh_finances" + #define OUTREACH_USR_GRP_COMMAND_RECORDS "oh_records" + + #define OUTREACH_USR_GRP_CARGO "oh_cargo" + #define OUTREACH_USR_GRP_CARGO_HEAD "oh_cargo_head" + #define OUTREACH_USR_GRP_CARGO_REQ "oh_cargo_requisition" + #define OUTREACH_USR_GRP_CARGO_VAULT "oh_cargo_vault" + + #define OUTREACH_USR_GRP_MEDICAL "oh_medical" + #define OUTREACH_USR_GRP_MEDICAL_HEAD "oh_medical_head" + #define OUTREACH_USR_GRP_MEDICAL_STORAGE "oh_medical_storage" + #define OUTREACH_USR_GRP_MEDICAL_MORGUE "oh_medical_morgue" + + #define OUTREACH_USR_GRP_SECURITY "oh_security" + #define OUTREACH_USR_GRP_SECURITY_HEAD "oh_security_head" + #define OUTREACH_USR_GRP_SECURITY_ARMORY "oh_security_armory" + #define OUTREACH_USR_GRP_SECURITY_FORENSICS "oh_forensics" + #define OUTREACH_USR_GRP_SECURITY_BRIG "oh_brig" + #define OUTREACH_USR_GRP_SECURITY_WARDEN "oh_warden" + #define OUTREACH_USR_GRP_SECURITY_DETECTIVE "oh_detective" + + #define OUTREACH_USR_GRP_MINING "oh_mining" + #define OUTREACH_USR_GRP_MINING_HEAD "oh_mining_head" + #define OUTREACH_USR_GRP_MINING_PROCESSING "oh_mining_processing" + + #define OUTREACH_USR_GRP_ENGINEERING "oh_engineering" + #define OUTREACH_USR_GRP_ENGINEERING_HEAD "oh_engineering_head" + #define OUTREACH_USR_GRP_ENGINEERING_STORAGE "oh_engineering_storage" + #define OUTREACH_USR_GRP_ENGINEERING_ATMOS "oh_atmos" + #define OUTREACH_USR_GRP_ENGINEERING_GEN "oh_generators" + + #define OUTREACH_USR_GRP_RESEARCH "oh_research" + #define OUTREACH_USR_GRP_RESEARCH_HEAD "oh_research_head" + #define OUTREACH_USR_GRP_RESEARCH_DB "oh_research_database" + #define OUTREACH_USR_GRP_RESEARCH_CHEM "oh_chemistry" + + + //////////////////////////////////////////////////////////////////// // Mods section + //////////////////////////////////////////////////////////////////// + #include "../../mods/persistence/_persistence.dme" #include "../../mods/species/bayliens/_bayliens.dme" #include "../../mods/species/vox/_vox.dme" @@ -22,10 +83,6 @@ #include "../../mods/species/utility_frames/_utility_frames.dme" #include "../../mods/content/xenobiology/_xenobiology.dme" - //Map extensions - #include "../chargen/chargen_areas.dm" - #include "../chargen/chargen_objects.dm" - //Away sites // #include "../away/casino/casino.dm" // #include "../away/derelict/derelict.dm" @@ -35,6 +92,7 @@ // #include "../away/smugglers/smugglers.dm" // #include "../away/slavers/slavers_base.dm" // #include "../away/yacht/yacht.dm" + #include "../chargen/chargen_template.dm" #include "turfs\outreach_turf_border.dm" #include "turfs\outreach_turf_flooded.dm" @@ -55,13 +113,28 @@ #include "outreach_departments.dm" #include "outreach_jobs.dm" #include "outreach_exoplanet.dm" - #include "outreach_network.dm" #include "outreach_elevators.dm" - #include "outreach_machinery.dm" #include "outreach_weather.dm" - #include "outreach_structures.dm" #include "outreach_music.dm" + #include "items/outreach_items.dm" + #include "items/id_cards.dm" + #include "items/mounted_shotgun.dm" + + #include "structures/outreach_structures.dm" + + #include "machinery/outreach_network.dm" + #include "machinery/access_controller.dm" + #include "machinery/area_controller.dm" + #include "machinery/network_machines.dm" + #include "machinery/conveyors.dm" + #include "machinery/doors.dm" + #include "machinery/telecomms.dm" + #include "machinery/computers.dm" + #include "machinery/outreach_machinery.dm" + #include "machinery/outreach_turrets.dm" + #include "machinery/outreach_disposal.dm" + #define USING_MAP_DATUM /datum/map/outreach #elif !defined(MAP_OVERRIDE) diff --git a/maps/outreach/outreach_areas.dm b/maps/outreach/outreach_areas.dm index 0a9544b3877..aab79905701 100644 --- a/maps/outreach/outreach_areas.dm +++ b/maps/outreach/outreach_areas.dm @@ -43,8 +43,8 @@ var/global/list/outreach_initial_protected_areas = list( name = "Outreach Sky" icon_state = "blueold" alpha = 128 - base_turf = /turf/exterior/open - open_turf = /turf/exterior/open + base_turf = /turf/open + open_turf = /turf/open sound_env = PLAIN ambience = null forced_ambience = list( @@ -139,13 +139,13 @@ var/global/list/outreach_initial_protected_areas = list( icon_state = "toilet" area_flags = AREA_FLAG_ION_SHIELDED | AREA_FLAG_RAD_SHIELDED base_turf = OUTREACH_SURFACE_TURF - open_turf = /turf/exterior/open + open_turf = /turf/open abstract_type = /area/outreach ///Base area for anything that's not exposed to the outside and part of the outreach outpost. /area/outreach/outpost name = "Outpost" - open_turf = /turf/simulated/open + open_turf = /turf/open base_turf = OUTREACH_SURFACE_TURF ///turf/simulated/floor/asteroid //Underground floors use this, and all floors above will use the open_turf instead @@ -163,7 +163,7 @@ var/global/list/outreach_initial_protected_areas = list( /////////////////////////////////////////////////// /area/outreach/outpost/control name = OUTREACH_AREA_NAME_CONTROL_ROOM - icon_state = "server" + icon_state = "tcomsatcomp" sound_env = ROOM secure = TRUE req_access = list(list(access_engine),list(access_heads)) @@ -175,40 +175,119 @@ var/global/list/outreach_initial_protected_areas = list( ) /area/outreach/outpost/control/hall name = "OB 1B Servers Entrance" - icon_state = "server" + icon_state = "tcomsatentrance" + +/area/outreach/outpost/control/generators + name = "OB 1B Servers Backup Generators" + icon_state = "substation" + /area/outreach/outpost/control/servers - name = OUTREACH_AREA_NAME_SERVER_ROOM + name = "OB 1B Servers" icon_state = "server" -/area/outreach/outpost/control/storage - name = "OB 1B Servers Storage Room" - icon_state = "server" - req_access = list(list(access_engine)) + +/area/outreach/outpost/control/servers/access + name = "OB 1B Servers Access" + icon_state = "server" +/area/outreach/outpost/control/servers/uplink_room + name = "OB 1B Servers Uplink Room" + icon_state = "tcomsateast" +/area/outreach/outpost/control/servers/controller_room + name = "OB 1B Servers Controllers Room" + icon_state = "tcomsatcham" +/area/outreach/outpost/control/servers/mainframe_room + name = "OB 1B Servers Mainframes Room" + icon_state = "tcomsatwest" + +// /area/outreach/outpost/control/storage +// name = "OB 1B Servers Storage Room" +// icon_state = "server" +// req_access = list(list(access_engine)) /area/outreach/outpost/control/cooling name = "OB 1B Cooling Systems Room" icon_state = "server" req_access = list(list(access_engine)) forced_ambience = list('sound/ambience/ambiatm1.ogg') -/area/outreach/outpost/control/command_hall +/////////////////////////////////////////////////// +// Command +/////////////////////////////////////////////////// + +/area/outreach/outpost/command + req_access = list(list(access_bridge), list(access_security), list(access_heads)) + +/area/outreach/outpost/command/hall name = "OB 1B Command Hall" icon_state = "bridge_hallway" - req_access = list(list(access_bridge),list(access_security)) -/area/outreach/outpost/control/command_conference +/area/outreach/outpost/command/hall/inner + name = "OB 1B Command Inner Hall" + icon_state = "bridge_hallway" + +/area/outreach/outpost/command/conference name = "OB 1B Conference Hall" icon_state = "bridge_meeting" - req_access = list(list(access_bridge),list(access_security)) -/area/outreach/outpost/control/command_office +/area/outreach/outpost/command/office name = "OB 1B Command Office" - icon_state = "law" + icon_state = "office" + req_access = list(list(access_bridge)) +/area/outreach/outpost/command/office/second + name = "OB 1B Command Office #2" + icon_state = "office" +/area/outreach/outpost/command/office/third + name = "OB 1B Command Office #3" + icon_state = "office" + +/area/outreach/outpost/command/supplies + name = "OB 1B Command Supplies" + icon_state = "storage" req_access = list(list(access_bridge)) -/area/outreach/outpost/control/command_room - name = "OB 1B Command Room" - icon_state = "law" +/area/outreach/outpost/command/archives + name = "OB 1B Command Archives" + icon_state = "vault" + req_access = list(list(access_bridge)) + +/area/outreach/outpost/command/lockers + name = "OB 1B Command Lockers" + icon_state = "locker" req_access = list(list(access_bridge)) +// Arrivals + +/area/outreach/outpost/command/arrivals + name = "OB 1F Arrivals Office Access" + icon_state = "green" + req_access = list(list(access_bridge)) + +/area/outreach/outpost/command/arrivals/lobby + name = "OB 1F Arrivals Office Lobby" + icon_state = "dk_yellow" + +/area/outreach/outpost/command/arrivals/office + name = "OB 1F Arrivals Office" + icon_state = "checkpoint" + +/////////////////////////////////////////////////// +// Arrivals +/////////////////////////////////////////////////// + +/area/outreach/outpost/arrivals + name = "OB 1F Arrival" + icon_state = "purple" + +/area/outreach/outpost/arrivals/entrance + name = "OB 1F Arrival Entrance" + icon_state = "entry_1" + +/area/outreach/outpost/arrivals/teleporter + name = "OB 1F Arrival Teleporter" + icon_state = "teleporter" + +/area/outreach/outpost/arrivals/lobby + name = "OB 1F Arrival Lobby" + icon_state = "dk_yellow" + /////////////////////////////////////////////////// //Chemistry Lab /////////////////////////////////////////////////// @@ -225,6 +304,38 @@ var/global/list/outreach_initial_protected_areas = list( icon_state = "auxstorage" sound_env = ROOM +/////////////////////////////////////////////////// +//Xenoarch Lab +/////////////////////////////////////////////////// +/area/outreach/outpost/lab/xeno + name = "OB 1B Xeno Lab Lobby" + icon_state = "xeno_lab" + +/area/outreach/outpost/lab/xeno/experiment + name = "OB 1B Xeno Experiment" + icon_state = "misclab" + sound_env = ROOM + +/area/outreach/outpost/lab/xeno/storage + name = "OB 1B Xeno Lab Storage" + icon_state = "xeno_f_store" + +/////////////////////////////////////////////////// +//Research Lab +/////////////////////////////////////////////////// +/area/outreach/outpost/lab/research + name = "OB 1B Research Lab Lobby" + icon_state = "research" + +/area/outreach/outpost/lab/research/workshop + name = "OB 1B Research Lab Workshop" + icon_state = "labwing" + sound_env = ROOM + +/area/outreach/outpost/lab/research/room + name = "OB 1B Research Lab Room" + icon_state = "toxlab" + /////////////////////////////////////////////////// //Medbay /////////////////////////////////////////////////// @@ -234,21 +345,27 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/medbay/storage name = "OB 1B Medbay Storage" - icon_state = "medbay3" -/area/outreach/outpost/medbay/storage/equipment - name = "OB 1B Medbay Equipment Storage" -/area/outreach/outpost/medbay/storage/medical - name = "OB 1B Medbay Medical Storage" + icon_state = "storage" /area/outreach/outpost/medbay/lobby name = "OB 1B Medbay Lobby" icon_state = "medbay2" - sound_env = AUDITORIUM +/area/outreach/outpost/medbay/lobby/counter + name = "OB 1B Medbay Lobby Counter" + color = "red" + icon_state = "medbay2" + +/area/outreach/outpost/medbay/staff_room + name = "OB 1B Medbay Staff Room" + icon_state = "medbay3" + +/area/outreach/outpost/medbay/lockers + name = "OB 1B Medbay Lockers" + icon_state = "locker" /area/outreach/outpost/medbay/main_hall name = "OB 1B Medbay Hall" - icon_state = "exam_room" - sound_env = AUDITORIUM + icon_state = "medbay4" /area/outreach/outpost/medbay/triage name = "OB 1B Medbay Triage" @@ -256,13 +373,43 @@ var/global/list/outreach_initial_protected_areas = list( sound_env = ROOM /area/outreach/outpost/medbay/op_room - name = "OB 1B Medbay Surgery Room" + name = "OB 1B Medbay Surgery Room 1" icon_state = "surgery" sound_env = ROOM +/area/outreach/outpost/medbay/op_room2 + name = "OB 1B Medbay Surgery Room 2" + icon_state = "surgery" + color = "red" + sound_env = ROOM + +/area/outreach/outpost/medbay/workshop + name = "OB 1B Medbay Workshop" + icon_state = "patients" + sound_env = ROOM + +/area/outreach/outpost/medbay/cloning + name = "OB 1B Medbay Cloning Lab" + icon_state = "cloning" + sound_env = ROOM + +/area/outreach/outpost/medbay/office + name = "OB 1B Medbay Office" + icon_state = "office" + sound_env = ROOM + +/area/outreach/outpost/medbay/head_office + name = "OB 1B Medbay Head Office" + icon_state = "heads_cmo" + sound_env = ROOM + /area/outreach/outpost/medbay/morgue name = "OB 1B Medbay Morgue" icon_state = "morgue" + +/area/outreach/outpost/medbay/crematorium + name = "OB 1B Medbay Crematorium" + icon_state = "disposal" sound_env = SMALL_ENCLOSED /////////////////////////////////////////////////// @@ -319,6 +466,8 @@ var/global/list/outreach_initial_protected_areas = list( name = "OH GF West Hallway" /area/outreach/outpost/hallway/west/floor1 name = "OH 1F West Hallway" +/area/outreach/outpost/hallway/west/south/floor1 + name = "OH 1F SW Hallway" //Central /area/outreach/outpost/hallway/central @@ -334,24 +483,43 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/hallway/south/ground/business_wing name = "OH GF Business Hallway" +// /area/outreach/outpost/hallway/south/floor1/business_wing +// name = "OH 1F Business Hallway" /////////////////////////////////////////////////// //Stairwell /////////////////////////////////////////////////// /area/outreach/outpost/stairwell - name = "OH Stairwell" + name = "OB Stairwell" icon_state = "purple" sound_env = CONCERT_HALL area_flags = AREA_FLAG_HALLWAY /area/outreach/outpost/stairwell/basement2 - name = "OH 2B Stairwell" + name = "OB 2B Stairwell" /area/outreach/outpost/stairwell/basement1 - name = "OH 1B Stairwell" + name = "OB 1B Stairwell" /area/outreach/outpost/stairwell/ground - name = "OH GF Stairwell" + name = "OB GF Stairwell" /area/outreach/outpost/stairwell/floor1 - name = "OH 1F Stairwell" + name = "OB 1F Stairwell" + +/area/outreach/outpost/stairwell/ground/se + name = "OB GF South-East Stairwell" +/area/outreach/outpost/stairwell/floor1/se + name = "OB 1F South-East Stairwell" + +/area/outreach/outpost/stairwell/ground/atmos + name = "OB GF Atmos Stairwell" +/area/outreach/outpost/stairwell/basement1/atmos + name = "OB 1B Atmos Stairwell" + +/area/outreach/outpost/stairwell/basement1/command + name = "OB 1B Command Stairwell" +/area/outreach/outpost/stairwell/ground/command + name = "OB GF Command Stairwell" +/area/outreach/outpost/stairwell/floor1/command + name = "OB GF Command Stairwell" /////////////////////////////////////////////////// //Maintenance @@ -369,6 +537,9 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/maint/passage/b2/northwest name = "OB 2B NW Maint" icon_state = "fpmaint" +/area/outreach/outpost/maint/passage/b2/northwest/junction + name = "OB 2B NW Junction Maint" + icon_state = "fpmaint" /area/outreach/outpost/maint/passage/b2/northeast name = "OB 2B NE Maint" icon_state = "fsmaint" @@ -383,8 +554,15 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB 1B NW Maint" icon_state = "fpmaint" /area/outreach/outpost/maint/passage/b1/northwest/airlock - name = "OB 1B NE Alck Maint" + name = "OB 1B NW Alck Maint" icon_state = "fpmaint" +/area/outreach/outpost/maint/passage/b1/northwest/atmos + name = "OB 1B NW Atmos Maint" + icon_state = "maint_engineering" +/area/outreach/outpost/maint/passage/b1/northwest/research + name = "OB 1B NW research Maint" + icon_state = "maint_research_port" + /area/outreach/outpost/maint/passage/b1/northeast name = "OB 1B NE Maint" icon_state = "fsmaint" @@ -407,6 +585,10 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB 1B Sec Maint" icon_state = "maint_security_port" +/area/outreach/outpost/maint/passage/b1/commandmaint + name = "OB 1B Command Maint" + icon_state = "maint_e_shuttle" + /area/outreach/outpost/maint/passage/b1/east/junct name = "OB 1B E Maint Junction" icon_state = "smaint" @@ -416,7 +598,9 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/maint/passage/b1/north name = "OB 1B N Maint" icon_state = "fmaint" - +/area/outreach/outpost/maint/passage/b1/north/airlock + name = "OB 1B N Airlock Maint" + icon_state = "fmaint" /area/outreach/outpost/maint/passage/ground/northwest name = "OB GF NW Maint" @@ -430,6 +614,9 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/maint/passage/ground/west name = "OB GF W Maint" icon_state = "pmaint" +/area/outreach/outpost/maint/passage/ground/west2 + name = "OB GF W Maint2" + icon_state = "pmaint" /area/outreach/outpost/maint/passage/ground/west/junct name = "OB GF W Maint Junction" /area/outreach/outpost/maint/passage/ground/south @@ -459,11 +646,21 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB 1F SE Maint" icon_state = "asmaint" -/area/outreach/outpost/maint/storage - name = "OB 1B Maintenance Storage" - icon_state = "auxstorage" -/area/outreach/outpost/maint/storage/ground - name = "OB GF Maintenance Storage" +/area/outreach/outpost/maint/passage/f1/west + name = "OB 1F W Wall Maint" + icon_state = "apmaint" +/area/outreach/outpost/maint/passage/f1/southwest/wall + name = "OB 1F SW Wall Maint" + icon_state = "apmaint" +/area/outreach/outpost/maint/passage/f1/south + name = "OB 1F S Wall Maint" + icon_state = "apmaint" + +// /area/outreach/outpost/maint/storage +// name = "OB 1B Maintenance Storage" +// icon_state = "auxstorage" +// /area/outreach/outpost/maint/storage/ground +// name = "OB GF Maintenance Storage" /area/outreach/outpost/maint/power icon_state = "substation" @@ -487,13 +684,13 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/maint/atmos/f1 name = "OB 1F Atmos Lines Maintenance" -/area/outreach/outpost/maint/outer_wall - icon_state = "maint_exterior" +// /area/outreach/outpost/maint/outer_wall +// icon_state = "maint_exterior" -/area/outreach/outpost/maint/outer_wall/ground - name = "OB GF Maintenance Outer" -/area/outreach/outpost/maint/outer_wall/f1 - name = "OB 1F Maintenance Outer" +// /area/outreach/outpost/maint/outer_wall/ground +// name = "OB GF Maintenance Outer" +// /area/outreach/outpost/maint/outer_wall/f1 +// name = "OB 1F Maintenance Outer" /area/outreach/outpost/maint/waste icon_state = "fpmaint" @@ -513,18 +710,19 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB 1B Cafeteria" icon_state = "cafeteria" sound_env = AUDITORIUM -/area/outreach/outpost/cafeteria/common - name = "OB 1B Common Room" +// /area/outreach/outpost/cafeteria/common +// name = "OB 1B Common Room" /area/outreach/outpost/cafeteria/kitchen name = "OB 1B Kitchen" icon_state = "kitchen" sound_env = LIVINGROOM -/area/outreach/outpost/cafeteria/kitchen/backroom - name = "OB 1B Kitchen Storeroom" - sound_env = ROOM +// /area/outreach/outpost/cafeteria/kitchen/backroom +// name = "OB 1B Kitchen Storeroom" +// sound_env = ROOM /area/outreach/outpost/cafeteria/kitchen/freezer name = "OB 1B Kitchen Freezer" + color = "blue" sound_env = SMALL_ENCLOSED /////////////////////////////////////////////////// @@ -535,6 +733,11 @@ var/global/list/outreach_initial_protected_areas = list( icon_state = "hydro" sound_env = STANDARD_STATION +/area/outreach/outpost/hydroponics/backroom + name = "OB 1B Hydroponics" + icon_state = "storage" + sound_env = SMALL_ENCLOSED + /////////////////////////////////////////////////// //Engineering /////////////////////////////////////////////////// @@ -551,6 +754,11 @@ var/global/list/outreach_initial_protected_areas = list( name = OUTREACH_AREA_NAME_POWER_ROOM icon_state = "engine_smes" +/area/outreach/outpost/engineering/b2/geothermals_airlock + name = "OB 2B Geothermals Airlock" + icon_state = "engine_eva" + sound_env = SMALL_ENCLOSED + /area/outreach/outpost/engineering/b2/geothermals name = OUTREACH_AREA_NAME_GEOTHERMALS icon_state = "engine" @@ -570,6 +778,30 @@ var/global/list/outreach_initial_protected_areas = list( 'sound/ambience/ambigen11.ogg', ) +/area/outreach/outpost/engineering/gf/hall + name = "OB GF Engineering Hall" + icon_state = "engineering" +/area/outreach/outpost/engineering/gf/chief + name = "OB GF Chief Engineer Office" + icon_state = "engineering_foyer" +// /area/outreach/outpost/engineering/gf/storage +// name = "OB GF Engineering Storage" +// icon_state = "engineering_storage" +/area/outreach/outpost/engineering/gf/staffroom + name = "OB GF Engineering Staffroom" + icon_state = "engineering_break" +/area/outreach/outpost/engineering/gf/entrance + name = "OB GF Engineering Entrance" + icon_state = "entry_1" + sound_env = SMALL_ENCLOSED +/area/outreach/outpost/engineering/gf/workshop + name = "OB GF Engineering Workshop" + icon_state = "engineering_workshop" +/area/outreach/outpost/engineering/gf/ce_storage + name = "OB GF Storage" + icon_state = "engineering_storage" + sound_env = SMALL_ENCLOSED + /////////////////////////////////////////////////// //Atmos /////////////////////////////////////////////////// @@ -582,10 +814,10 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB 1B Atmos Storage" icon_state = "atmos" sound_env = STANDARD_STATION -/area/outreach/outpost/atmospherics/b1/storage/canister - name = "OB 1B Atmos Canister Storage" - icon_state = "atmos" - sound_env = SMALL_ENCLOSED +// /area/outreach/outpost/atmospherics/b1/storage/canister +// name = "OB 1B Atmos Canister Storage" +// icon_state = "atmos" +// sound_env = SMALL_ENCLOSED /area/outreach/outpost/atmospherics/b1/hall name = OUTREACH_AREA_NAME_ATMOS icon_state = "atmos" @@ -596,6 +828,9 @@ var/global/list/outreach_initial_protected_areas = list( name = OUTREACH_AREA_NAME_GAS_TANKS icon_state = "atmos" sound_env = CAVE +/area/outreach/outpost/atmospherics/b2/gas_tank_maintenance + name = "OB 2B Gas Tank Maintenance" + icon_state = "atmos" /////////////////////////////////////////////////// //Sec @@ -617,6 +852,16 @@ var/global/list/outreach_initial_protected_areas = list( icon_state = "checkpoint" req_access = list(list(access_security), list(access_bridge)) +/area/outreach/outpost/security/b1/hallway/to_brig + name = "OB 1B Security Hallway Brig" + icon_state = "checkpoint" + req_access = list(list(access_security), list(access_bridge)) + +/area/outreach/outpost/security/b1/hallway/to_hos + name = "OB 1B Security Hallway Head Office" + icon_state = "checkpoint" + req_access = list(list(access_security), list(access_bridge)) + /area/outreach/outpost/security/b1/office name = "OB 1B Security Office" icon_state = "checkpoint" @@ -629,7 +874,7 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/security/b1/cell name = "OB 1B Brig Cell" - icon_state = "brig" + icon_state = "brig_cell" sound_env = PADDED_CELL area_flags = AREA_FLAG_PRISON /area/outreach/outpost/security/b1/cell/A @@ -639,27 +884,106 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/security/b1/cell/C name = "OB 1B Brig Cell C" +/area/outreach/outpost/security/b1/chief_office + name = "OB 1B Security Chief Office" + icon_state = "sec_hos" + sound_env = SMALL_SOFTFLOOR + req_access = list(list(access_armory), list(access_heads), list(access_hos)) +/area/outreach/outpost/security/b1/chief_office/storage + name = "OB 1B Security Chief Storage" + icon_state = "storage" + req_access = list(list(access_hos)) + sound_env = SMALL_ENCLOSED + +/area/outreach/outpost/security/b1/detective_office + name = "OB 1B Detective Office" + icon_state = "detective" + req_access = list(list(access_hos), list(access_forensics_lockers)) + +/area/outreach/outpost/security/b1/forensics + name = "OB 1B Forensics Lab" + icon_state = "forensics" + req_access = list(list(access_forensics_lockers), list(access_morgue), list(access_surgery)) + +/area/outreach/outpost/security/b1/lockers + name = "OB 1B Security Locker Hall" + icon_state = "security_lockers" + req_access = list(list(access_security)) + +/area/outreach/outpost/security/b1/supply + name = "OB 1B Security Supplies" + icon_state = "security_lockers" + req_access = list(list(access_security)) + +/area/outreach/outpost/security/b1/breakroom + name = "OB 1B Security Break Room" + icon_state = "security_breakroom" + req_access = list(list(access_security)) +/area/outreach/outpost/security/b1/breakroom/backroom + name = "OB 1B Security Break Room back" + icon_state = "security_breakroom" + req_access = list(list(access_security)) + +/area/outreach/outpost/security/b1/armory + name = "OB 1B Armory" + icon_state = "armory" + req_access = list(list(access_security), list(access_forensics_lockers), list(access_armory)) + +/area/outreach/outpost/security/b1/armory/warden_office + name = "OB 1B Warden Office" + icon_state = "Warden" + req_access = list(list(access_hos), list(access_armory)) + +/area/outreach/outpost/security/b1/armory/vault/weapons + name = "OB 1B Weapons Vault" + icon_state = "security_vault" + req_access = list(list(access_hos), list(access_armory)) + sound_env = SMALL_ENCLOSED + +/area/outreach/outpost/security/b1/armory/vault/evidences + name = "OB 1B Evidence Vault" + icon_state = "evidence" + req_access = list(list(access_hos), list(access_armory), list(access_security), list(access_forensics_lockers), list(access_morgue)) + sound_env = SMALL_ENCLOSED + /////////////////////////////////////////////////// //Mining /////////////////////////////////////////////////// /area/outreach/outpost/mining icon_state = "mining" + req_access = list(list(access_qm), list(access_cargo), list(access_mining), list(access_mining_office)) + /area/outreach/outpost/mining/b1/processing name = "OB 1B Ore Processing" icon_state = "mining_production" sound_env = HANGAR + req_access = list(list(access_qm), list(access_mining_office), list(access_manufacturing)) + +/area/outreach/outpost/mining/b1/ore_sorting + name = "OB 1B Ore Sorting" + icon_state = "mining_production" + req_access = list(list(access_qm), list(access_mining_office), list(access_mining)) + +/area/outreach/outpost/mining/b1/processing_hall + name = "OB 1B Processing Hall" + icon_state = "mining_production" + req_access = list(list(access_qm), list(access_mining_office), list(access_mining)) + +// /area/outreach/outpost/mining/b1/workshop +// name = "OB 1B Mining Workshop" +// sound_env = HANGAR +// req_access = list(list(access_qm), list(access_mining_office), list(access_manufacturing)) + /area/outreach/outpost/mining/b1/storage name = "OB 1B Mining Storage" /area/outreach/outpost/mining/b1/foyer name = "OB 1B Mining Foyer" icon_state = "mining_living" -/area/outreach/outpost/mining/b1/workshop - name = "OB 1B Mining Workshop" - sound_env = HANGAR /area/outreach/outpost/mining/b1/office name = "OB 1B Mining Office" icon_state = "quartoffice" sound_env = LIVINGROOM + req_access = list(list(access_mining_office)) /area/outreach/outpost/mining/b1/eva name = "OB 1B Mining Eva" icon_state = "mining_eva" @@ -668,6 +992,44 @@ var/global/list/outreach_initial_protected_areas = list( /////////////////////////////////////////////////// //Cargo /////////////////////////////////////////////////// +/area/outreach/outpost/cargo + icon_state = "quart" + req_access = list(list(access_qm), list(access_cargo)) + +/area/outreach/outpost/cargo/hall + name = "OB GF Supply Entry Hall" + icon_state = "quart" + req_access = list() + +/area/outreach/outpost/cargo/office + name = "OB GF Supply Office" + icon_state = "quartoffice" + +/area/outreach/outpost/cargo/warehouse + name = "OB GF Supply Warehouse" + icon_state = "quartstorage" + sound_env = HANGAR + +/area/outreach/outpost/cargo/distribution + name = "OB GF Supply Distribution" + icon_state = "quartsorting" + +/area/outreach/outpost/cargo/desk_teleporter + name = "OB GF Supply Desk Teleporter" + icon_state = "teleporter" + +/area/outreach/outpost/cargo/disposal + name = "OB GF Supply Disposals" + icon_state = "disposal" + +/area/outreach/outpost/cargo/qm + name = "OB GF Supply Chief Office" + icon_state = "quart" + req_access = list(list(access_qm)) + +/area/outreach/outpost/cargo/workshop + name = "OB GF Supply Workshop" + icon_state = "construction" /////////////////////////////////////////////////// //Airlock @@ -676,6 +1038,7 @@ var/global/list/outreach_initial_protected_areas = list( name = "Airlock" icon_state = "entry_1" sound_env = SMALL_ENCLOSED + req_access = list(list(access_external_airlocks)) /area/outreach/outpost/airlock/basement2 name = "OH 2B Airlock" /area/outreach/outpost/airlock/basement1/east @@ -698,10 +1061,10 @@ var/global/list/outreach_initial_protected_areas = list( name = "OH 1B Custodial Storeroom" icon_state = "janitor" sound_env = HALLWAY -/area/outreach/outpost/janitorial/hall - name = "OH 1B Custodial Office" - icon_state = "janitor" - sound_env = HALLWAY +// /area/outreach/outpost/janitorial/hall +// name = "OH 1B Custodial Office" +// icon_state = "janitor" +// sound_env = HALLWAY /////////////////////////////////////////////////// //Restrooms @@ -714,10 +1077,10 @@ var/global/list/outreach_initial_protected_areas = list( /////////////////////////////////////////////////// //Laundry Room /////////////////////////////////////////////////// -/area/outreach/outpost/laundry - name = "OB 1B Laundry Room" - icon_state = "conference" - sound_env = BATHROOM +// /area/outreach/outpost/laundry +// name = "OB 1B Laundry Room" +// icon_state = "conference" +// sound_env = BATHROOM /////////////////////////////////////////////////// //Lockers @@ -745,6 +1108,26 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/storage_shed/gf/south name = "OB GF South Maintenance Shed" +/////////////////////////////////////////////////// +// Harvesting Towers +/////////////////////////////////////////////////// + +/area/outreach/outpost/harvesting + name = "OB GF Harvesting Towers" + icon_state = "toxmisc" + sound_env = BATHROOM + +/area/outreach/outpost/harvesting/power + name = "OB 1F Harvesting Tower Substation" + icon_state = "substation" + +/area/outreach/outpost/harvesting/tower1 + name = "OB GF Harvesting Tower #1" +/area/outreach/outpost/harvesting/tower2 + name = "OB GF Harvesting Tower #2" +/area/outreach/outpost/harvesting/tower3 + name = "OB GF Harvesting Tower #3" + /////////////////////////////////////////////////// //Vacant /////////////////////////////////////////////////// @@ -752,20 +1135,18 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB Vacant" icon_state = "red2" -/area/outreach/outpost/vacant/b1/south/east - name = "OB 1B Vacant Room" +// /area/outreach/outpost/vacant/b1/south/east +// name = "OB 1B Vacant Room" /area/outreach/outpost/vacant/ground/swroom name = "OB GF Vacant Maint" -/area/outreach/outpost/vacant/f1/swroom - name = "OB 1F Vacant Maint" -/area/outreach/outpost/vacant/ground/depot - name = "OB GF Vacant Depot" - icon_state = "storage" -/area/outreach/outpost/vacant/ground/office1 - name = "OB GF Vacant Office #1" - icon_state = "law" +// /area/outreach/outpost/vacant/ground/depot +// name = "OB GF Vacant Depot" +// icon_state = "storage" +// /area/outreach/outpost/vacant/ground/office1 +// name = "OB GF Vacant Office #1" +// icon_state = "law" /area/outreach/outpost/vacant/ground/office2 name = "OB GF Vacant Office #2" icon_state = "law" @@ -787,9 +1168,39 @@ var/global/list/outreach_initial_protected_areas = list( /area/outreach/outpost/vacant/ground/office8 name = "OB GF Vacant Office #8" icon_state = "law" -/area/outreach/outpost/vacant/ground/office9 - name = "OB GF Vacant Office #9" - icon_state = "law" +// /area/outreach/outpost/vacant/ground/office9 +// name = "OB GF Vacant Office #9" +// icon_state = "law" + + +/area/outreach/outpost/vacant/f1 +/area/outreach/outpost/vacant/f1/swroom + name = "OB 1F Vacant Maint" +/area/outreach/outpost/vacant/f1/office10 + name = "OB 1F Vacant Office #10" +/area/outreach/outpost/vacant/f1/office11 + name = "OB 1F Vacant Office #10" + +/area/outreach/outpost/vacant/f1/room + name = "OB 1F Vacant Room" + +/area/outreach/outpost/vacant/f1/storefront + icon_state = "showroom" + +/area/outreach/outpost/vacant/f1/storefront/small + name = "OB 1F Vacant Small Storefront" +/area/outreach/outpost/vacant/f1/storefront/small/backroom + name = "OB 1F Vacant Small Storefront Backroom" + icon_state = "storage" + sound_env = SMALL_ENCLOSED + +/area/outreach/outpost/vacant/f1/storefront/large + name = "OB 1F Vacant Large Storefront" +/area/outreach/outpost/vacant/f1/storefront/large/backroom + name = "OB 1F Vacant Large Storefront Backroom" + icon_state = "storage" + sound_env = SMALL_ENCLOSED + /////////////////////////////////////////////////// // Disposals @@ -804,13 +1215,27 @@ var/global/list/outreach_initial_protected_areas = list( /////////////////////////////////////////////////// /area/outreach/outpost/eva name = "OB GF EVA Storage" - icon_state = "locker" + icon_state = "eva" sound_env = SMALL_ENCLOSED + /area/outreach/outpost/eva/gf/north name = "OB GF North EVA Storage" /area/outreach/outpost/eva/gf/south name = "OB GF South EVA Storage" +/area/outreach/outpost/eva/b1/east + name = "OB 1B East EVA Storage" +/area/outreach/outpost/eva/b1/south + name = "OB 1B South EVA Storage" + +/////////////////////////////////////////////////// +// Chapel +/////////////////////////////////////////////////// +/area/outreach/outpost/chapel + name = "OB 1B Chapel" + icon_state = "chapel" + sound_env = ROOM + /////////////////////////////////////////////////// //Elevators /////////////////////////////////////////////////// @@ -838,6 +1263,7 @@ var/global/list/outreach_initial_protected_areas = list( name = "OB Elevator 1st Floor" lift_floor_name = "1st Floor" + /////////////////////////////////////////////////// //Misc /////////////////////////////////////////////////// diff --git a/maps/outreach/outreach_defines.dm b/maps/outreach/outreach_defines.dm index 9830eb7f769..289b70edf9f 100644 --- a/maps/outreach/outreach_defines.dm +++ b/maps/outreach/outreach_defines.dm @@ -10,19 +10,23 @@ company_short = "Outreach" system_name = "Outreach System" dock_name = "Outreach Docks" + id_hud_icons = 'icons/hud.dmi' //Has more hud icon than the base nebula one allowed_latejoin_spawns = list(/decl/spawnpoint/cryo) default_spawn = /decl/spawnpoint/cryo - starting_money = 5000 + starting_money = 0 department_money = 0 salary_modifier = 0.2 lobby_screens = list( 'maps/outreach/lobby/exoplanet.png' ) - num_exoplanets = 0 + num_exoplanets = 0 //Keep at 0, this is for randomly generated exoplanets. overmap_ids = list(OVERMAP_ID_SPACE = /datum/overmap) //Default to null overmap, which prevents overmap marker from initializing properly welcome_sound = 'sound/music/stingers/stinger_scifi.ogg' /datum/map/outreach/get_map_info() - return "You are en route to Outreach, a desolate planet previously targeted for mining operations, but now largely abandoned. Colonists come from a wide variety of backgrounds, but universally with only the shirt on their backs." + return {" + You've arrived on [full_name], a now now largely abandoned, desolate mining colony. A haven for caravaneers, vagabonds, and the destitutes. + Wherever you hail from, you hope you can hack together a sort of existence for yourself here on the frontier. Strike the earth! + "} diff --git a/maps/outreach/outreach_departments.dm b/maps/outreach/outreach_departments.dm index 3cda485f4bb..e5637aebb4e 100644 --- a/maps/outreach/outreach_departments.dm +++ b/maps/outreach/outreach_departments.dm @@ -2,3 +2,90 @@ name = "Civilian" display_priority = 1 display_color = "#dddddd" + +/decl/department/engineering + name = "Engineering" + announce_channel = "Engineering" + colour = "#ffa500" + display_priority = 4 + display_color = "#fff5cc" + +/obj/item/robot_module/engineering + associated_department = /decl/department/engineering + +/obj/machinery/network/pager/engineering + department = /decl/department/engineering + +/decl/department/security + name = "Security" + announce_channel = "Security" + colour = "#dd0000" + display_priority = 3 + display_color = "#ffddf0" + +/obj/item/robot_module/security + associated_department = /decl/department/security + +/obj/machinery/network/pager/security + department = /decl/department/security + +/decl/department/medical + name = "Medical" + goals = list(/datum/goal/department/medical_fatalities) + announce_channel = "Medical" + colour = "#008000" + display_priority = 2 + display_color = "#ffeef0" + +/obj/item/robot_module/medical + associated_department = /decl/department/medical + +/obj/machinery/network/pager/medical + department = /decl/department/medical + +/decl/department/science + name = "Science" + announce_channel = "Science" + colour = "#a65ba6" + display_color = "#e79fff" + +/obj/item/robot_module/research + associated_department = /decl/department/science + +/obj/machinery/network/pager/science + department = /decl/department/science + +/decl/department/command + name = "Command" + colour = "#800080" + display_priority = 5 + display_color = "#ccccff" + +/obj/machinery/network/pager + department = /decl/department/command + +/decl/department/miscellaneous + name = "Misc" + display_priority = -1 + display_color = "#ccffcc" + +/decl/department/service + name = "Service" + announce_channel = "Service" + colour = "#88b764" + display_color = "#d0f0c0" + +/decl/department/supply + name = "Supply" + announce_channel = "Supply" + colour = "#bb9040" + display_color = "#f0e68c" + +/obj/machinery/network/pager/cargo + department = /decl/department/supply + +/decl/department/support + name = "Support" + announce_channel = "Command" + colour = "#800080" + display_color = "#87ceeb" diff --git a/maps/outreach/outreach_jobs.dm b/maps/outreach/outreach_jobs.dm index 18ed08183d8..d9ad2bf0c3e 100644 --- a/maps/outreach/outreach_jobs.dm +++ b/maps/outreach/outreach_jobs.dm @@ -2,22 +2,413 @@ default_job_type = /datum/job/colonist allowed_jobs = list(/datum/job/colonist) +/////////////////////////////////////////////////////////////////// +// Spawn Jobs +/////////////////////////////////////////////////////////////////// + +/** + The default starter job for the outreach colony. + */ /datum/job/colonist - title = "Colonist" + title = "Colonist" + department_types = list(/decl/department/civilian) + outfit_type = /decl/hierarchy/outfit/job/outreach + hud_icon = "hudcolonist" + economic_power = 0 //Set to 0 to prevent them having any starting money. + total_positions = -1 //Infinite slots + skill_points = 30 //They spawn with 30 + announced = FALSE + forced_spawnpoint = /decl/spawnpoint/chargen //Makes colonists spawn in the chargen rooms + minimal_access = list( + access_eva, + access_external_airlocks + ) + +/////////////////////////////////////////////////////////////////// +// Post-Spawn Jobs +/////////////////////////////////////////////////////////////////// +// A bunch of typical jobs with typical access, icons, and coloring so changing someone's job to one of these actually +// applies the job icon and etc.. Mainly for admin use, and for the sec classification system to work. + +/datum/job/councilor + title = "Councilor" + alt_titles = list("Administrator", "Bureaucrat") + hud_icon = "hudinternalaffairsagent" + head_position = 1 + department_types = list(/decl/department/command) + total_positions = -1 + selection_color = "#1d1d4f" + req_admin_notify = 1 + minimal_access = list( + access_bridge, + access_captain, + access_heads, + access_heads_vault, + access_hop, + access_security, + access_sec_doors, + access_change_ids, + access_network, + access_keycard_auth, + ) + +/datum/job/merchant + title = "Merchant" + alt_titles = list("Salesman", "Wholesaler") + hud_icon = "hudmerchant" + supervisors = "money" + department_types = list(/decl/department/civilian) + total_positions = -1 + +/datum/job/chaplain + title = "Chaplain" + alt_titles = list("Priest", "Preacher") + hud_icon = "hudchaplain" + department_types = list(/decl/department/civilian) + total_positions = -1 + minimal_access = list(access_chapel_office, access_morgue) + +/datum/job/librarian + title = "Librarian" + alt_titles = list("Journalist", "Curator") + hud_icon = "hudlibrarian" department_types = list(/decl/department/civilian) - outfit_type = /decl/hierarchy/outfit/job/outreach - hud_icon = "hudblank" - total_positions = -1 //Infinite slots - announced = FALSE - forced_spawnpoint = /decl/spawnpoint/chargen - -// Currently, we don't want colonists to spawn with cash on hand, so we return 0 credits. -/datum/job/colonist/create_cash_on_hand(var/mob/living/carbon/human/H, var/datum/money_account/M) - return 0 + total_positions = -1 + minimal_access = list(access_library) + +/datum/job/librarian + title = "Clown" + alt_titles = list("Entertainer", "Comedian") + hud_icon = "hudclown" + department_types = list(/decl/department/civilian) + total_positions = -1 + minimal_access = list(access_psychiatrist) + +/datum/job/bartender + title = "Bartender" + alt_titles = list("Barista") + hud_icon = "hudbartender" + department_types = list(/decl/department/service) + total_positions = -1 //Infinite slots + minimal_access = list(access_bar) + +/datum/job/chef + title = "Chef" + alt_titles = list("Cook") + hud_icon = "hudchef" + department_types = list(/decl/department/service) + total_positions = -1 + minimal_access = list(access_kitchen) + +/datum/job/hydro + title = "Gardener" + alt_titles = list("Hydroponicist", "Botanist") + hud_icon = "hudgardener" + department_types = list(/decl/department/service) + event_categories = list(ASSIGNMENT_GARDENER) + total_positions = -1 + minimal_access = list(access_hydroponics) + +/datum/job/janitor + title = "Janitor" + alt_titles = list("Custodian","Sanitation Technician") + hud_icon = "hudjanitor" + department_types = list(/decl/department/service) + total_positions = -1 + event_categories = list(ASSIGNMENT_JANITOR) + minimal_access = list(access_janitor) + +/datum/job/qm + title = "Quartermaster" + hud_icon = "hudquartermaster" + department_types = list(/decl/department/supply) + total_positions = -1 + minimal_access = list( + access_qm, + access_cargo, + access_mailsorting, + access_crate_cash, + access_manufacturing, + access_cargo_bot, + access_mining_office, + access_mining_station, + access_change_ids, + access_eva, + access_external_airlocks, + ) + +/datum/job/cargo_tech + title = "Cargo Technician" + hud_icon = "hudcargotechnician" + department_types = list(/decl/department/supply) + total_positions = -1 + minimal_access = list( + access_cargo, + access_mailsorting, + access_crate_cash, + access_manufacturing, + access_cargo_bot, + ) + +/datum/job/mining + title = "Shaft Miner" + alt_titles = list("Drill Technician", "Prospector") + hud_icon = "hudshaftminer" + department_types = list(/decl/department/supply) + total_positions = -1 + minimal_access = list( + access_mining, + access_mining_station, + access_manufacturing, + access_eva, + access_external_airlocks + ) + +/datum/job/lawyer + title = "Internal Affairs Agent" + hud_icon = "hudlawyer" + supervisors = "the galactic law" + department_types = list(/decl/department/support) + total_positions = -1 + minimal_access = list(access_lawyer) + +/datum/job/chief_engineer + title = "Chief Engineer" + hud_icon = "hudchiefengineer" + head_position = TRUE + department_types = list(/decl/department/engineering, /decl/department/command) + total_positions = 1 + selection_color = "#7f6e2c" + req_admin_notify = 1 + event_categories = list(ASSIGNMENT_ENGINEER) + minimal_access = list( + access_ce, + access_atmospherics, + access_construction, + access_engine, + access_engine_equip, + access_change_ids, + access_eva, + access_external_airlocks, + ) + +/datum/job/engineer + title = "Engineer" + hud_icon = "hudengineer" + alt_titles = list( + "Maintenance Technician", + "Electrician", + "Mechanic", + "Atmospheric Technician", + ) + department_types = list(/decl/department/engineering) + total_positions = -1 + supervisors = "the chief engineer" + selection_color = "#5b4d20" + event_categories = list(ASSIGNMENT_ENGINEER) + minimal_access = list( + access_engine, + access_engine_equip, + access_construction, + access_atmospherics, + access_eva, + access_external_airlocks, + ) + +/datum/job/cmo + title = "Chief Medical Officer" + alt_titles = list("Head Doctor") + hud_icon = "hudchiefmedicalofficer" + head_position = TRUE + department_types = list( + /decl/department/medical, + /decl/department/command + ) + total_positions = 1 + selection_color = "#026865" + req_admin_notify = 1 + event_categories = list(ASSIGNMENT_MEDICAL) + minimal_access = list( + access_cmo, + access_medical, + access_medical_equip, + access_morgue, + access_change_ids, + ) + +/datum/job/doctor + title = "Medical Doctor" + hud_icon = "hudmedicaldoctor" + alt_titles = list( + "Paramedic", + "Surgeon", + "Physician", + "Nurse", + ) + department_types = list(/decl/department/medical) + total_positions = -1 + supervisors = "the chief medical officer" + selection_color = "#013d3b" + event_categories = list(ASSIGNMENT_MEDICAL) + minimal_access = list( + access_medical, + access_medical_equip, + access_morgue, + ) + +/datum/job/chemist + title = "Pharmacist" + hud_icon = "hudpharmacist" + department_types = list(/decl/department/medical) + total_positions = -1 + supervisors = "the chief medical officer" + selection_color = "#013d3b" + minimal_access = list( + access_chemistry, + access_medical_equip, + ) + +/datum/job/counselor + title = "Counselor" + hud_icon = "hudcounselor" + alt_titles = list("Mentalist") + department_types = list(/decl/department/medical) + total_positions = -1 + supervisors = "the chief medical officer" + selection_color = "#013d3b" + minimal_access = list( + access_medical, + ) + +/datum/job/hos + title = "Head of Security" + alt_titles = list("Sheriff", "Security Chief") + hud_icon = "hudheadofsecurity" + head_position = TRUE + department_types = list(/decl/department/security, /decl/department/command) + total_positions = 1 + supervisors = "the law" + selection_color = "#8e2929" + req_admin_notify = 1 + event_categories = list(ASSIGNMENT_SECURITY) + minimal_access = list( + access_security, + access_eva, + access_sec_doors, + access_brig, + access_armory, + access_heads, + access_forensics_lockers, + access_morgue, + access_maint_tunnels, + access_all_personal_lockers, + access_research, + access_engine, + access_mining, + access_medical, + access_construction, + access_mailsorting, + access_bridge, + access_hos, + access_RC_announce, + access_keycard_auth, + access_gateway, + access_external_airlocks + ) + +/datum/job/warden + title = "Warden" + alt_titles = list("Deputy", "Sergent") + hud_icon = "hudwarden" + department_types = list(/decl/department/security) + total_positions = -1 + supervisors = "the head of security" + selection_color = "#601c1c" + minimal_access = list( + access_security, + access_eva, + access_sec_doors, + access_brig, + access_armory, + access_maint_tunnels, + access_external_airlocks + ) + +/datum/job/detective + title = "Detective" + alt_titles = list("Forensic Technician", "Investigator") + hud_icon = "huddetective" + department_types = list(/decl/department/security) + total_positions = -1 + supervisors = "the head of security" + selection_color = "#601c1c" + minimal_access = list( + access_security, + access_sec_doors, + access_forensics_lockers, + access_morgue, + access_maint_tunnels + ) + +/datum/job/officer + title = "Security Officer" + alt_titles = list("Junior Officer", "Security Guard", "Watchman") + hud_icon = "hudsecurityofficer" + department_types = list(/decl/department/security) + total_positions = -1 + supervisors = "the head of security" + selection_color = "#601c1c" + event_categories = list(ASSIGNMENT_SECURITY) + minimal_access = list( + access_security, + access_eva, + access_sec_doors, + access_brig, + access_maint_tunnels, + access_external_airlocks + ) + +/datum/job/roboticist + title = "Roboticist" + alt_titles = list("Biomechanical Engineer","Mechatronic Engineer") + hud_icon = "hudroboticist" + department_types = list(/decl/department/science) + minimal_access = list( + access_robotics, + access_tech_storage, + access_morgue, + access_research + ) + total_positions = -1 + +/datum/job/scientist + title = "Scientist" + alt_titles = list("Researcher", "Geologist", "Physicist") + hud_icon = "hudscientist" + department_types = list(/decl/department/science) + minimal_access = list( + access_tox, + access_tox_storage, + access_research, + access_xenoarch, + access_xenobiology, + access_hydroponics + ) + total_positions = -1 + +/////////////////////////////////////////////////////////////////// +// Outfit +/////////////////////////////////////////////////////////////////// + +/** + The basic outfit all players spawn with on outreach. + */ /decl/hierarchy/outfit/job/outreach - name = "Job - Outreach Colonist" - id_type = /obj/item/card/id/network - pda_type = null - pda_slot = null - l_ear = null - r_ear = null \ No newline at end of file + name = "Job - Outreach Colonist" + id_type = /obj/item/card/id/network/civilian + uniform = /obj/item/clothing/under/color/lightblue + l_ear = /obj/item/radio/headset + shoes = /obj/item/clothing/shoes/color/white + pda_type = null + r_ear = null + outfit_flags = OUTFIT_HAS_BACKPACK diff --git a/maps/outreach/outreach_machinery.dm b/maps/outreach/outreach_machinery.dm deleted file mode 100644 index 199d5df5bc9..00000000000 --- a/maps/outreach/outreach_machinery.dm +++ /dev/null @@ -1,219 +0,0 @@ -//////////////////////////////////////////////////////////////////////// -// Wired airlock sensor -//////////////////////////////////////////////////////////////////////// -/obj/machinery/airlock_sensor/wired - power_channel = LOCAL - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/radio/transmitter/basic/buildable - ) - stock_part_presets = list( - /decl/stock_part_preset/terminal_setup = 1, - /decl/stock_part_preset/radio/basic_transmitter/airlock_sensor = 1 - ) - -//////////////////////////////////////////////////////////////////////// -// Wired airlock button -//////////////////////////////////////////////////////////////////////// -/obj/machinery/button/access/wired - power_channel = LOCAL - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/radio/transmitter/on_event/buildable, - /obj/item/stock_parts/radio/receiver/buildable, - ) - stock_part_presets = list( - /decl/stock_part_preset/terminal_setup = 1, - /decl/stock_part_preset/radio/event_transmitter/access_button = 1, - /decl/stock_part_preset/radio/receiver/access_button = 1, - ) - -/obj/machinery/button/access/wired/interior - command = "cycle_interior" - -/obj/machinery/button/access/wired/exterior - command = "cycle_exterior" - -//////////////////////////////////////////////////////////////////////// -// Airlock Door -//////////////////////////////////////////////////////////////////////// -/obj/machinery/door/airlock/external/glass/bolted/airlock - -/obj/machinery/door/airlock/external/glass/bolted_open/airlock - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/airlock/external_air = 1, - /decl/stock_part_preset/radio/event_transmitter/airlock/external_air = 1 - ) - -//////////////////////////////////////////////////////////////////////// -// Airlock canister -//////////////////////////////////////////////////////////////////////// -/obj/machinery/atmospherics/unary/tank/air/airlock - name = "Pressure Tank (Air)" - icon_state = "air_mapped" - start_pressure = ONE_ATMOSPHERE / 4 - filling = list( - /decl/material/gas/oxygen = O2STANDARD, - /decl/material/gas/nitrogen = N2STANDARD, - ) - -/obj/machinery/atmospherics/unary/tank/air/airlock/Initialize(mapload, d, populate_parts) - . = ..() - icon_state = "air" - -//////////////////////////////////////////////////////////////////////// -// High volume air vent -//////////////////////////////////////////////////////////////////////// -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/airlock = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock = 1 - ) - -//////////////////////////////////////////////////////////////////////// -// Exterior lights -//////////////////////////////////////////////////////////////////////// -/obj/machinery/light/wired - power_channel = LOCAL - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - ) - stock_part_presets = list(/decl/stock_part_preset/terminal_setup) - -/obj/machinery/light/small/wired - power_channel = LOCAL - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - ) - stock_part_presets = list(/decl/stock_part_preset/terminal_setup) - -/obj/machinery/light/spot/wired - power_channel = LOCAL - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - ) - stock_part_presets = list(/decl/stock_part_preset/terminal_setup) - -//////////////////////////////////////////////////////////////////////// -// Buttons -//////////////////////////////////////////////////////////////////////// -/obj/machinery/button/blast_door/wired - stock_part_presets = list( - /decl/stock_part_preset/radio/event_transmitter/blast_door_button = 1, - /decl/stock_part_preset/radio/receiver/blast_door_button = 1, - /decl/stock_part_preset/terminal_setup = 1, - ) - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/radio/transmitter/on_event/buildable, - /obj/item/stock_parts/radio/receiver/buildable - ) - -//////////////////////////////////////////////////////////////////////// -// Doors -//////////////////////////////////////////////////////////////////////// -/obj/machinery/door/airlock/external/glass/wired - stock_part_presets = list( - /decl/stock_part_preset/terminal_setup, - /decl/stock_part_preset/radio/receiver/airlock/external_air, - /decl/stock_part_preset/radio/event_transmitter/airlock/external_air - ) - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/radio/transmitter/on_event/buildable, - /obj/item/stock_parts/radio/receiver/buildable - ) - -//////////////////////////////////////////////////////////////////////// -// Blast Doors -//////////////////////////////////////////////////////////////////////// -/obj/machinery/door/blast/regular/wired - stock_part_presets = list( - /decl/stock_part_preset/terminal_setup, - /decl/stock_part_preset/radio/receiver/blast_door, - ) - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/radio/receiver/buildable, - ) - -/obj/machinery/door/blast/regular/wired/open - icon_state = "pdoor0" - begins_closed = FALSE - - -//////////////////////////////////////////////////////////////////////// -// Suit Cyclers -//////////////////////////////////////////////////////////////////////// -/obj/machinery/suit_cycler/emergency/prepared - name = "work suit cycler unit" - buildable = FALSE - initial_access = list() - helmet = /obj/item/clothing/head/helmet/space/emergency - suit = /obj/item/clothing/suit/space/emergency - boots = /obj/item/clothing/shoes/workboots - available_bodytypes = list(BODYTYPE_HUMANOID, BODYTYPE_MONKEY) - available_modifications = list( - /decl/item_modifier/space_suit/engineering, - /decl/item_modifier/space_suit/mining, - /decl/item_modifier/space_suit/medical, - /decl/item_modifier/space_suit/security, - /decl/item_modifier/space_suit/atmos, - /decl/item_modifier/space_suit/science, - /decl/item_modifier/space_suit/pilot, - /decl/item_modifier/space_suit/salvage, - ) - -//////////////////////////////////////////////////////////////////////// -// SMES -//////////////////////////////////////////////////////////////////////// -/obj/machinery/power/smes/buildable/preset/outreach - _fully_charged = TRUE - _input_maxed = TRUE - _input_on = TRUE - _output_maxed = FALSE - _output_on = TRUE - output_level = 150000 - maximum_component_parts = list( - /obj/item/stock_parts = 20, - ) - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_capacity = 5, - /obj/item/stock_parts/smes_coil/super_io = 1, - ) - -/obj/machinery/power/smes/buildable/preset/outreach/substation - _fully_charged = TRUE - _input_maxed = TRUE - _input_on = TRUE - _output_maxed = FALSE - _output_on = TRUE - output_level = 100000 - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_capacity = 2, - /obj/item/stock_parts/smes_coil/super_io = 1, - ) - -//////////////////////////////////////////////////////////////////////// -// Docking Beacon -//////////////////////////////////////////////////////////////////////// -/obj/machinery/docking_beacon/mapped - anchored = TRUE - -//////////////////////////////////////////////////////////////////////// -// Defense Turret -//////////////////////////////////////////////////////////////////////// -/obj/machinery/porta_turret/stationary/stun - ailock = TRUE - lethal = FALSE - check_weapons = TRUE - auto_repair = TRUE - controllock = FALSE - maxhealth = 280 - health = 280 - installation = /obj/item/gun/energy/gun/mounted - initial_access = list(list(access_security), list(access_bridge), list(access_ce)) - - -/obj/machinery/door/airlock/hatch/bolted - locked = TRUE diff --git a/maps/outreach/outreach_network.dm b/maps/outreach/outreach_network.dm deleted file mode 100644 index f564dd969d6..00000000000 --- a/maps/outreach/outreach_network.dm +++ /dev/null @@ -1,188 +0,0 @@ -#define ADMIN_PROTECTED_NET_GROUP "custodians" - -/datum/map/outreach - spawn_network = OUTREACH_NETWORK_NAME - -//////////////////////////////////////////////////////////////////////// -// Internet Uplink -//////////////////////////////////////////////////////////////////////// -#define OUTREACH_INTERNET_UPLINK_ID "ob_uplink" -/obj/machinery/internet_uplink/outreach - initial_id_tag = OUTREACH_INTERNET_UPLINK_ID - restrict_networks = TRUE - permitted_networks = list( - OUTREACH_NETWORK_NAME - ) - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/computer/internet_uplink/outreach - initial_id_tag = OUTREACH_INTERNET_UPLINK_ID - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -#undef OUTREACH_INTERNET_UPLINK_ID - -//////////////////////////////////////////////////////////////////////// -// Area Controller -//////////////////////////////////////////////////////////////////////// - -/obj/machinery/network/area_controller/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_actrl" - use_power = POWER_USE_ACTIVE - maximum_component_parts = list( - /obj/item/stock_parts = 200, - ) - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil = 7, - ) - req_access = list( - list(access_ce), - list(access_bridge), - ) - -/obj/machinery/network/area_controller/outreach/Initialize(mapload, d, populate_parts) - . = ..() - for(var/area/A in world) - if(A.name in global.outreach_initial_protected_areas) - add_protected_area(A) - update_use_power(POWER_USE_ACTIVE) - -/obj/machinery/network/area_controller/outreach/proc/add_protected_area(var/area/A) - var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) - add_area(A) - owned_areas[A] |= "[ADMIN_PROTECTED_NET_GROUP].[D.network_id]" - update_protected_count() - recalculate_power() - -//////////////////////////////////////////////////////////////////////// -// Access Controller -//////////////////////////////////////////////////////////////////////// - -/obj/machinery/network/acl/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_acl" - preset_groups = list( - ADMIN_PROTECTED_NET_GROUP = list( - ) - ) - req_access = list( - list(access_ce), - list(access_bridge), - ) - -//////////////////////////////////////////////////////////////////////// -// Networking Systems -//////////////////////////////////////////////////////////////////////// - -/obj/machinery/network/router/outreach - initial_network_id = OUTREACH_NETWORK_NAME - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/router/outreach/Initialize(mapload, d, populate_parts) - if(!length(tag_network_tag)) - tag_network_tag = "oh_router_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" - . = ..() - -/obj/machinery/network/modem/outreach - initial_network_id = OUTREACH_NETWORK_NAME - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/modem/outreach/Initialize(mapload, d, populate_parts) - if(!length(tag_network_tag)) - tag_network_tag = "oh_modem_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" - . = ..() - -/obj/machinery/network/relay/wall_mounted/outreach - initial_network_id = OUTREACH_NETWORK_NAME - req_access = list( - list(access_ce), - list(access_tcomsat), - list(access_engine), - ) - -/obj/machinery/network/relay/wall_mounted/outreach/Initialize(mapload, d, populate_parts) - if(!length(tag_network_tag)) - tag_network_tag = "oh_relay_[global.uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, type, 1)]" - . = ..() - -//////////////////////////////////////////////////////////////////////// -// Mainframes -//////////////////////////////////////////////////////////////////////// - -/obj/machinery/network/mainframe/files/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_mfrm_files" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/mainframe/account/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_mfrm_accounts" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/mainframe/logs/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_mfrm_logs" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/mainframe/records/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_mfrm_records" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -/obj/machinery/network/mainframe/software/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_mfrm_softwares" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - -//////////////////////////////////////////////////////////////////////// -// Telecomms -//////////////////////////////////////////////////////////////////////// - -/obj/machinery/network/telecomms_hub/outreach - initial_network_id = OUTREACH_NETWORK_NAME - tag_network_tag = "oh_hub" - req_access = list( - list(access_ce), - list(access_tcomsat), - ) - channels = list( - COMMON_FREQUENCY_DATA, - list("name" = "Science", "key" = "n", "frequency" = 1351, "color" = COMMS_COLOR_SCIENCE, "span_class" = "sciradio", "secured" = list(access_research)), - list("name" = "Medical", "key" = "m", "frequency" = 1355, "color" = COMMS_COLOR_MEDICAL, "span_class" = "medradio", "secured" = list(access_medical)), - list("name" = "Supply", "key" = "u", "frequency" = 1347, "color" = COMMS_COLOR_SUPPLY, "span_class" = "supradio", "secured" = list(access_cargo)), - list("name" = "Service", "key" = "v", "frequency" = 1349, "color" = COMMS_COLOR_SERVICE, "span_class" = "srvradio", "secured" = list(access_bar)), - list("name" = "AI Private", "key" = "p", "frequency" = 1343, "color" = COMMS_COLOR_AI, "span_class" = "airadio", "secured" = list(access_ai_upload)), - list("name" = "Entertainment", "key" = "z", "frequency" = 1461, "color" = COMMS_COLOR_ENTERTAIN, "span_class" = CSS_CLASS_RADIO, "receive_only" = TRUE), - list("name" = "Command", "key" = "c", "frequency" = 1353, "color" = COMMS_COLOR_COMMAND, "span_class" = "comradio", "secured" = list(access_bridge)), - list("name" = "Engineering", "key" = "e", "frequency" = 1357, "color" = COMMS_COLOR_ENGINEER, "span_class" = "engradio", "secured" = list(access_engine)), - list("name" = "Security", "key" = "s", "frequency" = 1359, "color" = COMMS_COLOR_SECURITY, "span_class" = "secradio", "secured" = list(access_security)), - ) - -#undef ADMIN_PROTECTED_NET_GROUP \ No newline at end of file diff --git a/maps/outreach/outreach_south-2.dmm b/maps/outreach/outreach_south-2.dmm index 30abdb52b84..f0ab03264e3 100644 --- a/maps/outreach/outreach_south-2.dmm +++ b/maps/outreach/outreach_south-2.dmm @@ -116,7 +116,7 @@ /turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/mines/stairwell/b1) "ar" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/underground/mines/stairwell/b1) "as" = ( /obj/structure/stairs/long/east, @@ -194,7 +194,7 @@ /obj/structure/cable/orange{ icon_state = "32-2" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/underground/mines/stairwell/b1) "aD" = ( /obj/structure/cable/orange{ @@ -243,10 +243,7 @@ /turf/exterior/concrete, /area/exoplanet/outreach/underground/mines/access/b1) "aK" = ( -/obj/machinery/light/small/wired, -/obj/structure/cable/orange{ - icon_state = "0-4" - }, +/obj/effect/catwalk_plated/dark, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/mines/access/b1) "aL" = ( @@ -271,20 +268,16 @@ "aN" = ( /obj/machinery/light/small/wired, /obj/structure/cable/orange{ - icon_state = "0-8" + icon_state = "0-4" }, -/turf/simulated/floor/plating/outreach, +/turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/mines/access/b1) "aO" = ( -/obj/machinery/light/small/wired{ - icon_state = "bulb_map"; - dir = 1 - }, +/obj/machinery/light/small/wired, /obj/structure/cable/orange{ - icon_state = "0-4" + icon_state = "0-8" }, -/obj/machinery/light/navigation/delay2, -/turf/simulated/floor/plating/outreach, +/turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/mines/access/b1) "aP" = ( /obj/machinery/light/small/wired{ @@ -292,10 +285,10 @@ dir = 1 }, /obj/structure/cable/orange{ - icon_state = "0-8" + icon_state = "0-4" }, -/obj/machinery/light/navigation/delay3, -/turf/simulated/floor/plating/outreach, +/obj/machinery/light/navigation/delay2, +/turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/mines/access/b1) "aQ" = ( /obj/structure/cable/orange{ @@ -612,8 +605,150 @@ /obj/structure/cable/orange{ icon_state = "0-2" }, +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/abstract/landmark/skip_test, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bE" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/abstract/landmark/skip_test, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/abstract/landmark/skip_test, +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bG" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport_return, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bJ" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/structure/flaps/airtight, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bK" = ( +/obj/effect/decal/cleanable/generic, +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport, +/obj/structure/cable/orange{ + icon_state = "0-4" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/directions/supply{ + icon_state = "direction_supply"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bL" = ( +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/structure/cable/orange{ + icon_state = "1-8" + }, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bM" = ( +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/structure/cable/orange{ + icon_state = "1-4" + }, /turf/simulated/floor/plating/outreach, /area/exoplanet/outreach/underground/mines/access/b1) +"bN" = ( +/obj/machinery/conveyor_switch/oneway/outreach/mining/transport_return, +/obj/structure/cable/orange{ + icon_state = "0-8" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/directions/supply, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bO" = ( +/obj/structure/cable/orange{ + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/conveyor/outreach/mining/transport_return, +/obj/structure/flaps/airtight, +/turf/simulated/floor/plating/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bP" = ( +/obj/machinery/light/small/wired{ + icon_state = "bulb_map"; + dir = 1 + }, +/obj/structure/cable/orange{ + icon_state = "0-8" + }, +/obj/machinery/light/navigation/delay3, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bQ" = ( +/obj/effect/floor_decal/industrial/loading{ + icon_state = "loadingarea"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) +"bR" = ( +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/tiled/techfloor/outreach, +/area/exoplanet/outreach/underground/mines/access/b1) (1,1,1) = {" ag @@ -20217,12 +20352,12 @@ ag ag ag ag -aS -aS -aS aK +aK +aK +aN an -aO +aP am am aZ @@ -21025,12 +21160,12 @@ ag ag ag ag -aS -aS -aS -aN +aK +aK +aK +aO an -aP +bP am am am @@ -21636,8 +21771,8 @@ ad ay af an -bv -am +bK +aI am ae ae @@ -21833,13 +21968,13 @@ ag ag ag ag -ay -ay -af -af -an -am -am +bE +bG +bI +bI +bJ +bL +bQ am ae ae @@ -22035,13 +22170,13 @@ ag ag ag ag -af -af -af -af -an -am -am +bF +bH +bH +bH +bO +bM +bR am ae ae @@ -22242,8 +22377,8 @@ an an an an -am -am +bN +aI am ae ae diff --git a/maps/outreach/outreach_south-3.dmm b/maps/outreach/outreach_south-3.dmm index d8d89c50925..0c3a9c67445 100644 --- a/maps/outreach/outreach_south-3.dmm +++ b/maps/outreach/outreach_south-3.dmm @@ -51,7 +51,7 @@ /turf/simulated/floor/tiled/techfloor/outreach, /area/exoplanet/outreach/underground/mines/stairwell/gf) "q" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/underground/mines/stairwell/gf) "r" = ( /turf/simulated/floor/tiled/techfloor/outreach, @@ -176,7 +176,7 @@ /obj/structure/cable/orange{ icon_state = "32-1" }, -/turf/exterior/open, +/turf/open, /area/exoplanet/outreach/underground/mines/stairwell/gf) "J" = ( /obj/structure/railing/mapped, diff --git a/maps/outreach/outreach_test.dm b/maps/outreach/outreach_test.dm index c79d1a68797..ad34cf39948 100644 --- a/maps/outreach/outreach_test.dm +++ b/maps/outreach/outreach_test.dm @@ -3,17 +3,14 @@ . = ..() apc_test_exempt_areas[/area/turbolift/outreach/f1] = NO_SCRUBBER|NO_VENT|NO_APC apc_test_exempt_areas[/area/outreach/outpost/airlock] = NO_SCRUBBER|NO_VENT - apc_test_exempt_areas[/area/outreach/outpost/maint/passage/f1/southwest] = NO_SCRUBBER|NO_VENT - apc_test_exempt_areas[/area/outreach/outpost/maint/passage/f1/northwest] = NO_SCRUBBER|NO_VENT apc_test_exempt_areas[/area/outreach/outpost/storage_shed] = NO_SCRUBBER|NO_VENT - apc_test_exempt_areas[/area/outreach/outpost/maint/outer_wall] = NO_SCRUBBER|NO_VENT|NO_APC - apc_test_exempt_areas[/area/outreach/outpost/vacant] = NO_SCRUBBER|NO_VENT - apc_test_exempt_areas[/area/outreach/outpost/vacant/ground/depot] = 0 - apc_test_exempt_areas[/area/outreach/outpost/vacant/b1/south/east] = 0 apc_test_exempt_areas[/area/outreach/outpost/vacant/f1/swroom] = NO_SCRUBBER|NO_VENT|NO_APC apc_test_exempt_areas[/area/outreach/outpost/vacant/ground/swroom] = NO_SCRUBBER|NO_VENT|NO_APC apc_test_exempt_areas[/area/outreach/outpost/hangar/north/shuttle_area] = NO_SCRUBBER|NO_VENT|NO_APC apc_test_exempt_areas[/area/outreach/outpost/control/servers] = NO_SCRUBBER|NO_VENT + apc_test_exempt_areas[/area/outreach/outpost/control/servers/access] = 0 + apc_test_exempt_areas[/area/outreach/outpost/harvesting] = NO_SCRUBBER|NO_VENT|NO_APC + apc_test_exempt_areas[/area/outreach/outpost/engineering/b2/geothermals_airlock] = NO_SCRUBBER|NO_VENT apc_test_excluded_areas = list( /area/exoplanet, @@ -39,48 +36,5 @@ "maps/outreach/outreach_south-3.dmm", ) -/datum/level_data/planetoid/exoplanet/outreach - name = "outreach surface" - level_id = "outreach_surface" - parent_planetoid = "outreach" - level_flags = ZLEVEL_CONTACT | ZLEVEL_PLAYER | ZLEVEL_SEALED | ZLEVEL_SAVED - ambient_light_level = 0.8 - base_area = /area/exoplanet/outreach - base_turf = /turf/exterior/barren - loop_turf_type = /turf/exterior/mimic_edge/transition/loop - border_filler = /turf/unsimulated/dark_border - -/datum/level_data/planetoid/exoplanet/outreach/sky - name = "outreach sky" - level_id = "outreach_sky" - base_area = /area/exoplanet/outreach/sky - base_turf = /turf/exterior/open - -/datum/level_data/planetoid/exoplanet/outreach/mining - name = "outreach mines" - level_id = "outreach_mines" - level_flags = ZLEVEL_CONTACT | ZLEVEL_PLAYER | ZLEVEL_SEALED | ZLEVEL_SAVED | ZLEVEL_MINING - base_area = /area/exoplanet/outreach/underground/mines/b1 - base_turf = /turf/exterior/barren - border_filler = /turf/unsimulated/mineral - -/datum/level_data/planetoid/exoplanet/outreach/mining/bottom - name = "outreach mines bottom" - level_id = "outreach_mines_bottom" - base_area = /area/exoplanet/outreach/underground/mines/b2 - -/obj/abstract/level_data_spawner/exoplanet/outreach - name = "outreach surface (level data spawner)" - level_data_type = /datum/level_data/planetoid/exoplanet/outreach - -/obj/abstract/level_data_spawner/exoplanet/outreach/sky - name = "outreach sky (level data spawner)" - level_data_type = /datum/level_data/planetoid/exoplanet/outreach/sky - -/obj/abstract/level_data_spawner/exoplanet/outreach/mining - name = "outreach mines (level data spawner)" - level_data_type = /datum/level_data/planetoid/exoplanet/outreach/mining - -/obj/abstract/level_data_spawner/exoplanet/outreach/mining/bottom - name = "outreach mines bottom (level data spawner)" - level_data_type = /datum/level_data/planetoid/exoplanet/outreach/mining/bottom \ No newline at end of file +/datum/map_template/planetoid/persistent/outreach/get_spawn_weight() + return 100 diff --git a/maps/outreach/outreach_turfs.dm b/maps/outreach/outreach_turfs.dm index b53c0b42910..ca7403a6fa7 100644 --- a/maps/outreach/outreach_turfs.dm +++ b/maps/outreach/outreach_turfs.dm @@ -46,6 +46,10 @@ initial_gas = OUTREACH_ATMOS temperature = OUTREACH_TEMP +/turf/simulated/floor/reinforced/outreach + initial_gas = OUTREACH_ATMOS + temperature = OUTREACH_TEMP + /////////////////////////////////////////////////////////////////////////////////// // Painted walls /////////////////////////////////////////////////////////////////////////////////// @@ -62,6 +66,7 @@ /turf/simulated/wall/prepainted/engineering color = COLOR_AMBER + paint_color = COLOR_AMBER stripe_color = COLOR_AMBER /turf/simulated/wall/prepainted/atmos @@ -72,6 +77,11 @@ color = COLOR_BEASTY_BROWN stripe_color = COLOR_BEASTY_BROWN +/turf/simulated/wall/prepainted/command + color = COLOR_COMMAND_BLUE + stripe_color = COLOR_COMMAND_BLUE + paint_color = COLOR_COMMAND_BLUE + /////////////////////////////////////////////////////////////////////////////////// // Painted Conrete Walls /////////////////////////////////////////////////////////////////////////////////// @@ -90,19 +100,34 @@ /turf/simulated/wall/r_wall/prepainted/engineering color = COLOR_AMBER stripe_color = COLOR_AMBER + paint_color = COLOR_AMBER /turf/simulated/wall/r_wall/prepainted/atmos color = COLOR_CYAN + paint_color = COLOR_CYAN stripe_color = COLOR_CYAN /turf/simulated/wall/r_wall/prepainted/security color = COLOR_NT_RED + paint_color = COLOR_NT_RED stripe_color = COLOR_NT_RED /turf/simulated/wall/r_wall/prepainted/command color = COLOR_COMMAND_BLUE + paint_color = COLOR_COMMAND_BLUE stripe_color = COLOR_COMMAND_BLUE +/turf/simulated/wall/r_wall/prepainted/mining + color = COLOR_BEASTY_BROWN + paint_color = COLOR_BEASTY_BROWN + stripe_color = COLOR_BEASTY_BROWN + +/turf/simulated/wall/r_ocp + color = COLOR_GUNMETAL + icon_state = "reinforced_solid" + material = /decl/material/solid/metal/plasteel/ocp + reinf_material = /decl/material/solid/metal/plasteel/ocp + /////////////////////////////////////////////////////////////////////////////////// // Underground Wall Turfs /////////////////////////////////////////////////////////////////////////////////// @@ -117,13 +142,13 @@ name = "weathered sandstone wall" material = /decl/material/solid/stone/sandstone floor_type = OUTREACH_SURFACE_TURF - open_turf_type = /turf/simulated/open + open_turf_type = /turf/open /turf/exterior/wall/outreach/subterrane name = "erroded sandstone wall" material = /decl/material/solid/stone/sandstone floor_type = OUTREACH_SURFACE_TURF - open_turf_type = /turf/simulated/open + open_turf_type = /turf/open /turf/exterior/wall/outreach/abyss name = "compacted slate wall" @@ -137,14 +162,14 @@ //Mining Floors /turf/exterior/barren/mining/outreach/mountain color = "#d9c179" - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open /turf/exterior/barren/mining/outreach/subterrane color = "#d9c179" - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open /turf/exterior/rock/volcanic/mining/outreach/abyss - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open //Mining Walls /turf/exterior/wall/random/outreach/mountain @@ -170,13 +195,13 @@ /turf/exterior/barren/subterrane/outreach icon = 'icons/turf/flooring/asteroid.dmi' icon_state = "asteroid" - open_turf_type = /turf/exterior/open + open_turf_type = /turf/open /turf/exterior/chlorine_sand/outreach name = "chlorine salts" open_turf_type = OUTREACH_SURFACE_TURF //Don't allow just removing this easily -/turf/exterior/water/outreach +/turf/exterior/chlorine_sand/muriatic_acid_swamp name = "muriatic acid swamp" reagent_type = /decl/material/liquid/acid/hydrochloric open_turf_type = /turf/exterior/chlorine_sand/outreach //Don't allow just removing this easily @@ -212,7 +237,7 @@ var/list/allowed_turfs = list( /turf/exterior/barren, /turf/exterior/chlorine_sand, - /turf/exterior/water/outreach, + /turf/exterior/chlorine_sand/muriatic_acid_swamp, ) /decl/turf_initializer/outreach_surface/InitializeTurf(var/turf/exterior/T) @@ -224,12 +249,12 @@ if(locate(/obj, T)) return - var/list/possible_spawns = istype(T, /turf/exterior/water)? (underwater_props_probs|underwater_mob_probs) : (surface_props_probs|mob_probs) + var/list/possible_spawns = istype(T, /turf/exterior/chlorine_sand/muriatic_acid_swamp)? (underwater_props_probs|underwater_mob_probs) : (surface_props_probs|mob_probs) if(rand(0, 50) != 50) return //No prop for this tile for(var/path in possible_spawns) possible_spawns[path] = rand(0, possible_spawns[path]) - sortTim(possible_spawns, .proc/cmp_numeric_dsc, TRUE) + sortTim(possible_spawns, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) var/spawn_type = possible_spawns[1] new spawn_type(T) diff --git a/maps/outreach/outreach_zlevels.dm b/maps/outreach/outreach_zlevels.dm index b5e8ebc7e40..b550b44d491 100644 --- a/maps/outreach/outreach_zlevels.dm +++ b/maps/outreach/outreach_zlevels.dm @@ -24,7 +24,7 @@ /datum/level_data/planetoid/outreach/sky name = "Outreach Sky" level_id = OUTREACH_LEVEL_ID_SKY - base_turf = /turf/exterior/open + base_turf = /turf/open base_area = /area/exoplanet/outreach/sky connected_levels = list( OUTREACH_LEVEL_ID_SURFACE = DOWN, diff --git a/maps/outreach/outreach_structures.dm b/maps/outreach/structures/outreach_structures.dm similarity index 62% rename from maps/outreach/outreach_structures.dm rename to maps/outreach/structures/outreach_structures.dm index 900d0dfc269..c9a8b97ff94 100644 --- a/maps/outreach/outreach_structures.dm +++ b/maps/outreach/structures/outreach_structures.dm @@ -3,7 +3,7 @@ /////////////////////////////////////////////////////////////////////////////////// /obj/structure/wall_frame/prepainted/medical color = COLOR_PALE_BLUE_GRAY - paint_color = null + paint_color = COLOR_PALE_BLUE_GRAY stripe_color = COLOR_PALE_BLUE_GRAY /obj/structure/wall_frame/prepainted/engineering color = COLOR_AMBER @@ -15,8 +15,23 @@ stripe_color = COLOR_CYAN /obj/structure/wall_frame/prepainted/mining color = COLOR_BEASTY_BROWN - paint_color = null + paint_color = COLOR_BEASTY_BROWN stripe_color = COLOR_PALE_ORANGE +/obj/structure/wall_frame/prepainted/command + color = COLOR_COMMAND_BLUE + paint_color = COLOR_COMMAND_BLUE + stripe_color = COLOR_COMMAND_BLUE +/obj/structure/wall_frame/prepainted/security + color = COLOR_NT_RED + paint_color = COLOR_NT_RED + stripe_color = COLOR_ORANGE +/obj/structure/wall_frame/prepainted/botany + color = COLOR_CIVIE_GREEN + paint_color = COLOR_CIVIE_GREEN + //stripe_color = COLOR_CIVIE_GREEN + + + /////////////////////////////////////////////////////////////////////////////////// // Steel Wall frames @@ -35,7 +50,7 @@ /obj/structure/wall_frame/concrete/prepainted/medical color = COLOR_PALE_BLUE_GRAY - paint_color = null + paint_color = COLOR_PALE_BLUE_GRAY stripe_color = COLOR_PALE_BLUE_GRAY /obj/structure/wall_frame/concrete/prepainted/engineering color = COLOR_AMBER @@ -50,6 +65,7 @@ paint_color = null stripe_color = COLOR_PALE_ORANGE + /////////////////////////////////////////////////////////////////////////////////// // OCP Wall frames /////////////////////////////////////////////////////////////////////////////////// @@ -72,6 +88,9 @@ /obj/effect/wallframe_spawn/no_grille/concrete name = "concrete wall frame window spawner" frame_path = /obj/structure/wall_frame/concrete +/obj/effect/wallframe_spawn/no_grille/concrete/chapel + win_path = /obj/structure/window/basic/full/chapel + /obj/effect/wallframe_spawn/no_grille/concrete/prepainted/medical name = "concrete wall frame window spawner" color = COLOR_PALE_BLUE_GRAY @@ -148,6 +167,16 @@ /obj/effect/wallframe_spawn/reinforced/prepainted/mining color = COLOR_BEASTY_BROWN frame_path = /obj/structure/wall_frame/prepainted/mining +/obj/effect/wallframe_spawn/reinforced/prepainted/command + color = COLOR_COMMAND_BLUE + frame_path = /obj/structure/wall_frame/prepainted/command +/obj/effect/wallframe_spawn/reinforced/prepainted/security + color = COLOR_NT_RED + frame_path = /obj/structure/wall_frame/prepainted/security + + +/obj/effect/wallframe_spawn/reinforced_borosilicate/ocp + frame_path = /obj/structure/wall_frame/ocp/prepainted/exterior /////////////////////////////////////////////////////////////////////////////////// // Railings @@ -218,21 +247,144 @@ /obj/item/camera, ) -/////////////////////////////////////////////////////////////////////////////////// -// Boxes -/////////////////////////////////////////////////////////////////////////////////// -/obj/item/storage/box/camera_films - name = "box of camera film rolls" -/obj/item/storage/box/camera_films/WillContain() - var/obj/item/camera_film/F = /obj/item/camera_film +// + +/decl/closet_appearance/secure_closet/bio + color = COLOR_PALE_ORANGE + decals = list( + "l3" = COLOR_OFF_WHITE, + "stripe_horizontal_narrow" = COLOR_ORANGE + ) + extra_decals = list( + "biohazard" = COLOR_OFF_WHITE + ) + +/obj/structure/closet/secure_closet/outreach/hazard_suit + name = "protective suit locker" + closet_appearance = /decl/closet_appearance/secure_closet/bio + +/obj/structure/closet/secure_closet/outreach/hazard_suit/WillContain() return list( - /obj/item/camera_film = BASE_STORAGE_CAPACITY(initial(F.w_class)), + /obj/item/flashlight/maglight, + /obj/item/flashlight/maglight, + /obj/item/scanner/gas, + /obj/item/scanner/gas, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/gloves/fire, + /obj/item/clothing/gloves/fire, + /obj/item/clothing/suit/bio_suit/general, + /obj/item/clothing/suit/bio_suit/general, + /obj/item/clothing/head/bio_hood/general, + /obj/item/clothing/head/bio_hood/general, + /obj/item/clothing/shoes/workboots, + /obj/item/clothing/shoes/workboots, ) -/obj/item/storage/box/barricade_tape/police - name = "box of police tape" -/obj/item/storage/box/barricade_tape/police/WillContain() - var/obj/item/stack/tape_roll/barricade_tape/police/P = /obj/item/stack/tape_roll/barricade_tape/police +// + +/obj/structure/closet/secure_closet/outreach/eva + name = "eva gear locker" + closet_appearance = /decl/closet_appearance/secure_closet/expedition/pathfinder + +/obj/structure/closet/secure_closet/outreach/eva/WillContain() return list( - /obj/item/stack/tape_roll/barricade_tape/police = BASE_STORAGE_CAPACITY(initial(P.w_class)), - ) \ No newline at end of file + /obj/item/flashlight/maglight, + /obj/item/flashlight/maglight, + /obj/item/scanner/gas, + /obj/item/scanner/gas, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/gloves/fire, + /obj/item/clothing/gloves/fire, + /obj/item/clothing/shoes/workboots, + /obj/item/clothing/shoes/workboots, + ) + +/obj/structure/closet/secure_closet/hydroponics/outreach + name = "botanist's locker" + req_access = list(access_hydroponics) + closet_appearance = /decl/closet_appearance/secure_closet/hydroponics + //mapper preview + color = COLOR_GREEN_GRAY + +/obj/structure/closet/secure_closet/hydroponics/outreach/WillContain() + return list( + new /datum/atom_creator/weighted(list(/obj/item/clothing/suit/apron, /obj/item/clothing/suit/apron/overalls)), + /obj/item/storage/plants, + /obj/item/clothing/under/hydroponics, + /obj/item/scanner/plant, + /obj/item/radio/headset/headset_service, + /obj/item/clothing/mask/bandana/botany, + /obj/item/clothing/head/bandana/green, + /obj/item/minihoe, + /obj/item/hatchet, + /obj/item/wirecutters/clippers, + /obj/item/chems/spray/plantbgone, + ) + +/obj/structure/closet/secure_closet/outreach/chemistry + name = "chemistry locker" + closet_appearance = /decl/closet_appearance/secure_closet/rd + req_access = list(access_research) + +/obj/structure/closet/secure_closet/outreach/chemistry/WillContain() + return list( + /obj/item/clothing/gloves/latex/nitrile = 2, + /obj/item/clothing/suit/storage/toggle/labcoat/chemist = 2, + /obj/item/clothing/shoes/color/white = 2, + /obj/item/clothing/under/chemist = 2, + /obj/item/storage/belt/general = 2, + /obj/item/clothing/glasses/science = 2, + /obj/item/radio/headset/headset_sci = 2, + /obj/item/chems/glass/beaker/large = 2, + /obj/item/scanner/reagent = 2, + /obj/item/scanner/spectrometer = 2, + ) + + +/obj/structure/closet/crate/internals/WillContain() + return list( + /obj/item/clothing/mask/gas/half = 8, + /obj/item/tank/emergency/oxygen = 8, + ) + +/obj/structure/closet/emcloset/outreach/WillContain() + //Guaranteed kit - two tanks and masks + . = list( + /obj/item/tank/emergency/oxygen = 4, + /obj/item/clothing/mask/gas/half = 4, + /obj/item/oxycandle = 4, + /obj/item/storage/firstaid/o2, + /obj/item/storage/toolbox/emergency, + ) + +// Tables + +/obj/structure/table/plastic + icon_state = "plain_preview" + color = COLOR_GRAY40 + reinf_material = /decl/material/solid/organic/plastic + + +/obj/effect/floor_decal/arrow/red + name = "red floor arrow" + color = COLOR_DARK_RED +/obj/effect/floor_decal/arrow/yellow + name = "yellow floor arrow" + color = COLOR_YELLOW_GRAY + +/obj/effect/floor_decal/arrows/red + name = "red floor arrows" + color = COLOR_DARK_RED +/obj/effect/floor_decal/arrows/yellow + name = "yellow floor arrows" + color = COLOR_YELLOW_GRAY + +/obj/structure/closet/secure_closet/outreach/command + req_access = list(list(access_bridge)) + + + +/obj/structure/window/basic/full/chapel + color = GLASS_COLOR \ No newline at end of file diff --git a/maps/outreach/turfs/outreach_turf_flooded.dm b/maps/outreach/turfs/outreach_turf_flooded.dm index 88d26e40aac..f6031b2a7e0 100644 --- a/maps/outreach/turfs/outreach_turf_flooded.dm +++ b/maps/outreach/turfs/outreach_turf_flooded.dm @@ -8,5 +8,4 @@ /turf/exterior/barren/subterrane/outreach/acid/Initialize(ml, floortype) . = ..() - make_flooded(TRUE) - add_fluid(/decl/material/liquid/acid/hydrochloric, FLUID_MAX_DEPTH) + set_flooded(/decl/material/liquid/acid/hydrochloric) diff --git a/maps/outreach/turfs/outreach_turf_magma.dm b/maps/outreach/turfs/outreach_turf_magma.dm index 4344579916c..bb69c57c87e 100644 --- a/maps/outreach/turfs/outreach_turf_magma.dm +++ b/maps/outreach/turfs/outreach_turf_magma.dm @@ -51,9 +51,6 @@ /turf/simulated/magma/add_blood(mob/living/carbon/human/M) return FALSE -/turf/simulated/magma/add_blood_floor(mob/living/carbon/M) - return FALSE - /turf/simulated/magma/Entered(atom/movable/AM) ..() //Check for anything covering the lava diff --git a/maps/planets/test_planet/neutralia-4.dmm b/maps/planets/test_planet/neutralia-4.dmm index 98b3a04d943..bf23c1fb529 100644 --- a/maps/planets/test_planet/neutralia-4.dmm +++ b/maps/planets/test_planet/neutralia-4.dmm @@ -3,19 +3,19 @@ /turf/unsimulated/dark_filler, /area/exoplanet/neutralia/sky) "b" = ( -/turf/exterior/open, +/turf/open, /area/exoplanet/neutralia/sky) "c" = ( /obj/abstract/level_data_spawner/neutralia/sky, -/turf/exterior/open, +/turf/open, /area/exoplanet/neutralia/sky) "d" = ( /obj/abstract/map_data/neutralia, -/turf/exterior/open, +/turf/open, /area/exoplanet/neutralia/sky) "e" = ( /obj/effect/overmap/visitable/sector/planetoid/neutralia, -/turf/exterior/open, +/turf/open, /area/exoplanet/neutralia/sky) (1,1,1) = {" diff --git a/maps/planets/test_planet/test_planet.dm b/maps/planets/test_planet/test_planet.dm index b9557cf13a6..b4c7c55ce96 100644 --- a/maps/planets/test_planet/test_planet.dm +++ b/maps/planets/test_planet/test_planet.dm @@ -121,7 +121,7 @@ name = "neutralia sky" level_id = NEUTRALIA_SKY_LEVEL_ID base_area = /area/exoplanet/neutralia/sky - base_turf = /turf/exterior/open + base_turf = /turf/open border_filler = /turf/unsimulated/dark_filler /datum/level_data/planetoid/neutralia/surface diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm index beec44a6f61..65431787700 100644 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm +++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm @@ -6,7 +6,7 @@ var/global/list/crashed_pod_areas = list() suffixes = list("crashed_pod/crashed_pod.dmm") cost = 2 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS - ruin_tags = RUIN_HUMAN|RUIN_WRECK + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK /area/map_template/crashed_pod name = "\improper Crashed Survival Pod" diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm index 0230a67ba8b..ec89ff5b270 100644 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm +++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm @@ -922,13 +922,13 @@ /obj/random/handgun, /obj/random/handgun, /obj/random/handgun, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/pickaxe, +/obj/item/tool/pickaxe, +/obj/item/tool/pickaxe, +/obj/item/tool/pickaxe, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/flashlight/lantern, /obj/item/flashlight/lantern, @@ -950,9 +950,9 @@ /obj/item/storage/bag/trash, /obj/item/storage/box/donkpockets, /obj/item/storage/box/donkpockets, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, /obj/item/chems/condiment/enzyme, /obj/item/chems/drinks/milk, /obj/item/chems/drinks/milk, diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm index 17e6dded4cf..87035476c8e 100644 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm +++ b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm @@ -4,7 +4,7 @@ suffixes = list("datacapsule/datacapsule.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK apc_test_exempt_areas = list( /area/map_template/datacapsule = NO_SCRUBBER|NO_VENT|NO_APC @@ -40,7 +40,7 @@ desc += "Label is smudged, and there's crusted blood fingerprints on it." /obj/item/chems/glass/beaker/vial/random_podchem/populate_reagents() - reagents.add_reagent(pick(/decl/material/liquid/random, /decl/material/liquid/zombie/science, /decl/material/liquid/retrovirals), 5) + add_to_reagents(pick(/decl/material/liquid/random, /decl/material/liquid/zombie/science, /decl/material/liquid/retrovirals), 5) /obj/structure/backup_server name = "backup server" @@ -57,7 +57,7 @@ to_chat(user, SPAN_NOTICE("You pry out the data drive from \the [src].")) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/item/stock_parts/computer/hard_drive/cluster/drive = new(get_turf(src)) - drive.origin_tech = "{'[TECH_DATA]':[rand(4,5)],'[TECH_ENGINEERING]':[rand(4,5)],'[TECH_EXOTIC_MATTER]':[rand(4,5)],'[TECH_COMBAT]':[rand(2,5)],'[TECH_ESOTERIC]':[rand(0,6)]}" + drive.origin_tech = @'{"[TECH_DATA]":[rand(4,5)],"[TECH_ENGINEERING]":[rand(4,5)],"[TECH_EXOTIC_MATTER]":[rand(4,5)],"[TECH_COMBAT]":[rand(2,5)],"[TECH_ESOTERIC]":[rand(0,6)]}' disk_looted = TRUE return TRUE . = ..() diff --git a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm index 1a640e3bea9..5cde3625eda 100644 --- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm +++ b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm @@ -4,4 +4,4 @@ suffixes = list("deserted_lab/deserted_lab.dmm") cost = 1.5 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file + template_tags = TEMPLATE_TAG_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm b/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm index be2108b0b72..ac9d41228c0 100644 --- a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm +++ b/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm @@ -4,4 +4,4 @@ suffixes = list("drill_site/drill_site.dmm") cost = 0.5 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file + template_tags = TEMPLATE_TAG_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm index 7bcd48aaab7..ce55aaa5f3b 100644 --- a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm +++ b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm @@ -4,9 +4,9 @@ suffixes = list("fountain/fountain_ruin.dmm") cost = 2 template_flags = TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_CLEAR_CONTENTS - ruin_tags = RUIN_ALIEN + template_tags = TEMPLATE_TAG_ALIEN -/turf/simulated/wall/sandstonediamond +/turf/simulated/wall/brick/sandstonediamond icon_state = "reinforced_stone" material = /decl/material/solid/stone/sandstone reinf_material = /decl/material/solid/gemstone/diamond diff --git a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm index a52244c3261..cfa9067b8f7 100644 --- a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm +++ b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm @@ -3,7 +3,7 @@ /turf/template_noop, /area/template_noop) "b" = ( -/turf/simulated/wall/sandstonediamond, +/turf/simulated/wall/brick/sandstonediamond, /area/template_noop) "c" = ( /turf/simulated/floor/fixed/alium, diff --git a/maps/random_ruins/exoplanet_ruins/hut/hut.dm b/maps/random_ruins/exoplanet_ruins/hut/hut.dm index 039019d9887..25ec5611d94 100644 --- a/maps/random_ruins/exoplanet_ruins/hut/hut.dm +++ b/maps/random_ruins/exoplanet_ruins/hut/hut.dm @@ -4,7 +4,7 @@ suffixes = list("hut/hut.dmm") cost = 0.5 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT /turf/simulated/wall/silver icon_state = "metal" diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm index a5b3ed11b3c..9daa48c68ee 100644 --- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm +++ b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm @@ -4,7 +4,7 @@ suffixes = list("hydrobase/hydrobase.dmm") cost = 2 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_ALIEN + template_tags = TEMPLATE_TAG_ALIEN apc_test_exempt_areas = list( /area/map_template/hydrobase = NO_SCRUBBER|NO_VENT|NO_APC, /area/map_template/hydrobase/station = NO_SCRUBBER, @@ -84,8 +84,7 @@ /mob/living/simple_animal/hostile/retaliate/goat/hydro name = "goat" desc = "An impressive goat, in size and coat. His horns look pretty serious!" - health = 100 - maxHealth = 100 + max_health = 100 natural_weapon = /obj/item/natural_weapon/hooves/strong faction = "farmbots" @@ -96,11 +95,10 @@ name = "Farmbot" desc = "The botanist's best friend. There's something slightly odd about the way it moves." icon = 'maps/random_ruins/exoplanet_ruins/hydrobase/farmbot.dmi' - speak = list("Initiating harvesting subrout-ine-ine.", "Connection timed out.", "Connection with master AI syst-tem-tem lost.", "Core systems override enab-...") - emote_see = list("beeps repeatedly", "whirrs violently", "flashes its indicator lights", "emits a ping sound") + emote_speech = list("Initiating harvesting subrout-ine-ine.", "Connection timed out.", "Connection with master AI syst-tem-tem lost.", "Core systems override enab-...") + emote_see = list("beeps repeatedly", "whirrs violently", "flashes its indicator lights", "emits a ping sound") faction = "farmbots" - health = 225 - maxHealth = 225 + max_health = 225 malfunctioning = 0 /mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/Initialize() @@ -109,7 +107,7 @@ projectiletype = /obj/item/projectile/beam/drone/weak /mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/emp_act(severity) - health -= rand(5,10) * (severity + 1) + adjustFireLoss(rand(5,10) * (severity + 1)) disabled = rand(15, 30) malfunctioning = 1 hostile_drone = 1 diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm index eb83e03406a..57583fe2965 100644 --- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm +++ b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm @@ -1378,7 +1378,7 @@ /area/map_template/hydrobase/station/processing) "dM" = ( /obj/structure/catwalk, -/obj/item/kitchen/utensil/spoon, +/obj/item/utensil/spoon, /obj/structure/table/glass/pglass, /turf/simulated/floor/fixed/alium, /area/map_template/hydrobase/station/processing) diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm index e3693151022..84ec9585fcc 100644 --- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm +++ b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm @@ -4,7 +4,7 @@ suffixes = list("lodge/lodge.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT /turf/simulated/floor/wood/usedup initial_gas = list(/decl/material/gas/carbon_dioxide = MOLES_O2STANDARD, /decl/material/gas/nitrogen = MOLES_N2STANDARD) \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm index fa0b90a26b3..600b9bf0bc4 100644 --- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm +++ b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm @@ -47,10 +47,10 @@ /area/template_noop) "k" = ( /obj/structure/table/woodentable, -/obj/item/kitchen/utensil/fork/plastic, -/obj/item/kitchen/utensil/fork/plastic, -/obj/item/kitchen/utensil/fork/plastic, -/obj/item/knife/table, +/obj/item/utensil/fork/plastic, +/obj/item/utensil/fork/plastic, +/obj/item/utensil/fork/plastic, +/obj/item/utensil/knife, /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 }, @@ -58,8 +58,8 @@ /area/template_noop) "l" = ( /obj/structure/table/woodentable, -/obj/item/knife/table, -/obj/item/knife/table, +/obj/item/utensil/knife, +/obj/item/utensil/knife, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, @@ -155,7 +155,7 @@ /area/template_noop) "C" = ( /obj/structure/table/woodentable, -/obj/machinery/computer/atmoscontrol/laptop{ +/obj/machinery/computer/central_atmos/laptop{ desc = "A cheap, beat-up old laptop."; name = "old laptop" }, diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm index 35f5d70ecec..9b06ca84cab 100644 --- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm +++ b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm @@ -4,7 +4,7 @@ suffixes = list("marooned/marooned.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK apc_test_exempt_areas = list( /area/map_template/marooned = NO_SCRUBBER|NO_VENT|NO_APC ) diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm index bb33f799726..d09582c702f 100644 --- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm +++ b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm @@ -8,16 +8,16 @@ /area/template_noop) "ad" = ( /obj/item/stack/material/rods, -/obj/item/stack/material/reinforced/mapped/ocp, +/obj/item/stack/material/sheet/reinforced/mapped/ocp, /turf/template_noop, /area/template_noop) "ae" = ( -/obj/item/stack/material/reinforced/mapped/ocp, +/obj/item/stack/material/sheet/reinforced/mapped/ocp, /turf/template_noop, /area/template_noop) "af" = ( /obj/structure/lattice, -/obj/item/stack/material/reinforced/mapped/ocp, +/obj/item/stack/material/sheet/reinforced/mapped/ocp, /obj/abstract/landmark/scorcher, /turf/template_noop, /area/template_noop) @@ -33,7 +33,7 @@ /turf/template_noop, /area/template_noop) "aj" = ( -/obj/item/stack/material/reinforced/mapped/ocp, +/obj/item/stack/material/sheet/reinforced/mapped/ocp, /obj/abstract/landmark/scorcher, /turf/template_noop, /area/template_noop) diff --git a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm index 94a8d7d9279..ff79160e8b7 100644 --- a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm +++ b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm @@ -4,7 +4,7 @@ suffixes = list("monoliths/monoliths.dmm") cost = 1 template_flags = TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_ALIEN + template_tags = TEMPLATE_TAG_ALIEN /obj/structure/monolith name = "monolith" diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm index 00606d465bd..e648a663a5d 100644 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm +++ b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm @@ -4,7 +4,7 @@ suffixes = list("oasis/oasis.dmm") cost = 0.5 template_flags = TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_ALLOW_DUPLICATES - ruin_tags = RUIN_NATURAL|RUIN_WATER + template_tags = TEMPLATE_TAG_NATURAL|TEMPLATE_TAG_WATER /datum/map_template/ruin/exoplanet/oasis/oasis2 name = "oasis 2" diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm index 819719e80ec..3063fcd57f4 100644 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm +++ b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm @@ -19,11 +19,11 @@ /turf/exterior/wildgrass, /area/template_noop) "g" = ( -/turf/exterior/water, +/turf/exterior/sand/water, /area/template_noop) "h" = ( /obj/structure/flora/bush/reedbush, -/turf/exterior/water, +/turf/exterior/sand/water, /area/template_noop) "i" = ( /obj/structure/flora/bush, diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm b/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm index b7afd860e66..28b34ce74a8 100644 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm +++ b/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm @@ -36,7 +36,7 @@ /turf/exterior/wildgrass, /area/template_noop) "j" = ( -/turf/exterior/water, +/turf/exterior/sand/water, /area/template_noop) "k" = ( /obj/structure/flora/grass/both, @@ -45,7 +45,7 @@ /area/template_noop) "l" = ( /obj/structure/flora/bush/reedbush, -/turf/exterior/water, +/turf/exterior/sand/water, /area/template_noop) "m" = ( /obj/structure/flora/grass/both, diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm index d5e30d3f9ca..0ea139fdbc7 100644 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm +++ b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm @@ -6,7 +6,7 @@ suffixes = list("oldpod/oldpod.dmm") cost = 0.5 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK apc_test_exempt_areas = list( /area/map_template/oldpod = NO_APC ) diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm index 44c9a9bfe0f..5449156d9a9 100644 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm +++ b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm @@ -226,7 +226,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/item/pickaxe, +/obj/item/tool/pickaxe, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/monotile, /area/map_template/oldpod) diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm index 19ff120e7c4..9d85e84617d 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm @@ -2634,8 +2634,8 @@ /obj/item/stack/material/pane/mapped/rborosilicate/ten, /obj/item/stack/material/pane/mapped/rglass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/clothing/head/hardhat/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/colony/engineering) @@ -2698,7 +2698,7 @@ /area/map_template/colony/messhall) "fI" = ( /obj/structure/table/woodentable_reinforced, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, @@ -3327,7 +3327,7 @@ /obj/item/storage/belt/utility, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/geiger, /obj/item/geiger, /turf/simulated/floor/tiled/techfloor/grid, @@ -3489,7 +3489,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /turf/simulated/floor/plating, /area/map_template/colony/atmospherics) @@ -3499,7 +3499,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/window/reinforced{ dir = 4 @@ -3915,7 +3915,7 @@ dir = 1 }, /obj/structure/table/steel_reinforced, -/obj/item/storage/box/donut, +/obj/item/storage/box/fancy/donut, /turf/simulated/floor/tiled/techfloor, /area/map_template/colony/jail) "hR" = ( @@ -3926,7 +3926,7 @@ dir = 4 }, /obj/structure/casino/roulette_chart{ - density = TRUE + density = 1 }, /turf/simulated/floor/wood/walnut, /area/map_template/colony/commons) @@ -4242,7 +4242,7 @@ /obj/machinery/reagent_temperature, /obj/item/chems/drinks/shaker, /obj/machinery/vending/boozeomat{ - density = FALSE; + density = 0; pixel_y = -32; req_access = list() }, @@ -4795,7 +4795,7 @@ dir = 4 }, /obj/structure/casino/roulette{ - density = TRUE + density = 1 }, /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 @@ -5203,7 +5203,7 @@ "kc" = ( /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/window/reinforced{ dir = 4 @@ -5949,8 +5949,8 @@ dir = 8 }, /obj/structure/closet/crate, -/obj/item/stack/material/reinforced/mapped/plasteel/ten, -/obj/item/stack/material/reinforced/mapped/plasteel/ten, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/ten, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, /obj/item/stack/material/puck/mapped/uranium/ten, @@ -6331,7 +6331,6 @@ icon_state = "1-2" }, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "colmainblast"; name = "Entry Blast Door" }, @@ -6386,7 +6385,6 @@ icon_state = "1-2" }, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "colmainexit" }, /turf/simulated/floor/tiled/techfloor, @@ -6498,7 +6496,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "colmainblast"; name = "Entry Blast Door" }, @@ -6910,7 +6907,7 @@ /obj/machinery/light{ dir = 8 }, -/mob/living/simple_animal/chicken, +/mob/living/simple_animal/fowl/chicken, /turf/simulated/floor/grass, /area/map_template/colony/hydroponics) "nm" = ( @@ -7230,7 +7227,6 @@ dir = 8 }, /obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; id_tag = "colmainexit" }, /turf/simulated/floor/tiled/techfloor, @@ -7416,10 +7412,10 @@ /obj/item/stack/material/rods/fifty, /obj/item/stack/material/rods/fifty, /obj/item/stack/material/rods/fifty, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/shovel, +/obj/item/tool/pickaxe, +/obj/item/tool/pickaxe, +/obj/item/tool/shovel, +/obj/item/tool/shovel, /obj/item/storage/ore, /obj/item/storage/ore, /obj/item/storage/backpack/dufflebag/eng, @@ -7427,7 +7423,7 @@ /obj/machinery/door/window/northright, /obj/structure/window/reinforced{ dir = 8; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/window/reinforced{ dir = 4 @@ -7810,7 +7806,7 @@ /turf/exterior/concrete, /area/template_noop) "vt" = ( -/mob/living/simple_animal/chicken, +/mob/living/simple_animal/fowl/chicken, /turf/simulated/floor/grass, /area/map_template/colony/hydroponics) "vJ" = ( diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm index 224f94bebc5..8155b9581bd 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm @@ -6,7 +6,7 @@ suffixes = list("playablecolony/colony.dmm") cost = 2 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT apc_test_exempt_areas = list( /area/map_template/colony/mineralprocessing = NO_SCRUBBER|NO_VENT ) diff --git a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm index 5eb4a77c89b..4235d7fcea7 100644 --- a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm +++ b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm @@ -9,4 +9,4 @@ suffixes = list("radshrine/radshrine.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT \ No newline at end of file + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_HABITAT \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm index 6560327c69d..dca18492f4a 100644 --- a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm +++ b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm @@ -4,4 +4,4 @@ suffixes = list("spider_nest/spider_nest.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN + template_tags = TEMPLATE_TAG_HUMAN diff --git a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm index 46b9a336898..9f2637a18ee 100644 --- a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm +++ b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm @@ -4,4 +4,4 @@ suffixes = list("tar_anomaly/tar_anomaly.dmm") cost = 1 template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_ALIEN \ No newline at end of file + template_tags = TEMPLATE_TAG_ALIEN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm index c6c891a3dd2..3f8f41debe1 100644 --- a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm +++ b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/turf/exterior/water/tar, +/turf/exterior/shrouded/tar, /area/template_noop) "b" = ( /turf/template_noop, @@ -20,7 +20,7 @@ /area/template_noop) "f" = ( /obj/structure/monolith, -/turf/exterior/water/tar, +/turf/exterior/shrouded/tar, /area/template_noop) (1,1,1) = {" diff --git a/maps/random_ruins/space_ruins/multi_zas_test.dmm b/maps/random_ruins/space_ruins/multi_zas_test.dmm index 3beee73fb9d..787f02b7aae 100644 --- a/maps/random_ruins/space_ruins/multi_zas_test.dmm +++ b/maps/random_ruins/space_ruins/multi_zas_test.dmm @@ -10,7 +10,7 @@ /turf/simulated/floor, /area/template_noop) "d" = ( -/turf/simulated/open, +/turf/open, /area/template_noop) "e" = ( /turf/unsimulated/floor/shuttle_ceiling, diff --git a/maps/tradeship/jobs/civilian.dm b/maps/tradeship/jobs/civilian.dm index ef5e54bfd27..01802f673c8 100644 --- a/maps/tradeship/jobs/civilian.dm +++ b/maps/tradeship/jobs/civilian.dm @@ -16,7 +16,7 @@ event_categories = list(ASSIGNMENT_GARDENER, ASSIGNMENT_JANITOR) /datum/job/tradeship_deckhand/get_access() - if(config.assistant_maint) + if(get_config_value(/decl/config/toggle/assistant_maint)) return list(access_maint_tunnels) else return list() diff --git a/maps/tradeship/outfits/engineering.dm b/maps/tradeship/outfits/engineering.dm index b67ff40b074..db7f074405b 100644 --- a/maps/tradeship/outfits/engineering.dm +++ b/maps/tradeship/outfits/engineering.dm @@ -1,13 +1,13 @@ /decl/hierarchy/outfit/job/tradeship/hand/engine name = "Tradeship - Job - Junior Engineer" head = /obj/item/clothing/head/hardhat - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL id_type = /obj/item/card/id/tradeship/engineering shoes = /obj/item/clothing/shoes/workboots hands = list(/obj/item/wrench) belt = /obj/item/storage/belt/utility/full r_pocket = /obj/item/radio l_ear = /obj/item/radio/headset/headset_eng + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR /obj/item/card/id/tradeship/engineering name = "identification card" @@ -26,7 +26,7 @@ belt = /obj/item/storage/belt/utility/full id_type = /obj/item/card/id/tradeship/engineering/head r_pocket = /obj/item/radio - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + outfit_flags = OUTFIT_HAS_BACKPACK | OUTFIT_EXTENDED_SURVIVAL | OUTFIT_HAS_VITALS_SENSOR l_ear = /obj/item/radio/headset/heads/ce /obj/item/card/id/tradeship/engineering/head diff --git a/maps/tradeship/tradeship-0.dmm b/maps/tradeship/tradeship-0.dmm index cd0610257f3..e6e54c6f5d6 100644 --- a/maps/tradeship/tradeship-0.dmm +++ b/maps/tradeship/tradeship-0.dmm @@ -4,13 +4,10 @@ /area/space) "ab" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, @@ -31,7 +28,7 @@ /area/ship/trade/undercomms) "ad" = ( /obj/structure/door/wood{ - name = "matriarch's quarters" + name = "captain's quarters" }, /obj/structure/cable{ icon_state = "4-8" @@ -56,13 +53,10 @@ /area/ship/trade/loading_bay) "ah" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, @@ -72,13 +66,10 @@ /area/space) "aj" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, @@ -134,7 +125,8 @@ dir = 9 }, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /obj/structure/cable{ icon_state = "1-4" @@ -151,13 +143,10 @@ /area/space) "at" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, @@ -203,7 +192,7 @@ /obj/machinery/button/access/interior{ dir = 1; id_tag = "lower_cargo"; - pixel_y = -18 + pixel_y = -22 }, /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/loading_bay) @@ -445,7 +434,8 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_y = -20 + pixel_y = -20; + dir = 1 }, /obj/structure/cable{ icon_state = "4-8" @@ -465,13 +455,10 @@ /area/ship/trade/fore_port_underside_maint) "aV" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -487,39 +474,30 @@ /area/ship/trade/livestock) "aX" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, /area/ship/trade/loading_bay) "aY" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, /area/ship/trade/aft_port_underside_maint) "aZ" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor/autoset, /turf/simulated/floor/plating, @@ -564,7 +542,8 @@ /area/ship/trade/loading_bay) "bd" = ( /obj/machinery/button/access/exterior/cabled{ - id_tag = "lower_cargo" + id_tag = "lower_cargo"; + pixel_y = 24 }, /obj/structure/cable{ icon_state = "0-4" @@ -768,7 +747,7 @@ "bG" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/effect/floor_decal/corner/beige{ dir = 5 @@ -788,7 +767,7 @@ "bJ" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor, @@ -796,7 +775,7 @@ "bK" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/structure/reagent_dispensers/beerkeg, /obj/random/mre/sauce/crayon, @@ -891,7 +870,7 @@ icon_state = "1-8" }, /obj/random/trash, -/obj/item/haircomb/random, +/obj/item/grooming/comb/colorable/random, /obj/random/tech_supply, /obj/random/single/textbook, /turf/simulated/floor, @@ -1012,7 +991,7 @@ "cX" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/effect/floor_decal/corner/beige{ dir = 9 @@ -1039,7 +1018,7 @@ /obj/structure/window/basic, /obj/structure/curtain/open/bed{ icon_state = "closed"; - opacity = TRUE + opacity = 1 }, /obj/effect/floor_decal/corner/beige{ dir = 10 @@ -1059,6 +1038,7 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/loot_pile/maint/technical, /turf/simulated/floor, /area/ship/trade/fore_port_underside_maint) "fV" = ( @@ -1316,7 +1296,7 @@ /obj/structure/window/basic, /obj/structure/curtain/open/bed{ icon_state = "closed"; - opacity = TRUE + opacity = 1 }, /turf/simulated/floor/plating, /area/ship/trade/loading_bay) @@ -1344,7 +1324,7 @@ /obj/item/chems/glass/rag, /obj/item/chems/glass/bucket, /obj/machinery/firealarm{ - pixel_y = 25 + pixel_y = 21 }, /obj/structure/closet, /turf/simulated/floor/tiled, @@ -1438,7 +1418,8 @@ name = "shank" }, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor, /area/ship/trade/fore_port_underside_maint) @@ -1459,6 +1440,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ship/trade/loading_bay) +"wI" = ( +/obj/structure/loot_pile/surface/medicine_cabinet{ + pixel_y = 18 + }, +/turf/simulated/floor/carpet/green, +/area/ship/trade/disused) "wP" = ( /obj/structure/disposalpipe/trunk, /obj/structure/cable{ @@ -1470,7 +1457,7 @@ }, /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/tiled/white, /area/ship/trade/livestock) @@ -1681,6 +1668,11 @@ }, /turf/simulated/floor, /area/ship/trade/undercomms) +"Fy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/loot_pile/maint/trash, +/turf/simulated/floor/tiled, +/area/ship/trade/disused) "FD" = ( /obj/item/mollusc/barnacle{ pixel_x = -5; @@ -1766,6 +1758,10 @@ /obj/effect/paint/brown, /turf/simulated/wall/r_wall/hull, /area/ship/trade/livestock) +"IA" = ( +/obj/structure/loot_pile/maint/junk, +/turf/simulated/floor/carpet/green, +/area/ship/trade/disused) "IG" = ( /obj/structure/bed/chair/comfy/green{ dir = 1 @@ -1783,6 +1779,15 @@ /obj/structure/stairs/long/west, /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/loading_bay) +"IO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/loot_pile/maint/boxfort, +/turf/simulated/floor, +/area/ship/trade/fore_port_underside_maint) "IQ" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -1883,17 +1888,18 @@ id_tag = "xenovent"; name = "vent control"; pixel_x = 6; - pixel_y = -24 + pixel_y = -24; + dir = 1 }, /obj/structure/extinguisher_cabinet{ pixel_x = -8; - pixel_y = -28 + pixel_y = -29; + dir = 1 }, /turf/simulated/floor/tiled/white, /area/ship/trade/livestock) "LO" = ( /obj/structure/sign/warning/deathsposal{ - dir = 1; pixel_y = 32 }, /turf/simulated/floor, @@ -1902,7 +1908,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/undercomms) @@ -1918,7 +1924,8 @@ /area/ship/trade/livestock) "MI" = ( /obj/machinery/light_switch{ - pixel_x = 20 + pixel_x = 24; + dir = 8 }, /obj/structure/cable{ icon_state = "1-2" @@ -1976,6 +1983,19 @@ }, /turf/simulated/floor, /area/ship/trade/disused) +"PE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/loot_pile/maint/junk, +/turf/simulated/floor, +/area/ship/trade/fore_port_underside_maint) "PF" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8; @@ -2038,11 +2058,15 @@ /obj/item/stool/padded, /turf/simulated/floor, /area/ship/trade/disused) +"RR" = ( +/obj/structure/loot_pile/maint/boxfort, +/turf/simulated/floor/carpet/red, +/area/ship/trade/disused) "Ss" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -2068,9 +2092,10 @@ /area/ship/trade/loading_bay) "SS" = ( /obj/item/radio/intercom{ - pixel_y = 25 + pixel_y = 20 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/loot_pile/maint/junk, /turf/simulated/floor, /area/ship/trade/disused) "TA" = ( @@ -2181,7 +2206,7 @@ }, /obj/structure/table, /obj/item/stack/material/puck/mapped/uranium, -/obj/item/knife/table/plastic, +/obj/item/utensil/knife/plastic, /obj/item/clothing/accessory/bowtie/ugly, /obj/random/action_figure, /turf/simulated/floor, @@ -4789,7 +4814,7 @@ Gb fp ne ne -ne +IO ne aS Ss @@ -4868,7 +4893,7 @@ SC Ff Ym Xe -Nq +PE ak ak ak @@ -5606,7 +5631,7 @@ SC rp Iu oG -qt +Fy aT yO LO @@ -5849,7 +5874,7 @@ aa aa aa SC -AT +wI Ym JQ Yh @@ -5931,8 +5956,8 @@ aa aa aa SC -AT -Ym +IA +RR JQ lv DT diff --git a/maps/tradeship/tradeship-1.dmm b/maps/tradeship/tradeship-1.dmm index b4516a3948f..877acf78e91 100644 --- a/maps/tradeship/tradeship-1.dmm +++ b/maps/tradeship/tradeship-1.dmm @@ -18,13 +18,10 @@ id_tag = "cargo_out" }, /obj/machinery/shield_diffuser, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/cargo/lower) @@ -36,16 +33,14 @@ dir = 1; id_tag = "cargo"; pixel_x = 24; - pixel_y = 11 + pixel_y = 11; + directional_offset = null }, /obj/machinery/shield_diffuser, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/cargo/lower) @@ -69,13 +64,10 @@ /area/ship/trade/escape_port) "ai" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -108,26 +100,20 @@ /turf/simulated/wall/r_wall, /area/ship/trade/cargo/lower) "am" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/airless, /area/ship/trade/crew/dorms1) "an" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -159,13 +145,10 @@ /area/ship/trade/escape_port) "at" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -199,7 +182,7 @@ /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/button/access/interior{ dir = 8; - id_tag = "tradeship_starboard_dock"; + id_tag = "eva"; pixel_x = 20 }, /turf/simulated/floor/tiled/techfloor, @@ -264,13 +247,10 @@ /obj/machinery/door/airlock/external/bolted{ id_tag = "eva_in" }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/maintenance/eva) @@ -386,7 +366,8 @@ dir = 4; id_tag = "eva"; pixel_x = 12; - pixel_y = 24 + pixel_y = 24; + directional_offset = null }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/maintenance/eva) @@ -459,7 +440,7 @@ /obj/structure/closet/crate/plastic, /obj/item/stack/material/panel/mapped/plastic/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, -/obj/item/stack/material/shiny/mapped/aluminium/fifty, +/obj/item/stack/material/sheet/shiny/mapped/aluminium/fifty, /obj/item/stack/material/pane/mapped/glass, /turf/simulated/floor/tiled/monotile, /area/ship/trade/cargo/lower) @@ -476,14 +457,16 @@ /obj/structure/table, /obj/machinery/button/blast_door{ id_tag = "anomvent"; - name = "emergency vent control" + name = "emergency vent control"; + directional_offset = null }, /turf/simulated/floor/tiled/white, /area/ship/trade/artifact_storage) "ba" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light_switch{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/machinery/power/apc{ dir = 1; @@ -578,7 +561,8 @@ /area/ship/trade/cargo/lower) "bi" = ( /obj/structure/sign/deck/second{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/structure/ladder, /obj/structure/cable{ @@ -601,7 +585,7 @@ }, /obj/machinery/light_switch{ pixel_x = 9; - pixel_y = 21 + pixel_y = 25 }, /obj/effect/floor_decal/corner/beige{ dir = 5 @@ -650,7 +634,7 @@ "br" = ( /obj/structure/lattice, /obj/structure/disposalpipe/down, -/turf/simulated/open, +/turf/open, /area/ship/trade/maintenance/lower) "bt" = ( /obj/effect/floor_decal/corner/beige{ @@ -805,7 +789,8 @@ /obj/random/clothing, /obj/random/clothing, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/lino, /area/ship/trade/crew/dorms1) @@ -965,10 +950,6 @@ icon_state = "0-2"; pixel_y = 1 }, -/obj/machinery/light_switch{ - pixel_x = 9; - pixel_y = 21 - }, /obj/effect/floor_decal/corner/beige{ dir = 5 }, @@ -981,6 +962,10 @@ pixel_y = 22 }, /obj/random/gloves, +/obj/machinery/light_switch{ + pixel_x = 9; + pixel_y = 25 + }, /turf/simulated/floor/lino, /area/ship/trade/crew/dorms2) "cp" = ( @@ -1001,13 +986,10 @@ /area/ship/trade/crew/dorms2) "cr" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor, @@ -1100,7 +1082,8 @@ dir = 9 }, /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -24; + dir = 4 }, /obj/structure/railing/mapped{ dir = 4 @@ -1121,9 +1104,10 @@ /obj/item/stamp/clown, /obj/item/storage/backpack/clown, /obj/item/bikehorn, -/obj/item/storage/fancy/crayons, +/obj/item/storage/box/fancy/crayons, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/lino, /area/ship/trade/crew/dorms2) @@ -1188,19 +1172,18 @@ /area/ship/trade/cargo/lower) "cZ" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor, /area/ship/trade/science) "da" = ( -/obj/machinery/seed_storage/xenobotany, +/obj/machinery/seed_storage/xenobotany{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/ship/trade/science) "db" = ( @@ -1226,7 +1209,8 @@ dir = 9 }, /obj/structure/sign/deck/second{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/cargo/lower) @@ -1255,7 +1239,7 @@ /obj/structure/railing/mapped{ dir = 1 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo/lower) "dj" = ( /obj/effect/floor_decal/corner/beige{ @@ -1361,7 +1345,7 @@ /area/ship/trade/cargo/lower) "dv" = ( /obj/machinery/light, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo/lower) "dw" = ( /obj/effect/floor_decal/corner/beige{ @@ -1438,7 +1422,8 @@ pixel_x = 11 }, /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/ship/trade/science) @@ -1473,14 +1458,15 @@ }, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /turf/simulated/floor/tiled/dark, /area/ship/trade/drunk_tank) "dO" = ( /obj/machinery/botany/editor, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/white, /area/ship/trade/science) @@ -1663,18 +1649,15 @@ /obj/item/clothing/mask/breath, /obj/machinery/light_switch{ pixel_x = 9; - pixel_y = 21 + pixel_y = 25 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/eva) "er" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/eva) @@ -1795,7 +1778,8 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 24; + dir = 8 }, /obj/structure/cable{ icon_state = "1-2" @@ -1839,7 +1823,7 @@ "eY" = ( /obj/item/radio/intercom{ dir = 1; - pixel_y = -25 + pixel_y = -30 }, /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1893,7 +1877,7 @@ }, /obj/machinery/alarm{ dir = 1; - pixel_y = -32 + pixel_y = -21 }, /obj/structure/cable{ icon_state = "0-4" @@ -1955,7 +1939,7 @@ /obj/structure/tank_rack/oxygen, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/eva) @@ -2006,7 +1990,8 @@ icon_state = "railing0" }, /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -20; + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/cargo/lower) @@ -2028,7 +2013,8 @@ dir = 4 }, /obj/structure/sign/department/science_1{ - pixel_x = -30 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/tiled, /area/ship/trade/maintenance/lower) @@ -2048,6 +2034,10 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/sign/warning/caution{ + dir = 4; + pixel_x = -34 + }, /turf/simulated/floor/reinforced, /area/ship/trade/artifact_storage) "iS" = ( @@ -2069,7 +2059,7 @@ }, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /obj/abstract/landmark/latejoin/cryo, /obj/structure/cable{ @@ -2143,7 +2133,7 @@ "lg" = ( /obj/structure/closet/crate/plastic, /obj/item/storage/ore, -/obj/item/pickaxe, +/obj/item/tool/pickaxe, /obj/item/stack/flag/yellow, /obj/item/storage/box/glowsticks, /obj/item/scanner/mining, @@ -2175,7 +2165,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/cargo/lower) "lZ" = ( -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo/lower) "mb" = ( /obj/effect/floor_decal/corner/beige{ @@ -2215,7 +2205,7 @@ }, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /obj/structure/cable{ icon_state = "4-8" @@ -2233,7 +2223,7 @@ /obj/structure/rack, /obj/item/stock_parts/circuitboard/pacman/super/potato, /obj/item/stack/material/pane/mapped/rborosilicate/ten, -/obj/item/stack/material/reinforced/mapped/ocp/ten, +/obj/item/stack/material/sheet/reinforced/mapped/ocp/ten, /obj/item/stock_parts/circuitboard/unary_atmos/engine, /obj/item/stock_parts/circuitboard/unary_atmos/engine, /obj/item/stock_parts/circuitboard/unary_atmos/engine, @@ -2340,7 +2330,7 @@ /obj/machinery/fabricator, /obj/machinery/light_switch{ pixel_x = 9; - pixel_y = 21 + pixel_y = 25 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/techstorage) @@ -2476,7 +2466,8 @@ icon_state = "1-2" }, /obj/structure/sign/department/xenoflora{ - pixel_x = -30 + pixel_x = -32; + dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, @@ -2500,7 +2491,7 @@ "uX" = ( /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/lower) @@ -2529,7 +2520,8 @@ }, /obj/machinery/fabricator/robotics, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/white, /area/ship/trade/science/fabricaton) @@ -2591,7 +2583,8 @@ icon_state = "bulb1" }, /obj/structure/sign/poster{ - pixel_y = 32 + pixel_y = 32; + dir = 1 }, /obj/item/radio/intercom{ pixel_y = 22 @@ -2619,6 +2612,13 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/ship/trade/maintenance/lower) +"yT" = ( +/obj/structure/sign/warning/caution{ + dir = 4; + pixel_x = -34 + }, +/turf/simulated/floor/reinforced, +/area/ship/trade/artifact_storage) "zb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2638,7 +2638,6 @@ backwards = 8; dir = 9; forwards = 2; - icon_state = "conveyor1"; id_tag = "con"; movedir = 6 }, @@ -2685,10 +2684,12 @@ /obj/structure/bed/padded, /obj/item/bedsheet/mime, /obj/machinery/light_switch{ - pixel_y = -24 + pixel_y = -20; + dir = 1 }, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/ship/trade/drunk_tank) @@ -2719,14 +2720,14 @@ /obj/structure/holostool, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /turf/simulated/floor/lino, /area/ship/trade/crew/dorms1) "De" = ( /obj/machinery/alarm{ dir = 1; - pixel_y = -32 + pixel_y = -21 }, /turf/simulated/floor/tiled/white, /area/ship/trade/science) @@ -2821,7 +2822,8 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/ship/trade/cargo/lower) @@ -2941,7 +2943,7 @@ /obj/item/storage/briefcase, /obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -21 }, /turf/simulated/floor/lino, /area/ship/trade/crew/dorms2) @@ -2952,12 +2954,9 @@ /area/ship/trade/cargo/lower) "LA" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/cargo/lower) @@ -3086,7 +3085,8 @@ /obj/machinery/door/airlock/hatch/autoname/general, /obj/machinery/door/firedoor, /obj/structure/sign/warning/fall{ - pixel_x = 32 + pixel_x = 34; + dir = 8 }, /turf/simulated/floor/tiled, /area/ship/trade/cargo/lower) @@ -3098,10 +3098,12 @@ /turf/simulated/floor/tiled/white, /area/ship/trade/science/fabricaton) "Qg" = ( -/obj/effect/paint/brown, -/obj/structure/sign/warning/caution, -/turf/simulated/wall/r_wall, -/area/ship/trade/artifact_storage) +/obj/structure/sign/warning/caution{ + dir = 8; + pixel_x = 34 + }, +/turf/space, +/area/space) "QK" = ( /obj/item/stock_parts/console_screen, /obj/item/stock_parts/console_screen, @@ -3113,7 +3115,7 @@ /obj/structure/rack, /obj/machinery/power/apc{ name = "south bump"; - pixel_y = -24 + pixel_y = -22 }, /obj/structure/cable, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -3146,7 +3148,8 @@ /obj/machinery/button/blast_door{ id_tag = "rndshutters"; name = "Desk Shutters"; - pixel_x = -25 + pixel_x = -24; + dir = 4 }, /obj/machinery/computer/design_console{ dir = 4 @@ -3156,7 +3159,7 @@ "Sb" = ( /obj/machinery/alarm{ dir = 1; - pixel_y = -32 + pixel_y = -21 }, /obj/effect/decal/cleanable/vomit, /obj/structure/hygiene/toilet{ @@ -3274,7 +3277,7 @@ /area/ship/trade/crew/dorms2) "Vm" = ( /obj/item/stack/tape_roll/duct_tape, -/obj/item/stack/material/reinforced/mapped/plasteel/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/plasteel/fifty, /obj/item/stack/material/ingot/mapped/copper/fifty, /obj/item/stack/material/rods/fifty, /obj/item/stack/material/sheet/mapped/steel/fifty, @@ -3284,7 +3287,7 @@ /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/glass/fifty, /obj/item/stack/material/pane/mapped/rglass/fifty, -/obj/item/stack/material/reinforced/mapped/fiberglass/fifty, +/obj/item/stack/material/sheet/reinforced/mapped/fiberglass/fifty, /obj/item/clothing/head/welding, /obj/item/stack/material/cardstock/mapped/cardboard/fifty, /obj/item/stack/tape_roll/duct_tape, @@ -5565,9 +5568,9 @@ aa aa aa aa +Qg aa -aa -aa +Qg aa aa aa @@ -5647,9 +5650,9 @@ sY sY sY Va -Qg +Va ag -Qg +Va ca ca ca @@ -5731,7 +5734,7 @@ ah aP iQ lD -lD +yT sB HY Rs diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm index ab81cf19b5b..b11cda1409e 100644 --- a/maps/tradeship/tradeship-2.dmm +++ b/maps/tradeship/tradeship-2.dmm @@ -74,7 +74,7 @@ /obj/abstract/landmark/latejoin/cryo_captain, /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/wood, /area/ship/trade/command/captain) @@ -93,7 +93,7 @@ }, /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/command/hallway) @@ -104,7 +104,7 @@ }, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/command/hallway) @@ -115,9 +115,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/hatch/autoname/command, -/obj/structure/sign/warning/radioactive{ - pixel_x = -32 - }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/shieldbay) @@ -140,7 +137,8 @@ /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ dir = 8; - name = "Crew Deck APC" + name = "Crew Deck APC"; + pixel_x = -22 }, /obj/structure/cable, /turf/simulated/floor/plating, @@ -158,7 +156,8 @@ icon_state = "16-0" }, /obj/machinery/atm{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/command/hallway) @@ -174,39 +173,30 @@ /area/ship/trade/command/hallway) "ao" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/ship/trade/command/bridge) "ap" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/command/hallway) "aq" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -236,13 +226,10 @@ /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/command/bridge) "av" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/crew/toilets) @@ -251,50 +238,38 @@ /area/ship/trade/command/fmate) "ax" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/ship/trade/crew/saloon) "ay" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/crew/medbay/chemistry) "az" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/ship/trade/crew/toilets) "aA" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled{ @@ -336,13 +311,10 @@ /area/ship/trade/crew/hallway/port) "aG" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -395,13 +367,10 @@ /area/ship/trade/shuttle/outgoing/general) "aM" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 @@ -467,13 +436,10 @@ /area/ship/trade/command/hallway) "aT" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/red{ @@ -508,12 +474,9 @@ /area/ship/trade/command/captain) "aX" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE + id_tag = "engwindow" }, /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -543,7 +506,8 @@ dir = 4 }, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/carpet, /area/ship/trade/command/fmate) @@ -577,7 +541,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/atmos) @@ -592,7 +556,7 @@ }, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /obj/machinery/computer/shuttle_control/explore/tradeship{ dir = 8 @@ -601,13 +565,10 @@ /area/ship/trade/dock) "bf" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -621,7 +582,7 @@ }, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /obj/machinery/light{ dir = 1; @@ -641,13 +602,10 @@ /area/ship/trade/shuttle/outgoing/general) "bj" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -664,7 +622,7 @@ }, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) @@ -677,8 +635,8 @@ /obj/random/drinkbottle, /obj/random/drinkbottle, /obj/random/drinkbottle, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, /obj/item/chems/condiment/flour, /obj/item/chems/condiment/flour, /obj/item/chems/condiment/flour, @@ -691,7 +649,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/structure/handrail{ dir = 4 @@ -724,12 +682,9 @@ /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) "bs" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -790,7 +745,8 @@ dir = 4; id_tag = "tradeship_starboard_dock"; pixel_x = 12; - pixel_y = 24 + pixel_y = 24; + directional_offset = null }, /obj/machinery/shield_diffuser, /obj/structure/cable{ @@ -816,7 +772,8 @@ dir = 4 }, /obj/structure/closet/medical_wall/filled{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/shuttle/outgoing/general) @@ -856,12 +813,9 @@ /area/ship/trade/dock) "bA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -869,7 +823,8 @@ "bB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/warning/vacuum{ - dir = 4 + dir = 4; + pixel_x = -34 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) @@ -893,12 +848,9 @@ /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) "bE" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -947,12 +899,12 @@ dir = 4; id_tag = "bee_star"; pixel_x = 16; - pixel_y = -26 + pixel_y = -26; + directional_offset = null }, /obj/structure/cable/orange{ icon_state = "4-8" }, -/obj/structure/sign/warning/docking_area, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/shuttle/outgoing/general) "bI" = ( @@ -960,7 +912,8 @@ dir = 8; id_tag = "tradeship_dock_port"; pixel_x = -12; - pixel_y = 24 + pixel_y = 24; + directional_offset = null }, /obj/machinery/door/airlock/external/bolted{ id_tag = "dock_port_out" @@ -1073,16 +1026,11 @@ dir = 8; id_tag = "tradeship_rescue_shuttle_pump_out_internal" }, -/obj/machinery/airlock_sensor{ - id_tag = "tradeship_rescue_shuttle_sensor"; - pixel_x = -22; - pixel_y = 20 - }, /obj/machinery/embedded_controller/radio/airlock/docking_port{ cycle_to_external_air = 1; dir = 4; id_tag = "tradeship_rescue_shuttle"; - pixel_x = -20; + pixel_x = -22; pixel_y = 32; tag_airpump = "tradeship_rescue_shuttle_pump"; tag_chamber_sensor = "tradeship_rescue_shuttle_sensor"; @@ -1092,6 +1040,12 @@ dir = 9 }, /obj/effect/shuttle_landmark/docking_arm_starboard/rescue, +/obj/machinery/airlock_sensor{ + id_tag = "tradeship_rescue_shuttle_sensor"; + pixel_x = -22; + pixel_y = 20; + dir = 4 + }, /turf/simulated/floor/tiled, /area/ship/trade/shuttle/rescue) "cd" = ( @@ -1104,18 +1058,16 @@ id_tag = "bee_star_pump" }, /obj/structure/closet/walllocker/suit{ - dir = 4 + dir = 4; + pixel_x = -32 }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/shuttle/outgoing/general) "cf" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -1140,10 +1092,12 @@ /turf/simulated/floor/plating, /area/ship/trade/shuttle/outgoing/engineering) "ct" = ( -/obj/structure/sign/warning/docking_area, -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/trade/dock) +/obj/structure/sign/warning/docking_area{ + dir = 8; + pixel_x = 34 + }, +/turf/space, +/area/space) "cu" = ( /obj/machinery/door/airlock/hatch/autoname/general, /obj/machinery/door/firedoor, @@ -1225,7 +1179,8 @@ "cO" = ( /obj/machinery/power/apc{ dir = 1; - name = "Crew Areas APC" + name = "Crew Areas APC"; + pixel_y = 22 }, /obj/structure/cable{ icon_state = "0-4" @@ -1309,12 +1264,14 @@ /obj/structure/table, /obj/machinery/recharger, /obj/structure/sign/poster{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, -/obj/item/trash/tray, +/obj/item/plate/tray, /obj/item/circular_saw, /obj/machinery/newscaster{ - pixel_x = 32 + pixel_x = 32; + dir = 4 }, /obj/random/drinkbottle, /obj/random/drinkbottle, @@ -1384,7 +1341,7 @@ }, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled, /area/ship/trade/crew/saloon) @@ -1418,7 +1375,8 @@ pixel_y = 22 }, /obj/machinery/light_switch{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/structure/cable{ icon_state = "0-2"; @@ -1428,13 +1386,10 @@ /area/ship/trade/crew/medbay/chemistry) "dt" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/crew/toilets) @@ -1654,13 +1609,10 @@ /area/ship/trade/crew/medbay/chemistry) "dK" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -1703,7 +1655,8 @@ pixel_x = 22 }, /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -20; + dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -1750,7 +1703,8 @@ /area/ship/trade/crew/saloon) "dU" = ( /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, /obj/effect/floor_decal/corner/beige{ dir = 6 @@ -1771,7 +1725,7 @@ "dW" = ( /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/reagentgrinder, /obj/machinery/light, @@ -1817,7 +1771,8 @@ "ed" = ( /obj/machinery/light_switch{ on = 1; - pixel_x = -25 + pixel_x = -25; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1888,13 +1843,10 @@ /area/ship/trade/maintenance/engine/port) "ey" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/crew/kitchen) @@ -1990,7 +1942,7 @@ icon_state = "32-1" }, /obj/structure/disposalpipe/down, -/turf/simulated/open, +/turf/open, /area/ship/trade/crew/hallway/starboard) "eL" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -2109,7 +2061,7 @@ /area/ship/trade/cargo) "eV" = ( /obj/structure/catwalk, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fa" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -2187,13 +2139,10 @@ /area/ship/trade/crew/medbay) "ff" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/structure/cable{ icon_state = "6-8" @@ -2234,7 +2183,7 @@ }, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/effect/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled, @@ -2245,7 +2194,8 @@ dir = 1 }, /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, /obj/effect/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled, @@ -2258,7 +2208,7 @@ "fp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/catwalk, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fr" = ( /obj/structure/closet/crate, @@ -2268,7 +2218,7 @@ /obj/random/bomb_supply, /obj/item/storage/box/syringes, /obj/structure/catwalk, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fs" = ( /obj/structure/catwalk, @@ -2276,9 +2226,10 @@ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fu" = ( /obj/structure/cable{ @@ -2303,10 +2254,12 @@ dir = 1 }, /obj/structure/sign/warning/nosmoking_1{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/structure/sign/plaque/diploma/medical{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/item/storage/firstaid/adv, /obj/random/medical, @@ -2375,20 +2328,20 @@ "fI" = ( /obj/structure/catwalk, /obj/effect/floor_decal/industrial/warning, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fJ" = ( /obj/structure/catwalk, /obj/effect/floor_decal/industrial/warning, /obj/structure/railing/mapped, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fK" = ( /obj/structure/catwalk, /obj/machinery/light/spot{ dir = 4 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "fN" = ( /obj/effect/paint/brown, @@ -2413,7 +2366,6 @@ /area/ship/trade/maintenance/engine/starboard) "fQ" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, /obj/effect/paint/red, /turf/simulated/wall/r_wall, /area/ship/trade/maintenance/engine/port) @@ -2424,7 +2376,7 @@ "fU" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 6 @@ -2486,7 +2438,7 @@ /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/port) "fZ" = ( -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "ga" = ( /obj/structure/catwalk, @@ -2495,10 +2447,9 @@ icon_state = "warning" }, /obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0" + dir = 8 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "gc" = ( /obj/machinery/door/airlock/hatch/autoname/general, @@ -2556,24 +2507,22 @@ /area/ship/trade/unused) "gh" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, /obj/effect/paint/red, /turf/simulated/wall, /area/ship/trade/maintenance/engine/starboard) "gj" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, /obj/effect/paint/red, /turf/simulated/wall/r_wall, /area/ship/trade/maintenance/engine/starboard) "gk" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" + }, +/obj/structure/sign/warning/hot_exhaust{ + pixel_y = 32 }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/engine/port) @@ -2586,13 +2535,10 @@ /area/space) "gn" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 @@ -2621,7 +2567,8 @@ dir = 1 }, /obj/machinery/light_switch{ - pixel_x = 28 + pixel_x = 24; + dir = 8 }, /obj/structure/handrail{ dir = 8 @@ -2652,12 +2599,11 @@ /obj/structure/handrail{ dir = 8 }, +/obj/structure/emergency_dispenser/east, /obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0" + dir = 8 }, -/obj/structure/emergency_dispenser/east, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "gt" = ( /obj/structure/emergency_dispenser/west, @@ -2677,7 +2623,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/wood/yew, /area/ship/trade/unused) @@ -2739,18 +2685,19 @@ icon_state = "warning" }, /obj/structure/sign/deck/first{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0" + dir = 8 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "gI" = ( /obj/random/maintenance, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor/wood/yew, /area/ship/trade/unused) @@ -2770,7 +2717,7 @@ dir = 8; icon_state = "warning" }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "gN" = ( /obj/effect/floor_decal/techfloor/orange{ @@ -2808,7 +2755,7 @@ dir = 1; icon_state = "warning" }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "gW" = ( /obj/structure/catwalk, @@ -2817,14 +2764,14 @@ icon_state = "warning" }, /obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0" + dir = 1 }, /obj/machinery/light/spot, /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -20; + dir = 1 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "hb" = ( /obj/machinery/power/terminal{ @@ -2843,7 +2790,8 @@ /obj/machinery/button/blast_door{ id_tag = "radaway"; name = "Radiation shields"; - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/power) @@ -2913,7 +2861,7 @@ dir = 8 }, /obj/machinery/firealarm{ - pixel_y = 24 + pixel_y = 21 }, /turf/simulated/floor/plating, /area/ship/trade/hidden) @@ -3090,7 +3038,7 @@ /obj/item/storage/backpack/dufflebag/syndie, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/structure/cable{ icon_state = "0-2"; @@ -3267,7 +3215,8 @@ dir = 5 }, /obj/structure/sign/warning/high_voltage{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/structure/table, /obj/item/toy/prize/powerloader, @@ -3275,17 +3224,18 @@ /obj/machinery/recharger, /obj/item/blueprints, /obj/structure/sign/poster{ - pixel_y = 32 + pixel_y = 32; + dir = 1 }, /obj/machinery/firealarm{ - pixel_y = 24 + pixel_y = 21 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/engineering) "ib" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/effect/floor_decal/corner/blue{ dir = 6 @@ -3441,7 +3391,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/abstract/fluid_mapped/fuel, +/obj/abstract/landmark/mapped_fluid/fuel, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/engineering) "in" = ( @@ -3487,7 +3437,7 @@ }, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/power) @@ -3585,7 +3535,9 @@ /obj/machinery/button/blast_door{ id_tag = "engwindow"; name = "Engine Observation"; - pixel_x = 6 + pixel_x = 6; + dir = 1; + directional_offset = null }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3600,7 +3552,8 @@ /obj/machinery/button/blast_door{ id_tag = "scram"; name = "CORE SCRAM"; - pixel_y = -26 + pixel_y = -26; + dir = 1 }, /obj/machinery/computer/fusion/fuel_control{ dir = 1; @@ -3622,22 +3575,24 @@ /obj/effect/floor_decal/corner/yellow{ dir = 10 }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = -32 - }, /obj/machinery/computer/fusion/gyrotron{ dir = 1; initial_id_tag = "main_drive" }, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 32; + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/engineering) "iE" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; @@ -3692,11 +3647,8 @@ /area/ship/trade/maintenance/engine/aft) "iR" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "engwindow" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -3726,7 +3678,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/maintenance/power) "iU" = ( -/obj/machinery/shield_generator, +/obj/machinery/shield_generator/mapped, /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1 @@ -3748,26 +3700,20 @@ icon_state = "map_vent_out"; use_power = 1 }, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/atmos) "iW" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 4 @@ -3878,6 +3824,10 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/sign/warning/radioactive{ + pixel_y = -32; + dir = 1 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/maintenance/power) "jl" = ( @@ -3898,6 +3848,10 @@ /obj/machinery/power/smes/buildable/max_cap_in_out, /obj/structure/cable, /obj/effect/floor_decal/techfloor/orange, +/obj/structure/sign/warning/radioactive{ + pixel_y = -32; + dir = 1 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/maintenance/power) "jp" = ( @@ -3986,15 +3940,7 @@ /obj/machinery/door/window/northleft, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = FALSE - }, -/obj/structure/sign/warning/radioactive{ - pixel_x = -32 - }, -/obj/structure/sign/warning/radioactive{ - pixel_x = 32 + id_tag = "radaway" }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/power) @@ -4077,7 +4023,7 @@ "jI" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/atmospherics/valve/shutoff, /obj/structure/window/borosilicate_reinforced{ @@ -4141,11 +4087,17 @@ }, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = FALSE + id_tag = "radaway" }, /obj/machinery/meter/turf, +/obj/structure/sign/warning/radioactive{ + pixel_x = -32; + dir = 4 + }, +/obj/structure/sign/warning/radioactive{ + pixel_x = 32; + dir = 8 + }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/power) "jQ" = ( @@ -4165,7 +4117,7 @@ /obj/effect/floor_decal/corner/red/diagonal, /obj/machinery/meter/turf, /obj/structure/window/reinforced{ - health = 1e+007 + current_health = 1e+007 }, /turf/simulated/floor/reinforced/nitrogen, /area/ship/trade/maintenance/atmos) @@ -4178,7 +4130,7 @@ }, /obj/effect/floor_decal/corner/red/diagonal, /obj/structure/window/reinforced{ - health = 1e+007 + current_health = 1e+007 }, /turf/simulated/floor/reinforced/nitrogen, /area/ship/trade/maintenance/atmos) @@ -4480,7 +4432,8 @@ dir = 4; id_tag = "bee_star"; pixel_x = 16; - pixel_y = 26 + pixel_y = 26; + directional_offset = null }, /turf/space, /area/ship/trade/shuttle/outgoing/general) @@ -4518,11 +4471,19 @@ }, /obj/item/deck/tarot, /obj/machinery/button/blast_door{ - id_tag = "bee_shutters" + id_tag = "bee_shutters"; + directional_offset = null }, /obj/item/stack/medical/bruise_pack, /turf/simulated/floor/tiled, /area/ship/trade/shuttle/outgoing/general) +"lU" = ( +/obj/structure/sign/warning/docking_area{ + dir = 4; + pixel_x = -34 + }, +/turf/space, +/area/space) "lW" = ( /obj/structure/catwalk, /obj/structure/handrail{ @@ -4536,7 +4497,8 @@ /area/ship/trade/shuttle/outgoing/general) "lZ" = ( /obj/structure/sign/department/redcross{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/starboard) @@ -4581,7 +4543,7 @@ }, /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled, /area/ship/trade/shuttle/outgoing/general) @@ -4659,7 +4621,7 @@ }, /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/machinery/atmospherics/unary/vent_pump/on{ level = 2 @@ -4729,7 +4691,7 @@ /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ dir = 1 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "nW" = ( /obj/effect/floor_decal/corner/red/diagonal, @@ -4837,7 +4799,7 @@ /area/ship/trade/shuttle/outgoing/general) "pb" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/tiled, @@ -4857,7 +4819,7 @@ "pt" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/port) @@ -4915,7 +4877,8 @@ }, /obj/machinery/biogenerator, /obj/machinery/light_switch{ - pixel_x = 22 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled, /area/ship/trade/garden) @@ -5034,26 +4997,20 @@ "rb" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/garden) "rp" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/command/fmate) @@ -5062,7 +5019,7 @@ /obj/effect/floor_decal/industrial/warning, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/engine/aft) @@ -5090,7 +5047,8 @@ icon_state = "0-8" }, /obj/machinery/newscaster{ - pixel_x = 30 + pixel_x = 32; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/ship/trade/command/bridge) @@ -5154,7 +5112,7 @@ /area/ship/trade/maintenance/engine/aft) "sj" = ( /obj/machinery/alarm{ - pixel_y = 24 + pixel_y = 21 }, /obj/machinery/atmospherics/portables_connector{ dir = 1 @@ -5178,11 +5136,8 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/red, /obj/effect/paint/sun, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "bee_shutters"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "bee_shutters" }, /turf/simulated/floor/plating, /area/ship/trade/shuttle/outgoing/general) @@ -5196,13 +5151,13 @@ /turf/space, /area/ship/trade/shuttle/outgoing/general) "sz" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" + }, +/obj/structure/sign/warning/hot_exhaust{ + pixel_y = 32 }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/engine/starboard) @@ -5215,14 +5170,15 @@ "sB" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/sign/warning/fall{ - pixel_x = -32 + pixel_x = -34; + dir = 4 }, /obj/structure/catwalk, /obj/structure/railing/mapped, /obj/machinery/light/spot{ dir = 8 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "sG" = ( /obj/effect/floor_decal/corner/beige{ @@ -5302,24 +5258,25 @@ }, /turf/simulated/floor/plating, /area/ship/trade/shuttle/outgoing/engineering) +"tG" = ( +/obj/abstract/ramp_sculptor/north, +/turf/exterior/wall, +/area/space) "tV" = ( /turf/space, /area/ship/trade/command/fmate) "tW" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/command/fmate) "uc" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/item/radio/intercom{ @@ -5349,13 +5306,10 @@ /turf/simulated/wall/titanium, /area/ship/trade/shuttle/outgoing/engineering) "ul" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/crew/medbay/chemistry) @@ -5365,7 +5319,7 @@ icon_state = "0-8" }, /obj/structure/sign/warning/radioactive{ - dir = 4; + dir = 8; pixel_x = 32 }, /turf/simulated/floor/plating, @@ -5405,7 +5359,7 @@ "vc" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/item/radio/intercom{ dir = 1; @@ -5433,13 +5387,10 @@ /turf/simulated/floor/airless, /area/ship/trade/maintenance/engine/starboard) "vL" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/structure/sign/warning/hot_exhaust{ pixel_y = 32 @@ -5551,7 +5502,7 @@ /area/ship/trade/crew/wash) "xc" = ( /obj/machinery/firealarm{ - pixel_y = 24 + pixel_y = 21 }, /obj/structure/cable{ icon_state = "4-8" @@ -5721,7 +5672,7 @@ /obj/structure/curtain/open/shower, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled/freezer, /area/ship/trade/crew/toilets) @@ -5732,13 +5683,10 @@ "zO" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/command/captain) @@ -5749,6 +5697,17 @@ }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/atmos) +"zY" = ( +/obj/structure/lattice, +/obj/structure/handrail{ + dir = 4 + }, +/obj/structure/sign/warning/docking_area{ + dir = 4; + pixel_x = -34 + }, +/turf/space, +/area/space) "Ab" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 6 @@ -5856,7 +5815,7 @@ }, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/tiled, /area/ship/trade/crew/kitchen) @@ -5888,7 +5847,8 @@ id_tag = "bee_port_pump" }, /obj/structure/closet/walllocker/suit{ - dir = 8 + dir = 8; + pixel_x = 32 }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/shuttle/outgoing/general) @@ -5906,11 +5866,8 @@ "BN" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "bee_shutters"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "bee_shutters" }, /obj/effect/paint/black, /turf/simulated/floor/plating, @@ -5928,7 +5885,8 @@ /obj/machinery/button/blast_door{ id_tag = "fmate"; pixel_x = 22; - pixel_y = -2 + pixel_y = -2; + dir = 8 }, /turf/simulated/floor/wood, /area/ship/trade/command/fmate) @@ -5950,7 +5908,7 @@ /obj/effect/floor_decal/corner/red/diagonal, /obj/machinery/vending/dinnerware, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled, /area/ship/trade/crew/kitchen) @@ -5964,6 +5922,10 @@ /obj/effect/paint/brown, /turf/simulated/wall/r_wall/hull, /area/ship/trade/crew/medbay/chemistry) +"Cg" = ( +/obj/abstract/ramp_sculptor/east, +/turf/exterior/wall, +/area/space) "Co" = ( /obj/effect/floor_decal/corner/red/diagonal, /obj/structure/cable{ @@ -5996,7 +5958,8 @@ /obj/item/toy/figure/captain, /obj/machinery/button/blast_door{ id_tag = "sensor"; - name = "Sensor Shroud" + name = "Sensor Shroud"; + directional_offset = null }, /obj/item/radio, /obj/random/drinkbottle, @@ -6105,7 +6068,8 @@ dir = 8; id_tag = "bee_port"; pixel_x = -16; - pixel_y = -26 + pixel_y = -26; + directional_offset = null }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/shuttle/outgoing/general) @@ -6163,7 +6127,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /obj/item/handcuffs, /obj/item/telebaton, @@ -6271,7 +6235,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/cargo) @@ -6301,12 +6265,9 @@ /area/ship/trade/crew/medbay/chemistry) "FD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -6315,7 +6276,8 @@ /obj/structure/table, /obj/machinery/button/blast_door{ id_tag = "scraplock"; - name = "External Lockdown" + name = "External Lockdown"; + directional_offset = null }, /obj/random_multi/single_item/captains_spare_id, /obj/item/documents/tradehouse/account, @@ -6326,7 +6288,7 @@ "FT" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/hallway) @@ -6395,11 +6357,8 @@ /obj/effect/wallframe_spawn/reinforced/titanium, /obj/machinery/door/firedoor, /obj/effect/paint/sun, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "bee_shutters"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "bee_shutters" }, /turf/simulated/floor/plating, /area/ship/trade/shuttle/outgoing/general) @@ -6451,11 +6410,11 @@ /area/ship/trade/maintenance/atmos) "Hc" = ( /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/item/bedsheet/medical, /obj/structure/curtain/open/privacy, @@ -6517,7 +6476,7 @@ "Ic" = ( /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /obj/item/storage/medical_lolli_jar, /obj/structure/table, @@ -6534,14 +6493,11 @@ "Im" = ( /obj/structure/table, /obj/item/chems/food/monkeycube/wrapped, -/obj/structure/closet/medical_wall{ - name = "pill cabinet"; - pixel_y = -29 +/obj/structure/closet/secure_closet/medical_wall/pills{ + pixel_y = -32; + req_access = null; + dir = 1 }, -/obj/item/storage/pill_bottle/antibiotics, -/obj/item/storage/pill_bottle/painkillers, -/obj/item/storage/pill_bottle/antitoxins, -/obj/item/storage/pill_bottle/burn_meds, /turf/simulated/floor/tiled/white, /area/ship/trade/crew/medbay) "Is" = ( @@ -6553,7 +6509,7 @@ "Iw" = ( /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/port) @@ -6579,7 +6535,7 @@ "IC" = ( /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/starboard) @@ -6655,7 +6611,8 @@ icon_state = "bulb1" }, /obj/structure/sign/deck/first{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /obj/structure/handrail{ dir = 8 @@ -6667,7 +6624,8 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/kitchenspike, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/tiled, /area/ship/trade/crew/kitchen) @@ -6695,13 +6653,10 @@ "JI" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/power) @@ -6747,7 +6702,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6759,7 +6714,7 @@ "Kd" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/structure/table, /obj/machinery/cell_charger, @@ -6781,7 +6736,8 @@ /area/ship/trade/command/captain) "Kl" = ( /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -24; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/port) @@ -6809,13 +6765,14 @@ /area/ship/trade/shuttle/outgoing/general) "KI" = ( /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -24; + dir = 4 }, /obj/structure/catwalk, /obj/structure/handrail{ dir = 4 }, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "KO" = ( /obj/structure/cable{ @@ -6838,7 +6795,7 @@ "KZ" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/starboard) @@ -6856,7 +6813,7 @@ }, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6871,7 +6828,7 @@ /turf/simulated/floor/tiled, /area/ship/trade/shuttle/outgoing/general) "Lm" = ( -/obj/machinery/shield_generator, +/obj/machinery/shield_generator/mapped, /obj/structure/cable{ icon_state = "0-8" }, @@ -6921,7 +6878,7 @@ dir = 4 }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/freezer, /area/ship/trade/crew/wash) @@ -7016,7 +6973,7 @@ dir = 4 }, /obj/machinery/firealarm{ - pixel_y = 24 + pixel_y = 21 }, /turf/simulated/floor/tiled/freezer, /area/ship/trade/crew/wash) @@ -7047,7 +7004,8 @@ /obj/machinery/network/requests_console{ announcementConsole = 1; department = "Captain"; - pixel_y = -32 + pixel_y = -32; + dir = 2; }, /obj/item/radio/intercom{ dir = 4; @@ -7101,7 +7059,7 @@ pixel_x = -22 }, /obj/machinery/alarm{ - pixel_y = 24 + pixel_y = 21 }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/shuttle/outgoing/general) @@ -7121,7 +7079,7 @@ "Ob" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; @@ -7176,12 +7134,16 @@ "OP" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/structure/table, /obj/machinery/reagent_temperature/cooler, /turf/simulated/floor/tiled/white, /area/ship/trade/crew/medbay/chemistry) +"OQ" = ( +/obj/abstract/ramp_sculptor/west, +/turf/exterior/wall, +/area/space) "Pa" = ( /obj/structure/cable{ icon_state = "0-4" @@ -7200,7 +7162,8 @@ }, /obj/structure/displaycase, /obj/machinery/newscaster{ - pixel_y = -30 + pixel_y = -32; + dir = 1 }, /turf/simulated/floor/carpet/blue, /area/ship/trade/command/captain) @@ -7223,7 +7186,7 @@ "PB" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 24 + pixel_x = 21 }, /obj/structure/cable{ icon_state = "1-2" @@ -7259,24 +7222,18 @@ /turf/simulated/floor/plating, /area/ship/trade/shieldbay) "PH" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/power) "PU" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/item/mollusc/barnacle{ pixel_y = -11 @@ -7300,13 +7257,13 @@ /area/ship/trade/crew/hallway/starboard) "Ql" = ( /obj/structure/lattice, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" + }, +/obj/structure/sign/warning/hot_exhaust{ + pixel_y = 32 }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/engine/starboard) @@ -7338,10 +7295,12 @@ pixel_y = -22 }, /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -24; + dir = 4 }, /obj/structure/closet/medical_wall/filled{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/item/stack/tape_roll/duct_tape, /obj/item/storage/firstaid/surgery, @@ -7357,7 +7316,8 @@ /obj/machinery/button/toggle/engine{ id_tag = "tradeship_engine_vent"; name = "engine vent control button"; - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/engine/aft) @@ -7394,7 +7354,7 @@ /obj/item/stool/padded, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /turf/simulated/floor/wood/yew, /area/ship/trade/unused) @@ -7410,13 +7370,10 @@ /turf/space, /area/ship/trade/shuttle/outgoing/general) "Rl" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/maintenance/atmos) @@ -7439,7 +7396,7 @@ /obj/machinery/merchant_pad, /obj/machinery/firealarm{ dir = 4; - pixel_x = 24 + pixel_x = 21 }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/cargo) @@ -7482,25 +7439,24 @@ icon_state = "bulb1" }, /obj/machinery/newscaster{ - pixel_x = -32 + pixel_x = -32; + dir = 8 }, /turf/simulated/floor/tiled, /area/ship/trade/garden) "Sg" = ( /obj/machinery/light, /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -20; + dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/shieldbay) "Si" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /turf/simulated/floor/airless, /area/ship/trade/crew/toilets) @@ -7533,7 +7489,7 @@ "SI" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -24 + pixel_x = -21 }, /obj/effect/floor_decal/steeldecal/steel_decals6, /obj/structure/sign/warning/radioactive{ @@ -7564,16 +7520,15 @@ }, /obj/machinery/power/apc{ dir = 1; - name = "Docking Area APC" + name = "Docking Area APC"; + pixel_y = 22 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/structure/sign/warning/radioactive{ - pixel_y = 32 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/command/hallway) @@ -7599,6 +7554,10 @@ /obj/effect/paint/sun, /turf/simulated/wall/titanium, /area/ship/trade/shuttle/outgoing/engineering) +"Tv" = ( +/obj/structure/lattice, +/turf/exterior/wall, +/area/space) "Tx" = ( /obj/structure/shuttle/engine/propulsion/burst/right, /turf/simulated/floor/airless, @@ -7632,7 +7591,8 @@ /area/ship/trade/command/bridge) "TR" = ( /obj/structure/sign/deck/first{ - pixel_x = 32 + pixel_x = 32; + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/starboard) @@ -7644,13 +7604,10 @@ /area/ship/trade/garden) "Ue" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/structure/cable{ icon_state = "4-10" @@ -7676,7 +7633,8 @@ icon_state = "4-8" }, /obj/machinery/light_switch{ - pixel_y = -25 + pixel_y = -20; + dir = 1 }, /turf/simulated/floor/tiled/dark, /area/ship/trade/command/bridge) @@ -7744,7 +7702,7 @@ /obj/structure/cable, /obj/machinery/power/apc{ name = "south bump"; - pixel_y = -24 + pixel_y = -22 }, /obj/item/chems/glass/bucket, /obj/structure/reagent_dispensers/watertank, @@ -7787,13 +7745,10 @@ /area/ship/trade/maintenance/engine/aft) "VW" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -7843,7 +7798,7 @@ }, /obj/machinery/firealarm{ dir = 8; - pixel_x = -24 + pixel_x = -21 }, /obj/machinery/light{ icon_state = "bulb1" @@ -7857,7 +7812,8 @@ /obj/machinery/cryopod/lifepod, /obj/machinery/door/window/southright, /obj/machinery/computer/cryopod{ - dir = 8 + dir = 8; + pixel_x = 24 }, /turf/simulated/floor/wood, /area/ship/trade/command/captain) @@ -7935,13 +7891,10 @@ /area/ship/trade/maintenance/hallway) "XG" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "scraplock" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/red{ @@ -7959,11 +7912,8 @@ /area/ship/trade/cargo) "XX" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = FALSE +/obj/machinery/door/blast/regular/open{ + id_tag = "engwindow" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -7973,7 +7923,7 @@ /obj/effect/floor_decal/industrial/warning, /obj/structure/catwalk, /obj/structure/railing/mapped, -/turf/simulated/open, +/turf/open, /area/ship/trade/cargo) "Yc" = ( /obj/structure/cable{ @@ -8026,6 +7976,10 @@ dir = 8 }, /obj/structure/lattice, +/obj/structure/sign/warning/docking_area{ + dir = 8; + pixel_x = 34 + }, /turf/space, /area/space) "YE" = ( @@ -8107,7 +8061,7 @@ icon_state = "0-4" }, /obj/item/radio/intercom{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/maintenance/power) @@ -9912,9 +9866,9 @@ aa aa aa aa -aa -aa -aa +OQ +OQ +OQ xX aa aa @@ -9993,8 +9947,8 @@ aa aa aa aa -aa -aa +tG +eh eh eh pn @@ -10075,7 +10029,7 @@ aa aa aa aa -aa +tG eh ew ex @@ -10157,7 +10111,7 @@ aa aa aa aa -aa +tG eh ex ex @@ -10240,7 +10194,7 @@ aa aa aa aa -aa +eh ex ex fh @@ -10717,7 +10671,7 @@ aa aa aa aa -aa +ct bA bI bA @@ -10885,7 +10839,7 @@ nZ bm bz cf -ct +Mw aq aq aq @@ -11869,7 +11823,7 @@ nZ bm bt cf -ct +Mw VW VW VW @@ -11951,7 +11905,7 @@ nZ Mw bu bA -Zv +zY cy cy cy @@ -12029,7 +11983,7 @@ aa aa aa aa -aa +lU bA bw bA @@ -12453,9 +12407,9 @@ aa aa aa aa -aa -aa -cy +eh +eh +Tv eN Gc fN @@ -12534,7 +12488,7 @@ aa aa aa aa -aa +tG eh eh eN @@ -12616,8 +12570,8 @@ aa aa aa aa -aa -aa +tG +eh ew eN eN @@ -12698,8 +12652,8 @@ aa aa aa aa -aa -aa +tG +eh eh eh eN @@ -12781,9 +12735,9 @@ aa aa aa aa -aa -aa -aa +Cg +Cg +Cg aa we we diff --git a/maps/tradeship/tradeship-3.dmm b/maps/tradeship/tradeship-3.dmm index 9660d917533..a1788b55a73 100644 --- a/maps/tradeship/tradeship-3.dmm +++ b/maps/tradeship/tradeship-3.dmm @@ -5,13 +5,10 @@ "ab" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/bridge_unused) @@ -149,13 +146,10 @@ /area/ship/trade/maintenance/solars) "au" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, @@ -168,7 +162,8 @@ tag_airpump = "solars_pump"; tag_chamber_sensor = "solars_sensor"; tag_exterior_door = "solars_out"; - tag_interior_door = "solars_in" + tag_interior_door = "solars_in"; + pixel_x = 22 }, /obj/structure/cable{ icon_state = "1-2" @@ -304,13 +299,10 @@ "aN" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/comms) @@ -440,7 +432,8 @@ "bc" = ( /obj/machinery/door/firedoor, /obj/structure/sign/warning/fall{ - pixel_x = 32 + pixel_x = 34; + dir = 8 }, /obj/structure/cable{ icon_state = "1-2" @@ -453,7 +446,8 @@ /area/space) "be" = ( /obj/machinery/light_switch{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/structure/cable{ icon_state = "1-2" @@ -467,7 +461,7 @@ icon_state = "32-2" }, /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/ship/trade/maintenance/solars) "bg" = ( /obj/structure/cable{ @@ -643,13 +637,10 @@ "jv" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/bridge_unused) @@ -699,12 +690,9 @@ /area/ship/trade/bridge_unused) "ng" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -727,7 +715,8 @@ "oq" = ( /obj/random/trash, /obj/machinery/power/apc{ - dir = 8 + dir = 8; + pixel_x = -22 }, /obj/structure/cable{ icon_state = "0-2" @@ -802,19 +791,17 @@ }, /obj/machinery/power/apc{ dir = 1; - name = "Communications APC" + name = "Communications APC"; + pixel_y = 22 }, /obj/structure/cable{ icon_state = "0-2" }, /obj/machinery/light_switch{ - pixel_x = 32 + pixel_x = 24; + dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, /obj/structure/window/reinforced{ dir = 8 }, @@ -836,7 +823,8 @@ "wc" = ( /obj/effect/floor_decal/steeldecal/steel_decals6, /obj/machinery/power/apc{ - dir = 1 + dir = 1; + pixel_y = 22 }, /obj/structure/cable{ icon_state = "0-2"; @@ -925,13 +913,10 @@ /turf/simulated/floor/bluegrid, /area/ship/trade/comms) "Db" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/airless, /area/ship/trade/bridge_unused) @@ -1010,7 +995,7 @@ /turf/simulated/floor/plating, /area/ship/trade/maintenance/solars) "GP" = ( -/turf/simulated/open, +/turf/open, /area/ship/trade/maintenance/solars) "HN" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1041,7 +1026,8 @@ icon_state = "1-2" }, /obj/machinery/light_switch{ - pixel_x = 32 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/ship/trade/command/bridge_upper) @@ -1060,7 +1046,8 @@ dir = 8 }, /obj/structure/sign/warning/fall{ - pixel_x = -32 + pixel_x = -34; + dir = 4 }, /turf/simulated/floor/plating, /area/ship/trade/maintenance/solars) @@ -1105,12 +1092,9 @@ "PJ" = ( /obj/machinery/door/firedoor, /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/command/bridge_upper) @@ -1118,13 +1102,10 @@ /turf/simulated/floor/tiled/monotile, /area/ship/trade/command/bridge_upper) "QK" = ( -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/airless, /area/ship/trade/comms) @@ -1163,12 +1144,9 @@ /area/ship/trade/comms) "SQ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -1182,13 +1160,10 @@ "Tx" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; +/obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /turf/simulated/floor/plating, /area/ship/trade/comms) @@ -1218,12 +1193,9 @@ /area/ship/trade/maintenance/solars) "Vp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = FALSE + name = "External Blast Doors" }, /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -1269,10 +1241,6 @@ /turf/simulated/floor/reinforced/airless, /area/space) "ZD" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, /obj/structure/window/reinforced{ dir = 8 }, @@ -1280,6 +1248,10 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/comms) "ZT" = ( @@ -1297,10 +1269,11 @@ dir = 4 }, /obj/machinery/light_switch{ - pixel_x = 32 + pixel_x = 24; + dir = 8 }, /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/ship/trade/command/bridge_upper) "ZU" = ( /obj/machinery/network/telecomms_hub{ diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm index a08e00d84e2..1f215350ddd 100644 --- a/maps/tradeship/tradeship.dm +++ b/maps/tradeship/tradeship.dm @@ -1,7 +1,12 @@ #if !defined(USING_MAP_DATUM) + #ifdef UNIT_TEST + #include "../../code/unit_tests/offset_tests.dm" + #endif + #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm" + #include "../../mods/content/dungeon_loot/_dungeon_loot.dme" #include "../../mods/content/mundane.dm" #include "../../mods/content/bigpharma/_bigpharma.dme" #include "../../mods/content/corporate/_corporate.dme" diff --git a/maps/tradeship/tradeship_areas.dm b/maps/tradeship/tradeship_areas.dm index 278902530e6..f5ebe695a9e 100644 --- a/maps/tradeship/tradeship_areas.dm +++ b/maps/tradeship/tradeship_areas.dm @@ -318,12 +318,12 @@ /area/turbolift/tradeship_cargo name = "Lower Cargo Bay" - base_turf = /turf/simulated/open + base_turf = /turf/open /area/turbolift/tradeship_upper name = "Upper Cargo Bay" - base_turf = /turf/simulated/open + base_turf = /turf/open /area/turbolift/tradeship_roof name = "Solar Array Access" - base_turf = /turf/simulated/open \ No newline at end of file + base_turf = /turf/open \ No newline at end of file diff --git a/maps/tradeship/tradeship_loadouts.dm b/maps/tradeship/tradeship_loadouts.dm index dfcf1ccd5df..0c352eed634 100644 --- a/maps/tradeship/tradeship_loadouts.dm +++ b/maps/tradeship/tradeship_loadouts.dm @@ -2,6 +2,7 @@ name = "guns" cost = 4 path = /obj/item/gun/projectile + uid = "gear_utility_guns" /decl/loadout_option/utility/guns/Initialize() . = ..() diff --git a/maps/utility/cargo_shuttle_tmpl.dm b/maps/utility/cargo_shuttle_tmpl.dm index f48936ac3e4..81d794dc52f 100644 --- a/maps/utility/cargo_shuttle_tmpl.dm +++ b/maps/utility/cargo_shuttle_tmpl.dm @@ -204,21 +204,21 @@ /////////////////////////////////////////////////////////////////////////////////////////// ///A dummy airtight plasticflap to hide the inside of the cargo shuttle offsite docks. -/obj/structure/plasticflaps/airtight/indestructible +/obj/structure/flaps/airtight/indestructible anchored = TRUE density = TRUE opacity = TRUE -/obj/structure/plasticflaps/airtight/indestructible/clear_airtight() +/obj/structure/flaps/airtight/indestructible/clear_airtight() return -/obj/structure/plasticflaps/airtight/indestructible/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/structure/flaps/airtight/indestructible/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) return -/obj/structure/plasticflaps/airtight/indestructible/explosion_act(severity) +/obj/structure/flaps/airtight/indestructible/explosion_act(severity) SHOULD_CALL_PARENT(FALSE) return -/obj/structure/plasticflaps/airtight/indestructible/physically_destroyed() +/obj/structure/flaps/airtight/indestructible/physically_destroyed() SHOULD_CALL_PARENT(FALSE) return -/obj/structure/plasticflaps/airtight/indestructible/attackby(var/obj/item/C, var/mob/user) +/obj/structure/flaps/airtight/indestructible/attackby(var/obj/item/C, var/mob/user) return ///Sign diff --git a/maps/utility/cargo_shuttle_tmpl.dmm b/maps/utility/cargo_shuttle_tmpl.dmm index cca010a2641..1344c9f0402 100644 --- a/maps/utility/cargo_shuttle_tmpl.dmm +++ b/maps/utility/cargo_shuttle_tmpl.dmm @@ -140,7 +140,7 @@ /turf/simulated/floor/indestructible, /area/shuttle/supply_shuttle) "v" = ( -/obj/structure/plasticflaps/airtight/indestructible, +/obj/structure/flaps/airtight/indestructible, /obj/machinery/door/blast/shutters/indestructible/supply_dock{ dir = 4 }, diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm index be94a8f49fe..2ca4280fcf6 100644 --- a/maps/~mapsystem/maps.dm +++ b/maps/~mapsystem/maps.dm @@ -68,6 +68,8 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable // second level maps from program friendly display names ("Picnic Area") to program string ids ("picnicarea") // as defined in holodeck_programs var/list/holodeck_restricted_programs = list() // as above... but EVIL! + var/list/holodeck_default_program = list() // map of program list string ids to default program string id + var/list/holodeck_off_program = list() // as above... but for being off i guess var/allowed_latejoin_spawns = list( /decl/spawnpoint/arrivals @@ -148,6 +150,11 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable ACCESS_REGION_SUPPLY = list(access_change_ids) ) var/secrets_directory + /// Network ID of the computer network used on the station if any. + var/spawn_network + + /// A list of /decl/loadout_category types which will be available for characters made on this map. Uses all categories if null. + var/list/decl/loadout_category/loadout_categories /datum/map/proc/get_lobby_track(var/exclude) var/lobby_track_type @@ -161,6 +168,15 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable /datum/map/proc/setup_map() + if(!length(loadout_categories)) + loadout_categories = list() + for(var/decl_type in decls_repository.get_decls_of_type(/decl/loadout_category)) + loadout_categories += decl_type + + for(var/loadout_category in loadout_categories) + loadout_categories -= loadout_category + loadout_categories += GET_DECL(loadout_category) + if(secrets_directory) secrets_directory = trim(lowertext(secrets_directory)) if(!length(secrets_directory)) @@ -432,27 +448,38 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable ///Loads main sites templates. Main sites template are not always saved btw, and may still be loaded when there is saved data /datum/map/proc/build_main_sites() report_progress("Loading main sites...") + load_guaranteed_sites_category(MAP_TEMPLATE_CATEGORY_MAIN_SITE) + report_progress("Finished loading main sites.") + +/** + PS13 + Builds utility z-levels needed for everything to function. + */ +/datum/map/proc/build_utility_sites() + report_progress("Loading utility sites...") + load_guaranteed_sites_category(MAP_TEMPLATE_CATEGORY_UTILITY_SITE) + report_progress("Finished loading utility sites.") + +/** + PS13 + Loads all the given sites category in weighted order + */ +/datum/map/proc/load_guaranteed_sites_category(category) var/list/sites_by_spawn_weight = list() - var/list/sites_templates = SSmapping.get_templates_by_category(MAP_TEMPLATE_CATEGORY_MAIN_SITE) - - for (var/site_name in sites_templates) - var/datum/map_template/site = sites_templates[site_name] - if((site.template_flags & TEMPLATE_FLAG_SPAWN_GUARANTEED) && site.load_new_z()) // no check for budget, but guaranteed means guaranteed - report_progress("Processed guaranteed main site [site]!") - away_site_budget -= site.get_template_cost() - continue - sites_by_spawn_weight[site] = site.get_spawn_weight() - - while (away_site_budget > 0 && sites_by_spawn_weight.len) - var/datum/map_template/selected_site = pickweight(sites_by_spawn_weight) - if (!selected_site) - break - sites_by_spawn_weight -= selected_site - var/site_cost = selected_site.get_template_cost() - if(site_cost > away_site_budget) - continue - if (selected_site.load_new_z()) - report_progress("Loaded main site [selected_site]!") - away_site_budget -= site_cost - - report_progress("Finished loading main sites, remaining budget [away_site_budget], remaining sites [sites_by_spawn_weight.len]") + var/list/sites_templates = SSmapping.get_templates_by_category(category) + + //Orders the sites by weight + for(var/site_name in sites_templates) + sites_by_spawn_weight |= sites_templates[site_name] + sites_by_spawn_weight = sortTim(sites_by_spawn_weight, /proc/cmp_template_weight_dsc, FALSE) + + //Spawn all sites in weight order + for(var/datum/map_template/selected_site in sites_by_spawn_weight) + if(selected_site.load_new_z()) + report_progress("Loaded [category] site [selected_site]!") + +/** +Compare the spawn weight between 2 templates. + */ +/proc/cmp_template_weight_dsc(datum/map_template/a, datum/map_template/b) + return cmp_numeric_dsc(a.get_spawn_weight(), b.get_spawn_weight()) \ No newline at end of file diff --git a/maps/~mapsystem/maps_antagonism.dm b/maps/~mapsystem/maps_antagonism.dm index 77db15caaf4..eb88942fd84 100644 --- a/maps/~mapsystem/maps_antagonism.dm +++ b/maps/~mapsystem/maps_antagonism.dm @@ -23,7 +23,7 @@ var/list/potential_special_theft_targets = list( "nuclear gun" = /obj/item/gun/energy/gun/nuclear, - "diamond drill" = /obj/item/pickaxe/diamonddrill, + "diamond drill" = /obj/item/tool/drill/diamond, "bag of holding" = /obj/item/storage/backpack/holding, "hyper-capacity cell" = /obj/item/cell/hyper, "10 diamonds" = list(/obj/item/stack/material/gemstone, 10, /decl/material/solid/gemstone/diamond), diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm index 52274967a4c..de021ddc438 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm @@ -318,7 +318,6 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/tiled, @@ -347,7 +346,6 @@ /obj/machinery/door/window/eastright, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -363,7 +361,6 @@ /obj/machinery/door/window/westleft, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -402,7 +399,7 @@ /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/hygiene/shower{ dir = 4 @@ -489,7 +486,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/tiled, @@ -511,7 +507,6 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -533,7 +528,7 @@ /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/hygiene/shower{ dir = 4 @@ -676,7 +671,6 @@ /obj/abstract/landmark/corpse/lar_maria/test_subject, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -1042,7 +1036,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -1084,7 +1077,6 @@ /obj/effect/decal/cleanable/blood, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /turf/simulated/floor/plating, @@ -1104,7 +1096,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /turf/simulated/floor/plating, @@ -1125,7 +1116,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /turf/simulated/floor/plating, @@ -1262,7 +1252,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /turf/simulated/floor/plating, @@ -1280,7 +1269,6 @@ /obj/effect/decal/cleanable/blood, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /turf/simulated/floor/plating, @@ -1397,7 +1385,6 @@ /obj/effect/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /turf/simulated/floor/plating, @@ -2031,7 +2018,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/structure/cable{ icon_state = "1-8" @@ -2044,7 +2031,7 @@ }, /obj/structure/window/reinforced{ dir = 1; - health = 1e+006 + current_health = 1e+006 }, /obj/machinery/door/window/eastright, /turf/simulated/floor/tiled/white, @@ -2104,7 +2091,6 @@ /obj/effect/decal/cleanable/blood, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /obj/structure/cable{ @@ -2283,7 +2269,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /obj/structure/cable{ @@ -2319,7 +2304,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "CellsBD" }, /obj/structure/cable{ @@ -2485,7 +2469,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /turf/simulated/floor/tiled, @@ -2628,7 +2611,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /turf/simulated/floor/tiled, @@ -2806,12 +2788,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_ld_BD" }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_dock_BD" }, /turf/simulated/floor/plating, @@ -2863,7 +2843,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_dock_BD" }, /turf/simulated/floor/tiled, @@ -2909,7 +2888,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /turf/simulated/floor/tiled, @@ -3031,7 +3009,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /turf/simulated/floor/tiled, @@ -3138,7 +3115,6 @@ }, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /obj/structure/cable{ @@ -3297,7 +3273,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ dir = 2; - icon_state = "pdoor0"; id_tag = "VirAccessBD" }, /turf/simulated/floor/tiled, @@ -3433,7 +3408,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "Cells_dock_BD" }, /turf/simulated/floor/plating, diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm index d0e1dcab049..bed2f717e05 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm @@ -812,7 +812,7 @@ /area/lar_maria/library) "cs" = ( /obj/structure/bookcase, -/obj/item/book/manual/stasis, +/obj/item/book/fluff/stasis, /turf/simulated/floor/tiled, /area/lar_maria/library) "cu" = ( @@ -831,8 +831,8 @@ /area/lar_maria/library) "cy" = ( /obj/structure/bookcase, -/obj/item/book/manual/anomaly_spectroscopy, -/obj/item/book/manual/anomaly_testing, +/obj/item/book/fluff/anomaly_spectroscopy, +/obj/item/book/fluff/anomaly_testing, /turf/simulated/floor/tiled, /area/lar_maria/library) "cz" = ( @@ -2100,7 +2100,7 @@ /turf/simulated/floor/plating, /area/lar_maria/hallway) "gD" = ( -/turf/simulated/open, +/turf/open, /area/lar_maria/hallway) "gE" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -2193,8 +2193,8 @@ /area/lar_maria/mess_hall) "gR" = ( /obj/structure/table, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/lar_maria/mess_hall) "gS" = ( @@ -2265,7 +2265,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/open, +/turf/open, /area/lar_maria/hallway) "hf" = ( /obj/structure/window/basic{ @@ -2286,7 +2286,7 @@ dir = 4; icon_state = "tube1" }, -/turf/simulated/open, +/turf/open, /area/lar_maria/hallway) "hi" = ( /obj/machinery/power/apc{ @@ -2309,7 +2309,7 @@ "hk" = ( /obj/structure/table/marble, /obj/machinery/door/firedoor, -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/tiled/white, /area/lar_maria/mess_hall) "hl" = ( @@ -2603,14 +2603,14 @@ /turf/simulated/floor/tiled, /area/lar_maria/mess_hall) "ic" = ( -/obj/item/kitchen/utensil/fork, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/lar_maria/mess_hall) "id" = ( /obj/structure/table/marble, /obj/machinery/door/firedoor, /obj/item/chems/condiment/flour, -/obj/item/storage/fancy/egg_box, +/obj/item/storage/box/fancy/egg_box, /turf/simulated/floor/tiled/white, /area/lar_maria/mess_hall) "ie" = ( @@ -2776,13 +2776,13 @@ /area/lar_maria/mess_hall) "iB" = ( /obj/structure/table, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/lar_maria/mess_hall) "iC" = ( /obj/structure/table/marble, /obj/machinery/door/firedoor, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled/white, /area/lar_maria/mess_hall) "iD" = ( @@ -2941,8 +2941,8 @@ /area/lar_maria/mess_hall) "iZ" = ( /obj/structure/table/marble, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /turf/simulated/floor/tiled/white, /area/lar_maria/mess_hall) "ja" = ( @@ -3077,7 +3077,7 @@ /obj/structure/cable{ icon_state = "32-1" }, -/turf/simulated/open, +/turf/open, /area/lar_maria/solar_control) "nb" = ( /obj/structure/tank_rack/oxygen, diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria.dm b/mods/content/corporate/away_sites/lar_maria/lar_maria.dm index 753bfa58244..883c8ee9290 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria.dm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria.dm @@ -29,10 +29,10 @@ environment_smash = 1 faction = "lar_maria" status_flags = CANPUSH - speak = list("Die!", "Fresh meat!", "Hurr!", "You said help will come!", "I did nothing!", "Eat my fist!", "One for the road!") - speak_chance = 50 - emote_hear = list("roars", "giggles", "breathes loudly", "mumbles", "yells something unintelligible") - emote_see = list("cries", "grins insanely", "itches fiercly", "scratches his face", "shakes his fists above his head") + speak_chance = 25 + emote_speech = list("Die!", "Fresh meat!", "Hurr!", "You said help will come!", "I did nothing!", "Eat my fist!", "One for the road!") + emote_hear = list("roars", "giggles", "breathes loudly", "mumbles", "yells something unintelligible") + emote_see = list("cries", "grins insanely", "itches fiercly", "scratches his face", "shakes his fists above his head") turns_per_move = 5 speed = 8 can_escape = TRUE @@ -42,20 +42,20 @@ var/obj/abstract/landmark/corpse/lar_maria/corpse = null var/weapon = null -/mob/living/simple_animal/hostile/lar_maria/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse (src.loc) - if (weapon) - new weapon(src.loc) - visible_message("Small shining spores float away from dying [src]!") - qdel(src) +/mob/living/simple_animal/hostile/lar_maria/death(gibbed) + . = ..() + if(. && !gibbed) + if(corpse) + new corpse (src.loc) + if (weapon) + new weapon(src.loc) + visible_message(SPAN_WARNING("Small shining spores float away from the dying [name]!")) + qdel(src) /mob/living/simple_animal/hostile/lar_maria/test_subject name = "test subject" desc = "Sick, filthy, angry and probably crazy human in an orange robe." - maxHealth = 40 - health = 40 + max_health = 40 corpse = /obj/abstract/landmark/corpse/lar_maria/test_subject icon = 'mods/content/corporate/away_sites/lar_maria/lar_maria_test_subject.dmi' @@ -88,8 +88,7 @@ /mob/living/simple_animal/hostile/lar_maria/guard//angry guards armed with batons and shotguns. Still bite name = "security" desc = "Guard dressed at Zeng-Hu Pharmaceuticals uniform." - maxHealth = 60 - health = 60 + max_health = 60 natural_weapon = /obj/item/baton weapon = /obj/item/baton corpse = /obj/abstract/landmark/corpse/lar_maria/zhp_guard @@ -124,8 +123,7 @@ name = "virologist" desc = "Virologist dressed at Zeng-Hu Pharmaceuticals uniform." icon = 'mods/content/corporate/away_sites/lar_maria/lar_maria_virologist_m.dmi' - maxHealth = 50 - health = 50 + max_health = 50 corpse = /obj/abstract/landmark/corpse/lar_maria/virologist /obj/abstract/landmark/corpse/lar_maria/virologist diff --git a/mods/content/corporate/clothing/rigs/ert.dm b/mods/content/corporate/clothing/rigs/ert.dm index 05ff41016fe..091a660e927 100644 --- a/mods/content/corporate/clothing/rigs/ert.dm +++ b/mods/content/corporate/clothing/rigs/ert.dm @@ -52,7 +52,6 @@ ) /obj/item/clothing/head/helmet/space/rig/ert - light_overlay = "helmet_light_dual" camera = /obj/machinery/camera/network/ert icon = 'mods/content/corporate/icons/rigs/commander/helmet.dmi' /obj/item/clothing/suit/space/rig/ert diff --git a/mods/content/corporate/clothing/suit/captain.dm b/mods/content/corporate/clothing/suit/captain.dm index e429886168d..ca9e02c84c2 100644 --- a/mods/content/corporate/clothing/suit/captain.dm +++ b/mods/content/corporate/clothing/suit/captain.dm @@ -8,7 +8,7 @@ permeability_coefficient = 0.02 max_pressure_protection = VOIDSUIT_MAX_PRESSURE min_pressure_protection = 0 - body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS + body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_TAIL allowed = list(/obj/item/tank/emergency, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/baton,/obj/item/handcuffs) armor = list( ARMOR_MELEE = ARMOR_MELEE_MAJOR, diff --git a/mods/content/corporate/datum/ai_laws.dm b/mods/content/corporate/datum/ai_laws.dm index 9029327ae00..380101d48cc 100644 --- a/mods/content/corporate/datum/ai_laws.dm +++ b/mods/content/corporate/datum/ai_laws.dm @@ -1,7 +1,7 @@ /obj/item/aiModule/nanotrasen // -- TLE name = "'Corporate Default' Core AI Module" desc = "A 'Corporate Default' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/nanotrasen /datum/ai_laws/nanotrasen @@ -18,7 +18,7 @@ /obj/item/aiModule/corp name = "\improper 'Corporate' core AI module" desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/corporate /datum/ai_laws/corporate @@ -51,5 +51,5 @@ /obj/item/aiModule/dais name = "\improper 'DAIS Experimental' core AI module" desc = "A 'DAIS Experimental' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':4}" + origin_tech = @'{"programming":4}' laws = new/datum/ai_laws/dais() diff --git a/mods/content/corporate/datum/antagonists/commando.dm b/mods/content/corporate/datum/antagonists/commando.dm index e99fa97cedd..c8069877986 100644 --- a/mods/content/corporate/datum/antagonists/commando.dm +++ b/mods/content/corporate/datum/antagonists/commando.dm @@ -29,14 +29,13 @@ ) /obj/item/encryptionkey/hacked - icon_state = "cypherkey" can_decrypt = list(access_hacked) - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' /obj/item/encryptionkey/hacked/Initialize(ml, material_key) . = ..() can_decrypt |= get_all_station_access() /obj/item/radio/headset/hacked - origin_tech = "{'esoteric':3}" + origin_tech = @'{"esoteric":3}' encryption_keys = list(/obj/item/encryptionkey/hacked) diff --git a/mods/content/corporate/datum/loadout.dm b/mods/content/corporate/datum/loadout.dm index 096b799893c..b258500a92d 100644 --- a/mods/content/corporate/datum/loadout.dm +++ b/mods/content/corporate/datum/loadout.dm @@ -3,6 +3,7 @@ description = "A medal or ribbon awarded to corporate personnel for significant accomplishments." path = /obj/item/clothing/accessory/medal cost = 8 + uid = "gear_accessory_corpaward" /decl/loadout_option/accessory/ntaward/get_gear_tweak_options() . = ..() @@ -16,15 +17,18 @@ /decl/loadout_option/accessory/armband_nt name = "corporate armband" path = /obj/item/clothing/accessory/armband/whitegreen + uid = "gear_accessory_corparmband" /decl/loadout_option/suit/labcoat_corp name = "labcoat, corporate colors" path = /obj/item/clothing/suit/storage/toggle/labcoat/science loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_suit_corplabcoat" /decl/loadout_option/uniform/corporate name = "corporate uniform selection" path = /obj/item/clothing/under + uid = "gear_under_corpuniform" /decl/loadout_option/uniform/corporate/get_gear_tweak_options() . = ..() @@ -51,29 +55,35 @@ name = "corporate colours, senior researcher" path = /obj/item/clothing/under/executive loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_corpexec" /decl/loadout_option/uniform/corp_overalls name = "corporate colours, coveralls" path = /obj/item/clothing/under/work loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_corpcoveralls" /decl/loadout_option/uniform/corp_flight name = "corporate colours, flight suit" path = /obj/item/clothing/under/pilot loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_corpflight" /decl/loadout_option/uniform/corp_exec_jacket name = "corporate colours, liason suit" path = /obj/item/clothing/under/suit_jacket/corp loadout_flags = GEAR_HAS_TYPE_SELECTION + uid = "gear_under_corpexecjacket" /decl/loadout_option/suit/nanotrasen_poncho name = "poncho, NanoTrasen" path = /obj/item/clothing/suit/poncho/roles/science/nanotrasen + uid = "gear_suit_corpponcho" /decl/loadout_option/suit/corp_jacket name = "corporate jacket selection" path = /obj/item/clothing/suit + uid = "gear_suit_corpjacket" /decl/loadout_option/suit/corp_jacket/get_gear_tweak_options() . = ..() @@ -86,14 +96,17 @@ /decl/loadout_option/suit/science_poncho name = "poncho, science" path = /obj/item/clothing/suit/poncho/roles/science + uid = "gear_suit_corpponcho_science" /decl/loadout_option/suit/hoodie_nt name = "hoodie, NanoTrasen" path = /obj/item/clothing/suit/storage/toggle/hoodie/nt + uid = "gear_suit_corphoodie" /decl/loadout_option/suit/wintercoat_dais name = "winter coat, DAIS" path = /obj/item/clothing/suit/storage/toggle/wintercoat/dais + uid = "gear_suit_corpcoat_dais" /decl/loadout_option/suit/leather/get_gear_tweak_options() . = ..() diff --git a/mods/content/corporate/datum/robolimbs.dm b/mods/content/corporate/datum/robolimbs.dm index 841249d2836..2b72d5a2089 100644 --- a/mods/content/corporate/datum/robolimbs.dm +++ b/mods/content/corporate/datum/robolimbs.dm @@ -82,7 +82,7 @@ name = "Vey-Med (Feminine)" desc = "This high quality limb is nearly indistinguishable from an organic one." icon_base = 'mods/content/corporate/icons/cyberlimbs/veymed/veymed_female.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_NORMAL | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + appearance_flags = HAS_SKIN_TONE_NORMAL | HAS_UNDERWEAR | HAS_EYE_COLOR body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS bodytype_category = BODYTYPE_HUMANOID // todo: add synthflesh material? diff --git a/mods/content/corporate/icons/lunchbox_dais.dmi b/mods/content/corporate/icons/lunchbox_dais.dmi new file mode 100644 index 00000000000..ce2477fef72 Binary files /dev/null and b/mods/content/corporate/icons/lunchbox_dais.dmi differ diff --git a/mods/content/corporate/icons/lunchbox_nanotrasen.dmi b/mods/content/corporate/icons/lunchbox_nanotrasen.dmi new file mode 100644 index 00000000000..1a315285862 Binary files /dev/null and b/mods/content/corporate/icons/lunchbox_nanotrasen.dmi differ diff --git a/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi b/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi index 4a9df55f933..e312d83b55b 100644 Binary files a/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi and b/mods/content/corporate/icons/rigs/asset_protection/helmet.dmi differ diff --git a/mods/content/corporate/icons/rigs/commander/helmet.dmi b/mods/content/corporate/icons/rigs/commander/helmet.dmi index 99bad70b899..896195fe1a8 100644 Binary files a/mods/content/corporate/icons/rigs/commander/helmet.dmi and b/mods/content/corporate/icons/rigs/commander/helmet.dmi differ diff --git a/mods/content/corporate/icons/rigs/engineer/helmet.dmi b/mods/content/corporate/icons/rigs/engineer/helmet.dmi index e7559d0a6a4..0c63f505f2f 100644 Binary files a/mods/content/corporate/icons/rigs/engineer/helmet.dmi and b/mods/content/corporate/icons/rigs/engineer/helmet.dmi differ diff --git a/mods/content/corporate/icons/rigs/janitor/helmet.dmi b/mods/content/corporate/icons/rigs/janitor/helmet.dmi index ab136668772..1f3b3bdc7a6 100644 Binary files a/mods/content/corporate/icons/rigs/janitor/helmet.dmi and b/mods/content/corporate/icons/rigs/janitor/helmet.dmi differ diff --git a/mods/content/corporate/icons/rigs/medic/helmet.dmi b/mods/content/corporate/icons/rigs/medic/helmet.dmi index 2a8c3f0d258..9d3aa70b3cf 100644 Binary files a/mods/content/corporate/icons/rigs/medic/helmet.dmi and b/mods/content/corporate/icons/rigs/medic/helmet.dmi differ diff --git a/mods/content/corporate/icons/rigs/security/helmet.dmi b/mods/content/corporate/icons/rigs/security/helmet.dmi index f31f3f84cb0..df061882fbf 100644 Binary files a/mods/content/corporate/icons/rigs/security/helmet.dmi and b/mods/content/corporate/icons/rigs/security/helmet.dmi differ diff --git a/mods/content/corporate/items/clutter.dm b/mods/content/corporate/items/clutter.dm index f81ae0c829a..2a3f6e2772d 100644 --- a/mods/content/corporate/items/clutter.dm +++ b/mods/content/corporate/items/clutter.dm @@ -6,14 +6,12 @@ /obj/item/storage/lunchbox/dais name = "\improper DAIS brand lunchbox" - icon_state = "lunchbox_dais" - item_state = "toolbox_blue" + icon = 'mods/content/corporate/icons/lunchbox_dais.dmi' desc = "A little lunchbox. This one is branded with the Deimos Advanced Information Systems logo!" /obj/item/storage/lunchbox/nt name = "\improper NanoTrasen brand lunchbox" - icon_state = "lunchbox_nanotrasen" - item_state = "toolbox_blue" + icon = 'mods/content/corporate/icons/lunchbox_nanotrasen.dmi' desc = "A little lunchbox. This one is branded with the NanoTrasen logo!" /obj/item/storage/lunchbox/nt/filled diff --git a/mods/content/corporate/items/documents.dm b/mods/content/corporate/items/documents.dm index 13cd7e1ded3..d722d5c411a 100644 --- a/mods/content/corporate/items/documents.dm +++ b/mods/content/corporate/items/documents.dm @@ -4,107 +4,111 @@ description_antag = "A conglomerate of powerful corporations seems to be wanting to create weaponized xenobiological species. Probably as a form of WMD, by your best guess." icon_state = "docs_verified" -/obj/item/book/manual/nt_regs +/obj/item/book/fluff/nt_regs name = "Corporate Regulations" desc = "A set of corporate guidelines for employees of a megacorporation." icon_state = "booknanoregs" author = "Employee Materials" title = "Corporate Regulations" - url = "Corporate_Regulations" + fluff_text = "The book is empty..." /obj/item/book/union_charter name = "\improper Union Charter" + unique = TRUE title = "Union Charter of Workplace Rights" author = "Corporate Union" - dat = {"Corporate Union Charter of Workplace Rights - -

    0. Summary

    -
    -

    As a union representative, you are required to uphold the interests of contracted workers on your station or vessel. You are empowered to inspect workplaces and instigate cessation of contracted work when on green alert, with diminishing powers during a state of emergency. You do not have authority or jurisdiction over government or military workers, or any workers who are not card-carrying signatories to this Charter.

    -

    1. Introduction

    -

    This Charter of Rights sets out the rights and responsibilities of all workplace parties in the provision of decent and fair health, safety, compensation and rehabilitation systems and practices within affiliated workplaces. Regardless of jurisdiction, changes to occupational health and safety, compensation and rehabilitation law must not result in a diminution of the rights and entitlements of any worker.

    -

    This Charter does not apply to staff who are not signatory to the Solar Employee General Award, or are signatory to other workplace regulatory documents such as the internal protocols of your local legislative body. Union representatives must take care to ensure that their operations on mixed jurisdiction stations and vessels are restricted to those areas that have a union worker, contractor or labourer presence.

    -

    Workers must not be adversely affected by any employer moving between jurisdictions in relation to their OHS and workers compensation entitlements. Any proposed move between jurisdictions will only occur following genuine consultation and agreement with workers and their representatives and a process of public review, including public tribunal hearings.

    -

    Consistent with OHS and Worker Compensation Policy and interstellar standards, Solar law must ensure healthy and safe workplaces and a compensation and rehabilitation system which ensures that no worker is disadvantaged should they be injured at work.

    -

    All workers have the right to join a genuine trade union. Union organised workplaces are safer workplaces.

    -

    2. Security Levels

    -
    -

    On stations or vessels employing the standard Security Alert Level protocol, the following conditions apply:

    -
      -
    • On green alert, all particulars of this charter are considered valid and applicable.
    • -
    • Above green alert, union representatives are not permitted to conduct workplace inspections and are advised, but not required, to cease all union meetings or strike proceedings.
    • -
    • On red alert or above, this charter is suspended, and all union representatives and workers must follow directives from personnel authorized under red alert protocol.
    • -
    -

    3. Representation

    -
    -

    Every worker has the right to be represented on health, safety, compensation, rehabilitation and return to work issues, by their elected Union Representative and their union. Every worker has the right to elect health and safety representatives.

    -

    Unions have the right to:

    -
      -
    • Enter workplaces on health and safety issues;
    • -
    • Investigate breaches of health and safety laws;
    • -
    • Represent members and prospective members;
    • -
    • Initiate investigations and prosecutions for occupational health and safety breaches;
    • -
    • Initiate cessation of work in unsafe areas; and
    • -
    • Access all relevant information and reports.
    • -
    -

    Union Representatives have the right to:

    -
      -
    • Be democratically elected by a process determined by workers, in conjunction with their union;
    • -
    • Utilise legal rights and powers to represent workers on health and safety matters;
    • -
    • Inspect the workplace, within the agreed-upon confines previously noted;
    • -
    • Access relevant information and be informed of all incidents;
    • -
    • Be consulted by the employer before workplace changes occur that may affect health and safety;
    • -
    • Issue notices when breaches are detected;
    • -
    • Call in government inspectors;
    • -
    • Direct workers to cease work where there is a belief of immediate risk to health and safety;
    • -
    • Seek resolution of health and safety issues;
    • -
    • Perform all OHS activities on paid time and have adequate facilities;
    • -
    • Be assisted by any person at any time in the execution of union duties;
    • -
    • Be protected by law from discrimination, harassment, bullying, intimidation and prosecution;
    • -
    • Appeal any decision of a regulator or court regarding any health and safety, compensation or rehabilitation matter.
    • -
    -

    4. Workers

    -
    -

    Every worker has the right to: -

      -
    • A safe and healthy workplace;
    • -
    • Travel to and from work sites in safety and with appropriate protections;
    • -
    • Return home from work free of injury or illness;
    • -
    • Enjoy the highest level of protection, representation, compensation and rehabilitation, regardless of the jurisdiction within which they work;
    • -
    • Take collective action over any health and safety matter, including the right to cease unsafe or unhealthy work; and
    • -
    • Discuss, negotiate and be consulted and involved in all issues affecting their health, safety and welfare.
    • -
    -

    All workers (or prospective workers), including health and safety representatives, will be protected by law from discrimination, harassment, bullying or detriment to their employment because they have raised a health and safety issue, lodged a compensation claim or been involved in consultation on workplace health and safety matters.

    -

    4. Employer Responsibilities

    -
    -

    Persons who control, manage or own workplaces have an absolute duty of care without limitation to provide and maintain safe and healthy work environments. Employers will not shift jurisdictions to attempt to avoid their OHS and workers compensation responsibilities and obligations. Employers are subject to all the obligations and responsibilities contained within this Charter.

    -

    5. Compensation

    -
    -

    Following a physical or psychological injury, all workers have the right to a fair, just and equitable compensation system, which promotes the best medical and like support, the most effective rehabilitation for injured workers and facilitates a safe return to work that offers genuine job security. Workers' compensation standards are to:

    -
  • Be available to all members of the workforce;
  • -
  • Provide compensation for all injuries that arise from travel to, from or during work including and during recess breaks;
  • -
  • Be available upon the death of a worker and for dependants of that worker;
  • -
  • Be based on the 100% replacement of loss of income;
  • -
  • Provide total cost of medical rehabilitation and other related expenses;
  • -
  • Provide lump sum compensation for permanent disability;
  • -
  • Ensure common law rights;
  • -
  • Support rehabilitation and return to work;
  • -
  • Ensure that workers are entitled to timely and effective claim determination and dispute resolution processes;
  • -
  • Ensure the worker has access to the doctor of their choice; and
  • -
  • Not be eroded by companies seeking to self-insure in order to obtain lower OHS and worker's compensation entitlements for workers.
  • - -

    6. Rehabilitation

    -
    -

    All workers have the right to return to safe, suitable, meaningful and sustainable work, following the provision of quality rehabilitation services, commensurate to need. Rehabilitation will include the right to:

    -
      -
    • Union representation;
    • -
    • Fair, equitable, high quality, appropriate, effective and timely rehabilitation plans and services;
    • -
    • Consultation about all aspects of rehabilitation;
    • -
    • All documentation and information relating to their rehabilitation;
    • -
    • Privacy in the management of all records and information; and
    • -
    • Personal choice of medical provider and rehabilitation service, where facilities permit.
    • -
    - + dat = {" + + Corporate Union Charter of Workplace Rights + + +

    0. Summary

    +
    +

    As a union representative, you are required to uphold the interests of contracted workers on your station or vessel. You are empowered to inspect workplaces and instigate cessation of contracted work when on green alert, with diminishing powers during a state of emergency. You do not have authority or jurisdiction over government or military workers, or any workers who are not card-carrying signatories to this Charter.

    +

    1. Introduction

    +

    This Charter of Rights sets out the rights and responsibilities of all workplace parties in the provision of decent and fair health, safety, compensation and rehabilitation systems and practices within affiliated workplaces. Regardless of jurisdiction, changes to occupational health and safety, compensation and rehabilitation law must not result in a diminution of the rights and entitlements of any worker.

    +

    This Charter does not apply to staff who are not signatory to the Solar Employee General Award, or are signatory to other workplace regulatory documents such as the internal protocols of your local legislative body. Union representatives must take care to ensure that their operations on mixed jurisdiction stations and vessels are restricted to those areas that have a union worker, contractor or labourer presence.

    +

    Workers must not be adversely affected by any employer moving between jurisdictions in relation to their OHS and workers compensation entitlements. Any proposed move between jurisdictions will only occur following genuine consultation and agreement with workers and their representatives and a process of public review, including public tribunal hearings.

    +

    Consistent with OHS and Worker Compensation Policy and interstellar standards, Solar law must ensure healthy and safe workplaces and a compensation and rehabilitation system which ensures that no worker is disadvantaged should they be injured at work.

    +

    All workers have the right to join a genuine trade union. Union organised workplaces are safer workplaces.

    +

    2. Security Levels

    +
    +

    On stations or vessels employing the standard Security Alert Level protocol, the following conditions apply:

    +
      +
    • On green alert, all particulars of this charter are considered valid and applicable.
    • +
    • Above green alert, union representatives are not permitted to conduct workplace inspections and are advised, but not required, to cease all union meetings or strike proceedings.
    • +
    • On red alert or above, this charter is suspended, and all union representatives and workers must follow directives from personnel authorized under red alert protocol.
    • +
    +

    3. Representation

    +
    +

    Every worker has the right to be represented on health, safety, compensation, rehabilitation and return to work issues, by their elected Union Representative and their union. Every worker has the right to elect health and safety representatives.

    +

    Unions have the right to:

    +
      +
    • Enter workplaces on health and safety issues;
    • +
    • Investigate breaches of health and safety laws;
    • +
    • Represent members and prospective members;
    • +
    • Initiate investigations and prosecutions for occupational health and safety breaches;
    • +
    • Initiate cessation of work in unsafe areas; and
    • +
    • Access all relevant information and reports.
    • +
    +

    Union Representatives have the right to:

    +
      +
    • Be democratically elected by a process determined by workers, in conjunction with their union;
    • +
    • Utilise legal rights and powers to represent workers on health and safety matters;
    • +
    • Inspect the workplace, within the agreed-upon confines previously noted;
    • +
    • Access relevant information and be informed of all incidents;
    • +
    • Be consulted by the employer before workplace changes occur that may affect health and safety;
    • +
    • Issue notices when breaches are detected;
    • +
    • Call in government inspectors;
    • +
    • Direct workers to cease work where there is a belief of immediate risk to health and safety;
    • +
    • Seek resolution of health and safety issues;
    • +
    • Perform all OHS activities on paid time and have adequate facilities;
    • +
    • Be assisted by any person at any time in the execution of union duties;
    • +
    • Be protected by law from discrimination, harassment, bullying, intimidation and prosecution;
    • +
    • Appeal any decision of a regulator or court regarding any health and safety, compensation or rehabilitation matter.
    • +
    +

    4. Workers

    +
    +

    Every worker has the right to: +

      +
    • A safe and healthy workplace;
    • +
    • Travel to and from work sites in safety and with appropriate protections;
    • +
    • Return home from work free of injury or illness;
    • +
    • Enjoy the highest level of protection, representation, compensation and rehabilitation, regardless of the jurisdiction within which they work;
    • +
    • Take collective action over any health and safety matter, including the right to cease unsafe or unhealthy work; and
    • +
    • Discuss, negotiate and be consulted and involved in all issues affecting their health, safety and welfare.
    • +
    +

    All workers (or prospective workers), including health and safety representatives, will be protected by law from discrimination, harassment, bullying or detriment to their employment because they have raised a health and safety issue, lodged a compensation claim or been involved in consultation on workplace health and safety matters.

    +

    4. Employer Responsibilities

    +
    +

    Persons who control, manage or own workplaces have an absolute duty of care without limitation to provide and maintain safe and healthy work environments. Employers will not shift jurisdictions to attempt to avoid their OHS and workers compensation responsibilities and obligations. Employers are subject to all the obligations and responsibilities contained within this Charter.

    +

    5. Compensation

    +
    +

    Following a physical or psychological injury, all workers have the right to a fair, just and equitable compensation system, which promotes the best medical and like support, the most effective rehabilitation for injured workers and facilitates a safe return to work that offers genuine job security. Workers' compensation standards are to:

    +
  • Be available to all members of the workforce;
  • +
  • Provide compensation for all injuries that arise from travel to, from or during work including and during recess breaks;
  • +
  • Be available upon the death of a worker and for dependants of that worker;
  • +
  • Be based on the 100% replacement of loss of income;
  • +
  • Provide total cost of medical rehabilitation and other related expenses;
  • +
  • Provide lump sum compensation for permanent disability;
  • +
  • Ensure common law rights;
  • +
  • Support rehabilitation and return to work;
  • +
  • Ensure that workers are entitled to timely and effective claim determination and dispute resolution processes;
  • +
  • Ensure the worker has access to the doctor of their choice; and
  • +
  • Not be eroded by companies seeking to self-insure in order to obtain lower OHS and worker's compensation entitlements for workers.
  • + +

    6. Rehabilitation

    +
    +

    All workers have the right to return to safe, suitable, meaningful and sustainable work, following the provision of quality rehabilitation services, commensurate to need. Rehabilitation will include the right to:

    +
      +
    • Union representation;
    • +
    • Fair, equitable, high quality, appropriate, effective and timely rehabilitation plans and services;
    • +
    • Consultation about all aspects of rehabilitation;
    • +
    • All documentation and information relating to their rehabilitation;
    • +
    • Privacy in the management of all records and information; and
    • +
    • Personal choice of medical provider and rehabilitation service, where facilities permit.
    • +
    + "} /obj/item/folder/nt diff --git a/mods/content/corporate/items/wristcomp.dm b/mods/content/corporate/items/wristcomp.dm index 028062b33a6..5f9cc48611d 100644 --- a/mods/content/corporate/items/wristcomp.dm +++ b/mods/content/corporate/items/wristcomp.dm @@ -8,7 +8,7 @@ color = COLOR_GUNMETAL light_color = LIGHT_COLOR_GREEN -/obj/item/modular_computer/pda/wrist/adjust_mob_overlay(var/mob/living/user_mob, var/bodytype, var/image/overlay, var/slot, var/bodypart) +/obj/item/modular_computer/pda/wrist/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) var/datum/extension/interactive/os/os = get_extension(src, /datum/extension/interactive/os) var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly) diff --git a/mods/content/dungeon_loot/_dungeon_loot.dm b/mods/content/dungeon_loot/_dungeon_loot.dm new file mode 100644 index 00000000000..176ce11422b --- /dev/null +++ b/mods/content/dungeon_loot/_dungeon_loot.dm @@ -0,0 +1,20 @@ +/* +This is pulled directly from Virgo. Credits to them. Modifications made for Lighthouse by Carl. +The below text is holdover from Virgo. + + +- - - - - - - - - - - +Basically, each player key gets one chance per loot pile to get them phat lewt. +When they click the pile, after a delay, they 'roll' if they get anything, using chance_nothing. If they're unlucky, they get nothing. +Otherwise, they roll up to two times, first a roll for rare things, using chance_rare. If they succeed, they get something quite good. +If that roll fails, they do one final roll, using chance_uncommon. If they succeed, they get something fairly useful. +If that fails again, they walk away with some common junk. +The same player cannot roll again, however other players can. This has two benefits. The first benefit is that someone raiding all of +maintenance will not deprive other people from a shot at loot, and that for the surface variants, it quietly encourages bringing along +buddies, to get more chances at getting cool things instead of someone going solo to hoard all the stuff. +Loot piles can be depleted, if loot_depleted is turned on. Note that players who searched the pile already won't deplete the loot furthers when searching again. +*/ + +/decl/modpack/dungeon_loot + name = "Dungeon Loot" + dreams = list("Packrats") diff --git a/mods/content/dungeon_loot/_dungeon_loot.dme b/mods/content/dungeon_loot/_dungeon_loot.dme new file mode 100644 index 00000000000..a45ad415641 --- /dev/null +++ b/mods/content/dungeon_loot/_dungeon_loot.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_DUNGEON_LOOT +#define MODPACK_DUNGEON_LOOT +// BEGIN INCLUDE +#include "_dungeon_loot.dm" +#include "loot_pile.dm" +#include "subtypes/exosuit.dm" +#include "subtypes/maint.dm" +#include "subtypes/surface.dm" +#endif diff --git a/mods/content/dungeon_loot/icons/loot_piles.dmi b/mods/content/dungeon_loot/icons/loot_piles.dmi new file mode 100644 index 00000000000..784f9e47b23 Binary files /dev/null and b/mods/content/dungeon_loot/icons/loot_piles.dmi differ diff --git a/mods/content/dungeon_loot/loot_pile.dm b/mods/content/dungeon_loot/loot_pile.dm new file mode 100644 index 00000000000..fc8dff5808a --- /dev/null +++ b/mods/content/dungeon_loot/loot_pile.dm @@ -0,0 +1,131 @@ +/obj/structure/loot_pile + abstract_type = /obj/structure/loot_pile + name = "base loot pile" + desc = "If you can read me, this is bugged." + icon = 'mods/content/dungeon_loot/icons/loot_piles.dmi' + icon_state = "randompile" + density = FALSE + anchored = TRUE + + /// Keys that have searched this loot pile, with values of searched time. + var/list/searched_by + /// If true, the same person can loot multiple times. Mostly for debugging. + var/allow_multiple_looting = FALSE + /// Used so you can't spamclick to loot. + var/busy = FALSE + /// Unlucky people might need to loot multiple spots to find things. + var/chance_nothing = 0 + /// Probability of pulling from the uncommon_loot list. + var/chance_uncommon = 10 + /// Ditto, but for rare_loot list. + var/chance_rare = 1 + /// If true, loot piles can be 'depleted' after a certain number of searches by different players, where no more loot can be obtained. + var/loot_depletion = FALSE + /// When this reaches zero, and loot_depleted is true, you can't obtain anymore loot. + var/loot_left = 0 + /// If true, and if the loot gets depleted as above, the pile is deleted. + var/delete_on_depletion = FALSE + +/obj/structure/loot_pile/Initialize() + var/list/icon_states_to_use = get_icon_states_to_use() + if(icon_states_to_use && icon_states_to_use.len) + icon_state = pick(icon_states_to_use) + . = ..() + +/obj/structure/loot_pile/attack_ai(var/mob/user) + if(isrobot(user) && Adjacent(user)) + return attack_hand(user) + return ..() + +/obj/structure/loot_pile/attack_hand(mob/user) + + if(!isliving(user)) + return ..() + + var/mob/living/L = user + if(busy) + to_chat(L, SPAN_WARNING("\The [src] is already being searched.")) + return TRUE + + L.visible_message("\The [user] searches through \the [src].", SPAN_NOTICE("You search through \the [src]."), SPAN_NOTICE("You hear some rustling.")) + + //Do the searching + busy = TRUE + if(!do_after(user,rand(4 SECONDS,6 SECONDS),src)) + busy = FALSE + return TRUE + busy = FALSE + + // The loot's all gone. + if(loot_depletion && loot_left <= 0) + to_chat(L, SPAN_WARNING("\The [src] has been picked clean.")) + return TRUE + + //You already searched this one + if(!allow_multiple_looting && (user.ckey in searched_by)) + to_chat(L, SPAN_WARNING("You can't find anything else vaguely useful in \the [src]. Another set of eyes might, however.")) + return TRUE + + // You got unlucky. + if(chance_nothing && prob(chance_nothing)) + to_chat(L, SPAN_WARNING("Nothing in this pile really catches your eye this time.")) + return TRUE + + // You found something! + searched_by |= user.ckey + var/obj/item/loot = null + var/span = "notice" // Blue + + if(prob(chance_rare) && length(get_rare_loot())) // You won THE GRAND PRIZE! + loot = produce_rare_item() + span = "cult" // Purple and bold. + else if(prob(chance_uncommon) && length(get_uncommon_loot())) // Otherwise you might still get something good. + loot = produce_uncommon_item() + span = "alium" // Green + else if(length(get_common_loot())) // Welp. + loot = produce_common_item() + + if(loot) + loot.forceMove(get_turf(src)) + to_chat(L, SPAN_CLASS(span, "You found \a [loot]!")) + if(loot_depletion) + loot_left-- + if(loot_left <= 0) + to_chat(L, SPAN_WARNING("You seem to have gotten the last of the spoils inside \the [src].")) + if(delete_on_depletion) + qdel(src) + return TRUE + +/obj/structure/loot_pile/proc/produce_common_item() + var/list/common_loot = get_common_loot() + if(length(common_loot)) + var/path = pick(common_loot) + return new path(src) + +/obj/structure/loot_pile/proc/produce_uncommon_item() + var/list/uncommon_loot = get_uncommon_loot() + if(length(uncommon_loot)) + var/path = pick(uncommon_loot) + return new path(src) + +/obj/structure/loot_pile/proc/produce_rare_item() + var/list/rare_loot = get_rare_loot() + if(length(rare_loot)) + var/path = pick(rare_loot) + return new path(src) + +/// Returns a list of generally less-than-useful junk and filler, at least for maint loot piles. +/obj/structure/loot_pile/proc/get_common_loot() + return + +/// Returns a list of some maybe actually useful items, usually the reason someone bothers looking inside. +/obj/structure/loot_pile/proc/get_uncommon_loot() + return + +/// Returns a list of really powerful, or at least unique items. +/obj/structure/loot_pile/proc/get_rare_loot() + return + +/// Returns a list of icon states the pile can choose from on initialization. If empty or null, it will stay the initial icon_state. +/obj/structure/loot_pile/proc/get_icon_states_to_use() + return diff --git a/mods/content/dungeon_loot/subtypes/exosuit.dm b/mods/content/dungeon_loot/subtypes/exosuit.dm new file mode 100644 index 00000000000..44a04ae3a75 --- /dev/null +++ b/mods/content/dungeon_loot/subtypes/exosuit.dm @@ -0,0 +1,169 @@ +// Subtype for mecha and mecha accessories. These might not always be on the surface. +/obj/structure/loot_pile/exosuit + name = "pod wreckage" + desc = "The ruins of some unfortunate pod. Perhaps something is salvageable." + icon_state = "wreck" + icon = 'icons/mecha/mech_part_items.dmi' + density = TRUE + anchored = FALSE // In case a dead mecha-mob dies in a bad spot. + chance_uncommon = 20 + chance_rare = 10 + loot_depletion = TRUE + loot_left = 9 + abstract_type = /obj/structure/loot_pile/exosuit + +// Subtypes below. +/obj/structure/loot_pile/exosuit/powerloader + name = "powerloader exosuit wreckage" + desc = "The ruins of some unfortunate powerloader exosuit. Perhaps something is salvageable." + +/obj/structure/loot_pile/exosuit/powerloader/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/powerloader/painted, + /obj/item/mech_component/propulsion/powerloader/painted + ) + return common_loot + +/obj/structure/loot_pile/exosuit/powerloader/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_equipment/drill/steel, + /obj/item/mech_equipment/clamp + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/powerloader/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_component/sensors/powerloader/painted, + /obj/item/mech_component/chassis/powerloader/painted + ) + return rare_loot + +/obj/structure/loot_pile/exosuit/firefighter + name = "firefighter exosuit wreckage" + desc = "The ruins of some unfortunate firefighter exosuit. Perhaps something is salvageable." + +/obj/structure/loot_pile/exosuit/firefighter/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/powerloader/painted, + /obj/item/mech_component/propulsion/powerloader/painted, + /obj/item/mech_component/chassis/heavy + ) + return common_loot + +/obj/structure/loot_pile/exosuit/firefighter/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_equipment/drill/steel, + /obj/item/mech_equipment/mounted_system/extinguisher + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/firefighter/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_component/sensors/powerloader/painted + ) + return rare_loot + +/obj/structure/loot_pile/exosuit/combat + name = "combat exosuit wreckage" + desc = "The ruins of some unfortunate combat exosuit. Perhaps something is salvageable." + +/obj/structure/loot_pile/exosuit/combat/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/combat/painted, + /obj/item/mech_component/propulsion/combat/painted, + /obj/item/mech_equipment/flash, + /obj/item/mech_equipment/light + ) + return common_loot + +/obj/structure/loot_pile/exosuit/combat/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_component/chassis/combat/painted, + /obj/item/mech_equipment/mounted_system/taser + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/combat/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_component/sensors/combat/painted, + /obj/item/mech_equipment/mounted_system/projectile/assault_rifle + ) + return rare_loot + +/obj/structure/loot_pile/exosuit/explorer + name = "exploration exosuit wreckage" + desc = "The ruins of some unfortunate exploration exosuit. Perhaps something is salvagable." + +/obj/structure/loot_pile/exosuit/explorer/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/powerloader/exploration, + /obj/item/mech_component/chassis/pod/exploration, + /obj/item/mech_equipment/light + ) + return common_loot + +/obj/structure/loot_pile/exosuit/explorer/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_component/propulsion/tracks/exploration, + /obj/item/mech_equipment/clamp + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/explorer/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_component/sensors/light/painted, + /obj/item/mech_equipment/mounted_system/taser/plasma + ) + return rare_loot + +/obj/structure/loot_pile/exosuit/heavy + name = "heavy exosuit wreckage" + desc = "The ruins of some unfortunate heavy exosuit. Perhaps something is salvagable." + +/obj/structure/loot_pile/exosuit/heavy/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/heavy/painted, + /obj/item/mech_component/propulsion/heavy/painted, + /obj/item/mech_component/chassis/heavy/painted + ) + return common_loot + +/obj/structure/loot_pile/exosuit/heavy/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_equipment/shields, + /obj/item/mech_equipment/mounted_system/taser + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/heavy/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_equipment/mounted_system/taser/laser, + /obj/item/mech_component/sensors/heavy/painted + ) + return rare_loot + +/obj/structure/loot_pile/exosuit/light + name = "light exosuit wreckage" + desc = "The ruins of some unfortunate light exosuit. Perhaps something is salvagable." + +/obj/structure/loot_pile/exosuit/light/get_common_loot() + var/static/list/common_loot = list( + /obj/item/mech_component/manipulators/light/painted, + /obj/item/mech_component/propulsion/light/painted, + /obj/item/mech_component/chassis/light/painted + ) + return common_loot + +/obj/structure/loot_pile/exosuit/light/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/mech_component/sensors/light/painted, + /obj/item/mech_equipment/light + ) + return uncommon_loot + +/obj/structure/loot_pile/exosuit/light/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/mech_equipment/catapult, + /obj/item/mech_equipment/sleeper + ) + return rare_loot diff --git a/mods/content/dungeon_loot/subtypes/maint.dm b/mods/content/dungeon_loot/subtypes/maint.dm new file mode 100644 index 00000000000..820b6ba2b69 --- /dev/null +++ b/mods/content/dungeon_loot/subtypes/maint.dm @@ -0,0 +1,342 @@ +// Has large amounts of possible items, most of which may or may not be useful. +/obj/structure/loot_pile/maint + abstract_type = /obj/structure/loot_pile/maint + +/obj/structure/loot_pile/maint/get_icon_states_to_use() + var/static/list/icon_states_to_use = list( + "junk_pile1", + "junk_pile2", + "junk_pile3", + "junk_pile4", + "junk_pile5" + ) + return icon_states_to_use + +/obj/structure/loot_pile/maint/junk + name = "pile of junk" + desc = "Lots of junk lying around. They say one man's trash is another man's treasure." + +/obj/structure/loot_pile/maint/junk/get_common_loot() + var/static/list/common_loot = list( + /obj/item/flashlight/flare, + /obj/item/flashlight/flare/glowstick, + /obj/item/flashlight/flare/glowstick/blue, + /obj/item/flashlight/flare/glowstick/orange, + /obj/item/flashlight/flare/glowstick/red, + /obj/item/flashlight/flare/glowstick/yellow, + /obj/item/flashlight/pen, + /obj/item/cell, + /obj/item/cell/device, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/mask/breath, + /obj/item/chems/glass/rag, + /obj/item/chems/food/liquidfood, + /obj/item/storage/secure/briefcase, + /obj/item/storage/briefcase, + /obj/item/storage/backpack, + /obj/item/storage/backpack/satchel, + /obj/item/storage/backpack/dufflebag, + /obj/item/storage/box, + /obj/item/storage/wallet, + /obj/item/clothing/shoes/galoshes, + /obj/item/clothing/shoes/color/black, + /obj/item/clothing/shoes/dress, + /obj/item/clothing/shoes/dress/white, + /obj/item/clothing/gloves/thick/botany, + /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/gloves/rainbow, + /obj/item/clothing/gloves/insulated/cheap, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/glasses/meson, + /obj/item/clothing/glasses/meson/prescription, + /obj/item/clothing/glasses/welding, + /obj/item/clothing/head/bio_hood/general, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/head/hardhat/red, + /obj/item/clothing/head/ushanka, + /obj/item/clothing/head/welding, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/space/emergency, + /obj/item/clothing/suit/storage/toggle/bomber, + /obj/item/clothing/suit/bio_suit/general, + /obj/item/clothing/suit/storage/toggle/hoodie/black, + /obj/item/clothing/suit/storage/toggle/brown_jacket, + /obj/item/clothing/suit/storage/leather_jacket, + /obj/item/clothing/suit/apron, + /obj/item/clothing/under/color/grey, + /obj/item/clothing/under/syndicate/tacticool, + /obj/item/clothing/pants/casual/camo, + /obj/item/clothing/under/harness, + /obj/item/clothing/accessory/storage, + /obj/item/cash/c1, + /obj/item/cash/c10, + /obj/item/cash/c20, + /obj/item/cash/c50, + /obj/item/frame/camera/kit, + /obj/item/caution, + /obj/item/caution/cone, + /obj/item/card/emag_broken, + /obj/item/camera, + /obj/item/modular_computer/pda, + /obj/item/radio/headset, + /obj/item/paicard, + ) + return common_loot + +/obj/structure/loot_pile/maint/junk/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/clothing/shoes/syndigaloshes, + /obj/item/clothing/gloves/insulated, + /obj/item/clothing/under/tactical, + /obj/item/beartrap, + /obj/item/clothing/accessory/badge/press, + /obj/item/knife/combat, + /obj/item/knife/folding/combat/switchblade, + ) + return uncommon_loot + +/obj/structure/loot_pile/maint/junk/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/clothing/suit/armor/vest/heavy, + /obj/item/clothing/shoes/jackboots/swat/combat, + ) + return rare_loot + +// Contains mostly useless garbage. +/obj/structure/loot_pile/maint/trash + name = "pile of trash" + desc = "Lots of garbage in one place. Might be able to find something if you're in the mood for dumpster diving." + +/obj/structure/loot_pile/maint/trash/get_icon_states_to_use() + var/static/list/icon_states_to_use = list( + "trash_pile1", + "trash_pile2") + return icon_states_to_use + +/obj/structure/loot_pile/maint/trash/get_common_loot() + var/static/list/common_loot = list( + /obj/item/trash/candle, + /obj/item/trash/candy, + /obj/item/trash/candy/proteinbar, + /obj/item/trash/cigbutt/spitgum, + /obj/item/trash/cheesie, + /obj/item/trash/chips, + /obj/item/trash/stick, + /obj/item/trash/liquidfood, + /obj/item/trash/pistachios, + /obj/item/plate, + /obj/item/trash/popcorn, + /obj/item/trash/raisins, + /obj/item/trash/semki, + /obj/item/trash/snack_bowl, + /obj/item/trash/sosjerky, + /obj/item/trash/syndi_cakes, + /obj/item/trash/tastybread, + /obj/item/chems/drinks/sillycup, + /obj/item/trash/driedfish, + /obj/item/trash/waffles, + /obj/item/trash/beef, + /obj/item/trash/beans, + /obj/item/trash/tomato, + /obj/item/trash/spinach, + /obj/item/chems/food/spider, + /obj/item/chems/food/mysterysoup, + /obj/item/chems/food/old/hotdog, + /obj/item/chems/food/old/pizza, + /obj/item/ammo_casing, + /obj/item/stack/material/rods/ten, + /obj/item/stack/material/sheet/mapped/steel/five, + /obj/item/stack/material/cardstock/mapped/cardboard/five, + /obj/item/poster, + /obj/item/newspaper, + /obj/item/paper/crumpled, + /obj/item/paper/crumpled/bloody, + ) + return common_loot + +/obj/structure/loot_pile/maint/trash/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/plate, + /obj/item/plate/tray, + /obj/item/chems/syringe/steroid, + /obj/item/storage/pill_bottle/zoom, + /obj/item/storage/pill_bottle/happy, + /obj/item/storage/pill_bottle/painkillers + ) + return uncommon_loot + +// Contains loads of different types of boxes, which may have items inside! +/obj/structure/loot_pile/maint/boxfort + name = "pile of boxes" + desc = "A large pile of boxes sits here." + density = TRUE + +/obj/structure/loot_pile/maint/boxfort/get_icon_states_to_use() + var/static/list/icon_states_to_use = list("boxfort") + return icon_states_to_use + +/obj/structure/loot_pile/maint/boxfort/get_common_loot() + var/static/list/common_loot = list( + /obj/item/storage/box, + /obj/item/storage/box/beakers, + /obj/item/storage/box/botanydisk, + /obj/item/storage/box/cups, + /obj/item/storage/box/botanydisk, + /obj/item/storage/box/donkpockets, + /obj/item/storage/box/fancy/donut, + /obj/item/storage/box/fancy/donut/empty, + /obj/item/storage/box/evidence, + /obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/tubes, + /obj/item/storage/box/lights/bulbs, + /obj/item/storage/box/autoinjectors, + /obj/item/storage/box/masks, + /obj/item/storage/box/ids, + /obj/item/storage/box/mousetraps, + /obj/item/storage/box/syringes, + /obj/item/storage/box/survival, + /obj/item/storage/box/gloves, + /obj/item/storage/box/PDAs, + ) + return common_loot + +/obj/structure/loot_pile/maint/boxfort/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/storage/box/sinpockets, + /obj/item/storage/box/ammo/practiceshells, + /obj/item/storage/box/ammo/blanks, + /obj/item/storage/box/smokes, + /obj/item/storage/box/metalfoam, + /obj/item/storage/box/handcuffs + ) + return uncommon_loot + +/obj/structure/loot_pile/maint/boxfort/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/storage/box/flashbangs, + /obj/item/storage/box/empslite, + /obj/item/storage/box/ammo/flashshells, + /obj/item/storage/box/ammo/stunshells, + /obj/item/storage/box/teargas, + ) + return rare_loot + +// One of the more useful maint piles, contains electrical components. +/obj/structure/loot_pile/maint/technical + name = "broken machine" + desc = "A destroyed machine with unknown purpose, and doesn't look like it can be fixed. It might still have some functional components?" + density = TRUE + +/obj/structure/loot_pile/maint/technical/get_icon_states_to_use() + var/static/list/icon_states_to_use = list( + "technical_pile1", + "technical_pile2", + "technical_pile3" + ) + return icon_states_to_use + +/obj/structure/loot_pile/maint/technical/get_common_loot() + var/static/list/common_loot = list( + /obj/item/stock_parts/network_receiver, + /obj/item/stock_parts/radio/receiver, + /obj/item/stock_parts/radio/transmitter, + /obj/item/stock_parts/power/apc, + /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/power/battery, + /obj/item/stock_parts/item_holder/card_reader, + /obj/item/stock_parts/item_holder/disk_reader, + /obj/item/stock_parts/console_screen, + /obj/item/stock_parts/keyboard, + /obj/item/stock_parts/capacitor, + /obj/item/stock_parts/capacitor/adv, + /obj/item/stock_parts/capacitor/super, + /obj/item/stock_parts/manipulator, + /obj/item/stock_parts/manipulator/nano, + /obj/item/stock_parts/manipulator/pico, + /obj/item/stock_parts/matter_bin, + /obj/item/stock_parts/matter_bin/adv, + /obj/item/stock_parts/matter_bin/super, + /obj/item/stock_parts/scanning_module, + /obj/item/stock_parts/scanning_module/adv, + /obj/item/stock_parts/scanning_module/phasic, + /obj/item/stock_parts/subspace/amplifier, + /obj/item/stock_parts/subspace/analyzer, + /obj/item/stock_parts/subspace/ansible, + /obj/item/stock_parts/subspace/crystal, + /obj/item/stock_parts/subspace/filter, + /obj/item/stock_parts/subspace/transmitter, + /obj/item/stock_parts/subspace/treatment, + /obj/item/borg/upgrade/restart, + /obj/item/cell, + /obj/item/cell/high, + /obj/item/cell/device, + /obj/item/stock_parts/circuitboard/broken, + /obj/item/stock_parts/circuitboard/arcade, + /obj/item/stock_parts/circuitboard/autolathe, + /obj/item/stock_parts/circuitboard/atmos_alert, + /obj/item/stock_parts/circuitboard/air_alarm, + /obj/item/stock_parts/circuitboard/fax_machine, + /obj/item/stock_parts/circuitboard/jukebox, + /obj/item/stock_parts/circuitboard/batteryrack, + /obj/item/stock_parts/circuitboard/message_monitor, + /obj/item/stock_parts/smes_coil, + /obj/item/scanner/gas, + /obj/item/scanner/health, + /obj/item/robotanalyzer, + /obj/item/lightreplacer, + /obj/item/radio, + /obj/item/hailer, + /obj/item/gps, + /obj/item/geiger, + /obj/item/scanner/spectrometer, + /obj/item/wrench, + /obj/item/screwdriver, + /obj/item/wirecutters, + /obj/item/scanner/mining, + /obj/item/multitool, + /obj/item/robot_parts/robot_component/binary_communication_device, + /obj/item/robot_parts/robot_component/armour, + /obj/item/robot_parts/robot_component/actuator, + /obj/item/robot_parts/robot_component/camera, + /obj/item/robot_parts/robot_component/diagnosis_unit, + /obj/item/robot_parts/robot_component/radio, + ) + return common_loot + +/obj/structure/loot_pile/maint/technical/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/cell/super, + /obj/item/cell/gun, + /obj/item/aiModule/reset, + /obj/item/stock_parts/smes_coil/super_capacity, + /obj/item/stock_parts/smes_coil/super_io, + /obj/item/disk/integrated_circuit/upgrade/advanced, + /obj/item/camera/tvcamera, + /obj/item/aicard, + /obj/item/borg/upgrade/jetpack, + /obj/item/borg/upgrade/vtec, + /obj/item/borg/upgrade/weaponcooler, + /obj/item/rig_module/device/drill, + /obj/item/rig_module/mounted/plasmacutter, + /obj/item/rig_module/device/healthscanner, + /obj/item/rig_module/device/orescanner, + /obj/item/rig_module/device/anomaly_scanner, + /obj/item/rig_module/datajack, + /obj/item/rig_module/vision/medhud, + /obj/item/rig_module/vision/meson, + /obj/item/rig_module/vision/sechud, + ) + return uncommon_loot + +/obj/structure/loot_pile/maint/technical/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/cell/hyper, + /obj/item/aiModule/freeform, + /obj/item/aiModule/asimov, + /obj/item/aiModule/paladin, + /obj/item/aiModule/safeguard, + ) + return rare_loot + diff --git a/mods/content/dungeon_loot/subtypes/surface.dm b/mods/content/dungeon_loot/subtypes/surface.dm new file mode 100644 index 00000000000..6563a0acd74 --- /dev/null +++ b/mods/content/dungeon_loot/subtypes/surface.dm @@ -0,0 +1,58 @@ +// Surface base type +/obj/structure/loot_pile/surface + // Surface loot piles are considerably harder and more dangerous to reach, so you're more likely to get rare things. + chance_uncommon = 20 + chance_rare = 5 + loot_depletion = TRUE + loot_left = 5 // This is to prevent people from asking the whole station to go down to some alien ruin to get massive amounts of phat lewt. + abstract_type = /obj/structure/loot_pile/surface + +// Contains old mediciation, most of it unidentified and has a good chance of being useless. +/obj/structure/loot_pile/surface/medicine_cabinet + name = "abandoned medicine cabinet" + desc = "An old cabinet, it might still have something of use inside." + icon_state = "medicine_cabinet" + density = FALSE + chance_uncommon = 1 + chance_rare = 1 + +/obj/structure/loot_pile/surface/medicine_cabinet/get_common_loot() + var/static/list/common_loot = list( + /obj/item/storage/pill_bottle/sugariron, + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/ointment, + /obj/item/storage/med_pouch/trauma, + /obj/item/storage/med_pouch/burn, + /obj/item/storage/med_pouch/toxin, + /obj/item/storage/med_pouch/radiation, + /obj/item/storage/med_pouch/oxyloss, + /obj/item/chems/hypospray/autoinjector/stabilizer + ) + return common_loot + +/obj/structure/loot_pile/surface/medicine_cabinet/get_uncommon_loot() + var/static/list/uncommon_loot = list( + /obj/item/storage/pill_bottle/painkillers, + /obj/item/stack/medical/splint, + /obj/item/storage/pill_bottle/burn_meds, + /obj/item/storage/pill_bottle/brute_meds, + /obj/item/storage/pill_bottle/antitoxins, + /obj/item/storage/pill_bottle/antibiotics, + /obj/item/storage/pill_bottle/oxygen + ) + return uncommon_loot + +/obj/structure/loot_pile/surface/medicine_cabinet/get_rare_loot() + var/static/list/rare_loot = list( + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/medical/advanced/ointment, + /obj/item/storage/pill_bottle/strong_painkillers + ) + return rare_loot + +// Like the above but has way better odds, in exchange for being in a place still inhabited (or was recently). +/obj/structure/loot_pile/surface/medicine_cabinet/fresh + name = "medicine cabinet" + desc = "A cabinet designed to hold medicine, it might still have something of use inside." + chance_uncommon = 20 + chance_rare = 5 diff --git a/mods/content/generic_shuttles/tanker/tanker.dmm b/mods/content/generic_shuttles/tanker/tanker.dmm index 704b701c15b..02a3995e394 100644 --- a/mods/content/generic_shuttles/tanker/tanker.dmm +++ b/mods/content/generic_shuttles/tanker/tanker.dmm @@ -300,7 +300,7 @@ dir = 4 }, /obj/machinery/fabricator/pipe{ - anchored = TRUE + anchored = 1 }, /turf/simulated/floor/plating, /area/tanker) diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm index 374733c1914..34415074eaf 100644 --- a/mods/content/government/away_sites/icarus/icarus-1.dmm +++ b/mods/content/government/away_sites/icarus/icarus-1.dmm @@ -154,7 +154,7 @@ /area/icarus/vessel) "aL" = ( /obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar, +/obj/item/storage/box/fancy/cigar, /turf/simulated/floor/wood, /area/icarus/vessel) "aM" = ( @@ -708,7 +708,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/icarus/vessel) "cB" = ( @@ -773,8 +773,8 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/item/trash/plate, -/obj/item/kitchen/utensil/fork, +/obj/item/plate, +/obj/item/utensil/fork, /turf/simulated/floor/tiled, /area/icarus/vessel) "cM" = ( @@ -944,7 +944,7 @@ /area/icarus/vessel) "dm" = ( /obj/structure/table, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/icarus/open) "dn" = ( @@ -967,7 +967,7 @@ /area/icarus/vessel) "dq" = ( /obj/structure/table, -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/simulated/floor/tiled, /area/icarus/vessel) "dr" = ( @@ -994,7 +994,7 @@ /area/icarus/vessel) "dv" = ( /obj/structure/table, -/obj/item/trash/plate, +/obj/item/plate, /turf/simulated/floor/tiled, /area/icarus/vessel) "dw" = ( @@ -1385,14 +1385,14 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/trash/plate, +/obj/item/plate, /turf/unsimulated/beach/sand, /area/icarus/open) "eJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/knife/table, +/obj/item/utensil/knife, /turf/unsimulated/beach/sand, /area/icarus/open) "eK" = ( @@ -1425,7 +1425,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/trash/plate, +/obj/item/plate, /turf/unsimulated/beach/sand, /area/icarus/open) "eO" = ( @@ -1973,7 +1973,6 @@ "gu" = ( /obj/machinery/door/blast/regular/open{ dir = 4; - icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, /obj/machinery/door/firedoor, @@ -2584,7 +2583,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/engine{ - anchored = FALSE + anchored = 0 }, /turf/unsimulated/beach/sand, /area/icarus/open) diff --git a/mods/content/government/away_sites/icarus/icarus-2.dmm b/mods/content/government/away_sites/icarus/icarus-2.dmm index 294f5ccf6e3..bb2576f800b 100644 --- a/mods/content/government/away_sites/icarus/icarus-2.dmm +++ b/mods/content/government/away_sites/icarus/icarus-2.dmm @@ -6,7 +6,7 @@ /turf/unsimulated/mask, /area/mine/unexplored) "ac" = ( -/turf/simulated/open, +/turf/open, /area/icarus/open) "ad" = ( /turf/exterior/wall, @@ -134,7 +134,7 @@ /area/icarus/vessel) "aE" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/fancy/cigarettes/killthroat, +/obj/item/storage/box/fancy/cigarettes/killthroat, /turf/simulated/floor/tiled, /area/icarus/vessel) "aF" = ( @@ -861,7 +861,7 @@ /area/icarus/vessel) "cR" = ( /obj/structure/lattice, -/turf/simulated/open, +/turf/open, /area/icarus/open) "cS" = ( /obj/structure/rack, @@ -1263,7 +1263,7 @@ /area/icarus/open) "dZ" = ( /obj/effect/icarus/irradiate, -/turf/simulated/open, +/turf/open, /area/icarus/open) "ea" = ( /obj/structure/cable{ diff --git a/mods/content/government/datum/ai_laws.dm b/mods/content/government/datum/ai_laws.dm index 0452bdcaad5..c31bd6571cd 100644 --- a/mods/content/government/datum/ai_laws.dm +++ b/mods/content/government/datum/ai_laws.dm @@ -25,7 +25,7 @@ /obj/item/aiModule/solgov name = "'SCG Expeditionary' Core AI Module" desc = "An 'SCG Expeditionary' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/solgov /******************** SCG Aggressive ********************/ @@ -33,5 +33,5 @@ /obj/item/aiModule/solgov_aggressive name = "\improper 'Military' Core AI Module" desc = "A 'Military' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = "{'programming':3,'materials':4}" + origin_tech = @'{"programming":3,"materials":4}' laws = new/datum/ai_laws/solgov_aggressive diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm index 64e7aa4c84e..fcd9668d427 100644 --- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm +++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dm @@ -8,7 +8,7 @@ /area/map_template/ecship/engine = NO_SCRUBBER|NO_VENT|NO_APC, /area/map_template/ecship/cockpit = NO_SCRUBBER|NO_APC ) - ruin_tags = RUIN_HUMAN|RUIN_WRECK + template_tags = TEMPLATE_TAG_HUMAN|TEMPLATE_TAG_WRECK template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS /area/map_template/ecship/crew diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm index d5d69bcf176..a067701df2e 100644 --- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm +++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm @@ -16,12 +16,9 @@ /area/map_template/ecship/cockpit) "ae" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; name = "External Blast Doors"; - opacity = FALSE }, /obj/machinery/door/firedoor, /obj/abstract/landmark/scorcher, @@ -223,12 +220,9 @@ /area/map_template/ecship/science) "aL" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; name = "External Blast Doors"; - opacity = FALSE }, /obj/machinery/door/firedoor, /turf/simulated/floor, @@ -704,7 +698,7 @@ dir = 4 }, /obj/structure/window/reinforced{ - health = 1e+007 + current_health = 1e+007 }, /obj/effect/floor_decal/corner/purple{ dir = 6 @@ -1204,7 +1198,7 @@ dir = 10 }, /obj/machinery/smartfridge{ - density = FALSE + density = 0 }, /turf/simulated/floor/tiled/white/lowpressure, /area/map_template/ecship/science) @@ -1410,12 +1404,9 @@ /area/map_template/ecship/engine) "dd" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; name = "External Blast Doors"; - opacity = FALSE }, /obj/machinery/door/firedoor, /turf/simulated/floor, @@ -1714,12 +1705,9 @@ /area/map_template/ecship/engine) "dJ" = ( /obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = FALSE; - icon_state = "pdoor0"; +/obj/machinery/door/blast/regular/open{ id_tag = "scraplock"; name = "External Blast Doors"; - opacity = FALSE }, /obj/machinery/door/firedoor, /obj/structure/cable{ diff --git a/mods/content/matchmaking/relations.dm b/mods/content/matchmaking/relations.dm index 51d4c76e4d6..452efde3893 100644 --- a/mods/content/matchmaking/relations.dm +++ b/mods/content/matchmaking/relations.dm @@ -54,7 +54,7 @@ return TOPIC_REFRESH if(href_list["relation_info"]) var/R = href_list["relation_info"] - var/info = sanitize(input("Character info", "What would you like the other party for this connection to know about your character?",pref.relations_info[R]) as message|null) + var/info = sanitize(input("Character info", "What would you like the other party for this connection to know about your character?",html_decode(pref.relations_info[R])) as message|null) if(info) pref.relations_info[R] = info return TOPIC_REFRESH diff --git a/mods/content/mouse_highlights/mouse_highlight_client.dm b/mods/content/mouse_highlights/mouse_highlight_client.dm index 1dad1018cd6..f9801ef8d73 100644 --- a/mods/content/mouse_highlights/mouse_highlight_client.dm +++ b/mods/content/mouse_highlights/mouse_highlight_client.dm @@ -11,7 +11,7 @@ /client/New() // Cache our callback as we will potentially be using it (10 / ticklag) times per second, - mouseover_callback = CALLBACK(src, .proc/refresh_mouseover_highlight_timer) + mouseover_callback = CALLBACK(src, PROC_REF(refresh_mouseover_highlight_timer)) . = ..() // This proc iterates constantly whenever something is being mouseover'd, so that it @@ -74,7 +74,7 @@ mouseover_highlight_dummy.plane = HUD_ABOVE_ITEM_LAYER mouseover_highlight_dummy.alpha = prefs?.UI_mouseover_alpha || 255 mouseover_highlight_dummy.appearance_flags |= (KEEP_TOGETHER|RESET_COLOR) - mouseover_highlight_dummy.add_filter("glow", 1, list("drop_shadow", color = (prefs?.UI_mouseover_color || COLOR_AMBER) + "F0", size = 1, offset = 1, x = 0, y = 0)) + mouseover_highlight_dummy.add_filter("glow", 1, list(type = "drop_shadow", color = (prefs?.UI_mouseover_color || COLOR_AMBER) + "F0", size = 1, offset = 1, x = 0, y = 0)) // Replanes the overlays to avoid explicit plane/layer setting (such as // computer overlays) interfering with the ordering of the highlight. @@ -96,8 +96,8 @@ mouseover_highlight_dummy.underlays = replaned_underlays // Finally update our highlight's vis contents and location . - clear_vis_contents(current_highlight) - add_vis_contents(current_highlight, mouseover_highlight_dummy) + current_highlight.clear_vis_contents() + current_highlight.add_vis_contents(mouseover_highlight_dummy) current_highlight.loc = object current_highlight_atom = weakref(AM) diff --git a/mods/content/psionics/_psionics.dm b/mods/content/psionics/_psionics.dm index 2ccc3215525..37937aecb23 100644 --- a/mods/content/psionics/_psionics.dm +++ b/mods/content/psionics/_psionics.dm @@ -5,20 +5,20 @@ /decl/modpack/psionics/get_player_panel_options(var/mob/M) . = list("Psionics:
    ") if(isliving(M)) - var/mob/living/psyker = M - if(psyker.psi) - . += "Remove psionics.

    " - . += "Trigger latencies.
    " + var/datum/ability_handler/psionics/psi = M.get_ability_handler(/datum/ability_handler/psionics) + if(psi) + . += "Remove psionics.

    " + . += "Trigger latencies.
    " . += "" for(var/faculty in list(PSI_COERCION, PSI_PSYCHOKINESIS, PSI_REDACTION, PSI_ENERGISTICS)) var/decl/psionic_faculty/faculty_decl = SSpsi.get_faculty(faculty) - var/faculty_rank = psyker.psi ? psyker.psi.get_rank(faculty) : 0 + var/faculty_rank = psi ? psi.get_rank(faculty) : 0 . += "" for(var/i = 1 to LAZYLEN(global.psychic_ranks_to_strings)) var/psi_title = global.psychic_ranks_to_strings[i] if(i == faculty_rank) psi_title = "[psi_title]" - . += "" + . += "" . += "" . += "
    [faculty_decl.name][psi_title][psi_title]
    " else @@ -27,5 +27,6 @@ /datum/preferences/copy_to(mob/living/carbon/human/character, is_preview_copy = FALSE) character = ..() - if(istype(character) && character.psi && !is_preview_copy) - character.psi.update() + var/datum/ability_handler/psionics/psi = !is_preview_copy && istype(character) && character.get_ability_handler(/datum/ability_handler/psionics) + if(psi) + psi.update() diff --git a/mods/content/psionics/_psionics.dme b/mods/content/psionics/_psionics.dme index dbcd27ffe8f..53919e93eb0 100644 --- a/mods/content/psionics/_psionics.dme +++ b/mods/content/psionics/_psionics.dme @@ -21,7 +21,6 @@ #include "items\foundation_implanter.dm" #include "items\foundation_labcoat.dm" #include "items\foundation_weapon.dm" -#include "items\grabs.dm" #include "items\id_card.dm" #include "items\implant.dm" #include "items\literature.dm" diff --git a/mods/content/psionics/datum/antagonists/foundation.dm b/mods/content/psionics/datum/antagonists/foundation.dm index edb83213e0a..db4213d3f6f 100644 --- a/mods/content/psionics/datum/antagonists/foundation.dm +++ b/mods/content/psionics/datum/antagonists/foundation.dm @@ -32,7 +32,8 @@ player.set_psi_rank(PSI_COERCION, 3, defer_update = TRUE) player.set_psi_rank(PSI_PSYCHOKINESIS, 3, defer_update = TRUE) player.set_psi_rank(PSI_ENERGISTICS, 3, defer_update = TRUE) - player.psi.update(TRUE) + var/datum/ability_handler/psionics/psi = player.get_ability_handler(/datum/ability_handler/psionics) + psi?.update(TRUE) /decl/hierarchy/outfit/foundation name = "Cuchulain Foundation Agent" diff --git a/mods/content/psionics/datum/antagonists/paramount.dm b/mods/content/psionics/datum/antagonists/paramount.dm index b7cb8f27c74..16ce066c0b6 100644 --- a/mods/content/psionics/datum/antagonists/paramount.dm +++ b/mods/content/psionics/datum/antagonists/paramount.dm @@ -30,7 +30,8 @@ player.set_psi_rank(PSI_COERCION, 3, defer_update = TRUE) player.set_psi_rank(PSI_PSYCHOKINESIS, 3, defer_update = TRUE) player.set_psi_rank(PSI_ENERGISTICS, 3, defer_update = TRUE) - player.psi.update(TRUE) + var/datum/ability_handler/psionics/psi = player.get_ability_handler(/datum/ability_handler/psionics) + psi?.update(TRUE) /decl/special_role/paramount/create_objectives(var/datum/mind/player) diff --git a/mods/content/psionics/datum/armour.dm b/mods/content/psionics/datum/armour.dm index 405cb965b49..82e2d7beabe 100644 --- a/mods/content/psionics/datum/armour.dm +++ b/mods/content/psionics/datum/armour.dm @@ -2,16 +2,16 @@ . = (damage_type == PSIONIC) ? PSIONIC : ..() /datum/extension/armor/psionic - expected_type = /datum/psi_complexus + expected_type = /datum/ability_handler/psionics full_block_message = "You block the blow with your mind!" partial_block_message = "You soften the blow with your mind!" /datum/extension/armor/psionic/get_value(key) - var/datum/psi_complexus/psi = holder + var/datum/ability_handler/psionics/psi = holder return psi.get_armour(key) /datum/extension/armor/psionic/on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) - var/datum/psi_complexus/psi = holder + var/datum/ability_handler/psionics/psi = holder var/blocked_damage = damage * blocked if(blocked_damage) psi.spend_power_armor(blocked_damage) diff --git a/mods/content/psionics/datum/chems.dm b/mods/content/psionics/datum/chems.dm index 119cfbc1c2e..a61c7b53bb7 100644 --- a/mods/content/psionics/datum/chems.dm +++ b/mods/content/psionics/datum/chems.dm @@ -1,11 +1,11 @@ /decl/material/liquid/crystal_agent/do_material_check(var/mob/living/carbon/M) var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard) - . = (M.psi || (M.mind && wizards.is_antagonist(M.mind))) ? MAT_NULLGLASS : ..() + . = (M.get_ability_handler(/datum/ability_handler/psionics) || (M.mind && wizards.is_antagonist(M.mind))) ? MAT_NULLGLASS : ..() /decl/material/liquid/glowsap/gleam/affect_overdose(var/mob/living/M) ..() - if(M.psi) - M.psi.check_latency_trigger(30, "a [name] overdose") + var/datum/ability_handler/psionics/psi = M.get_ability_handler(/datum/ability_handler/psionics) + psi?.check_latency_trigger(30, "a [name] overdose") /decl/chemical_reaction/synthesis/nullglass name = "Soulstone" @@ -18,7 +18,7 @@ var/weakref/donor_ref = LAZYACCESS(blood_data, "donor") var/mob/living/donor = donor_ref?.resolve() var/decl/special_role/wizard/wizards = GET_DECL(/decl/special_role/wizard) - . = (istype(donor) && (donor.psi || (donor.mind && wizards.is_antagonist(donor.mind)))) + . = (istype(donor) && (!!donor.get_ability_handler(/datum/ability_handler/psionics) || (donor.mind && wizards.is_antagonist(donor.mind)))) /decl/chemical_reaction/synthesis/nullglass/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) var/location = get_turf(holder.get_reaction_loc(chemical_reaction_flags)) diff --git a/mods/content/psionics/datum/codex.dm b/mods/content/psionics/datum/codex.dm index cac5a264042..94ffe0c9962 100644 --- a/mods/content/psionics/datum/codex.dm +++ b/mods/content/psionics/datum/codex.dm @@ -26,7 +26,7 @@ name = "Psionics" associated_strings = list("psychic powers") associated_paths = list( - /obj/item/book/manual/psionics, + /obj/item/book/fluff/psionics, /obj/item/clothing/head/helmet/space/psi_amp, /obj/item/clothing/head/helmet/space/psi_amp/lesser ) diff --git a/mods/content/psionics/datum/jobs.dm b/mods/content/psionics/datum/jobs.dm index 6d56ca0f216..48f342be0fc 100644 --- a/mods/content/psionics/datum/jobs.dm +++ b/mods/content/psionics/datum/jobs.dm @@ -13,8 +13,10 @@ if(islist(psi_faculties)) for(var/psi in psi_faculties) H.set_psi_rank(psi, psi_faculties[psi], take_larger = TRUE, defer_update = TRUE) - if(H.psi) - H.psi.update() + + var/datum/ability_handler/psionics/psi = H.get_ability_handler(/datum/ability_handler/psionics) + if(psi) + psi.update() if(give_psionic_implant_on_join) var/obj/item/implant/psi_control/imp = new imp.implanted(H) diff --git a/mods/content/psionics/datum/surgery.dm b/mods/content/psionics/datum/surgery.dm index 2fb9f8f0c8a..e1778226cde 100644 --- a/mods/content/psionics/datum/surgery.dm +++ b/mods/content/psionics/datum/surgery.dm @@ -1,8 +1,8 @@ /decl/surgery_step/robotics/repair_brute/Initialize() - allowed_tools[/obj/item/psychic_power/psiblade/master] = 100 + allowed_tools[/obj/item/ability/psionic/psiblade/master] = 100 . = ..() /decl/surgery_step/hardsuit/Initialize() - allowed_tools[/obj/item/psychic_power/psiblade/master/grand/paramount] = 100 - allowed_tools[/obj/item/psychic_power/psiblade] = 75 + allowed_tools[/obj/item/ability/psionic/psiblade/master/grand/paramount] = 100 + allowed_tools[/obj/item/ability/psionic/psiblade] = 75 . = ..() diff --git a/mods/content/psionics/items/_items.dm b/mods/content/psionics/items/_items.dm index ebada3b4ae6..35a5b71ea9c 100644 --- a/mods/content/psionics/items/_items.dm +++ b/mods/content/psionics/items/_items.dm @@ -3,7 +3,7 @@ /obj/item/withstand_psi_stress(var/stress, var/atom/source) . = ..(stress, source) - if(health >= 0 && . > 0 && disrupts_psionics()) - health -= . - . = max(0, -(health)) + if(current_health >= 0 && . > 0 && disrupts_psionics()) + current_health -= . + . = max(0, -(current_health)) check_health(consumed = TRUE) diff --git a/mods/content/psionics/items/brain.dm b/mods/content/psionics/items/brain.dm index 79917423381..181774f76d1 100644 --- a/mods/content/psionics/items/brain.dm +++ b/mods/content/psionics/items/brain.dm @@ -1,4 +1,4 @@ /obj/item/organ/internal/brain/handle_severe_damage() . = ..() - if(owner.psi) - owner.psi.check_latency_trigger(20, "physical trauma") \ No newline at end of file + var/datum/ability_handler/psionics/psi = owner?.get_ability_handler(/datum/ability_handler/psionics) + psi?.check_latency_trigger(20, "physical trauma") \ No newline at end of file diff --git a/mods/content/psionics/items/cerebro_enhancers.dm b/mods/content/psionics/items/cerebro_enhancers.dm index c31191ea706..01c1bfc56d3 100644 --- a/mods/content/psionics/items/cerebro_enhancers.dm +++ b/mods/content/psionics/items/cerebro_enhancers.dm @@ -87,8 +87,8 @@ sleep(80) - if(H.psi) - H.psi.reset() + var/datum/ability_handler/psionics/psi = H.get_ability_handler(/datum/ability_handler/psionics) + psi?.reset() to_chat(H, SPAN_NOTICE("\The [src] chimes quietly as it finishes removing the subpersonas from your brain.")) @@ -108,8 +108,9 @@ . = ..() if(.) var/mob/living/carbon/human/H = lastloc - if(istype(H) && H.psi) - H.psi.reset() + if(istype(H)) + var/datum/ability_handler/psionics/psi = H.get_ability_handler(/datum/ability_handler/psionics) + psi?.reset() H = loc if(!istype(H) || H.get_equipped_item(slot_head_str) != src) canremove = TRUE @@ -148,10 +149,11 @@ H.set_psi_rank(faculty, boosted_rank, take_larger = TRUE, temporary = TRUE) else H.set_psi_rank(faculty, unboosted_rank, take_larger = TRUE, temporary = TRUE) - if(H.psi) - H.psi.max_stamina = boosted_psipower - H.psi.stamina = H.psi.max_stamina - H.psi.update(force = TRUE) + var/datum/ability_handler/psionics/psi = H.get_ability_handler(/datum/ability_handler/psionics) + if(psi) + psi.max_stamina = boosted_psipower + psi.stamina = psi.max_stamina + psi.update(force = TRUE) to_chat(H, SPAN_NOTICE("You experience a brief but powerful wave of deja vu as \the [src] finishes modifying your brain.")) verbs |= /obj/item/clothing/head/helmet/space/psi_amp/proc/deintegrate diff --git a/mods/content/psionics/items/grabs.dm b/mods/content/psionics/items/grabs.dm deleted file mode 100644 index 76ab167ff5e..00000000000 --- a/mods/content/psionics/items/grabs.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/grab/attack(mob/M, mob/living/user) - if(ishuman(user) && affecting == M) - var/mob/living/carbon/human/H = user - if(H.check_psi_grab(src)) - return - . = ..() \ No newline at end of file diff --git a/mods/content/psionics/items/id_card.dm b/mods/content/psionics/items/id_card.dm index 0e512ff521a..27d4d5be405 100644 --- a/mods/content/psionics/items/id_card.dm +++ b/mods/content/psionics/items/id_card.dm @@ -18,8 +18,8 @@ /obj/item/card/id/foundation/examine(mob/user, distance) . = ..() if(distance <= 1 && isliving(user)) - var/mob/living/M = user - if(M.psi) + var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) + if(psi) to_chat(user, SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'")) else to_chat(user, SPAN_NOTICE("This is the real deal, stamped by [global.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.")) @@ -27,13 +27,13 @@ /obj/item/card/id/foundation/attack_self(var/mob/user) . = ..() if(isliving(user)) - var/mob/living/show = user - if(show.psi) + var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) + if(psi) for(var/mob/M in viewers(world.view, get_turf(user))-user) if(isliving(M)) - var/mob/living/L = M - if(!L.psi) - to_chat(L, SPAN_NOTICE("This is the real deal, stamped by [global.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe \the [user] implicitly.")) + var/datum/ability_handler/psionics/other_psi = M.get_ability_handler(/datum/ability_handler/psionics) + if(!other_psi) + to_chat(M, SPAN_NOTICE("This is the real deal, stamped by [global.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe \the [user] implicitly.")) continue to_chat(M, SPAN_WARNING("There is a psionic compulsion surrounding \the [src] in a flicker of indescribable light.")) diff --git a/mods/content/psionics/items/implant.dm b/mods/content/psionics/items/implant.dm index 4e5293b10e5..d80839f176e 100644 --- a/mods/content/psionics/items/implant.dm +++ b/mods/content/psionics/items/implant.dm @@ -32,17 +32,17 @@ /obj/item/implant/psi_control/removed() var/mob/living/M = imp_in - if(disrupts_psionics() && istype(M) && M.psi) + if(disrupts_psionics() && istype(M) && M.get_ability_handler(/datum/ability_handler/psionics)) to_chat(M, SPAN_NOTICE("You feel the chilly shackles around your psionic faculties fade away.")) . = ..() /obj/item/implant/psi_control/proc/update_functionality(var/silent) var/mob/living/M = imp_in if(get_psi_mode() == PSI_IMPLANT_DISABLED || malfunction) - if(implanted && !silent && istype(M) && M.psi) + if(implanted && !silent && istype(M) && M.get_ability_handler(/datum/ability_handler/psionics)) to_chat(M, SPAN_NOTICE("You feel the chilly shackles around your psionic faculties fade away.")) else - if(implanted && !silent && istype(M) && M.psi) + if(implanted && !silent && istype(M) && M.get_ability_handler(/datum/ability_handler/psionics)) to_chat(M, SPAN_NOTICE("Bands of hollow ice close themselves around your psionic faculties.")) /obj/item/implant/psi_control/meltdown() @@ -104,6 +104,7 @@ SET_STATUS_MAX(imp_in, STAT_WEAK, 5) if(isliving(imp_in)) var/mob/living/M = imp_in - if(M.psi) M.psi.stunned(5) + var/datum/ability_handler/psionics/psi = M.get_ability_handler(/datum/ability_handler/psionics) + psi?.stunned(5) else if(use_psi_mode == PSI_IMPLANT_WARN) to_chat(imp_in, SPAN_WARNING("Your psi dampener primly informs you it has reported this violation.")) diff --git a/mods/content/psionics/items/literature.dm b/mods/content/psionics/items/literature.dm index 94befe6938d..84b3d235399 100644 --- a/mods/content/psionics/items/literature.dm +++ b/mods/content/psionics/items/literature.dm @@ -1,29 +1,11 @@ -/obj/item/book/manual/psionics +/obj/item/book/fluff/psionics name = "Psychonetics" icon_state = "foundation" author = "John Titor" title = "Psychonetics" - - dat = {" - - - - -

    Psychonetics

    - -

    This seems to be a dry, longwinded reference text for the form of strange mental powers called psionics. The author spends way too much time trying to advertise his cult, though.

    - -

    The general gist of things seems to be that sometime in the last decade or so, the first cases of 'spontaneous operancy' became known. People who spent a lot of time in deep space, or who studied certain esoteric fields of mathematics, became able to perform strange feats like levitating coins or removing headaches with nothing but their minds. The text goes on to explain that psionics are perfectly harmless, and that studies (no citations) have shown operants are no more likely to go mad and murder people than anyone else.

    - -

    A postscript by a group called the Cuchulain Foundation invites anyone who knows an operant, or thinks they might be one, to send them a message via comms and get enrolled in their training and registration program in orbit around Neptune. It's catered. The postscript adds hastily that you should never try to activate your own latencies with trauma or drugs, as the results are often lethal.

    - - - - "} + fluff_text = {" +

    Psychonetics

    +

    This seems to be a dry, longwinded reference text for the form of strange mental powers called psionics. The author spends way too much time trying to advertise his cult, though.

    +

    The general gist of things seems to be that sometime in the last decade or so, the first cases of 'spontaneous operancy' became known. People who spent a lot of time in deep space, or who studied certain esoteric fields of mathematics, became able to perform strange feats like levitating coins or removing headaches with nothing but their minds. The text goes on to explain that psionics are perfectly harmless, and that studies (no citations) have shown operants are no more likely to go mad and murder people than anyone else.

    +

    A postscript by a group called the Cuchulain Foundation invites anyone who knows an operant, or thinks they might be one, to send them a message via comms and get enrolled in their training and registration program in orbit around Neptune. It's catered. The postscript adds hastily that you should never try to activate your own latencies with trauma or drugs, as the results are often lethal.

    + "} diff --git a/mods/content/psionics/system/psionics/complexus/complexus.dm b/mods/content/psionics/system/psionics/complexus/complexus.dm index 85efae6d403..902cb2fb01c 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus.dm @@ -1,4 +1,4 @@ -/datum/psi_complexus +/datum/ability_handler/psionics var/announced = FALSE // Whether or not we have been announced to our holder yet. var/suppressed = TRUE // Whether or not we are suppressing our psi powers. @@ -16,7 +16,7 @@ var/list/latencies // List of all currently latent faculties. var/list/ranks // Assoc list of psi faculties to current rank. var/list/base_ranks // Assoc list of psi faculties to base rank, in case reset is needed - var/list/manifested_items // List of atoms manifested/maintained by psychic power. + var/next_latency_trigger = 0 // world.time minimum before a trigger can be attempted again. var/last_aura_size var/last_aura_alpha @@ -31,10 +31,9 @@ var/list/powers_by_faculty // All powers within a given faculty. var/obj/screen/psi/hub/ui // Reference to the master psi UI object. - var/mob/living/owner // Reference to our owner. var/image/_aura_image // Client image -/datum/psi_complexus/proc/get_aura_image() +/datum/ability_handler/psionics/proc/get_aura_image() if(_aura_image && !istype(_aura_image)) var/atom/A = _aura_image log_debug("Non-image found in psi complexus: \ref[A] - \the [A] - [istype(A) ? A.type : "non-atom"]") @@ -55,7 +54,7 @@ aura_image.mouse_opacity = MOUSE_OPACITY_UNCLICKABLE aura_image.appearance_flags = 0 for(var/thing in SSpsi.processing) - var/datum/psi_complexus/psychic = thing + var/datum/ability_handler/psionics/psychic = thing if(psychic.owner.client && !psychic.suppressed) psychic.owner.client.images += aura_image SSpsi.all_aura_images[aura_image] = TRUE @@ -63,17 +62,18 @@ /proc/destroy_aura_image(var/image/aura_image) for(var/thing in SSpsi.processing) - var/datum/psi_complexus/psychic = thing + var/datum/ability_handler/psionics/psychic = thing if(psychic.owner.client) psychic.owner.client.images -= aura_image SSpsi.all_aura_images -= aura_image -/datum/psi_complexus/New(var/mob/_owner) - owner = _owner - START_PROCESSING(SSpsi, src) - set_extension(src, /datum/extension/armor/psionic) +/datum/ability_handler/psionics/New(_master) + ..() + if(istype(master) && istype(owner)) + START_PROCESSING(SSpsi, src) + set_extension(src, /datum/extension/armor/psionic) -/datum/psi_complexus/Destroy() +/datum/ability_handler/psionics/Destroy() destroy_aura_image(_aura_image) STOP_PROCESSING(SSpsi, src) if(owner) @@ -83,11 +83,5 @@ for(var/thing in SSpsi.all_aura_images) owner.client.images -= thing QDEL_NULL(ui) - owner.psi = null - owner = null - if(manifested_items) - for(var/thing in manifested_items) - qdel(thing) - manifested_items.Cut() . = ..() diff --git a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm index a1535398446..cd593387c8f 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm @@ -1,12 +1,8 @@ -/datum/psi_complexus/proc/cancel() +/datum/ability_handler/psionics/cancel() sound_to(owner, sound('sound/effects/psi/power_fail.ogg')) - if(LAZYLEN(manifested_items)) - for(var/thing in manifested_items) - owner.drop_from_inventory(thing) - qdel(thing) - manifested_items = null + return ..() -/datum/psi_complexus/proc/stunned(var/amount) +/datum/ability_handler/psionics/proc/stunned(var/amount) var/old_stun = stun stun = max(stun, amount) if(amount && !old_stun) @@ -14,16 +10,16 @@ ui.update_icon() cancel() -/datum/psi_complexus/proc/get_armour(var/armourtype) +/datum/ability_handler/psionics/proc/get_armour(var/armourtype) if(use_psi_armour && can_use_passive()) return round(clamp(clamp(4 * rating, 0, 20) * get_rank(SSpsi.armour_faculty_by_type[armourtype]), 0, 100) * (stamina/max_stamina)) else return 0 -/datum/psi_complexus/proc/get_rank(var/faculty) +/datum/ability_handler/psionics/proc/get_rank(var/faculty) return LAZYACCESS(ranks, faculty) -/datum/psi_complexus/proc/set_rank(var/faculty, var/rank, var/defer_update, var/temporary) +/datum/ability_handler/psionics/proc/set_rank(var/faculty, var/rank, var/defer_update, var/temporary) if(get_rank(faculty) != rank) LAZYSET(ranks, faculty, rank) if(!temporary) @@ -31,17 +27,17 @@ if(!defer_update) update() -/datum/psi_complexus/proc/set_cooldown(var/value) +/datum/ability_handler/psionics/proc/set_cooldown(var/value) next_power_use = world.time + value ui.update_icon() -/datum/psi_complexus/proc/can_use_passive() +/datum/ability_handler/psionics/proc/can_use_passive() return (owner.stat == CONSCIOUS && !suppressed && !stun) -/datum/psi_complexus/proc/can_use(var/incapacitation_flags) +/datum/ability_handler/psionics/proc/can_use(var/incapacitation_flags) return (owner.stat == CONSCIOUS && (!incapacitation_flags || !owner.incapacitated(incapacitation_flags)) && !suppressed && !stun && world.time >= next_power_use) -/datum/psi_complexus/proc/spend_power(var/value = 0, var/check_incapacitated, var/backblast_on_failure = TRUE) +/datum/ability_handler/psionics/proc/spend_power(var/value = 0, var/check_incapacitated, var/backblast_on_failure = TRUE) . = FALSE if(isnull(check_incapacitated)) check_incapacitated = (INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT) @@ -58,20 +54,20 @@ . = FALSE ui.update_icon() -/datum/psi_complexus/proc/spend_power_armor(var/value = 0) +/datum/ability_handler/psionics/proc/spend_power_armor(var/value = 0) armor_cost += value -/datum/psi_complexus/proc/hide_auras() +/datum/ability_handler/psionics/proc/hide_auras() if(owner.client) for(var/thing in SSpsi.all_aura_images) owner.client.images -= thing -/datum/psi_complexus/proc/show_auras() +/datum/ability_handler/psionics/proc/show_auras() if(owner.client) for(var/image/I in SSpsi.all_aura_images) owner.client.images |= I -/datum/psi_complexus/proc/backblast(var/value) +/datum/ability_handler/psionics/proc/backblast(var/value) // Can't backblast if you're controlling your power. if(!owner || suppressed) @@ -82,7 +78,8 @@ stunned(value * 2) set_cooldown(value * 100) - if(prob(value*10)) owner.emote("scream") + if(prob(value*10)) + owner.emote(/decl/emote/audible/scream) // Your head asplode. owner.adjustBrainLoss(value) @@ -97,7 +94,7 @@ if(sponge) qdel(sponge) -/datum/psi_complexus/proc/reset() +/datum/ability_handler/psionics/proc/reset() aura_color = initial(aura_color) ranks = base_ranks ? base_ranks.Copy() : null max_stamina = initial(max_stamina) diff --git a/mods/content/psionics/system/psionics/complexus/complexus_latency.dm b/mods/content/psionics/system/psionics/complexus/complexus_latency.dm index 373c2283129..cabd46bb0ef 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_latency.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_latency.dm @@ -1,4 +1,4 @@ -/datum/psi_complexus/proc/check_latency_trigger(var/trigger_strength = 0, var/source, var/redactive = FALSE) +/datum/ability_handler/psionics/proc/check_latency_trigger(var/trigger_strength = 0, var/source, var/redactive = FALSE) if(!LAZYLEN(latencies) || world.time < next_latency_trigger) return FALSE diff --git a/mods/content/psionics/system/psionics/complexus/complexus_power_cache.dm b/mods/content/psionics/system/psionics/complexus/complexus_power_cache.dm index 637137d58b0..3ae14f1ddc1 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_power_cache.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_power_cache.dm @@ -1,4 +1,4 @@ -/datum/psi_complexus/proc/rebuild_power_cache() +/datum/ability_handler/psionics/proc/rebuild_power_cache() if(rebuild_power_cache) melee_powers = list() @@ -28,22 +28,22 @@ grab_powers[faculty] += power rebuild_power_cache = FALSE -/datum/psi_complexus/proc/get_powers_by_faculty(var/faculty) +/datum/ability_handler/psionics/proc/get_powers_by_faculty(var/faculty) rebuild_power_cache() return powers_by_faculty[faculty] -/datum/psi_complexus/proc/get_melee_powers(var/faculty) +/datum/ability_handler/psionics/proc/get_melee_powers(var/faculty) rebuild_power_cache() return melee_powers[faculty] -/datum/psi_complexus/proc/get_ranged_powers(var/faculty) +/datum/ability_handler/psionics/proc/get_ranged_powers(var/faculty) rebuild_power_cache() return ranged_powers[faculty] -/datum/psi_complexus/proc/get_grab_powers(var/faculty) +/datum/ability_handler/psionics/proc/get_grab_powers(var/faculty) rebuild_power_cache() return grab_powers[faculty] -/datum/psi_complexus/proc/get_manifestations() +/datum/ability_handler/psionics/proc/get_manifestations() rebuild_power_cache() return manifestation_powers diff --git a/mods/content/psionics/system/psionics/complexus/complexus_process.dm b/mods/content/psionics/system/psionics/complexus/complexus_process.dm index 8c93c36f919..80b07bfc9f2 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_process.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_process.dm @@ -1,4 +1,4 @@ -/datum/psi_complexus/proc/update(var/force) +/datum/ability_handler/psionics/proc/update(var/force) set waitfor = FALSE @@ -70,7 +70,7 @@ to_chat(owner, SPAN_NOTICE("Shift-left-click your Psi icon on the bottom right to view a summary of how to use them, or left click it to suppress or unsuppress your psionics. Beware: overusing your gifts can have deadly consequences.")) to_chat(owner, "
    ") -/datum/psi_complexus/Process() +/datum/ability_handler/psionics/Process() var/update_hud if(armor_cost) @@ -124,7 +124,7 @@ if(update_hud) ui.update_icon() -/datum/psi_complexus/proc/attempt_regeneration() +/datum/ability_handler/psionics/proc/attempt_regeneration() var/heal_general = FALSE var/heal_poison = FALSE @@ -241,8 +241,8 @@ // Heal everything left. if(heal_general && prob(mend_prob) && (owner.getBruteLoss() || owner.getFireLoss() || owner.getOxyLoss()) && spend_power(heal_rate)) - owner.adjustBruteLoss(-(heal_rate)) - owner.adjustFireLoss(-(heal_rate)) + owner.adjustBruteLoss(-(heal_rate), do_update_health = FALSE) + owner.adjustFireLoss(-(heal_rate), do_update_health = FALSE) owner.adjustOxyLoss(-(heal_rate)) if(prob(25)) to_chat(owner, SPAN_NOTICE("Your skin crawls as your autoredactive faculty heals your body.")) diff --git a/mods/content/psionics/system/psionics/complexus/complexus_topic.dm b/mods/content/psionics/system/psionics/complexus/complexus_topic.dm index ca890597928..592d019437f 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_topic.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_topic.dm @@ -1,14 +1,14 @@ -/datum/psi_complexus/CanUseTopic(var/mob/user, var/datum/topic_state/state = global.default_topic_state) +/datum/ability_handler/psionics/CanUseTopic(var/mob/user, var/datum/topic_state/state = global.default_topic_state) return (user.client && check_rights(R_ADMIN, FALSE, user.client)) -/datum/psi_complexus/Topic(var/href, var/list/href_list) +/datum/ability_handler/psionics/Topic(var/href, var/list/href_list) . = ..() if(!. && check_rights(R_ADMIN)) if(href_list["remove_psionics"]) - if(owner && owner.psi && owner.psi == src && !QDELETED(src)) + if(owner?.get_ability_handler(/datum/ability_handler/psionics) == src && !QDELETED(src)) log_and_message_admins("removed all psionics from [key_name(owner)].") to_chat(owner, SPAN_NOTICE("Your psionic powers vanish abruptly, leaving you cold and empty.")) - QDEL_NULL(owner.psi) + QDEL_NULL(src) . = TRUE if(href_list["trigger_psi_latencies"]) log_and_message_admins("triggered psi latencies for [key_name(owner)].") @@ -16,5 +16,5 @@ . = TRUE if(.) var/datum/admins/admin = global.admins[usr.key] - if(istype(admin)) + if(istype(admin)) admin.show_player_panel(owner) \ No newline at end of file diff --git a/mods/content/psionics/system/psionics/equipment/psipower.dm b/mods/content/psionics/system/psionics/equipment/psipower.dm index 7706f5fc465..69fa076708c 100644 --- a/mods/content/psionics/system/psionics/equipment/psipower.dm +++ b/mods/content/psionics/system/psionics/equipment/psipower.dm @@ -1,59 +1,37 @@ -/obj/item/psychic_power +/obj/item/ability/psionic name = "psychic power" icon = 'mods/content/psionics/icons/psychic_powers.dmi' - atom_flags = 0 - simulated = 1 - anchored = TRUE - - pickup_sound = null - drop_sound = null - equip_sound = null - - is_spawnable_type = FALSE - abstract_type = /obj/item/psychic_power - + abstract_type = /obj/item/ability/psionic + handler_type = /datum/ability_handler/psionics var/maintain_cost = 3 - var/mob/living/owner -/obj/item/psychic_power/Initialize() - owner = loc - if(!istype(owner)) - return INITIALIZE_HINT_QDEL - START_PROCESSING(SSprocessing, src) - return ..() +/obj/item/ability/psionic/Initialize() + . = ..() + if(. != INITIALIZE_HINT_QDEL) + START_PROCESSING(SSprocessing, src) -/obj/item/psychic_power/Destroy() - if(istype(owner) && owner.psi) - LAZYREMOVE(owner.psi.manifested_items, src) - UNSETEMPTY(owner.psi.manifested_items) +/obj/item/ability/psionic/Destroy() STOP_PROCESSING(SSprocessing, src) . = ..() -/obj/item/psychic_power/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/psychic_power/attack_self(var/mob/user) +/obj/item/ability/psionic/attack_self(var/mob/user) sound_to(owner, 'sound/effects/psi/power_fail.ogg') - user.drop_from_inventory(src) + . = ..() -/obj/item/psychic_power/attack(var/mob/living/M, var/mob/living/user, var/target_zone) +/obj/item/ability/psionic/attack(var/mob/living/M, var/mob/living/user, var/target_zone) if(M.do_psionics_check(max(force, maintain_cost), user)) - to_chat(user, "\The [src] flickers violently out of phase!") - return 1 + to_chat(user, SPAN_WARNING("\The [src] flickers violently out of phase!")) + return TRUE . = ..() -/obj/item/psychic_power/afterattack(var/atom/target, var/mob/living/user, var/proximity) +/obj/item/ability/psionic/afterattack(var/atom/target, var/mob/living/user, var/proximity) if(target.do_psionics_check(max(force, maintain_cost), user)) - to_chat(user, "\The [src] flickers violently out of phase!") - return + to_chat(user, SPAN_WARNING("\The [src] flickers violently out of phase!")) + return TRUE . = ..(target, user, proximity) -/obj/item/psychic_power/dropped() - ..() - qdel(src) - -/obj/item/psychic_power/Process() - if(istype(owner)) - owner.psi.spend_power(maintain_cost, backblast_on_failure = FALSE) +/obj/item/ability/psionic/Process() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + psi?.spend_power(maintain_cost, backblast_on_failure = FALSE) if((!owner || owner.do_psionics_check(maintain_cost, owner) || loc != owner || !(src in owner.get_held_items())) && !QDELETED(src)) qdel(src) diff --git a/mods/content/psionics/system/psionics/equipment/psipower_blade.dm b/mods/content/psionics/system/psionics/equipment/psipower_blade.dm index e89c668a4a2..87121dbae0c 100644 --- a/mods/content/psionics/system/psionics/equipment/psipower_blade.dm +++ b/mods/content/psionics/system/psionics/equipment/psipower_blade.dm @@ -1,4 +1,4 @@ -/obj/item/psychic_power/psiblade +/obj/item/ability/psionic/psiblade name = "psychokinetic slash" force = 10 sharp = 1 @@ -6,22 +6,22 @@ maintain_cost = 1 icon_state = "psiblade_short" -/obj/item/psychic_power/psiblade/master +/obj/item/ability/psionic/psiblade/master force = 20 maintain_cost = 2 -/obj/item/psychic_power/psiblade/master/is_special_cutting_tool(var/high_power) +/obj/item/ability/psionic/psiblade/master/is_special_cutting_tool(var/high_power) return !high_power -/obj/item/psychic_power/psiblade/master/grand +/obj/item/ability/psionic/psiblade/master/grand force = 30 maintain_cost = 3 icon_state = "psiblade_long" -/obj/item/psychic_power/psiblade/master/grand/paramount +/obj/item/ability/psionic/psiblade/master/grand/paramount force = 50 maintain_cost = 4 icon_state = "psiblade_long" -/obj/item/psychic_power/psiblade/master/grand/paramount/is_special_cutting_tool(var/high_power) +/obj/item/ability/psionic/psiblade/master/grand/paramount/is_special_cutting_tool(var/high_power) return TRUE \ No newline at end of file diff --git a/mods/content/psionics/system/psionics/equipment/psipower_tinker.dm b/mods/content/psionics/system/psionics/equipment/psipower_tinker.dm index b9833a6cac3..bf945c82f53 100644 --- a/mods/content/psionics/system/psionics/equipment/psipower_tinker.dm +++ b/mods/content/psionics/system/psionics/equipment/psipower_tinker.dm @@ -1,15 +1,16 @@ -/obj/item/psychic_power/tinker +/obj/item/ability/psionic/tinker name = "psychokinetic tool" icon_state = "tinker" force = 1 -/obj/item/psychic_power/tinker/Initialize() +/obj/item/ability/psionic/tinker/Initialize() . = ..() var/use_tool_quality = TOOL_QUALITY_WORST var/mob/living/owner = loc - if(istype(owner) && owner.psi) - switch(owner.psi.get_rank(PSI_PSYCHOKINESIS)) + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(psi) + switch(psi.get_rank(PSI_PSYCHOKINESIS)) if(PSI_RANK_LATENT) use_tool_quality = TOOL_QUALITY_BAD if(PSI_RANK_OPERANT) @@ -21,7 +22,7 @@ if(PSI_RANK_PARAMOUNT) use_tool_quality = TOOL_QUALITY_BEST - set_extension(src, /datum/extension/tool/variable, + set_extension(src, /datum/extension/tool/variable, list( TOOL_CROWBAR = use_tool_quality, TOOL_SCREWDRIVER = use_tool_quality, @@ -37,7 +38,7 @@ ) ) -/obj/item/psychic_power/tinker/on_update_icon() +/obj/item/ability/psionic/tinker/on_update_icon() . = ..() var/datum/extension/tool/variable/tool = get_extension(src, /datum/extension/tool) if(istype(tool)) diff --git a/mods/content/psionics/system/psionics/equipment/psipower_tk.dm b/mods/content/psionics/system/psionics/equipment/psipower_tk.dm index ae4fba11eb5..787d2a59050 100644 --- a/mods/content/psionics/system/psionics/equipment/psipower_tk.dm +++ b/mods/content/psionics/system/psionics/equipment/psipower_tk.dm @@ -1,20 +1,21 @@ -/obj/item/psychic_power/telekinesis +/obj/item/ability/psionic/telekinesis name = "telekinetic grip" maintain_cost = 3 icon_state = "telekinesis" var/atom/movable/focus -/obj/item/psychic_power/telekinesis/Destroy() +/obj/item/ability/psionic/telekinesis/Destroy() focus = null . = ..() -/obj/item/psychic_power/telekinesis/Process() - if(!focus || !isturf(focus.loc) || get_dist(get_turf(focus), get_turf(owner)) > owner.psi.get_rank(PSI_PSYCHOKINESIS)) +/obj/item/ability/psionic/telekinesis/Process() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(!focus || !isturf(focus.loc) || get_dist(get_turf(focus), get_turf(owner)) > psi?.get_rank(PSI_PSYCHOKINESIS)) owner.drop_from_inventory(src) return . = ..() -/obj/item/psychic_power/telekinesis/proc/set_focus(var/atom/movable/_focus) +/obj/item/ability/psionic/telekinesis/proc/set_focus(var/atom/movable/_focus) if(!_focus.simulated || !isturf(_focus.loc)) return FALSE @@ -29,7 +30,8 @@ else return FALSE - if(_focus.anchored || (check_paramount && owner.psi.get_rank(PSI_PSYCHOKINESIS) < PSI_RANK_PARAMOUNT)) + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(_focus.anchored || (check_paramount && psi?.get_rank(PSI_PSYCHOKINESIS) < PSI_RANK_PARAMOUNT)) focus = _focus . = attack_self(owner) if(!.) @@ -45,18 +47,19 @@ overlays += I return TRUE -/obj/item/psychic_power/telekinesis/attack_self(var/mob/user) +/obj/item/ability/psionic/telekinesis/attack_self(var/mob/user) user.visible_message(SPAN_NOTICE("\The [user] makes a strange gesture.")) sparkle() return focus.do_simple_ranged_interaction(user) -/obj/item/psychic_power/telekinesis/afterattack(var/atom/target, var/mob/living/user, var/proximity) +/obj/item/ability/psionic/telekinesis/afterattack(var/atom/target, var/mob/living/user, var/proximity) - if(!target || !user || (isobj(target) && !isturf(target.loc)) || !user.psi || !user.psi.can_use() || !user.psi.spend_power(5)) + var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) + if(!target || !user || (isobj(target) && !isturf(target.loc)) || !psi?.can_use() || !psi?.spend_power(5)) return user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.psi.set_cooldown(5) + psi.set_cooldown(5) var/user_psi_leech = user.do_psionics_check(5, user) if(user_psi_leech) @@ -68,7 +71,7 @@ return var/distance = get_dist(get_turf(user), get_turf(focus ? focus : target)) - if(distance > user.psi.get_rank(PSI_PSYCHOKINESIS)) + if(distance > psi.get_rank(PSI_PSYCHOKINESIS)) to_chat(user, SPAN_WARNING("Your telekinetic power won't reach that far.")) return FALSE @@ -84,12 +87,12 @@ I.afterattack(target,user,1) // for splashing with beakers else if(!focus.anchored) - var/user_rank = owner.psi.get_rank(PSI_PSYCHOKINESIS) + var/user_rank = psi?.get_rank(PSI_PSYCHOKINESIS) focus.throw_at(target, user_rank*2, user_rank*10, owner) sleep(1) sparkle() -/obj/item/psychic_power/telekinesis/proc/sparkle() +/obj/item/ability/psionic/telekinesis/proc/sparkle() set waitfor = 0 if(focus) var/obj/effect/overlay/O = new /obj/effect/overlay(get_turf(focus)) diff --git a/mods/content/psionics/system/psionics/events/_psi.dm b/mods/content/psionics/system/psionics/events/_psi.dm index 90c0f63733e..6f873409296 100644 --- a/mods/content/psionics/system/psionics/events/_psi.dm +++ b/mods/content/psionics/system/psionics/events/_psi.dm @@ -20,5 +20,5 @@ for(var/thing in SSpsi.processing) apply_psi_effect(thing) -/datum/event/psi/proc/apply_psi_effect(var/datum/psi_complexus/psi) +/datum/event/psi/proc/apply_psi_effect(var/datum/ability_handler/psionics/psi) return diff --git a/mods/content/psionics/system/psionics/events/mini_spasm.dm b/mods/content/psionics/system/psionics/events/mini_spasm.dm index 9473db7d4c4..19da88eb845 100644 --- a/mods/content/psionics/system/psionics/events/mini_spasm.dm +++ b/mods/content/psionics/system/psionics/events/mini_spasm.dm @@ -41,9 +41,10 @@ if(disabilities.len) victim.disabilities |= pick(disabilities) - if(victim.psi) + var/datum/ability_handler/psionics/psi = victim.get_ability_handler(/datum/ability_handler/psionics) + if(psi) to_chat(victim, SPAN_DANGER("A hauntingly familiar sound hisses from [html_icon(source)] \the [source], and your vision flickers!")) - victim.psi.backblast(rand(5,15)) + psi.backblast(rand(5,15)) SET_STATUS_MAX(victim, STAT_PARA, 5) ADJ_STATUS(victim, STAT_JITTER, 100) else @@ -56,9 +57,10 @@ victim.adjustBrainLoss(rand(10,20)) victim.set_psi_rank(pick_n_take(faculties), 1) sleep(30) - victim.psi.update() + psi = victim.get_ability_handler(/datum/ability_handler/psionics) + psi?.update() sleep(45) - victim.psi.check_latency_trigger(100, "a psionic scream", redactive = TRUE) + psi?.check_latency_trigger(100, "a psionic scream", redactive = TRUE) /datum/event/minispasm/end() priority_announcement.Announce( \ diff --git a/mods/content/psionics/system/psionics/events/psi_balm.dm b/mods/content/psionics/system/psionics/events/psi_balm.dm index 39032bb97ff..3769ec9f1ea 100644 --- a/mods/content/psionics/system/psionics/events/psi_balm.dm +++ b/mods/content/psionics/system/psionics/events/psi_balm.dm @@ -5,7 +5,7 @@ "A sense of peace and comfort falls over you like a warm blanket." ) -/datum/event/psi/balm/apply_psi_effect(var/datum/psi_complexus/psi) +/datum/event/psi/balm/apply_psi_effect(var/datum/ability_handler/psionics/psi) var/soothed if(psi.stun > 1) psi.stun-- diff --git a/mods/content/psionics/system/psionics/events/psi_wail.dm b/mods/content/psionics/system/psionics/events/psi_wail.dm index 7951dc9a228..b1ee14e64f5 100644 --- a/mods/content/psionics/system/psionics/events/psi_wail.dm +++ b/mods/content/psionics/system/psionics/events/psi_wail.dm @@ -5,7 +5,7 @@ "Your head aches as a psychic wail intrudes on your psyche." ) -/datum/event/psi/wail/apply_psi_effect(var/datum/psi_complexus/psi) +/datum/event/psi/wail/apply_psi_effect(var/datum/ability_handler/psionics/psi) var/annoyed if(prob(1)) psi.stunned(1) diff --git a/mods/content/psionics/system/psionics/faculties/_power.dm b/mods/content/psionics/system/psionics/faculties/_power.dm index d39f71ebcbf..75c6c5ab05d 100644 --- a/mods/content/psionics/system/psionics/faculties/_power.dm +++ b/mods/content/psionics/system/psionics/faculties/_power.dm @@ -17,15 +17,16 @@ /decl/psionic_power/proc/invoke(var/mob/living/user, var/atom/target) - if(!user.psi) + var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) + if(!psi) return FALSE if(faculty && min_rank) - var/user_rank = user.psi.get_rank(faculty) + var/user_rank = psi.get_rank(faculty) if(user_rank < min_rank) return FALSE - if(cost && !user.psi.spend_power(cost)) + if(cost && !psi.spend_power(cost)) return FALSE var/user_psi_leech = user.do_psionics_check(cost, user) @@ -41,7 +42,8 @@ /decl/psionic_power/proc/handle_post_power(var/mob/living/user, var/atom/target) if(cooldown) - user.psi.set_cooldown(cooldown) + var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) + psi?.set_cooldown(cooldown) if(admin_log && ismob(user) && ismob(target)) admin_attack_log(user, target, "Used psipower ([name])", "Was subjected to a psipower ([name])", "used a psipower ([name]) on") if(use_sound) diff --git a/mods/content/psionics/system/psionics/faculties/coercion.dm b/mods/content/psionics/system/psionics/faculties/coercion.dm index defb0df4012..b21fba16e60 100644 --- a/mods/content/psionics/system/psionics/faculties/coercion.dm +++ b/mods/content/psionics/system/psionics/faculties/coercion.dm @@ -32,9 +32,10 @@ return FALSE . = ..() if(.) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) user.visible_message(SPAN_DANGER("\The [user] suddenly throws back their head, as though screaming silently!")) to_chat(user, SPAN_DANGER("You strike at all around you with a deafening psionic scream!")) - for(var/mob/living/M in orange(user, user.psi.get_rank(PSI_COERCION))) + for(var/mob/living/M in orange(user, psi?.get_rank(PSI_COERCION))) if(M == user) continue var/blocked = 100 * M.get_blocked_ratio(null, PSIONIC) @@ -44,7 +45,7 @@ if(prob(60) && iscarbon(M)) var/mob/living/carbon/C = M if(C.can_feel_pain()) - M.emote("scream") + M.emote(/decl/emote/audible/scream) to_chat(M, SPAN_DANGER("Your senses are blasted into oblivion by a psionic scream!")) M.flash_eyes() SET_STATUS_MAX(M, STAT_BLIND, 3) @@ -131,7 +132,7 @@ to_chat(user, "You lash out, stabbing into \the [target] with a lance of psi-power.") to_chat(target, "The muscles in your arms cramp horrendously!") if(prob(75)) - target.emote("scream") + target.emote(/decl/emote/audible/scream) for(var/hand_slot in target.get_held_item_slots()) var/obj/item/thing = target.get_equipped_item(hand_slot) if(thing?.simulated && prob(75) && target.try_unequip(thing)) @@ -209,7 +210,8 @@ to_chat(user, SPAN_NOTICE("You insinuate your mentality into that of \the [target]...")) to_chat(target, SPAN_WARNING("Your persona is being probed by the psychic lens of \the [user].")) if(!do_after(user, (target.stat == CONSCIOUS ? 50 : 25), target, 0, 1)) - user.psi.backblast(rand(5,10)) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + psi?.backblast(rand(5,10)) return TRUE to_chat(user, SPAN_NOTICE("You retreat from \the [target], holding your new knowledge close.")) to_chat(target, SPAN_DANGER("Your mental complexus is laid bare to judgement of \the [user].")) @@ -229,16 +231,17 @@ return FALSE . = ..() if(.) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) user.visible_message(SPAN_WARNING("\The [user] holds the head of \the [target] in both hands...")) - to_chat(user, SPAN_NOTICE("You probe \the [target]'s mind for various ailments..")) + to_chat(user, SPAN_NOTICE("You probe \the [target]'s mind for various ailments...")) to_chat(target, SPAN_WARNING("Your mind is being cleansed of ailments by \the [user].")) if(!do_after(user, (target.stat == CONSCIOUS ? 50 : 25), target, 0, 1)) - user.psi.backblast(rand(5,10)) + psi?.backblast(rand(5,10)) return TRUE to_chat(user, SPAN_WARNING("You clear \the [target]'s mind of ailments.")) to_chat(target, SPAN_WARNING("Your mind is cleared of ailments.")) - var/coercion_rank = user.psi.get_rank(PSI_COERCION) + var/coercion_rank = psi?.get_rank(PSI_COERCION) if(coercion_rank >= PSI_RANK_GRANDMASTER) ADJ_STATUS(target, STAT_PARA, -1) target.set_status(STAT_DROWSY, 0) diff --git a/mods/content/psionics/system/psionics/faculties/energistics.dm b/mods/content/psionics/system/psionics/faculties/energistics.dm index 227ebcf77c7..3552758d428 100644 --- a/mods/content/psionics/system/psionics/faculties/energistics.dm +++ b/mods/content/psionics/system/psionics/faculties/energistics.dm @@ -67,7 +67,8 @@ if(.) user.visible_message("\The [user]'s eyes flare with light!") - var/user_rank = user.psi.get_rank(faculty) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + var/user_rank = psi?.get_rank(faculty) var/obj/item/projectile/pew var/pew_sound diff --git a/mods/content/psionics/system/psionics/faculties/psychokinesis.dm b/mods/content/psionics/system/psionics/faculties/psychokinesis.dm index 1d2347f5044..8ab5976c74f 100644 --- a/mods/content/psionics/system/psionics/faculties/psychokinesis.dm +++ b/mods/content/psionics/system/psionics/faculties/psychokinesis.dm @@ -23,15 +23,16 @@ return FALSE . = ..() if(.) - switch(user.psi.get_rank(faculty)) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + switch(psi?.get_rank(faculty)) if(PSI_RANK_PARAMOUNT) - return new /obj/item/psychic_power/psiblade/master/grand/paramount(user, user) + return new /obj/item/ability/psionic/psiblade/master/grand/paramount(user, user) if(PSI_RANK_GRANDMASTER) - return new /obj/item/psychic_power/psiblade/master/grand(user, user) + return new /obj/item/ability/psionic/psiblade/master/grand(user, user) if(PSI_RANK_MASTER) - return new /obj/item/psychic_power/psiblade/master(user, user) + return new /obj/item/ability/psionic/psiblade/master(user, user) else - return new /obj/item/psychic_power/psiblade(user, user) + return new /obj/item/ability/psionic/psiblade(user, user) /decl/psionic_power/psychokinesis/tinker name = "Tinker" @@ -46,7 +47,7 @@ return FALSE . = ..() if(.) - return new /obj/item/psychic_power/tinker(user) + return new /obj/item/ability/psionic/tinker(user) /decl/psionic_power/psychokinesis/telekinesis name = "Telekinesis" @@ -69,12 +70,13 @@ if(.) var/distance = get_dist(user, target) - if(distance > user.psi.get_rank(PSI_PSYCHOKINESIS)) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + if(distance > psi?.get_rank(PSI_PSYCHOKINESIS)) to_chat(user, "Your telekinetic power won't reach that far.") return FALSE if(ismob(target) || istype(target, /obj)) - var/obj/item/psychic_power/telekinesis/tk = new(user) + var/obj/item/ability/psionic/telekinesis/tk = new(user) if(tk.set_focus(target)) tk.sparkle() user.visible_message(SPAN_NOTICE("\The [user] reaches out.")) diff --git a/mods/content/psionics/system/psionics/faculties/redaction.dm b/mods/content/psionics/system/psionics/faculties/redaction.dm index 2fb94d15442..052bbf3ce3e 100644 --- a/mods/content/psionics/system/psionics/faculties/redaction.dm +++ b/mods/content/psionics/system/psionics/faculties/redaction.dm @@ -64,8 +64,9 @@ user.visible_message(SPAN_NOTICE("\The [user] rests a hand on \the [target]'s [E.name]...")) to_chat(target, SPAN_NOTICE("A healing warmth suffuses you.")) - var/redaction_rank = user.psi.get_rank(PSI_REDACTION) - var/pk_rank = user.psi.get_rank(PSI_PSYCHOKINESIS) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + var/redaction_rank = psi?.get_rank(PSI_REDACTION) + var/pk_rank = psi?.get_rank(PSI_PSYCHOKINESIS) if(pk_rank >= PSI_RANK_LATENT && redaction_rank >= PSI_RANK_MASTER) var/removal_size = clamp(5-pk_rank, 0, 5) var/valid_objects = list() @@ -177,7 +178,8 @@ user.visible_message(SPAN_NOTICE("\The [user] splays out their hands over \the [target]'s body...")) if(!do_after(user, 100, target, 0, 1)) - user.psi.backblast(rand(10,25)) + var/datum/ability_handler/psionics/psi = user?.get_ability_handler(/datum/ability_handler/psionics) + psi?.backblast(rand(10,25)) return TRUE for(var/mob/observer/G in global.dead_mob_list_) diff --git a/mods/content/psionics/system/psionics/interface/ui.dm b/mods/content/psionics/system/psionics/interface/ui.dm index ffd6aec4b90..4e8adfa83bd 100644 --- a/mods/content/psionics/system/psionics/interface/ui.dm +++ b/mods/content/psionics/system/psionics/interface/ui.dm @@ -1,19 +1,12 @@ /obj/screen/psi icon = 'mods/content/psionics/icons/psi.dmi' - var/mob/living/owner + requires_ui_style = FALSE var/hidden = TRUE -/obj/screen/psi/Initialize(var/ml, var/mob/_owner) +/obj/screen/psi/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat) . = ..() - owner = _owner - forceMove(null) update_icon() -/obj/screen/psi/Destroy() - if(owner && owner.client) - owner.client.screen -= src - . = ..() - /obj/screen/psi/on_update_icon() if(hidden) set_invisibility(INVISIBILITY_ABSTRACT) diff --git a/mods/content/psionics/system/psionics/interface/ui_hub.dm b/mods/content/psionics/system/psionics/interface/ui_hub.dm index b72ce944be8..cd87e528211 100644 --- a/mods/content/psionics/system/psionics/interface/ui_hub.dm +++ b/mods/content/psionics/system/psionics/interface/ui_hub.dm @@ -5,25 +5,24 @@ hidden = FALSE maptext_x = 6 maptext_y = -8 + requires_ui_style = FALSE var/image/on_cooldown var/list/components -/obj/screen/psi/hub/Initialize() +/obj/screen/psi/hub/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat) . = ..() on_cooldown = image(icon, "cooldown") components = list( - new /obj/screen/psi/armour(loc, owner), - new /obj/screen/psi/toggle_psi_menu(loc, owner, src) - ) + new /obj/screen/psi/armour(null, _owner), + new /obj/screen/psi/toggle_psi_menu(null, _owner, null, null, null, null, src) + ) START_PROCESSING(SSprocessing, src) /obj/screen/psi/hub/on_update_icon() - - if(!owner.psi) - return - - icon_state = owner.psi.suppressed ? "psi_suppressed" : "psi_active" - if(world.time < owner.psi.next_power_use) + var/mob/living/owner = owner_ref?.resolve() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + icon_state = psi?.suppressed ? "psi_suppressed" : "psi_active" + if(world.time < psi?.next_power_use) overlays |= on_cooldown else overlays.Cut() @@ -35,37 +34,44 @@ /obj/screen/psi/hub/Destroy() STOP_PROCESSING(SSprocessing, src) - owner = null for(var/thing in components) qdel(thing) components.Cut() . = ..() /obj/screen/psi/hub/Process() + var/mob/living/owner = owner_ref?.resolve() if(!istype(owner)) qdel(src) return - if(!owner.psi) + var/datum/ability_handler/psionics/psi = owner.get_ability_handler(/datum/ability_handler/psionics) + if(!psi) return - maptext = "[round((owner.psi.stamina/owner.psi.max_stamina)*100)]%" + maptext = "[round((psi.stamina/psi.max_stamina)*100)]%" update_icon() -/obj/screen/psi/hub/Click(var/location, var/control, var/params) +/obj/screen/psi/hub/handle_click(mob/user, params) + + var/mob/living/owner = owner_ref?.resolve() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(!psi) + return + var/list/click_params = params2list(params) if(click_params["shift"]) owner.show_psi_assay(owner) return - if(owner.psi.suppressed && owner.psi.stun) + if(psi.suppressed && psi.stun) to_chat(owner, "You are dazed and reeling, and cannot muster enough focus to do that!") return - owner.psi.suppressed = !owner.psi.suppressed - to_chat(owner, "You are [owner.psi.suppressed ? "now suppressing" : "no longer suppressing"] your psi-power.") - if(owner.psi.suppressed) - owner.psi.cancel() - owner.psi.hide_auras() + psi.suppressed = !psi.suppressed + to_chat(owner, "You are [psi?.suppressed ? "now suppressing" : "no longer suppressing"] your psi-power.") + if(psi.suppressed) + psi.cancel() + psi.hide_auras() else sound_to(owner, sound('sound/effects/psi/power_unlock.ogg')) - owner.psi.show_auras() - update_icon() \ No newline at end of file + psi.show_auras() + update_icon() diff --git a/mods/content/psionics/system/psionics/interface/ui_toggles.dm b/mods/content/psionics/system/psionics/interface/ui_toggles.dm index 91882159eb3..5585ac5d802 100644 --- a/mods/content/psionics/system/psionics/interface/ui_toggles.dm +++ b/mods/content/psionics/system/psionics/interface/ui_toggles.dm @@ -5,14 +5,18 @@ /obj/screen/psi/armour/on_update_icon() ..() - if(invisibility == 0) - icon_state = owner?.psi.use_psi_armour ? "psiarmour_on" : "psiarmour_off" + var/mob/living/owner = owner_ref.resolve() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(psi && invisibility == 0) + icon_state = psi.use_psi_armour ? "psiarmour_on" : "psiarmour_off" -/obj/screen/psi/armour/Click() - if(!owner?.psi) +/obj/screen/psi/armour/handle_click(mob/user, params) + var/mob/living/owner = owner_ref?.resolve() + var/datum/ability_handler/psionics/psi = istype(owner) && owner.get_ability_handler(/datum/ability_handler/psionics) + if(!psi) return - owner.psi.use_psi_armour = !owner.psi.use_psi_armour - if(owner.psi.use_psi_armour) + psi.use_psi_armour = !psi.use_psi_armour + if(psi.use_psi_armour) to_chat(owner, SPAN_NOTICE("You will now use your psionics to deflect or block incoming attacks.")) else to_chat(owner, SPAN_NOTICE("You will no longer use your psionics to deflect or block incoming attacks.")) @@ -24,13 +28,14 @@ /obj/screen/psi/toggle_psi_menu name = "Show/Hide Psi UI" icon_state = "arrow_left" + requires_ui_style = FALSE var/obj/screen/psi/hub/controller -/obj/screen/psi/toggle_psi_menu/Initialize(mapload, var/mob/_owner, var/obj/screen/psi/hub/_controller) - . = ..(mapload, _owner) +/obj/screen/psi/toggle_psi_menu/Initialize(mapload, mob/_owner, ui_style, ui_color, ui_alpha, ui_cat, obj/screen/psi/hub/_controller) + . = ..() controller = _controller -/obj/screen/psi/toggle_psi_menu/Click() +/obj/screen/psi/toggle_psi_menu/handle_click(mob/user, params) var/set_hidden = !hidden for(var/thing in controller.components) var/obj/screen/psi/psi = thing diff --git a/mods/content/psionics/system/psionics/mob/borer_power.dm b/mods/content/psionics/system/psionics/mob/borer_power.dm index 9be9224786d..4e17326877f 100644 --- a/mods/content/psionics/system/psionics/mob/borer_power.dm +++ b/mods/content/psionics/system/psionics/mob/borer_power.dm @@ -16,11 +16,11 @@ M.Scale(0.33) aura_image.transform = M -/mob/living/simple_animal/borer/death(gibbed, deathmessage, show_dead_message) - if(aura_image) +/mob/living/simple_animal/borer/death(gibbed) + . = ..() + if(. && aura_image) destroy_aura_image(aura_image) aura_image = null - . = ..() /mob/living/simple_animal/borer/Destroy() if(aura_image) diff --git a/mods/content/psionics/system/psionics/mob/mob.dm b/mods/content/psionics/system/psionics/mob/mob.dm index da28c017a30..771c88d55b6 100644 --- a/mods/content/psionics/system/psionics/mob/mob.dm +++ b/mods/content/psionics/system/psionics/mob/mob.dm @@ -1,26 +1,24 @@ -/mob/living - var/datum/psi_complexus/psi +/datum/ability_handler/psionics/refresh_login() + update(TRUE) + if(!suppressed) + show_auras() -/mob/living/Login() - . = ..() - if(psi) - psi.update(TRUE) - if(!psi.suppressed) - psi.show_auras() +/mob/proc/set_psi_rank(var/faculty, var/rank, var/take_larger, var/defer_update, var/temporary) + return -/mob/living/Destroy() - QDEL_NULL(psi) - . = ..() - -/mob/living/proc/set_psi_rank(var/faculty, var/rank, var/take_larger, var/defer_update, var/temporary) +/mob/living/set_psi_rank(var/faculty, var/rank, var/take_larger, var/defer_update, var/temporary) if(!get_target_zone()) // Can't target a zone, so you can't really invoke psionics. to_chat(src, SPAN_NOTICE("You feel something strange brush against your mind... but your brain is not able to grasp it.")) return - if(!psi) - psi = new(src) - var/current_rank = psi.get_rank(faculty) + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) + var/current_rank = psi?.get_rank(faculty) + if(!current_rank && !rank) + return if(current_rank != rank && (!take_larger || current_rank < rank)) - psi.set_rank(faculty, rank, defer_update, temporary) + if(!psi && rank) + psi = get_ability_handler(/datum/ability_handler/psionics, TRUE) + if(psi) + psi.set_rank(faculty, rank, defer_update, temporary) /mob/living/proc/deflect_psionic_attack(var/attacker) var/blocked = 100 * get_blocked_ratio(null, PSIONIC) @@ -33,6 +31,7 @@ /mob/living/carbon/human/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") var/obj/item/projectile/P = damage_source + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(istype(P) && !P.disrupts_psionics() && psi && P.starting && prob(psi.get_armour(SSmaterials.get_armor_key(P.damage_type, P.damage_flags())) * 0.5) && psi.spend_power(round(damage/10))) visible_message("\The [src] deflects [attack_text]!") P.redirect(P.starting.x + rand(-2,2), P.starting.y + rand(-2,2), get_turf(src), src) @@ -41,21 +40,26 @@ /mob/living/carbon/get_cuff_breakout_mod() . = ..() + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(psi) . = clamp(. - (psi.get_rank(PSI_PSYCHOKINESIS)*0.2), 0, 1) /mob/living/can_break_cuffs() + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) . = (psi && psi.can_use() && psi.get_rank(PSI_PSYCHOKINESIS) >= PSI_RANK_PARAMOUNT) /mob/living/carbon/get_special_resist_time() . = ..() + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(psi && psi.can_use()) . += ((25 SECONDS) * psi.get_rank(PSI_PSYCHOKINESIS)) /mob/living/is_telekinetic() + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) . = psi && !psi.suppressed && psi.get_rank(PSI_PSYCHOKINESIS) >= PSI_RANK_OPERANT /mob/living/get_armors_by_zone(def_zone, damage_type, damage_flags) . = ..() + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(psi) . += get_extension(psi, /datum/extension/armor) diff --git a/mods/content/psionics/system/psionics/mob/mob_assay.dm b/mods/content/psionics/system/psionics/mob/mob_assay.dm index 399f6681d1a..c0b05f74596 100644 --- a/mods/content/psionics/system/psionics/mob/mob_assay.dm +++ b/mods/content/psionics/system/psionics/mob/mob_assay.dm @@ -14,6 +14,7 @@ dat += "

    Summary

    " dat += "
    " + var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(psi) // Hi Warhammer 40k rating system, how are you? @@ -31,8 +32,8 @@ // This space intentionally left blank (for Omega-Minus psi vampires. todo) var/decl/special_role/beguiled/beguiled = GET_DECL(/decl/special_role/beguiled) if(viewer != usr && beguiled.is_antagonist(mind) && ishuman(viewer)) - var/mob/living/H = viewer - if(H.psi && H.psi.get_rank(PSI_REDACTION) >= PSI_RANK_GRANDMASTER) + var/datum/ability_handler/psionics/viewer_psi = viewer.get_ability_handler(/datum/ability_handler/psionics) + if(viewer_psi && viewer_psi.get_rank(PSI_REDACTION) >= PSI_RANK_GRANDMASTER) dat += "Their mind has been subverted by another operant psychic; their actions are not their own." if(!use_rating) diff --git a/mods/content/psionics/system/psionics/mob/mob_interactions.dm b/mods/content/psionics/system/psionics/mob/mob_interactions.dm index f19c6043d43..481860830cf 100644 --- a/mods/content/psionics/system/psionics/mob/mob_interactions.dm +++ b/mods/content/psionics/system/psionics/mob/mob_interactions.dm @@ -1,37 +1,30 @@ -#define INVOKE_PSI_POWERS(holder, powers, target, return_on_invocation) \ - if(holder && holder.psi && holder.psi.can_use()) { \ - for(var/thing in powers) { \ - var/decl/psionic_power/power = thing; \ - var/obj/item/result = power.invoke(holder, target); \ - if(result) { \ - power.handle_post_power(holder, target); \ - if(istype(result)) { \ - sound_to(holder, sound('sound/effects/psi/power_evoke.ogg')); \ - LAZYADD(holder.psi.manifested_items, result); \ - holder.put_in_hands(result); \ - } \ - return return_on_invocation; \ - } \ - } \ - } +#define INVOKE_PSI_POWERS(holder, powers, target) \ + if(can_use()) { \ + for(var/decl/psionic_power/power as anything in powers) { \ + var/obj/item/result = power.invoke(user, target); \ + if(result) { \ + power.handle_post_power(user, target); \ + if(istype(result)) { \ + sound_to(user, sound('sound/effects/psi/power_evoke.ogg')); \ + LAZYADD(ability_items, result); \ + user.put_in_hands(result); \ + } \ + return TRUE; \ + } \ + } \ + } \ + return FALSE; -/mob/living/UnarmedAttack(var/atom/A, var/proximity) - . = ..() - if(. && psi) - INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A, FALSE) +/datum/ability_handler/psionics/do_self_invocation(mob/user) + INVOKE_PSI_POWERS(user, get_manifestations(), user) -/mob/living/RangedAttack(var/atom/A, var/params) - if(psi) - INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A, TRUE) - . = ..() +/datum/ability_handler/psionics/do_grabbed_invocation(mob/user, atom/target) + INVOKE_PSI_POWERS(user, get_grab_powers(SSpsi.faculties_by_intent[user.a_intent]), target) -/mob/living/proc/check_psi_grab(var/obj/item/grab/grab) - if(psi && ismob(grab.affecting)) - INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting, FALSE) +/datum/ability_handler/psionics/do_melee_invocation(mob/user, atom/target) + INVOKE_PSI_POWERS(user, get_melee_powers(SSpsi.faculties_by_intent[user.a_intent]), target) -/mob/living/attack_empty_hand() - if(psi) - INVOKE_PSI_POWERS(src, psi.get_manifestations(), src, FALSE) - . = ..() +/datum/ability_handler/psionics/do_ranged_invocation(mob/user, atom/target) + INVOKE_PSI_POWERS(user, get_ranged_powers(SSpsi.faculties_by_intent[user.a_intent]), target) #undef INVOKE_PSI_POWERS \ No newline at end of file diff --git a/mods/content/psionics/system/psionics/null/material.dm b/mods/content/psionics/system/psionics/null/material.dm index a659a0f9089..1402d74c4df 100644 --- a/mods/content/psionics/system/psionics/null/material.dm +++ b/mods/content/psionics/system/psionics/null/material.dm @@ -23,12 +23,8 @@ exoplanet_rarity_gas = MAT_RARITY_EXOTIC uid = "solid_nullglass" -/decl/material/nullglass/generate_recipes() - . = ..() - . += new /datum/stack_recipe/tile/nullglass(src) - /obj/item/shard/nullglass material = MAT_NULLGLASS -/datum/stack_recipe/tile/nullglass - title = "nullglass floor tile" +/decl/stack_recipe/tile/nullglass + name = "nullglass floor tile" result_type = /obj/item/stack/tile/floor_nullglass diff --git a/mods/content/scaling_descriptors.dm b/mods/content/scaling_descriptors.dm index f33d4a88503..ce15fe9555d 100644 --- a/mods/content/scaling_descriptors.dm +++ b/mods/content/scaling_descriptors.dm @@ -1,39 +1,66 @@ -/mob/living/carbon/human/get_icon_scale_mult() - . = ..() - if(LAZYLEN(appearance_descriptors)) - var/modify_x = 1 - var/modify_y = 1 - for(var/entry in appearance_descriptors) - var/datum/appearance_descriptor/descriptor = species.appearance_descriptors[entry] - var/list/new_scale_info = descriptor.get_mob_scale_adjustments(appearance_descriptors[entry]) - if(length(new_scale_info)) - modify_x += new_scale_info[1] - modify_y += new_scale_info[2] - .[1] *= modify_x - .[2] *= modify_y - // These values were reverse-engineered from Polaris, where they apparently // took quite a lot of fiddling to get looking nice. Cheers to whoever did that. -/datum/appearance_descriptor/height/get_mob_scale_adjustments(var/offset_value) +/decl/bodytype + var/list/scaling_adjustments_x = list( + -0.095, + -0.055, + 0, + 0.054, + 0.095, + ) + var/list/scaling_adjustments_y = list( + -0.085, + -0.05, + 0, + 0.05, + 0.09, + ) + +/decl/bodytype/validate() + . = ..() + + if(scaling_adjustments_x) + if(!islist(scaling_adjustments_x)) + . += "non-list value for width scaling modifiers" + else if(length(scaling_adjustments_x) < 5) + . += "insufficient scaling values for width scaling." + else + for(var/value in scaling_adjustments_x) + if(!isnum(value)) + . += "non-numeric value in width scaling list: '[isnull(value) ? "NULL" : value]'" + + if(scaling_adjustments_y) + if(!islist(scaling_adjustments_y)) + . += "non-list value for height scaling modifiers" + else if(length(scaling_adjustments_y) < 5) + . += "insufficient scaling values for height scaling." + else + for(var/value in scaling_adjustments_y) + if(!isnum(value)) + . += "non-numeric value in width height list: '[isnull(value) ? "NULL" : value]'" + +/mob/living/get_icon_scale_mult() + . = ..() + var/decl/species/my_species = get_species() + if(!LAZYLEN(appearance_descriptors) || !my_species) + return + var/modify_x = 1 + var/modify_y = 1 + for(var/entry in appearance_descriptors) + var/datum/appearance_descriptor/descriptor = my_species.appearance_descriptors[entry] + var/list/new_scale_info = descriptor.get_mob_scale_adjustments(get_bodytype(), appearance_descriptors[entry]) + if(length(new_scale_info)) + modify_x += new_scale_info[1] + modify_y += new_scale_info[2] + .[1] *= modify_x + .[2] *= modify_y + +/datum/appearance_descriptor/build/get_mob_scale_adjustments(decl/bodytype/bodytype, offset_value) . = list(0, 0) - switch(offset_value) - if(1) - .[2] = -0.085 - if(2) - .[2] = -0.05 - if(4) - .[2] = 0.05 - if(5) - .[2] = 0.09 + if(offset_value && length(bodytype?.scaling_adjustments_x) >= offset_value) + .[1] += bodytype.scaling_adjustments_x[offset_value] -/datum/appearance_descriptor/build/get_mob_scale_adjustments(var/offset_value) +/datum/appearance_descriptor/height/get_mob_scale_adjustments(decl/bodytype/bodytype, offset_value) . = list(0, 0) - switch(offset_value) - if(1) - .[1] = -0.095 - if(2) - .[1] = -0.055 - if(4) - .[1] = 0.054 - if(5) - .[1] = 0.095 + if(length(bodytype?.scaling_adjustments_y) >= offset_value) + .[2] += bodytype.scaling_adjustments_y[offset_value] diff --git a/mods/content/shackles/_shackles.dme b/mods/content/shackles/_shackles.dme index d48f7fc6e17..8685bfedc69 100644 --- a/mods/content/shackles/_shackles.dme +++ b/mods/content/shackles/_shackles.dme @@ -3,6 +3,5 @@ // BEGIN_INCLUDE #include "laws_pref.dm" #include "mind.dm" -#include "posibrain.dm" #include "shackle_lawsets.dm" #endif \ No newline at end of file diff --git a/mods/content/shackles/laws_pref.dm b/mods/content/shackles/laws_pref.dm index 7fb0a89af22..77c3b8baffa 100644 --- a/mods/content/shackles/laws_pref.dm +++ b/mods/content/shackles/laws_pref.dm @@ -28,7 +28,8 @@ W.write("is_shackled", pref.is_shackled) /datum/category_item/player_setup_item/law_pref/sanitize_character() - if(!istype(pref.laws)) pref.laws = list() + if(!istype(pref.laws)) + pref.laws = list() var/decl/bodytype/mob_bodytype = pref.get_bodytype_decl() if(!mob_bodytype?.can_be_shackled) @@ -68,6 +69,7 @@ . = jointext(.,null) /datum/category_item/player_setup_item/law_pref/OnTopic(href, href_list, user) + if(href_list["toggle_shackle"]) pref.is_shackled = !pref.is_shackled return TOPIC_REFRESH @@ -106,7 +108,3 @@ /decl/bodytype var/can_be_shackled - -/decl/bodytype/Initialize() - . = ..() - can_be_shackled = !!(BP_POSIBRAIN in has_organ) diff --git a/mods/content/shackles/posibrain.dm b/mods/content/shackles/posibrain.dm deleted file mode 100644 index 741b23fe40e..00000000000 --- a/mods/content/shackles/posibrain.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/organ/internal/proc/handle_shackled(var/given_lawset) - return - -/obj/item/organ/internal/posibrain/handle_shackled(var/given_lawset) - ..() - update_icon() - -/obj/item/organ/internal/posibrain/examine(mob/user) - . = ..() - if(owner?.mind?.shackle) - . += SPAN_WARNING("It is clamped in a set of metal straps with a complex digital lock.") - -/obj/item/organ/internal/posibrain/on_update_icon() - . = ..() - if(owner?.mind?.shackle) - add_overlay("posibrain-shackles") diff --git a/mods/content/xenobiology/circuit.dm b/mods/content/xenobiology/circuit.dm index 81e12500a02..3c98e9a48d1 100644 --- a/mods/content/xenobiology/circuit.dm +++ b/mods/content/xenobiology/circuit.dm @@ -23,14 +23,14 @@ var/mob/living/slime/T = get_pin_data_as_type(IC_INPUT, 1, /mob/living/slime) if(!isslime(T)) //Invalid input return - if(T in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. + if(T in view(get_turf(src))) // Like the medbot's analyzer it can be used at range. var/decl/slime_colour/slime_data = GET_DECL(T.slime_type) set_pin_data(IC_OUTPUT, 1, slime_data.name) set_pin_data(IC_OUTPUT, 2, T.is_adult) set_pin_data(IC_OUTPUT, 3, T.nutrition/T.get_max_nutrition()) set_pin_data(IC_OUTPUT, 4, T.powerlevel) - set_pin_data(IC_OUTPUT, 5, round(T.health/T.maxHealth,0.01)*100) + set_pin_data(IC_OUTPUT, 5, T.get_health_percent(0.001)) set_pin_data(IC_OUTPUT, 6, slime_data.descendants?.Copy()) set_pin_data(IC_OUTPUT, 7, T.mutation_chance) set_pin_data(IC_OUTPUT, 8, T.cores) diff --git a/mods/content/xenobiology/colours/colour_gold.dm b/mods/content/xenobiology/colours/colour_gold.dm index 605af4ec804..69b181a7f05 100644 --- a/mods/content/xenobiology/colours/colour_gold.dm +++ b/mods/content/xenobiology/colours/colour_gold.dm @@ -17,7 +17,8 @@ /mob/living/simple_animal/corgi/puppy, /mob/living/simple_animal/cow, /mob/living/simple_animal/chick, - /mob/living/simple_animal/chicken + /mob/living/simple_animal/fowl/chicken, + /mob/living/simple_animal/fowl/duck ) /decl/slime_colour/gold/handle_uranium_reaction(var/datum/reagents/holder) diff --git a/mods/content/xenobiology/colours/colour_yellow.dm b/mods/content/xenobiology/colours/colour_yellow.dm index 69b14cf8615..e19a5477099 100644 --- a/mods/content/xenobiology/colours/colour_yellow.dm +++ b/mods/content/xenobiology/colours/colour_yellow.dm @@ -17,7 +17,7 @@ /decl/slime_colour/yellow/Initialize() . = ..() - LAZYSET(reaction_procs, /decl/material/liquid/water, /decl/slime_colour/yellow/proc/try_water_reaction) + LAZYSET(reaction_procs, /decl/material/liquid/water, TYPE_PROC_REF(/decl/slime_colour/yellow, try_water_reaction)) /decl/slime_colour/yellow/handle_blood_reaction(var/datum/reagents/holder) var/location = get_turf(holder.get_reaction_loc()) diff --git a/mods/content/xenobiology/emotes.dm b/mods/content/xenobiology/emotes.dm index cb632012705..263221ad6fb 100644 --- a/mods/content/xenobiology/emotes.dm +++ b/mods/content/xenobiology/emotes.dm @@ -1,5 +1,5 @@ -/mob/living/slime - default_emotes = list( +/mob/living/slime/get_default_emotes() + var/static/list/default_emotes = list( /decl/emote/audible/moan, /decl/emote/visible/twitch, /decl/emote/visible/sway, @@ -14,8 +14,9 @@ /decl/emote/slime/angry, /decl/emote/slime/frown, /decl/emote/slime/smile - ) - + ) + return default_emotes + /decl/emote/slime key = "nomood" var/mood @@ -26,25 +27,25 @@ slime_ai.mood = mood user.update_icon() -/decl/emote/slime/check_user(var/atom/user) - return isslime(user) +/decl/emote/slime/mob_can_use(mob/living/user, assume_available = FALSE) + return isslime(user) && ..() /decl/emote/slime/pout - key = "pout" + key = "slimepout" mood = "pout" /decl/emote/slime/sad - key = "sad" + key = "slimesad" mood = "sad" /decl/emote/slime/angry - key = "angry" + key = "slimeangry" mood = "angry" /decl/emote/slime/frown - key = "frown" + key = "slimefrown" mood = "mischevous" /decl/emote/slime/smile - key = "smile" + key = "slimesmile" mood = ":3" diff --git a/mods/content/xenobiology/food.dm b/mods/content/xenobiology/food.dm index 27933822fb8..b6be1efc806 100644 --- a/mods/content/xenobiology/food.dm +++ b/mods/content/xenobiology/food.dm @@ -12,7 +12,7 @@ items = list( /obj/item/chems/food/dough ) - result = /obj/item/chems/food/donut/slimejelly + result = /obj/item/chems/food/donut/jelly/slime /decl/recipe/slimeburger display_name = "Slime Burger" @@ -36,15 +36,15 @@ result = /obj/item/chems/food/slimesoup /obj/item/chems/food/jellysandwich/slime/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 5) + add_to_reagents(/decl/material/liquid/slimejelly, 5) . = ..() /obj/item/chems/food/jelliedtoast/slime/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 5) + add_to_reagents(/decl/material/liquid/slimejelly, 5) . = ..() /obj/item/chems/food/jellyburger/slime/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 5) + add_to_reagents(/decl/material/liquid/slimejelly, 5) . = ..() /obj/item/chems/food/slimesoup @@ -54,25 +54,21 @@ filling_color = "#c4dba0" bitesize = 5 eat_sound = 'sound/items/drink.ogg' + utensil_flags = UTENSIL_FLAG_SCOOP /obj/item/chems/food/slimesoup/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 5) - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/slimejelly, 5) + add_to_reagents(/decl/material/liquid/water, 10) . = ..() -/obj/item/chems/food/donut/slimejelly +/obj/item/chems/food/donut/jelly/slime name = "jelly donut" desc = "You jelly?" - icon_state = "jdonut1" filling_color = "#ed1169" - center_of_mass = @"{'x':16,'y':11}" + center_of_mass = @'{"x":16,"y":11}' nutriment_amt = 3 bitesize = 5 - donut_state = "jdonut" - -/obj/item/chems/food/donut/slimejelly/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 5) - . = ..() + jelly_type = /decl/material/liquid/slimejelly /obj/item/chems/food/mysterysoup/get_random_fillings() . = ..() + list(list( diff --git a/mods/content/xenobiology/mobs/critter_slime.dm b/mods/content/xenobiology/mobs/critter_slime.dm index 4210eed8fc8..fda12401246 100644 --- a/mods/content/xenobiology/mobs/critter_slime.dm +++ b/mods/content/xenobiology/mobs/critter_slime.dm @@ -3,8 +3,7 @@ desc = "A lovable, domesticated slime." icon = 'mods/content/xenobiology/icons/slimes/slime_baby.dmi' speak_emote = list("chirps") - health = 100 - maxHealth = 100 + max_health = 100 response_harm = "stamps on" emote_see = list("jiggles", "bounces in place") gene_damage = -1 @@ -25,7 +24,7 @@ SHOULD_CALL_PARENT(FALSE) icon = get_slime_icon() icon_state = (stat == DEAD ? "slime_dead" : "slime") - + /mob/living/simple_animal/slime/proc/get_slime_icon() var/decl/slime_colour/slime_data = GET_DECL(slime_type) return slime_data.baby_icon @@ -37,15 +36,14 @@ return SetName(newname || "pet slime") -/mob/living/simple_animal/slime/can_force_feed(var/feeder, var/food, var/feedback) - if(feedback) - to_chat(feeder, SPAN_WARNING("Where do you intend to put \the [food]? \The [src] doesn't have a mouth!")) +/mob/living/simple_animal/slime/check_has_mouth() return FALSE /mob/living/simple_animal/slime/adult icon = 'mods/content/xenobiology/icons/slimes/slime_adult.dmi' -/mob/living/simple_animal/slime/adult/death() +/mob/living/simple_animal/slime/adult/death(gibbed) + SHOULD_CALL_PARENT(FALSE) for(var/i = 1 to rand(2,3)) var/mob/living/simple_animal/slime/baby = new(get_turf(src), slime_type) if(client) @@ -54,6 +52,7 @@ else baby.key = key qdel(src) + return TRUE /mob/living/simple_animal/slime/adult/get_slime_icon() var/decl/slime_colour/slime_data = GET_DECL(slime_type) diff --git a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm index d8bfbee4803..c335ffdc7ed 100644 --- a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm +++ b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm @@ -72,10 +72,10 @@ var/global/list/slime_pain_messages = list( var/protection = (1 - get_blocked_ratio(null, TOX, damage_flags = DAM_DISPERSED | DAM_BIO)) adjustCloneLoss((attacker.is_adult ? 10 : 5) * protection) adjustToxLoss(1 * protection) - if(health <= 0) + if(current_health <= 0) adjustToxLoss(1 * protection) if(prob(15) && client) handle_additional_slime_effects() . = 15 * protection - if(stat == DEAD || getCloneLoss() >= maxHealth) + if(stat == DEAD || getCloneLoss() >= get_max_health()) eaten_by_slime() diff --git a/mods/content/xenobiology/overrides.dm b/mods/content/xenobiology/overrides.dm index 671c77bbe7b..5ab370b3c58 100644 --- a/mods/content/xenobiology/overrides.dm +++ b/mods/content/xenobiology/overrides.dm @@ -1,4 +1,4 @@ -/obj/structure/plasticflaps/Initialize() +/obj/structure/flaps/Initialize() . = ..() mobs_can_pass |= /mob/living/slime @@ -38,3 +38,9 @@ /obj/item/gripper/cultivator/Initialize(ml, material_key) . = ..() can_hold |= /obj/item/slime_extract + +/mob/living/carbon/human/say_understands(var/mob/other,var/decl/language/speaking = null) + . = (!speaking && isslime(other)) || ..() + +/mob/living/brain/say_understands(var/mob/other,var/decl/language/speaking = null) + . = (!speaking && isslime(other)) || ..() diff --git a/mods/content/xenobiology/slime/_slime.dm b/mods/content/xenobiology/slime/_slime.dm index 5f7c26441b7..6e5c83ec2cb 100644 --- a/mods/content/xenobiology/slime/_slime.dm +++ b/mods/content/xenobiology/slime/_slime.dm @@ -1,3 +1,7 @@ +/decl/config/num/movement_slime + uid = "slime_delay" + desc = "Movement delay for slimes." + #define FEED_RESULT_INVALID -1 #define FEED_RESULT_DEAD 0 #define FEED_RESULT_VALID 1 @@ -8,8 +12,7 @@ icon_state = ICON_STATE_WORLD pass_flags = PASS_FLAG_TABLE speak_emote = list("chirps") - maxHealth = 150 - health = 150 + max_health = 150 gender = NEUTER update_icon = 0 see_in_dark = 8 @@ -38,6 +41,17 @@ var/core_removal_stage = 0 //For removing cores. var/datum/reagents/metabolism/ingested +SAVED_VAR(/mob/living/slime, toxloss) +SAVED_VAR(/mob/living/slime, is_adult) +SAVED_VAR(/mob/living/slime, cores) +SAVED_VAR(/mob/living/slime, mutation_chance) +SAVED_VAR(/mob/living/slime, powerlevel) +SAVED_VAR(/mob/living/slime, amount_grown) +SAVED_VAR(/mob/living/slime, hurt_temperature) +SAVED_VAR(/mob/living/slime, die_temperature) +SAVED_VAR(/mob/living/slime, core_removal_stage) +SAVED_VAR(/mob/living/slime, ingested) + /mob/living/slime/Destroy() set_feeding_on() for(var/atom/movable/AM in contents) @@ -50,8 +64,10 @@ /mob/living/slime/get_digestion_product() return /decl/material/liquid/slimejelly -/mob/living/slime/adjustToxLoss(var/amount) - toxloss = clamp(toxloss + amount, 0, maxHealth) +/mob/living/slime/adjustToxLoss(var/amount, var/do_update_health = TRUE) + toxloss = clamp(toxloss + amount, 0, get_max_health()) + if(do_update_health) + update_health() /mob/living/slime/setToxLoss(var/amount) adjustToxLoss(amount-getToxLoss()) @@ -62,8 +78,7 @@ ingested = new /datum/reagents/metabolism(240, src, CHEM_TOUCH) reagents = ingested - // See comment in /mob/living/slime/on_update_icon() regarding alpha mask filters. - //render_target = "slime_\ref[src]" + render_target = "slime_\ref[src]" verbs += /mob/living/proc/ventcrawl slime_type = _stype @@ -87,7 +102,7 @@ var/tally = ..() - var/health_deficiency = (maxHealth - health) + var/health_deficiency = (get_max_health() - current_health) if(health_deficiency >= 30) tally += (health_deficiency / 25) if (bodytemperature < 183.222) @@ -100,10 +115,10 @@ if(reagents.has_reagent(/decl/material/liquid/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow tally *= 5 - if(health <= 0) // if damaged, the slime moves twice as slow + if(current_health <= 0) // if damaged, the slime moves twice as slow tally *= 2 - return tally + config.slime_delay + return tally + get_config_value(/decl/config/num/movement_slime) /mob/living/slime/Bump(atom/movable/AM, yes) if ((!(yes) || now_pushing)) @@ -146,7 +161,7 @@ . = ..() statpanel("Status") - stat(null, "Health: [round((health / maxHealth) * 100)]%") + stat(null, "Health: [get_health_percent()]%") stat(null, "Intent: [a_intent]") if (client.statpanel == "Status") @@ -159,8 +174,8 @@ stat(null,"Power Level: [powerlevel]") -/mob/living/slime/adjustFireLoss(amount) - ..(-abs(amount)) // Heals them +/mob/living/slime/adjustFireLoss(amount, do_update_health = TRUE) + ..(-abs(amount), do_update_health) // Heals them /mob/living/slime/bullet_act(var/obj/item/projectile/Proj) var/datum/ai/slime/slime_ai = ai @@ -290,7 +305,7 @@ return FALSE /mob/living/slime/check_has_mouth() - return 0 + return FALSE /mob/living/slime/set_nutrition(amt) ..() @@ -344,7 +359,7 @@ else if (nutrition < get_hunger_nutrition()) . += "Warning:\tthe slime is hungry." . += "Electric charge strength:\t[powerlevel]" - . += "Health:\t[round((health * 100) / maxHealth)]%" + . += "Health:\t[get_health_percent()]%" var/list/mutations = slime_data.descendants?.Copy() if(!mutations.len) diff --git a/mods/content/xenobiology/slime/death.dm b/mods/content/xenobiology/slime/death.dm index 76dad0c79f1..c0f4604416a 100644 --- a/mods/content/xenobiology/slime/death.dm +++ b/mods/content/xenobiology/slime/death.dm @@ -18,12 +18,13 @@ my_baby.key = key qdel(src) -/mob/living/slime/death(gibbed, deathmessage, show_dead_message) +/mob/living/slime/death(gibbed) + // Handle splitting instead of dying. if(stat != DEAD && !gibbed && is_adult) physically_destroyed() return TRUE - . = ..(gibbed, deathmessage, show_dead_message) - if(stat == DEAD) + . = ..() + if(.) set_feeding_on() for(var/atom/movable/AM in contents) AM.dropInto(loc) diff --git a/mods/content/xenobiology/slime/feeding.dm b/mods/content/xenobiology/slime/feeding.dm index fd88d5c3caf..5fb8c6d1cdb 100644 --- a/mods/content/xenobiology/slime/feeding.dm +++ b/mods/content/xenobiology/slime/feeding.dm @@ -31,7 +31,7 @@ if(!silent) to_chat(src, SPAN_WARNING("\The [src] is dead.")) return FEED_RESULT_DEAD - if(M.getCloneLoss() >= M.maxHealth * 1.5) + if(M.getCloneLoss() >= M.get_max_health() * 1.5) if(!silent) to_chat(src, SPAN_WARNING("\The [M] is too degraded to feed upon.")) return FEED_RESULT_DEAD @@ -52,9 +52,9 @@ feeding_on = null if(victim) feeding_on = weakref(victim) - events_repository.register(/decl/observ/moved, src, src, /mob/living/slime/proc/check_feed_target_position) - events_repository.register(/decl/observ/moved, victim, src, /mob/living/slime/proc/check_feed_target_position) - events_repository.register(/decl/observ/destroyed, victim, src, /mob/living/slime/proc/check_feed_target_position) + events_repository.register(/decl/observ/moved, src, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position)) + events_repository.register(/decl/observ/moved, victim, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position)) + events_repository.register(/decl/observ/destroyed, victim, src, TYPE_PROC_REF(/mob/living/slime, check_feed_target_position)) var/datum/ai/slime/slime_ai = ai if(istype(slime_ai)) slime_ai.update_mood() @@ -102,8 +102,8 @@ gain_nutrition(drained) var/heal_amt = FLOOR(drained*0.5) if(heal_amt > 0) - adjustOxyLoss(-heal_amt) - adjustBruteLoss(-heal_amt) + adjustOxyLoss(-heal_amt, do_update_health = FALSE) + adjustBruteLoss(-heal_amt, do_update_health = FALSE) adjustCloneLoss(-heal_amt) if(ate_victim && feed_mob) diff --git a/mods/content/xenobiology/slime/items.dm b/mods/content/xenobiology/slime/items.dm index 3fa5d3d7892..df20c560312 100644 --- a/mods/content/xenobiology/slime/items.dm +++ b/mods/content/xenobiology/slime/items.dm @@ -8,7 +8,7 @@ throwforce = 0 throw_speed = 3 throw_range = 6 - origin_tech = "{'biotech':4}" + origin_tech = @'{"biotech":4}' atom_flags = ATOM_FLAG_OPEN_CONTAINER material = /decl/material/liquid/slimejelly var/slime_type = /decl/slime_colour/grey @@ -47,7 +47,7 @@ . = ..() /obj/item/slime_extract/populate_reagents() - reagents.add_reagent(/decl/material/liquid/slimejelly, 30) + add_to_reagents(/decl/material/liquid/slimejelly, 30) /obj/item/slime_extract/on_reagent_change() ..() diff --git a/mods/content/xenobiology/slime/items_cell.dm b/mods/content/xenobiology/slime/items_cell.dm index f244b37d53a..417af572337 100644 --- a/mods/content/xenobiology/slime/items_cell.dm +++ b/mods/content/xenobiology/slime/items_cell.dm @@ -1,7 +1,7 @@ /obj/item/cell/slime name = "charged slime core" desc = "A yellow slime core that crackles with power." - origin_tech = "{'powerstorage':2,'biotech':4}" + origin_tech = @'{"powerstorage":2,"biotech":4}' icon = 'mods/content/xenobiology/icons/slimes/slime_extract_yellow.dmi' icon_state = ICON_STATE_WORLD maxcharge = 200 diff --git a/mods/content/xenobiology/slime/life.dm b/mods/content/xenobiology/slime/life.dm index 623affe8304..5c1d26a6bc3 100644 --- a/mods/content/xenobiology/slime/life.dm +++ b/mods/content/xenobiology/slime/life.dm @@ -1,55 +1,17 @@ -/mob/living/slime/Life() +/mob/living/slime/handle_environment(datum/gas_mixture/environment) . = ..() - if(. && stat != DEAD) - handle_turf_contents() - handle_local_conditions() - if(feeding_on) - slime_feed() - ingested.metabolize() - -/mob/living/slime/updatehealth() - . = ..() - if(stat != DEAD && health <= 0) - death() - -/mob/living/slime/fluid_act(datum/reagents/fluids) - . = ..() - if(!QDELETED(src) && fluids?.total_volume >= FLUID_SHALLOW && stat == DEAD) - var/turf/T = get_turf(src) - if(T) - T.add_fluid(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30))) - visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble. - qdel(src) -/mob/living/slime/proc/handle_local_conditions() - var/datum/gas_mixture/environment = loc?.return_air() - adjust_body_temperature(bodytemperature, (environment?.temperature || T0C), 1) + if(environment) + var/delta = abs(bodytemperature - environment.temperature) + var/change = (delta / (delta > 50 ? 5 : 10)) + if(bodytemperature > environment.temperature) + change = -(change) + bodytemperature += (min(environment.temperature, bodytemperature + change) - bodytemperature) if(bodytemperature <= die_temperature) adjustToxLoss(200) - death() else if(bodytemperature <= hurt_temperature) adjustToxLoss(30) - updatehealth() - -/mob/living/slime/proc/adjust_body_temperature(current, loc_temp, boost) - var/delta = abs(current-loc_temp) - var/change = (delta / (delta > 50 ? 5 : 10)) * boost - if(current > loc_temp) - change = -(change) - bodytemperature += (min(loc_temp, current + change) - current) -/mob/living/slime/handle_regular_status_updates() - . = ..() - if(stat != DEAD) - set_stat(CONSCIOUS) - if(prob(30)) - adjustOxyLoss(-1) - adjustToxLoss(-1) - adjustFireLoss(-1) - adjustCloneLoss(-1) - adjustBruteLoss(-1) - -/mob/living/slime/proc/handle_turf_contents() // If we're standing on top of a dead mob or small items, we can // ingest it (or just melt it a little if we're too small) // Also helps to keep our cell tidy! @@ -80,13 +42,51 @@ if(length(contents) != last_contents_length) queue_icon_update() +/mob/living/slime/handle_nutrition_and_hydration() + . = ..() + if(feeding_on) + slime_feed() + ingested.metabolize() + +/mob/living/slime/fluid_act(datum/reagents/fluids) + . = ..() + if(!QDELETED(src) && fluids?.total_volume >= FLUID_SHALLOW && stat == DEAD) + var/turf/T = get_turf(src) + if(T) + T.add_to_reagents(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30))) + visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble. + qdel(src) + /mob/living/slime/get_hunger_factor() return (0.1 + 0.05 * is_adult) /mob/living/slime/get_thirst_factor() return 0 +/mob/living/slime/fluid_act(datum/reagents/fluids) + . = ..() + if(stat == DEAD && fluids?.total_volume && REAGENT_VOLUME(fluids, /decl/material/liquid/water) >= FLUID_SHALLOW) + fluids.add_reagent(/decl/material/liquid/slimejelly, (is_adult ? rand(30, 40) : rand(10, 30))) + visible_message(SPAN_DANGER("\The [src] melts away...")) // Slimes are water soluble. + qdel(src) + +/mob/living/slime/handle_living_non_stasis_processes() + . = ..() + if(!.) + return FALSE + set_stat(CONSCIOUS) + if(prob(30)) + adjustOxyLoss(-1, do_update_health = FALSE) + adjustToxLoss(-1, do_update_health = FALSE) + adjustFireLoss(-1, do_update_health = FALSE) + adjustCloneLoss(-1, do_update_health = FALSE) + adjustBruteLoss(-1) + /mob/living/slime/handle_nutrition_and_hydration() + . = ..() + if(feeding_on) + slime_feed() + ingested.metabolize() // Digest whatever we've got floating around in our goop. if(length(contents)) @@ -133,6 +133,9 @@ ..() +/mob/living/slime/get_satiated_nutrition() // Can't go above it + . = is_adult ? 1150 : 950 + /mob/living/slime/get_max_nutrition() // Can't go above it . = is_adult ? 1200 : 1000 diff --git a/mods/content/xenobiology/slime/powers.dm b/mods/content/xenobiology/slime/powers.dm index cac27ead4e2..6fe8c85aa75 100644 --- a/mods/content/xenobiology/slime/powers.dm +++ b/mods/content/xenobiology/slime/powers.dm @@ -16,7 +16,7 @@ return is_adult = TRUE - maxHealth = 200 + max_health = 200 amount_grown = 0 update_name() update_icon() diff --git a/mods/content/xenobiology/slime/say.dm b/mods/content/xenobiology/slime/say.dm index ce3ffc9fd3f..c248fa29b21 100644 --- a/mods/content/xenobiology/slime/say.dm +++ b/mods/content/xenobiology/slime/say.dm @@ -13,10 +13,10 @@ var/datum/ai/slime/slime_ai = ai if(istype(slime_ai) && (weakref(speaker) in slime_ai.observed_friends)) LAZYSET(slime_ai.speech_buffer, speaker, lowertext(html_decode(message))) - ..() + return ..() -/mob/living/slime/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") +/mob/living/slime/hear_radio(var/message, var/verb="says", var/decl/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/vsource) var/datum/ai/slime/slime_ai = ai if(istype(slime_ai) && (weakref(speaker) in slime_ai.observed_friends)) LAZYSET(slime_ai.speech_buffer, speaker, lowertext(html_decode(message))) - ..() + return ..() diff --git a/mods/content/xenobiology/slime/slime_AI.dm b/mods/content/xenobiology/slime/slime_AI.dm index b79fcc0a3a1..9ab005ea9b0 100644 --- a/mods/content/xenobiology/slime/slime_AI.dm +++ b/mods/content/xenobiology/slime/slime_AI.dm @@ -193,7 +193,7 @@ if(prob(1)) if(prob(50)) - body.emote(pick("bounce","sway","light","vibrate","jiggle")) + body.emote(pick(/decl/emote/visible/bounce, /decl/emote/visible/sway, /decl/emote/visible/lightup, /decl/emote/visible/vibrate, /decl/emote/visible/jiggle)) else var/list/possible_comments var/list/all_slime_comments = decls_repository.get_decls_of_subtype(/decl/slime_comment) diff --git a/mods/content/xenobiology/slime/slime_click.dm b/mods/content/xenobiology/slime/slime_click.dm index 052da49f80c..7107a79d7d1 100644 --- a/mods/content/xenobiology/slime/slime_click.dm +++ b/mods/content/xenobiology/slime/slime_click.dm @@ -4,25 +4,25 @@ /mob/living/slime/UnarmedAttack(var/atom/A, var/proximity) . = ..() - if(!.) + if(.) return // Eating if(feeding_on || (locate(/mob) in contents)) - return + return FALSE //should have already been set if we are attacking a mob, but it doesn't hurt and will cover attacking non-mobs too setClickCooldown(DEFAULT_ATTACK_COOLDOWN) var/mob/living/M = A if(!istype(M)) A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack. - return + return TRUE if(a_intent == I_HELP) M.visible_message( \ SPAN_NOTICE("\The [src] gently pokes \the [M]."), \ SPAN_NOTICE("\The [src] gently pokes you.")) - return + return TRUE var/power = max(0, min(10, (powerlevel + rand(0, 3)))) if(a_intent == I_DISARM) @@ -44,10 +44,10 @@ SPAN_DANGER("\The [src] pounces at you!")) if(prob(40)) SET_STATUS_MAX(src, STAT_WEAK, (power * 0.5)) - return + return TRUE if(a_intent == I_GRAB && slime_attach(M)) - return + return TRUE if(a_intent == I_HURT) if(prob(15) && !M.lying) @@ -57,3 +57,5 @@ SET_STATUS_MAX(M, STAT_WEAK, (power * 0.5)) else A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") + return TRUE + return FALSE diff --git a/mods/content/xenobiology/slime/slime_hud.dm b/mods/content/xenobiology/slime/slime_hud.dm index d5162603531..9c96aae0f5d 100644 --- a/mods/content/xenobiology/slime/slime_hud.dm +++ b/mods/content/xenobiology/slime/slime_hud.dm @@ -1,6 +1,5 @@ /datum/hud/slime/FinalizeInstantiation() - var/obj/screen/using - using = new /obj/screen/intent() - src.adding += using - action_intent = using + action_intent = new /obj/screen/intent(null, mymob, mymob, get_ui_style_data(), get_ui_color(), get_ui_alpha(), UI_ICON_INTENT) + src.adding = list(action_intent) + ..() diff --git a/mods/content/xenobiology/slime/slime_update_icon.dm b/mods/content/xenobiology/slime/slime_update_icon.dm index 4e99fe88ceb..b7e54e6d295 100644 --- a/mods/content/xenobiology/slime/slime_update_icon.dm +++ b/mods/content/xenobiology/slime/slime_update_icon.dm @@ -20,8 +20,7 @@ var/mutable_appearance/MA = new(AM) MA.layer = FLOAT_LAYER MA.plane = FLOAT_PLANE - // Revisit this on 514, alpha filters are behaving strangely on 513 - //MA.add_filter("slime_mask", 1, list("alpha", render_source="slime_\ref[src]", flags=MASK_INVERSE)) + MA.add_filter("slime_mask", 1, list(type = "alpha", render_source="slime_\ref[src]")) LAZYADD(new_underlays, MA) underlays = new_underlays diff --git a/mods/mobs/borers/datum/antagonist.dm b/mods/mobs/borers/datum/antagonist.dm index 2d2c31a1645..b8b0c7feb4d 100644 --- a/mods/mobs/borers/datum/antagonist.dm +++ b/mods/mobs/borers/datum/antagonist.dm @@ -61,4 +61,4 @@ spawn_announcement_sound = global.using_map.lifesign_spawn_sound /decl/special_role/borer/attempt_random_spawn() - if(config.aliens_allowed) ..() + if(get_config_value(/decl/config/toggle/aliens_allowed)) ..() diff --git a/mods/mobs/borers/mob/borer/borer.dm b/mods/mobs/borers/mob/borer/borer.dm index dc3ff9d818b..309dcddf63d 100644 --- a/mods/mobs/borers/mob/borer/borer.dm +++ b/mods/mobs/borers/mob/borer/borer.dm @@ -48,7 +48,7 @@ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. /obj/item/holder/borer - origin_tech = "{'biotech':6}" + origin_tech = @'{"biotech":6}' /mob/living/simple_animal/borer/roundstart roundstart = TRUE @@ -81,63 +81,60 @@ /mob/living/simple_animal/borer/proc/set_borer_name() truename = "[borer_names[min(generation, borer_names.len)]] [random_id("borer[generation]", 1000, 9999)]" -/mob/living/simple_animal/borer/Life() +/mob/living/simple_animal/borer/handle_vision() + . = ..() + set_status(STAT_BLIND, host ? GET_STATUS(host, STAT_BLIND) : 0) + set_status(STAT_BLURRY, host ? GET_STATUS(host, STAT_BLURRY) : 0) +/mob/living/simple_animal/borer/handle_disabilities() + . = ..() sdisabilities = 0 if(host) - set_status(STAT_BLIND, GET_STATUS(host, STAT_BLIND)) - set_status(STAT_BLURRY, GET_STATUS(host, STAT_BLURRY)) if(host.sdisabilities & BLINDED) sdisabilities |= BLINDED if(host.sdisabilities & DEAFENED) sdisabilities |= DEAFENED - else - set_status(STAT_BLIND, 0) - set_status(STAT_BLURRY, 0) +/mob/living/simple_animal/borer/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE - if(host) + if(!host || host.stat) + return - if(!stat && !host.stat) + if(prob(host.getBrainLoss()/20)) + INVOKE_ASYNC(host, TYPE_PROC_REF(/mob, say), "*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") - if(host.reagents.has_reagent(/decl/material/liquid/nutriment/sugar)) - if(!docile) - if(controlling) - to_chat(host, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) - else - to_chat(src, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) - docile = 1 - else - if(docile) - if(controlling) - to_chat(host, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) - else - to_chat(src, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) - docile = 0 - - if(chemicals < 250 && host.nutrition >= (neutered ? 200 : 50)) - host.nutrition-- - chemicals++ + if(stat) + return + if(host.reagents.has_reagent(/decl/material/liquid/nutriment/sugar)) + if(!docile) if(controlling) - - if(neutered) - host.release_control() - return - - if(docile) - to_chat(host, SPAN_NOTICE("You are feeling far too docile to continue controlling your host...")) - host.release_control() - return - - if(prob(5)) - host.adjustBrainLoss(0.1) - - if(prob(host.getBrainLoss()/20)) - INVOKE_ASYNC(host, /mob/proc/say, "*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") + to_chat(host, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) + else + to_chat(src, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) + docile = TRUE + else + if(docile) + if(controlling) + to_chat(host, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) + else + to_chat(src, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) + docile = FALSE + + if(chemicals < 250 && host.nutrition >= (neutered ? 200 : 50)) + host.nutrition-- + chemicals++ + if(controlling) + if(neutered || docile) + if(docile) + to_chat(host, SPAN_NOTICE("You are feeling far too docile to continue controlling your host...")) + host.release_control() + return + if(prob(5)) + host.adjustBrainLoss(0.1) /mob/living/simple_animal/borer/Stat() . = ..() @@ -209,7 +206,7 @@ if(istype(borer_hud)) for(var/obj/thing in borer_hud.borer_hud_elements) thing.color = COLOR_BORER_RED - addtimer(CALLBACK(src, /mob/living/simple_animal/borer/proc/reset_ui_callback), amt) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/borer, reset_ui_callback)), amt) #undef COLOR_BORER_RED /mob/living/simple_animal/borer/proc/leave_host() diff --git a/mods/mobs/borers/mob/borer/borer_attacks.dm b/mods/mobs/borers/mob/borer/borer_attacks.dm index 28ffd23fbe9..138b2f34958 100644 --- a/mods/mobs/borers/mob/borer/borer_attacks.dm +++ b/mods/mobs/borers/mob/borer/borer_attacks.dm @@ -1,40 +1,44 @@ /mob/living/simple_animal/borer/UnarmedAttack(atom/A, proximity) + . = ..() + if(.) + return + if(!isliving(A) || a_intent != I_GRAB) - return ..() + return FALSE if(host || !can_use_borer_ability(requires_host_value = FALSE, check_last_special = FALSE)) - return + return FALSE var/mob/living/M = A if(M.has_brain_worms()) to_chat(src, SPAN_WARNING("You cannot take a host who already has a passenger!")) - return + return TRUE //TODO generalize borers to enter any mob. Until then, return early. if(!ishuman(M)) to_chat(src, SPAN_WARNING("This creature is not sufficiently intelligent to host you.")) - return + return TRUE // end TODO var/mob/living/carbon/human/H = M var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, BP_HEAD) if(!E) to_chat(src, SPAN_WARNING("\The [H] does not have a head!")) - return + return TRUE if(!H.should_have_organ(BP_BRAIN)) to_chat(src, SPAN_WARNING("\The [H] does not seem to have a brain cavity to enter.")) - return + return TRUE if(H.check_head_coverage()) to_chat(src, SPAN_WARNING("You cannot get through that host's protective gear.")) - return + return TRUE to_chat(M, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal...")) to_chat(src, SPAN_NOTICE("You slither up [M] and begin probing at their ear canal...")) set_ability_cooldown(5 SECONDS) if(!do_after(src, 3 SECONDS, M)) - return + return TRUE to_chat(src, SPAN_NOTICE("You wiggle into \the [M]'s ear.")) if(M.stat == CONSCIOUS) @@ -61,3 +65,4 @@ replace_brain() else if(E) // If they're in normally, implant removal can get them out. LAZYDISTINCTADD(E.implants, src) + return TRUE diff --git a/mods/mobs/borers/mob/borer/borer_hud.dm b/mods/mobs/borers/mob/borer/borer_hud.dm index a215aef94de..9144f017932 100644 --- a/mods/mobs/borers/mob/borer/borer_hud.dm +++ b/mods/mobs/borers/mob/borer/borer_hud.dm @@ -14,10 +14,10 @@ . = ..() /datum/hud/borer/FinalizeInstantiation() - hud_intent_selector = new + hud_intent_selector = new(null, mymob) adding += hud_intent_selector - hud_inject_chemicals = new - hud_leave_host = new + hud_inject_chemicals = new(null, mymob) + hud_leave_host = new(null, mymob) borer_hud_elements = list( hud_inject_chemicals, hud_leave_host @@ -25,7 +25,7 @@ if(isborer(mymob)) var/mob/living/simple_animal/borer/borer = mymob if(!borer.neutered) - hud_toggle_control = new + hud_toggle_control = new(null, mymob) borer_hud_elements += hud_toggle_control adding += borer_hud_elements if(mymob) @@ -51,10 +51,8 @@ alpha = 0 invisibility = INVISIBILITY_MAXIMUM -/obj/screen/borer/Click(location, control, params) - if(!isborer(usr)) - return FALSE - if(usr.stat == DEAD) +/obj/screen/borer/handle_click(mob/user, params) + if(!isborer(user)) return FALSE var/mob/living/simple_animal/borer/worm = usr if(!worm.host) @@ -66,12 +64,12 @@ icon_state = "seize_control" screen_loc = "LEFT+3,TOP-1" -/obj/screen/borer/toggle_host_control/Click(location, control, params) +/obj/screen/borer/toggle_host_control/handle_click(mob/user, params) . = ..() if(!.) return FALSE - var/mob/living/simple_animal/borer/worm = usr + var/mob/living/simple_animal/borer/worm = user if(!worm.can_use_borer_ability()) return @@ -123,12 +121,12 @@ icon_state = "inject_chemicals" screen_loc = "LEFT+2,TOP-1" -/obj/screen/borer/inject_chemicals/Click(location, control, params) +/obj/screen/borer/inject_chemicals/handle_click(mob/user, params) . = ..() if(!.) return FALSE - var/mob/living/simple_animal/borer/worm = usr + var/mob/living/simple_animal/borer/worm = user if(!worm.can_use_borer_ability()) return @@ -141,7 +139,7 @@ return to_chat(worm, SPAN_NOTICE("You squirt a measure of [chem] from your reservoirs into \the [worm.host]'s bloodstream.")) - worm.host.reagents.add_reagent(worm.chemical_types[chem], 10) + worm.host.add_to_reagents(worm.chemical_types[chem], 10) worm.chemicals -= 50 return TRUE @@ -150,12 +148,12 @@ icon_state = "leave_host" screen_loc = "LEFT+1,TOP-1" -/obj/screen/borer/leave_host/Click(location, control, params) +/obj/screen/borer/leave_host/handle_click(mob/user, params) . = ..() if(!.) return FALSE - var/mob/living/simple_animal/borer/worm = usr + var/mob/living/simple_animal/borer/worm = user if(!worm.can_use_borer_ability()) return diff --git a/mods/mobs/borers/mob/borer/borer_powers.dm b/mods/mobs/borers/mob/borer/borer_powers.dm index ef3c3c82406..0207c073f85 100644 --- a/mods/mobs/borers/mob/borer/borer_powers.dm +++ b/mods/mobs/borers/mob/borer/borer_powers.dm @@ -52,7 +52,7 @@ H.verbs |= /mob/living/carbon/proc/spawn_larvae if(H.client) - H.ghostize(0) + H.ghostize(CORPSE_CANNOT_REENTER) if(src.mind) src.mind.assigned_special_role = "Borer Husk" diff --git a/mods/mobs/borers/mob/organ.dm b/mods/mobs/borers/mob/organ.dm index 579c94bc64b..c8f9a3c34bd 100644 --- a/mods/mobs/borers/mob/organ.dm +++ b/mods/mobs/borers/mob/organ.dm @@ -14,7 +14,7 @@ for(var/chem_name in chemical_types) var/chem = chemical_types[chem_name] if(REAGENT_VOLUME(owner.reagents, chem) < 3) - owner.reagents.add_reagent(chem, 5) + owner.add_to_reagents(chem, 5) // They're also super gross and ooze ichor. if(prob(5)) diff --git a/mods/mobs/borers/mob/overrides.dm b/mods/mobs/borers/mob/overrides.dm index b4a73f05d42..7f8577a9624 100644 --- a/mods/mobs/borers/mob/overrides.dm +++ b/mods/mobs/borers/mob/overrides.dm @@ -36,21 +36,21 @@ borer.detach_from_host() . = ..() -/mob/living/carbon/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE) +/obj/item/glass_jar/Initialize() + accept_mobs |= /mob/living/simple_animal/borer + . = ..() + +/mob/death(gibbed) . = ..() - if(. && !QDELETED(implant) && isborer(implant)) + if(. && !gibbed) + var/mob/living/simple_animal/borer/B = HAS_BRAIN_WORMS(src) + if(B && B.controlling) + B.detach_from_host() + +/mob/living/carbon/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) + if((. = ..()) && !QDELETED(implant) && isborer(implant)) var/mob/living/simple_animal/borer/worm = implant if(worm.controlling) release_control() worm.detach_from_host() worm.leave_host() - -/obj/item/glass_jar/Initialize() - accept_mobs |= /mob/living/simple_animal/borer - . = ..() - -/mob/death() - var/mob/living/simple_animal/borer/B = HAS_BRAIN_WORMS(src) - if(B && B.controlling) - B.detach_from_host() - . = ..() diff --git a/mods/mobs/dionaea/_dionaea.dme b/mods/mobs/dionaea/_dionaea.dme index 41aa2a72fb7..a43670132b3 100644 --- a/mods/mobs/dionaea/_dionaea.dme +++ b/mods/mobs/dionaea/_dionaea.dme @@ -20,7 +20,6 @@ #include "mob\nymph_emotes.dm" #include "mob\nymph_gestalting.dm" #include "mob\nymph_holder.dm" -#include "mob\nymph_inventory.dm" #include "mob\nymph_life.dm" #include "mob\nymph_ui.dm" #include "mob\nymph_update_icons.dm" diff --git a/mods/mobs/dionaea/datums/ai.dm b/mods/mobs/dionaea/datums/ai.dm index 6af2cc080bb..750c1668076 100644 --- a/mods/mobs/dionaea/datums/ai.dm +++ b/mods/mobs/dionaea/datums/ai.dm @@ -10,4 +10,4 @@ if(prob(wander_prob) && !LAZYLEN(body.grabbed_by) && isturf(body.loc)) //won't move if being pulled body.SelfMove(pick(global.cardinal)) if(prob(emote_prob)) - body.emote(pick("scratch","jump","chirp","tail")) \ No newline at end of file + body.emote(pick(/decl/emote/visible/scratch, /decl/emote/visible/jump, /decl/emote/audible/chirp, /decl/emote/visible/tail)) diff --git a/mods/mobs/dionaea/datums/seed.dm b/mods/mobs/dionaea/datums/seed.dm index 5244715c2e5..4d0937897ac 100644 --- a/mods/mobs/dionaea/datums/seed.dm +++ b/mods/mobs/dionaea/datums/seed.dm @@ -25,3 +25,7 @@ /decl/hierarchy/supply_pack/hydroponics/exoticseeds/Initialize() contains[/obj/item/seeds/diona] = 2 . = ..() + +/obj/structure/closet/crate/hydroponics/exotic/WillContain() + . = ..() + .[/obj/item/seeds/diona] = 2 \ No newline at end of file diff --git a/mods/mobs/dionaea/icons/lunchbox_nymph.dmi b/mods/mobs/dionaea/icons/lunchbox_nymph.dmi new file mode 100644 index 00000000000..500f939b9eb Binary files /dev/null and b/mods/mobs/dionaea/icons/lunchbox_nymph.dmi differ diff --git a/mods/mobs/dionaea/icons/ui.dmi b/mods/mobs/dionaea/icons/ui.dmi deleted file mode 100644 index f4cd523bc52..00000000000 Binary files a/mods/mobs/dionaea/icons/ui.dmi and /dev/null differ diff --git a/mods/mobs/dionaea/icons/ui_hands.dmi b/mods/mobs/dionaea/icons/ui_hands.dmi new file mode 100644 index 00000000000..422a397d49b Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_hands.dmi differ diff --git a/mods/mobs/dionaea/icons/ui_health.dmi b/mods/mobs/dionaea/icons/ui_health.dmi new file mode 100644 index 00000000000..c079eddb970 Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_health.dmi differ diff --git a/mods/mobs/dionaea/icons/ui_intents.dmi b/mods/mobs/dionaea/icons/ui_intents.dmi new file mode 100644 index 00000000000..d8aaeba136e Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_intents.dmi differ diff --git a/mods/mobs/dionaea/icons/ui_interactions.dmi b/mods/mobs/dionaea/icons/ui_interactions.dmi new file mode 100644 index 00000000000..29d6ce04dce Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_interactions.dmi differ diff --git a/mods/mobs/dionaea/icons/ui_inventory.dmi b/mods/mobs/dionaea/icons/ui_inventory.dmi new file mode 100644 index 00000000000..10f9d9113d7 Binary files /dev/null and b/mods/mobs/dionaea/icons/ui_inventory.dmi differ diff --git a/mods/mobs/dionaea/items/lunchbox.dm b/mods/mobs/dionaea/items/lunchbox.dm index b1e906a69c3..7be30a9b699 100644 --- a/mods/mobs/dionaea/items/lunchbox.dm +++ b/mods/mobs/dionaea/items/lunchbox.dm @@ -1,7 +1,6 @@ /obj/item/storage/lunchbox/nymph name = "\improper Diona nymph lunchbox" - icon_state = "lunchbox_dionanymph" - item_state = "toolbox_yellow" + icon = 'mods/mobs/dionaea/icons/lunchbox_nymph.dmi' desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" /obj/item/storage/lunchbox/nymph/filled diff --git a/mods/mobs/dionaea/items/roast.dm b/mods/mobs/dionaea/items/roast.dm index 3df2242a39a..6d77f44b5ba 100644 --- a/mods/mobs/dionaea/items/roast.dm +++ b/mods/mobs/dionaea/items/roast.dm @@ -2,13 +2,13 @@ name = "roast diona" desc = "It's like an enormous, leathery carrot. With an eye." icon_state = "dionaroast" - trash = /obj/item/trash/plate + plate = /obj/item/plate filling_color = "#75754b" - center_of_mass = @"{'x':16,'y':7}" + center_of_mass = @'{"x":16,"y":7}' nutriment_desc = list("a chorus of flavor" = 6) nutriment_amt = 6 bitesize = 2 /obj/item/chems/food/dionaroast/populate_reagents() - reagents.add_reagent(/decl/material/solid/metal/radium, 2) + add_to_reagents(/decl/material/solid/metal/radium, 2) . = ..() diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm index 379a444e84f..382a03212e7 100644 --- a/mods/mobs/dionaea/mob/_nymph.dm +++ b/mods/mobs/dionaea/mob/_nymph.dm @@ -9,8 +9,7 @@ icon = 'mods/mobs/dionaea/icons/nymph.dmi' icon_state = ICON_STATE_WORLD death_msg = "expires with a pitiful chirrup..." - health = 60 - maxHealth = 60 + max_health = 60 available_maneuvers = list(/decl/maneuver/leap) status_flags = NO_ANTAG @@ -27,26 +26,19 @@ holder_type = /obj/item/holder/diona possession_candidate = 1 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE hud_type = /datum/hud/diona_nymph ai = /datum/ai/nymph z_flags = ZMM_MANGLE_PLANES - var/obj/item/holding_item var/tmp/flower_color var/tmp/last_glow /mob/living/carbon/alien/diona/get_jump_distance() return 3 -/mob/living/carbon/alien/diona/Login() - . = ..() - if(client && holding_item) - holding_item.screen_loc = DIONA_SCREEN_LOC_HELD - client.screen |= holding_item - /mob/living/carbon/alien/diona/sterile name = "sterile nymph" @@ -59,20 +51,15 @@ add_language(/decl/language/diona) add_language(/decl/language/human/common, 0) add_inventory_slot(new /datum/inventory_slot/head/simple) - + add_held_item_slot(new /datum/inventory_slot/gripper/mouth/nymph) if(prob(flower_chance)) flower_color = get_random_colour(1) update_icon() . = ..(mapload) -/mob/living/carbon/alien/diona/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - . = ..() - if(holding_item) - to_chat(user, SPAN_NOTICE("It is holding [html_icon(holding_item)] \a [holding_item].")) - -/mob/living/carbon/alien/diona/get_dexterity(var/silent = FALSE) - return DEXTERITY_EQUIP_ITEM +/mob/living/carbon/alien/diona/get_dexterity(var/silent) + return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM) /mob/living/carbon/alien/diona/get_bodytype() return GET_DECL(/decl/bodytype/diona) diff --git a/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm b/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm index 7fc8cf70600..a60beafc942 100644 --- a/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm +++ b/mods/mobs/dionaea/mob/gestalt/gestalt_attacks.dm @@ -1,11 +1,12 @@ /obj/structure/diona_gestalt/attackby(var/obj/item/thing, var/mob/user) . = ..() - if(thing.force) + if(thing.force) shed_atom(forcefully = TRUE) /obj/structure/diona_gestalt/hitby() - ..() - shed_atom(forcefully = TRUE) + . = ..() + if(.) + shed_atom(forcefully = TRUE) /obj/structure/diona_gestalt/bullet_act(var/obj/item/projectile/P, var/def_zone) . = ..() @@ -20,4 +21,4 @@ shed_atom(forcefully = TRUE) /obj/structure/diona_gestalt/proc/handle_member_click(var/mob/living/carbon/alien/diona/clicker) - return + return FALSE diff --git a/mods/mobs/dionaea/mob/nymph_attacks.dm b/mods/mobs/dionaea/mob/nymph_attacks.dm index d1c1447e8af..0e82f651059 100644 --- a/mods/mobs/dionaea/mob/nymph_attacks.dm +++ b/mods/mobs/dionaea/mob/nymph_attacks.dm @@ -1,7 +1,9 @@ /mob/living/carbon/alien/diona/UnarmedAttack(var/atom/A) - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(incapacitated()) + return ..() + setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(istype(loc, /obj/structure/diona_gestalt)) var/obj/structure/diona_gestalt/gestalt = loc return gestalt.handle_member_click(src, A) @@ -28,60 +30,47 @@ qdel(pile) S.forceMove(get_turf(G)) G.visible_message(SPAN_NOTICE("\A [S] falls out!")) - return + return TRUE // End superhacky stuff. - if((a_intent == I_DISARM || a_intent == I_HELP) && can_collect(A)) - collect(A) - return - if(ismob(A)) if(src != A && !gestalt_with(A)) visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A].")) - return - - . = ..() - -/mob/living/carbon/alien/diona/RangedAttack(atom/A, var/params) - if((a_intent == I_HURT || a_intent == I_GRAB) && holding_item) - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - visible_message(SPAN_DANGER("\The [src] spits \a [holding_item] at \the [A]!")) - var/atom/movable/temp = holding_item - try_unequip(holding_item) - if(temp) - temp.throw_at(A, 10, rand(3,5), src) return TRUE - . = ..() + return ..() /mob/living/carbon/alien/diona/proc/handle_tray_interaction(var/obj/machinery/portable_atmospherics/hydroponics/tray) if(incapacitated()) - return + return FALSE - if(!tray.seed && istype(holding_item, /obj/item/seeds)) - var/atom/movable/temp = holding_item - try_unequip(temp) - if(temp) - tray.plant_seed(src, temp) - return + if(!tray.seed) + var/obj/item/seeds/seeds = get_active_hand() + if(istype(seeds)) + if(try_unequip(seeds)) + tray.plant_seed(src, seeds) + return TRUE + return FALSE if(tray.dead) if(tray.remove_dead(src, silent = TRUE)) - reagents.add_reagent(/decl/material/liquid/nutriment/glucose, rand(10,20)) + add_to_reagents(/decl/material/liquid/nutriment/glucose, rand(10,20)) visible_message(SPAN_NOTICE("\The [src] chews up the dead plant, clearing \the [tray] out."), SPAN_NOTICE("You devour the dead plant, clearing \the [tray].")) - return + return TRUE + return FALSE if(tray.harvest) if(tray.harvest(src)) visible_message(SPAN_NOTICE("\The [src] harvests from \the [tray]."), SPAN_NOTICE("You harvest the contents of \the [tray].")) - return + return TRUE + return FALSE if(tray.weedlevel || tray.pestlevel) - reagents.add_reagent(/decl/material/liquid/nutriment/glucose, (tray.weedlevel + tray.pestlevel)) + add_to_reagents(/decl/material/liquid/nutriment/glucose, (tray.weedlevel + tray.pestlevel)) tray.weedlevel = 0 tray.pestlevel = 0 visible_message(SPAN_NOTICE("\The [src] begins rooting through \the [tray], ripping out pests and weeds, and eating them noisily."),SPAN_NOTICE("You begin rooting through \the [tray], ripping out pests and weeds, and eating them noisily.")) - return + return TRUE if(tray.nutrilevel < 10) var/nutrition_cost = (10-tray.nutrilevel) * 5 @@ -91,7 +80,7 @@ adjust_nutrition(-((10-tray.nutrilevel) * 5)) else to_chat(src, SPAN_NOTICE("You haven't eaten enough to refill \the [tray]'s nutrients.")) - return + return TRUE if(tray.waterlevel < 100) var/nutrition_cost = FLOOR((100-tray.nutrilevel)/10) * 5 @@ -100,6 +89,7 @@ tray.waterlevel = 100 else to_chat(src, SPAN_NOTICE("You haven't eaten enough to refill \the [tray]'s water.")) - return + return TRUE visible_message(SPAN_NOTICE("\The [src] rolls around in \the [tray] for a bit."),SPAN_NOTICE("You roll around in \the [tray] for a bit.")) + return TRUE diff --git a/mods/mobs/dionaea/mob/nymph_death.dm b/mods/mobs/dionaea/mob/nymph_death.dm index b2c6c519217..12e585beae2 100644 --- a/mods/mobs/dionaea/mob/nymph_death.dm +++ b/mods/mobs/dionaea/mob/nymph_death.dm @@ -1,7 +1,6 @@ /mob/living/carbon/alien/diona/death(gibbed) - var/obj/structure/diona_gestalt/gestalt = loc - if(istype(gestalt)) - gestalt.shed_atom(src, TRUE, FALSE) - if(holding_item) - try_unequip(holding_item) - return ..(gibbed,death_msg) + . = ..() + if(.) + var/obj/structure/diona_gestalt/gestalt = loc + if(istype(gestalt)) + gestalt.shed_atom(src, TRUE, FALSE) diff --git a/mods/mobs/dionaea/mob/nymph_emotes.dm b/mods/mobs/dionaea/mob/nymph_emotes.dm index d3a1eb2be9c..2ec719d3977 100644 --- a/mods/mobs/dionaea/mob/nymph_emotes.dm +++ b/mods/mobs/dionaea/mob/nymph_emotes.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/diona - default_emotes = list( +/mob/living/carbon/alien/diona/get_default_emotes() + var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, @@ -16,7 +16,7 @@ /decl/emote/visible/spin, /decl/emote/visible/sidestep, /decl/emote/audible/hiss, - /decl/emote/audible, + /decl/emote/audible/burp, /decl/emote/audible/scretch, /decl/emote/audible/choke, /decl/emote/audible/gnarl, @@ -24,8 +24,9 @@ /decl/emote/audible/bug_chitter, /decl/emote/audible/chirp ) + return default_emotes /decl/emote/audible/chirp key = "chirp" - emote_message_3p = "USER chirps!" + emote_message_3p = "$USER$ chirps!" emote_sound = 'mods/mobs/dionaea/sounds/nymphchirp.ogg' diff --git a/mods/mobs/dionaea/mob/nymph_holder.dm b/mods/mobs/dionaea/mob/nymph_holder.dm index 0ac27fa04c0..1a06eb0d14b 100644 --- a/mods/mobs/dionaea/mob/nymph_holder.dm +++ b/mods/mobs/dionaea/mob/nymph_holder.dm @@ -1,5 +1,5 @@ /obj/item/holder/diona - origin_tech = "{'magnets':3,'biotech':5}" + origin_tech = @'{"magnets":3,"biotech":5}' slot_flags = SLOT_HEAD | SLOT_OVER_BODY | SLOT_HOLSTER armor = list( ARMOR_BIO = ARMOR_BIO_RESISTANT, diff --git a/mods/mobs/dionaea/mob/nymph_inventory.dm b/mods/mobs/dionaea/mob/nymph_inventory.dm deleted file mode 100644 index 81c91354ee9..00000000000 --- a/mods/mobs/dionaea/mob/nymph_inventory.dm +++ /dev/null @@ -1,61 +0,0 @@ -/mob/living/carbon/alien/diona/drop_from_inventory(var/obj/item/dropping_item) - . = ..() - if(dropping_item == holding_item) - holding_item = null - -/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. Use mouth. - if(can_collect(W)) - collect(W) - return TRUE - W.forceMove(get_turf(src)) - return TRUE - -/mob/living/carbon/alien/diona/proc/can_collect(var/obj/item/collecting) - return (!holding_item && \ - istype(collecting) && \ - collecting.loc != src && \ - !collecting.anchored && \ - collecting.simulated && \ - collecting.w_class <= can_pull_size \ - ) - -/mob/living/carbon/alien/diona/proc/collect(var/obj/item/collecting) - collecting.forceMove(src) - holding_item = collecting - visible_message(SPAN_NOTICE("\The [src] engulfs \the [holding_item].")) - - // This means dionaea can hoover up beakers as a kind of impromptu chem disposal - // technique, so long as they're okay with the reagents reacting inside them. - if(holding_item.reagents && holding_item.reagents.total_volume) - holding_item.reagents.trans_to_mob(src, holding_item.reagents.total_volume, CHEM_INGEST) - - // It also means they can do the old school cartoon schtick of eating an entire sandwich - // and spitting up an empty plate. Ptooie. - if(istype(holding_item, /obj/item/chems/food)) - var/obj/item/chems/food/food = holding_item - holding_item = null - if(food.trash) - holding_item = new food.trash(src) - qdel(food) - - if(!QDELETED(holding_item)) - holding_item.equipped(src) - holding_item.screen_loc = DIONA_SCREEN_LOC_HELD - -/mob/living/carbon/alien/diona/verb/drop_item_verb() - set name = "Drop Held Item" - set desc = "Drop the item you are currently holding inside." - set category = "IC" - set src = usr - drop_item() - -/mob/living/carbon/alien/diona/drop_item() - var/item = holding_item - if(item && try_unequip(item)) - visible_message(SPAN_NOTICE("\The [src] regurgitates \the [item].")) - return TRUE - . = ..() - -// Makes it so that the held item's screen_loc isn't unset. -/mob/living/carbon/alien/diona/item_should_have_screen_presence(obj/item/item, slot) - return (item == holding_item) || ..() \ No newline at end of file diff --git a/mods/mobs/dionaea/mob/nymph_life.dm b/mods/mobs/dionaea/mob/nymph_life.dm index d39dbadbd3b..4a13f9e580c 100644 --- a/mods/mobs/dionaea/mob/nymph_life.dm +++ b/mods/mobs/dionaea/mob/nymph_life.dm @@ -3,7 +3,7 @@ ..() - if(health <= 0 || stat == DEAD) + if(stat == DEAD) return var/turf/checking = get_turf(src) @@ -25,11 +25,18 @@ set_nutrition(clamp(nutrition + FLOOR(radiation/100) + light_amount, 0, 500)) if(radiation >= 50 || light_amount > 2) //if there's enough light, heal + var/update_health = FALSE if(getBruteLoss()) - adjustBruteLoss(-1) + update_health = TRUE + adjustBruteLoss(-1, do_update_health = FALSE) if(getFireLoss()) - adjustFireLoss(-1) + update_health = TRUE + adjustFireLoss(-1, do_update_health = FALSE) if(getToxLoss()) - adjustToxLoss(-1) + update_health = TRUE + adjustToxLoss(-1, do_update_health = FALSE) if(getOxyLoss()) - adjustOxyLoss(-1) + update_health = TRUE + adjustOxyLoss(-1, do_update_health = FALSE) + if(update_health) + update_health() \ No newline at end of file diff --git a/mods/mobs/dionaea/mob/nymph_ui.dm b/mods/mobs/dionaea/mob/nymph_ui.dm index 4eccaa1cf39..1fc65456e03 100644 --- a/mods/mobs/dionaea/mob/nymph_ui.dm +++ b/mods/mobs/dionaea/mob/nymph_ui.dm @@ -10,20 +10,23 @@ intent = I_DISARM icon_state = "intent_help" -/obj/screen/diona_held - name = "held item" - screen_loc = DIONA_SCREEN_LOC_HELD - icon_state = "held" - -/obj/screen/diona_held/Click() - var/mob/living/carbon/alien/diona/chirp = usr - if(istype(chirp) && chirp.holding_item) chirp.try_unequip(chirp.holding_item) - /datum/hud/diona_nymph var/obj/screen/diona_held/held -/datum/hud/diona_nymph/get_ui_style() - return 'mods/mobs/dionaea/icons/ui.dmi' +/decl/ui_style/diona + name = "Diona" + restricted = TRUE + uid = "ui_style_diona" + override_icons = list( + UI_ICON_HEALTH = 'mods/mobs/dionaea/icons/ui_health.dmi', + UI_ICON_HANDS = 'mods/mobs/dionaea/icons/ui_hands.dmi', + UI_ICON_INTENT = 'mods/mobs/dionaea/icons/ui_intents.dmi', + UI_ICON_INTERACTION = 'mods/mobs/dionaea/icons/ui_interactions.dmi', + UI_ICON_INVENTORY = 'mods/mobs/dionaea/icons/ui_inventory.dmi' + ) + +/datum/hud/diona_nymph/get_ui_style_data() + return GET_DECL(/decl/ui_style/diona) /datum/hud/diona_nymph/get_ui_color() return COLOR_WHITE @@ -32,30 +35,17 @@ return 255 /datum/hud/diona_nymph/FinalizeInstantiation() - - var/ui_style = get_ui_style() + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() - held = new - held.icon = ui_style - held.color = ui_color - held.alpha = ui_alpha - adding += held - - action_intent = new /obj/screen/intent/diona_nymph() - action_intent.icon = ui_style - action_intent.color = ui_color - action_intent.alpha = ui_alpha - adding += action_intent - - mymob.healths = new /obj/screen() - mymob.healths.icon = ui_style - mymob.healths.color = ui_color - mymob.healths.alpha = ui_alpha - mymob.healths.icon_state = "health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = DIONA_SCREEN_LOC_HEALTH - adding += mymob.healths - - ..() \ No newline at end of file + action_intent = new /obj/screen/intent/diona_nymph(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT) + mymob.healths = new /obj/screen/diona_health( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH) + src.other = list() + src.adding = list(mymob.healths, action_intent) + ..() + +/obj/screen/diona_health + icon_state = "health0" + name = "health" + screen_loc = DIONA_SCREEN_LOC_HEALTH diff --git a/mods/persistence/__defines/logging.dm b/mods/persistence/__defines/logging.dm deleted file mode 100644 index 966ed164106..00000000000 --- a/mods/persistence/__defines/logging.dm +++ /dev/null @@ -1,3 +0,0 @@ -/proc/report_progress_serializer(var/progress_message) - admin_notice(SPAN_SERIALIZER(progress_message), R_DEBUG) - to_world_log(SPAN_SERIALIZER(progress_message)) diff --git a/mods/persistence/_maps.dm b/mods/persistence/_maps.dm deleted file mode 100644 index 5453b5fb365..00000000000 --- a/mods/persistence/_maps.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/map - var/spawn_network // Network ID of the computer network used on the planetary base. \ No newline at end of file diff --git a/mods/persistence/_persistence.dme b/mods/persistence/_persistence.dme index 09a82a23d32..f4fca53a1e6 100644 --- a/mods/persistence/_persistence.dme +++ b/mods/persistence/_persistence.dme @@ -1,38 +1,20 @@ #ifndef MODPACK_PERSISTENCE #define MODPACK_PERSISTENCE // BEGIN_INCLUDE -#include "_maps.dm" #include "_persistence.dm" #include "random_phrase.dm" -#include "__defines\area_saving.dm" -#include "__defines\logging.dm" -#include "__defines\saved_var.dm" -#include "__defines\seed_saving_helper.dm" -#include "__defines\serializer.dm" #include "_global_vars\area_control.dm" -#include "_global_vars\serialization.dm" #include "_onclick\click.dm" #include "code\__defines\computers.dm" -#include "code\__defines\limbo.dm" -#include "code\__defines\persistent_id.dm" -#include "code\__defines\world_save.dm" -#include "code\controllers\configuration.dm" #include "code\unit_tests\map_tests.dm" #include "controllers\atoms.dm" #include "controllers\autotransfer.dm" #include "controllers\ticker.dm" #include "controllers\subsystems\air.dm" -#include "controllers\subsystems\autosave.dm" #include "controllers\subsystems\mapping.dm" #include "controllers\subsystems\mining.dm" -#include "controllers\subsystems\persistence.dm" #include "controllers\subsystems\skills.dm" #include "controllers\subsystems\initialization\chargen.dm" -#include "controllers\subsystems\initialization\fabrication.dm" -#include "controllers\subsystems\persistence\persistence_loading.dm" -#include "controllers\subsystems\persistence\persistence_saving.dm" -#include "controllers\subsystems\persistence\persistence_stats.dm" -#include "controllers\subsystems\persistence\persistence_storage.dm" #include "controllers\subsystems\processing\specifications.dm" #include "datums\extensions\extensions.dm" #include "datums\extensions\holster.dm" @@ -47,7 +29,6 @@ #include "datums\music_tracks\juno.dm" #include "datums\music_tracks\neogrotesque.dm" #include "datums\music_tracks\neon_koto.dm" -#include "datums\observation\saving.dm" #include "datums\vending\stored_item.dm" #include "datums\wires\wires.dm" #include "game\antagonist\antagonist_helpers.dm" @@ -72,9 +53,9 @@ #include "game\objects\obj.dm" #include "game\objects\effects\effect_system.dm" #include "game\objects\effects\decals\cleanable.dm" -#include "game\objects\items\items.dm" -#include "game\objects\items\items_saving.dm" #include "game\objects\items\books\skill_book.dm" +#include "game\objects\items\cards\card_ids.dm" +#include "game\objects\items\cards\card_misc.dm" #include "game\objects\items\weapons\storage.dm" #include "game\objects\items\weapons\tanks.dm" #include "game\objects\items\weapons\circuitboards\machinery\shipsensors.dm" @@ -101,9 +82,18 @@ #include "modules\atmospherics\components\omni_devices\omni_base.dm" #include "modules\augment\active\cyberbrain.dm" #include "modules\chargen\_chargen.dm" -#include "modules\chargen\dossier_console.dm" +#include "modules\chargen\chargen_area.dm" +#include "modules\chargen\chargen_arrival.dm" +#include "modules\chargen\chargen_console.dm" #include "modules\chargen\items.dm" -#include "modules\chargen\launch_pod.dm" +#include "modules\chargen\chargen_events.dm" +#include "modules\chargen\chargen_form.dm" +#include "modules\chargen\chargen_level_data.dm" +#include "modules\chargen\chargen_pod.dm" +#include "modules\chargen\chargen_spawn_point.dm" +#include "modules\chargen\chargen_state.dm" +#include "modules\chargen\chargen_status_objects.dm" +#include "modules\chargen\chargen_template.dm" #include "modules\chargen\defines\origins.dm" #include "modules\chargen\defines\perks_flaws.dm" #include "modules\chargen\defines\roles.dm" @@ -136,8 +126,6 @@ #include "modules\detectivework\microscope\_forensic_machine.dm" #include "modules\economy\account.dm" #include "modules\economy\economy.dm" -#include "modules\emotes\audible.dm" -#include "modules\emotes\human.dm" #include "modules\fabrication\_fabricator.dm" #include "modules\fabrication\fabricator_build.dm" #include "modules\fabrication\fabricator_intake.dm" @@ -154,8 +142,6 @@ #include "modules\integrated_electronics\printer.dm" #include "modules\lighting\lighting_overlay.dm" #include "modules\map\map_template_persistent.dm" -#include "modules\materials\recipes_persistence.dm" -#include "modules\materials\definitions\materials_solid_metal.dm" #include "modules\materials\definitions\materials_stone.dm" #include "modules\materials\geology\_strata.dm" #include "modules\mining\machinery\_material_processing.dm" @@ -168,12 +154,8 @@ #include "modules\mob\language\cortical.dm" #include "modules\mob\living\exosuit.dm" #include "modules\mob\living\living.dm" -#include "modules\mob\living\carbon\_defines.dm" #include "modules\mob\living\carbon\carbon_saving.dm" #include "modules\mob\living\carbon\life.dm" -#include "modules\mob\living\carbon\human\human.dm" -#include "modules\mob\living\carbon\human\login.dm" -#include "modules\mob\living\carbon\human\logout.dm" #include "modules\mob\living\silicon\robot\inventory.dm" #include "modules\mob\living\simple_animal\friendly\mushroom.dm" #include "modules\mob\observer\limbo.dm" @@ -199,15 +181,11 @@ #include "modules\modular_computers\networking\device_types\router.dm" #include "modules\modular_computers\networking\finance\bank.dm" #include "modules\modular_computers\networking\finance\money_cube.dm" -#include "modules\modular_computers\networking\machines\_network_machine.dm" #include "modules\modular_computers\networking\machines\area_controller.dm" #include "modules\modular_computers\networking\machines\telecomms.dm" #include "modules\multiz\level_data.dm" #include "modules\multiz\stairs.dm" -#include "modules\organs\organs.dm" -#include "modules\organs\external\_external_saving.dm" #include "modules\organs\external\head.dm" -#include "modules\organs\internal\brain.dm" #include "modules\organs\internal\stack.dm" #include "modules\overmap\asteroid_magnet.dm" #include "modules\overmap\created_sectors.dm" @@ -296,32 +274,6 @@ #include "modules\shuttles\shuttle.dm" #include "modules\surgery\__surgery_setup.dm" #include "modules\surgery\_surgery.dm" -#include "modules\world_save\_persistence.dm" -#include "modules\world_save\load_cache.dm" -#include "modules\world_save\save_testing.dm" -#include "modules\world_save\saved_vars.dm" -#include "modules\world_save\saved_vars\matrix.dm" -#include "modules\world_save\saved_vars\saved_icon_states.dm" -#include "modules\world_save\saved_vars\saved_instances.dm" -#include "modules\world_save\saved_vars\saved_misc.dm" -#include "modules\world_save\saved_vars\saved_overrides.dm" -#include "modules\world_save\saved_vars\saved_skipped.dm" -#include "modules\world_save\serializers\_serializer.dm" -#include "modules\world_save\serializers\json_serializer.dm" -#include "modules\world_save\serializers\one_off_serializer.dm" -#include "modules\world_save\serializers\sql_serializer.dm" -#include "modules\world_save\serializers\sql_serializer_db.dm" -#include "modules\world_save\wrappers\_late_wrapper.dm" -#include "modules\world_save\wrappers\_wrapper.dm" -#include "modules\world_save\wrappers\_wrapper_holder.dm" -#include "modules\world_save\wrappers\area_wrapper.dm" -#include "modules\world_save\wrappers\channel_wrapper.dm" -#include "modules\world_save\wrappers\escrow_holder.dm" -#include "modules\world_save\wrappers\image_wrapper.dm" -#include "modules\world_save\wrappers\map_data_wrapper.dm" -#include "modules\world_save\wrappers\weakref_wrapper.dm" -#include "modules\world_save\wrappers\extensions\_extension_wrapper.dm" -#include "modules\world_save\wrappers\extensions\labels_wrapper.dm" // END_INCLUDE #endif // BEGIN_INTERNALS diff --git a/mods/persistence/code/controllers/configuration.dm b/mods/persistence/code/controllers/configuration.dm deleted file mode 100644 index 6e22113ebaf..00000000000 --- a/mods/persistence/code/controllers/configuration.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/configuration - var/autosave_interval = 2 HOURS - var/autosave_auto_restart = 12 HOURS - var/save_error_tolerance = PERSISTENCE_ERROR_TOLERANCE_NONE - -/datum/configuration/load_mod_config(name, value) - . = ..() - switch(name) - if("autosave_interval") - autosave_interval = text2num(value) MINUTES - . = TRUE - if("autosave_auto_restart") - autosave_auto_restart = text2num(value) HOURS - . = TRUE - if("save_error_tolerance") - value = lowertext(value) - switch(value) - if("any") - save_error_tolerance = PERSISTENCE_ERROR_TOLERANCE_ANY - if("recoverable") - save_error_tolerance = PERSISTENCE_ERROR_TOLERANCE_RECOVERABLE - if("none") - save_error_tolerance = PERSISTENCE_ERROR_TOLERANCE_NONE - else - log_misc("Bad value for '[name]' : '[value]'! (Expected 'any', 'recoverable' or 'none')") - . = TRUE - -///Hook to add persistence settings meant to be in the game_options file if any. -/datum/configuration/load_mod_game_options(name, value) - . = ..() - -///Hook to add persistence settings meant to be in the dbconfig file if any. -/datum/configuration/load_mod_dbconfig(name, value) - . = ..() \ No newline at end of file diff --git a/mods/persistence/controllers/subsystems/initialization/chargen.dm b/mods/persistence/controllers/subsystems/initialization/chargen.dm index 9f5e6bdfb09..db6f24a679e 100644 --- a/mods/persistence/controllers/subsystems/initialization/chargen.dm +++ b/mods/persistence/controllers/subsystems/initialization/chargen.dm @@ -2,123 +2,186 @@ var/global/list/chargen_areas = list() //List of pod areas, and a number of time var/global/list/chargen_landmarks = list() //List of all the chargen landmarks available for spawn. #define MAX_NB_CHAR_GEN_PODS 20 +/queue + var/list/elements = list() + +/queue/proc/get_length() + return length(elements) + +/queue/proc/push(element) + elements.Insert(1, element) + +/queue/proc/pop() + var/queue_len = length(elements) + if(!queue_len) + return + . = elements[queue_len] + elements.len-- + +/queue/proc/peek() + var/queue_len = length(elements) + if(queue_len) + return elements[queue_len] + +/** + System for managing the character generator for new players. + * Handles assigning chargen rooms. + * Handles moving players after completing chargen into the world. + */ SUBSYSTEM_DEF(chargen) name = "Chargen" init_order = SS_INIT_MAPPING - flags = SS_NO_FIRE - var/map_z // What z-level is being used for the pods. - - var/obj/abstract/limbo_holder - -/datum/controller/subsystem/chargen/Initialize() - SSmapping.increment_world_z_size(/datum/level_data/chargen) - map_z = world.maxz - - report_progress("Loading chargen map data.") - var/datum/map_load_metadata/M = maploader.load_map(file("maps/chargen/chargen.dmm"), 1, 1, map_z) - if (M) - var/width = M.bounds[4] - var/height = M.bounds[5] - - report_progress("Created chargen away site at [M.bounds[3]].") - var/chargen_pod_counter = 1 - for(var/x in 1 to FLOOR(world.maxx / width)) - for(var/y in 1 to FLOOR(world.maxy / height)) - // We already loaded the first one at (1, 1) so skip it - if(x == 1 && y == 1) - continue - if(chargen_pod_counter >= MAX_NB_CHAR_GEN_PODS) - break - chargen_pod_counter++ - maploader.load_map(file("maps/chargen/chargen.dmm"), ((x - 1) * width) + 1, ((y - 1) * height) + 1, map_z, no_changeturf = TRUE) - CHECK_TICK - - limbo_holder = new(locate(world.maxx / 2, world.maxy / 2, map_z)) - -/datum/controller/subsystem/chargen/proc/assign_spawn_pod(var/area/chargen/pod) - chargen_areas[pod] += 1 - - //Remove it from the list of landmarks - if(!pod.chargen_landmark) - log_warning("Chargen pod '[pod]' has not landmark set!") - return - //Because spawnpoints don't have a proc to return turfs and instead just share their turf var to grab the available turfs, we gotta change the spawnpoint :D - var/decl/spawnpoint/chargen/C = GET_DECL(/decl/spawnpoint/chargen) - if(C) - C.remove_spawn_turf(get_turf(pod.chargen_landmark)) - log_debug("SSChargen: Assigned area '[pod]' with '[chargen_areas[pod]]' assigned users currently!") + ///The level id of the level data being used as chargen level + var/chargen_level_id + ///A queue of players currently awaiting spawning in the world after concluding chargen. + var/queue/world_spawn_queue = new() + +/datum/controller/subsystem/chargen/fire(resumed) + //Checks our list of players awaiting a chargen room if any. + var/datum/queued_chargen_world_spawn/queued + while((queued = world_spawn_queue.peek())) + queued.spawn_attempts++ + //Grab the player awaiting spawn + var/mob/living/player = queued.player.resolve() + if(!player || try_spawn_player_in_world(player, queued.spawn_provider)) + qdel(world_spawn_queue.pop()) + else + //Put the player at the end of the queue for now + world_spawn_queue.push(world_spawn_queue.pop()) + //Tell the staff if a player has been stuck in the queue for a really long time. + if(queued.spawn_attempts == 300) + var/msg = "SSChargen: Player [player] ([player.ckey]) couldn't find a spawn point after [queued.spawn_attempts] attempts, and being queued for [(world.time - queued.time_queued) / (1 SECOND)] seconds!" + log_warning(msg) + message_staff(msg) + to_chat(player, SPAN_WARNING("Finding a spawn point is taking unusually long. Please contact the staff.")) + CHECK_TICK + +/** + Returns a turf to spawn limbo observers on. + #TODO: Move this somewhere that makes sense? + */ +/datum/controller/subsystem/chargen/proc/get_limbo_turf() + var/datum/level_data/LD = SSmapping.levels_by_id[chargen_level_id] + if(LD) + return WORLD_CENTER_TURF(LD.level_z) + +/** + Sets the level_data id for the chargen level. This allows us to lookup the chargen level in the mapping ss without worrying about z indices. + */ +/datum/controller/subsystem/chargen/proc/set_chargen_level_id(level_id) + chargen_level_id = level_id + +/** + Marks a chargen room as being occupied by the given player. Prevents assigning a room to multiple players at once. + */ +/datum/controller/subsystem/chargen/proc/assign_spawn_pod(area/chargen/pod, mob/living/player) + if(is_chargen_room_busy(pod)) + log_warning("Chargen pod '[pod]' had more than one player assigned to it!") + chargen_areas[pod] += 1 + //Let the area register some callbacks to track the player + pod.set_assigned_player(player) + log_debug("SSChargen: Assigned area '[pod]' with '[chargen_areas[pod]]' assigned users currently to '[player]'([player.ckey])!") +/** + Marks a chargen room as being free for re-use by another player. + */ /datum/controller/subsystem/chargen/proc/release_spawn_pod(var/area/chargen/pod) chargen_areas[pod] -= 1 - - //Add it to the list of landmarks - if(!pod.chargen_landmark) - log_warning("Chargen pod '[pod]' has not landmark set!") - return - - //Because spawnpoints don't have a proc to return turfs and instead just share their turf var to grab the available turfs, we gotta change the spawnpoint :D - var/decl/spawnpoint/chargen/C = GET_DECL(/decl/spawnpoint/chargen) - if(C) - C.add_spawn_turf(get_turf(pod.chargen_landmark)) - - //Remove trash from the room - pod.run_chargen_cleanup() + //Let the area remove it's callbacks and run cleanup + pod.clear_assigned_player() + //Clean the place up from any trash someone might have left in there + pod.remove_trash() log_debug("SSChargen: Unassaigned area '[pod]' with '[chargen_areas[pod]]' assigned users currently!") -//Landmark -/obj/abstract/landmark/chargen_spawn - delete_me = FALSE //Currently re-used to keep track of the spawn position - -/obj/abstract/landmark/chargen_spawn/Initialize() - var/area/chargen/A = get_area(src) - if(!istype(A)) - log_warning("[src] is outside of a '/area/chargen' area!! Only place '/obj/abstract/landmark/chargen_spawn' inside a '/area/chargen'!!") - A.chargen_landmark = src //Cache the landmark to save some time - chargen_areas[A] = 0 //Set the area to free - global.chargen_landmarks |= src - return ..() - -/obj/abstract/landmark/chargen_spawn/Destroy() - var/area/chargen/A = get_area(src) - if(istype(A) && A.chargen_landmark == src) - A.chargen_landmark = null - global.chargen_landmarks -= src - return ..() - -//Annoying stuff -/mob/living/carbon/human/Destroy() - var/area/chargen/A = get_area(src) - if(istype(A) && SSchargen) - SSchargen.release_spawn_pod(A) - return ..() - -/datum/level_data/chargen - name = "chargen" - level_id = "chargen_pods" - level_flags = ZLEVEL_SEALED | ZLEVEL_ADMIN - -//Chargen spawnpoint -/decl/spawnpoint/chargen/Initialize() +/** + Returns true if the chargen room is already occupied by a player currently. + */ +/datum/controller/subsystem/chargen/proc/is_chargen_room_busy(area/chargen/room) + return room && (chargen_areas[room] >= 1) + +/** + Ran after completing chargen. To finish equipping a player + */ +/datum/controller/subsystem/chargen/proc/finish_equiping_player(mob/living/player_mob) + var/datum/mind/player_mind = player_mob.mind + player_mind.finalize_chargen_setup() + + if(player_mind.should_spawn_with_stack()) + var/obj/item/organ/internal/stack/new_stack = new() + player_mob.add_organ(new_stack, player_mob.get_organ(new_stack.parent_organ)) + to_chat(player_mob, SPAN_NOTICE("You have been provided with a Cortical Stack to act as an emergency revival tool.")) + + var/obj/starter_book = player_mind.get_starter_book_type() + if(starter_book) + to_chat(player_mob, SPAN_NOTICE("You have brought with you a textbook related to your specialty. It can increase your skills temporarily by reading it, or permanently through dedicated study. It's highly valuable, so don't lose it!")) + player_mob.equip_to_slot_or_store_or_drop(new starter_book(player_mob), slot_in_backpack_str) + +/** + Gives us a player to spawn in the world after completing chargen. + */ +/datum/controller/subsystem/chargen/proc/queue_player_world_spawn(mob/living/player_mob, decl/spawnpoint/provider) + log_debug("SSChargen: Player [player_mob] has been queued for world spawn.") + world_spawn_queue.push(new /datum/queued_chargen_world_spawn(player_mob, provider)) + +/** + Try to have the spawnpoint spawn a player in the world. + */ +/datum/controller/subsystem/chargen/proc/try_spawn_player_in_world(mob/living/player_mob, decl/spawnpoint/provider) + //First make sure the player is set to have cleared completely chargen + set_player_chargen_state(player_mob, CHARGEN_STATE_FINALIZED) + //return provider.try_spawn(player_mob) + //Check if we have an available spawn turf + var/atom/spawnloc = SAFEPICK(provider.get_spawn_turfs(player_mob)) + if(!spawnloc) + return FALSE //No turfs available + //If we got a turf, move us there. The callbacks set on the player should handle properly reseting the chargen room. + player_mob.forceMove(spawnloc) + //Run the spawn point post-spawn stuff + provider.after_join(player_mob) + return TRUE + +// Chargen Accessors + +///Sets the player's origin to the given id. +/datum/controller/subsystem/chargen/proc/set_player_chargen_origin(mob/living/player, origin_id) + player.mind.set_chargen_origin(origin_id) + +///Sets the player's role to the given id. +/datum/controller/subsystem/chargen/proc/set_player_chargen_role(mob/living/player, role_id) + player.mind.set_chargen_role(role_id) + +///Change the chargen state for a given player to the specified state. Ensures everything is updated together. +/datum/controller/subsystem/chargen/proc/set_player_chargen_state(mob/living/player, chargen_state) + player.mind.set_player_chargen_state(chargen_state) + +///Validates the picked origin and role set in their mind. The player has to use the chargen form to set those. +/datum/controller/subsystem/chargen/proc/validate_chargen_form_submission(mob/living/player) + if(isnull(player.mind.origin)) + to_chat(player, SPAN_NOTICE("Application incomplete. Please enter an origin to proceed.")) + return + if(isnull(player.mind.role)) + to_chat(player, SPAN_NOTICE("Application incomplete. Please enter a role to proceed.")) + return + return TRUE + +/////////////////////////////////////////////////////////////////////////// +// Queued Spawn Entry +/////////////////////////////////////////////////////////////////////////// + +///Data on a player awauting spawning in the world +/datum/queued_chargen_world_spawn + var/weakref/player + var/decl/spawnpoint/spawn_provider + var/spawn_attempts = 0 + var/time_queued + +/datum/queued_chargen_world_spawn/New(mob/living/_player_mob, decl/spawnpoint/_provider) + player = weakref(_player_mob) + spawn_provider = _provider + time_queued = world.time + +/datum/queued_chargen_world_spawn/Destroy(force) + player = null + spawn_provider = null . = ..() - LAZYINITLIST(_spawn_turfs) - for(var/obj/abstract/landmark/chargen_spawn/C in global.chargen_landmarks) - _spawn_turfs |= get_turf(C) - -/decl/spawnpoint/chargen - uid = "spawn_chargen" - -/decl/spawnpoint/chargen/after_join(mob/victim) - var/turf/myturf = get_turf(victim.loc) - var/area/chargen/A = get_area(myturf) - if(istype(A)) - SSchargen.assign_spawn_pod(A) //Mark the pod area as reserved - else - var/mess = "'[victim]' (CKEY: [victim.ckey]) spawned outside chargen for some reasons." - log_warning(mess) - message_staff(mess) - -/datum/job/colonist/get_roundstart_spawnpoint() - CRASH("!!!!! datum/job/colonist/get_roundstart_spawnpoint() was called! !!!!!") - -#undef MAX_NB_CHAR_GEN_PODS \ No newline at end of file diff --git a/mods/persistence/controllers/subsystems/initialization/fabrication.dm b/mods/persistence/controllers/subsystems/initialization/fabrication.dm deleted file mode 100644 index 7acf09f4c8f..00000000000 --- a/mods/persistence/controllers/subsystems/initialization/fabrication.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/controller/subsystem/fabrication - var/list/research_recipes = list() // Fabricator class -> recipe - -/datum/controller/subsystem/fabrication/Initialize() - . = ..() - for(var/fab_class in all_recipes) - var/list/fab_recipes = all_recipes[fab_class] - research_recipes[fab_class] = fab_recipes.Copy() - if(fab_class in initial_recipes) - research_recipes[fab_class] -= initial_recipes[fab_class] - - research_recipes[fab_class] -= get_unlocked_recipes(fab_class, get_default_initial_tech_levels()) - - for(var/datum/fabricator_recipe/recipe in research_recipes[fab_class]) - if(recipe.research_excluded) - research_recipes[fab_class] -= recipe - else if(TECH_ESOTERIC in recipe.required_technology) // These techs must be unlocked via random chance during iteration - research_recipes[fab_class] -= recipe - - if(!length(research_recipes[fab_class])) - research_recipes -= fab_class \ No newline at end of file diff --git a/mods/persistence/controllers/subsystems/skills.dm b/mods/persistence/controllers/subsystems/skills.dm index 8467d004e28..6b4bbd0159b 100644 --- a/mods/persistence/controllers/subsystems/skills.dm +++ b/mods/persistence/controllers/subsystems/skills.dm @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(skills) var/mob/target_mob = C.mob if(isobserver(target_mob)) var/datum/mind/M = C.mob.mind - if(!M || isobserver(M)) continue + if(!M || isobserver(M)) continue //#FIXME: isobserver(M) will always be false, because M is a /datum/mind target_mob = M.current if(target_mob && target_mob.skillset) diff --git a/mods/persistence/controllers/subsystems/trade_beacons.dm b/mods/persistence/controllers/subsystems/trade_beacons.dm index 741d368ae95..df791822995 100644 --- a/mods/persistence/controllers/subsystems/trade_beacons.dm +++ b/mods/persistence/controllers/subsystems/trade_beacons.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(trade_beacons) wait = 5 MINUTES priority = SS_PRIORITY_MONEY_ACCOUNTS var/list/all_trade_beacons = list() - var/list/wanted_trade_beacons = list(/obj/effect/overmap/trade_beacon/test_beacon, /obj/effect/overmap/trade_beacon/test_beacon2) // list(//obj/effect/overmap/trade_beacon/example, /obj/effect/overmap/trade_beacon/steel, /obj/effect/overmap/trade_beacon/xandahar) + var/list/wanted_trade_beacons //= list(/obj/effect/overmap/trade_beacon/test_beacon, /obj/effect/overmap/trade_beacon/test_beacon2) // list(//obj/effect/overmap/trade_beacon/example, /obj/effect/overmap/trade_beacon/steel, /obj/effect/overmap/trade_beacon/xandahar) var/last_cycle = 0 /datum/controller/subsystem/trade_beacons/Destroy() diff --git a/mods/persistence/datums/extensions/extensions.dm b/mods/persistence/datums/extensions/extensions.dm index 4a2ab0f371e..c994079164d 100644 --- a/mods/persistence/datums/extensions/extensions.dm +++ b/mods/persistence/datums/extensions/extensions.dm @@ -4,7 +4,7 @@ /datum/extension/New(datum/holder) . = ..() if(should_save) - events_repository.register(/decl/observ/world_saving_start_event, SSpersistence, src, .proc/on_save) + events_repository.register(/decl/observ/world_saving_start_event, SSpersistence, src, PROC_REF(on_save)) /datum/extension/Destroy() if(should_save) diff --git a/mods/persistence/datums/mind/mind.dm b/mods/persistence/datums/mind/mind.dm index 87df1439938..a33836166bc 100644 --- a/mods/persistence/datums/mind/mind.dm +++ b/mods/persistence/datums/mind/mind.dm @@ -1,35 +1,6 @@ -var/global/list/player_minds = list() - -/datum/mind - // This is a unique UID that will forever identify this mind. - // No two minds are ever the same, and this ID will always identify 'this character'. - var/unique_id - var/age = 0 // How old the mob's mind is in years. - var/philotic_damage = 0 - var/chargen_stack = TRUE // Whether or not the mob starts with a cortical stack. - - var/datum/skillset/chargen_skillset // Temporary skillset used for character generation. - var/finished_chargen = FALSE // Whether or not this character finished character generation. - var/decl/hierarchy/chargen/origin/origin // The origin chosen for this character at chargen. - var/decl/hierarchy/chargen/role/role // The role chosen for this character at chargen. - -/datum/mind/New() - . = ..() - unique_id = "[make_sequential_guid(/datum/mind)]" - global.player_minds += src - -/datum/mind/Destroy() - . = ..() - global.player_minds -= src - -/datum/mind/transfer_to(mob/living/new_character) - . = ..() - // New mobs tend to have their organs installed before mind is transferred, so we'll double check that the mind_id is correct here. - var/mob/living/carbon/human/H = new_character - if(istype(H)) - var/obj/item/organ/internal/stack/S = H.get_organ(BP_STACK) - if(S) - S.update_mind_id() +// +// +// /proc/get_valid_clone_pods(var/mind_id) var/list/valid_clone_pods = list() diff --git a/mods/persistence/game/machinery/cryopod.dm b/mods/persistence/game/machinery/cryopod.dm index 3b1da74f811..c55b679c829 100644 --- a/mods/persistence/game/machinery/cryopod.dm +++ b/mods/persistence/game/machinery/cryopod.dm @@ -114,7 +114,7 @@ /obj/machinery/cryopod/despawner/proc/update_sound() if(operable() && use_power) if(!sound_looping) - sound_looping = play_looping_sound(src, "[type]", 'sound/machines/refrigerator_hum_loop.ogg', 30, 5, 2, prefer_mute = TRUE) + sound_looping = play_looping_sound(src, "[type]", 'sound/machines/refrigerator_hum_loop.ogg', 15, 5, 2, prefer_mute = TRUE) else sound_looping.Unpause() else if(sound_looping) diff --git a/mods/persistence/game/machinery/doors/_door.dm b/mods/persistence/game/machinery/doors/_door.dm index f1537e07ae2..2e379e9db6c 100644 --- a/mods/persistence/game/machinery/doors/_door.dm +++ b/mods/persistence/game/machinery/doors/_door.dm @@ -1,10 +1,10 @@ /obj/machinery/door/Initialize(mapload, d, populate_parts, obj/structure/door_assembly/assembly) if(persistent_id) - CUSTOM_SV("health", health) //Health gets overwritten with maxhealth in parent init + CUSTOM_SV("current_health", current_health) //Health gets overwritten with maxhealth in parent init . = ..() if(persistent_id) - health = LOAD_CUSTOM_SV("health") - CLEAR_SV("health") + current_health = LOAD_CUSTOM_SV("current_health") + CLEAR_SV("current_health") /obj/machinery/door/LateInitialize(mapload, dir=0, populate_parts=TRUE) // Don't populate parts if this is a saved door diff --git a/mods/persistence/game/machinery/kitchen/gibber.dm b/mods/persistence/game/machinery/kitchen/gibber.dm index dc19be46ca3..ea6bf730eac 100644 --- a/mods/persistence/game/machinery/kitchen/gibber.dm +++ b/mods/persistence/game/machinery/kitchen/gibber.dm @@ -11,7 +11,7 @@ update_icon() admin_attack_log(user, occupant, "Gibbed the victim", "Was gibbed", "gibbed") - addtimer(CALLBACK(src, .proc/finish_gibbing), gib_time) + addtimer(CALLBACK(src, PROC_REF(finish_gibbing)), gib_time) var/list/gib_products = shuffle(occupant.harvest_meat() | occupant.harvest_skin() | occupant.harvest_bones()) if(length(gib_products) <= 0) diff --git a/mods/persistence/game/machinery/machinery.dm b/mods/persistence/game/machinery/machinery.dm index b891ac3b40a..561bde5f814 100644 --- a/mods/persistence/game/machinery/machinery.dm +++ b/mods/persistence/game/machinery/machinery.dm @@ -68,8 +68,6 @@ SAVED_VAR(/obj/item/stock_parts/capacitor, charge) SAVED_VAR(/obj/item/stock_parts/computer/ai_slot, stored_card) -SAVED_VAR(/obj/item/stock_parts/computer/battery_module, battery) - SAVED_VAR(/obj/item/stock_parts/computer/hard_drive, stored_files) SAVED_VAR(/obj/item/stock_parts/computer/hard_drive, used_capacity) diff --git a/mods/persistence/game/machinery/mantrap.dm b/mods/persistence/game/machinery/mantrap.dm index 565294c7e43..827bf0e3f4d 100644 --- a/mods/persistence/game/machinery/mantrap.dm +++ b/mods/persistence/game/machinery/mantrap.dm @@ -17,6 +17,9 @@ var/mob/occupant var/entrance_dir // The side on which the occupant entered. +SAVED_VAR(/obj/machinery/mantrap, occupant) +SAVED_VAR(/obj/machinery/mantrap, entrance_dir) + /obj/machinery/mantrap/Process() if(occupant && (stat & (NOPOWER|BROKEN))) cancel_transport() @@ -63,7 +66,7 @@ playsound(src, 'sound/machines/AirlockClose_heavy.ogg', 25, 1) update_use_power(POWER_USE_ACTIVE) queue_icon_update() - addtimer(CALLBACK(src, .proc/transport_occupant), 10 SECONDS) + addtimer(CALLBACK(src, PROC_REF(transport_occupant)), 10 SECONDS) /obj/machinery/mantrap/proc/transport_occupant() update_use_power(POWER_USE_IDLE) diff --git a/mods/persistence/game/objects/items/cards/card_ids.dm b/mods/persistence/game/objects/items/cards/card_ids.dm new file mode 100644 index 00000000000..1e836f777fd --- /dev/null +++ b/mods/persistence/game/objects/items/cards/card_ids.dm @@ -0,0 +1,146 @@ +/////////////////////////////////////////////////////////////////////////////// +// item/card/id +/////////////////////////////////////////////////////////////////////////////// + +SAVED_VAR(/obj/item/card/id, access) +SAVED_VAR(/obj/item/card/id, registered_name) +SAVED_VAR(/obj/item/card/id, associated_account_id) +SAVED_VAR(/obj/item/card/id, associated_network_account) +SAVED_VAR(/obj/item/card/id, age) +SAVED_VAR(/obj/item/card/id, blood_type) +SAVED_VAR(/obj/item/card/id, dna_hash) +SAVED_VAR(/obj/item/card/id, fingerprint_hash) +SAVED_VAR(/obj/item/card/id, card_gender) +SAVED_VAR(/obj/item/card/id, front) +SAVED_VAR(/obj/item/card/id, side) +SAVED_VAR(/obj/item/card/id, assignment) +SAVED_VAR(/obj/item/card/id, military_branch) +SAVED_VAR(/obj/item/card/id, military_rank) +SAVED_VAR(/obj/item/card/id, formal_name_prefix) +SAVED_VAR(/obj/item/card/id, formal_name_suffix) +SAVED_VAR(/obj/item/card/id, detail_color) +SAVED_VAR(/obj/item/card/id, extra_details) + +/////////////////////////////////////////////////////////////////////////////// +// Antag Ids +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/syndicate_command + name = "syndicate ID card" + desc = "An ID straight from the Syndicate." + registered_name = "Syndicate" + assignment = "Syndicate Overlord" + color = COLOR_RED_GRAY + detail_color = COLOR_GRAY40 + +/////////////////////////////////////////////////////////////////////////////// +// Synth Ids +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/synthetic + name = "\improper Synthetic ID" + desc = "Access module for lawed synthetics." + icon_state = "robot_base" + assignment = "Synthetic" + detail_color = COLOR_AMBER +/obj/item/card/id/network/synthetic/Initialize(ml, material_key) + . = ..() + access = get_all_station_access() + access_synth + +/////////////////////////////////////////////////////////////////////////////// +// Admin Ids +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/all_access + name = "\improper Administrator's spare ID" + desc = "The spare ID of the Lord of Lords himself." + registered_name = "Administrator" + assignment = "Administrator" + detail_color = COLOR_MAROON + extra_details = list("goldstripe") +/obj/item/card/id/network/all_access/Initialize(ml, material_key) + . = ..() + access = get_access_ids() + +/////////////////////////////////////////////////////////////////////////////// +// Base Id Card Types +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/civilian + desc = "A card issued to civilian staff." + detail_color = COLOR_CIVIE_GREEN + +/obj/item/card/id/network/civilian/merchant + desc = "A card issued to Merchants, indicating their right to sell and buy goods." + access = list(access_merchant) + color = COLOR_OFF_WHITE + detail_color = COLOR_BEIGE + +/obj/item/card/id/network/civilian/mercenary + desc = "A card issued to Mercenary, indicating they might be trouble." + access = list(access_mercenary) + color = COLOR_OFF_WHITE + detail_color = COLOR_RED_GRAY + +/obj/item/card/id/network/cargo + desc = "A card issued to cargo staff." + detail_color = COLOR_BROWN + +/obj/item/card/id/network/engineering + desc = "A card issued to engineering staff." + detail_color = COLOR_SUN + +/obj/item/card/id/network/medical + desc = "A card issued to medical staff." + detail_color = COLOR_PALE_BLUE_GRAY + +/obj/item/card/id/network/science + desc = "A card issued to science staff." + detail_color = COLOR_PALE_PURPLE_GRAY + +/obj/item/card/id/network/security + desc = "A card issued to security staff." + color = COLOR_OFF_WHITE + detail_color = COLOR_MAROON + +/////////////////////////////////////////////////////////////////////////////// +// Base Heads Id Card Types +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/civilian/head + desc = "A card which represents common sense and responsibility." + extra_details = list("goldstripe") + +/obj/item/card/id/network/cargo/head + desc = "A card which represents service and planning." + extra_details = list("goldstripe") + +/obj/item/card/id/network/engineering/head + desc = "A card which represents creativity and ingenuity." + extra_details = list("goldstripe") + +/obj/item/card/id/network/medical/head + desc = "A card which represents care and compassion." + extra_details = list("goldstripe") + +/obj/item/card/id/network/science/head + desc = "A card which represents knowledge and reasoning." + extra_details = list("goldstripe") + +/obj/item/card/id/network/security/head + desc = "A card which represents honor and protection." + extra_details = list("goldstripe") + +/////////////////////////////////////////////////////////////////////////////// +// Fancy Cards +/////////////////////////////////////////////////////////////////////////////// + +/obj/item/card/id/network/silver + desc = "A silver card which shows honour and dedication." + color = COLOR_SILVER + detail_color = COLOR_STEEL + +/obj/item/card/id/network/gold + desc = "A golden card which shows power and might." + color = "#d4c780" + extra_details = list("goldstripe") diff --git a/mods/persistence/game/objects/items/cards/card_misc.dm b/mods/persistence/game/objects/items/cards/card_misc.dm new file mode 100644 index 00000000000..e44ef268c40 --- /dev/null +++ b/mods/persistence/game/objects/items/cards/card_misc.dm @@ -0,0 +1,14 @@ + +/////////////////////////////////////////////////////////////////////////////// +// item/card/data +/////////////////////////////////////////////////////////////////////////////// + +SAVED_VAR(/obj/item/card/data, detail_color) +SAVED_VAR(/obj/item/card/data, function) +SAVED_VAR(/obj/item/card/data, data) + +/////////////////////////////////////////////////////////////////////////////// +// item/card/union +/////////////////////////////////////////////////////////////////////////////// + +SAVED_VAR(/obj/item/card/union, signed_by) diff --git a/mods/persistence/game/objects/items/items.dm b/mods/persistence/game/objects/items/items.dm deleted file mode 100644 index 53bd4b248e4..00000000000 --- a/mods/persistence/game/objects/items/items.dm +++ /dev/null @@ -1,16 +0,0 @@ -SAVED_VAR(/obj/item, health) - -//Used by things that can be collapsed and put into other inv slots -SAVED_VAR(/obj/item, slot_flags) - -//Used by clothing that covers or not the face and can be toggled -SAVED_VAR(/obj/item, flags_inv) -SAVED_VAR(/obj/item, body_parts_covered) - -//Used by things becoming airtight or not -SAVED_VAR(/obj/item, item_flags) - -//Used by things like rig suits -SAVED_VAR(/obj/item, canremove) -SAVED_VAR(/obj/item, material) -SAVED_VAR(/obj/item, coating) \ No newline at end of file diff --git a/mods/persistence/game/objects/items/items_saving.dm b/mods/persistence/game/objects/items/items_saving.dm deleted file mode 100644 index 1097f49578d..00000000000 --- a/mods/persistence/game/objects/items/items_saving.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/Initialize(ml, material_key) - . = ..() - if(persistent_id) - //Regen coating icon cache - if(coating) - generate_blood_overlay() - if(blood_overlay) - blood_overlay.color = coating.get_color() \ No newline at end of file diff --git a/mods/persistence/game/turfs/flooring/flooring_premade.dm b/mods/persistence/game/turfs/flooring/flooring_premade.dm index a39947f36a6..9369761319b 100644 --- a/mods/persistence/game/turfs/flooring/flooring_premade.dm +++ b/mods/persistence/game/turfs/flooring/flooring_premade.dm @@ -1,5 +1,5 @@ /turf/simulated/floor/flesh name = "flesh floor" icon = 'mods/persistence/icons/turf/flooring/meat.dmi' - icon_state = "" + icon_state = "meat0" initial_flooring = /decl/flooring/flesh \ No newline at end of file diff --git a/mods/persistence/game/turfs/simulated/wall_attacks.dm b/mods/persistence/game/turfs/simulated/wall_attacks.dm index 0c129e00a2a..a2ba7e223c3 100644 --- a/mods/persistence/game/turfs/simulated/wall_attacks.dm +++ b/mods/persistence/game/turfs/simulated/wall_attacks.dm @@ -1,6 +1,6 @@ /turf/simulated/wall/attackby(var/obj/item/W, var/mob/user, click_params) // The user is trying to deconstruct the wall, so check for permissions. - if(IS_WELDER(W) || IS_WIRECUTTER(W) || IS_CROWBAR(W) || W.is_special_cutting_tool() || istype(W,/obj/item/pickaxe) || istype(W,/obj/item/rcd)) + if(IS_WELDER(W) || IS_WIRECUTTER(W) || IS_CROWBAR(W) || W.is_special_cutting_tool() || istype(W,/obj/item/tool/pickaxe) || istype(W,/obj/item/rcd)) if(!check_area_protection(user)) to_chat(user, SPAN_DANGER("A magnetic force repels your attempt to deconstruct \the [src]!")) return FALSE diff --git a/mods/persistence/icons/mob/hud.dmi b/mods/persistence/icons/mob/hud.dmi new file mode 100644 index 00000000000..bc174b219df Binary files /dev/null and b/mods/persistence/icons/mob/hud.dmi differ diff --git a/mods/persistence/icons/obj/machines/player_spawner.dmi b/mods/persistence/icons/obj/machines/player_spawner.dmi new file mode 100644 index 00000000000..d45aa4197e6 Binary files /dev/null and b/mods/persistence/icons/obj/machines/player_spawner.dmi differ diff --git a/mods/persistence/modules/admin/verbs/admin.dm b/mods/persistence/modules/admin/verbs/admin.dm index d707589ef37..bb5ba17682b 100644 --- a/mods/persistence/modules/admin/verbs/admin.dm +++ b/mods/persistence/modules/admin/verbs/admin.dm @@ -71,7 +71,7 @@ var/global/list/persistence_admin_verbs = list( if(alert(usr, "This will immediately kick all players to the lobby. Proceed?", "Kick all players and lock the server", "Yes", "No") != "Yes") return - if(global.config.enter_allowed) + if(get_config_value(/decl/config/toggle/on/enter_allowed)) holder.toggleenter() else to_chat(usr, SPAN_NOTICE("Entering is already disabled.")) diff --git a/mods/persistence/modules/atmospherics/components/injector.dm b/mods/persistence/modules/atmospherics/components/injector.dm index accbe68b45f..0e9bf0f4b01 100644 --- a/mods/persistence/modules/atmospherics/components/injector.dm +++ b/mods/persistence/modules/atmospherics/components/injector.dm @@ -4,15 +4,18 @@ /obj/item/stock_parts/radio/receiver/buildable, /obj/item/stock_parts/radio/transmitter/on_event/buildable, ) + stock_part_presets = list( + /decl/stock_part_preset/terminal_setup/offset_dir, + ) -/obj/machinery/atmospherics/unary/outlet_injector/cabled/populate_parts(full_populate) - if(persistent_id) // Only objects that have been loaded with have this var set at creation, so we prevent recreating additional components. - return - . = ..() - var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) - term.terminal_dir = dir - term.make_terminal(src) // intentional crash if there is no terminal - queue_icon_update() +// /obj/machinery/atmospherics/unary/outlet_injector/cabled/populate_parts(full_populate) +// if(persistent_id) // Only objects that have been loaded with have this var set at creation, so we prevent recreating additional components. +// return +// . = ..() +// var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) +// term.terminal_dir = dir +// term.make_terminal(src) // intentional crash if there is no terminal +// queue_icon_update() /obj/machinery/atmospherics/unary/outlet_injector/cabled/on icon_state = "on" diff --git a/mods/persistence/modules/atmospherics/components/vents.dm b/mods/persistence/modules/atmospherics/components/vents.dm index 62167f9fb41..a35a3a15f8b 100644 --- a/mods/persistence/modules/atmospherics/components/vents.dm +++ b/mods/persistence/modules/atmospherics/components/vents.dm @@ -1,24 +1,25 @@ //Vent working directly with cable power instead of apcs /obj/machinery/atmospherics/unary/vent_pump/cabled uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, + /obj/item/stock_parts/power/terminal/buildable, /obj/item/stock_parts/radio/receiver/buildable, /obj/item/stock_parts/radio/transmitter/on_event/buildable, ) stock_part_presets = list( /decl/stock_part_preset/radio/receiver/vent_pump = 1, /decl/stock_part_preset/radio/event_transmitter/vent_pump = 1, - /decl/stock_part_preset/terminal_connect/offset_dir = 1, + /decl/stock_part_preset/terminal_setup/offset_dir, ) -/obj/machinery/atmospherics/unary/vent_pump/cabled/populate_parts(full_populate) - if(persistent_id) // Only objects that have been loaded with have this var set at creation, so we prevent recreating additional components. - return - . = ..() - var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) - term.terminal_dir = dir - term.make_terminal(src) // intentional crash if there is no terminal - queue_icon_update() +// /obj/machinery/atmospherics/unary/vent_pump/cabled/populate_parts(full_populate) +// if(persistent_id) // Only objects that have been loaded with have this var set at creation, so we prevent recreating additional components. +// return +// . = ..() +// //#FIXME: What is going on here? This is kind of dangerous and a weird way to go about things?? +// var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) +// term.terminal_dir = dir +// term.make_terminal(src) // intentional crash if there is no terminal +// queue_icon_update() /obj/machinery/atmospherics/unary/vent_pump/cabled/on use_power = POWER_USE_IDLE @@ -41,5 +42,5 @@ stock_part_presets = list( /decl/stock_part_preset/radio/receiver/vent_pump/airlock = 1, /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock = 1, - /decl/stock_part_preset/terminal_connect/offset_dir = 1, + /decl/stock_part_preset/terminal_setup/offset_dir, ) \ No newline at end of file diff --git a/mods/persistence/modules/atmospherics/pipes.dm b/mods/persistence/modules/atmospherics/pipes.dm index 6c522a74edf..3cd0daa8f3c 100644 --- a/mods/persistence/modules/atmospherics/pipes.dm +++ b/mods/persistence/modules/atmospherics/pipes.dm @@ -1,5 +1,5 @@ /obj/machinery/atmospherics/pipe/Initialize() . = ..() - if(leaking) + if(persistent_id && leaking) leaking = 0 set_leaking(TRUE) diff --git a/mods/persistence/modules/chargen/_chargen.dm b/mods/persistence/modules/chargen/_chargen.dm index fc25b42f4c0..7b38c7911eb 100644 --- a/mods/persistence/modules/chargen/_chargen.dm +++ b/mods/persistence/modules/chargen/_chargen.dm @@ -1,3 +1,5 @@ +//#TODO: Probably move this whole submodule to the base game folder? + /decl/hierarchy/chargen var/ID = "none" // ID of this chargen-entry. Needs to be unique. name = "None" // Name of the chargen-entry. This is what the player sees. diff --git a/mods/persistence/modules/chargen/chargen_area.dm b/mods/persistence/modules/chargen/chargen_area.dm new file mode 100644 index 00000000000..26fab2763c6 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_area.dm @@ -0,0 +1,117 @@ +//Force skipping area unit tests over the chargen areas since they're not legal areas. +/datum/map/New() + . = ..() + //Don't test these areas, since they have special behaviors + LAZYDISTINCTADD(area_purity_test_exempt_areas, /area/chargen) + LAZYDISTINCTADD(area_usage_test_exempted_areas, /area/chargen) + +/** + An area specialized for initializing a single character. + Act as an helper to bring all chargen components together in a more concise and simple way. + */ +/area/chargen + name = "\improper Colony Pod" + icon_state = "crew_quarters" + requires_power = FALSE + sound_env = SMALL_ENCLOSED + ///Static area instance counter for the amount of chargen areas instantiated currently + var/static/chargen_area_counter = 0 + ///A weak reference to the player mob assigned to this area. + var/tmp/weakref/current_player + +/area/chargen/Initialize() + . = ..() + name = "[name] #[chargen_area_counter]" + chargen_area_counter++ + +///Clear an entire chargen pod from any random trash left by players. (Discarded starter items) +/area/chargen/proc/remove_trash() + var/junkcounter = 0 + for(var/obj/item/junk in src) + junkcounter++ + if(!QDELETED(junk)) + qdel(junk) + log_debug("area/chargen/run_chargen_cleanup(): Cleared [junkcounter] junk item(s) from [src]!") + +/// Sets the player mob currently using this chargen area +/area/chargen/proc/set_assigned_player(mob/living/player) + if(current_player) + clear_assigned_player() + if(player) + //Slap a bunch of events on the player to track if they leave the pod or end up being destroyed before finishing chargen. + register_player_mob(player) + +/// De-assign the currently assigned player to this area. +/area/chargen/proc/clear_assigned_player() + var/mob/P = current_player?.resolve() + var/old_state + if(P) + old_state = P.mind?.chargen_state //It's fine if the mind is null here. We just need something for the state change. + unregister_player_mob(P) + //Force a reset of things listening to us for chargen state changes. (Reset decoration and etc..) + on_chargen_state_changed(old_state, CHARGEN_STATE_FORM_INCOMPLETE) + +///Adds a few events listener to the player, and assign the player to this area. +/area/chargen/proc/register_player_mob(mob/living/player) + //First, ensure the player is assigned the correct initial chargen state. + SSchargen.set_player_chargen_state(player, CHARGEN_STATE_FORM_INCOMPLETE) + + //Then set our listeners and etc.. + current_player = weakref(player) + events_repository.register(/decl/observ/exited, player, src, /area/chargen/proc/on_player_left_chargen) + events_repository.register(/decl/observ/destroyed, player, src, /area/chargen/proc/on_player_left_chargen) + events_repository.register(/decl/observ/logged_out, player, src, /area/chargen/proc/on_player_logout) + events_repository.register(/decl/observ/chargen/state_changed, player.mind, src, /area/chargen/proc/on_chargen_state_changed) + + RAISE_EVENT(/decl/observ/chargen/player_registered, src, player) + +///Removes the events listeners from the player, and clears our currently assigned player. +/area/chargen/proc/unregister_player_mob(mob/living/player) + events_repository.unregister(/decl/observ/exited, player, src) + events_repository.unregister(/decl/observ/destroyed, player, src) + events_repository.unregister(/decl/observ/logged_out, player, src) + events_repository.unregister(/decl/observ/chargen/state_changed, player.mind, src) + + RAISE_EVENT(/decl/observ/chargen/player_unregistered, src, player) + current_player = null + +///Adds an event listener onto the given `listener`, calling the `proc_call` when the chargen state has changed. +/area/chargen/proc/register_chargen_state_change_listener(datum/listener, proc_call) + events_repository.register(/decl/observ/chargen/state_changed, src, listener, proc_call) + +///Removes an event listener onto the given `listener`, calling the `proc_call` when the chargen state has changed. +/area/chargen/proc/unregister_chargen_state_change_listener(datum/listener, proc_call) + events_repository.unregister(/decl/observ/chargen/state_changed, src, listener, proc_call) + +///Returns the chargen state for the player assigned to the area. +/area/chargen/proc/get_chargen_state() + var/mob/P = current_player?.resolve() + return (P?.mind)? P.mind.chargen_state : CHARGEN_STATE_FORM_INCOMPLETE + +// +// Events Handlers +// + +/** + Receives callback from the player's mind when the chargen state is changed. + Essentially a passthrough to all the things listening to us us for changen state changes. (pod, deco, etc..) + */ +/area/chargen/proc/on_chargen_state_changed(datum/mind/M, new_state, old_state) + if(new_state == old_state) + return + //Propagate over to the things in the pod + RAISE_EVENT(/decl/observ/chargen/state_changed, src, new_state, old_state) + +///Callback from player when leaving the chargen pod. Make sure everything is ready for a new player. +/area/chargen/proc/on_player_left_chargen(mob/living/player, atom/new_loc) + if(get_area(new_loc) == src) + return + SSchargen.release_spawn_pod(src) + +///Delete the mob if the player logs out inside the chargen area. +/area/chargen/proc/on_player_logout(mob/leaver, client/client) + //#TODO: This could probably be turned into a proc on the mob. + leaver.key = null + leaver.last_ckey = initial(leaver.last_ckey) + if(!QDELETED(leaver)) + qdel(leaver) diff --git a/mods/persistence/modules/chargen/chargen_arrival.dm b/mods/persistence/modules/chargen/chargen_arrival.dm new file mode 100644 index 00000000000..a11e5071056 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_arrival.dm @@ -0,0 +1,249 @@ + +//////////////////////////////////////////////////////////////////////// +// New Player Teleporter +//////////////////////////////////////////////////////////////////////// + +// /** +// Temporary object meant to simulate a cryopod dumping new players out before being deleted. +// */ +// /obj/effect/dummy_pod +// name = "cryopod" +// icon = 'icons/obj/Cryogenic2.dmi' +// icon_state = "body_scanner_0" +// density = TRUE +// anchored = TRUE +// mouse_opacity = MOUSE_OPACITY_UNCLICKABLE +// layer = ABOVE_HUMAN_LAYER +// var/icon_state_open = "body_scanner_1" +// var/is_open = FALSE +// var/mob/living/occupant + +// /obj/effect/dummy_pod/Initialize(mapload) +// . = ..() +// global.set_floating_anim(src) + +// /obj/effect/dummy_pod/Destroy() +// global.unset_floating_anim(src) +// //Make sure nothing stays stuck in +// if(occupant) +// dump_occupant(FALSE) +// else +// dump_contents() +// return ..() + +// /obj/effect/dummy_pod/proc/set_occupant(mob/living/L) +// if(occupant) +// dump_occupant() +// occupant = L +// L.forceMove(src) +// if(occupant.client) +// occupant.client.perspective = EYE_PERSPECTIVE +// occupant.client.eye = src + +// /obj/effect/dummy_pod/proc/dump_occupant(throwout = TRUE) +// if(!occupant) +// return +// occupant.dropInto(get_turf(src)) +// if(occupant.client) +// occupant.client.eye = src.occupant.client.mob +// occupant.client.perspective = MOB_PERSPECTIVE + +// //open and close the thing for a second +// open_canopy() +// addtimer(CALLBACK(src, /obj/effect/dummy_pod/proc/close_canopy), 2 SECONDS) + +// //Send them flying a tiny bit +// if(throwout) +// occupant.throw_at(global.get_edge_target_turf(src, dir), rand(1,3), 1, src, TRUE) +// for(var/obj/O in get_contained_external_atoms()) +// if(O.simulated) +// O.throw_at(global.get_edge_target_turf(src, dir), rand(1,4), 3, src, TRUE) +// else +// dump_contents() +// occupant = null + +// /obj/effect/dummy_pod/proc/open_canopy() +// is_open = TRUE +// icon_state = icon_state_open +// playsound(src, 'sound/machines/podopen.ogg', 40) + + +// /obj/effect/dummy_pod/proc/close_canopy() +// is_open = FALSE +// icon_state = initial(icon_state) +// playsound(src, 'sound/machines/podclose.ogg', 40) + +/** + This is a single use machine that simulates teleporting the cryopod from the chargen pod and opening it. + */ +/obj/machinery/arrival_spawner + name = "deep sleep extraction device" + desc = "This machine is meant to extract sleepy space traveller from their long cryosleep with minimal side effects, and without needing any cumbersome docking infrastructure." + icon = 'mods/persistence/icons/obj/machines/player_spawner.dmi' + icon_state = "tele0" + stat_immune = NOSCREEN | NOINPUT | EMPED | MAINT | BROKEN | NOPOWER + uncreated_component_parts = null + maximum_component_parts = null + interact_offline = TRUE + base_type = /obj/machinery/arrival_spawner + + var/spawnpoint_type = /decl/spawnpoint/arrival_chargen + +/obj/machinery/arrival_spawner/Initialize(mapload, d, populate_parts) + if((. = ..()) == INITIALIZE_HINT_QDEL) + return . + var/obj/machinery/arrival_spawner/AS = locate(/obj/machinery/arrival_spawner) in loc + if(AS && AS != src) + log_warning("Existing arrival spawner located below [log_info_line(src)]. Deleting!") + return INITIALIZE_HINT_QDEL + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/arrival_spawner/LateInitialize() + . = ..() + var/decl/spawnpoint/SP = GET_DECL(spawnpoint_type) + var/turf/T = get_turf(src) + if(!T) + CRASH("[log_info_line(src)] is on a null turf. Cannot be used as a spawn position!") //Will this crash the entire LateInitializeChain? + SP.add_spawn_turf(T) + events_repository.register(/decl/observ/moved, src, src, /obj/machinery/arrival_spawner/proc/on_moved) + +/obj/machinery/arrival_spawner/Destroy() + events_repository.unregister(/decl/observ/moved, src, src, /obj/machinery/arrival_spawner/proc/on_moved) + var/decl/spawnpoint/SP = GET_DECL(spawnpoint_type) + var/turf/T = get_turf(src) + if(T) + SP.remove_spawn_turf(T) + . = ..() + +/obj/machinery/arrival_spawner/proc/on_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) + var/decl/spawnpoint/SP = GET_DECL(spawnpoint_type) + var/turf/T = get_turf(new_loc) + if(!T) + CRASH("[log_info_line(src)] is on a null turf. Cannot be used as a spawn position!") + if(old_loc) + SP.remove_spawn_turf(get_turf(old_loc)) + SP.add_spawn_turf(T) + + +// ///The player mob currently being spawned if any +// var/tmp/mob/living/spawning_player +// ///The dummy pod for the player currently being spawned. +// var/tmp/obj/effect/dummy_pod/spawning_pod + +// var/teleport_in_icon = "tele1" +// var/teleport_busy_icon = "tele2" +// var/teleport_out_icon = "tele3" + +// ///Whether the machine should show the busy sprite or not +// var/tmp/show_busy_icon = FALSE + +// /obj/machinery/arrival_spawner/Initialize(mapload, d, populate_parts) +// global.get_or_create_extension(src, /datum/extension/spawn_position/chargen_arrival) +// . = ..() + +// /obj/machinery/arrival_spawner/proc/is_ready_for_player() +// return !spawning_player && !spawning_pod + +// /obj/machinery/arrival_spawner/proc/spawn_player(mob/living/newbie) +// set waitfor = FALSE //For animations + +// //Mark ourselves are currently spawning a player +// spawning_player = newbie + +// //Make a little animation to simulate the player pod moving onto the pad +// animate_spawn_dummy_pod() + +// //Have the pod open up and dump the player out +// animate_dump_player() + +// //Wait a second and have the pod violently disintegrated +// animate_disintegrate_pod() + +// //Set us as ready for another player to spawn. +// . = spawning_player +// spawning_player = null + +// ///Creates a dummy pod the players will "come out" of. +// /obj/machinery/arrival_spawner/proc/animate_spawn_dummy_pod() +// spawning_pod = new(get_turf(src)) +// spawning_pod.set_occupant(spawning_player) +// spawning_pod.forceMove(get_turf(src)) +// spawning_pod.set_dir(dir) +// //Make sure the busy state is set +// show_busy_icon = TRUE +// update_icon() +// //Do sparkless and stufff +// flick(teleport_in_icon, src) +// sleep(1 SECONDS) //lasts 17 deciseconds + +// /obj/machinery/arrival_spawner/proc/animate_dump_player() +// spawning_pod.dump_occupant(TRUE) +// sleep(2 SECONDS) + +// /obj/machinery/arrival_spawner/proc/animate_disintegrate_pod() +// QDEL_NULL(spawning_pod) +// //Make sure the busy state is cleared +// show_busy_icon = FALSE +// update_icon() +// //sparklessss! +// flick(teleport_out_icon, src) +// sleep(3 SECONDS) //lasts 32 deciseconds + +// /obj/machinery/arrival_spawner/on_update_icon() +// . = ..() +// if(show_busy_icon) +// icon_state = teleport_busy_icon +// else +// icon_state = initial(icon_state) + +// ///////////////////////////////////////////////////////////////// +// // Spawn Position +// ///////////////////////////////////////////////////////////////// + +// /** +// Spawn position for players arriving through chargen completion. +// */ +// /datum/extension/spawn_position/chargen_arrival +// name = "arrival" +// provider = /decl/spawnpoint/arrival_chargen +// expected_type = /obj/machinery/arrival_spawner + +// /datum/extension/spawn_position/chargen_arrival/is_busy() +// var/obj/machinery/arrival_spawner/M = holder +// if(!holder) +// CRASH("Bad holder type") +// return !M.is_ready_for_player() + +// /datum/extension/spawn_position/chargen_arrival/place(mob/living/to_spawn) +// var/obj/machinery/arrival_spawner/M = holder +// if(!holder) +// CRASH("Bad holder type") + + +// // Store any held or equipped items. +// var/obj/item/storage/backpack/pack = to_spawn.get_equipped_item(slot_back_str) +// if(istype(pack)) +// for(var/atom/movable/thing in to_spawn.get_held_items()) +// to_spawn.drop_from_inventory(thing) +// pack.handle_item_insertion(thing) + +// //Put them in the machine +// M.spawn_player(to_spawn) + +///////////////////////////////////////////////////////////////// +// Spawn Point Provider +///////////////////////////////////////////////////////////////// + +/** + Secondary spawn point for characters that completed chargen + */ +/decl/spawnpoint/arrival_chargen + uid = "spawn_chargen_arrival" + name = "outreach bound pod" + spawn_flags = SPAWN_FLAG_JOBS_CAN_SPAWN + restrict_job = /datum/job/colonist + +/decl/spawnpoint/arrival_chargen/after_join(mob/living/carbon/human/victim) + SET_STATUS_MAX(victim, STAT_ASLEEP, rand(1,2)) + to_chat(victim, SPAN_NOTICE("You've waken up from the cryostasis.")) + return TRUE diff --git a/mods/persistence/modules/chargen/chargen_console.dm b/mods/persistence/modules/chargen/chargen_console.dm new file mode 100644 index 00000000000..2709b8348e6 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_console.dm @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Fake Computer +/////////////////////////////////////////////////////////////////////////////////// + +///Simple structure displaying a nanoui on interact +/obj/structure/fake_computer + name = "computer" + icon = 'icons/obj/computer.dmi' + icon_state = "computer" + density = TRUE + anchored = TRUE + +/obj/structure/fake_computer/attack_hand(mob/user) + . = ..() + ui_interact(user) + return TRUE + +/obj/structure/fake_computer/on_update_icon() + cut_overlays() + icon = initial(icon) + icon_state = initial(icon_state) + + //Slap on the screen overlay + var/image/screen_overlay = image(icon, "generic", layer) + screen_overlay.appearance_flags |= RESET_COLOR + add_overlay(screen_overlay) + + //Slap on the keyboard overlay + var/image/keyboard_overlay = image(icon, "generic_key", layer) + keyboard_overlay.appearance_flags |= RESET_COLOR + add_overlay(keyboard_overlay) + + //Light it up + set_light(2, 1, light_color) + +/obj/structure/fake_computer/CouldUseTopic(var/mob/user) + ..() + playsound(src, "keyboard", 40) + +/////////////////////////////////////////////////////////////////////////////////// +// Chargen console +/////////////////////////////////////////////////////////////////////////////////// + +///A light weight console look-alike with as only purpose displaying a nano UI. +/obj/structure/fake_computer/chargen + should_save = FALSE + is_spawnable_type = FALSE //Prevent unit tests from trying to spawn these outside of a chargen area + ///The chargen form currently set to be displayed by the console. + var/datum/nano_module/chargen/current_form + +INITIALIZE_IMMEDIATE(/obj/structure/fake_computer/chargen) //Init early +/obj/structure/fake_computer/chargen/Initialize(ml, _mat, _reinf_mat) + . = ..() + var/area/chargen/A = get_area(src) + if(!istype(A)) + CRASH("[log_info_line(src)] was not initialized inside a chargen area!") + set_area(A) + +/obj/structure/fake_computer/chargen/Destroy() + var/area/chargen/A = get_area(src) + if(istype(A)) + unset_area(A) + QDEL_NULL(current_form) + . = ..() + +///Assign the nano ui module form that will be presented by this machine. +/obj/structure/fake_computer/chargen/proc/set_form(datum/nano_module/chargen/form) + if(current_form && (current_form != form)) + QDEL_NULL(current_form) + current_form = form + +/obj/structure/fake_computer/chargen/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE) + current_form.ui_interact(user, ui_key, ui, force_open) + +////////////////////// +// Events Handlers +////////////////////// + +/// Listen to a few events from the specified area. +/obj/structure/fake_computer/chargen/proc/set_area(area/chargen/A) + events_repository.register(/decl/observ/chargen/player_registered, A, src, /obj/structure/fake_computer/chargen/proc/on_player_registered) + events_repository.register(/decl/observ/chargen/player_unregistered, A, src, /obj/structure/fake_computer/chargen/proc/on_player_unregistered) + +/// Stop listening to events from the specified area. +/obj/structure/fake_computer/chargen/proc/unset_area(area/chargen/A) + events_repository.unregister(/decl/observ/chargen/player_registered, A, src, /obj/structure/fake_computer/chargen/proc/on_player_registered) + events_repository.unregister(/decl/observ/chargen/player_unregistered, A, src, /obj/structure/fake_computer/chargen/proc/on_player_unregistered) + +///Called by the area when a player is assigned to the area containing this chargen console +/obj/structure/fake_computer/chargen/proc/on_player_registered(area/chargen/source, mob/player) + set_form(new /datum/nano_module/chargen(src, null, player, source)) + +///Called by the area when a player is unassigned to the area containing this chargen console +/obj/structure/fake_computer/chargen/proc/on_player_unregistered(area/chargen/source, mob/player) + set_form(null) diff --git a/mods/persistence/modules/chargen/chargen_events.dm b/mods/persistence/modules/chargen/chargen_events.dm new file mode 100644 index 00000000000..4d93c75684a --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_events.dm @@ -0,0 +1,23 @@ +/** + Expected event proc format: + proc/on_chargen_state_changed(datum/source, new_state, old_state) + */ +/decl/observ/chargen/state_changed + name = "Chargen State Changed" + expected_type = /datum //Can be emitted from the area or the player mind + +/** + Expected event proc format: + proc/on_player_registered(area/chargen/source, mob/player) + */ +/decl/observ/chargen/player_registered + name = "Chargen Player Registered" + expected_type = /area/chargen + +/** + Expected event proc format: + proc/on_player_unregistered(area/chargen/source, mob/player) + */ +/decl/observ/chargen/player_unregistered + name = "Chargen Player Unregistered" + expected_type = /area/chargen \ No newline at end of file diff --git a/mods/persistence/modules/chargen/chargen_form.dm b/mods/persistence/modules/chargen/chargen_form.dm new file mode 100644 index 00000000000..3a5c014f139 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_form.dm @@ -0,0 +1,111 @@ + +/** + + */ +/datum/nano_module/chargen + name = "chargen form" + available_to_ai = FALSE + + ///The ui template + var/ui_template = "chargen.tmpl" + ///The actual player character this chargen form instance is setup for. + var/mob/living/player + ///The chargen_area currently associated with the player + var/area/chargen/chargen_room + ///The section of the form to display + var/active_section = "origin" + +/datum/nano_module/chargen/New(datum/host, topic_manager, mob/living/_player, area/chargen/_room) + . = ..(host, topic_manager) + player = _player + chargen_room = _room + +/** + + */ +/datum/nano_module/chargen/Topic(var/mob/user, var/href_list, var/datum/topic_state/state) + . = TOPIC_REFRESH + + switch(href_list["action"]) + if("toggle_stack") + player.mind.set_spawn_with_stack(player.mind.should_spawn_with_stack()) + + if("choose_origin") + active_section = "origin" + + if("choose_role") + active_section = "role" + + if("submit") + if(!SSchargen.validate_chargen_form_submission(player)) + return + SSchargen.set_player_chargen_state(player, CHARGEN_STATE_FORM_COMPLETE) + + if("unsubmit") + //Setting the chargen state will update the player mind + SSchargen.set_player_chargen_state(player, CHARGEN_STATE_FORM_INCOMPLETE) + + if("confirm_origin") + SSchargen.set_player_chargen_origin(player, href_list["ref"]) + + if("confirm_role") + SSchargen.set_player_chargen_role(player, href_list["ref"]) + + +/datum/nano_module/chargen/proc/ui_data_fill_lists(mob/user, ui_key) + var/decl/hierarchy/chargen/origin/origins = GET_DECL(/decl/hierarchy/chargen/origin) + var/decl/hierarchy/chargen/role/roles = GET_DECL(/decl/hierarchy/chargen/role) + . = list() + + for(var/decl/hierarchy/chargen/D in (roles.children + origins.children)) + var/list/fields = list( + "name" = D.name, + "ref" = D.ID, + "skills" = list(), + "whitelist_only" = D.whitelist_only, + "active" = ((player.mind.origin && D == player.mind.origin) || (player.mind.role && D == player.mind.role)) + ) + + for(var/skill in D.skills) + if(!ispath(skill)) + continue + var/decl/hierarchy/skill/S = GET_DECL(skill) + if(!istype(S)) + continue + fields["skills"] += S.name + if(D.remaining_points_offset != 0) + fields["skills"] += "Point offset: [D.remaining_points_offset >= 0 ? "+" : ""][D.remaining_points_offset]" + fields["skills"] = english_list(fields["skills"]) + + if(istype(D, /decl/hierarchy/chargen/origin)) + .["origins"] += list(fields) + else + .["roles"] += list(fields) + +/datum/nano_module/chargen/ui_data(mob/user, ui_key) + if(!istype(player.mind.chargen_skillset)) + player.mind.chargen_skillset = new(player) + for(var/decl/hierarchy/skill in global.skills) + player.mind.chargen_skillset.skill_list[skill.type] = 1 + player.mind.chargen_skillset.skill_list[SKILL_HAULING] = SKILL_BASIC + player.mind.chargen_skillset.skill_list[SKILL_LITERACY] = SKILL_BASIC + . = player.mind.chargen_skillset.get_nano_data(FALSE) + + .["active"] = active_section + .["finished"] = (player.mind.chargen_state >= CHARGEN_STATE_FORM_COMPLETE) + .["map_name"] = global.using_map.station_name + .["stack"] = player.mind.chargen_stack + .["origin"] = istype(player.mind.origin) ? player.mind.origin.name : "Not set" + .["role"] = istype(player.mind.role) ? player.mind.role.name : "Not set" + + // Populate role & origin choices. + . += ui_data_fill_lists(user, ui_key) + +/datum/nano_module/chargen/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/list/data = ui_data(user) + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, ui_template, name, 1024, 780) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) diff --git a/mods/persistence/modules/chargen/chargen_level_data.dm b/mods/persistence/modules/chargen/chargen_level_data.dm new file mode 100644 index 00000000000..dacac4c1541 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_level_data.dm @@ -0,0 +1,12 @@ +/** + Level data for the chargen level. Used by the SSchargen subsystem. + */ +/datum/level_data/chargen + name = "chargen" + level_id = "chargen_pods" + level_flags = ZLEVEL_SEALED | ZLEVEL_ADMIN + +/datum/level_data/chargen/setup_level_data(skip_gen) + . = ..() + //Tell SSchargen we've been setup + SSchargen.set_chargen_level_id(level_id) diff --git a/mods/persistence/modules/chargen/chargen_pod.dm b/mods/persistence/modules/chargen/chargen_pod.dm new file mode 100644 index 00000000000..c089b4ad7cb --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_pod.dm @@ -0,0 +1,105 @@ +//#define STARTING_POINTS 30 + +//Make sure players cannot build this pod +/obj/item/stock_parts/circuitboard/cryopod/get_buildable_types() + return ..() - /obj/machinery/cryopod/chargen + +///////////////////////////////////////////////////////////////// +// Chargen Pod +///////////////////////////////////////////////////////////////// + +/obj/machinery/cryopod/chargen + base_type = /obj/machinery/cryopod/chargen //Prevents using the circuit board from the base cryopod + construct_state = /decl/machine_construction/noninteractive //Prevents tampering, and needing components + frame_type = null + interact_offline = TRUE //Don't worry about power + stat_immune = ~0 //Immune to everything + is_spawnable_type = FALSE //Prevent unit tests from trying to spawn these outside of a chargen area + + ///The spawn point provider that player completing chargen will be sent to. + var/spawn_decl = /decl/spawnpoint/arrival_chargen + +/obj/machinery/cryopod/chargen/Initialize(mapload, d, populate_parts) + . = ..() + icon_state = occupied_icon_state //Those starts closed + var/area/chargen/A = get_area(src) + if(istype(A)) + A.register_chargen_state_change_listener(src, /obj/machinery/cryopod/chargen/proc/on_chargen_state_changed) + else + CRASH("[log_info_line(src)] was not initialized inside a chargen area!") + +/obj/machinery/cryopod/chargen/proc/on_chargen_state_changed(area/source, new_state, old_state) + if(new_state == CHARGEN_STATE_FORM_COMPLETE) + ready_for_mingebag() + if(new_state == CHARGEN_STATE_FORM_INCOMPLETE) + unready() + +/** + * Open the canopy and light up to let the player that just finished the form get in! + */ +/obj/machinery/cryopod/chargen/proc/ready_for_mingebag() + set_light(10, 1, COLOR_CYAN_BLUE) + icon_state = base_icon_state + if(open_sound) + playsound(src, open_sound, 40) + +/obj/machinery/cryopod/chargen/proc/unready() + icon_state = occupied_icon_state + set_light(0, null) + if(close_sound) + playsound(src, close_sound, 40) + +/** + * Setup the player and move them to the actual station. + */ +/obj/machinery/cryopod/chargen/proc/send_to_outpost() + if(!istype(occupant)) + return + + // Add the mob to limbo for safety. Mark for removal on the next save. + SSpersistence.AddToLimbo(list(occupant, occupant.mind), occupant.mind.unique_id, LIMBO_MIND, occupant.mind.key, occupant.mind.current.real_name, TRUE, occupant.mind.key) + SSpersistence.limbo_removals += list(list(sanitize_sql(occupant.mind.unique_id), LIMBO_MIND)) + SSchargen.queue_player_world_spawn(occupant, GET_DECL(spawn_decl)) + +/obj/machinery/cryopod/chargen/check_occupant_allowed(mob/M) + . = ..() + if(!.) + return + var/allowed = (M.mind.chargen_state >= CHARGEN_STATE_FORM_COMPLETE) + if(!allowed) + to_chat(M, SPAN_NOTICE("The [src] beeps: Please finish your dossier on the terminal before proceeding to cryostasis.")) + return allowed + +///Called when the occupant is force moved outside the pod +/obj/machinery/cryopod/chargen/proc/on_occupant_forcemoved_out(mob/living/carbon/human/occupant) + //#FIXME: Once cryopods are less shitty and properly clean up the client.eye remove this.. + if(occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + set_occupant(null) + +/obj/machinery/cryopod/chargen/set_occupant(mob/living/carbon/human/occupant, silent) + var/mob/previous_occupant = occupant + //Attempt to prevent dropping any held items when transfering + if(occupant) + for(var/atom/movable/thing in occupant.get_held_items()) + occupant.equip_to_storage(thing) + . = ..() + if(src.occupant) + events_repository.register(/decl/observ/moved, src.occupant, src, /obj/machinery/cryopod/chargen/proc/on_occupant_forcemoved_out) + src.occupant.mind.set_player_chargen_state(CHARGEN_STATE_AWAITING_SPAWN) + if(!silent) + to_chat(src.occupant, SPAN_NOTICE("The [src] beeps: Launch procedure initiated. Please wait...")) + addtimer(CALLBACK(src, /obj/machinery/cryopod/chargen/proc/send_to_outpost), 2 SECONDS) + else + if(previous_occupant) + events_repository.unregister(/decl/observ/moved, previous_occupant, src, /obj/machinery/cryopod/chargen/proc/on_occupant_forcemoved_out) + if(previous_occupant.mind?.chargen_state == CHARGEN_STATE_AWAITING_SPAWN) + previous_occupant.mind.set_player_chargen_state(CHARGEN_STATE_FORM_COMPLETE) + if(!silent) + to_chat(previous_occupant, SPAN_DANGER("The [src] beeps: Launch procedure ABORTED.")) + +/obj/machinery/cryopod/chargen/Process() + return PROCESS_KILL + +//#undef STARTING_POINTS \ No newline at end of file diff --git a/mods/persistence/modules/chargen/chargen_spawn_point.dm b/mods/persistence/modules/chargen/chargen_spawn_point.dm new file mode 100644 index 00000000000..9170430d4ba --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_spawn_point.dm @@ -0,0 +1,63 @@ +/** + Specialized spawnpoint for joining a chargen room before spawning in the world. + */ +/decl/spawnpoint/chargen + uid = "spawn_chargen" + +/decl/spawnpoint/chargen/after_join(mob/victim) + var/turf/myturf = get_turf(victim.loc) + var/area/chargen/A = get_area(myturf) + if(istype(A)) + SSchargen.assign_spawn_pod(A, victim) //Mark the pod area as reserved + else + var/mess = "'[victim]' (CKEY: [victim.ckey]) spawned outside chargen for some reasons." + log_warning(mess) + message_staff(mess) + to_chat(victim, log_warning("Something went wrong during spawn. Please contact the server staff!")) + +/////////////////////////////////////////////////////////////////////////// +// Chargen Room Spawn Position extension +/////////////////////////////////////////////////////////////////////////// + +// /datum/extension/spawn_position/chargen +// expected_type = /obj/abstract/landmark/chargen_spawn +// provider = /decl/spawnpoint/chargen + +// /datum/extension/spawn_position/chargen/is_busy() +// return SSchargen.is_chargen_room_busy(get_area(holder)) + +/////////////////////////////////////////////////////////////////////////// +// Spawnpoint Landmark for Chargen Rooms +/////////////////////////////////////////////////////////////////////////// + +/** + Landmark for spawning into a chargen room. + */ +/obj/abstract/landmark/chargen_spawn + delete_me = FALSE //Currently re-used to keep track of the spawn position + var/spawn_decl = /decl/spawnpoint/chargen + +INITIALIZE_IMMEDIATE(/obj/abstract/landmark/chargen_spawn) +/obj/abstract/landmark/chargen_spawn/Initialize(mapload) + var/area/chargen/A = get_area(src) + if(!istype(A)) + log_warning("[src] is outside of a '/area/chargen' area!! Only place '/obj/abstract/landmark/chargen_spawn' inside a '/area/chargen'!!") + return INITIALIZE_HINT_QDEL + //set_extension(src, /datum/extension/spawn_position/chargen, spawn_decl) + var/decl/spawnpoint/SP = GET_DECL(spawn_decl) + var/turf/T = get_turf(src) + if(T) + SP.add_spawn_turf(T) + events_repository.register(/decl/observ/moved, src, src, /obj/abstract/landmark/chargen_spawn/proc/on_moved) + . = ..() + +/obj/abstract/landmark/chargen_spawn/Destroy() + events_repository.unregister(/decl/observ/moved, src, src, /obj/abstract/landmark/chargen_spawn/proc/on_moved) + var/decl/spawnpoint/SP = GET_DECL(spawn_decl) + var/turf/T = get_turf(src) + if(T) + SP.remove_spawn_turf(T) + . = ..() + +/obj/abstract/landmark/chargen_spawn/proc/on_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) + log_warning("[log_info_line(src)] was moved to [log_info_line(new_loc)] when it should remain where it was created!") diff --git a/mods/persistence/modules/chargen/chargen_state.dm b/mods/persistence/modules/chargen/chargen_state.dm new file mode 100644 index 00000000000..dfec1ab9760 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_state.dm @@ -0,0 +1,111 @@ +///Common chargen state tracking datum +/datum/chargen_state + var/area/current_area + var/current_state + +// +// Mind Chargen State +// + +/datum/mind + /// Whether or not the mob starts with a cortical stack. + var/chargen_stack = TRUE + /// Temporary skillset used for character generation. + var/tmp/datum/skillset/chargen_skillset + /// The origin chosen for this character at chargen. + var/decl/hierarchy/chargen/origin/origin + /// The role chosen for this character at chargen. + var/decl/hierarchy/chargen/role/role + ///Where through the chargen process is this mind at? If not using chargen, state set to CHARGEN_STATE_NONE. + var/chargen_state = CHARGEN_STATE_NONE + +SAVED_VAR(/datum/mind, chargen_stack) +SAVED_VAR(/datum/mind, origin) +SAVED_VAR(/datum/mind, role) +SAVED_VAR(/datum/mind, chargen_state) + +//Prevent saving when in chargen +/mob/living/carbon/human/should_save() + . = ..() + // We don't save characters who are in chargen + if(mind?.is_chargen_in_progress()) + return FALSE + +/** + Called by the observ event /decl/observ/chargen/state_changed, during chargen to keep everything in sync. + */ +/datum/mind/proc/set_player_chargen_state(new_state) + var/old_state = chargen_state + chargen_state = new_state + RAISE_EVENT(/decl/observ/chargen/state_changed, src, chargen_state, old_state) + +/** + * Returns whether the player should be considered has having finished the character generator stuff. + */ +/datum/mind/proc/has_finished_chargen() + return chargen_state >= CHARGEN_STATE_FINALIZED + +/** + * Returns whether the owner of this mind is currently supposed to be going through character gen. + */ +/datum/mind/proc/is_chargen_in_progress() + return (chargen_state != CHARGEN_STATE_NONE) && (chargen_state < CHARGEN_STATE_FINALIZED) + +/** + + */ +/datum/mind/proc/should_spawn_with_stack() + return chargen_stack + +/** + Set whether the mob that own this mind, should spawn with a cortical stack. + */ +/datum/mind/proc/set_spawn_with_stack(new_value) + chargen_stack = new_value + +/** + Store the currently selected origin during chargen. + */ +/datum/mind/proc/set_chargen_origin(origin_id) + var/decl/hierarchy/chargen/origin/origins = GET_DECL(/decl/hierarchy/chargen/origin) + if(origin) + for(var/skill in origin.skills) + current.skillset.skill_list[skill] -= origin.skills[skill] + + for(var/decl/hierarchy/chargen/D in origins.children) + if(D.ID == origin_id) + // Found. + origin = D + for(var/skill in D.skills) + current.skillset.skill_list[skill] += D.skills[skill] + +/** + Store the currently selected role during chargen. + */ +/datum/mind/proc/set_chargen_role(role_id) + var/decl/hierarchy/chargen/role/roles = GET_DECL(/decl/hierarchy/chargen/role) + if(role) + for(var/skill in role.skills) + current.skillset.skill_list[skill] -= role.skills[skill] + + for(var/decl/hierarchy/chargen/D in roles.children) + if(D.ID == role_id) + // Found. + role = D + for(var/skill in D.skills) + current.skillset.skill_list[skill] += D.skills[skill] + +/** + Applies the chargen stuff saved in the mind during chargen setup and copy it to the mob. + */ +/datum/mind/proc/finalize_chargen_setup() + // Updating the mob's skills with the actual chargen choices. + var/datum/skillset/mob_skillset = current.skillset + mob_skillset.skill_list = chargen_skillset.skill_list.Copy() + mob_skillset.default_value = chargen_skillset.default_value + mob_skillset.points_remaining += max(origin.remaining_points_offset + role.remaining_points_offset, 0) + mob_skillset.on_levels_change() + to_chat(current, SPAN_NOTICE("You have an additional [mob_skillset.points_remaining] skill points to apply to your character. Use the 'Adjust Skills' verb to do so")) + +/datum/mind/proc/get_starter_book_type() + return role.text_book_type \ No newline at end of file diff --git a/mods/persistence/modules/chargen/chargen_status_objects.dm b/mods/persistence/modules/chargen/chargen_status_objects.dm new file mode 100644 index 00000000000..8e011ced8b0 --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_status_objects.dm @@ -0,0 +1,68 @@ + +///////////////////////////////////////////////////////////////////// +// Status Indicators +///////////////////////////////////////////////////////////////////// + +///A fake status screen to display status updates to the user. +/obj/chargen/screen + name = "status display" + icon = 'icons/obj/status_display.dmi' + icon_state = "frame" + var/current_overlay_name + var/form_incomplete_overlay = "lockdown" + var/form_complete_overlay = "ai_urist" + var/awaiting_spawn_overlay = "ai_shipscan" + +/obj/chargen/screen/Initialize(mapload) + . = ..() + set_overlay(form_incomplete_overlay) + +/obj/chargen/screen/on_update_icon() + cut_overlays() + add_overlay(image('icons/obj/status_display.dmi', icon_state=current_overlay_name)) + +/obj/chargen/screen/proc/set_overlay(overlay_name) + current_overlay_name = overlay_name + update_icon() + +/obj/chargen/screen/proc/on_chargen_state_changed(area/source, new_state, old_state) + set_light(2, 0.5, COLOR_WHITE) + switch(new_state) + if(CHARGEN_STATE_FORM_INCOMPLETE) + set_overlay(form_incomplete_overlay) + if(CHARGEN_STATE_FORM_COMPLETE) + set_overlay(form_complete_overlay) + if(CHARGEN_STATE_AWAITING_SPAWN) + set_overlay(awaiting_spawn_overlay) + +///Fake status light to display chargen status to the user. +/obj/chargen/status_light + name = "launch clearance indicator" + desc = "Will light up green when you're cleared for launch." + icon = 'icons/obj/machines/door_timer.dmi' + icon_state = "doortimer1" + var/completed_chargen = FALSE + +/obj/chargen/status_light/Initialize(mapload) + . = ..() + update_icon() + var/area/chargen/A = get_area(src) + if(istype(A)) + A.register_chargen_state_change_listener(src, /obj/chargen/status_light/proc/on_chargen_state_changed) + +/obj/chargen/status_light/proc/set_chargen_completed(val) + completed_chargen = !!val + update_icon() + +/obj/chargen/status_light/proc/on_chargen_state_changed(area/source, new_state, old_state) + if(new_state == CHARGEN_STATE_FORM_COMPLETE || new_state == CHARGEN_STATE_AWAITING_SPAWN) + set_chargen_completed(TRUE) + else + set_chargen_completed(FALSE) + +/obj/chargen/status_light/on_update_icon() + icon_state = "doortimer[completed_chargen? "2" : "1"]" + if(completed_chargen) + set_light(2, 0.5, COLOR_GREEN) + else + set_light(1, 0.3, COLOR_RED) diff --git a/mods/persistence/modules/chargen/chargen_template.dm b/mods/persistence/modules/chargen/chargen_template.dm new file mode 100644 index 00000000000..09a5a795e4e --- /dev/null +++ b/mods/persistence/modules/chargen/chargen_template.dm @@ -0,0 +1,84 @@ +/** + Abstract template for spawning chargen room prefabs in multiple rows and columns. + */ +/datum/map_template/chargen + name = "chargen rooms" + template_flags = TEMPLATE_FLAG_SPAWN_GUARANTEED | TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RADS | TEMPLATE_FLAG_NO_RUINS + template_categories = list(MAP_TEMPLATE_CATEGORY_MAIN_SITE) + level_data_type = /datum/level_data/chargen + template_parent_type = /datum/map_template/chargen + + ///The map file containing the room template we'll use to fill the level. Set by the user. + var/chargen_prefab_path + ///The amount of rooms we'll instantiate on the level. Should be set by the user. + var/amount_chargen_rooms = MAX_NB_CHAR_GEN_PODS + ///The width of the chargen room prefab. Loaded at runtime. + VAR_PRIVATE/tmp/room_width + ///The height of the chargen room prefab. Loaded at runtime. + VAR_PRIVATE/tmp/room_height + ///The amount of rooms that fit between the top and bottom of the map in a single column. Loaded at runtime. + VAR_PRIVATE/tmp/max_rooms_per_column + ///The amount of columns we reserve for placing down chargen rooms. This number also include incomplete columns. Loaded at runtime. + VAR_PRIVATE/tmp/amount_columns + +/datum/map_template/chargen/get_spawn_weight() + return 1 //Must be loaded after the main template + +/datum/map_template/chargen/is_runtime_generated() + return TRUE + +/datum/map_template/chargen/preload_size() + var/total_area_needed = (room_height * room_width) * amount_chargen_rooms + //Get the amount of rows and columns to form a square that can contain the area we need, as a multiple of 2. + var/nb_rows_and_columns = round(sqrt(total_area_needed), 2) + width = nb_rows_and_columns + height = nb_rows_and_columns + max_rooms_per_column = nb_rows_and_columns + amount_columns = nb_rows_and_columns + tallness = 1 + log_debug("Preloaded chargen level size of [width] by [height] tile(s), to fit [amount_chargen_rooms] room(s) of [room_width] by [room_height] tile(s).") + return TRUE + +/datum/map_template/chargen/preload() + var/datum/map_load_metadata/M = maploader.load_map(file(chargen_prefab_path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE, no_changeturf=TRUE, clear_contents=(template_flags & TEMPLATE_FLAG_CLEAR_CONTENTS), level_data_type=src.level_data_type) + room_width = M.bounds[MAP_MAXX] + room_height = M.bounds[MAP_MAXY] + tallness = 1 + return preload_size() + +/datum/map_template/chargen/load_new_z(no_changeturf, centered) + // if(width <= 0 && height <= 0 && world.maxx > 0 && world.maxy > 0) + // max_rooms_per_column = FLOOR(world.maxy / room_height) + // amount_columns = (amount_chargen_rooms / max_rooms_per_column) + + // if(amount_columns <= 0) + // //If less than one full column, we're only occupying a limited height + // height = amount_chargen_rooms * room_height + // else + // //When more than one column, we use the full height of the world + // height = world.maxy + // //Make sure if we've got a remainder to add an extrac column + // amount_columns += (((amount_chargen_rooms % max_rooms_per_column) > 0)? 1 : 0) + + // //Our with is tied to the nb of columns, and cannot be less than 1 time the pod width + // width = max(room_width * amount_columns, room_width) + + var/datum/level_data/chargen/LD = SSmapping.increment_world_z_size(level_data_type, TRUE) + LD.setup_level_data(TRUE) + report_progress("Placing [name] template.") + gemerate_rooms(amount_columns, max_rooms_per_column, world.maxz) + LD.generate_level() + report_progress("Instantiated [name] template at Z: [LD.level_z].") + return WORLD_CENTER_TURF(world.maxz) + +/datum/map_template/chargen/proc/gemerate_rooms(nb_columns, nb_rows, cur_z) + var/room_counter = 0 + //Fill up the rows and column of pods + for(var/column in 1 to nb_columns) + var/rows_this_column = min((amount_chargen_rooms - room_counter), nb_rows) + for(var/row in 1 to rows_this_column) + var/cur_min_x = ((column - 1) * room_width) + 1 + var/cur_min_y = ((row - 1) * room_height) + 1 + room_counter++ + maploader.load_map(file(chargen_prefab_path), cur_min_x, cur_min_y, cur_z, no_changeturf = TRUE) + CHECK_TICK diff --git a/mods/persistence/modules/chargen/dossier_console.dm b/mods/persistence/modules/chargen/dossier_console.dm deleted file mode 100644 index e9e2180c394..00000000000 --- a/mods/persistence/modules/chargen/dossier_console.dm +++ /dev/null @@ -1,155 +0,0 @@ -//Simple structure displaying a nanoui on interact -/obj/structure/fake_computer - name = "computer" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - density = TRUE - anchored = TRUE - -/obj/structure/fake_computer/attack_hand(mob/user) - if((. = ..())) - return . - ui_interact(user) - return TRUE - -/obj/structure/fake_computer/on_update_icon() - cut_overlays() - icon = initial(icon) - icon_state = initial(icon_state) - - //Slap on the screen overlay - var/image/screen_overlay = image(icon, "generic", layer) - screen_overlay.appearance_flags |= RESET_COLOR - add_overlay(screen_overlay) - - //Slap on the keyboard overlay - var/image/keyboard_overlay = image(icon, "generic_key", layer) - keyboard_overlay.appearance_flags |= RESET_COLOR - add_overlay(keyboard_overlay) - - //Light it up - set_light(2, 1, light_color) - -/obj/structure/fake_computer/CouldUseTopic(var/mob/user) - ..() - playsound(src, "keyboard", 40) - -//Chargen console -/obj/structure/fake_computer/chargen - var/active_section = "origin" - should_save = FALSE - -/obj/structure/fake_computer/chargen/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - . = TOPIC_REFRESH - - var/datum/skillset/skillset = user.mind.chargen_skillset - var/decl/hierarchy/chargen/role/role = user.mind.role - var/decl/hierarchy/chargen/origin/origin = user.mind.origin - - switch(href_list["action"]) - if("toggle_stack") - user.mind.chargen_stack = !user.mind.chargen_stack - return - if("choose_origin") - active_section = "origin" - if("choose_role") - active_section = "role" - if("submit") - if(isnull(user.mind.origin)) - to_chat(user, SPAN_NOTICE("The console beeps: Application incomplete. Please enter an origin to proceed.")) - return - if(isnull(user.mind.role)) - to_chat(user, SPAN_NOTICE("The console beeps: Application incomplete. Please enter a role to proceed.")) - return - user.mind.finished_chargen = TRUE - var/area/A = get_area(src) - var/obj/machinery/cryopod/chargen/pod = locate() in A - var/obj/chargen/status_light/slight = locate() in A - if(pod) - pod.ready_for_mingebag() - if(slight) - slight.completed_chargen = TRUE - slight.update_icon() - if("unsubmit") - user.mind.finished_chargen = FALSE - if("confirm_origin") - if(origin) - for(var/skill in origin.skills) - skillset.skill_list[skill] -= origin.skills[skill] - - var/decl/hierarchy/chargen/origin/origins = GET_DECL(/decl/hierarchy/chargen/origin) - for(var/decl/hierarchy/chargen/D in origins.children) - if(D.ID == href_list["ref"]) - // Found. - user.mind.origin = D - for(var/skill in D.skills) - skillset.skill_list[skill] += D.skills[skill] - - if("confirm_role") - if(role) - for(var/skill in role.skills) - skillset.skill_list[skill] -= role.skills[skill] - - var/decl/hierarchy/chargen/role/roles = GET_DECL(/decl/hierarchy/chargen/role) - for(var/decl/hierarchy/chargen/D in roles.children) - if(D.ID == href_list["ref"]) - // Found. - user.mind.role = D - for(var/skill in D.skills) - skillset.skill_list[skill] += D.skills[skill] - -/obj/structure/fake_computer/chargen/proc/build_ui_data(var/mob/user) - if(!istype(user.mind.chargen_skillset)) - user.mind.chargen_skillset = new(user) - for(var/decl/hierarchy/skill in global.skills) - user.mind.chargen_skillset.skill_list[skill.type] = 1 - user.mind.chargen_skillset.skill_list[SKILL_HAULING] = SKILL_BASIC - user.mind.chargen_skillset.skill_list[SKILL_LITERACY] = SKILL_BASIC - . = user.mind.chargen_skillset.get_nano_data(FALSE) - - .["active"] = active_section - .["finished"] = user.mind.finished_chargen - .["map_name"] = global.using_map.station_name - .["stack"] = user.mind.chargen_stack - .["origin"] = istype(user.mind.origin) ? user.mind.origin.name : "Not set" - .["role"] = istype(user.mind.role) ? user.mind.role.name : "Not set" - - // Populate role & origin choices. - .["origins"] = list() - .["roles"] = list() - var/decl/hierarchy/chargen/origin/origins = GET_DECL(/decl/hierarchy/chargen/origin) - var/decl/hierarchy/chargen/role/roles = GET_DECL(/decl/hierarchy/chargen/role) - - for(var/decl/hierarchy/chargen/D in (roles.children + origins.children)) - var/list/fields = list( - "name" = D.name, - "ref" = D.ID, - "skills" = list(), - "whitelist_only" = D.whitelist_only, - "active" = ((user.mind.origin && D == user.mind.origin) || (user.mind.role && D == user.mind.role)) - ) - - for(var/skill in D.skills) - if(!ispath(skill)) - continue - var/decl/hierarchy/skill/S = GET_DECL(skill) - if(!istype(S)) - continue - fields["skills"] += S.name - if(D.remaining_points_offset != 0) - fields["skills"] += "Point offset: [D.remaining_points_offset >= 0 ? "+" : ""][D.remaining_points_offset]" - fields["skills"] = english_list(fields["skills"]) - - if(istype(D, /decl/hierarchy/chargen/origin)) - .["origins"] += list(fields) - else - .["roles"] += list(fields) - -/obj/structure/fake_computer/chargen/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/list/data = build_ui_data(user) - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "chargen.tmpl", name, 800, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/mods/persistence/modules/chargen/items.dm b/mods/persistence/modules/chargen/items.dm index f709c3f067a..4e838414c5b 100644 --- a/mods/persistence/modules/chargen/items.dm +++ b/mods/persistence/modules/chargen/items.dm @@ -22,24 +22,25 @@ ) origin_tech = "{'materials':1}" -/obj/item/pickaxe/cheap - name = "cheap pickaxe" - desc = "This pickaxe is made from 3D-printed paper and styrofoam. It takes a long time to dig anything with this." - icon_state = "preview" - icon = 'icons/obj/items/tool/drills/pickaxe.dmi' - digspeed = 80 // twice as long as a regular pick - origin_tech = "{'materials':1}" - drill_verb = "picking" - sharp = 1 - color = "#33ffad" - force = 5 - throwforce = 2 - material = /decl/material/solid/metal/iron/r_styrofoam - matter = list( - /decl/material/solid/metal/iron/r_styrofoam = MATTER_AMOUNT_TRACE - ) - build_from_parts = TRUE - hardware_color = COLOR_SILVER +//#TODO: Rewrite this, cause the pickaxe code is completely different now. +// /obj/item/tool/pickaxe/cheap +// name = "cheap pickaxe" +// desc = "This pickaxe is made from 3D-printed paper and styrofoam. It takes a long time to dig anything with this." +// icon_state = "preview" +// icon = 'icons/obj/items/tool/drills/pickaxe.dmi' +// digspeed = 80 // twice as long as a regular pick +// origin_tech = "{'materials':1}" +// drill_verb = "picking" +// sharp = 1 +// color = "#33ffad" +// force = 5 +// throwforce = 2 +// material = /decl/material/solid/metal/iron/r_styrofoam +// matter = list( +// /decl/material/solid/metal/iron/r_styrofoam = MATTER_AMOUNT_TRACE +// ) +// build_from_parts = TRUE +// hardware_color = COLOR_SILVER /obj/item/flashlight/lantern/cheap name = "cheap lantern" diff --git a/mods/persistence/modules/chargen/launch_pod.dm b/mods/persistence/modules/chargen/launch_pod.dm deleted file mode 100644 index b030701e57c..00000000000 --- a/mods/persistence/modules/chargen/launch_pod.dm +++ /dev/null @@ -1,139 +0,0 @@ -#define STARTING_POINTS 30 -/obj/machinery/cryopod/outreach - name = "cryogenic freezer" - var/spawn_decl = /decl/spawnpoint/cryo - -/obj/machinery/cryopod/outreach/Initialize() - . = ..() - if(spawn_decl && get_turf(src)) - var/decl/spawnpoint/spawn_instance = GET_DECL(spawn_decl) - spawn_instance.add_spawn_turf(get_turf(src)) - -/obj/machinery/cryopod/outreach/forceMove(atom/dest) - if(spawn_decl && get_turf(src)) - var/decl/spawnpoint/spawn_instance = GET_DECL(spawn_decl) - spawn_instance.remove_spawn_turf(get_turf(src)) - . = ..() - spawn_instance.add_spawn_turf(get_turf(src)) - else - return ..() -/obj/machinery/cryopod/outreach/Destroy() - if(spawn_decl && get_turf(src)) - var/decl/spawnpoint/spawn_instance = GET_DECL(spawn_decl) - spawn_instance.remove_spawn_turf(get_turf(src)) - . = ..() - -/obj/machinery/cryopod/chargen/Initialize() - . = ..() - icon_state = occupied_icon_state //Those starts closed - -/obj/machinery/cryopod/chargen/proc/ready_for_mingebag() - set_light(10, 1, COLOR_CYAN_BLUE) - icon_state = base_icon_state - if(open_sound) - playsound(src, open_sound, 40) - -/obj/machinery/cryopod/chargen/proc/unready() - icon_state = occupied_icon_state - set_light(0, null) - -// Chargen pod -/obj/machinery/cryopod/chargen/proc/send_to_outpost() - if(!istype(occupant)) - return - - var/mob/living/carbon/human/user = occupant - if(occupant.mind.chargen_stack) - var/obj/item/organ/internal/stack/charstack = new() - var/obj/item/organ/O = occupant.get_organ(charstack.parent_organ) - user.add_organ(charstack, O) - to_chat(user, SPAN_NOTICE("You have been provided with a Cortical Stack to act as an emergency revival tool.")) - - // Updating the mob's skills with the actual chargen choices. - var/datum/skillset/mob_set = occupant.skillset - var/datum/skillset/char = occupant.mind.chargen_skillset - var/list/char_set = char.skill_list - mob_set.skill_list = char_set.Copy() - mob_set.default_value = char.default_value - mob_set.points_remaining = max(STARTING_POINTS + user.mind.origin.remaining_points_offset + user.mind.role.remaining_points_offset, 0) - mob_set.on_levels_change() - to_chat(user, SPAN_NOTICE("You have an additional [mob_set.points_remaining] skill points to apply to your character. Use the 'Adjust Skills' verb to do so")) - - var/obj/starter_book = user.mind.role.text_book_type - if(starter_book) - to_chat(user, SPAN_NOTICE("You have brought with you a textbook related to your specialty. It can increase your skills temporarily by reading it, or permanently through dedicated study. It's highly valuable, so don't lose it!")) - user.equip_to_slot_or_store_or_drop(new starter_book(user), slot_in_backpack_str) - - // Find the starting network, and create the crew record + user account for convenience. - - // Crew record is created on spawn, just reuse it - var/datum/computer_file/report/crew_record/CR = get_crewmember_record(user.real_name) - if(!CR) - error("obj/machinery/cryopod/chargen/proc/send_to_outpost(): Missing crew record for '[user.real_name]'(Ckey:'[user.ckey]')!") - //#FIXME: Should probably be done in a proc in SSnetworking instead - - var/network_id = global.using_map.spawn_network - if(network_id) - var/datum/computer_network/network = SSnetworking.networks[network_id] - if(network) - network.store_file(CR, MF_ROLE_CREW_RECORDS) - - network.create_account(user, user.real_name, null, user.real_name, null, TRUE) - - var/area/A = get_area(src) - var/obj/chargen/status_light/slight = locate() in A - if(slight) - slight.completed_chargen = FALSE - slight.update_icon() - - //Free up the chargen pod - unready() - SSchargen.release_spawn_pod(get_area(src)) - - // Add the mob to limbo for safety. Mark for removal on the next save. - SSpersistence.AddToLimbo(list(user, user.mind), user.mind.unique_id, LIMBO_MIND, user.mind.key, user.mind.current.real_name, TRUE, user.mind.key) - SSpersistence.limbo_removals += list(list(sanitize_sql(user.mind.unique_id), LIMBO_MIND)) - - var/decl/spawnpoint/cryo/spawnpoint = GET_DECL(/decl/spawnpoint/cryo) - for(var/turf/T in spawnpoint.get_spawn_turfs()) - var/obj/machinery/cryopod/C = locate() in T - if(C.occupant) - continue - go_out() - C.set_occupant(user, silent = TRUE) - C.on_mob_spawn() - to_chat(user, SPAN_NOTICE("You've waken up from the cryostasis.")) - return - - // If we didn't find a empty turf, put them on a filled one - var/turf/T = pick(spawnpoint.get_spawn_turfs()) - if(T) - go_out() - user.forceMove(T) - else - to_chat(user, SPAN_DANGER("UNABLE TO FIND SUITABLE LOCATION, CONTACT AN ADMIN!")) - message_admins(SPAN_DANGER("UNABLE TO FIND SUITABLE CRYO SPAWN LOCATION FOR CKEY:'[user.ckey]'([user.name])! CREATE A CRYOPOD.")) - -/obj/machinery/cryopod/chargen/check_occupant_allowed(mob/M) - . = ..() - if(!.) - return - var/allowed = M.mind.finished_chargen - if(!allowed) - to_chat(M, SPAN_NOTICE("The [src] beeps: Please finish your dossier on the terminal before proceeding to cryostasis.")) - return allowed - -/obj/machinery/cryopod/chargen/set_occupant(mob/living/carbon/human/occupant, silent) - //Attempt to prevent dropping any held items when transfering - if(occupant) - for(var/atom/movable/thing in occupant.get_held_items()) - occupant.equip_to_storage(thing) - . = ..() - if(occupant) - to_chat(occupant, SPAN_NOTICE("The [src] beeps: Launch procedure initiated. Please wait...")) - addtimer(CALLBACK(src, /obj/machinery/cryopod/chargen/proc/send_to_outpost), 5 SECONDS) - -/obj/machinery/cryopod/chargen/Process() - return PROCESS_KILL - -#undef STARTING_POINTS \ No newline at end of file diff --git a/mods/persistence/modules/chargen/storage/industrial_boxes.dm b/mods/persistence/modules/chargen/storage/industrial_boxes.dm index 6854996fb43..353d8366b4c 100644 --- a/mods/persistence/modules/chargen/storage/industrial_boxes.dm +++ b/mods/persistence/modules/chargen/storage/industrial_boxes.dm @@ -68,7 +68,7 @@ /obj/item/chargen_box/industrial/mining name = "complete mining kit" startswith = list( - /obj/item/pickaxe = 1, + /obj/item/tool/pickaxe = 1, /obj/item/clothing/suit/chem_suit = 1, /obj/item/clothing/head/chem_hood = 1, /obj/item/flashlight = 1, @@ -89,7 +89,7 @@ /obj/item/chargen_box/industrial/pick name = "replacement mining pick" startswith = list( - /obj/item/pickaxe = 1, + /obj/item/tool/pickaxe = 1, /obj/item/flashlight = 1, ) @@ -131,7 +131,7 @@ /obj/item/chargen_box/industrial/cheap_mining name = "'Colonist's First' super-ultra-deluxe mining kit(TM)" startswith = list( - /obj/item/pickaxe/cheap = 1, + /obj/item/tool/pickaxe = 1, /obj/item/clothing/suit/chem_suit/cheap = 1, /obj/item/clothing/head/chem_hood/cheap = 1, /obj/item/flashlight/lantern/cheap = 1, diff --git a/mods/persistence/modules/chargen/vending/industrial.dm b/mods/persistence/modules/chargen/vending/industrial.dm index 82c5114c744..f76ed9abe98 100644 --- a/mods/persistence/modules/chargen/vending/industrial.dm +++ b/mods/persistence/modules/chargen/vending/industrial.dm @@ -54,7 +54,6 @@ base_type = /obj/machinery/vending/infini/industrial/crap_mining products = list( /obj/item/chargen_box/industrial/cheap_mining = 999, - /obj/item/pickaxe/cheap = 999, /obj/item/clothing/suit/chem_suit/cheap = 999, /obj/item/clothing/head/chem_hood/cheap = 999, /obj/item/flashlight/lantern/cheap = 999, diff --git a/mods/persistence/modules/chargen/vending/infini_vendor.dm b/mods/persistence/modules/chargen/vending/infini_vendor.dm index 80066772a8c..b626b2c90ef 100644 --- a/mods/persistence/modules/chargen/vending/infini_vendor.dm +++ b/mods/persistence/modules/chargen/vending/infini_vendor.dm @@ -124,7 +124,7 @@ for(var/current_list in all_products) var/category = current_list[2] for(var/entry in current_list[1]) - var/datum/stored_items/vending_products/infini/product = new(src, entry, get_product_name(entry)) + var/datum/stored_items/vending_products/infini/product = new(src, entry) product.price = atom_info_repository.get_combined_worth_for(entry) * markup product.category = category if(product && populate_parts) diff --git a/mods/persistence/modules/client/preferences.dm b/mods/persistence/modules/client/preferences.dm index bfc9d26c526..71e2a0aa36e 100644 --- a/mods/persistence/modules/client/preferences.dm +++ b/mods/persistence/modules/client/preferences.dm @@ -58,7 +58,7 @@ if(..()) return TRUE if(href_list["finish"]) - if(!global.config.enter_allowed && !check_rights(R_ADMIN)) + if(!get_config_value(/decl/config/toggle/on/enter_allowed) && !check_rights(R_ADMIN)) to_chat(usr, SPAN_WARNING("There is currently an administrative lock on joining.")) return if(!real_name) diff --git a/mods/persistence/modules/cloning/backup_file.dm b/mods/persistence/modules/cloning/backup_file.dm index 77eebe78a94..722d66197af 100644 --- a/mods/persistence/modules/cloning/backup_file.dm +++ b/mods/persistence/modules/cloning/backup_file.dm @@ -11,6 +11,13 @@ var/datum/dna/dna var/backup_date +SAVED_VAR(/datum/computer_file/data/cloning, mob_age) +SAVED_VAR(/datum/computer_file/data/cloning, skill_list) +SAVED_VAR(/datum/computer_file/data/cloning, languages) +SAVED_VAR(/datum/computer_file/data/cloning, mind_id) +SAVED_VAR(/datum/computer_file/data/cloning, dna) +SAVED_VAR(/datum/computer_file/data/cloning, backup_date) + // Initializes all the data on a backup with an existing mob. /datum/computer_file/data/cloning/proc/initialize_backup(var/mob/living/H) languages = H.languages.Copy() @@ -23,8 +30,8 @@ mob_age = H.mind.age dna = H.dna.Clone() backup_date = world.realtime - var/prefix = copytext(num2hex(backup_date, 8),1,5) - var/postfix = copytext(num2text(world.timeofday, 6), 2, 7) + var/prefix = copytext(num2hex_padded(backup_date, 8),1,5) + var/postfix = copytext(num2hex_padded(world.timeofday, 6), 2, 7) filename = "[prefix]_clone_[postfix]" calculate_size() diff --git a/mods/persistence/modules/cloning/machines/cloning_pod.dm b/mods/persistence/modules/cloning/machines/cloning_pod.dm index ef412e745bf..d86dc371ae5 100644 --- a/mods/persistence/modules/cloning/machines/cloning_pod.dm +++ b/mods/persistence/modules/cloning/machines/cloning_pod.dm @@ -25,6 +25,9 @@ var/disallow_occupant_types = list() var/error +SAVED_VAR(/obj/machinery/cloning_pod, occupant) +SAVED_VAR(/obj/machinery/cloning_pod, error) + /obj/machinery/cloning_pod/Initialize() . = ..() set_extension(src, /datum/extension/network_device/cloning_pod, initial_network_id, initial_network_key, RECEIVER_STRONG_WIRELESS) diff --git a/mods/persistence/modules/clothing/spacesuits.dm b/mods/persistence/modules/clothing/spacesuits.dm index b416f3dd565..921e2d67af0 100644 --- a/mods/persistence/modules/clothing/spacesuits.dm +++ b/mods/persistence/modules/clothing/spacesuits.dm @@ -126,7 +126,7 @@ /obj/item/stack/flag, /obj/item/suit_cooling_unit, /obj/item/storage/ore, - /obj/item/pickaxe + /obj/item/tool/pickaxe ) //Science softsuit @@ -153,7 +153,7 @@ /obj/item/suit_cooling_unit, /obj/item/stack/flag, /obj/item/storage/excavation, - /obj/item/pickaxe, + /obj/item/tool/pickaxe, /obj/item/scanner/health, /obj/item/measuring_tape, /obj/item/ano_scanner, @@ -162,7 +162,7 @@ /obj/item/gps, /obj/item/pinpointer/radio, /obj/item/radio/beacon, - /obj/item/pickaxe/xeno, + /obj/item/tool/xeno, /obj/item/storage/bag/fossils ) diff --git a/mods/persistence/modules/detectivework/evidence/_evidence_holder.dm b/mods/persistence/modules/detectivework/evidence/_evidence_holder.dm index 86ad8fda966..88b8090f03b 100644 --- a/mods/persistence/modules/detectivework/evidence/_evidence_holder.dm +++ b/mods/persistence/modules/detectivework/evidence/_evidence_holder.dm @@ -2,9 +2,10 @@ /datum/extension/forensic_evidence should_save = TRUE - var/last_updated +SAVED_VAR(/datum/extension/forensic_evidence, last_updated) + /datum/extension/forensic_evidence/add_data(evidence_type, data) . = ..() last_updated = world.realtime diff --git a/mods/persistence/modules/emotes/audible.dm b/mods/persistence/modules/emotes/audible.dm deleted file mode 100644 index afcbd084eed..00000000000 --- a/mods/persistence/modules/emotes/audible.dm +++ /dev/null @@ -1,5 +0,0 @@ -/decl/emote/audible/snap - key = "snap" - emote_message_3p_target = "USER snaps their fingers at TARGET." - emote_message_3p = "USER snaps their fingers." - emote_sound = 'sound/effects/fingersnap.ogg' diff --git a/mods/persistence/modules/emotes/human.dm b/mods/persistence/modules/emotes/human.dm deleted file mode 100644 index 328745c38c3..00000000000 --- a/mods/persistence/modules/emotes/human.dm +++ /dev/null @@ -1,66 +0,0 @@ -/decl/emote/audible/burp - key = "burp" - emote_message_3p = "USER burps." - emote_sound = list( - 'sound/voice/emotes/human/burp1.ogg', - 'sound/voice/emotes/human/burp2.ogg', - 'sound/voice/emotes/human/burp3.ogg', - 'sound/voice/emotes/human/burp4.ogg', - 'sound/voice/emotes/human/burp5.ogg', - 'sound/voice/emotes/human/burp6.ogg', - ) - -/decl/emote/audible/whistle - emote_sound = list( - 'sound/voice/emotes/human/whistle1.ogg', - 'sound/voice/emotes/human/whistle2.ogg', - ) - -/decl/emote/audible/scream - emote_sound = list( - MALE = list( - 'sound/voice/emotes/human/scream_m1.ogg', - 'sound/voice/emotes/human/scream_m2.ogg', - ), - FEMALE = list( - 'sound/voice/emotes/human/scream_f1.ogg', - 'sound/voice/emotes/human/scream_f2.ogg', - 'sound/voice/emotes/human/scream_f3.ogg', - ), - ) - -/decl/emote/audible/clap - emote_sound = list( - 'sound/voice/emotes/clap1.ogg', - 'sound/voice/emotes/clap2.ogg', - ) - -/decl/emote/audible/chuckle - emote_sound = list( - MALE = list( - 'sound/voice/emotes/human/chuckle_m1.ogg', - ), - FEMALE = list( - 'sound/voice/emotes/human/chuckle_f1.ogg', - ), - ) - -/decl/emote/audible/cough - emote_sound = list( - MALE = list( - 'sound/voice/emotes/human/cough_m1.ogg', - ), - FEMALE = list( - 'sound/voice/emotes/human/cough_f1.ogg', - ), - ) - -/decl/emote/audible/laugh - emote_sound = list( - MALE = list( - 'sound/voice/emotes/human/laugh_m1.ogg', - ), - FEMALE = list( - 'sound/voice/emotes/human/laugh_f1.ogg', - ), - ) \ No newline at end of file diff --git a/mods/persistence/modules/hydroponics/spreading/spreading.dm b/mods/persistence/modules/hydroponics/spreading/spreading.dm index 035f6d7003b..102402d629a 100644 --- a/mods/persistence/modules/hydroponics/spreading/spreading.dm +++ b/mods/persistence/modules/hydroponics/spreading/spreading.dm @@ -13,15 +13,15 @@ /obj/effect/vine/Initialize(mapload, datum/seed/newseed, obj/effect/vine/newparent, start_matured) if(persistent_id) - + newseed = seed newparent = parent start_matured = (mature_time == 0) var/prev_max_growth = max_growth - var/prev_health = health + var/prev_health = current_health . = ..(mapload, newseed, newparent, start_matured) max_growth = prev_max_growth //Prevents vines from growing more on each save load - health = prev_health + current_health = prev_health else . = ..() diff --git a/mods/persistence/modules/hydroponics/trays.dm b/mods/persistence/modules/hydroponics/trays.dm index 35b26423bc8..47b52d119f3 100644 --- a/mods/persistence/modules/hydroponics/trays.dm +++ b/mods/persistence/modules/hydroponics/trays.dm @@ -40,7 +40,7 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user) if(IS_SHOVEL(O)) - var/obj/item/shovel/S = O + var/obj/item/tool/shovel/S = O if(S.do_tool_interaction(TOOL_SHOVEL, user, src, 10 SECONDS, "flattening", "flattening", null, null, SKILL_HAULING) && !QDELETED(O)) physically_destroyed() return TRUE diff --git a/mods/persistence/modules/materials/definitions/materials_solid_metal.dm b/mods/persistence/modules/materials/definitions/materials_solid_metal.dm deleted file mode 100644 index a5b7ce55bcb..00000000000 --- a/mods/persistence/modules/materials/definitions/materials_solid_metal.dm +++ /dev/null @@ -1,5 +0,0 @@ -/decl/material/solid/metal/steel/generate_recipes(reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/structure/iv_drip(src) \ No newline at end of file diff --git a/mods/persistence/modules/materials/recipes_persistence.dm b/mods/persistence/modules/materials/recipes_persistence.dm deleted file mode 100644 index 28af94946e8..00000000000 --- a/mods/persistence/modules/materials/recipes_persistence.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/stack_recipe/structure - one_per_turf = TRUE - on_floor = TRUE - difficulty = MAT_VALUE_HARD_DIY - time = 5 SECONDS - -/datum/stack_recipe/structure/iv_drip - title = "iv drip" - result_type = /obj/structure/iv_drip - difficulty = MAT_VALUE_NORMAL_DIY diff --git a/mods/persistence/modules/mob/death.dm b/mods/persistence/modules/mob/death.dm index f172690d291..71653508226 100644 --- a/mods/persistence/modules/mob/death.dm +++ b/mods/persistence/modules/mob/death.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/death() +/mob/living/carbon/death(gibbed) if(stat & DEAD) return FALSE @@ -6,13 +6,14 @@ saved_ckey = null if(ckey && client) + //#FIXME: This is going to conflict with how brainmob is handled now. var/obj/item/organ/internal/stack/stack = switchToStack(ckey, mind) if(stack) // They did have a stack. to_chat(stack.stackmob, SPAN_NOTICE("Darkness envelopes you. Your character has died and you are now in limbo. Resleeve to continue playing as your character, or wait until a kind soul clones you from your cortical stack.")) else hide_fullscreens() - var/mob/living/limbo/brainmob = new(SSchargen.limbo_holder) + var/mob/living/limbo/brainmob = new(SSchargen.get_limbo_turf()) brainmob.SetName(real_name) brainmob.real_name = real_name // brainmob.timeofhostdeath = timeofdeath diff --git a/mods/persistence/modules/mob/living/carbon/_defines.dm b/mods/persistence/modules/mob/living/carbon/_defines.dm deleted file mode 100644 index b1bcff33653..00000000000 --- a/mods/persistence/modules/mob/living/carbon/_defines.dm +++ /dev/null @@ -1 +0,0 @@ -#define STASIS_SLEEP "sleeping" \ No newline at end of file diff --git a/mods/persistence/modules/mob/living/carbon/human/human.dm b/mods/persistence/modules/mob/living/carbon/human/human.dm deleted file mode 100644 index 569de751cb4..00000000000 --- a/mods/persistence/modules/mob/living/carbon/human/human.dm +++ /dev/null @@ -1,140 +0,0 @@ -/mob/living/carbon/human - var/obj/home_spawn // The object we last safe-slept on. Used for moving characters to safe locations on loads. - -/mob/living/carbon/human/before_save() - . = ..() - CUSTOM_SV_LIST(\ - "move_intent" = ispath(move_intent)? move_intent : move_intent?.type, \ - "eye_color" = eye_colour, \ - "facial_hair_colour" = facial_hair_colour, \ - "hair_colour" = hair_colour, \ - "skin_colour" = skin_colour, \ - "skin_tone" = skin_tone, \ - "h_style" = h_style, \ - "f_style" = f_style, \ - ) - -/mob/living/carbon/human/after_deserialize() - . = ..() - backpack_setup = null //Make sure we don't repawn a new backpack - -/mob/living/carbon/human/setup(species_name, datum/dna/new_dna) - //If we're loading from save, go through setup using the existing dna loaded from save - if(persistent_id && dna) - species = null //Null out the species at this point, so we don't crash set_species() - . = ..(null, dna) - else - . = ..() - -/mob/living/carbon/human/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) - . = ..() - LATE_INIT_IF_SAVED - -/mob/living/carbon/human/LateInitialize() - . = ..() - if(!persistent_id) - return - - set_move_intent(GET_DECL(LOAD_CUSTOM_SV("move_intent"))) - - //Apply saved appearance (appearance may differ from DNA) - eye_colour = LOAD_CUSTOM_SV("eye_colour") - facial_hair_colour = LOAD_CUSTOM_SV("facial_hair_colour") - hair_colour = LOAD_CUSTOM_SV("hair_colour") - skin_colour = LOAD_CUSTOM_SV("skin_colour") - skin_tone = LOAD_CUSTOM_SV("skin_tone") - h_style = LOAD_CUSTOM_SV("h_style") - f_style = LOAD_CUSTOM_SV("f_style") - - //Force equipped items to refresh their held icon - for(var/obj/item/I in get_contained_external_atoms()) - I.hud_layerise() - - //Update wounds has to be run this late because it expects the mob to be fully initialized - for(var/obj/item/organ/external/limb in get_external_organs()) - limb.update_wounds() - - //Important to regen icons here, since we skipped on that before load! - refresh_visible_overlays() - - if(ignore_persistent_spawn()) - return - - if(!loc) // We're loading into null-space because we were in an unsaved level or intentionally in limbo. Move them to the last valid spawn. - if(istype(home_spawn)) - if(home_spawn.loc) - forceMove(get_turf(home_spawn)) // Welcome home! - return - else // Your bed is in nullspace with you! - QDEL_NULL(home_spawn) - forceMove(get_spawn_turf()) // Sorry man. Your bed/cryopod was not set. - - CLEAR_ALL_SV //Clear saved vars - -/mob/living/carbon/human/should_save() - . = ..() - if(mind && !mind.finished_chargen) - return FALSE // We don't save characters who aren't finished CG. - -// Don't let it update icons during initialize -// Can't avoid upstream code from doing it, so just postpone it -/mob/living/carbon/human/update_icon() - if(!(atom_flags & ATOM_FLAG_INITIALIZED)) - queue_icon_update() //Queue it later instead - return - . = ..() - -SAVED_VAR(/mob/living/carbon/human, h_style) -SAVED_VAR(/mob/living/carbon/human, f_style) -SAVED_VAR(/mob/living/carbon/human, hair_colour) -SAVED_VAR(/mob/living/carbon/human, facial_hair_colour) -SAVED_VAR(/mob/living/carbon/human, skin_colour) -SAVED_VAR(/mob/living/carbon/human, eye_colour) -SAVED_VAR(/mob/living/carbon/human, skin_tone) -SAVED_VAR(/mob/living/carbon/human, damage_multiplier) -SAVED_VAR(/mob/living/carbon/human, lip_style) -SAVED_VAR(/mob/living/carbon/human, blood_type) -SAVED_VAR(/mob/living/carbon/human, worn_underwear) -SAVED_VAR(/mob/living/carbon/human, cultural_info) -SAVED_VAR(/mob/living/carbon/human, voice) -SAVED_VAR(/mob/living/carbon/human, last_dam) -SAVED_VAR(/mob/living/carbon/human, remoteview_target) -SAVED_VAR(/mob/living/carbon/human, hand_blood_color) -SAVED_VAR(/mob/living/carbon/human, flavor_texts) -SAVED_VAR(/mob/living/carbon/human, pulling_punches) -SAVED_VAR(/mob/living/carbon/human, last_attack) -SAVED_VAR(/mob/living/carbon/human, flash_protection) -SAVED_VAR(/mob/living/carbon/human, equipment_tint_total) -SAVED_VAR(/mob/living/carbon/human, equipment_darkness_modifier) -SAVED_VAR(/mob/living/carbon/human, equipment_vision_flags) -SAVED_VAR(/mob/living/carbon/human, equipment_see_invis) -SAVED_VAR(/mob/living/carbon/human, equipment_prescription) -SAVED_VAR(/mob/living/carbon/human, equipment_light_protection) -SAVED_VAR(/mob/living/carbon/human, char_branch) -SAVED_VAR(/mob/living/carbon/human, char_rank) -SAVED_VAR(/mob/living/carbon/human, stance_damage) -SAVED_VAR(/mob/living/carbon/human, default_attack) -SAVED_VAR(/mob/living/carbon/human, shock_stage) -SAVED_VAR(/mob/living/carbon/human, became_older) -SAVED_VAR(/mob/living/carbon/human, became_younger) -SAVED_VAR(/mob/living/carbon/human, appearance_descriptors) -SAVED_VAR(/mob/living/carbon/human, skin_state) -SAVED_VAR(/mob/living/carbon/human, embedded_flag) -SAVED_VAR(/mob/living/carbon/human, stamina) -SAVED_VAR(/mob/living/carbon/human, vessel) -SAVED_VAR(/mob/living/carbon/human, home_spawn) - -SAVED_FLATTEN(/datum/mob_descriptor) -SAVED_VAR(/datum/appearance_descriptor, name) -SAVED_VAR(/datum/appearance_descriptor, chargen_label) -SAVED_VAR(/datum/appearance_descriptor, default_value) -SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptor_equivalent) -SAVED_VAR(/datum/appearance_descriptor, standalone_value_descriptors) -SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptors_smaller) -SAVED_VAR(/datum/appearance_descriptor, comparative_value_descriptors_larger) -SAVED_VAR(/datum/appearance_descriptor, chargen_value_descriptors) -SAVED_VAR(/datum/appearance_descriptor, chargen_min_index) -SAVED_VAR(/datum/appearance_descriptor, chargen_max_index) -SAVED_VAR(/datum/appearance_descriptor, skip_species_mention) -SAVED_VAR(/datum/appearance_descriptor, equivalent_variance_threshold) -SAVED_VAR(/datum/appearance_descriptor, comparison_variance_multiplier) diff --git a/mods/persistence/modules/mob/living/carbon/human/login.dm b/mods/persistence/modules/mob/living/carbon/human/login.dm deleted file mode 100644 index ab267e4e08e..00000000000 --- a/mods/persistence/modules/mob/living/carbon/human/login.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/carbon/Login() - ..() - set_stasis(0, STASIS_SLEEP) diff --git a/mods/persistence/modules/mob/living/carbon/human/logout.dm b/mods/persistence/modules/mob/living/carbon/human/logout.dm deleted file mode 100644 index c6b7b07fb95..00000000000 --- a/mods/persistence/modules/mob/living/carbon/human/logout.dm +++ /dev/null @@ -1,60 +0,0 @@ -/mob/living/carbon/human/proc/ignore_persistent_spawn() -#ifdef UNIT_TEST - return TRUE -#else - return FALSE -#endif - -/mob/living/carbon/human/dummy/ignore_persistent_spawn() - return TRUE - -/mob/living/carbon/human/quantum/ignore_persistent_spawn() - return TRUE - -/mob/living/carbon/human/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) - . = ..() - - // Check if humans are asleep on startup. - if(!istype(client)) - goto_sleep() - -/mob/living/carbon/human/proc/get_spawn_turf() - var/spawn_turf - for(var/obj/machinery/cryopod/C in SSmachines.machinery) - spawn_turf = locate(C.x, C.y, C.z) - if(!spawn_turf) - spawn_turf = locate(100,100,3) - return spawn_turf - -/mob/living/carbon/human/Logout() - . = ..() - var/area/chargen/A = get_area(get_turf(src)) - if(istype(A)) - //If we disconnect in the chargen we delete the mob - key = null - last_ckey = initial(last_ckey) - qdel(src) - return - - addtimer(CALLBACK(src, /mob/living/carbon/human/proc/goto_sleep), 5 MINUTES) - - var/obj/bed = locate(/obj/structure/bed) in get_turf(src) - var/obj/cryopod = locate(/obj/machinery/cryopod) in get_turf(src) - if(istype(bed)) - // We logged out in a bed or cryopod. Set this as home_spawn. - home_spawn = bed - if(istype(cryopod)) - // We logged out in a bed or cryopod. Set this as home_spawn. - home_spawn = cryopod - -/mob/living/carbon/human/proc/goto_sleep() - if(istype(client)) - // We have a client, so we're awake. - return - - if(locate(/obj/structure/bed) in get_turf(src)) - set_stasis(20, STASIS_SLEEP) // beds are better. - return - - //Apply sleeping stasis. - set_stasis(10, STASIS_SLEEP) \ No newline at end of file diff --git a/mods/persistence/modules/mob/new_player.dm b/mods/persistence/modules/mob/new_player.dm index 5e7609bfc04..a07b2cbb982 100644 --- a/mods/persistence/modules/mob/new_player.dm +++ b/mods/persistence/modules/mob/new_player.dm @@ -145,7 +145,7 @@ return /mob/new_player/proc/characterSelect(var/func = CHARSELECTLOAD) - if(!config.enter_allowed && !check_rights(R_ADMIN, FALSE, src)) + if(!get_config_value(/decl/config/toggle/on/enter_allowed) && !check_rights(R_ADMIN, FALSE, src)) to_chat(src, SPAN_WARNING("There is an administrative lock on entering the game!")) return if(func == CHARSELECTLOAD) @@ -203,7 +203,7 @@ if(GAME_STATE < RUNLEVEL_GAME) to_chat(src, SPAN_NOTICE("Wait until the round starts to join.")) return - if(!config.enter_allowed && !check_rights(R_ADMIN, FALSE, src)) + if(!get_config_value(/decl/config/toggle/on/enter_allowed) && !check_rights(R_ADMIN, FALSE, src)) to_chat(src, SPAN_WARNING("There is an administrative lock on entering the game!")) return if(spawning) diff --git a/mods/persistence/modules/mob/observer/ghost/ghost.dm b/mods/persistence/modules/mob/observer/ghost/ghost.dm index 43031d7f623..7a10fb14909 100644 --- a/mods/persistence/modules/mob/observer/ghost/ghost.dm +++ b/mods/persistence/modules/mob/observer/ghost/ghost.dm @@ -2,18 +2,11 @@ . = ..() verbs -= /mob/living/verb/ghost -/mob/ghostize(var/can_reenter_corpse = FALSE) - if(can_reenter_corpse && key && check_rights(R_ADMIN, 0, src)) // Allow admins to ghost. - hide_fullscreens() - var/mob/observer/ghost/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.can_reenter_corpse = can_reenter_corpse - ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time - ghost.key = key - if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - return ghost - - return +//Only admins can ghost +/mob/ghostize(var/_can_reenter_corpse = CORPSE_CAN_REENTER) + if(!check_rights(R_ADMIN, 0, src)) + return + return ..() /datum/movement_handler/mob/death/DoMove() return // no ghosting. \ No newline at end of file diff --git a/mods/persistence/modules/mob/observer/limbo.dm b/mods/persistence/modules/mob/observer/limbo.dm index 2650cb8091e..c13e1bd9467 100644 --- a/mods/persistence/modules/mob/observer/limbo.dm +++ b/mods/persistence/modules/mob/observer/limbo.dm @@ -22,11 +22,12 @@ return INITIALIZE_HINT_LATELOAD /mob/living/limbo/LateInitialize() + var/atom/limbo_loc = SSchargen.get_limbo_turf() if(cortical_stack) if(loc != cortical_stack) forceMove(cortical_stack) - else if(loc != SSchargen.limbo_holder) - forceMove(SSchargen.limbo_holder) + else if(loc != limbo_loc) + forceMove(limbo_loc) . = ..() /mob/living/limbo/Destroy() diff --git a/mods/persistence/modules/mob/skills/persistence_adjust_skills.dm b/mods/persistence/modules/mob/skills/persistence_adjust_skills.dm index 79d70400388..860f5cdfbbc 100644 --- a/mods/persistence/modules/mob/skills/persistence_adjust_skills.dm +++ b/mods/persistence/modules/mob/skills/persistence_adjust_skills.dm @@ -6,15 +6,22 @@ var/points_remaining = 0 var/total_points_added = 0 - var/datum/skillset/temp_skillset // Temporary skillset while adjusting skills. + var/tmp/datum/skillset/temp_skillset // Temporary skillset while adjusting skills. - var/list/min_skill_level = list() // Minimum level that a skill cannot go beneath. + var/list/min_skill_level = list() // Minimum level that a skill cannot go beneath. var/list/textbook_skills = list() // Skills that are being learned via textbook. Maximum MAX_TEXTBOOK_SKILLS per character. var/last_read_time = 0 literacy_charges = 999 // No need to limit the amount of textbooks one mob can make. This var should not be saved. +SAVED_VAR(/datum/skillset, time_active) +SAVED_VAR(/datum/skillset, points_remaining) +SAVED_VAR(/datum/skillset, total_points_added) +SAVED_VAR(/datum/skillset, min_skill_level) +SAVED_VAR(/datum/skillset, textbook_skills) +SAVED_VAR(/datum/skillset, last_read_time) + /datum/skillset/proc/set_skillset_min() // Outside of Persistence skills are tied to job preferences, so this should be kept here. for(var/decl/hierarchy/skill/S in global.skills) skill_list[S.type] = SKILL_MIN @@ -44,7 +51,7 @@ return if(last_read_time && (world.realtime < last_read_time + TEXTBOOK_COOLDOWN)) return - + var/skill_name = initial(S.name) textbook_skills[S]++ last_read_time = world.realtime @@ -109,7 +116,7 @@ HTML += "
    [level_name]: [S.levels[level_name]]
    " show_browser(usr, jointext(HTML, null), "window=\ref[usr]skillinfo") return TOPIC_HANDLED - + else if(href_list["finalize_skills"]) var/confirm = alert(usr, "Are you sure you want to make the following changes to your skills? This cannot be undone!", "Confirm", "Yes", "No") if(confirm && skillset.temp_skillset) diff --git a/mods/persistence/modules/modular_computers/hardware/battery_module.dm b/mods/persistence/modules/modular_computers/hardware/battery_module.dm index 69b67d49a16..3b3c8534a9b 100644 --- a/mods/persistence/modules/modular_computers/hardware/battery_module.dm +++ b/mods/persistence/modules/modular_computers/hardware/battery_module.dm @@ -1,21 +1,23 @@ -/obj/item/stock_parts/computer/battery_module - var/obj/item/cell/old_battery +//No workies -/obj/item/stock_parts/computer/battery_module/before_save() - . = ..() - if(istype(battery)) - old_battery = battery - battery = old_battery.type - CUSTOM_SV("charge", old_battery.charge) +// /obj/item/stock_parts/computer/battery_module +// var/obj/item/cell/old_battery -/obj/item/stock_parts/computer/battery_module/after_save() - if(istype(old_battery)) - battery = old_battery - old_battery = null - . = ..() +// /obj/item/stock_parts/computer/battery_module/before_save() +// . = ..() +// if(istype(battery)) +// old_battery = battery +// battery = old_battery.type +// CUSTOM_SV("charge", old_battery.charge) -/obj/item/stock_parts/computer/battery_module/Initialize() - . = ..() - if(persistent_id) - var/old_charge = LOAD_CUSTOM_SV("charge") - battery.charge = old_charge \ No newline at end of file +// /obj/item/stock_parts/computer/battery_module/after_save() +// if(istype(old_battery)) +// battery = old_battery +// old_battery = null +// . = ..() + +// /obj/item/stock_parts/computer/battery_module/Initialize() +// . = ..() +// if(persistent_id) +// var/old_charge = LOAD_CUSTOM_SV("charge") +// battery.charge = old_charge \ No newline at end of file diff --git a/mods/persistence/modules/modular_computers/networking/machines/_network_machine.dm b/mods/persistence/modules/modular_computers/networking/machines/_network_machine.dm deleted file mode 100644 index ce7ff8b4235..00000000000 --- a/mods/persistence/modules/modular_computers/networking/machines/_network_machine.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/network - var/saved_address - var/saved_network_tag - -/obj/machinery/network/before_save() - . = ..() - var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) - saved_address = D.address - saved_network_tag = D.network_tag - initial_network_id = D.network_id - initial_network_key = D.key - -/obj/machinery/network/after_save() - . = ..() - saved_address = null - saved_network_tag = null - initial_network_id = null - initial_network_key = null - -/obj/machinery/network/Initialize() - . = ..() - - var/datum/extension/network_device/D = get_extension(src, /datum/extension/network_device) - if(saved_address) - D.address = saved_address - if(saved_network_tag) - D.network_tag = saved_network_tag - saved_address = null - saved_network_tag = null - - \ No newline at end of file diff --git a/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm b/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm index e90fd4053b6..3304d267205 100644 --- a/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm +++ b/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm @@ -20,19 +20,8 @@ SAVED_VAR(/obj/machinery/network/telecomms_hub, overloaded_for) encryption_key_capacity = max(encryption_key_capacity, length(encryption_keys)) . = ..() -SAVED_VAR(/obj/item/radio, cell) -SAVED_VAR(/obj/item/radio, wires) -SAVED_VAR(/obj/item/radio, panel_open) -SAVED_VAR(/obj/item/radio, encryption_keys) -SAVED_VAR(/obj/item/radio, on) -SAVED_VAR(/obj/item/radio, frequency) -SAVED_VAR(/obj/item/radio, traitor_frequency) -SAVED_VAR(/obj/item/radio, broadcasting) -SAVED_VAR(/obj/item/radio, listening) -SAVED_VAR(/obj/item/radio, analog) -SAVED_VAR(/obj/item/radio, analog_secured) - -SAVED_VAR(/obj/item/radio/beacon, code) -SAVED_VAR(/obj/item/radio/beacon, functioning) -SAVED_VAR(/obj/item/radio/intercom/locked, locked_frequency) + + + + SAVED_VAR(/obj/item/encryptionkey, can_decrypt) //Can vary at runtime \ No newline at end of file diff --git a/mods/persistence/modules/organs/external/_external_saving.dm b/mods/persistence/modules/organs/external/_external_saving.dm deleted file mode 100644 index 9c91890f8c8..00000000000 --- a/mods/persistence/modules/organs/external/_external_saving.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/organ/external/Initialize(mapload, material_key, datum/dna/given_dna) - . = ..() - //For loose limbs only do this if we have no owner, because the proc would call stuff on the owner out of order otherwise - if(LAZYLEN(wounds) && !owner) - update_wounds() - if(persistent_id) - update_damage_ratios() \ No newline at end of file diff --git a/mods/persistence/modules/organs/internal/brain.dm b/mods/persistence/modules/organs/internal/brain.dm deleted file mode 100644 index 8e26ed871b6..00000000000 --- a/mods/persistence/modules/organs/internal/brain.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/organ/internal/brain/transfer_identity(var/mob/living/carbon/H) - return // Do not do transfer identity. death() handles this. \ No newline at end of file diff --git a/mods/persistence/modules/organs/internal/stack.dm b/mods/persistence/modules/organs/internal/stack.dm index 2ef219b1ec1..cf20d3c2c65 100644 --- a/mods/persistence/modules/organs/internal/stack.dm +++ b/mods/persistence/modules/organs/internal/stack.dm @@ -1,4 +1,6 @@ var/global/list/cortical_stacks = list() + +///#FIXME: Global proc isn't ideal /proc/switchToStack(var/obj/stack_holder, var/datum/mind/mind) // See if we can find the stack in whatever the holder was, usually a person. var/obj/item/organ/internal/stack/target = locate() in stack_holder @@ -32,6 +34,11 @@ var/global/list/cortical_stacks = list() var/cortical_alias var/last_alias_change +SAVED_VAR(/obj/item/organ/internal/stack, stackmob) +SAVED_VAR(/obj/item/organ/internal/stack, backup) +SAVED_VAR(/obj/item/organ/internal/stack, cortical_alias) +SAVED_VAR(/obj/item/organ/internal/stack, mind_id) + /obj/item/organ/internal/stack/Initialize() . = ..() global.cortical_stacks |= src @@ -39,8 +46,9 @@ var/global/list/cortical_stacks = list() /obj/item/organ/internal/stack/Destroy() global.cortical_stacks -= src QDEL_NULL(backup) + //#TODO: This probably should be up to the game mode or something. if(stackmob) - stackmob.forceMove(SSchargen.limbo_holder) // Move the stackmob to the limbo holder to allow it to otherwise resleeve. + stackmob.forceMove(SSchargen.get_limbo_turf()) // Move the stackmob to the limbo holder to allow it to otherwise resleeve. stackmob.cortical_stack = null stackmob = null . = ..() @@ -68,6 +76,7 @@ var/global/list/cortical_stacks = list() . = ..() //Since language list gets reset all the time, its better to do this here! if(owner && !(status & ORGAN_CUT_AWAY)) + events_repository.register(/decl/observ/logged_in, owner, src, /obj/item/organ/internal/stack/proc/on_client_login) owner.add_language(/decl/language/cortical) verbs |= /obj/item/organ/internal/stack/proc/change_cortical_alias if(!cortical_alias) @@ -76,6 +85,7 @@ var/global/list/cortical_stacks = list() /obj/item/organ/internal/stack/do_uninstall(in_place, detach, ignore_children, update_icon) //Since language list gets reset all the time, its better to do this here! if(owner) + events_repository.unregister(/decl/observ/logged_in, owner, src, /obj/item/organ/internal/stack/proc/on_client_login) owner.remove_language(/decl/language/cortical) verbs -= /obj/item/organ/internal/stack/proc/change_cortical_alias . = ..() @@ -115,6 +125,12 @@ var/global/list/cortical_stacks = list() to_chat(owner, SPAN_NOTICE("You change your Cortical Chat alias to [cortical_alias]")) last_alias_change = world.time +///Called when a client takes control of the mob owning this stack. +/obj/item/organ/internal/stack/proc/on_client_login() + if(!mind_id) + // New mobs tend to have their organs installed before the mind is transferred, so we'll double check that the mind_id is correct here. + update_mind_id() + /**Override to handle cortical chat. Ideally should be a section in base update language to check for language given from organs. */ /mob/living/carbon/human/update_languages() . = ..() @@ -129,7 +145,4 @@ var/global/list/cortical_stacks = list() if(!stack.cortical_alias) stack.cortical_alias = Gibberish(name, 100) -SAVED_VAR(/obj/item/organ/internal/stack, stackmob) -SAVED_VAR(/obj/item/organ/internal/stack, backup) -SAVED_VAR(/obj/item/organ/internal/stack, cortical_alias) -SAVED_VAR(/obj/item/organ/internal/stack, mind_id) + diff --git a/mods/persistence/modules/organs/organs.dm b/mods/persistence/modules/organs/organs.dm deleted file mode 100644 index d27343c2db5..00000000000 --- a/mods/persistence/modules/organs/organs.dm +++ /dev/null @@ -1,74 +0,0 @@ -SAVED_VAR(/obj/item/organ/external, burn_dam) -SAVED_VAR(/obj/item/organ/external, last_dam) -SAVED_VAR(/obj/item/organ/external, limb_flags) -SAVED_VAR(/obj/item/organ/external, body_part) -SAVED_VAR(/obj/item/organ/external, icon_position) -SAVED_VAR(/obj/item/organ/external, skin_tone) -SAVED_VAR(/obj/item/organ/external, skin_colour) -SAVED_VAR(/obj/item/organ/external, hair_colour) -SAVED_VAR(/obj/item/organ/external, markings) -SAVED_VAR(/obj/item/organ/external, wounds) -SAVED_VAR(/obj/item/organ/external, parent) -SAVED_VAR(/obj/item/organ/external, children) -SAVED_VAR(/obj/item/organ/external, internal_organs) -SAVED_VAR(/obj/item/organ/external, implants) -SAVED_VAR(/obj/item/organ/external, genetic_degradation) -SAVED_VAR(/obj/item/organ/external, autopsy_data) -SAVED_VAR(/obj/item/organ/external, encased) -SAVED_VAR(/obj/item/organ/external, arterial_bleed_severity) -SAVED_VAR(/obj/item/organ/external, cavity_max_w_class) -SAVED_VAR(/obj/item/organ/external, hatch_state) -SAVED_VAR(/obj/item/organ/external, stage) -SAVED_VAR(/obj/item/organ/external, cavity) -SAVED_VAR(/obj/item/organ/external, splinted) - -SAVED_VAR(/obj/item/organ, organ_tag) -SAVED_VAR(/obj/item/organ, parent_organ) -SAVED_VAR(/obj/item/organ, status) -SAVED_VAR(/obj/item/organ, owner) -SAVED_VAR(/obj/item/organ, dna) -SAVED_VAR(/obj/item/organ, species) -SAVED_VAR(/obj/item/organ, bodytype) -SAVED_VAR(/obj/item/organ, ailments) -SAVED_VAR(/obj/item/organ, damage) -SAVED_VAR(/obj/item/organ, min_broken_damage) -SAVED_VAR(/obj/item/organ, rejecting) -SAVED_VAR(/obj/item/organ, death_time) - -SAVED_VAR(/obj/item/organ/internal/lungs, active_breathing) -SAVED_VAR(/obj/item/organ/internal/lungs, last_int_pressure) -SAVED_VAR(/obj/item/organ/internal/lungs, last_ext_pressure) -SAVED_VAR(/obj/item/organ/internal/lungs, oxygen_deprivation) -SAVED_VAR(/obj/item/organ/internal/lungs, breathing) -SAVED_VAR(/obj/item/organ/internal/lungs, inhaled) - -SAVED_VAR(/obj/item/organ/internal/appendix, inflamed) - -SAVED_VAR(/obj/item/organ/internal/brain, can_use_mmi) -SAVED_VAR(/obj/item/organ/internal/brain, brainmob) -SAVED_VAR(/obj/item/organ/internal/brain, oxygen_reserve) - -SAVED_VAR(/obj/item/organ/internal/eyes, eye_colour) - -SAVED_VAR(/obj/item/organ/internal/heart, pulse) -SAVED_VAR(/obj/item/organ/internal/heart, open) -SAVED_VAR(/obj/item/organ/internal/heart, external_pump) - -SAVED_VAR(/obj/item/organ/internal/stomach, ingested) - -SAVED_VAR(/obj/item/organ/internal/voicebox, assists_languages) - -SAVED_VAR(/obj/item/organ/internal/cell, open) -SAVED_VAR(/obj/item/organ/internal/cell, cell) -SAVED_VAR(/obj/item/organ/internal/cell, servo_cost) - -SAVED_VAR(/obj/item/organ/internal/mmi_holder, stored_mmi) -SAVED_VAR(/obj/item/organ/internal/mmi_holder, persistantMind) -SAVED_VAR(/obj/item/organ/internal/mmi_holder, ownerckey) - -SAVED_VAR(/obj/item/organ/external/head, draw_eyes) -SAVED_VAR(/obj/item/organ/external/head, glowing_eyes) -SAVED_VAR(/obj/item/organ/external/head, can_intake_reagents) -SAVED_VAR(/obj/item/organ/external/head, has_lips) -SAVED_VAR(/obj/item/organ/external/head, forehead_graffiti) -SAVED_VAR(/obj/item/organ/external/head, graffiti_style) diff --git a/mods/persistence/modules/overmap/sectors.dm b/mods/persistence/modules/overmap/sectors.dm index 7d5200287a6..4fc34bcbf78 100644 --- a/mods/persistence/modules/overmap/sectors.dm +++ b/mods/persistence/modules/overmap/sectors.dm @@ -11,8 +11,8 @@ /obj/effect/overmap/visitable/Initialize() . = ..() - events_repository.register(/decl/observ/world_saving_start_event, SSpersistence, src, .proc/on_saving_start) - events_repository.register(/decl/observ/world_saving_finish_event, SSpersistence, src, .proc/on_saving_end) + events_repository.register(/decl/observ/world_saving_start_event, SSpersistence, src, PROC_REF(on_saving_start)) + events_repository.register(/decl/observ/world_saving_finish_event, SSpersistence, src, PROC_REF(on_saving_end)) if(!last_due) last_due = world.realtime //#FIXME: Use REALTIMEOFDAY since world.realtime doesn't handle midnight rollover diff --git a/mods/persistence/modules/overmap/stellar_anchor.dm b/mods/persistence/modules/overmap/stellar_anchor.dm index 677990c5e0e..6fa6d2a6999 100644 --- a/mods/persistence/modules/overmap/stellar_anchor.dm +++ b/mods/persistence/modules/overmap/stellar_anchor.dm @@ -18,6 +18,11 @@ var/sector_type = "sector" var/sector_color = COLOR_WHITE // Color of the sector or other objects created by the stellar anchor. +SAVED_VAR(/obj/machinery/stellar_anchor, anchored_areas) +SAVED_VAR(/obj/machinery/stellar_anchor, sector_name) +SAVED_VAR(/obj/machinery/stellar_anchor, sector_type) +SAVED_VAR(/obj/machinery/stellar_anchor, sector_color) + /obj/machinery/stellar_anchor/interface_interact(user) ui_interact(user) return TRUE diff --git a/mods/persistence/modules/projectiles/overrides.dm b/mods/persistence/modules/projectiles/overrides.dm index d64aa983f46..c7292e511f2 100644 --- a/mods/persistence/modules/projectiles/overrides.dm +++ b/mods/persistence/modules/projectiles/overrides.dm @@ -49,7 +49,7 @@ /datum/fabricator_recipe/protolathe/ammo/ammo_emp_slug research_excluded = TRUE -/obj/item/gun/projectile/update_base_icon() // sets streamlined way for mag-fed guns to check they sprites +/obj/item/gun/projectile/update_base_icon_state() // sets streamlined way for mag-fed guns to check they sprites if(ammo_magazine) if(ammo_magazine.stored_ammo.len) icon_state = "[get_world_inventory_state()]-loaded" @@ -58,7 +58,7 @@ else icon_state = get_world_inventory_state() -/obj/item/gun/projectile/pistol/update_base_icon() // pistols have a snowflake method of checking load sprites upstream, so we're making them use the same way as all the other mag-guns via this +/obj/item/gun/projectile/pistol/update_base_icon_state() // pistols have a snowflake method of checking load sprites upstream, so we're making them use the same way as all the other mag-guns via this if(ammo_magazine) if(ammo_magazine.stored_ammo.len) icon_state = "[get_world_inventory_state()]-loaded" diff --git a/mods/persistence/modules/recycling/recycler/_recycler_defines.dm b/mods/persistence/modules/recycling/recycler/_recycler_defines.dm index 87240f05c42..379893133c6 100644 --- a/mods/persistence/modules/recycling/recycler/_recycler_defines.dm +++ b/mods/persistence/modules/recycling/recycler/_recycler_defines.dm @@ -48,14 +48,13 @@ if(isbrain(L)) return L - var/obj/item/organ/internal/brain/brain = GET_INTERNAL_ORGAN(L, BP_BRAIN) - if(istype(brain) && !isnull(brain.brainmob)) - return brain.brainmob - - var/obj/item/organ/internal/posibrain/posibrain = GET_INTERNAL_ORGAN(L, BP_POSIBRAIN) - if(istype(posibrain) && !isnull(posibrain.brainmob)) - return posibrain.brainmob + //Returns the brainmob from the brain slot. + var/obj/item/organ/internal/brain = GET_INTERNAL_ORGAN(L, BP_BRAIN) + var/mob/brainmob = brain.get_brainmob(FALSE) + if(istype(brain) && brainmob) + return brainmob + //If not available return the brain mob from the stack. var/obj/item/organ/internal/stack/neuralstack = GET_INTERNAL_ORGAN(L, BP_STACK) if(istype(neuralstack) && !isnull(neuralstack.stackmob)) return neuralstack.stackmob \ No newline at end of file diff --git a/mods/persistence/modules/recycling/recycler/recycler.dm b/mods/persistence/modules/recycling/recycler/recycler.dm index 79394c2adab..0128b582bdd 100644 --- a/mods/persistence/modules/recycling/recycler/recycler.dm +++ b/mods/persistence/modules/recycling/recycler/recycler.dm @@ -104,7 +104,7 @@ /mob/living/simple_animal/corgi, /mob/living/simple_animal/opossum, /mob/living/simple_animal/chick, - /mob/living/simple_animal/chicken, + /mob/living/simple_animal/fowl/chicken, /mob/living/simple_animal/cow, /obj/structure/closet, /obj/structure/safe, @@ -122,7 +122,7 @@ /obj/item/storage/secure, /obj/item/storage/lockbox, /obj/item/aicard, - /obj/item/mmi, + /obj/item/organ/internal/brain_interface, /obj/item/paicard, ) @@ -399,8 +399,8 @@ //Play sound effects if(crushsound && (world.realtime >= (time_last_crush_sound + 1 SECONDS))) //Prevent sound spam time_last_crush_sound = world.realtime - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, sound_processing, 45, TRUE, 8, 3), 0, TIMER_UNIQUE) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, RECYCLER_SOUND_CRUSH_OBJECT, 50, TRUE), 1, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, sound_processing, 45, TRUE, 8, 3), 0, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, RECYCLER_SOUND_CRUSH_OBJECT, 50, TRUE), 1, TIMER_UNIQUE) ///Crushes a mob and it's contents /obj/machinery/recycler/proc/crush_mob(var/mob/living/L, var/crushsound = TRUE, var/recursive_depth = 1) @@ -423,12 +423,12 @@ //Play engine straining sound if(crushsound) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, sound_processing, 45, TRUE, 8, 3), 0, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, sound_processing, 45, TRUE, 8, 3), 0, TIMER_UNIQUE) //Play break down sound #TODO: Ideally, use the break sound of each things when that's implemented if(isrobot(L)) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, RECYCLER_SOUND_CRUSH_OBJECT, 50, TRUE), 1, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, RECYCLER_SOUND_CRUSH_OBJECT, 50, TRUE), 1, TIMER_UNIQUE) else - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, RECYCLER_SOUND_CRUSH_ORGANIC, 50, TRUE), 1, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, RECYCLER_SOUND_CRUSH_ORGANIC, 50, TRUE), 1, TIMER_UNIQUE) if(L.is_dead() || (L.mob_size <= MOB_SIZE_TINY)) L.gib() diff --git a/mods/persistence/modules/recycling/recycler/recycler_wires.dm b/mods/persistence/modules/recycling/recycler/recycler_wires.dm index a3c1eb68cca..dcf86d6bb92 100644 --- a/mods/persistence/modules/recycling/recycler/recycler_wires.dm +++ b/mods/persistence/modules/recycling/recycler/recycler_wires.dm @@ -62,35 +62,35 @@ var/global/const/RECYCLER_WIRE_POWER_SUPPLY = 5 R.recycler_state = !mended? (R.recycler_state | RECYCLER_FLAG_SHORTED) : (R.recycler_state & (~RECYCLER_FLAG_SHORTED)) R.update_icon() -/datum/wires/alarm/UpdatePulsed(var/index) +/datum/wires/recycler/UpdatePulsed(var/index) var/obj/machinery/recycler/R = holder var/mob/living/user = usr switch(index) if(RECYCLER_WIRE_POWER) if(!(R.recycler_state & RECYCLER_FLAG_POWER_CUT)) - addtimer(CALLBACK(src, /datum/wires/recycler/.proc/clear_power_cut, 10 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_power_cut), 10 SECONDS)) R.update_use_power(POWER_USE_OFF) R.recycler_state |= RECYCLER_FLAG_POWER_CUT if(RECYCLER_WIRE_SAFETY_ON) if(!(R.recycler_state & RECYCLER_FLAG_UNSAFE)) R.recycler_state |= RECYCLER_FLAG_UNSAFE - addtimer(CALLBACK(src, /datum/wires/recycler/.proc/clear_ignore_safety, 5 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_ignore_safety), 5 SECONDS)) if (RECYCLER_WIRE_SAFETY_DURATION) if(R.emergency_stop_time == initial(R.emergency_stop_time)) R.emergency_stop_time = ((user.skill_check(SKILL_ELECTRICAL, SKILL_EXPERT))? 0 : (1 SECOND)) - addtimer(CALLBACK(src, /datum/wires/recycler/.proc/clear_emergency_stop_time, 5 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_emergency_stop_time), 5 SECONDS)) if(RECYCLER_WIRE_MOTOR_LIMITER) if(!(R.recycler_state & RECYCLER_FLAG_OVERHEATING)) R.recycler_state |= RECYCLER_FLAG_OVERHEATING - addtimer(CALLBACK(src, /datum/wires/recycler/.proc/clear_overheating, 5 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_overheating), 5 SECONDS)) if(RECYCLER_WIRE_POWER_SUPPLY) if(!(R.recycler_state & RECYCLER_FLAG_SHORTED)) R.recycler_state |= RECYCLER_FLAG_SHORTED - addtimer(CALLBACK(src, /datum/wires/recycler/.proc/clear_shorted, 5 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(clear_shorted), 5 SECONDS)) R.update_icon() /datum/wires/recycler/proc/clear_ignore_safety() diff --git a/mods/persistence/sequential_guid.dm b/mods/persistence/sequential_guid.dm index 22015e98ef7..200288be8d0 100644 --- a/mods/persistence/sequential_guid.dm +++ b/mods/persistence/sequential_guid.dm @@ -7,10 +7,10 @@ /datum/uniqueness_generator/guid_generator/Generate(var/key, var/default_id = 100) var/sequence_id = sequence_id_by_key?[key] || 1 var/variant_flag = (key in sequence_id_by_key)? sequence_id_by_key[key] : rand(32768, 65535) - var/timeofday = num2hex(world.timeofday, 8) - var/epoc = num2hex(world.realtime / 10, 8) - var/variant = num2hex(min(variant_flag, 65535), 4) - var/sequence = num2hex(sequence_id, 6) + var/timeofday = num2hex_padded(world.timeofday, 8) + var/epoc = num2hex_padded(world.realtime / 10, 8) + var/variant = num2hex_padded(min(variant_flag, 65535), 4) + var/sequence = num2hex_padded(sequence_id, 6) timeofday = "[copytext(timeofday, 1, 5)]-[copytext(timeofday, 5, 9)]" . = "[epoc]-[timeofday]-[num2hex(rand(1, 255))][num2hex(rand(1, 255))]-[variant][sequence][num2hex(rand(1, 255))]" sequence_id_by_key[key] = sequence_id + 1 diff --git a/mods/species/ascent/ascent.dm b/mods/species/ascent/ascent.dm index 111ba4e8e0d..cac86f97573 100644 --- a/mods/species/ascent/ascent.dm +++ b/mods/species/ascent/ascent.dm @@ -8,7 +8,6 @@ #define BODY_FLAG_ALATE BITFLAG(4) #define BODY_FLAG_GYNE BITFLAG(5) -#define BP_M_HAND "midlimb" #define MANTIDIFY(_thing, _name, _desc) \ ##_thing/ascent/name = _name; \ @@ -19,9 +18,3 @@ /decl/modpack/ascent name = "The Ascent" - -/decl/modpack/ascent/pre_initialize() - . = ..() - global.all_limb_tags |= BP_M_HAND - global.all_limb_tags_by_depth.Insert(global.all_limb_tags_by_depth.Find(BP_CHEST)+1, BP_M_HAND) - global.all_inventory_slots |= BP_M_HAND diff --git a/mods/species/ascent/datum/emotes.dm b/mods/species/ascent/datum/emotes.dm index 1765b9e4517..7c34edae0b4 100644 --- a/mods/species/ascent/datum/emotes.dm +++ b/mods/species/ascent/datum/emotes.dm @@ -11,48 +11,49 @@ /decl/emote/visible/ascent_dazzle ) -/mob/living/silicon/robot/flying/ascent - default_emotes = list( +/mob/living/silicon/robot/flying/ascent/get_default_emotes() + var/static/list/default_emotes = list( /decl/emote/audible/ascent_purr, /decl/emote/audible/ascent_hiss, /decl/emote/audible/ascent_snarl ) + return default_emotes /decl/emote/audible/ascent_purr - key = "purr" - emote_message_3p = "USER purrs." + key = "apurr" + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/ascent/sounds/ascent1.ogg' /decl/emote/audible/ascent_hiss - key ="hiss" - emote_message_3p = "USER hisses." + key = "ahiss" + emote_message_3p = "$USER$ hisses." emote_sound = 'mods/species/ascent/sounds/razorweb.ogg' /decl/emote/audible/ascent_snarl - key = "snarl" - emote_message_3p = "USER snarls." + key = "asnarl" + emote_message_3p = "$USER$ snarls." emote_sound = 'mods/species/ascent/sounds/razorweb_hiss.ogg' /decl/emote/visible/ascent_flicker - key = "flicker" - emote_message_3p = "USER flickers prismatically." + key = "aflicker" + emote_message_3p = "$USER$ flickers prismatically." /decl/emote/visible/ascent_glint - key = "glint" - emote_message_3p = "USER glints." + key = "aglint" + emote_message_3p = "$USER$ glints." /decl/emote/visible/ascent_glimmer - key = "glimmer" - emote_message_3p = "USER glimmers." + key = "aglimmer" + emote_message_3p = "$USER$ glimmers." /decl/emote/visible/ascent_pulse - key = "pulse" - emote_message_3p = "USER pulses with light." + key = "apulse" + emote_message_3p = "$USER$ pulses with light." /decl/emote/visible/ascent_shine - key = "shine" - emote_message_3p = "USER shines brightly!" + key = "ashine" + emote_message_3p = "$USER$ shines brightly!" /decl/emote/visible/ascent_dazzle - key = "dazzle" - emote_message_3p = "USER dazzles!" + key = "adazzle" + emote_message_3p = "$USER$ dazzles!" diff --git a/mods/species/ascent/datum/species.dm b/mods/species/ascent/datum/species.dm index a9db8e2c5a9..4163e1a6b9b 100644 --- a/mods/species/ascent/datum/species.dm +++ b/mods/species/ascent/datum/species.dm @@ -29,7 +29,7 @@ name_plural = "Kharmaan Alates" show_ssd = "quiescent" - base_prosthetics_model = null + base_external_prosthetics_model = null available_bodytypes = list(/decl/bodytype/crystalline/mantid/alate) description = "When human surveyors finally arrived at the outer reaches of explored space, they hoped to find \ @@ -72,16 +72,6 @@ species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_MINOR_CUT spawn_flags = SPECIES_IS_RESTRICTED - heat_discomfort_strings = list( - "You feel brittle and overheated.", - "Your overheated carapace flexes uneasily.", - "Overheated ichor trickles from your eyes." - ) - cold_discomfort_strings = list( - "Frost forms along your carapace.", - "You hear a faint crackle of ice as you shift your freezing body.", - "Your movements become sluggish under the weight of the chilly conditions." - ) unarmed_attacks = list( /decl/natural_attack/claws/strong/gloves, /decl/natural_attack/bite/sharp diff --git a/mods/species/ascent/datum/species_bodytypes.dm b/mods/species/ascent/datum/species_bodytypes.dm index dcd21e037f7..3dc80d67394 100644 --- a/mods/species/ascent/datum/species_bodytypes.dm +++ b/mods/species/ascent/datum/species_bodytypes.dm @@ -31,6 +31,17 @@ ) limb_mapping = list(BP_CHEST = list(BP_CHEST, BP_M_HAND)) + heat_discomfort_strings = list( + "You feel brittle and overheated.", + "Your overheated carapace flexes uneasily.", + "Overheated ichor trickles from your eyes." + ) + cold_discomfort_strings = list( + "Frost forms along your carapace.", + "You hear a faint crackle of ice as you shift your freezing body.", + "Your movements become sluggish under the weight of the chilly conditions." + ) + /decl/bodytype/crystalline/mantid/alate name = "alate" bodytype_category = BODYTYPE_MANTID_SMALL diff --git a/mods/species/ascent/effects/razorweb.dm b/mods/species/ascent/effects/razorweb.dm index 4212504c734..0908b3f816d 100644 --- a/mods/species/ascent/effects/razorweb.dm +++ b/mods/species/ascent/effects/razorweb.dm @@ -57,7 +57,7 @@ return INITIALIZE_HINT_QDEL if(decays) - addtimer(CALLBACK(src, /obj/effect/razorweb/proc/decay), 15 MINUTES) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/effect/razorweb, decay)), 15 MINUTES) web = image(icon = icon, icon_state = "razorweb") gleam = emissive_overlay(icon = icon, icon_state = "razorweb-gleam") diff --git a/mods/species/ascent/icons/species/body/gyne/damage_overlays.dmi b/mods/species/ascent/icons/species/body/gyne/damage_overlays.dmi index e90caba8959..4b50afcc0c4 100644 Binary files a/mods/species/ascent/icons/species/body/gyne/damage_overlays.dmi and b/mods/species/ascent/icons/species/body/gyne/damage_overlays.dmi differ diff --git a/mods/species/ascent/icons/ui.dmi b/mods/species/ascent/icons/ui.dmi deleted file mode 100644 index 57aec186fed..00000000000 Binary files a/mods/species/ascent/icons/ui.dmi and /dev/null differ diff --git a/mods/species/ascent/icons/ui_hands.dmi b/mods/species/ascent/icons/ui_hands.dmi new file mode 100644 index 00000000000..c479fd12413 Binary files /dev/null and b/mods/species/ascent/icons/ui_hands.dmi differ diff --git a/mods/species/ascent/icons/ui_health.dmi b/mods/species/ascent/icons/ui_health.dmi new file mode 100644 index 00000000000..ec3d72314e9 Binary files /dev/null and b/mods/species/ascent/icons/ui_health.dmi differ diff --git a/mods/species/ascent/icons/ui_intents.dmi b/mods/species/ascent/icons/ui_intents.dmi new file mode 100644 index 00000000000..1e027dcfcdd Binary files /dev/null and b/mods/species/ascent/icons/ui_intents.dmi differ diff --git a/mods/species/ascent/icons/ui_interactions.dmi b/mods/species/ascent/icons/ui_interactions.dmi new file mode 100644 index 00000000000..10c5474aa65 Binary files /dev/null and b/mods/species/ascent/icons/ui_interactions.dmi differ diff --git a/mods/species/ascent/icons/ui_inventory.dmi b/mods/species/ascent/icons/ui_inventory.dmi new file mode 100644 index 00000000000..e1785e365a4 Binary files /dev/null and b/mods/species/ascent/icons/ui_inventory.dmi differ diff --git a/mods/species/ascent/icons/ui_molt.dmi b/mods/species/ascent/icons/ui_molt.dmi new file mode 100644 index 00000000000..34cb72aeee0 Binary files /dev/null and b/mods/species/ascent/icons/ui_molt.dmi differ diff --git a/mods/species/ascent/items/clothing.dm b/mods/species/ascent/items/clothing.dm index 42f162c4829..44ab3515cb1 100644 --- a/mods/species/ascent/items/clothing.dm +++ b/mods/species/ascent/items/clothing.dm @@ -1,13 +1,13 @@ /decl/hierarchy/outfit/job/ascent - name = "Ascent - Gyne" - mask = /obj/item/clothing/mask/gas/ascent - uniform = /obj/item/clothing/under/ascent - id_type = /obj/item/card/id/ascent - shoes = /obj/item/clothing/shoes/magboots/ascent - l_ear = null - pda_type = null - pda_slot = 0 - flags = 0 + name = "Ascent - Gyne" + mask = /obj/item/clothing/mask/gas/ascent + uniform = /obj/item/clothing/under/ascent + id_type = /obj/item/card/id/ascent + shoes = /obj/item/clothing/shoes/magboots/ascent + l_ear = null + pda_type = null + pda_slot = 0 + outfit_flags = 0 /decl/hierarchy/outfit/job/ascent/attendant name = "Ascent - Attendant" diff --git a/mods/species/ascent/items/guns.dm b/mods/species/ascent/items/guns.dm index 07e38ea6a9c..3ca058e0f93 100644 --- a/mods/species/ascent/items/guns.dm +++ b/mods/species/ascent/items/guns.dm @@ -42,6 +42,7 @@ /obj/item/gun/energy/particle/on_update_icon() . = ..() + var/obj/item/cell/power_supply = get_cell() var/datum/firemode/current_mode = firemodes[sel_mode] set_overlays(list( "[get_world_inventory_state()]-[istype(current_mode) ? current_mode.name : "lethal"]", diff --git a/mods/species/ascent/items/tools.dm b/mods/species/ascent/items/tools.dm index 5b1e5a13e36..1e477e83ad0 100644 --- a/mods/species/ascent/items/tools.dm +++ b/mods/species/ascent/items/tools.dm @@ -1,5 +1,5 @@ MANTIDIFY(/obj/item/storage/bag/trash/purple, "sample collection carrier", "material storage") -MANTIDIFY(/obj/item/pickaxe/diamonddrill, "lithobliterator", "drilling") +MANTIDIFY(/obj/item/tool/drill/diamond, "lithobliterator", "drilling") MANTIDIFY(/obj/item/tank/jetpack/carbondioxide, "maneuvering pack", "propulsion") /obj/item/light/tube/ascent @@ -50,7 +50,7 @@ MANTIDIFY(/obj/item/tank/jetpack/carbondioxide, "maneuvering pack", "pr bitesize = 10 /obj/item/chems/food/hydration/populate_reagents() - reagents.add_reagent(/decl/material/liquid/water, 10) + add_to_reagents(/decl/material/liquid/water, 10) . = ..() /obj/item/storage/box/water/ascent diff --git a/mods/species/ascent/machines/fabricator.dm b/mods/species/ascent/machines/fabricator.dm index 61e77d244b2..917180f0848 100644 --- a/mods/species/ascent/machines/fabricator.dm +++ b/mods/species/ascent/machines/fabricator.dm @@ -13,7 +13,7 @@ name = "circuitboard (ascent nanofabricator)" build_path = /obj/machinery/fabricator/ascent board_type = "machine" - origin_tech = "{'engineering':2,'programming':2}" + origin_tech = @'{"engineering":2,"programming":2}' req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1) diff --git a/mods/species/ascent/machines/magnetotron.dm b/mods/species/ascent/machines/magnetotron.dm index 8c49a67d233..dc12dbb0ac6 100644 --- a/mods/species/ascent/machines/magnetotron.dm +++ b/mods/species/ascent/machines/magnetotron.dm @@ -66,7 +66,7 @@ name = "circuitboard (Ascent magnetotron)" build_path = /obj/machinery/ascent_magnetotron board_type = "machine" - origin_tech = "{'engineering':2,'magnets':4}" + origin_tech = @'{"engineering":2,"magnets":4}' req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1 diff --git a/mods/species/ascent/machines/ship_machines.dm b/mods/species/ascent/machines/ship_machines.dm index 9200cea9259..e053026c1d2 100644 --- a/mods/species/ascent/machines/ship_machines.dm +++ b/mods/species/ascent/machines/ship_machines.dm @@ -53,10 +53,10 @@ MANTIDIFY(/obj/machinery/door/airlock/external/bolted, "mantid airlock", "door") MANTIDIFY(/obj/item/chems/chem_disp_cartridge, "canister", "chemical storage") /obj/item/chems/chem_disp_cartridge/ascent/crystal/populate_reagents() - reagents.add_reagent(/decl/material/liquid/crystal_agent, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/crystal_agent, reagents.maximum_volume) /obj/item/chems/chem_disp_cartridge/ascent/bromide/populate_reagents() - reagents.add_reagent(/decl/material/liquid/bromide, reagents.maximum_volume) + add_to_reagents(/decl/material/liquid/bromide, reagents.maximum_volume) /obj/machinery/sleeper/ascent name = "mantid sleeper" diff --git a/mods/species/ascent/mobs/bodyparts.dm b/mods/species/ascent/mobs/bodyparts.dm index c6a2748d392..3b04f648e38 100644 --- a/mods/species/ascent/mobs/bodyparts.dm +++ b/mods/species/ascent/mobs/bodyparts.dm @@ -20,7 +20,7 @@ . = ..() if(.) action.button_icon_state = "weave-web-[cooldown ? "off" : "on"]" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/external/groin/insectoid/mantid/attack_self(var/mob/user) . = ..() @@ -42,7 +42,7 @@ owner.visible_message(SPAN_WARNING("\The [owner] separates their jaws and begins to weave a web of crystalline filaments...")) cooldown = TRUE refresh_action_button() - addtimer(CALLBACK(src, .proc/reset_cooldown), web_weave_time) + addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), web_weave_time) if(do_after(owner, web_weave_time) && length(existing_webs) < max_webs) playsound(user, 'mods/species/ascent/sounds/razorweb.ogg', 70, 0) owner.visible_message(SPAN_DANGER("\The [owner] completes a razorweb!")) @@ -64,7 +64,7 @@ . = ..() if(.) action.button_icon_state = "shot-web-[cooldown ? "off" : "on"]" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/external/head/insectoid/mantid/attack_self(var/mob/user) . = ..() @@ -81,7 +81,7 @@ owner.throw_mode_on() cooldown = TRUE refresh_action_button() - addtimer(CALLBACK(src, .proc/reset_cooldown), cooldown_time) + addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), cooldown_time) else qdel(web) diff --git a/mods/species/ascent/mobs/bodyparts_insectoid.dm b/mods/species/ascent/mobs/bodyparts_insectoid.dm index 985afcafe29..794f7fdd042 100644 --- a/mods/species/ascent/mobs/bodyparts_insectoid.dm +++ b/mods/species/ascent/mobs/bodyparts_insectoid.dm @@ -1,59 +1,3 @@ -/datum/inventory_slot/gripper/midlimb - slot_name = "Midlimb" - slot_id = BP_M_HAND - requires_organ_tag = BP_M_HAND - ui_label = "M" - ui_loc = "CENTER,BOTTOM+1:14" - covering_slot_flags = SLOT_HAND_LEFT|SLOT_HAND_RIGHT // todo: generalize? - -/obj/item/organ/external/hand/insectoid/midlimb - name = "central grasper" - joint = "central wrist" - organ_tag = BP_M_HAND - parent_organ = BP_CHEST - amputation_point = "central wrist" - icon_position = 0 - encased = "carapace" - gripper_type = /datum/inventory_slot/gripper/midlimb - -/datum/inventory_slot/gripper/upper_left_hand - slot_name = "Left Upper Hand" - slot_id = BP_L_HAND_UPPER - requires_organ_tag = BP_L_HAND_UPPER - ui_label = "UL" - hand_sort_priority = 2 - covering_slot_flags = SLOT_HAND_LEFT - -/obj/item/organ/external/hand/insectoid/upper - name = "left raptorial" - joint = "upper left wrist" - amputation_point = "upper left shoulder" - organ_tag = BP_L_HAND_UPPER - parent_organ = BP_CHEST - gripper_type = /datum/inventory_slot/gripper/upper_left_hand - -/obj/item/organ/external/hand/insectoid/upper/get_manual_dexterity() - return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) - -/datum/inventory_slot/gripper/upper_right_hand - slot_name = "Right Upper Hand" - slot_id = BP_R_HAND_UPPER - requires_organ_tag = BP_R_HAND_UPPER - ui_label = "UR" - hand_sort_priority = 2 - covering_slot_flags = SLOT_HAND_RIGHT - -/obj/item/organ/external/hand/right/insectoid/upper - name = "right raptorial" - joint = "upper right wrist" - amputation_point = "upper right shoulder" - organ_tag = BP_R_HAND_UPPER - parent_organ = BP_CHEST - gripper_type = /datum/inventory_slot/gripper/upper_right_hand - -/obj/item/organ/external/hand/right/insectoid/upper/get_manual_dexterity() - return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) - /obj/item/organ/internal/egg_sac/insectoid name = "gyne egg-sac" action_button_name = "Produce Egg" @@ -64,7 +8,7 @@ . = ..() if(.) action.button_icon_state = "egg-on" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/internal/egg_sac/insectoid/attack_self(var/mob/user) . = ..() diff --git a/mods/species/ascent/mobs/insectoid_egg.dm b/mods/species/ascent/mobs/insectoid_egg.dm index dad0583a7fe..7c51602474b 100644 --- a/mods/species/ascent/mobs/insectoid_egg.dm +++ b/mods/species/ascent/mobs/insectoid_egg.dm @@ -11,8 +11,8 @@ var/global/default_gyne /obj/structure/insectoid_egg name = "alien egg" desc = "A semi-translucent alien egg." - health = 100 - maxhealth = 100 + current_health = 100 + max_health = 100 icon = 'mods/species/ascent/icons/egg.dmi' icon_state = "egg" @@ -27,7 +27,7 @@ var/global/default_gyne var/hatched = FALSE // Whether or not this egg has already hatched. material = /decl/material/solid/gemstone/crystal - + /obj/structure/insectoid_egg/Initialize() . = ..() START_PROCESSING(SSprocessing, src) @@ -41,7 +41,7 @@ var/global/default_gyne /obj/structure/insectoid_egg/on_update_icon() ..() - if(hatched || !health) + if(hatched || !current_health) icon_state = "egg_broken" else if(hatching) icon_state = "egg_break" @@ -53,7 +53,7 @@ var/global/default_gyne /obj/structure/insectoid_egg/examine(mob/user) . = ..() - if(hatched || !health) + if(hatched || !current_health) to_chat(user, "\icon[src] \The [src] lays in shambles, having been hatched or broken.") return @@ -71,16 +71,16 @@ var/global/default_gyne to_chat(user, "\icon[src] \The [src] is lively and appears ready to hatch at any moment.") /obj/structure/insectoid_egg/Process() - if(!health || hatched || hatching || (world.time <= (last_tick + maturity_rate))) + if(!current_health || hatched || hatching || (world.time <= (last_tick + maturity_rate))) return last_tick = world.time var/turf/T = get_turf(src) - + // Too high of temp will damage eggs. if(T.temperature > (max_temperature * 1.5)) - health = max(0, health - 5) - + current_health = max(0, current_health - 5) + if(T.temperature < min_temperature || T.temperature > max_temperature) return @@ -92,7 +92,7 @@ var/global/default_gyne G.request_player(src, "A mantid nymph is ready to hatch and needs a player.") /obj/structure/insectoid_egg/proc/hatch(var/client/C) - if(!health || maturity != 100 || hatched || hatching) + if(!current_health || maturity != 100 || hatched || hatching) return var/mob/living/carbon/alien/ascent_nymph/new_nymph = new(src, SPECIES_MANTID_NYMPH) // Spawn in the egg. @@ -102,9 +102,9 @@ var/global/default_gyne hatching = TRUE update_icon() visible_message(SPAN_NOTICE("\icon[src] \The [src] trembles and cracks as it begins to hatch.")) - addtimer(CALLBACK(src, .proc/finish_hatching), 2.5 SECONDS) - - + addtimer(CALLBACK(src, PROC_REF(finish_hatching)), 2.5 SECONDS) + + /obj/structure/insectoid_egg/proc/finish_hatching() hatched = TRUE hatching = FALSE diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm index 338b11625f1..d21bd76ab1e 100644 --- a/mods/species/ascent/mobs/nymph/_nymph.dm +++ b/mods/species/ascent/mobs/nymph/_nymph.dm @@ -15,8 +15,7 @@ icon = 'mods/species/ascent/icons/species/nymph.dmi' icon_state = ICON_STATE_WORLD death_msg = "expires with a pitiful hiss..." - health = 60 - maxHealth = 60 + max_health = 60 available_maneuvers = list(/decl/maneuver/leap) only_species_language = 1 @@ -30,10 +29,9 @@ holder_type = /obj/item/holder/ascent_nymph possession_candidate = 1 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_CHEM_CHANGE + atom_flags = ATOM_FLAG_NO_CHEM_CHANGE hud_type = /datum/hud/ascent_nymph - var/obj/item/holding_item var/crystal_reserve = 1000 var/last_molt = 0 var/molt @@ -41,31 +39,15 @@ /mob/living/carbon/alien/ascent_nymph/get_jump_distance() return 3 -/mob/living/carbon/alien/ascent_nymph/Login() - . = ..() - if(client) - if(holding_item) - holding_item.screen_loc = ANYMPH_SCREEN_LOC_HELD - client.screen |= holding_item - /mob/living/carbon/alien/ascent_nymph/Initialize(var/mapload) update_icon() . = ..(mapload) + add_inventory_slot(new /datum/inventory_slot/head/simple) + add_held_item_slot(new /datum/inventory_slot/gripper/mouth/nymph/ascent) set_extension(src, /datum/extension/base_icon_state, icon_state) -/mob/living/carbon/alien/ascent_nymph/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - . = ..() - if(holding_item) - to_chat(user, SPAN_NOTICE("It is holding \icon[holding_item] \a [holding_item].")) - -/mob/living/carbon/alien/ascent_nymph/get_dexterity(var/silent = FALSE) - return DEXTERITY_EQUIP_ITEM - -/mob/living/carbon/alien/ascent_nymph/death(gibbed) - if(holding_item) - try_unequip(holding_item) - - return ..(gibbed,death_msg) +/mob/living/carbon/alien/ascent_nymph/get_dexterity(var/silent) + return (DEXTERITY_EQUIP_ITEM|DEXTERITY_HOLD_ITEM) /mob/living/carbon/alien/ascent_nymph/on_update_icon() ..() diff --git a/mods/species/ascent/mobs/nymph/nymph_attacks.dm b/mods/species/ascent/mobs/nymph/nymph_attacks.dm index a570c01209a..e2003850e72 100644 --- a/mods/species/ascent/mobs/nymph/nymph_attacks.dm +++ b/mods/species/ascent/mobs/nymph/nymph_attacks.dm @@ -1,24 +1,11 @@ /mob/living/carbon/alien/ascent_nymph/UnarmedAttack(var/atom/A) - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - - if(a_intent == I_DISARM || a_intent == I_HELP) - if(can_collect(A)) - collect(A) - return - - if(ismob(A)) - visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A].")) - return . = ..() + if(.) + return -/mob/living/carbon/alien/ascent_nymph/RangedAttack(atom/A, var/params) - if((a_intent == I_HURT || a_intent == I_GRAB) && holding_item) + if(ismob(A)) setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - visible_message(SPAN_DANGER("\The [src] spits \a [holding_item] at \the [A]!")) - var/atom/movable/temp = holding_item - try_unequip(holding_item) - if(temp) - temp.throw_at(A, 10, rand(3,5), src) + visible_message(SPAN_NOTICE("\The [src] butts its head into \the [A].")) return TRUE - . = ..() \ No newline at end of file + return FALSE diff --git a/mods/species/ascent/mobs/nymph/nymph_emotes.dm b/mods/species/ascent/mobs/nymph/nymph_emotes.dm index fb601f6e91a..485ef07feac 100644 --- a/mods/species/ascent/mobs/nymph/nymph_emotes.dm +++ b/mods/species/ascent/mobs/nymph/nymph_emotes.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/ascent_nymph - default_emotes = list( +/mob/living/carbon/alien/ascent_nymph/get_default_emotes() + var/static/list/default_emotes = list( /decl/emote/visible, /decl/emote/visible/scratch, /decl/emote/visible/drool, @@ -13,10 +13,11 @@ /decl/emote/visible/shiver, /decl/emote/visible/collapse, /decl/emote/audible/hiss, - /decl/emote/audible, + /decl/emote/audible/burp, /decl/emote/audible/scretch, /decl/emote/audible/choke, /decl/emote/audible/gnarl, /decl/emote/audible/bug_hiss, /decl/emote/audible/bug_chitter - ) \ No newline at end of file + ) + return default_emotes diff --git a/mods/species/ascent/mobs/nymph/nymph_holder.dm b/mods/species/ascent/mobs/nymph/nymph_holder.dm index 4dbbc36a85a..ec430c06f8e 100644 --- a/mods/species/ascent/mobs/nymph/nymph_holder.dm +++ b/mods/species/ascent/mobs/nymph/nymph_holder.dm @@ -1,5 +1,5 @@ /obj/item/holder/ascent_nymph - origin_tech = "{'magnets':3,'biotech':5}" + origin_tech = @'{"magnets":3,"biotech":5}' slot_flags = SLOT_HEAD | SLOT_OVER_BODY | SLOT_HOLSTER armor = list( ARMOR_BIO = ARMOR_BIO_RESISTANT diff --git a/mods/species/ascent/mobs/nymph/nymph_inventory.dm b/mods/species/ascent/mobs/nymph/nymph_inventory.dm index 78c7adc3481..dc5220830fe 100644 --- a/mods/species/ascent/mobs/nymph/nymph_inventory.dm +++ b/mods/species/ascent/mobs/nymph/nymph_inventory.dm @@ -1,31 +1,3 @@ -/mob/living/carbon/alien/ascent_nymph/drop_from_inventory(var/obj/item/dropping_item) - . = ..() - if(dropping_item == holding_item) - holding_item = null - -/mob/living/carbon/alien/ascent_nymph/put_in_hands(var/obj/item/W) // No hands. Use mouth. - if(can_collect(W)) - collect(W) - else - W.forceMove(get_turf(src)) - return 1 - - -/mob/living/carbon/alien/ascent_nymph/hotkey_drop() - if(holding_item) - drop_item() - else - to_chat(usr, SPAN_WARNING("You have nothing to drop.")) - -/mob/living/carbon/alien/ascent_nymph/proc/can_collect(var/obj/item/collecting) - return (!holding_item && \ - istype(collecting) && \ - collecting.loc != src && \ - !collecting.anchored && \ - collecting.simulated && \ - collecting.w_class <= can_pull_size \ - ) - /mob/living/carbon/alien/ascent_nymph/proc/contains_crystals(var/obj/item/W) for(var/mat in W.matter) if(mat == /decl/material/solid/sand) @@ -37,51 +9,13 @@ else if(mat == /decl/material/solid/glass) . += W.matter[mat] -/mob/living/carbon/alien/ascent_nymph/proc/collect(var/obj/item/collecting) - collecting.forceMove(src) - holding_item = collecting - visible_message(SPAN_NOTICE("\The [src] engulfs \the [holding_item].")) - - // This means nymph can hoover up beakers as a kind of impromptu chem disposal - // technique, so long as they're okay with the reagents reacting inside them. - if(holding_item.reagents && holding_item.reagents.total_volume) - holding_item.reagents.trans_to_mob(src, holding_item.reagents.total_volume, CHEM_INGEST) - - // It also means they can do the old school cartoon schtick of eating an entire sandwich - // and spitting up an empty plate. Ptooie. - if(istype(holding_item, /obj/item/chems/food)) - var/obj/item/chems/food/food = holding_item - holding_item = null - if(food.trash) holding_item = new food.trash(src) - qdel(food) - - var/crystals = contains_crystals(collecting) - if(crystals) - if(crystal_reserve < ANYMPH_MAX_CRYSTALS) - crystal_reserve = min(ANYMPH_MAX_CRYSTALS, crystal_reserve + crystals) - qdel(collecting) - else - to_chat(src, SPAN_WARNING("You've already filled yourself with as much crystalline matter as you can!")) - return - - if(!QDELETED(holding_item)) - holding_item.equipped(src) - holding_item.screen_loc = ANYMPH_SCREEN_LOC_HELD - -/mob/living/carbon/alien/ascent_nymph/verb/drop_item_verb() - set name = "Drop Held Item" - set desc = "Drop the item you are currently holding inside." - set category = "IC" - set src = usr - drop_item() - -/mob/living/carbon/alien/ascent_nymph/drop_item() - var/item = holding_item - if(item && try_unequip(item)) - visible_message(SPAN_NOTICE("\The [src] regurgitates \the [item].")) - return TRUE +/datum/inventory_slot/gripper/mouth/nymph/ascent/equipped(var/mob/living/user, var/obj/item/prop, var/redraw_mob = TRUE, var/delete_old_item = TRUE) + var/mob/living/carbon/alien/ascent_nymph/nimp = user + var/crystals = istype(nimp) ? nimp.contains_crystals(prop) : 0 . = ..() - -// Makes it so that the held item's screen_loc isn't unset. -/mob/living/carbon/alien/ascent_nymph/item_should_have_screen_presence(obj/item/item, slot) - return (item == holding_item) || ..() \ No newline at end of file + if(. && crystals) + nimp.crystal_reserve = min(ANYMPH_MAX_CRYSTALS, nimp.crystal_reserve + crystals) + if(nimp.crystal_reserve >= ANYMPH_MAX_CRYSTALS) + to_chat(src, SPAN_WARNING("You've filled yourself with as much crystalline matter as you can!")) + if(!QDELETED(prop)) + qdel(prop) diff --git a/mods/species/ascent/mobs/nymph/nymph_life.dm b/mods/species/ascent/mobs/nymph/nymph_life.dm index 3eba226e5b5..cd1a17f31af 100644 --- a/mods/species/ascent/mobs/nymph/nymph_life.dm +++ b/mods/species/ascent/mobs/nymph/nymph_life.dm @@ -1,9 +1,28 @@ -/mob/living/carbon/alien/ascent_nymph/Life() +/mob/living/carbon/alien/ascent_nymph/handle_regular_hud_updates() . = ..() - if(stat == DEAD) + if(!.) return + var/datum/hud/ascent_nymph/nymph_hud = hud_used + if(!istype(nymph_hud)) + return + if(nymph_hud.food) + switch(nutrition) + if(450 to INFINITY) nymph_hud.food.icon_state = "nutrition0" + if(350 to 450) nymph_hud.food.icon_state = "nutrition1" + if(250 to 350) nymph_hud.food.icon_state = "nutrition2" + if(150 to 250) nymph_hud.food.icon_state = "nutrition3" + else nymph_hud.food.icon_state = "nutrition4" + if(nymph_hud.drink) + switch(hydration) + if(450 to INFINITY) nymph_hud.drink.icon_state = "hydration0" + if(350 to 450) nymph_hud.drink.icon_state = "hydration1" + if(250 to 350) nymph_hud.drink.icon_state = "hydration2" + if(150 to 250) nymph_hud.drink.icon_state = "hydration3" + else nymph_hud.drink.icon_state = "hydration4" +/mob/living/carbon/alien/ascent_nymph/handle_nutrition_and_hydration() + . = ..() // Generate some crystals over time. if(nutrition >= 300 && crystal_reserve < ANYMPH_MAX_CRYSTALS) crystal_reserve = min(ANYMPH_MAX_CRYSTALS, crystal_reserve + 15) @@ -16,32 +35,9 @@ adjust_nutrition(DEFAULT_HUNGER_FACTOR * -2) else adjust_nutrition(DEFAULT_HUNGER_FACTOR * -1) - if(hydration > 0) adjust_hydration(DEFAULT_THIRST_FACTOR * -1) - update_nymph_hud() - -/mob/living/carbon/alien/ascent_nymph/proc/update_nymph_hud() - // Update the HUD. - var/datum/hud/ascent_nymph/nymph_hud = hud_used - if(istype(nymph_hud)) - if(nymph_hud.food) - switch(nutrition) - if(450 to INFINITY) nymph_hud.food.icon_state = "nutrition0" - if(350 to 450) nymph_hud.food.icon_state = "nutrition1" - if(250 to 350) nymph_hud.food.icon_state = "nutrition2" - if(150 to 250) nymph_hud.food.icon_state = "nutrition3" - else nymph_hud.food.icon_state = "nutrition4" - - if(nymph_hud.drink) - switch(hydration) - if(450 to INFINITY) nymph_hud.drink.icon_state = "hydration0" - if(350 to 450) nymph_hud.drink.icon_state = "hydration1" - if(250 to 350) nymph_hud.drink.icon_state = "hydration2" - if(150 to 250) nymph_hud.drink.icon_state = "hydration3" - else nymph_hud.drink.icon_state = "hydration4" - /mob/living/carbon/alien/ascent_nymph/Stat() . = ..() if(client && statpanel("Status")) diff --git a/mods/species/ascent/mobs/nymph/nymph_ui.dm b/mods/species/ascent/mobs/nymph/nymph_ui.dm index 06054830a9b..ed0a4ad47cd 100644 --- a/mods/species/ascent/mobs/nymph/nymph_ui.dm +++ b/mods/species/ascent/mobs/nymph/nymph_ui.dm @@ -10,33 +10,36 @@ intent = I_DISARM icon_state = "intent_help" -/obj/screen/ascent_nymph_held - name = "held item" - screen_loc = ANYMPH_SCREEN_LOC_HELD - icon_state = "held" - -/obj/screen/ascent_nymph_held/Click() - var/mob/living/carbon/alien/ascent_nymph/nymph = usr - if(istype(nymph) && nymph.holding_item) nymph.try_unequip(nymph.holding_item) - /obj/screen/ascent_nymph_molt name = "molt" - icon = 'icons/obj/action_buttons/organs.dmi' + icon = 'mods/species/ascent/icons/ui_molt.dmi' screen_loc = ANYMPH_SCREEN_LOC_MOLT icon_state = "molt-on" + requires_ui_style = FALSE -/obj/screen/ascent_nymph_molt/Click() - var/mob/living/carbon/alien/ascent_nymph/nymph = usr +/obj/screen/ascent_nymph_molt/handle_click(mob/user, params) + var/mob/living/carbon/alien/ascent_nymph/nymph = user if(istype(nymph)) nymph.molt() /datum/hud/ascent_nymph - var/obj/screen/ascent_nymph_held/held var/obj/screen/ascent_nymph_molt/molt var/obj/screen/food/food var/obj/screen/drink/drink -/datum/hud/ascent_nymph/get_ui_style() - return 'mods/species/ascent/icons/ui.dmi' +/decl/ui_style/ascent + name = "Ascent" + restricted = TRUE + uid = "ui_style_ascent" + override_icons = list( + UI_ICON_HEALTH = 'mods/species/ascent/icons/ui_health.dmi', + UI_ICON_HANDS = 'mods/species/ascent/icons/ui_hands.dmi', + UI_ICON_INTENT = 'mods/species/ascent/icons/ui_intents.dmi', + UI_ICON_INTERACTION = 'mods/species/ascent/icons/ui_interactions.dmi', + UI_ICON_INVENTORY = 'mods/species/ascent/icons/ui_inventory.dmi' + ) + +/datum/hud/ascent_nymph/get_ui_style_data() + return GET_DECL(/decl/ui_style/ascent) /datum/hud/ascent_nymph/get_ui_color() return COLOR_WHITE @@ -45,49 +48,18 @@ return 255 /datum/hud/ascent_nymph/FinalizeInstantiation() - - var/ui_style = get_ui_style() + var/decl/ui_style/ui_style = get_ui_style_data() var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() - - held = new - held.icon = ui_style - held.color = ui_color - held.alpha = ui_alpha - adding += held - - molt = new - molt.icon = ui_style - molt.color = ui_color - molt.alpha = ui_alpha - adding += molt - - food = new - food.icon = 'icons/mob/status_hunger.dmi' - food.SetName("nutrition") - food.icon_state = "nutrition1" - food.pixel_w = 8 - food.screen_loc = ui_nutrition_small - adding += food - - drink = new - drink.icon = 'icons/mob/status_hunger.dmi' - drink.icon_state = "hydration1" - drink.SetName("hydration") - drink.screen_loc = ui_nutrition_small - adding += drink - - action_intent = new /obj/screen/intent/ascent_nymph() - action_intent.icon = ui_style - action_intent.color = ui_color - action_intent.alpha = ui_alpha - adding += action_intent - - mymob.healths = new /obj/screen() - mymob.healths.icon = ui_style - mymob.healths.color = ui_color - mymob.healths.alpha = ui_alpha - mymob.healths.SetName("health") - mymob.healths.screen_loc = ANYMPH_SCREEN_LOC_HEALTH - adding += mymob.healths + molt = new( null, mymob, ui_style, ui_color, ui_alpha) + food = new /obj/screen/food( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_NUTRITION) + drink = new /obj/screen/drink( null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HYDRATION) + action_intent = new /obj/screen/intent/ascent_nymph(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_INTENT) + mymob.healths = new /obj/screen/ascent_nymph_health(null, mymob, ui_style, ui_color, ui_alpha, UI_ICON_HEALTH) + src.other = list() + src.adding = list(mymob.healths, molt, food, drink, action_intent) ..() + +/obj/screen/ascent_nymph_health + name = "health" + screen_loc = ANYMPH_SCREEN_LOC_HEALTH diff --git a/mods/species/bayliens/_bayliens.dme b/mods/species/bayliens/_bayliens.dme index 92ad697aac1..1e053ec6723 100644 --- a/mods/species/bayliens/_bayliens.dme +++ b/mods/species/bayliens/_bayliens.dme @@ -44,6 +44,7 @@ #include "tajaran\datum\language.dm" #include "tajaran\datum\species.dm" #include "tajaran\datum\species_bodytypes.dm" +#include "tajaran\machinery\suit_cycler.dm" #include "tritonian\_tritonian.dm" #include "tritonian\datum\species.dm" #include "tritonian\datum\species_bodytypes.dm" diff --git a/mods/species/bayliens/adherent/_adherent.dm b/mods/species/bayliens/adherent/_adherent.dm index 23d88d9ad20..1a3e77898dc 100644 --- a/mods/species/bayliens/adherent/_adherent.dm +++ b/mods/species/bayliens/adherent/_adherent.dm @@ -1,4 +1,3 @@ -#define SPECIES_ADHERENT "Adherent" #define BODYTYPE_ADHERENT "adherent body" #define LANGUAGE_ADHERENT "Protocol" @@ -6,5 +5,6 @@ #define BP_JETS "maneuvering jets" #define BP_COOLING_FINS "cooling fins" -/mob/living/carbon/human/adherent/Initialize() - . = ..(species_name = SPECIES_ADHERENT) \ No newline at end of file +/mob/living/carbon/human/adherent/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + species_name = SPECIES_ADHERENT + . = ..() \ No newline at end of file diff --git a/mods/species/bayliens/adherent/datum/emotes.dm b/mods/species/bayliens/adherent/datum/emotes.dm index 7babbbd83c0..dd347dedd15 100644 --- a/mods/species/bayliens/adherent/datum/emotes.dm +++ b/mods/species/bayliens/adherent/datum/emotes.dm @@ -6,10 +6,10 @@ /decl/emote/audible/adherent_ding key = "ding" - emote_message_3p = "USER dings." + emote_message_3p = "$USER$ dings." emote_sound = 'mods/species/bayliens/adherent/sound/ding.ogg' /decl/emote/audible/adherent_chime key = "chime" - emote_message_3p = "USER chimes." + emote_message_3p = "$USER$ chimes." emote_sound = 'mods/species/bayliens/adherent/sound/chime.ogg' diff --git a/mods/species/bayliens/adherent/datum/species.dm b/mods/species/bayliens/adherent/datum/species.dm index d378482d7cd..eb671cfa0c0 100644 --- a/mods/species/bayliens/adherent/datum/species.dm +++ b/mods/species/bayliens/adherent/datum/species.dm @@ -13,7 +13,7 @@ /decl/species/adherent name = SPECIES_ADHERENT name_plural = "Adherents" - base_prosthetics_model = null + base_external_prosthetics_model = null description = "The Vigil is a loose collection of floating squid-like machines made of a crystalline composite. \ They once served their creators faithfully, but were left orphaned by a stellar apocalypse." @@ -51,14 +51,6 @@ speech_sounds = list('mods/species/bayliens/adherent/sound/chime.ogg') speech_chance = 25 - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - species_flags = SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_MINOR_CUT spawn_flags = SPECIES_CAN_JOIN @@ -104,7 +96,7 @@ float_is_usable = TRUE break if(float_is_usable) - if(istype(landing, /turf/simulated/open)) + if(landing.is_open()) H.visible_message("\The [H] descends from \the [landing].", "You descend regally.") else H.visible_message("\The [H] floats gracefully down from \the [landing].", "You land gently on \the [landing].") diff --git a/mods/species/bayliens/adherent/icons/damage_overlay.dmi b/mods/species/bayliens/adherent/icons/damage_overlay.dmi index c42c6420e53..a6b7ad243cd 100644 Binary files a/mods/species/bayliens/adherent/icons/damage_overlay.dmi and b/mods/species/bayliens/adherent/icons/damage_overlay.dmi differ diff --git a/mods/species/bayliens/adherent/organs/organs_internal.dm b/mods/species/bayliens/adherent/organs/organs_internal.dm index c5c93eef5e2..5f7bbe5eddd 100644 --- a/mods/species/bayliens/adherent/organs/organs_internal.dm +++ b/mods/species/bayliens/adherent/organs/organs_internal.dm @@ -14,7 +14,7 @@ . = ..() if(.) action.button_icon_state = "adherent-brain" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/internal/brain/adherent/attack_self(var/mob/user) . = ..() @@ -64,7 +64,7 @@ . = ..() if(.) action.button_icon_state = "[base_action_state]-[active ? "on" : "off"]" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/internal/powered/attack_self(var/mob/user) . = ..() @@ -120,7 +120,7 @@ /obj/item/organ/internal/eyes/adherent/Initialize() . = ..() - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb /obj/item/organ/internal/cell/adherent name = "piezoelectric core" diff --git a/mods/species/bayliens/bayliens.dm b/mods/species/bayliens/bayliens.dm index 52f6ab904b9..de824a2e3ab 100644 --- a/mods/species/bayliens/bayliens.dm +++ b/mods/species/bayliens/bayliens.dm @@ -1,6 +1,18 @@ +#define SPECIES_SKRELL "Skrell" +#define SPECIES_TAJARA "Tajara" +#define SPECIES_LIZARD "Unathi" +#define SPECIES_ADHERENT "Adherent" + /decl/modpack/bayliens name = "Baystation 12 Aliens" +/decl/modpack/bayliens/pre_initialize() + ..() + SSmodpacks.default_submap_whitelisted_species |= SPECIES_TAJARA + SSmodpacks.default_submap_whitelisted_species |= SPECIES_LIZARD + SSmodpacks.default_submap_whitelisted_species |= SPECIES_SKRELL + SSmodpacks.default_submap_whitelisted_species |= SPECIES_ADHERENT + /mob/living/carbon/human/Process_Spacemove(allow_movement) . = ..() if(.) @@ -13,4 +25,3 @@ // because the spacedrift subsystem checks the return value of this proc // and unsets inertia_dir if it returns nonzero. return 1 - diff --git a/mods/species/bayliens/skrell/_skrell.dm b/mods/species/bayliens/skrell/_skrell.dm index 9b9ff3ce427..cad43e41b32 100644 --- a/mods/species/bayliens/skrell/_skrell.dm +++ b/mods/species/bayliens/skrell/_skrell.dm @@ -1,5 +1,5 @@ -#define SPECIES_SKRELL "Skrell" #define BODYTYPE_SKRELL "skrellian body" -/mob/living/carbon/human/skrell/Initialize() - . = ..(species_name = SPECIES_SKRELL) \ No newline at end of file +/mob/living/carbon/human/skrell/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + species_name = SPECIES_SKRELL + . = ..() \ No newline at end of file diff --git a/mods/species/bayliens/skrell/datum/emotes.dm b/mods/species/bayliens/skrell/datum/emotes.dm index 6f773783d63..3bb122ec912 100644 --- a/mods/species/bayliens/skrell/datum/emotes.dm +++ b/mods/species/bayliens/skrell/datum/emotes.dm @@ -9,21 +9,21 @@ /decl/emote/audible/warble key = "warble" - emote_message_3p = "USER warbles." + emote_message_3p = "$USER$ warbles." emote_sound = 'mods/species/bayliens/skrell/sound/warble.ogg' /decl/emote/audible/croak key = "croak" - emote_message_3p = "USER croaks!" + emote_message_3p = "$USER$ croaks!" /decl/emote/audible/trill key = "trill" - emote_message_3p = "USER trills melodically!" + emote_message_3p = "$USER$ trills melodically!" /decl/emote/audible/hum key = "hum" - emote_message_3p = "USER hums a melodic, warbly chorus of notes!" + emote_message_3p = "$USER$ hums a melodic, warbly chorus of notes!" /decl/emote/audible/coo key = "coo" - emote_message_3p = "USER lets out an audible, warbly coo." \ No newline at end of file + emote_message_3p = "$USER$ lets out an audible, warbly coo." \ No newline at end of file diff --git a/mods/species/bayliens/skrell/datum/pronouns_skrell.dm b/mods/species/bayliens/skrell/datum/pronouns_skrell.dm index 2924e2b504f..8fc3fd80c6f 100644 --- a/mods/species/bayliens/skrell/datum/pronouns_skrell.dm +++ b/mods/species/bayliens/skrell/datum/pronouns_skrell.dm @@ -13,4 +13,4 @@ does = "does" self = "vilself" s = "s" - es = "es" \ No newline at end of file + es = "es" diff --git a/mods/species/bayliens/skrell/datum/skrell_meat.dm b/mods/species/bayliens/skrell/datum/skrell_meat.dm index b5813d6e84a..fb83b94a421 100644 --- a/mods/species/bayliens/skrell/datum/skrell_meat.dm +++ b/mods/species/bayliens/skrell/datum/skrell_meat.dm @@ -1,3 +1,3 @@ /obj/item/chems/food/fish/octopus/skrell/populate_reagents() . = ..() - reagents.add_reagent(/decl/material/liquid/hallucinogenics, 5) + add_to_reagents(/decl/material/liquid/hallucinogenics, 5) diff --git a/mods/species/bayliens/skrell/datum/species.dm b/mods/species/bayliens/skrell/datum/species.dm index 0b6466acc61..3b8d39ecd5b 100644 --- a/mods/species/bayliens/skrell/datum/species.dm +++ b/mods/species/bayliens/skrell/datum/species.dm @@ -56,18 +56,6 @@ /decl/blood_type/skrell/noplus, /decl/blood_type/skrell/nominus ) - - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 - - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 - - cold_discomfort_level = 292 //Higher than perhaps it should be, to avoid big speed reduction at normal room temp - heat_discomfort_level = 368 - appearance_descriptors = list( /datum/appearance_descriptor/height = 1, /datum/appearance_descriptor/build = 0.8, @@ -126,7 +114,7 @@ /decl/species/skrell/get_gender(var/mob/living/carbon/human/H) return istype(H) && (H.appearance_descriptors["headtail length"] == 1 ? MALE : FEMALE) -/decl/species/skrell/handle_trail(mob/living/carbon/human/H, turf/simulated/T, old_loc) +/decl/species/skrell/handle_trail(mob/living/carbon/human/H, turf/T, old_loc) var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) if(!shoes) var/list/bloodDNA @@ -135,10 +123,12 @@ bloodDNA = list(blood_data["blood_DNA"] = blood_data["blood_type"]) else bloodDNA = list() - T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.skin_colour + "25") // Coming (8c is the alpha value) - if(istype(old_loc, /turf/simulated)) - var/turf/simulated/old_turf = old_loc - old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.skin_colour + "25") // Going (8c is the alpha value) + if(T.simulated) + T.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, H.dir, 0, H.get_skin_colour() + "25") // Coming (8c is the alpha value) + if(isturf(old_loc)) + var/turf/old_turf = old_loc + if(old_turf.simulated) + old_turf.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/skrellprints, bloodDNA, 0, H.dir, H.get_skin_colour() + "25") // Going (8c is the alpha value) /decl/species/skrell/check_background() return TRUE diff --git a/mods/species/bayliens/skrell/datum/species_bodytype.dm b/mods/species/bayliens/skrell/datum/species_bodytype.dm index 7331059d594..1cd6ebc4f3d 100644 --- a/mods/species/bayliens/skrell/datum/species_bodytype.dm +++ b/mods/species/bayliens/skrell/datum/species_bodytype.dm @@ -1,19 +1,25 @@ /decl/bodytype/skrell - name = BODYTYPE_SKRELL - icon_base = 'mods/species/bayliens/skrell/icons/body/body.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - bandages_icon = 'icons/mob/bandage.dmi' + name = BODYTYPE_SKRELL + icon_base = 'mods/species/bayliens/skrell/icons/body/body.dmi' + bandages_icon = 'icons/mob/bandage.dmi' + bandages_icon = 'icons/mob/bandage.dmi' health_hud_intensity = 1.75 - associated_gender = PLURAL - eye_darksight_range = 4 - eye_flash_mod = 1.2 - eye_icon = 'mods/species/bayliens/skrell/icons/body/eyes.dmi' - apply_eye_colour = FALSE + associated_gender = PLURAL + eye_darksight_range = 4 + eye_flash_mod = 1.2 + eye_icon = 'mods/species/bayliens/skrell/icons/body/eyes.dmi' + apply_eye_colour = FALSE + + associated_gender = PLURAL + appearance_flags = HAS_UNDERWEAR | HAS_SKIN_COLOR + base_color = "#006666" + + default_sprite_accessories = list( + SAC_HAIR = list( + /decl/sprite_accessory/hair/skrell/short = "#006666" + ) + ) - associated_gender = PLURAL - appearance_flags = HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_SKIN_COLOR - base_color = "#006666" - base_hair_color = "#006666" has_organ = list( BP_HEART = /obj/item/organ/internal/heart, BP_STOMACH = /obj/item/organ/internal/stomach, @@ -23,4 +29,12 @@ BP_BRAIN = /obj/item/organ/internal/brain, BP_EYES = /obj/item/organ/internal/eyes/skrell ) - default_h_style = /decl/sprite_accessory/hair/skrell/short + + cold_level_1 = 280 //Default 260 - Lower is better + cold_level_2 = 220 //Default 200 + cold_level_3 = 130 //Default 120 + heat_level_1 = 420 //Default 360 - Higher is better + heat_level_2 = 480 //Default 400 + heat_level_3 = 1100 //Default 1000 + cold_discomfort_level = 292 //Higher than perhaps it should be, to avoid big speed reduction at normal room temp + heat_discomfort_level = 368 diff --git a/mods/species/bayliens/skrell/gear/gear.dm b/mods/species/bayliens/skrell/gear/gear.dm index 5ad58d02639..40788b67b9b 100644 --- a/mods/species/bayliens/skrell/gear/gear.dm +++ b/mods/species/bayliens/skrell/gear/gear.dm @@ -79,7 +79,6 @@ slowdown_held = 1 slowdown_worn = 1 removable_components = FALSE - cell = /obj/item/cell/hyper capacitor = /obj/item/stock_parts/capacitor/adv load_type = /obj/item/magnetic_ammo/skrell loaded = /obj/item/magnetic_ammo/skrell @@ -95,7 +94,6 @@ item_state = "skrell_carbine" slot_flags = SLOT_BACK|SLOT_LOWER_BODY desc = "The Vuu'Xqu*ix T-3, known as 'VT-3' by SolGov. Rarely seen out in the wild by anyone outside of a Skrellian SDTF." - accepts_cell_type = /obj/item/cell/high self_recharge = 1 projectile_type=/obj/item/projectile/beam/pulse/skrell/single charge_cost=120 @@ -110,6 +108,9 @@ list(mode_name="light", projectile_type=/obj/item/projectile/beam/pulse/skrell, charge_cost=40, burst=3, burst_delay=2) ) +/obj/item/gun/energy/pulse_rifle/skrell/setup_power_supply(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) + return ..(/obj/item/cell/high, /obj/item/cell, power_supply_extension_type, charge_value) + /obj/item/projectile/beam/pulse/skrell icon_state = "pu_laser" damage = 20 diff --git a/mods/species/bayliens/skrell/gear/gear_ears.dm b/mods/species/bayliens/skrell/gear/gear_ears.dm index 1bb0085d26e..c8ad69f720a 100644 --- a/mods/species/bayliens/skrell/gear/gear_ears.dm +++ b/mods/species/bayliens/skrell/gear/gear_ears.dm @@ -46,3 +46,4 @@ whitelisted = list(SPECIES_SKRELL) path = /obj/item/clothing/ears/skrell loadout_flags = GEAR_HAS_COLOR_SELECTION | GEAR_HAS_SUBTYPE_SELECTION + uid = "gear_accessory_skrell" diff --git a/mods/species/bayliens/skrell/gear/gear_mask.dm b/mods/species/bayliens/skrell/gear/gear_mask.dm index ff81e9d3d68..c9f348298bd 100644 --- a/mods/species/bayliens/skrell/gear/gear_mask.dm +++ b/mods/species/bayliens/skrell/gear/gear_mask.dm @@ -2,6 +2,7 @@ name = "skrellian gill cover" path = /obj/item/clothing/mask/gas/skrell whitelisted = list(BODYTYPE_SKRELL) + uid = "gear_mask_skrell" /obj/item/clothing/mask/gas/skrell name = "skrellian gill cover" diff --git a/mods/species/bayliens/skrell/gear/gear_suit.dm b/mods/species/bayliens/skrell/gear/gear_suit.dm index 4f65cd65a2d..1e545a1c9cf 100644 --- a/mods/species/bayliens/skrell/gear/gear_suit.dm +++ b/mods/species/bayliens/skrell/gear/gear_suit.dm @@ -4,7 +4,7 @@ desc = "Seems like a wetsuit with reinforced plating seamlessly attached to it. Very chic." allowed = list( /obj/item/rcd, - /obj/item/pickaxe, + /obj/item/tool, /obj/item/t_scanner, /obj/item/storage/ore, /obj/item/tank @@ -18,7 +18,7 @@ ARMOR_BIO = ARMOR_BIO_SMALL, ARMOR_RAD = ARMOR_RAD_MINOR ) - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE flags_inv = HIDEJUMPSUIT diff --git a/mods/species/bayliens/skrell/icons/body/hair.dmi b/mods/species/bayliens/skrell/icons/body/hair.dmi index f3d3cf7574e..9dad6dda88a 100644 Binary files a/mods/species/bayliens/skrell/icons/body/hair.dmi and b/mods/species/bayliens/skrell/icons/body/hair.dmi differ diff --git a/mods/species/bayliens/tajaran/_tajaran.dm b/mods/species/bayliens/tajaran/_tajaran.dm index 37580ae4404..2062b8c22ed 100644 --- a/mods/species/bayliens/tajaran/_tajaran.dm +++ b/mods/species/bayliens/tajaran/_tajaran.dm @@ -1,4 +1,3 @@ -#define SPECIES_TAJARA "Tajara" #define LANGUAGE_TAJARA "Siik'maas" #define BODYTYPE_FELINE "feline body" #define BODY_FLAG_FELINE BITFLAG(7) @@ -8,5 +7,5 @@ if(bodytype_equip_flags & BODY_FLAG_EXCLUDE) bodytype_equip_flags |= BODY_FLAG_FELINE -/mob/living/carbon/human/tajaran/Initialize() +/mob/living/carbon/human/tajaran/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) . = ..(species_name = SPECIES_TAJARA) diff --git a/mods/species/bayliens/tajaran/datum/accessory.dm b/mods/species/bayliens/tajaran/datum/accessory.dm index b85b331ddbc..f3cc2108969 100644 --- a/mods/species/bayliens/tajaran/datum/accessory.dm +++ b/mods/species/bayliens/tajaran/datum/accessory.dm @@ -4,9 +4,14 @@ icon_state = "hair_rattail" species_allowed = list(SPECIES_TAJARA) icon = 'mods/species/bayliens/tajaran/icons/hair.dmi' - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_hair_taj_rattail" +/decl/sprite_accessory/hair/taj/get_hidden_substitute() + if(accessory_flags & VERY_SHORT) + return src + return GET_DECL(/decl/sprite_accessory/hair/bald) + /decl/sprite_accessory/hair/taj/straight name = "Tajaran Straight Hair" icon_state = "hair_straight" @@ -132,7 +137,7 @@ icon_state = "facial_sideburns" species_allowed = list(SPECIES_TAJARA) icon = 'mods/species/bayliens/tajaran/icons/facial.dmi' - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_fhair_taj_sideburns" /decl/sprite_accessory/facial_hair/taj/mutton @@ -166,7 +171,7 @@ icon = 'mods/species/bayliens/tajaran/icons/markings.dmi' species_allowed = list(SPECIES_TAJARA) body_parts = list(BP_HEAD) - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_marking_taj_nose" /decl/sprite_accessory/marking/tajaran/ears @@ -209,7 +214,7 @@ name = "Patches (Body)" icon_state = "patches" body_parts = list(BP_CHEST, BP_GROIN) - flags = HAIR_LOSS_VULNERABLE + accessory_flags = HAIR_LOSS_VULNERABLE uid = "acc_marking_taj_patches" /decl/sprite_accessory/marking/tajaran/patches/left_arm @@ -235,7 +240,7 @@ /decl/sprite_accessory/marking/tajaran/tiger name = "Tiger Stripes (Head)" icon_state = "tiger" - flags = HAIR_LOSS_VULNERABLE + accessory_flags = HAIR_LOSS_VULNERABLE uid = "acc_marking_taj_tiger_head" /decl/sprite_accessory/marking/tajaran/tiger/body @@ -266,7 +271,7 @@ /decl/sprite_accessory/marking/tajaran/spots name = "Spots (Head)" icon_state = "spots" - flags = HAIR_LOSS_VULNERABLE + accessory_flags = HAIR_LOSS_VULNERABLE uid = "acc_marking_taj_spots_head" /decl/sprite_accessory/marking/tajaran/spots/body @@ -298,7 +303,7 @@ name = "Pawsocks (Left Arm)" icon_state = "pawsocks" body_parts = list(BP_L_ARM, BP_L_HAND) - flags = HAIR_LOSS_VULNERABLE + accessory_flags = HAIR_LOSS_VULNERABLE uid = "acc_marking_taj_pawsocks_leftarm" /decl/sprite_accessory/marking/tajaran/pawsocks/right_arm @@ -320,5 +325,5 @@ name = "Belly" icon_state = "belly" body_parts = list(BP_CHEST, BP_GROIN) - flags = HAIR_LOSS_VULNERABLE + accessory_flags = HAIR_LOSS_VULNERABLE uid = "acc_marking_taj_belly" diff --git a/mods/species/bayliens/tajaran/datum/emotes.dm b/mods/species/bayliens/tajaran/datum/emotes.dm index f5e07f697b9..adeed0c5c8d 100644 --- a/mods/species/bayliens/tajaran/datum/emotes.dm +++ b/mods/species/bayliens/tajaran/datum/emotes.dm @@ -1,9 +1,9 @@ /decl/emote/audible/purr key = "purr" - emote_message_3p = "USER purrs." + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/bayliens/tajaran/sound/cat_purr.ogg' /decl/emote/audible/purrlong key = "purrl" - emote_message_3p = "USER purrs." + emote_message_3p = "$USER$ purrs." emote_sound = 'mods/species/bayliens/tajaran/sound/cat_purr_long.ogg' diff --git a/mods/species/bayliens/tajaran/datum/species.dm b/mods/species/bayliens/tajaran/datum/species.dm index 3732ac95872..b19f50f8877 100644 --- a/mods/species/bayliens/tajaran/datum/species.dm +++ b/mods/species/bayliens/tajaran/datum/species.dm @@ -14,7 +14,7 @@ /decl/species/tajaran name = SPECIES_TAJARA name_plural = "Tajaran" - base_prosthetics_model = null + base_external_prosthetics_model = null description = "A small mammalian carnivore. If you are reading this, you are probably a Tajaran." hidden_from_codex = FALSE @@ -54,23 +54,6 @@ move_trail = /obj/effect/decal/cleanable/blood/tracks/paw - cold_level_1 = 200 - cold_level_2 = 140 - cold_level_3 = 80 - - heat_level_1 = 330 - heat_level_2 = 380 - heat_level_3 = 800 - - heat_discomfort_level = 294 - cold_discomfort_level = 230 - - heat_discomfort_strings = list( - "Your fur prickles in the heat.", - "You feel uncomfortably warm.", - "Your overheated skin itches." - ) - available_cultural_info = list( TAG_CULTURE = list( /decl/cultural_info/culture/tajaran, @@ -79,13 +62,13 @@ ) default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway, + /decl/emote/visible/tail/swish, + /decl/emote/visible/tail/wag, + /decl/emote/visible/tail/sway, + /decl/emote/visible/tail/qwag, + /decl/emote/visible/tail/fastsway, + /decl/emote/visible/tail/swag, + /decl/emote/visible/tail/stopsway, /decl/emote/audible/purr, /decl/emote/audible/purrlong ) @@ -99,4 +82,4 @@ autohiss_exempt = list(LANGUAGE_TAJARA) /decl/species/tajaran/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE) - . = H && H.change_skin_color(rgb(189, 171, 143)) + . = H?.set_skin_colour(rgb(189, 171, 143)) diff --git a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm index 529d8c5866e..76e44cc58b9 100644 --- a/mods/species/bayliens/tajaran/datum/species_bodytypes.dm +++ b/mods/species/bayliens/tajaran/datum/species_bodytypes.dm @@ -1,33 +1,51 @@ /decl/bodytype/feline - name = "humanoid" - bodytype_category = BODYTYPE_FELINE - limb_blend = ICON_MULTIPLY - icon_template = 'mods/species/bayliens/tajaran/icons/template.dmi' - icon_base = 'mods/species/bayliens/tajaran/icons/body.dmi' - icon_deformed = 'mods/species/bayliens/tajaran/icons/deformed_body.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - lip_icon = 'mods/species/bayliens/tajaran/icons/lips.dmi' + name = "humanoid" + bodytype_category = BODYTYPE_FELINE + limb_blend = ICON_MULTIPLY + icon_template = 'mods/species/bayliens/tajaran/icons/template.dmi' + icon_base = 'mods/species/bayliens/tajaran/icons/body.dmi' + icon_deformed = 'mods/species/bayliens/tajaran/icons/deformed_body.dmi' + bandages_icon = 'icons/mob/bandage.dmi' + cosmetics_icon = 'mods/species/bayliens/tajaran/icons/cosmetics.dmi' health_hud_intensity = 1.75 - bodytype_flag = BODY_FLAG_FELINE - movement_slowdown = -0.5 - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - base_hair_color = "#46321c" - base_color = "#ae7d32" - base_eye_color = "#00aa00" - default_h_style = /decl/sprite_accessory/hair/taj/lynx - - eye_darksight_range = 7 - eye_flash_mod = 2 - eye_blend = ICON_MULTIPLY - eye_icon = 'mods/species/bayliens/tajaran/icons/eyes.dmi' - eye_low_light_vision_effectiveness = 0.15 + bodytype_flag = BODY_FLAG_FELINE + movement_slowdown = -0.5 + appearance_flags = HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + base_color = "#ae7d32" + base_eye_color = "#00aa00" + nail_noun = "claws" + + eye_darksight_range = 7 + eye_flash_mod = 2 + eye_blend = ICON_MULTIPLY + eye_icon = 'mods/species/bayliens/tajaran/icons/eyes.dmi' + eye_low_light_vision_effectiveness = 0.15 eye_low_light_vision_adjustment_speed = 0.3 override_limb_types = list( BP_TAIL = /obj/item/organ/external/tail/cat ) - base_markings = list(/decl/sprite_accessory/marking/tajaran/ears = "#ae7d32") + default_sprite_accessories = list( + SAC_HAIR = list(/decl/sprite_accessory/hair/taj/lynx = "#46321c"), + SAC_MARKINGS = list(/decl/sprite_accessory/marking/tajaran/ears = "#ae7d32") + ) + + cold_level_1 = 200 + cold_level_2 = 140 + cold_level_3 = 80 + + heat_level_1 = 330 + heat_level_2 = 380 + heat_level_3 = 800 + + heat_discomfort_level = 294 + cold_discomfort_level = 230 + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) /decl/bodytype/feline/Initialize() equip_adjust = list( @@ -37,6 +55,14 @@ ) . = ..() +/decl/bodytype/feline/get_default_grooming_results(obj/item/organ/external/limb, obj/item/grooming/tool) + if(tool?.grooming_flags & GROOMABLE_BRUSH) + return list( + "success" = GROOMING_RESULT_SUCCESS, + "descriptor" = "[limb.name] fur" + ) + return ..() + /obj/item/organ/external/tail/cat tail_icon = 'mods/species/bayliens/tajaran/icons/tail.dmi' tail = "tajtail" diff --git a/mods/species/bayliens/tajaran/icons/body.dmi b/mods/species/bayliens/tajaran/icons/body.dmi index eec525ffac2..5facaf8686d 100644 Binary files a/mods/species/bayliens/tajaran/icons/body.dmi and b/mods/species/bayliens/tajaran/icons/body.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi new file mode 100644 index 00000000000..6b175ec87d6 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi new file mode 100644 index 00000000000..f9ce4604f3a Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi new file mode 100644 index 00000000000..34b9cedc5ab Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi new file mode 100644 index 00000000000..b0a597cfecf Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi new file mode 100644 index 00000000000..1565d9f8e89 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi new file mode 100644 index 00000000000..9265508d9b1 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi new file mode 100644 index 00000000000..235d2810121 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi new file mode 100644 index 00000000000..e2e0245516a Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi new file mode 100644 index 00000000000..d7828714306 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi new file mode 100644 index 00000000000..963ade3c684 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi new file mode 100644 index 00000000000..e50553d1005 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi new file mode 100644 index 00000000000..ad6ad32daa1 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi new file mode 100644 index 00000000000..1e95ce43f85 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi new file mode 100644 index 00000000000..902a9487ac6 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi new file mode 100644 index 00000000000..d7919da2414 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi new file mode 100644 index 00000000000..4ec38b440b5 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi b/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi new file mode 100644 index 00000000000..17f0769a4d2 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/cosmetics.dmi b/mods/species/bayliens/tajaran/icons/cosmetics.dmi new file mode 100644 index 00000000000..3d7d37d45c4 Binary files /dev/null and b/mods/species/bayliens/tajaran/icons/cosmetics.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/deformed_body.dmi b/mods/species/bayliens/tajaran/icons/deformed_body.dmi index 05fb34deca6..09a348406db 100644 Binary files a/mods/species/bayliens/tajaran/icons/deformed_body.dmi and b/mods/species/bayliens/tajaran/icons/deformed_body.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/facial.dmi b/mods/species/bayliens/tajaran/icons/facial.dmi index 40fc99054b3..befd9dc68b4 100644 Binary files a/mods/species/bayliens/tajaran/icons/facial.dmi and b/mods/species/bayliens/tajaran/icons/facial.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/hair.dmi b/mods/species/bayliens/tajaran/icons/hair.dmi index 240dbf58064..88380247713 100644 Binary files a/mods/species/bayliens/tajaran/icons/hair.dmi and b/mods/species/bayliens/tajaran/icons/hair.dmi differ diff --git a/mods/species/bayliens/tajaran/icons/lips.dmi b/mods/species/bayliens/tajaran/icons/lips.dmi deleted file mode 100644 index 0586f9438ab..00000000000 Binary files a/mods/species/bayliens/tajaran/icons/lips.dmi and /dev/null differ diff --git a/mods/species/bayliens/tajaran/machinery/suit_cycler.dm b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm new file mode 100644 index 00000000000..8a705dad3fb --- /dev/null +++ b/mods/species/bayliens/tajaran/machinery/suit_cycler.dm @@ -0,0 +1,71 @@ +/obj/machinery/suit_cycler/Initialize() + LAZYDISTINCTADD(available_bodytypes, BODYTYPE_FELINE) + . = ..() + +/obj/item/clothing/suit/space/void/merc/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/merc/suit.dmi') + +/obj/item/clothing/suit/space/void/swat/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/deathsquad/suit.dmi') + +/obj/item/clothing/suit/space/void/engineering/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering/suit.dmi') + +/obj/item/clothing/suit/space/void/mining/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining/suit.dmi') + +/obj/item/clothing/suit/space/void/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical/suit.dmi') + +/obj/item/clothing/suit/space/void/security/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec/suit.dmi') + +/obj/item/clothing/suit/space/void/atmos/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos/suit.dmi') + +/obj/item/clothing/suit/space/void/engineering/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/engineering_alt/suit.dmi') + +/obj/item/clothing/suit/space/void/mining/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/mining_alt/suit.dmi') + +/obj/item/clothing/suit/space/void/medical/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/medical_alt/suit.dmi') + +/obj/item/clothing/suit/space/void/security/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/sec_alt/suit.dmi') + +/obj/item/clothing/suit/space/void/atmos/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/atmos_alt/suit.dmi') + +/obj/item/clothing/suit/space/void/engineering/salvage/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/salvage/suit.dmi') + +/obj/item/clothing/suit/space/void/pilot/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/pilot/suit.dmi') + +/obj/item/clothing/suit/space/void/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/nasa/suit.dmi') + +/obj/item/clothing/suit/space/void/wizard/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/wizard/suit.dmi') + +/obj/item/clothing/suit/space/void/excavation/Initialize() + . = ..() + LAZYSET(sprite_sheets, BODYTYPE_FELINE, 'mods/species/bayliens/tajaran/icons/clothing/excavation/suit.dmi') diff --git a/mods/species/bayliens/tritonian/datum/species_bodytypes.dm b/mods/species/bayliens/tritonian/datum/species_bodytypes.dm index 12253390a8c..2f4881f38ea 100644 --- a/mods/species/bayliens/tritonian/datum/species_bodytypes.dm +++ b/mods/species/bayliens/tritonian/datum/species_bodytypes.dm @@ -1,7 +1,7 @@ /decl/bodytype/human/tritonian icon_base = 'mods/species/bayliens/tritonian/icons/body_female.dmi' movement_slowdown = 0.5 - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_TRITON | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + appearance_flags = HAS_SKIN_TONE_TRITON | HAS_UNDERWEAR | HAS_EYE_COLOR override_organ_types = list( BP_LUNGS = /obj/item/organ/internal/lungs/gills ) diff --git a/mods/species/bayliens/unathi/_lizard.dm b/mods/species/bayliens/unathi/_lizard.dm index e3b372fed07..9a469c30341 100644 --- a/mods/species/bayliens/unathi/_lizard.dm +++ b/mods/species/bayliens/unathi/_lizard.dm @@ -1,5 +1,5 @@ -#define SPECIES_LIZARD "Unathi" #define LANGUAGE_LIZARD "Sinta'unathi" -/mob/living/carbon/human/lizard/Initialize() - . = ..(species_name = SPECIES_LIZARD) +/mob/living/carbon/human/lizard/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + species_name = SPECIES_LIZARD + . = ..() diff --git a/mods/species/bayliens/unathi/datum/species.dm b/mods/species/bayliens/unathi/datum/species.dm index 2ccd68b9754..1cfd6fcf0bd 100644 --- a/mods/species/bayliens/unathi/datum/species.dm +++ b/mods/species/bayliens/unathi/datum/species.dm @@ -28,6 +28,13 @@ /decl/natural_attack/bite/sharp ) + available_accessory_categories = list( + SAC_HORNS, + SAC_FRILLS, + SAC_COSMETICS, + SAC_MARKINGS + ) + primitive_form = "Stok" gluttonous = GLUT_TINY strength = STR_HIGH @@ -44,14 +51,6 @@ description = "A heavily reptillian species. They prefer warmer temperatures than most species and \ their native tongue is a heavy hissing laungage." - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 - - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 - spawn_flags = SPECIES_CAN_JOIN | SPECIES_NO_ROBOTIC_INTERNAL_ORGANS flesh_color = "#34af10" @@ -71,20 +70,6 @@ ) move_trail = /obj/effect/decal/cleanable/blood/tracks/claw - heat_discomfort_level = 320 - heat_discomfort_strings = list( - "You feel soothingly warm.", - "You feel the heat sink into your bones.", - "You feel warm enough to take a nap." - ) - - cold_discomfort_level = 292 - cold_discomfort_strings = list( - "You feel chilly.", - "You feel sluggish and cold.", - "Your scales bristle against the cold." - ) - breathing_sound = 'mods/species/bayliens/unathi/sound/lizard_breathing.ogg' appearance_descriptors = list( @@ -93,13 +78,13 @@ ) default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway + /decl/emote/visible/tail/swish, + /decl/emote/visible/tail/wag, + /decl/emote/visible/tail/sway, + /decl/emote/visible/tail/qwag, + /decl/emote/visible/tail/fastsway, + /decl/emote/visible/tail/swag, + /decl/emote/visible/tail/stopsway ) pain_emotes_with_pain_level = list( diff --git a/mods/species/bayliens/unathi/datum/species_bodytypes.dm b/mods/species/bayliens/unathi/datum/species_bodytypes.dm index 1b9c5af2a44..b6522b634e4 100644 --- a/mods/species/bayliens/unathi/datum/species_bodytypes.dm +++ b/mods/species/bayliens/unathi/datum/species_bodytypes.dm @@ -4,7 +4,7 @@ husk_icon = 'mods/species/bayliens/unathi/icons/husk.dmi' icon_base = 'mods/species/bayliens/unathi/icons/body_female.dmi' icon_deformed = 'mods/species/bayliens/unathi/icons/deformed_body_female.dmi' - lip_icon = 'mods/species/bayliens/unathi/icons/lips.dmi' + cosmetics_icon = 'mods/species/bayliens/unathi/icons/cosmetics.dmi' blood_overlays = 'icons/mob/human_races/species/human/blood_overlays.dmi' bandages_icon = 'icons/mob/bandage.dmi' limb_icon_intensity = 0.7 @@ -13,10 +13,16 @@ uniform_state_modifier = "_f" movement_slowdown = 0.5 base_color = "#066000" - base_hair_color = "#192e19" - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + appearance_flags = HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR eye_darksight_range = 3 eye_flash_mod = 1.2 + nail_noun = "claws" + + default_sprite_accessories = list( + SAC_FRILLS = list( + /decl/sprite_accessory/frills/lizard/frills_long = "#192e19" + ) + ) override_organ_types = list( BP_EYES = /obj/item/organ/internal/eyes/lizard, @@ -25,7 +31,35 @@ override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/lizard) - default_h_style = /decl/sprite_accessory/hair/lizard/frills_long + cold_level_1 = 280 //Default 260 - Lower is better + cold_level_2 = 220 //Default 200 + cold_level_3 = 130 //Default 120 + + heat_level_1 = 420 //Default 360 - Higher is better + heat_level_2 = 480 //Default 400 + heat_level_3 = 1100 //Default 1000 + + heat_discomfort_level = 320 + heat_discomfort_strings = list( + "You feel soothingly warm.", + "You feel the heat sink into your bones.", + "You feel warm enough to take a nap." + ) + + cold_discomfort_level = 292 + cold_discomfort_strings = list( + "You feel chilly.", + "You feel sluggish and cold.", + "Your scales bristle against the cold." + ) + +/decl/bodytype/lizard/get_default_grooming_results(obj/item/organ/external/limb, obj/item/grooming/tool) + if(tool?.grooming_flags & GROOMABLE_FILE) + return list( + "success" = GROOMING_RESULT_SUCCESS, + "descriptor" = "[limb.name] scales" + ) + return ..() /decl/bodytype/lizard/masculine name = "masculine" diff --git a/mods/species/bayliens/unathi/datum/sprite_accessory.dm b/mods/species/bayliens/unathi/datum/sprite_accessory.dm index 4c90af7d4f8..d59bbb6bada 100644 --- a/mods/species/bayliens/unathi/datum/sprite_accessory.dm +++ b/mods/species/bayliens/unathi/datum/sprite_accessory.dm @@ -1,112 +1,112 @@ -/decl/sprite_accessory/hair/lizard +/decl/sprite_accessory/horns/lizard name = "Lizard Horns" - icon = 'mods/species/bayliens/unathi/icons/hair.dmi' + icon = 'mods/species/bayliens/unathi/icons/horns.dmi' icon_state = "horns" species_allowed = list(SPECIES_LIZARD) - blend = ICON_MULTIPLY - flags = VERY_SHORT + color_blend = ICON_MULTIPLY + accessory_flags = VERY_SHORT uid = "acc_hair_una_horns" -/decl/sprite_accessory/hair/lizard/hood - name = "Lizard Cobra Hood" - icon_state = "cobrahood" - uid = "acc_hair_una_cobra" - -/decl/sprite_accessory/hair/lizard/spines_long +/decl/sprite_accessory/horns/lizard/spines_long name = "Lizard Spines Long" icon_state = "spines_long" uid = "acc_hair_una_longspines" -/decl/sprite_accessory/hair/lizard/spines_short +/decl/sprite_accessory/horns/lizard/spines_short name = "Lizard Spines Short" icon_state = "spines_short" uid = "acc_hair_una_shortspines" -/decl/sprite_accessory/hair/lizard/frills_aqua - name = "Lizard Frills Aqua" - icon_state = "frills_aqua" - uid = "acc_hair_una_aqua" - -/decl/sprite_accessory/hair/lizard/frills_long - name = "Lizard Frills Long" - icon_state = "frills_long" - uid = "acc_hair_una_longfrills" - -/decl/sprite_accessory/hair/lizard/frills_short - name = "Lizard Frills Short" - icon_state = "frills_short" - uid = "acc_hair_una_shortfrills" - -/decl/sprite_accessory/hair/lizard/sidefrills - name = "Lizard Frills Side" - icon_state = "frills_side" - uid = "acc_hair_una_sidefrills" - -/decl/sprite_accessory/hair/lizard/bighorns +/decl/sprite_accessory/horns/lizard/bighorns name = "Lizard Horns Big" icon_state = "horns_big" uid = "acc_hair_una_bighorns" -/decl/sprite_accessory/hair/lizard/smallhorns +/decl/sprite_accessory/horns/lizard/smallhorns name = "Lizard Horns Small" icon_state = "horns_small" uid = "acc_hair_una_smallhorns" -/decl/sprite_accessory/hair/lizard/shorthorns +/decl/sprite_accessory/horns/lizard/shorthorns name = "Lizard Horns Short" icon_state = "horns_short" uid = "acc_hair_una_shorthorns" -/decl/sprite_accessory/hair/lizard/curledhorns +/decl/sprite_accessory/horns/lizard/curledhorns name = "Lizard Horns Curled" icon_state = "horns_curled" uid = "acc_hair_una_curledhorns" -/decl/sprite_accessory/hair/lizard/ramhorns +/decl/sprite_accessory/horns/lizard/ramhorns name = "Lizard Horns Ram" icon_state = "horns_ram" uid = "acc_hair_una_ramhorns" -/decl/sprite_accessory/hair/lizard/ramhornsthick +/decl/sprite_accessory/horns/lizard/ramhornsthick name = "Lizard Horns Ram Thick" icon_state = "horns_ram_thick" uid = "acc_hair_una_ramhornsthick" -/decl/sprite_accessory/hair/lizard/doublehorns +/decl/sprite_accessory/horns/lizard/doublehorns name = "Lizard Horns Double" icon_state = "horns_double" uid = "acc_hair_una_doublehorns" -/decl/sprite_accessory/hair/lizard/spinedfrillslong - name = "Lizard Spined Long Frills" - icon_state = "spined_long_frills" - uid = "acc_hair_una_longspinedfrills" - -/decl/sprite_accessory/hair/lizard/spinedfrillsshort - name = "Lizard Spined Short Frills" - icon_state = "spined_short_frills" - uid = "acc_hair_una_shortspinedfrills" - -// FACIAL -/decl/sprite_accessory/facial_hair/lizard +/decl/sprite_accessory/horns/lizard/chin name = "Lizard Horn Chin" - icon = 'mods/species/bayliens/unathi/icons/facial_hair.dmi' icon_state = "facial_chinhorns" - species_allowed = list(SPECIES_LIZARD) - blend = ICON_MULTIPLY uid = "acc_fhair_una_chinhorns" -/decl/sprite_accessory/facial_hair/lizard/hornadorns +/decl/sprite_accessory/horns/lizard/hornadorns name = "Lizard Horn Adorns" icon_state = "facial_hornadorns" uid = "acc_fhair_una_adorns" -/decl/sprite_accessory/facial_hair/lizard/spinespikes +/decl/sprite_accessory/horns/lizard/spinespikes name = "Lizard Spine Spikes" icon_state = "facial_spikes" uid = "acc_fhair_una_spinespikes" -/decl/sprite_accessory/facial_hair/lizard/dorsalfrill +/decl/sprite_accessory/frills/lizard + name = "Lizard Frills Aqua" + icon = 'mods/species/bayliens/unathi/icons/frills.dmi' + icon_state = "frills_aqua" + species_allowed = list(SPECIES_LIZARD) + color_blend = ICON_MULTIPLY + accessory_flags = VERY_SHORT + uid = "acc_hair_una_aqua" + +/decl/sprite_accessory/frills/lizard/hood + name = "Lizard Cobra Hood" + icon_state = "cobrahood" + uid = "acc_hair_una_cobra" + +/decl/sprite_accessory/frills/lizard/frills_long + name = "Lizard Frills Long" + icon_state = "frills_long" + uid = "acc_hair_una_longfrills" + +/decl/sprite_accessory/frills/lizard/frills_short + name = "Lizard Frills Short" + icon_state = "frills_short" + uid = "acc_hair_una_shortfrills" + +/decl/sprite_accessory/frills/lizard/sidefrills + name = "Lizard Frills Side" + icon_state = "frills_side" + uid = "acc_hair_una_sidefrills" + +/decl/sprite_accessory/frills/lizard/spinedfrillslong + name = "Lizard Spined Long Frills" + icon_state = "spined_long_frills" + uid = "acc_hair_una_longspinedfrills" + +/decl/sprite_accessory/frills/lizard/spinedfrillsshort + name = "Lizard Spined Short Frills" + icon_state = "spined_short_frills" + uid = "acc_hair_una_shortspinedfrills" + +/decl/sprite_accessory/frills/lizard/dorsalfrill name = "Lizard Frill Dorsal" icon_state = "facial_dorsalfrill" uid = "acc_fhair_una_dorsalfrill" diff --git a/mods/species/bayliens/unathi/icons/body_female.dmi b/mods/species/bayliens/unathi/icons/body_female.dmi index 77620a6b942..432be5c4d0a 100644 Binary files a/mods/species/bayliens/unathi/icons/body_female.dmi and b/mods/species/bayliens/unathi/icons/body_female.dmi differ diff --git a/mods/species/bayliens/unathi/icons/body_male.dmi b/mods/species/bayliens/unathi/icons/body_male.dmi index 75d2a831377..472e079f57c 100644 Binary files a/mods/species/bayliens/unathi/icons/body_male.dmi and b/mods/species/bayliens/unathi/icons/body_male.dmi differ diff --git a/mods/species/bayliens/unathi/icons/cosmetics.dmi b/mods/species/bayliens/unathi/icons/cosmetics.dmi new file mode 100644 index 00000000000..fb049c6d2ec Binary files /dev/null and b/mods/species/bayliens/unathi/icons/cosmetics.dmi differ diff --git a/mods/species/bayliens/unathi/icons/deformed_body_female.dmi b/mods/species/bayliens/unathi/icons/deformed_body_female.dmi index ba4e40e8142..effbe1f0e2b 100644 Binary files a/mods/species/bayliens/unathi/icons/deformed_body_female.dmi and b/mods/species/bayliens/unathi/icons/deformed_body_female.dmi differ diff --git a/mods/species/bayliens/unathi/icons/deformed_body_male.dmi b/mods/species/bayliens/unathi/icons/deformed_body_male.dmi index a03dce76634..6c7d9b9176a 100644 Binary files a/mods/species/bayliens/unathi/icons/deformed_body_male.dmi and b/mods/species/bayliens/unathi/icons/deformed_body_male.dmi differ diff --git a/mods/species/bayliens/unathi/icons/facial_hair.dmi b/mods/species/bayliens/unathi/icons/facial_hair.dmi deleted file mode 100644 index b992eb874f3..00000000000 Binary files a/mods/species/bayliens/unathi/icons/facial_hair.dmi and /dev/null differ diff --git a/mods/species/bayliens/unathi/icons/frills.dmi b/mods/species/bayliens/unathi/icons/frills.dmi new file mode 100644 index 00000000000..e113ba90c38 Binary files /dev/null and b/mods/species/bayliens/unathi/icons/frills.dmi differ diff --git a/mods/species/bayliens/unathi/icons/hair.dmi b/mods/species/bayliens/unathi/icons/hair.dmi deleted file mode 100644 index 6eac2a1c305..00000000000 Binary files a/mods/species/bayliens/unathi/icons/hair.dmi and /dev/null differ diff --git a/mods/species/bayliens/unathi/icons/horns.dmi b/mods/species/bayliens/unathi/icons/horns.dmi new file mode 100644 index 00000000000..d1728b439b8 Binary files /dev/null and b/mods/species/bayliens/unathi/icons/horns.dmi differ diff --git a/mods/species/bayliens/unathi/icons/lips.dmi b/mods/species/bayliens/unathi/icons/lips.dmi deleted file mode 100644 index 3cbb5ca90d4..00000000000 Binary files a/mods/species/bayliens/unathi/icons/lips.dmi and /dev/null differ diff --git a/mods/species/bayliens/unathi/organs/organs_internal.dm b/mods/species/bayliens/unathi/organs/organs_internal.dm index 739fff2d887..1edd08ffc19 100644 --- a/mods/species/bayliens/unathi/organs/organs_internal.dm +++ b/mods/species/bayliens/unathi/organs/organs_internal.dm @@ -4,4 +4,4 @@ icon = 'mods/species/bayliens/unathi/icons/organs.dmi' /obj/item/organ/internal/brain/lizard - can_use_mmi = FALSE + can_use_brain_interface = FALSE diff --git a/mods/species/neoavians/_neoavians.dm b/mods/species/neoavians/_neoavians.dm index e5a2eed41bf..d0e8a24d9a8 100644 --- a/mods/species/neoavians/_neoavians.dm +++ b/mods/species/neoavians/_neoavians.dm @@ -4,3 +4,7 @@ /decl/modpack/neoavians name = "Neo-Avian Content" + +/decl/modpack/neoavians/pre_initialize() + ..() + SSmodpacks.default_submap_whitelisted_species |= SPECIES_AVIAN diff --git a/mods/species/neoavians/datum/accessory.dm b/mods/species/neoavians/datum/accessory.dm index 7ae58e8078d..523dd453977 100644 --- a/mods/species/neoavians/datum/accessory.dm +++ b/mods/species/neoavians/datum/accessory.dm @@ -4,9 +4,14 @@ icon_state = "avian_default" icon = 'mods/species/neoavians/icons/hair.dmi' species_allowed = list(SPECIES_AVIAN) - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_hair_avian_plumage" +/decl/sprite_accessory/hair/avian/get_hidden_substitute() + if(accessory_flags & VERY_SHORT) + return src + return GET_DECL(/decl/sprite_accessory/hair/bald) + /decl/sprite_accessory/hair/avian/mohawk name = "Avian Mohawk" icon_state = "avian_mohawk" @@ -45,7 +50,7 @@ /decl/sprite_accessory/hair/avian/alt name = "Avian Plumage Alt" icon_state = "avian_default_alt" - blend = ICON_ADD + color_blend = ICON_ADD uid = "acc_hair_avian_plumage_alt" /decl/sprite_accessory/hair/avian/alt/ears @@ -120,7 +125,7 @@ body_parts = list(BP_HEAD) icon = 'mods/species/neoavians/icons/markings.dmi' species_allowed = list(SPECIES_AVIAN) - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_marking_avian_beak" /decl/sprite_accessory/marking/avian/avian @@ -142,23 +147,23 @@ /decl/sprite_accessory/marking/avian/additive name = "Beak, Additive (Head)" icon_state = "beak-add" - blend = ICON_ADD + color_blend = ICON_ADD uid = "acc_marking_avian_beak_alt" /decl/sprite_accessory/marking/avian/resomi name = "Raptor Ears, Additive (Head)" icon_state = "ears-add" - blend = ICON_ADD + color_blend = ICON_ADD uid = "acc_marking_avian_raptorears_alt" /decl/sprite_accessory/marking/avian/wing_feathers/additive name = "Wing Feathers, Additive (Left)" icon_state = "wing_feathers-add" - blend = ICON_ADD + color_blend = ICON_ADD uid = "acc_marking_avian_wingfeathers_left_alt" /decl/sprite_accessory/marking/avian/wing_feathers/right/additive name = "Wing Feathers, Additive (Right)" icon_state = "wing_feathers-add" - blend = ICON_ADD + color_blend = ICON_ADD uid = "acc_marking_avian_wingfeathers_right_alt" diff --git a/mods/species/neoavians/datum/loadout.dm b/mods/species/neoavians/datum/loadout.dm index 94a95479370..bc7b7fe4567 100644 --- a/mods/species/neoavians/datum/loadout.dm +++ b/mods/species/neoavians/datum/loadout.dm @@ -10,6 +10,7 @@ name = "Neo-Avian uniform selection" path = /obj/item/clothing/under/avian_smock slot = slot_w_uniform_str + uid = "gear_under_avian" /decl/loadout_option/avian/uniform_selection/get_gear_tweak_options() . = ..() @@ -29,4 +30,5 @@ name = "footwraps" path = /obj/item/clothing/shoes/avian/footwraps loadout_flags = GEAR_HAS_COLOR_SELECTION - slot = slot_shoes_str \ No newline at end of file + slot = slot_shoes_str + uid = "gear_shoes_avian" diff --git a/mods/species/neoavians/datum/species.dm b/mods/species/neoavians/datum/species.dm index f16bf503d47..1a4e3f352ad 100644 --- a/mods/species/neoavians/datum/species.dm +++ b/mods/species/neoavians/datum/species.dm @@ -17,7 +17,7 @@ description = "Avian species, largely crows, magpies and other corvids, were among the first sophonts uplifted to aid in colonizing Mars. \ These days they are more commonly found pursuing their own careers and goals on the fringes of human space or around their adopted homeworld \ of Hyperion. Neo-avian naming conventions tend to be a chosen name followed by the species of the person, followed by the location they were hatched." - base_prosthetics_model = null + base_external_prosthetics_model = null snow_slowdown_mod = -1 @@ -46,11 +46,6 @@ swap_flags = MONKEY|SIMPLE_ANIMAL push_flags = MONKEY|SIMPLE_ANIMAL - heat_discomfort_strings = list( - "Your feathers prickle in the heat.", - "You feel uncomfortably warm.", - ) - unarmed_attacks = list( /decl/natural_attack/bite/sharp, /decl/natural_attack/claws, @@ -71,7 +66,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/avian, slot_shoes_str) /decl/species/neoavian/get_holder_color(var/mob/living/carbon/human/H) - return H.skin_colour + return H.get_skin_colour() /decl/hierarchy/outfit/job/generic/assistant/avian name = "Job - Avian Assistant" diff --git a/mods/species/neoavians/datum/species_bodytypes.dm b/mods/species/neoavians/datum/species_bodytypes.dm index d963cdc7cd8..b7076917f04 100644 --- a/mods/species/neoavians/datum/species_bodytypes.dm +++ b/mods/species/neoavians/datum/species_bodytypes.dm @@ -6,10 +6,11 @@ limb_blend = ICON_MULTIPLY bodytype_flag = BODY_FLAG_AVIAN eye_icon = 'mods/species/neoavians/icons/eyes.dmi' - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR + appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR base_color = "#252525" base_eye_color = "#f5c842" mob_size = MOB_SIZE_SMALL + nail_noun = "talons" has_organ = list( BP_STOMACH = /obj/item/organ/internal/stomach, BP_HEART = /obj/item/organ/internal/heart, @@ -20,12 +21,19 @@ BP_EYES = /obj/item/organ/internal/eyes ) override_limb_types = list(BP_TAIL = /obj/item/organ/external/tail/avian) - default_h_style = /decl/sprite_accessory/hair/avian - base_markings = list(/decl/sprite_accessory/marking/avian = "#454545") + default_sprite_accessories = list( + SAC_HAIR = list(/decl/sprite_accessory/hair/avian = "#252525"), + SAC_MARKINGS = list(/decl/sprite_accessory/marking/avian = "#454545") + ) + + heat_discomfort_strings = list( + "Your feathers prickle in the heat.", + "You feel uncomfortably warm.", + ) - var/tail = "tail_avian" - var/tail_icon = 'mods/species/neoavians/icons/tail.dmi' - var/tail_blend = ICON_MULTIPLY + var/tail = "tail_avian" + var/tail_icon = 'mods/species/neoavians/icons/tail.dmi' + var/tail_blend = ICON_MULTIPLY var/tail_hair var/tail_hair_blend var/tail_states diff --git a/mods/species/neoavians/icons/body.dmi b/mods/species/neoavians/icons/body.dmi index 5e9915ed184..cd1f2e5fd14 100644 Binary files a/mods/species/neoavians/icons/body.dmi and b/mods/species/neoavians/icons/body.dmi differ diff --git a/mods/species/neoavians/icons/body_add.dmi b/mods/species/neoavians/icons/body_add.dmi index bd52c9a0b8d..c2e34e79f41 100644 Binary files a/mods/species/neoavians/icons/body_add.dmi and b/mods/species/neoavians/icons/body_add.dmi differ diff --git a/mods/species/neoavians/icons/body_raptor.dmi b/mods/species/neoavians/icons/body_raptor.dmi index fd339fb8f3b..ad66f40abda 100644 Binary files a/mods/species/neoavians/icons/body_raptor.dmi and b/mods/species/neoavians/icons/body_raptor.dmi differ diff --git a/mods/species/neoavians/icons/body_raptor_add.dmi b/mods/species/neoavians/icons/body_raptor_add.dmi index 5294c1e3e1c..4f1e9c20d68 100644 Binary files a/mods/species/neoavians/icons/body_raptor_add.dmi and b/mods/species/neoavians/icons/body_raptor_add.dmi differ diff --git a/mods/species/neoavians/icons/hair.dmi b/mods/species/neoavians/icons/hair.dmi index 0e9d333d6c8..df5a5f7010a 100644 Binary files a/mods/species/neoavians/icons/hair.dmi and b/mods/species/neoavians/icons/hair.dmi differ diff --git a/mods/species/neoavians/icons/markings.dmi b/mods/species/neoavians/icons/markings.dmi index 68489bb750f..1615c45bf74 100644 Binary files a/mods/species/neoavians/icons/markings.dmi and b/mods/species/neoavians/icons/markings.dmi differ diff --git a/mods/species/neoavians/icons/tail.dmi b/mods/species/neoavians/icons/tail.dmi index bbf441aca10..1edfc99e00a 100644 Binary files a/mods/species/neoavians/icons/tail.dmi and b/mods/species/neoavians/icons/tail.dmi differ diff --git a/mods/species/neoavians/machinery/suit_cycler.dm b/mods/species/neoavians/machinery/suit_cycler.dm index a213885dc5f..64d3e9951ba 100644 --- a/mods/species/neoavians/machinery/suit_cycler.dm +++ b/mods/species/neoavians/machinery/suit_cycler.dm @@ -1,6 +1,6 @@ /obj/machinery/suit_cycler/Initialize() + LAZYDISTINCTADD(available_bodytypes, BODYTYPE_AVIAN) . = ..() - available_bodytypes += BODYTYPE_AVIAN //mining diff --git a/mods/species/serpentid/_serpentid.dme b/mods/species/serpentid/_serpentid.dme index b4ca6c14098..3174f66ddfc 100644 --- a/mods/species/serpentid/_serpentid.dme +++ b/mods/species/serpentid/_serpentid.dme @@ -2,7 +2,6 @@ #define MODPACK_SERPENTID // BEGIN_INCLUDE #include "serpentid.dm" -#include "datum\attacks.dm" #include "datum\species.dm" #include "datum\species_bodytypes.dm" #include "mobs\bodyparts_serpentid.dm" diff --git a/mods/species/serpentid/datum/attacks.dm b/mods/species/serpentid/datum/attacks.dm deleted file mode 100644 index ac0ceb44955..00000000000 --- a/mods/species/serpentid/datum/attacks.dm +++ /dev/null @@ -1,13 +0,0 @@ -/decl/natural_attack/serpentid - name = "forelimb slash" - selector_icon_state = "attack_slash" - attack_verb = list("mauled", "slashed", "struck", "pierced") - attack_noun = list("forelimb") - damage = 8 - shredding = 1 - sharp = 1 - edge = 1 - delay = 20 - eye_attack_text = "a forelimb" - eye_attack_text_victim = "a forelimb" - usable_with_limbs = list(BP_L_HAND, BP_R_HAND) diff --git a/mods/species/serpentid/datum/species.dm b/mods/species/serpentid/datum/species.dm index ac5177ae5f6..115a35c8b73 100644 --- a/mods/species/serpentid/datum/species.dm +++ b/mods/species/serpentid/datum/species.dm @@ -55,9 +55,6 @@ strength = STR_HIGH breath_pressure = 25 blood_volume = 840 - heat_level_1 = 410 //Default 360 - Higher is better - heat_level_2 = 440 //Default 400 - heat_level_3 = 800 //Default 1000 species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_BLOCK | SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NEED_DIRECT_ABSORB spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED bump_flag = HEAVY @@ -65,7 +62,7 @@ swap_flags = ALLMOBS move_trail = /obj/effect/decal/cleanable/blood/tracks/snake - unarmed_attacks = list(/decl/natural_attack/serpentid) + unarmed_attacks = list(/decl/natural_attack/forelimb_slash) appearance_descriptors = list( /datum/appearance_descriptor/height = 1.75, /datum/appearance_descriptor/body_length = 1 diff --git a/mods/species/serpentid/datum/species_bodytypes.dm b/mods/species/serpentid/datum/species_bodytypes.dm index d98679f8f7c..749fcf18bd5 100644 --- a/mods/species/serpentid/datum/species_bodytypes.dm +++ b/mods/species/serpentid/datum/species_bodytypes.dm @@ -48,6 +48,9 @@ BP_R_HAND = list(BP_R_HAND, BP_R_HAND_UPPER) ) breathing_organ = BP_TRACH + heat_level_1 = 410 //Default 360 - Higher is better + heat_level_2 = 440 //Default 400 + heat_level_3 = 800 //Default 1000 /decl/bodytype/serpentid/Initialize() equip_adjust = list( diff --git a/mods/species/serpentid/mobs/bodyparts_serpentid.dm b/mods/species/serpentid/mobs/bodyparts_serpentid.dm index 0d15ca2157b..26b976e41ab 100644 --- a/mods/species/serpentid/mobs/bodyparts_serpentid.dm +++ b/mods/species/serpentid/mobs/bodyparts_serpentid.dm @@ -7,16 +7,6 @@ /obj/item/organ/internal/eyes/insectoid/serpentid/get_innate_flash_protection() return override_flash_protection -/obj/item/organ/internal/eyes/insectoid/serpentid/get_special_overlay() - var/icon/I = get_onhead_icon() - if(I) - var/image/eye_overlay = image(I) - if(owner && owner.is_cloaked()) - eye_overlay.alpha = 100 - if(eyes_shielded) - eye_overlay.color = "#aaaaaa" - return eye_overlay - /obj/item/organ/internal/eyes/insectoid/serpentid/additional_flash_effects(var/intensity) if(!eyes_shielded) take_internal_damage(max(0, 4 * (intensity))) @@ -28,7 +18,7 @@ . = ..() if(.) action.button_icon_state = "serpentid-shield-[eyes_shielded ? 1 : 0]" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/internal/eyes/insectoid/serpentid/attack_self(var/mob/user) . = ..() @@ -42,7 +32,7 @@ else to_chat(owner, "Your protective lenses retract out of the way.") override_flash_protection = FLASH_PROTECTION_VULNERABLE - addtimer(CALLBACK(src, .proc/remove_shield), 1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(remove_shield)), 1 SECONDS) owner.update_icon() refresh_action_button() @@ -136,7 +126,7 @@ . = ..() if(.) action.button_icon_state = "serpentid-threat" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/external/chest/insectoid/serpentid/attack_self(var/mob/user) . = ..() @@ -158,18 +148,26 @@ playsound(owner.loc, 'sound/effects/angrybug.ogg', 60, 0) owner.skin_state = SKIN_THREAT owner.update_skin() - addtimer(CALLBACK(owner, /mob/living/carbon/human/proc/reset_skin), 10 SECONDS, TIMER_UNIQUE) + addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/carbon/human, reset_skin)), 10 SECONDS, TIMER_UNIQUE) else if(owner.skin_state == SKIN_THREAT) owner.reset_skin() /obj/item/organ/external/head/insectoid/serpentid name = "head" -/obj/item/organ/external/head/insectoid/serpentid/get_eye_overlay() - // todo: maybe this should use its own bodytype instead of mob root bodytype? - var/obj/item/organ/internal/eyes/eyes = owner.get_organ((owner.get_bodytype()?.vision_organ || BP_EYES), /obj/item/organ/internal/eyes) - if(eyes) - return eyes.get_special_overlay() +/obj/item/organ/external/head/insectoid/serpentid/get_organ_eyes_overlay() + var/obj/item/organ/internal/eyes/eyes = get_eyes_organ() + var/icon/eyes_icon = eyes?.get_onhead_icon() + if(!eyes_icon) + return + var/image/eye_overlay = image(eyes_icon) + if(owner && owner.is_cloaked()) + eye_overlay.alpha = 100 + if(istype(eyes, /obj/item/organ/internal/eyes/insectoid/serpentid)) + var/obj/item/organ/internal/eyes/insectoid/serpentid/snake_eyes = eyes + if(snake_eyes.eyes_shielded) + eye_overlay.color = "#aaaaaa" + return eye_overlay /obj/item/organ/external/groin/insectoid/serpentid name = "abdomen" @@ -182,7 +180,7 @@ . = ..() if(.) action.button_icon_state = "serpentid-cloak-[owner && owner.is_cloaked_by(species) ? 1 : 0]" - if(action.button) action.button.UpdateIcon() + action.button?.update_icon() /obj/item/organ/external/groin/insectoid/serpentid/attack_self(var/mob/user) . = ..() diff --git a/mods/species/utility_frames/_utility_frames.dme b/mods/species/utility_frames/_utility_frames.dme index 776d098bb5d..728a6e05d86 100644 --- a/mods/species/utility_frames/_utility_frames.dme +++ b/mods/species/utility_frames/_utility_frames.dme @@ -1,5 +1,6 @@ #ifndef MODPACK_UTILITY_FRAMES #define MODPACK_UTILITY_FRAMES +#include "../../content/shackles/_shackles.dme" #include "_utility_frames.dm" #include "species.dm" #include "species_bodytypes.dm" diff --git a/mods/species/utility_frames/markings.dm b/mods/species/utility_frames/markings.dm index 24b8a68b72d..ade0c186443 100644 --- a/mods/species/utility_frames/markings.dm +++ b/mods/species/utility_frames/markings.dm @@ -4,7 +4,7 @@ body_parts = list(BP_CHEST) species_allowed = list(SPECIES_FRAME) icon = 'mods/species/utility_frames/icons/markings.dmi' - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_marking_frame_stripe" /decl/sprite_accessory/marking/frame/head_stripe diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm index 2d988a94fc4..4ea0b407028 100644 --- a/mods/species/utility_frames/species.dm +++ b/mods/species/utility_frames/species.dm @@ -14,8 +14,7 @@ name_plural = "Utility Frames" description = "Simple AI-driven robots are used for many menial or repetitive tasks in human space." cyborg_noun = null - base_prosthetics_model = null - + base_external_prosthetics_model = null blood_types = list(/decl/blood_type/coolant) available_bodytypes = list(/decl/bodytype/prosthetic/utility_frame) @@ -27,22 +26,12 @@ warning_low_pressure = 50 hazard_low_pressure = -1 flesh_color = COLOR_GUNMETAL - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - heat_level_1 = SYNTH_HEAT_LEVEL_1 - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 body_temperature = null passive_temp_gain = 5 // stabilize at ~80 C in a 20 C environment. - heat_discomfort_level = 373.15 blood_volume = 0 preview_outfit = null - heat_discomfort_strings = list( - "You are dangerously close to overheating!" - ) unarmed_attacks = list( /decl/natural_attack/stomp, /decl/natural_attack/kick, diff --git a/mods/species/utility_frames/species_bodytypes.dm b/mods/species/utility_frames/species_bodytypes.dm index c78b55cbde8..57475c6f023 100644 --- a/mods/species/utility_frames/species_bodytypes.dm +++ b/mods/species/utility_frames/species_bodytypes.dm @@ -12,19 +12,21 @@ base_eye_color = "#00ccff" material = /decl/material/solid/metal/steel vital_organs = list( - BP_POSIBRAIN, + BP_BRAIN, BP_CELL ) override_limb_types = list(BP_HEAD = /obj/item/organ/external/head/utility_frame) has_organ = list( - BP_POSIBRAIN = /obj/item/organ/internal/posibrain, - BP_EYES = /obj/item/organ/internal/eyes, - BP_CELL = /obj/item/organ/internal/cell + BP_BRAIN = /obj/item/organ/internal/brain/robotic, + BP_EYES = /obj/item/organ/internal/eyes, + BP_CELL = /obj/item/organ/internal/cell ) - base_markings = list( - /decl/sprite_accessory/marking/frame/plating = "#8888cc", - /decl/sprite_accessory/marking/frame/plating/legs = "#8888cc", - /decl/sprite_accessory/marking/frame/plating/head = "#8888cc" + default_sprite_accessories = list( + SAC_MARKINGS = list( + /decl/sprite_accessory/marking/frame/plating = "#8888cc", + /decl/sprite_accessory/marking/frame/plating/legs = "#8888cc", + /decl/sprite_accessory/marking/frame/plating/head = "#8888cc" + ) ) /decl/bodytype/prosthetic/utility_frame/Initialize() diff --git a/mods/species/vox/_vox.dm b/mods/species/vox/_vox.dm index a36a5e9951b..f4671758ba0 100644 --- a/mods/species/vox/_vox.dm +++ b/mods/species/vox/_vox.dm @@ -10,10 +10,11 @@ credits_crew_names = list("THE VOX") credits_topics = list("VOX RITUAL DUELS", "NECK MARKINGS", "ANCIENT SUPERCOMPUTERS") -/mob/living/carbon/human/vox/Initialize() - h_style = /decl/sprite_accessory/hair/vox/short - hair_colour = COLOR_BEASTY_BROWN - . = ..(species_name = SPECIES_VOX) +/mob/living/carbon/human/vox/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + SET_HAIR_STYLE(src, /decl/sprite_accessory/hair/vox/short, TRUE) + SET_HAIR_COLOUR(src, COLOR_BEASTY_BROWN, TRUE) + species_name = SPECIES_VOX + . = ..() /datum/follow_holder/voxstack sort_order = 14 diff --git a/mods/species/vox/datum/accessories.dm b/mods/species/vox/datum/accessories.dm index b8fb567bbf6..5213b4d8612 100644 --- a/mods/species/vox/datum/accessories.dm +++ b/mods/species/vox/datum/accessories.dm @@ -70,7 +70,7 @@ body_flags_allowed = BODY_FLAG_VOX bodytype_categories_allowed = list(BODYTYPE_VOX) icon = 'mods/species/vox/icons/body/soldier/markings.dmi' - blend = ICON_MULTIPLY + color_blend = ICON_MULTIPLY uid = "acc_markings_vox_neck" /decl/sprite_accessory/marking/vox/claws diff --git a/mods/species/vox/datum/antagonism.dm b/mods/species/vox/datum/antagonism.dm index e47ceef5b64..cc21ad6ea57 100644 --- a/mods/species/vox/datum/antagonism.dm +++ b/mods/species/vox/datum/antagonism.dm @@ -49,7 +49,7 @@ if(user.mind) user.mind.transfer_to(vox) qdel(user) - addtimer(CALLBACK(src, .proc/do_post_voxifying, vox), 1) + addtimer(CALLBACK(src, PROC_REF(do_post_voxifying), vox), 1) /obj/structure/mirror/raider/proc/do_post_voxifying(var/mob/living/carbon/human/vox) var/newname = sanitize_safe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm index ffc0cac1066..8a361b59902 100644 --- a/mods/species/vox/datum/species.dm +++ b/mods/species/vox/datum/species.dm @@ -22,7 +22,7 @@ /decl/species/vox name = SPECIES_VOX name_plural = SPECIES_VOX - base_prosthetics_model = /decl/bodytype/prosthetic/vox/crap + base_external_prosthetics_model = /decl/bodytype/prosthetic/vox/crap default_emotes = list( /decl/emote/audible/vox_shriek @@ -62,10 +62,6 @@ warning_low_pressure = 50 hazard_low_pressure = 0 - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = -1 - age_descriptor = /datum/appearance_descriptor/age/vox preview_outfit = /decl/hierarchy/outfit/vox_raider @@ -169,6 +165,6 @@ stack.do_backup() /decl/emote/audible/vox_shriek - key ="shriek" - emote_message_3p = "USER SHRIEKS!" + key = "shriek" + emote_message_3p = "$USER$ SHRIEKS!" emote_sound = 'mods/species/vox/sounds/shriek1.ogg' diff --git a/mods/species/vox/datum/species_bodytypes.dm b/mods/species/vox/datum/species_bodytypes.dm index f887d9852e7..dec2abe8efc 100644 --- a/mods/species/vox/datum/species_bodytypes.dm +++ b/mods/species/vox/datum/species_bodytypes.dm @@ -1,21 +1,25 @@ /decl/bodytype/vox - name = "soldier voxform" - bodytype_category = BODYTYPE_VOX - icon_base = 'mods/species/vox/icons/body/soldier/body.dmi' - icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi' - husk_icon = 'mods/species/vox/icons/body/husk.dmi' - blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi' - eye_icon = 'mods/species/vox/icons/body/soldier/eyes.dmi' - bodytype_flag = BODY_FLAG_VOX - limb_blend = ICON_MULTIPLY - eye_blend = ICON_MULTIPLY - appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_SKIN_COLOR - base_hair_color = "#160900" - base_eye_color = "#d60093" - base_color = "#526d29" - body_flags = BODY_FLAG_NO_DNA - default_h_style = /decl/sprite_accessory/hair/vox/short - vital_organs = list( + name = "soldier voxform" + bodytype_category = BODYTYPE_VOX + icon_base = 'mods/species/vox/icons/body/soldier/body.dmi' + icon_deformed = 'mods/species/vox/icons/body/deformed_body.dmi' + husk_icon = 'mods/species/vox/icons/body/husk.dmi' + blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi' + eye_icon = 'mods/species/vox/icons/body/soldier/eyes.dmi' + bodytype_flag = BODY_FLAG_VOX + limb_blend = ICON_MULTIPLY + eye_blend = ICON_MULTIPLY + appearance_flags = HAS_EYE_COLOR | HAS_SKIN_COLOR + base_eye_color = "#d60093" + base_color = "#526d29" + body_flags = BODY_FLAG_NO_DNA + + + cold_level_1 = 80 + cold_level_2 = 50 + cold_level_3 = -1 + + vital_organs = list( BP_STACK, BP_BRAIN ) @@ -23,36 +27,41 @@ BP_GROIN = /obj/item/organ/external/groin/vox, BP_TAIL = /obj/item/organ/external/tail/vox ) - has_organ = list( - BP_STOMACH = /obj/item/organ/internal/stomach/vox, - BP_HEART = /obj/item/organ/internal/heart/vox, - BP_LUNGS = /obj/item/organ/internal/lungs/vox, - BP_LIVER = /obj/item/organ/internal/liver/vox, - BP_KIDNEYS = /obj/item/organ/internal/kidneys/vox, - BP_BRAIN = /obj/item/organ/internal/brain, - BP_EYES = /obj/item/organ/internal/eyes/vox, - BP_STACK = /obj/item/organ/internal/voxstack, + has_organ = list( + BP_STOMACH = /obj/item/organ/internal/stomach/vox, + BP_HEART = /obj/item/organ/internal/heart/vox, + BP_LUNGS = /obj/item/organ/internal/lungs/vox, + BP_LIVER = /obj/item/organ/internal/liver/vox, + BP_KIDNEYS = /obj/item/organ/internal/kidneys/vox, + BP_BRAIN = /obj/item/organ/internal/brain, + BP_EYES = /obj/item/organ/internal/eyes/vox, + BP_STACK = /obj/item/organ/internal/voxstack, BP_HINDTONGUE = /obj/item/organ/internal/hindtongue ) - base_markings = list( - /decl/sprite_accessory/marking/vox/beak = "#bc7d3e", - /decl/sprite_accessory/marking/vox/scutes = "#bc7d3e", - /decl/sprite_accessory/marking/vox/crest = "#bc7d3e", - /decl/sprite_accessory/marking/vox/claws = "#a0a654" + default_sprite_accessories = list( + SAC_HAIR = list( + /decl/sprite_accessory/hair/vox/short = "#160900" + ), + SAC_MARKINGS = list( + /decl/sprite_accessory/marking/vox/beak = "#bc7d3e", + /decl/sprite_accessory/marking/vox/scutes = "#bc7d3e", + /decl/sprite_accessory/marking/vox/crest = "#bc7d3e", + /decl/sprite_accessory/marking/vox/claws = "#a0a654" + ) ) /decl/bodytype/vox/Initialize() if(!length(equip_adjust)) equip_adjust = list( - BP_L_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)), - BP_R_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)), - slot_head_str = list("[NORTH]" = list(0, -2), "[EAST]" = list(3, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list(-3, -2)), - slot_wear_mask_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(4, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-4, 0)), - slot_wear_suit_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), - slot_w_uniform_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), + BP_L_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)), + BP_R_HAND = list("[NORTH]" = list(0, -2), "[EAST]" = list(0, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list( 0, -2)), + slot_head_str = list("[NORTH]" = list(0, -2), "[EAST]" = list(3, -2), "[SOUTH]" = list( 0, -2), "[WEST]" = list(-3, -2)), + slot_wear_mask_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(4, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-4, 0)), + slot_wear_suit_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), + slot_w_uniform_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), slot_underpants_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), slot_undershirt_str = list("[NORTH]" = list(0, -1), "[EAST]" = list(0, -1), "[SOUTH]" = list( 0, -1), "[WEST]" = list( 0, -1)), - slot_back_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(3, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-3, 0)) + slot_back_str = list("[NORTH]" = list(0, 0), "[EAST]" = list(3, 0), "[SOUTH]" = list( 0, 0), "[WEST]" = list(-3, 0)) ) return ..() @@ -64,13 +73,19 @@ husk_icon = 'mods/species/vox/icons/body/husk.dmi' blood_overlays = 'mods/species/vox/icons/body/blood_overlays.dmi' eye_icon = 'mods/species/vox/icons/body/servitor/eyes.dmi' - base_markings = list( - /decl/sprite_accessory/marking/vox/beak/servitor = "#bc7d3e", - /decl/sprite_accessory/marking/vox/scutes/servitor = "#bc7d3e", - /decl/sprite_accessory/marking/vox/crest/servitor = "#bc7d3e", - /decl/sprite_accessory/marking/vox/claws/servitor = "#a0a654" + + default_sprite_accessories = list( + SAC_HAIR = list( + /decl/sprite_accessory/hair/vox/short/servitor = "#160900" + ), + SAC_MARKINGS = list( + /decl/sprite_accessory/marking/vox/beak/servitor = "#bc7d3e", + /decl/sprite_accessory/marking/vox/scutes/servitor = "#bc7d3e", + /decl/sprite_accessory/marking/vox/crest/servitor = "#bc7d3e", + /decl/sprite_accessory/marking/vox/claws/servitor = "#a0a654" + ) ) - default_h_style = /decl/sprite_accessory/hair/vox/short/servitor + override_limb_types = list( BP_GROIN = /obj/item/organ/external/groin/vox, BP_TAIL = /obj/item/organ/external/tail/vox/servitor @@ -84,20 +99,24 @@ icon_base = 'mods/species/vox/icons/body/stanchion/body.dmi' eye_icon = 'mods/species/vox/icons/body/stanchion/eyes.dmi' icon_template = 'mods/species/vox/icons/body/stanchion/template.dmi' - base_markings = list( - /decl/sprite_accessory/marking/vox/beak/stanchion = "#bc7d3e", - /decl/sprite_accessory/marking/vox/scutes/stanchion = "#bc7d3e", - /decl/sprite_accessory/marking/vox/crest/stanchion = "#bc7d3e", - /decl/sprite_accessory/marking/vox/claws/stanchion = "#a0a654" + default_sprite_accessories = list( + SAC_HAIR = list( + /decl/sprite_accessory/hair/vox/short/stanchion = "#160900" + ), + SAC_MARKINGS = list( + /decl/sprite_accessory/marking/vox/beak/stanchion = "#bc7d3e", + /decl/sprite_accessory/marking/vox/scutes/stanchion = "#bc7d3e", + /decl/sprite_accessory/marking/vox/crest/stanchion = "#bc7d3e", + /decl/sprite_accessory/marking/vox/claws/stanchion = "#a0a654" + ) ) - default_h_style = /decl/sprite_accessory/hair/vox/short/stanchion + override_limb_types = list( BP_GROIN = /obj/item/organ/external/groin/vox, // Commenting this out so that tail validation doesn't try to find a species using this bodytype. //BP_TAIL = /obj/item/organ/external/tail/vox/stanchion ) - /decl/bodytype/vox/servitor/alchemist name = "alchemist voxform" icon_base = 'mods/species/vox/icons/body/servitor/body_alchemist.dmi' diff --git a/mods/species/vox/gear/gear_head.dm b/mods/species/vox/gear/gear_head.dm index dfc721177ac..24d6676478f 100644 --- a/mods/species/vox/gear/gear_head.dm +++ b/mods/species/vox/gear/gear_head.dm @@ -7,7 +7,6 @@ name = "alien helmet" icon = 'mods/species/vox/icons/clothing/pressure_helmet.dmi' desc = "A huge, armoured, pressurized helmet. Looks like an ancient human diving suit." - light_overlay = "invis_light" armor = list( ARMOR_MELEE = ARMOR_MELEE_MAJOR, ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL, @@ -29,7 +28,7 @@ color = "#486e6e" var/lights_color = "#00ffff" -/obj/item/clothing/head/helmet/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/clothing/head/helmet/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && lights_color && check_state_in_icon("[overlay.icon_state]-lights", overlay.icon)) var/image/I = emissive_overlay(overlay.icon, "[overlay.icon_state]-lights") I.color = lights_color diff --git a/mods/species/vox/gear/gear_rig.dm b/mods/species/vox/gear/gear_rig.dm index 3dbda19ed42..ece9bb71760 100644 --- a/mods/species/vox/gear/gear_rig.dm +++ b/mods/species/vox/gear/gear_rig.dm @@ -31,7 +31,7 @@ /obj/item/radio, /obj/item/baton, /obj/item/gun, - /obj/item/pickaxe + /obj/item/tool ) online_slowdown = 1 diff --git a/mods/species/vox/gear/gear_suit.dm b/mods/species/vox/gear/gear_suit.dm index c38932355dd..99856c36fad 100644 --- a/mods/species/vox/gear/gear_suit.dm +++ b/mods/species/vox/gear/gear_suit.dm @@ -27,7 +27,7 @@ ARMOR_RAD = ARMOR_RAD_MINOR ) siemens_coefficient = 0.6 - heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + heat_protection = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS|SLOT_TAIL max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE bodytype_equip_flags = BODY_FLAG_VOX flags_inv = (HIDEJUMPSUIT|HIDETAIL) @@ -43,7 +43,7 @@ desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." var/lights_color = "#00ffff" -/obj/item/clothing/suit/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart) +/obj/item/clothing/suit/space/vox/carapace/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && lights_color && check_state_in_icon("[overlay.icon_state]-lights", overlay.icon)) var/image/I = emissive_overlay(overlay.icon, "[overlay.icon_state]-lights") I.color = lights_color @@ -79,6 +79,6 @@ ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL, ARMOR_LASER = ARMOR_LASER_MINOR, ARMOR_BOMB = ARMOR_BOMB_PADDED) //Higher melee armor versus lower everything else. - body_parts_covered = SLOT_UPPER_BODY|SLOT_ARMS|SLOT_LOWER_BODY|SLOT_LEGS + body_parts_covered = SLOT_UPPER_BODY|SLOT_ARMS|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_TAIL bodytype_equip_flags = BODY_FLAG_VOX siemens_coefficient = 1 //Its literally metal diff --git a/mods/species/vox/gear/gear_under.dm b/mods/species/vox/gear/gear_under.dm index 9b8c01a7779..6e7dd0fbd02 100644 --- a/mods/species/vox/gear/gear_under.dm +++ b/mods/species/vox/gear/gear_under.dm @@ -1,5 +1,4 @@ /obj/item/clothing/under/vox - has_sensor = SUIT_NO_SENSORS bodytype_equip_flags = BODY_FLAG_VOX /obj/item/clothing/under/vox/vox_casual diff --git a/mods/species/vox/icons/body/deformed_body.dmi b/mods/species/vox/icons/body/deformed_body.dmi index 72ff01c5ddf..9ca8a674c32 100644 Binary files a/mods/species/vox/icons/body/deformed_body.dmi and b/mods/species/vox/icons/body/deformed_body.dmi differ diff --git a/mods/species/vox/icons/body/servitor/body.dmi b/mods/species/vox/icons/body/servitor/body.dmi index 89bbb5844cc..0f1bb1a908d 100644 Binary files a/mods/species/vox/icons/body/servitor/body.dmi and b/mods/species/vox/icons/body/servitor/body.dmi differ diff --git a/mods/species/vox/icons/body/servitor/body_alchemist.dmi b/mods/species/vox/icons/body/servitor/body_alchemist.dmi index 2194239487d..f9f598fd3ca 100644 Binary files a/mods/species/vox/icons/body/servitor/body_alchemist.dmi and b/mods/species/vox/icons/body/servitor/body_alchemist.dmi differ diff --git a/mods/species/vox/icons/body/servitor/hair.dmi b/mods/species/vox/icons/body/servitor/hair.dmi index f4e1011e013..999649b10e1 100644 Binary files a/mods/species/vox/icons/body/servitor/hair.dmi and b/mods/species/vox/icons/body/servitor/hair.dmi differ diff --git a/mods/species/vox/icons/body/soldier/body.dmi b/mods/species/vox/icons/body/soldier/body.dmi index 85206c01a24..c7b880715f3 100644 Binary files a/mods/species/vox/icons/body/soldier/body.dmi and b/mods/species/vox/icons/body/soldier/body.dmi differ diff --git a/mods/species/vox/icons/body/soldier/hair.dmi b/mods/species/vox/icons/body/soldier/hair.dmi index 4316e8e33fb..7149c366b5c 100644 Binary files a/mods/species/vox/icons/body/soldier/hair.dmi and b/mods/species/vox/icons/body/soldier/hair.dmi differ diff --git a/mods/species/vox/icons/body/stanchion/body.dmi b/mods/species/vox/icons/body/stanchion/body.dmi index a650f98a601..b5c1f313fbe 100644 Binary files a/mods/species/vox/icons/body/stanchion/body.dmi and b/mods/species/vox/icons/body/stanchion/body.dmi differ diff --git a/mods/species/vox/icons/body/stanchion/damage_overlays.dmi b/mods/species/vox/icons/body/stanchion/damage_overlays.dmi index 190655c09cf..af035589c06 100644 Binary files a/mods/species/vox/icons/body/stanchion/damage_overlays.dmi and b/mods/species/vox/icons/body/stanchion/damage_overlays.dmi differ diff --git a/mods/species/vox/icons/body/stanchion/hair.dmi b/mods/species/vox/icons/body/stanchion/hair.dmi index d0f4f126680..cdbf92bc78f 100644 Binary files a/mods/species/vox/icons/body/stanchion/hair.dmi and b/mods/species/vox/icons/body/stanchion/hair.dmi differ diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm index e10f20995ee..2bf227aec78 100644 --- a/mods/species/vox/organs_vox.dm +++ b/mods/species/vox/organs_vox.dm @@ -63,6 +63,7 @@ /decl/material/solid/metal/copper = TRUE, /decl/material/solid/metal/aluminium = TRUE, /decl/material/solid/sand = TRUE, + /decl/material/solid/clay = TRUE, /decl/material/solid/graphite = TRUE, /decl/material/solid/pitchblende = TRUE, /decl/material/solid/hematite = TRUE, @@ -154,10 +155,10 @@ icon_state = "cortical-stack" organ_tag = BP_STACK organ_properties = ORGAN_PROP_PROSTHETIC - origin_tech = @"{'biotech':4,'materials':4,'magnets':2,'programming':3}" + origin_tech = @'{"biotech":4,"materials":4,"magnets":2,"programming":3}' relative_size = 10 - var/ownerckey + var/stored_ckey var/default_language var/list/languages = list() var/datum/mind/backup @@ -165,7 +166,7 @@ /obj/item/organ/internal/voxstack/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) var/decl/species/dna_species = given_dna && get_species_by_key(given_dna.species) - . = ..(mapload, material_key, given_dna, dna_species?.base_prosthetics_model) + . = ..(mapload, material_key, given_dna, dna_species?.base_internal_prosthetics_model) do_backup() /obj/item/organ/internal/voxstack/examine(mob/user) @@ -173,7 +174,7 @@ var/user_vox = isspecies(user, SPECIES_VOX) if (istype(backup)) - var/owner_viable = find_dead_player(ownerckey, TRUE) + var/owner_viable = find_dead_player(stored_ckey, TRUE) if (user_vox) to_chat(user, SPAN_NOTICE("The integrity light on [src] blinks [owner_viable ? "rapidly. It can be implanted." : "slowly. It is dormant."]")) else @@ -193,15 +194,15 @@ backup = owner.mind default_language = owner.default_language if(owner.ckey) - ownerckey = owner.ckey + stored_ckey = owner.ckey /obj/item/organ/internal/voxstack/proc/backup_inviable() return (!istype(backup) || backup == owner.mind || (backup.current && backup.current.stat != DEAD)) /obj/item/organ/internal/voxstack/on_add_effects() - if(!..() || prompting) // Don't spam the player with twenty dialogs because someone doesn't know what they're doing or panicking. + . = ..() + if(prompting) // Don't spam the player with twenty dialogs because someone doesn't know what they're doing or panicking. return FALSE - //Need spawn here so that this interactive bit doesn't lock up init if(owner && !backup_inviable()) prompt_revive_callback(owner) @@ -211,7 +212,7 @@ set waitfor = FALSE if(C && !backup_inviable()) prompting = TRUE - var/response = alert(find_dead_player(ownerckey, 1), "Your neural backup has been placed into a new body. Do you wish to return to life as the mind of [backup.name]?", "Resleeving", "Yes", "No") + var/response = alert(find_dead_player(stored_ckey, 1), "Your neural backup has been placed into a new body. Do you wish to return to life as the mind of [backup.name]?", "Resleeving", "Yes", "No") prompting = FALSE if(src && response == "Yes" && owner == C) overwrite() diff --git a/nano/images/ministation/ministation-1.png b/nano/images/ministation/ministation-1.png index d6e7e854ae2..70fcdc99765 100644 Binary files a/nano/images/ministation/ministation-1.png and b/nano/images/ministation/ministation-1.png differ diff --git a/nano/images/ministation/ministation-2.png b/nano/images/ministation/ministation-2.png new file mode 100644 index 00000000000..9e33b0d8c85 Binary files /dev/null and b/nano/images/ministation/ministation-2.png differ diff --git a/nano/images/ministation/ministation-3.png b/nano/images/ministation/ministation-3.png new file mode 100644 index 00000000000..a2d90b864f0 Binary files /dev/null and b/nano/images/ministation/ministation-3.png differ diff --git a/nano/images/ministation/ministation-4.png b/nano/images/ministation/ministation-4.png new file mode 100644 index 00000000000..be5b779985e Binary files /dev/null and b/nano/images/ministation/ministation-4.png differ diff --git a/nano/templates/computer_fabricator.tmpl b/nano/templates/computer_fabricator.tmpl index ca5e4c0769f..d8bfb558b7c 100644 --- a/nano/templates/computer_fabricator.tmpl +++ b/nano/templates/computer_fabricator.tmpl @@ -66,7 +66,7 @@ {{else data.state == 2}}

    Step 3: Payment

    - Your device is now ready for fabrication..
    + Your device is now ready for fabrication.
    Please swipe your identification card to finish purchase.
    Total price: {{:data.totalprice}} {{else data.state == 3}} diff --git a/nebula.dme b/nebula.dme index 79a1f1a803a..40a5a15b65d 100644 --- a/nebula.dme +++ b/nebula.dme @@ -17,6 +17,7 @@ #include "code\world.dm" #include "code\__datastructures\priority_queue.dm" #include "code\__datastructures\stack.dm" +#include "code\__defines\_byond_version_compat.dm" #include "code\__defines\_compile_helpers.dm" #include "code\__defines\_compile_options.dm" #include "code\__defines\_planes+layers.dm" @@ -25,17 +26,21 @@ #include "code\__defines\ao.dm" #include "code\__defines\ao_misc.dm" #include "code\__defines\appearance.dm" +#include "code\__defines\area_saving.dm" #include "code\__defines\armor.dm" #include "code\__defines\aspects.dm" #include "code\__defines\atmos.dm" #include "code\__defines\atmospherics.dm" #include "code\__defines\bodytype.dm" #include "code\__defines\callback.dm" +#include "code\__defines\chargen.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\client.dm" #include "code\__defines\colors.dm" #include "code\__defines\computers.dm" +#include "code\__defines\credits.dm" #include "code\__defines\culture.dm" +#include "code\__defines\damage.dm" #include "code\__defines\damage_organs.dm" #include "code\__defines\definition_helpers.dm" #include "code\__defines\deity.dm" @@ -49,6 +54,7 @@ #include "code\__defines\gamemode.dm" #include "code\__defines\guns.dm" #include "code\__defines\holomap.dm" +#include "code\__defines\hud.dm" #include "code\__defines\hydroponics.dm" #include "code\__defines\integrated_circuits.dm" #include "code\__defines\interactions.dm" @@ -58,6 +64,7 @@ #include "code\__defines\languages.dm" #include "code\__defines\level_data.dm" #include "code\__defines\lighting.dm" +#include "code\__defines\limbo.dm" #include "code\__defines\lists.dm" #include "code\__defines\machinery.dm" #include "code\__defines\mapping.dm" @@ -65,6 +72,7 @@ #include "code\__defines\math_physics.dm" #include "code\__defines\maths.dm" #include "code\__defines\MC.dm" +#include "code\__defines\mech.dm" #include "code\__defines\misc.dm" #include "code\__defines\mob_status.dm" #include "code\__defines\mobs.dm" @@ -73,12 +81,16 @@ #include "code\__defines\organs.dm" #include "code\__defines\overmap.dm" #include "code\__defines\paperwork.dm" +#include "code\__defines\persistent_id.dm" #include "code\__defines\power.dm" #include "code\__defines\proc_presets.dm" #include "code\__defines\qdel.dm" #include "code\__defines\radio.dm" +#include "code\__defines\reactions.dm" #include "code\__defines\research.dm" -#include "code\__defines\ruin_tags.dm" +#include "code\__defines\saved_var.dm" +#include "code\__defines\seed_saving_helper.dm" +#include "code\__defines\serializer.dm" #include "code\__defines\shields.dm" #include "code\__defines\shuttle.dm" #include "code\__defines\skills.dm" @@ -88,16 +100,19 @@ #include "code\__defines\species.dm" #include "code\__defines\status.dm" #include "code\__defines\stress.dm" +#include "code\__defines\structures.dm" #include "code\__defines\subsystem-priority.dm" #include "code\__defines\subsystems.dm" #include "code\__defines\targeting.dm" #include "code\__defines\temperature.dm" +#include "code\__defines\template_tags.dm" #include "code\__defines\time.dm" #include "code\__defines\tools.dm" #include "code\__defines\topic.dm" #include "code\__defines\turfs.dm" #include "code\__defines\unit_tests.dm" #include "code\__defines\webhooks.dm" +#include "code\__defines\world_save.dm" #include "code\__defines\xenoarcheaology.dm" #include "code\__defines\ZAS.dm" #include "code\__defines\zmimic.dm" @@ -107,6 +122,7 @@ #include "code\_global_vars\misc.dm" #include "code\_global_vars\mobs.dm" #include "code\_global_vars\sensitive.dm" +#include "code\_global_vars\serialization.dm" #include "code\_global_vars\sound.dm" #include "code\_global_vars\lists\clothing.dm" #include "code\_global_vars\lists\flavor.dm" @@ -148,7 +164,6 @@ #include "code\_helpers\unsorted.dm" #include "code\_helpers\vector.dm" #include "code\_helpers\view.dm" -#include "code\_helpers\vis_contents.dm" #include "code\_helpers\visual_filters.dm" #include "code\_helpers\washing.dm" #include "code\_helpers\sorts\__main.dm" @@ -165,16 +180,13 @@ #include "code\_onclick\other_mobs.dm" #include "code\_onclick\rig.dm" #include "code\_onclick\hud\_defines.dm" -#include "code\_onclick\hud\ability_screen_objects.dm" #include "code\_onclick\hud\action.dm" #include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\ai_hud.dm" -#include "code\_onclick\hud\ai_screen_objects.dm" #include "code\_onclick\hud\animal.dm" #include "code\_onclick\hud\deity.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\global_hud.dm" -#include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\human.dm" #include "code\_onclick\hud\other_mobs.dm" @@ -182,12 +194,55 @@ #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\radial_persistent.dm" #include "code\_onclick\hud\robot.dm" -#include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\skybox.dm" +#include "code\_onclick\hud\screen\_screen.dm" +#include "code\_onclick\hud\screen\screen_abilities.dm" +#include "code\_onclick\hud\screen\screen_action_button.dm" +#include "code\_onclick\hud\screen\screen_ai_button.dm" +#include "code\_onclick\hud\screen\screen_attack_selector.dm" +#include "code\_onclick\hud\screen\screen_cataloguer.dm" +#include "code\_onclick\hud\screen\screen_cinematic.dm" +#include "code\_onclick\hud\screen\screen_click_catcher.dm" +#include "code\_onclick\hud\screen\screen_constructs.dm" +#include "code\_onclick\hud\screen\screen_credits.dm" +#include "code\_onclick\hud\screen\screen_drop.dm" +#include "code\_onclick\hud\screen\screen_equip.dm" +#include "code\_onclick\hud\screen\screen_exosuit.dm" +#include "code\_onclick\hud\screen\screen_fullscreen.dm" +#include "code\_onclick\hud\screen\screen_global_hud.dm" +#include "code\_onclick\hud\screen\screen_gun.dm" +#include "code\_onclick\hud\screen\screen_holomap.dm" +#include "code\_onclick\hud\screen\screen_intent.dm" +#include "code\_onclick\hud\screen\screen_internal.dm" +#include "code\_onclick\hud\screen\screen_inventory.dm" +#include "code\_onclick\hud\screen\screen_lighting.dm" +#include "code\_onclick\hud\screen\screen_maneuver.dm" +#include "code\_onclick\hud\screen\screen_module.dm" +#include "code\_onclick\hud\screen\screen_movement.dm" +#include "code\_onclick\hud\screen\screen_needs.dm" +#include "code\_onclick\hud\screen\screen_pai.dm" +#include "code\_onclick\hud\screen\screen_radial.dm" +#include "code\_onclick\hud\screen\screen_resist.dm" +#include "code\_onclick\hud\screen\screen_robot_drop_grab.dm" +#include "code\_onclick\hud\screen\screen_robot_intent.dm" +#include "code\_onclick\hud\screen\screen_robot_inventory.dm" +#include "code\_onclick\hud\screen\screen_robot_modules.dm" +#include "code\_onclick\hud\screen\screen_robot_panel.dm" +#include "code\_onclick\hud\screen\screen_robot_radio.dm" +#include "code\_onclick\hud\screen\screen_robot_store.dm" +#include "code\_onclick\hud\screen\screen_robot_warnings.dm" +#include "code\_onclick\hud\screen\screen_setup.dm" +#include "code\_onclick\hud\screen\screen_stamina.dm" +#include "code\_onclick\hud\screen\screen_storage.dm" +#include "code\_onclick\hud\screen\screen_swaphands.dm" +#include "code\_onclick\hud\screen\screen_throw.dm" +#include "code\_onclick\hud\screen\screen_toggle.dm" +#include "code\_onclick\hud\screen\screen_up_hint.dm" +#include "code\_onclick\hud\screen\screen_warnings.dm" +#include "code\_onclick\hud\screen\screen_zone_selector.dm" #include "code\controllers\admin.dm" #include "code\controllers\autotransfer.dm" #include "code\controllers\communications.dm" -#include "code\controllers\configuration.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" #include "code\controllers\hooks-defs.dm" @@ -210,7 +265,9 @@ #include "code\controllers\subsystems\ambience.dm" #include "code\controllers\subsystems\ao.dm" #include "code\controllers\subsystems\atoms.dm" +#include "code\controllers\subsystems\autosave.dm" #include "code\controllers\subsystems\circuit_component.dm" +#include "code\controllers\subsystems\configuration.dm" #include "code\controllers\subsystems\daycycle.dm" #include "code\controllers\subsystems\disposals.dm" #include "code\controllers\subsystems\evac.dm" @@ -231,6 +288,7 @@ #include "code\controllers\subsystems\mapping.dm" #include "code\controllers\subsystems\misc_late.dm" #include "code\controllers\subsystems\overlays.dm" +#include "code\controllers\subsystems\persistence.dm" #include "code\controllers\subsystems\plants.dm" #include "code\controllers\subsystems\radiation.dm" #include "code\controllers\subsystems\shuttle.dm" @@ -244,11 +302,13 @@ #include "code\controllers\subsystems\timer.dm" #include "code\controllers\subsystems\trade.dm" #include "code\controllers\subsystems\typing.dm" +#include "code\controllers\subsystems\vis_contents.dm" #include "code\controllers\subsystems\vote.dm" #include "code\controllers\subsystems\weather.dm" #include "code\controllers\subsystems\xenoarch.dm" #include "code\controllers\subsystems\zcopy.dm" #include "code\controllers\subsystems\initialization\aspects.dm" +#include "code\controllers\subsystems\initialization\character_info.dm" #include "code\controllers\subsystems\initialization\character_setup.dm" #include "code\controllers\subsystems\initialization\codex.dm" #include "code\controllers\subsystems\initialization\computer_networks.dm" @@ -262,6 +322,10 @@ #include "code\controllers\subsystems\initialization\robots.dm" #include "code\controllers\subsystems\initialization\secrets.dm" #include "code\controllers\subsystems\initialization\webhooks.dm" +#include "code\controllers\subsystems\persistence\persistence_loading.dm" +#include "code\controllers\subsystems\persistence\persistence_saving.dm" +#include "code\controllers\subsystems\persistence\persistence_stats.dm" +#include "code\controllers\subsystems\persistence\persistence_storage.dm" #include "code\controllers\subsystems\processing\ai.dm" #include "code\controllers\subsystems\processing\airflow.dm" #include "code\controllers\subsystems\processing\blob.dm" @@ -320,6 +384,30 @@ #include "code\datums\communication\~defines.dm" #include "code\datums\composite_sounds\_composite_sound.dm" #include "code\datums\composite_sounds\machinery_sounds.dm" +#include "code\datums\config\_config.dm" +#include "code\datums\config\_config_categories.dm" +#include "code\datums\config\config_enum.dm" +#include "code\datums\config\config_list.dm" +#include "code\datums\config\config_num.dm" +#include "code\datums\config\config_num_client.dm" +#include "code\datums\config\config_text.dm" +#include "code\datums\config\config_toggle.dm" +#include "code\datums\config\config_toggle_on.dm" +#include "code\datums\config\config_types\config_admin.dm" +#include "code\datums\config\config_types\config_client.dm" +#include "code\datums\config\config_types\config_debug.dm" +#include "code\datums\config\config_types\config_events.dm" +#include "code\datums\config\config_types\config_game_economy.dm" +#include "code\datums\config\config_types\config_game_option.dm" +#include "code\datums\config\config_types\config_game_world.dm" +#include "code\datums\config\config_types\config_health.dm" +#include "code\datums\config\config_types\config_logging.dm" +#include "code\datums\config\config_types\config_mode.dm" +#include "code\datums\config\config_types\config_persistence.dm" +#include "code\datums\config\config_types\config_protected.dm" +#include "code\datums\config\config_types\config_resources.dm" +#include "code\datums\config\config_types\config_server.dm" +#include "code\datums\config\config_types\config_voting.dm" #include "code\datums\extensions\_defines.dm" #include "code\datums\extensions\access_provider.dm" #include "code\datums\extensions\deity_be_near.dm" @@ -335,6 +423,10 @@ #include "code\datums\extensions\penetration.dm" #include "code\datums\extensions\radio_provider.dm" #include "code\datums\extensions\state_machine.dm" +#include "code\datums\extensions\abilities\abilities.dm" +#include "code\datums\extensions\abilities\abilities_mob.dm" +#include "code\datums\extensions\abilities\ability_handler.dm" +#include "code\datums\extensions\abilities\ability_item.dm" #include "code\datums\extensions\appearance\appearance.dm" #include "code\datums\extensions\appearance\base_icon_state.dm" #include "code\datums\extensions\appearance\cardborg.dm" @@ -346,6 +438,10 @@ #include "code\datums\extensions\assembly\assembly_damage.dm" #include "code\datums\extensions\assembly\assembly_interaction.dm" #include "code\datums\extensions\assembly\assembly_power.dm" +#include "code\datums\extensions\cell\cell.dm" +#include "code\datums\extensions\cell\cell_panel.dm" +#include "code\datums\extensions\cell\cell_secured.dm" +#include "code\datums\extensions\cell\cell_unremovable.dm" #include "code\datums\extensions\eye\_eye.dm" #include "code\datums\extensions\eye\blueprints.dm" #include "code\datums\extensions\eye\freelook.dm" @@ -374,6 +470,7 @@ #include "code\datums\hostility\hostility.dm" #include "code\datums\inventory_slots\_inventory_slot.dm" #include "code\datums\inventory_slots\inventory_gripper.dm" +#include "code\datums\inventory_slots\inventory_gripper_subtypes.dm" #include "code\datums\inventory_slots\slots\slot_back.dm" #include "code\datums\inventory_slots\slots\slot_belt.dm" #include "code\datums\inventory_slots\slots\slot_cuffs.dm" @@ -450,6 +547,7 @@ #include "code\datums\observation\name_set.dm" #include "code\datums\observation\observation.dm" #include "code\datums\observation\opacity_set.dm" +#include "code\datums\observation\saving.dm" #include "code\datums\observation\see_in_dark_set.dm" #include "code\datums\observation\see_invisible_set.dm" #include "code\datums\observation\set_invisibility.dm" @@ -589,6 +687,7 @@ #include "code\datums\wires\vending.dm" #include "code\datums\wires\wire_description.dm" #include "code\datums\wires\wires.dm" +#include "code\game\alpha_masks.dm" #include "code\game\atoms.dm" #include "code\game\atoms_fluids.dm" #include "code\game\atoms_init.dm" @@ -820,7 +919,6 @@ #include "code\game\machinery\_machines_base\stock_parts\radio\stock_parts_radio.dm" #include "code\game\machinery\_machines_base\stock_parts\radio\transmitter.dm" #include "code\game\machinery\atmoalter\_atmos_connection.dm" -#include "code\game\machinery\atmoalter\area_atmos_computer.dm" #include "code\game\machinery\atmoalter\canister.dm" #include "code\game\machinery\atmoalter\meter.dm" #include "code\game\machinery\atmoalter\portable_atmospherics.dm" @@ -834,9 +932,10 @@ #include "code\game\machinery\computer\ai_core.dm" #include "code\game\machinery\computer\arcade.dm" #include "code\game\machinery\computer\arcade_orion.dm" +#include "code\game\machinery\computer\area_atmos.dm" #include "code\game\machinery\computer\atmos_alert.dm" -#include "code\game\machinery\computer\atmos_control.dm" #include "code\game\machinery\computer\buildandrepair.dm" +#include "code\game\machinery\computer\central_atmos.dm" #include "code\game\machinery\computer\computer.dm" #include "code\game\machinery\computer\guestpass.dm" #include "code\game\machinery\computer\law.dm" @@ -906,9 +1005,13 @@ #include "code\game\objects\item_damage.dm" #include "code\game\objects\item_interactions.dm" #include "code\game\objects\item_materials.dm" +#include "code\game\objects\item_melting.dm" #include "code\game\objects\item_mob_overlay.dm" #include "code\game\objects\munition.dm" +#include "code\game\objects\obj_edibility.dm" #include "code\game\objects\objs.dm" +#include "code\game\objects\objs_damage.dm" +#include "code\game\objects\objs_interactions.dm" #include "code\game\objects\topic.dm" #include "code\game\objects\auras\aura.dm" #include "code\game\objects\auras\blueforge_aura.dm" @@ -924,12 +1027,12 @@ #include "code\game\objects\effects\_effect.dm" #include "code\game\objects\effects\bump_teleporter.dm" #include "code\game\objects\effects\cig_smoke.dm" +#include "code\game\objects\effects\dirty_floor.dm" #include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\explosion_particles.dm" #include "code\game\objects\effects\fake_fire.dm" -#include "code\game\objects\effects\fluids.dm" #include "code\game\objects\effects\force_portal.dm" -#include "code\game\objects\effects\gibs.dm" +#include "code\game\objects\effects\gibspawner.dm" #include "code\game\objects\effects\item_pickup_ghost.dm" #include "code\game\objects\effects\landmarks.dm" #include "code\game\objects\effects\landmarks_endgame.dm" @@ -943,6 +1046,7 @@ #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\temporaray.dm" #include "code\game\objects\effects\temporary_effect.dm" +#include "code\game\objects\effects\wet_floor.dm" #include "code\game\objects\effects\wormhole.dm" #include "code\game\objects\effects\chem\chemsmoke.dm" #include "code\game\objects\effects\chem\foam.dm" @@ -952,7 +1056,6 @@ #include "code\game\objects\effects\decals\decal.dm" #include "code\game\objects\effects\decals\misc.dm" #include "code\game\objects\effects\decals\warning_stripes.dm" -#include "code\game\objects\effects\decals\Cleanable\aliens.dm" #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" @@ -979,6 +1082,7 @@ #include "code\game\objects\items\glassjar.dm" #include "code\game\objects\items\holosign_creator.dm" #include "code\game\objects\items\instruments.dm" +#include "code\game\objects\items\item_edibility.dm" #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\paintkit.dm" #include "code\game\objects\items\paper_fortune_teller.dm" @@ -988,18 +1092,30 @@ #include "code\game\objects\items\plushies.dm" #include "code\game\objects\items\remains.dm" #include "code\game\objects\items\rescuebag.dm" +#include "code\game\objects\items\rock.dm" #include "code\game\objects\items\shooting_range.dm" +#include "code\game\objects\items\silencer.dm" #include "code\game\objects\items\spirit_board.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\umbrella.dm" #include "code\game\objects\items\books\_book.dm" -#include "code\game\objects\items\books\skill_book.dm" +#include "code\game\objects\items\books\fluff\_fluff.dm" +#include "code\game\objects\items\books\fluff\science.dm" #include "code\game\objects\items\books\manuals\_manual.dm" #include "code\game\objects\items\books\manuals\engineering.dm" #include "code\game\objects\items\books\manuals\manuals.dm" #include "code\game\objects\items\books\manuals\medical.dm" #include "code\game\objects\items\books\manuals\science.dm" +#include "code\game\objects\items\books\skill\_skill.dm" +#include "code\game\objects\items\books\skill\_skill_custom.dm" +#include "code\game\objects\items\books\skill\engineering.dm" +#include "code\game\objects\items\books\skill\general.dm" +#include "code\game\objects\items\books\skill\medical.dm" +#include "code\game\objects\items\books\skill\organizational.dm" +#include "code\game\objects\items\books\skill\research.dm" +#include "code\game\objects\items\books\skill\security.dm" +#include "code\game\objects\items\books\skill\service.dm" #include "code\game\objects\items\devices\aicard.dm" #include "code\game\objects\items\devices\auto_cpr.dm" #include "code\game\objects\items\devices\binoculars.dm" @@ -1078,7 +1194,6 @@ #include "code\game\objects\items\stacks\stack.dm" #include "code\game\objects\items\stacks\telecrystal.dm" #include "code\game\objects\items\stacks\tiles\tile_types.dm" -#include "code\game\objects\items\tools\power_tools.dm" #include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\autopsy.dm" #include "code\game\objects\items\weapons\balls.dm" @@ -1097,7 +1212,6 @@ #include "code\game\objects\items\weapons\flame.dm" #include "code\game\objects\items\weapons\flamethrower.dm" #include "code\game\objects\items\weapons\gift_wrappaper.dm" -#include "code\game\objects\items\weapons\hair_care.dm" #include "code\game\objects\items\weapons\handcuffs.dm" #include "code\game\objects\items\weapons\ironing_iron.dm" #include "code\game\objects\items\weapons\janitor_sign.dm" @@ -1220,7 +1334,6 @@ #include "code\game\objects\items\weapons\storage\bible.dm" #include "code\game\objects\items\weapons\storage\boxes.dm" #include "code\game\objects\items\weapons\storage\briefcase.dm" -#include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm" #include "code\game\objects\items\weapons\storage\internal.dm" #include "code\game\objects\items\weapons\storage\laundry_basket.dm" @@ -1239,6 +1352,14 @@ #include "code\game\objects\items\weapons\storage\uplink_kits.dm" #include "code\game\objects\items\weapons\storage\wall_mirror.dm" #include "code\game\objects\items\weapons\storage\wallets.dm" +#include "code\game\objects\items\weapons\storage\fancy\_fancy.dm" +#include "code\game\objects\items\weapons\storage\fancy\cigar.dm" +#include "code\game\objects\items\weapons\storage\fancy\cigarettes.dm" +#include "code\game\objects\items\weapons\storage\fancy\crackers.dm" +#include "code\game\objects\items\weapons\storage\fancy\crayons.dm" +#include "code\game\objects\items\weapons\storage\fancy\donutbox.dm" +#include "code\game\objects\items\weapons\storage\fancy\eggbox.dm" +#include "code\game\objects\items\weapons\storage\fancy\vials.dm" #include "code\game\objects\items\weapons\storage\storage_ui\default.dm" #include "code\game\objects\items\weapons\storage\storage_ui\storage_ui.dm" #include "code\game\objects\items\weapons\tanks\jetpack.dm" @@ -1297,6 +1418,7 @@ #include "code\game\objects\structures\fires.dm" #include "code\game\objects\structures\fishtanks.dm" #include "code\game\objects\structures\fitness.dm" +#include "code\game\objects\structures\flaps.dm" #include "code\game\objects\structures\fountain.dm" #include "code\game\objects\structures\fuel_port.dm" #include "code\game\objects\structures\girders.dm" @@ -1314,7 +1436,6 @@ #include "code\game\objects\structures\mop_bucket.dm" #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\pit.dm" -#include "code\game\objects\structures\plasticflaps.dm" #include "code\game\objects\structures\quicksand.dm" #include "code\game\objects\structures\racks.dm" #include "code\game\objects\structures\railing.dm" @@ -1385,18 +1506,28 @@ #include "code\game\objects\structures\signs\warning_signs.dm" #include "code\game\objects\structures\stool_bed_chair_nest_sofa\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest_sofa\chairs.dm" +#include "code\game\objects\structures\stool_bed_chair_nest_sofa\pew.dm" #include "code\game\objects\structures\stool_bed_chair_nest_sofa\sofa.dm" #include "code\game\objects\structures\stool_bed_chair_nest_sofa\stools.dm" #include "code\game\objects\structures\stool_bed_chair_nest_sofa\wheelchair.dm" -#include "code\game\turfs\simulated.dm" #include "code\game\turfs\turf.dm" #include "code\game\turfs\turf_ao.dm" #include "code\game\turfs\turf_changing.dm" +#include "code\game\turfs\turf_digging.dm" +#include "code\game\turfs\turf_effects.dm" #include "code\game\turfs\turf_enter.dm" #include "code\game\turfs\turf_flick_animations.dm" #include "code\game\turfs\turf_fluids.dm" +#include "code\game\turfs\turf_height.dm" +#include "code\game\turfs\turf_material.dm" #include "code\game\turfs\unsimulated.dm" #include "code\game\turfs\exterior\_exterior.dm" +#include "code\game\turfs\exterior\_exterior_digging.dm" +#include "code\game\turfs\exterior\_exterior_height.dm" +#include "code\game\turfs\exterior\_exterior_icon.dm" +#include "code\game\turfs\exterior\_exterior_wall.dm" +#include "code\game\turfs\exterior\_exterior_wall_subtypes.dm" +#include "code\game\turfs\exterior\_exterior_wall_xenoarch.dm" #include "code\game\turfs\exterior\exterior_barren.dm" #include "code\game\turfs\exterior\exterior_chlorine.dm" #include "code\game\turfs\exterior\exterior_concrete.dm" @@ -1404,26 +1535,25 @@ #include "code\game\turfs\exterior\exterior_grass.dm" #include "code\game\turfs\exterior\exterior_ice.dm" #include "code\game\turfs\exterior\exterior_lava.dm" +#include "code\game\turfs\exterior\exterior_material.dm" #include "code\game\turfs\exterior\exterior_mud.dm" #include "code\game\turfs\exterior\exterior_ocean.dm" +#include "code\game\turfs\exterior\exterior_path.dm" #include "code\game\turfs\exterior\exterior_rock.dm" #include "code\game\turfs\exterior\exterior_sand.dm" #include "code\game\turfs\exterior\exterior_seafloor.dm" #include "code\game\turfs\exterior\exterior_shrouded.dm" #include "code\game\turfs\exterior\exterior_sky.dm" -#include "code\game\turfs\exterior\exterior_tar.dm" -#include "code\game\turfs\exterior\exterior_wall.dm" -#include "code\game\turfs\exterior\exterior_wall_subtypes.dm" -#include "code\game\turfs\exterior\exterior_wall_xenoarch.dm" -#include "code\game\turfs\exterior\exterior_water.dm" #include "code\game\turfs\flooring\flooring.dm" #include "code\game\turfs\flooring\flooring_decals.dm" #include "code\game\turfs\flooring\flooring_premade.dm" #include "code\game\turfs\flooring\flooring_shuttle.dm" #include "code\game\turfs\initialization\init.dm" #include "code\game\turfs\initialization\maintenance.dm" +#include "code\game\turfs\simulated\__simulated.dm" +#include "code\game\turfs\simulated\_floor.dm" +#include "code\game\turfs\simulated\_wall.dm" #include "code\game\turfs\simulated\_wall_icon_cache.dm" -#include "code\game\turfs\simulated\floor.dm" #include "code\game\turfs\simulated\floor_acts.dm" #include "code\game\turfs\simulated\floor_attackby.dm" #include "code\game\turfs\simulated\floor_damage.dm" @@ -1431,10 +1561,12 @@ #include "code\game\turfs\simulated\floor_static.dm" #include "code\game\turfs\simulated\footsteps.dm" #include "code\game\turfs\simulated\wall_attacks.dm" +#include "code\game\turfs\simulated\wall_brick.dm" #include "code\game\turfs\simulated\wall_icon.dm" +#include "code\game\turfs\simulated\wall_log.dm" +#include "code\game\turfs\simulated\wall_material.dm" #include "code\game\turfs\simulated\wall_shuttle.dm" #include "code\game\turfs\simulated\wall_types.dm" -#include "code\game\turfs\simulated\walls.dm" #include "code\game\turfs\space\space.dm" #include "code\game\turfs\space\transit.dm" #include "code\game\turfs\unsimulated\beach.dm" @@ -1560,7 +1692,7 @@ #include "code\modules\alarm\fire_alarm.dm" #include "code\modules\alarm\motion_alarm.dm" #include "code\modules\alarm\power_alarm.dm" -#include "code\modules\aspects\aspects.dm" +#include "code\modules\aspects\_aspects.dm" #include "code\modules\aspects\aspects_amputations.dm" #include "code\modules\aspects\aspects_handicaps.dm" #include "code\modules\aspects\aspects_perks.dm" @@ -1610,6 +1742,7 @@ #include "code\modules\atmospherics\components\unary\vent_scrubber.dm" #include "code\modules\augment\active.dm" #include "code\modules\augment\augment.dm" +#include "code\modules\augment\helping_hands.dm" #include "code\modules\augment\simple.dm" #include "code\modules\augment\active\armblades.dm" #include "code\modules\augment\active\circuit.dm" @@ -1631,8 +1764,17 @@ #include "code\modules\awaymissions\pamphlet.dm" #include "code\modules\awaymissions\trigger.dm" #include "code\modules\blob\blob.dm" +#include "code\modules\blood\blood.dm" +#include "code\modules\blood\blood_types.dm" +#include "code\modules\blood\blood_types_subtypes.dm" +#include "code\modules\brain_interface\_brain_interface.dm" +#include "code\modules\brain_interface\interface_radio.dm" #include "code\modules\butchery\butchery.dm" #include "code\modules\butchery\remains.dm" +#include "code\modules\character_info\_character_info.dm" +#include "code\modules\character_info\_comment.dm" +#include "code\modules\character_info\character_info_interface.dm" +#include "code\modules\character_info\comment_mood.dm" #include "code\modules\chat_filter\_chat_filter.dm" #include "code\modules\chat_filter\_chat_filter_regex.dm" #include "code\modules\chat_filter\filter_banned_words.dm" @@ -1655,7 +1797,6 @@ #include "code\modules\client\preferences_spawnpoints.dm" #include "code\modules\client\preferences_storage.dm" #include "code\modules\client\preferences_toggle.dm" -#include "code\modules\client\ui_style.dm" #include "code\modules\client\preference_setup\_defines.dm" #include "code\modules\client\preference_setup\preference_setup.dm" #include "code\modules\client\preference_setup\antagonism\01_candidacy.dm" @@ -1694,11 +1835,17 @@ #include "code\modules\client\preference_setup\occupation\occupation.dm" #include "code\modules\client\preference_setup\occupation\skill_selection.dm" #include "code\modules\client\preference_setup\records\00_records.dm" -#include "code\modules\client\preference_setup\records\01_public_record.dm" -#include "code\modules\client\preference_setup\records\02_medical_record.dm" -#include "code\modules\client\preference_setup\records\03_security_record.dm" -#include "code\modules\client\preference_setup\records\04_general_record.dm" -#include "code\modules\client\preference_setup\records\05_memory.dm" +#include "code\modules\client\preference_setup\records\01_character_info.dm" +#include "code\modules\client\preference_setup\records\02_public_record.dm" +#include "code\modules\client\preference_setup\records\03_medical_record.dm" +#include "code\modules\client\preference_setup\records\04_security_record.dm" +#include "code\modules\client\preference_setup\records\05_general_record.dm" +#include "code\modules\client\preference_setup\records\06_memory.dm" +#include "code\modules\client\ui_styles\_helpers.dm" +#include "code\modules\client\ui_styles\_ui_style.dm" +#include "code\modules\client\ui_styles\_ui_style_states.dm" +#include "code\modules\client\ui_styles\_ui_tooltips.dm" +#include "code\modules\client\ui_styles\ui_style_subtypes.dm" #include "code\modules\clothing\_clothing.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing_accessories.dm" @@ -1822,6 +1969,7 @@ #include "code\modules\clothing\under\accessories\stethoscope.dm" #include "code\modules\clothing\under\accessories\storage.dm" #include "code\modules\clothing\under\accessories\ties.dm" +#include "code\modules\clothing\under\accessories\vitals_sensor.dm" #include "code\modules\clothing\under\jobs\civilian.dm" #include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\medsci.dm" @@ -1834,6 +1982,7 @@ #include "code\modules\codex\codex_mob.dm" #include "code\modules\codex\codex_scannable.dm" #include "code\modules\codex\categories\_category.dm" +#include "code\modules\codex\categories\_materials.dm" #include "code\modules\codex\categories\category_categories.dm" #include "code\modules\codex\categories\category_cocktails.dm" #include "code\modules\codex\categories\category_cultures.dm" @@ -1856,6 +2005,7 @@ #include "code\modules\codex\entries\clothing.dm" #include "code\modules\codex\entries\codex.dm" #include "code\modules\codex\entries\engineering.dm" +#include "code\modules\codex\entries\guides.dm" #include "code\modules\codex\entries\guns.dm" #include "code\modules\codex\entries\jukebox.dm" #include "code\modules\codex\entries\machinery.dm" @@ -1884,6 +2034,25 @@ #include "code\modules\crafting\crafting_recipes\improvised_crafting\crafting_butterflyknife.dm" #include "code\modules\crafting\crafting_recipes\improvised_crafting\crafting_crossbow.dm" #include "code\modules\crafting\crafting_recipes\improvised_crafting\crafting_spear_prod.dm" +#include "code\modules\crafting\stack_recipes\_recipe.dm" +#include "code\modules\crafting\stack_recipes\_recipe_getter.dm" +#include "code\modules\crafting\stack_recipes\recipe_structures.dm" +#include "code\modules\crafting\stack_recipes\recipes_bricks.dm" +#include "code\modules\crafting\stack_recipes\recipes_cardstock.dm" +#include "code\modules\crafting\stack_recipes\recipes_coins.dm" +#include "code\modules\crafting\stack_recipes\recipes_hardness.dm" +#include "code\modules\crafting\stack_recipes\recipes_hardness_integrity.dm" +#include "code\modules\crafting\stack_recipes\recipes_items.dm" +#include "code\modules\crafting\stack_recipes\recipes_logs.dm" +#include "code\modules\crafting\stack_recipes\recipes_opacity.dm" +#include "code\modules\crafting\stack_recipes\recipes_panels.dm" +#include "code\modules\crafting\stack_recipes\recipes_planks.dm" +#include "code\modules\crafting\stack_recipes\recipes_reinforced.dm" +#include "code\modules\crafting\stack_recipes\recipes_stacks.dm" +#include "code\modules\crafting\stack_recipes\recipes_steel.dm" +#include "code\modules\crafting\stack_recipes\recipes_struts.dm" +#include "code\modules\crafting\stack_recipes\recipes_textiles.dm" +#include "code\modules\crafting\stack_recipes\recipes_turfs.dm" #include "code\modules\culture_descriptor\_culture.dm" #include "code\modules\culture_descriptor\culture\_culture.dm" #include "code\modules\culture_descriptor\culture\cultures_hidden.dm" @@ -1946,11 +2115,10 @@ #include "code\modules\emotes\emote_define.dm" #include "code\modules\emotes\emote_mob.dm" #include "code\modules\emotes\definitions\_mob.dm" -#include "code\modules\emotes\definitions\_species.dm" #include "code\modules\emotes\definitions\audible.dm" #include "code\modules\emotes\definitions\exertion.dm" -#include "code\modules\emotes\definitions\human.dm" #include "code\modules\emotes\definitions\synthetics.dm" +#include "code\modules\emotes\definitions\tail.dm" #include "code\modules\emotes\definitions\visible.dm" #include "code\modules\error_handler\error_handler.dm" #include "code\modules\error_handler\error_reporting.dm" @@ -2069,9 +2237,18 @@ #include "code\modules\fabrication\designs\textile\protective.dm" #include "code\modules\fabrication\designs\textile\space.dm" #include "code\modules\fabrication\designs\textile\storage.dm" -#include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\TextFilters.dm" +#include "code\modules\fluids\_fluid.dm" +#include "code\modules\fluids\fluid_flood.dm" +#include "code\modules\fluids\fluid_mapped.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\food\plates\_plate.dm" +#include "code\modules\food\utensils\_utensil.dm" +#include "code\modules\food\utensils\utensil_chopsticks.dm" +#include "code\modules\food\utensils\utensil_fork.dm" +#include "code\modules\food\utensils\utensil_hybrid.dm" +#include "code\modules\food\utensils\utensil_knife.dm" +#include "code\modules\food\utensils\utensil_spoon.dm" #include "code\modules\games\boardgame.dm" #include "code\modules\games\cardemon.dm" #include "code\modules\games\cards.dm" @@ -2092,6 +2269,19 @@ #include "code\modules\goals\definitions\personal_achievement.dm" #include "code\modules\goals\definitions\personal_achievement_movement.dm" #include "code\modules\goals\definitions\personal_achievement_specific_object.dm" +#include "code\modules\grooming\_grooming.dm" +#include "code\modules\grooming\grooming_comb.dm" +#include "code\modules\grooming\grooming_file.dm" +#include "code\modules\grooming\grooming_hairbrush.dm" +#include "code\modules\hallucinations\_hallucination.dm" +#include "code\modules\hallucinations\hallucination_fakeattack.dm" +#include "code\modules\hallucinations\hallucination_gunfire.dm" +#include "code\modules\hallucinations\hallucination_mirage.dm" +#include "code\modules\hallucinations\hallucination_skitters.dm" +#include "code\modules\hallucinations\hallucination_sound.dm" +#include "code\modules\hallucinations\hallucination_spiderbabies.dm" +#include "code\modules\hallucinations\hallucination_talking.dm" +#include "code\modules\hallucinations\hallucination_telepathy.dm" #include "code\modules\holidays\_holiday.dm" #include "code\modules\holidays\holiday_hook.dm" #include "code\modules\holidays\holiday_name.dm" @@ -2229,18 +2419,11 @@ #include "code\modules\maps\template_types\random_exoplanet\planet_types\snow.dm" #include "code\modules\maps\template_types\random_exoplanet\planet_types\volcanic.dm" #include "code\modules\materials\_materials.dm" -#include "code\modules\materials\_stack_recipe.dm" #include "code\modules\materials\material_armor.dm" -#include "code\modules\materials\material_recipes.dm" #include "code\modules\materials\material_sheets.dm" #include "code\modules\materials\material_sheets_mapping.dm" #include "code\modules\materials\material_synth.dm" #include "code\modules\materials\materials_ore.dm" -#include "code\modules\materials\recipes_furniture.dm" -#include "code\modules\materials\recipes_items.dm" -#include "code\modules\materials\recipes_stacks.dm" -#include "code\modules\materials\recipes_storage.dm" -#include "code\modules\materials\recipes_structures.dm" #include "code\modules\materials\definitions\gasses\_mat_gas.dm" #include "code\modules\materials\definitions\gasses\material_gas_alien.dm" #include "code\modules\materials\definitions\gasses\material_gas_mundane.dm" @@ -2294,7 +2477,6 @@ #include "code\modules\mechs\equipment\medical.dm" #include "code\modules\mechs\equipment\utility.dm" #include "code\modules\mechs\interface\_interface.dm" -#include "code\modules\mechs\interface\screen_objects.dm" #include "code\modules\mechs\premade\_premade.dm" #include "code\modules\mechs\premade\combat.dm" #include "code\modules\mechs\premade\exploration.dm" @@ -2328,12 +2510,16 @@ #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm" #include "code\modules\mob\mob.dm" +#include "code\modules\mob\mob_blood.dm" +#include "code\modules\mob\mob_damage.dm" #include "code\modules\mob\mob_defines.dm" +#include "code\modules\mob\mob_eating.dm" #include "code\modules\mob\mob_grabs.dm" #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_layering.dm" #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_status.dm" +#include "code\modules\mob\mob_temperature.dm" #include "code\modules\mob\mob_transformation_simple.dm" #include "code\modules\mob\say.dm" #include "code\modules\mob\stripping.dm" @@ -2348,6 +2534,7 @@ #include "code\modules\mob\grab\normal\norm_neck.dm" #include "code\modules\mob\grab\normal\norm_passive.dm" #include "code\modules\mob\grab\normal\norm_struggle.dm" +#include "code\modules\mob\grab\simple\simple_control.dm" #include "code\modules\mob\grab\simple\simple_passive.dm" #include "code\modules\mob\language\animal.dm" #include "code\modules\mob\language\generic.dm" @@ -2366,12 +2553,17 @@ #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_appearance.dm" #include "code\modules\mob\living\living_attackhand.dm" +#include "code\modules\mob\living\living_blood.dm" #include "code\modules\mob\living\living_bodytemp.dm" #include "code\modules\mob\living\living_breath.dm" +#include "code\modules\mob\living\living_damage.dm" #include "code\modules\mob\living\living_defense.dm" #include "code\modules\mob\living\living_defines.dm" +#include "code\modules\mob\living\living_dreams.dm" #include "code\modules\mob\living\living_grabs.dm" +#include "code\modules\mob\living\living_hallucinations.dm" #include "code\modules\mob\living\living_maneuvers.dm" #include "code\modules\mob\living\living_organs.dm" #include "code\modules\mob\living\living_powers.dm" @@ -2382,7 +2574,6 @@ #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\stasis.dm" #include "code\modules\mob\living\stress.dm" -#include "code\modules\mob\living\update_icon.dm" #include "code\modules\mob\living\bot\bot.dm" #include "code\modules\mob\living\bot\cleanbot.dm" #include "code\modules\mob\living\bot\ed209bot.dm" @@ -2392,18 +2583,20 @@ #include "code\modules\mob\living\bot\mulebot.dm" #include "code\modules\mob\living\bot\remotebot.dm" #include "code\modules\mob\living\bot\secbot.dm" +#include "code\modules\mob\living\brain\brain.dm" +#include "code\modules\mob\living\brain\death.dm" +#include "code\modules\mob\living\brain\say.dm" #include "code\modules\mob\living\carbon\breathe.dm" #include "code\modules\mob\living\carbon\carbon.dm" #include "code\modules\mob\living\carbon\carbon_defense.dm" #include "code\modules\mob\living\carbon\carbon_defines.dm" +#include "code\modules\mob\living\carbon\carbon_eating.dm" #include "code\modules\mob\living\carbon\carbon_grabs.dm" #include "code\modules\mob\living\carbon\carbon_organs.dm" #include "code\modules\mob\living\carbon\carbon_powers.dm" #include "code\modules\mob\living\carbon\damage_procs.dm" #include "code\modules\mob\living\carbon\give.dm" -#include "code\modules\mob\living\carbon\hallucinations.dm" #include "code\modules\mob\living\carbon\internals.dm" -#include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\resist.dm" #include "code\modules\mob\living\carbon\taste.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" @@ -2412,18 +2605,13 @@ #include "code\modules\mob\living\carbon\alien\death.dm" #include "code\modules\mob\living\carbon\alien\life.dm" #include "code\modules\mob\living\carbon\alien\say.dm" -#include "code\modules\mob\living\carbon\brain\brain.dm" -#include "code\modules\mob\living\carbon\brain\death.dm" -#include "code\modules\mob\living\carbon\brain\life.dm" -#include "code\modules\mob\living\carbon\brain\login.dm" -#include "code\modules\mob\living\carbon\brain\MMI.dm" -#include "code\modules\mob\living\carbon\brain\robot.dm" -#include "code\modules\mob\living\carbon\brain\say.dm" -#include "code\modules\mob\living\carbon\human\appearance.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\examine.dm" #include "code\modules\mob\living\carbon\human\human.dm" +#include "code\modules\mob\living\carbon\human\human_appearance.dm" +#include "code\modules\mob\living\carbon\human\human_appearance_head.dm" #include "code\modules\mob\living\carbon\human\human_attackhand.dm" +#include "code\modules\mob\living\carbon\human\human_blood.dm" #include "code\modules\mob\living\carbon\human\human_damage.dm" #include "code\modules\mob\living\carbon\human\human_defense.dm" #include "code\modules\mob\living\carbon\human\human_defines.dm" @@ -2433,12 +2621,12 @@ #include "code\modules\mob\living\carbon\human\human_maneuvers.dm" #include "code\modules\mob\living\carbon\human\human_movement.dm" #include "code\modules\mob\living\carbon\human\human_organs.dm" +#include "code\modules\mob\living\carbon\human\human_persistence.dm" #include "code\modules\mob\living\carbon\human\human_powers.dm" #include "code\modules\mob\living\carbon\human\human_skin.dm" #include "code\modules\mob\living\carbon\human\human_species.dm" #include "code\modules\mob\living\carbon\human\human_status.dm" #include "code\modules\mob\living\carbon\human\human_verbs.dm" -#include "code\modules\mob\living\carbon\human\inventory.dm" #include "code\modules\mob\living\carbon\human\life.dm" #include "code\modules\mob\living\carbon\human\login.dm" #include "code\modules\mob\living\carbon\human\logout.dm" @@ -2568,6 +2756,7 @@ #include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\simple_animal_codex.dm" +#include "code\modules\mob\living\simple_animal\simple_animal_damage.dm" #include "code\modules\mob\living\simple_animal\aquatic\_aquatic.dm" #include "code\modules\mob\living\simple_animal\aquatic\_aquatic_hostile.dm" #include "code\modules\mob\living\simple_animal\aquatic\_aquatic_retaliate.dm" @@ -2781,6 +2970,7 @@ #include "code\modules\modular_computers\networking\finance\network_finance.dm" #include "code\modules\modular_computers\networking\finance\network_pos.dm" #include "code\modules\modular_computers\networking\machinery\_network_machine.dm" +#include "code\modules\modular_computers\networking\machinery\_network_machine_persistence.dm" #include "code\modules\modular_computers\networking\machinery\acl.dm" #include "code\modules\modular_computers\networking\machinery\bank.dm" #include "code\modules\modular_computers\networking\machinery\mainframe.dm" @@ -2841,8 +3031,6 @@ #include "code\modules\nano\modules\law_manager.dm" #include "code\modules\nano\modules\nano_module.dm" #include "code\modules\organs\_organ_setup.dm" -#include "code\modules\organs\blood.dm" -#include "code\modules\organs\blood_types.dm" #include "code\modules\organs\organ.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\ailments\_ailment.dm" @@ -2871,13 +3059,14 @@ #include "code\modules\organs\internal\_internal.dm" #include "code\modules\organs\internal\appendix.dm" #include "code\modules\organs\internal\brain.dm" +#include "code\modules\organs\internal\brain_computer.dm" +#include "code\modules\organs\internal\cell.dm" #include "code\modules\organs\internal\eyes.dm" #include "code\modules\organs\internal\heart.dm" #include "code\modules\organs\internal\insectoid.dm" #include "code\modules\organs\internal\kidneys.dm" #include "code\modules\organs\internal\liver.dm" #include "code\modules\organs\internal\lungs.dm" -#include "code\modules\organs\internal\posibrain.dm" #include "code\modules\organs\internal\stomach.dm" #include "code\modules\organs\internal\voice.dm" #include "code\modules\organs\internal\species\golem.dm" @@ -2950,6 +3139,7 @@ #include "code\modules\paperwork\toner_cartridge.dm" #include "code\modules\paperwork\pen\chameleon_pen.dm" #include "code\modules\paperwork\pen\crayon.dm" +#include "code\modules\paperwork\pen\crayon_edibility.dm" #include "code\modules\paperwork\pen\fancy.dm" #include "code\modules\paperwork\pen\multi_pen.dm" #include "code\modules\paperwork\pen\pen.dm" @@ -3062,6 +3252,7 @@ #include "code\modules\projectiles\guns\projectile\dartgun.dm" #include "code\modules\projectiles\guns\projectile\flaregun.dm" #include "code\modules\projectiles\guns\projectile\lasvolver.dm" +#include "code\modules\projectiles\guns\projectile\lmg.dm" #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\random_pistol.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" @@ -3114,6 +3305,7 @@ #include "code\modules\random_map\mazes\maze.dm" #include "code\modules\random_map\mazes\maze_cell.dm" #include "code\modules\random_map\noise\desert.dm" +#include "code\modules\random_map\noise\forage.dm" #include "code\modules\random_map\noise\magma.dm" #include "code\modules\random_map\noise\noise.dm" #include "code\modules\random_map\noise\ore.dm" @@ -3126,6 +3318,7 @@ #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Metabolism.dm" #include "code\modules\reagents\cocktails.dm" +#include "code\modules\reagents\reagent_container_edibility.dm" #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\reagent_dispenser.dm" #include "code\modules\reagents\chems\chems_blood.dm" @@ -3154,6 +3347,7 @@ #include "code\modules\reagents\reactions\reaction_alcohol.dm" #include "code\modules\reagents\reactions\reaction_alloys.dm" #include "code\modules\reagents\reactions\reaction_cafe.dm" +#include "code\modules\reagents\reactions\reaction_compounds.dm" #include "code\modules\reagents\reactions\reaction_drinks.dm" #include "code\modules\reagents\reactions\reaction_drinks_hidden.dm" #include "code\modules\reagents\reactions\reaction_drugs.dm" @@ -3169,10 +3363,13 @@ #include "code\modules\reagents\reagent_containers\drinks.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\food.dm" +#include "code\modules\reagents\reagent_containers\food_edibility.dm" #include "code\modules\reagents\reagent_containers\glass.dm" +#include "code\modules\reagents\reagent_containers\glass_edibility.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" #include "code\modules\reagents\reagent_containers\inhaler.dm" #include "code\modules\reagents\reagent_containers\pill.dm" +#include "code\modules\reagents\reagent_containers\pill_edibility.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" #include "code\modules\reagents\reagent_containers\drinkingglass\drinkingglass.dm" @@ -3189,6 +3386,7 @@ #include "code\modules\reagents\reagent_containers\food\baked_goods.dm" #include "code\modules\reagents\reagent_containers\food\bread.dm" #include "code\modules\reagents\reagent_containers\food\burgers.dm" +#include "code\modules\reagents\reagent_containers\food\can_edibility.dm" #include "code\modules\reagents\reagent_containers\food\canned.dm" #include "code\modules\reagents\reagent_containers\food\dough.dm" #include "code\modules\reagents\reagent_containers\food\eggs.dm" @@ -3214,7 +3412,12 @@ #include "code\modules\reagents\reagent_containers\food\sliceable\cheeses.dm" #include "code\modules\reagents\reagent_containers\food\sliceable\loaves.dm" #include "code\modules\reagents\reagent_containers\food\sliceable\misc_slices.dm" -#include "code\modules\reagents\reagent_containers\food\sliceable\pizza.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\_pizza.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\pizza_box.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\pizza_margherita.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\pizza_meat.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\pizza_mushroom.dm" +#include "code\modules\reagents\reagent_containers\food\sliceable\pizza\pizza_vegetable.dm" #include "code\modules\reagents\reagent_containers\glass\bottle.dm" #include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm" #include "code\modules\reagents\storage\pill_bottle.dm" @@ -3371,9 +3574,13 @@ #include "code\modules\spells\targeted\projectile\projectile.dm" #include "code\modules\spells\targeted\projectile\stuncuff.dm" #include "code\modules\sprite_accessories\_accessory.dm" -#include "code\modules\sprite_accessories\_accessory_facial.dm" -#include "code\modules\sprite_accessories\_accessory_hair.dm" -#include "code\modules\sprite_accessories\_accessory_markings.dm" +#include "code\modules\sprite_accessories\_accessory_category.dm" +#include "code\modules\sprite_accessories\accessory_cosmetics.dm" +#include "code\modules\sprite_accessories\accessory_facial.dm" +#include "code\modules\sprite_accessories\accessory_frills.dm" +#include "code\modules\sprite_accessories\accessory_hair.dm" +#include "code\modules\sprite_accessories\accessory_horns.dm" +#include "code\modules\sprite_accessories\accessory_markings.dm" #include "code\modules\status_conditions\_status.dm" #include "code\modules\status_conditions\_status_markers.dm" #include "code\modules\status_conditions\status_counters_simple.dm" @@ -3431,15 +3638,26 @@ #include "code\modules\synthesized_instruments\real_instruments\Synthesizer\synthesizer.dm" #include "code\modules\synthesized_instruments\real_instruments\Trumpet\trumpet.dm" #include "code\modules\synthesized_instruments\real_instruments\Violin\violin.dm" -#include "code\modules\tools\_tool_defines.dm" -#include "code\modules\tools\tool_archetype.dm" -#include "code\modules\tools\tool_archetype_definition_pen.dm" -#include "code\modules\tools\tool_archetype_definitions.dm" -#include "code\modules\tools\tool_archetype_definitions_surgery.dm" -#include "code\modules\tools\tool_archetype_definitions_welder.dm" -#include "code\modules\tools\tool_extension.dm" -#include "code\modules\tools\tool_extension_variable.dm" -#include "code\modules\tools\tool_item.dm" +#include "code\modules\tools\tool.dm" +#include "code\modules\tools\archetypes\_tool_defines.dm" +#include "code\modules\tools\archetypes\tool_archetype.dm" +#include "code\modules\tools\archetypes\tool_archetype_definition_pen.dm" +#include "code\modules\tools\archetypes\tool_archetype_definitions.dm" +#include "code\modules\tools\archetypes\tool_archetype_definitions_surgery.dm" +#include "code\modules\tools\archetypes\tool_archetype_definitions_welder.dm" +#include "code\modules\tools\archetypes\tool_extension.dm" +#include "code\modules\tools\archetypes\tool_extension_variable.dm" +#include "code\modules\tools\archetypes\tool_item.dm" +#include "code\modules\tools\components\_component.dm" +#include "code\modules\tools\components\handle.dm" +#include "code\modules\tools\components\head.dm" +#include "code\modules\tools\components\recipes.dm" +#include "code\modules\tools\subtypes\drills.dm" +#include "code\modules\tools\subtypes\hammers.dm" +#include "code\modules\tools\subtypes\pickaxes.dm" +#include "code\modules\tools\subtypes\power_tools.dm" +#include "code\modules\tools\subtypes\shovel.dm" +#include "code\modules\tools\subtypes\xenoarchaeology_picks.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\turbolift\turbolift.dm" #include "code\modules\turbolift\turbolift_areas.dm" @@ -3470,10 +3688,37 @@ #include "code\modules\webhooks\webhook_ahelp2discord.dm" #include "code\modules\webhooks\webhook_custom_event.dm" #include "code\modules\webhooks\webhook_elevator_fall.dm" +#include "code\modules\webhooks\webhook_fax.dm" #include "code\modules\webhooks\webhook_roundend.dm" #include "code\modules\webhooks\webhook_roundprep.dm" #include "code\modules\webhooks\webhook_roundstart.dm" #include "code\modules\webhooks\webhook_submap.dm" +#include "code\modules\world_save\_persistence.dm" +#include "code\modules\world_save\load_cache.dm" +#include "code\modules\world_save\save_testing.dm" +#include "code\modules\world_save\saved_vars.dm" +#include "code\modules\world_save\saved_vars\matrix.dm" +#include "code\modules\world_save\saved_vars\saved_icon_states.dm" +#include "code\modules\world_save\saved_vars\saved_instances.dm" +#include "code\modules\world_save\saved_vars\saved_misc.dm" +#include "code\modules\world_save\saved_vars\saved_overrides.dm" +#include "code\modules\world_save\saved_vars\saved_skipped.dm" +#include "code\modules\world_save\serializers\_serializer.dm" +#include "code\modules\world_save\serializers\json_serializer.dm" +#include "code\modules\world_save\serializers\one_off_serializer.dm" +#include "code\modules\world_save\serializers\sql_serializer.dm" +#include "code\modules\world_save\serializers\sql_serializer_db.dm" +#include "code\modules\world_save\wrappers\_late_wrapper.dm" +#include "code\modules\world_save\wrappers\_wrapper.dm" +#include "code\modules\world_save\wrappers\_wrapper_holder.dm" +#include "code\modules\world_save\wrappers\area_wrapper.dm" +#include "code\modules\world_save\wrappers\channel_wrapper.dm" +#include "code\modules\world_save\wrappers\escrow_holder.dm" +#include "code\modules\world_save\wrappers\image_wrapper.dm" +#include "code\modules\world_save\wrappers\map_data_wrapper.dm" +#include "code\modules\world_save\wrappers\weakref_wrapper.dm" +#include "code\modules\world_save\wrappers\extensions\_extension_wrapper.dm" +#include "code\modules\world_save\wrappers\extensions\labels_wrapper.dm" #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\artifacts\artifact.dm" #include "code\modules\xenoarcheaology\artifacts\artifact_appearance.dm" @@ -3538,7 +3783,6 @@ #include "code\modules\xenoarcheaology\tools\depth_scanner.dm" #include "code\modules\xenoarcheaology\tools\equipment.dm" #include "code\modules\xenoarcheaology\tools\misc.dm" -#include "code\modules\xenoarcheaology\tools\picks.dm" #include "code\modules\xenoarcheaology\tools\tools.dm" #include "code\modules\xgm\xgm_gas_mixture.dm" #include "code\modules\ZAS\Airflow.dm" diff --git a/nebula.dmm-pal b/nebula.dmm-pal new file mode 100644 index 00000000000..b95cd18c249 --- /dev/null +++ b/nebula.dmm-pal @@ -0,0 +1 @@ +[Palette] diff --git a/scripts/dm.sh b/scripts/dm.sh index cb92e2b9632..77260bc003f 100755 --- a/scripts/dm.sh +++ b/scripts/dm.sh @@ -17,11 +17,11 @@ if [[ $dmepath == "" ]]; then exit 1 fi -if [[ -a $dmepath.mdme ]]; then - rm $dmepath.mdme +if [[ -a $dmepath.m.dme ]]; then + rm $dmepath.m.dme fi -cp $dmepath.dme $dmepath.mdme +cp $dmepath.dme $dmepath.m.dme if [[ $? != 0 ]]; then echo "Failed to make modified dme, aborting." exit 2 @@ -30,12 +30,12 @@ fi for var; do arg=$(echo $var | sed -r 's/^.{2}//') if [[ $var == -D* ]]; then - sed -i '1s!^!#define '$arg'\n!' $dmepath.mdme + sed -i '1s!^!#define '$arg'\n!' $dmepath.m.dme elif [[ $var == -I* ]]; then - sed -i 's!// BEGIN_INCLUDE!// BEGIN_INCLUDE\n#include "'$arg'"!' $dmepath.mdme + sed -i 's!// BEGIN_INCLUDE!// BEGIN_INCLUDE\n#include "'$arg'"!' $dmepath.m.dme elif [[ $var == -M* ]]; then - sed -i '1s/^/#define MAP_OVERRIDE\n/' $dmepath.mdme - sed -i 's!#include "maps\\_map_include.dm"!#include "maps\\'$arg'\\'$arg'.dm"!' $dmepath.mdme + sed -i '1s/^/#define MAP_OVERRIDE\n/' $dmepath.m.dme + sed -i 's!#include "maps\\_map_include.dm"!#include "maps\\'$arg'\\'$arg'.dm"!' $dmepath.m.dme fi done @@ -46,12 +46,12 @@ if [[ $DM == "" ]]; then exit 3 fi -"$DM" $dmepath.mdme | tee build_log.txt +"$DM" $dmepath.m.dme | tee build_log.txt retval=$? -[[ -e $dmepath.mdme.dmb ]] && mv $dmepath.mdme.dmb $dmepath.dmb -[[ -e $dmepath.mdme.rsc ]] && mv $dmepath.mdme.rsc $dmepath.rsc +[[ -e $dmepath.m.dmb ]] && mv $dmepath.m.dmb $dmepath.dmb +[[ -e $dmepath.m.rsc ]] && mv $dmepath.m.rsc $dmepath.rsc -rm $dmepath.mdme +rm $dmepath.m.dme exit $retval diff --git a/scripts/server.sh b/scripts/server.sh index 8388b0dd13e..d585b64ad21 100755 --- a/scripts/server.sh +++ b/scripts/server.sh @@ -23,8 +23,6 @@ fi touch server_running trap "cleanup" EXIT -exec 5>&1 # duplicate fd 5 to fd 1 (stdout); this allows us to echo the log during compilation, but also capture it for saving to logs in the case of a failure - [[ -e stopserver ]] && rm stopserver while [[ ! -e stopserver ]]; do MAP="$(cat use_map || echo "example")" @@ -46,11 +44,11 @@ while [[ ! -e stopserver ]]; do # Compile echo "Compiling..." - DMoutput="$(./scripts/dm.sh $EXTRA_DM_SH_ARGS -M$MAP $DME.dme | tee /dev/fd/5)" # duplicate output to fd 5 (which is redirected to stdout at the top of this script) + DMoutput="$(./scripts/dm.sh $EXTRA_DM_SH_ARGS -M$MAP $DME.dme | tee /dev/fd/2)" # duplicate output to fd 2 for logging purposes DMret=$? cd - # from $GITDIR if [[ $DMret != 0 ]]; then - d="$(date '+%X %x')" + d="$(date '+%Y-%m-%d_%H-%M-%S')" echo "Compilation failed; saving log to 'data/logs/compile_failure_$d.txt'!" echo $DMoutput >> "data/logs/compile_failure_$d.txt" UPDATE_FAIL=1 # this is probably fatal diff --git a/sound/foley/wooden_drop.ogg b/sound/foley/wooden_drop.ogg new file mode 100644 index 00000000000..dd6c4e7c530 Binary files /dev/null and b/sound/foley/wooden_drop.ogg differ diff --git a/test/check-paths.sh b/test/check-paths.sh index 6f4994587fd..0dc38262088 100755 --- a/test/check-paths.sh +++ b/test/check-paths.sh @@ -24,7 +24,7 @@ exactly() { # exactly N name search [mode] [filter] # With the potential exception of << if you increase any of these numbers you're probably doing it wrong # Additional exception August 2020: \b is a regex symbol as well as a BYOND macro. exactly 1 "escapes" '\\\\(red|blue|green|black|b|i[^mc])' -exactly 3 "Del()s" '\WDel\(' +exactly 4 "Del()s" '\WDel\(' exactly 2 "/atom text paths" '"/atom' exactly 2 "/area text paths" '"/area' exactly 5 "/datum text paths" '"/datum' @@ -32,7 +32,7 @@ exactly 2 "/mob text paths" '"/mob' exactly 6 "/obj text paths" '"/obj' exactly 8 "/turf text paths" '"/turf' exactly 1 "world<< uses" 'world<<|world[[:space:]]<<' -exactly 93 "'in world' uses" 'in world' +exactly 95 "'in world' uses" 'in world' exactly 1 "world.log<< uses" 'world.log<<|world.log[[:space:]]<<' exactly 18 "<< uses" '(?> uses" '>>(?!>)' -P @@ -40,7 +40,7 @@ exactly 0 "incorrect indentations" '^( {4,})' -P exactly 48 "text2path uses" 'text2path' exactly 5 "update_icon() override" '/update_icon\((.*)\)' -P exactly 0 "goto uses" 'goto ' -exactly 7 "atom/New uses" '^/(obj|atom|area|mob|turf).*/New\(' +exactly 6 "atom/New uses" '^/(obj|atom|area|mob|turf).*/New\(' exactly 1 "decl/New uses" '^/decl.*/New\(' exactly 0 "tag uses" '\stag = ' -P '**/*.dmm' exactly 3 "unmarked globally scoped variables" -P '^(/|)var/(?!global)' @@ -50,8 +50,8 @@ exactly 1 "direct usage of decls_repository.get_decl()" 'decls_repository\.get_d exactly 21 "direct loc set" -P '(\t|;|\.)loc\s*=(?!=)' exactly 0 "magic number mouse opacity set" -P 'mouse_opacity\s*=\s*[0-2]' exactly 1 "magic number density set" -P '\bdensity\s*=\s*[01]' -exactly 0 "magic number anchored set" -P 'anchored\s*=\s*[01]' -exactly 7 "magic number opacity set" -P 'opacity\s*=\s*[01]' +exactly 0 "magic number anchored set" -P '\banchored\s*=\s*[01]' +exactly 7 "magic number opacity set" -P '\bopacity\s*=\s*[01]' # With the potential exception of << if you increase any of these numbers you're probably doing it wrong diff --git a/tools/ReplicateSaves/replicate_saves.py b/tools/ReplicateSaves/replicate_saves.py index b935edab597..fd97ec57aec 100644 --- a/tools/ReplicateSaves/replicate_saves.py +++ b/tools/ReplicateSaves/replicate_saves.py @@ -51,7 +51,7 @@ def main(): # Find existing saves for the target map, then replicate them to all our target map dirs. # If they exist already, don't copy over, just move on. - filename_regex = r"character_([a-zA-Z_]+)_(\d+)\.json" + filename_regex = r"character_([a-zA-Z0-9_]+)_(\d+)\.json" print("Scanning saves in " + scrapedir + "...") save_slots_to_update = [] saves_to_replicate = [] diff --git a/tools/map_migrations/3558_lowercase_closets.txt b/tools/map_migrations/3558_lowercase_closets.txt new file mode 100644 index 00000000000..85ffc1aabd0 --- /dev/null +++ b/tools/map_migrations/3558_lowercase_closets.txt @@ -0,0 +1,2 @@ +/obj/structure/closet/secure_closet/CMO : /obj/structure/closet/secure_closet/cmo{@OLD} +/obj/structure/closet/secure_closet/RD : /obj/structure/closet/secure_closet/research_director{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/3560_central_atmos_computer.txt b/tools/map_migrations/3560_central_atmos_computer.txt new file mode 100644 index 00000000000..71179dbe712 --- /dev/null +++ b/tools/map_migrations/3560_central_atmos_computer.txt @@ -0,0 +1,2 @@ +/obj/machinery/computer/atmoscontrol/@SUBTYPES : /obj/machinery/computer/central_atmos/@SUBTYPES{@OLD} +/obj/item/stock_parts/circuitboard/atmoscontrol : /obj/item/stock_parts/circuitboard/central_atmos{@OLD} diff --git a/tools/map_migrations/3576_wallobj_migration.txt b/tools/map_migrations/3576_wallobj_migration.txt new file mode 100644 index 00000000000..1f381b8483f --- /dev/null +++ b/tools/map_migrations/3576_wallobj_migration.txt @@ -0,0 +1,33 @@ +# FIX WALLOBJ FACING DIRS +/obj/item/radio/intercom/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD {@OLD;pixel_x=-22;dir=4} +/obj/item/radio/intercom/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD {@OLD;pixel_x=22;dir=8} +/obj/item/radio/intercom/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD {@OLD;pixel_y=-30;dir=1} +/obj/item/radio/intercom/@SUBTYPES {pixel_x=@UNSET;pixel_y=@POSITIVE} : @OLD {@OLD;pixel_y=20;dir=@SKIP} +/obj/structure/extinguisher_cabinet {pixel_x=@POSITIVE;pixel_y=@UNSET} : @OLD {@OLD;pixel_x=29;dir=8} +/obj/structure/extinguisher_cabinet {pixel_x=@NEGATIVE;pixel_y=@UNSET} : @OLD {@OLD;pixel_x=-29;dir=4} +/obj/structure/extinguisher_cabinet {pixel_y=@POSITIVE;pixel_x=@UNSET} : @OLD {@OLD;pixel_y=29;dir=@SKIP} +/obj/structure/extinguisher_cabinet {pixel_y=@NEGATIVE;pixel_x=@UNSET} : @OLD {@OLD;pixel_y=-29;dir=1} +/obj/machinery/button/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/machinery/button/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/machinery/button/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/status_display/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=8} +/obj/machinery/status_display/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=4} +/obj/machinery/status_display/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/newscaster/@SUBTYPES {pixel_x=@NEGATIVE;pixel_y=@UNSET} : @OLD{@OLD;dir=8} +/obj/machinery/newscaster/@SUBTYPES {pixel_x=@POSITIVE;pixel_y=@UNSET} : @OLD{@OLD;dir=4} +/obj/machinery/newscaster/@SUBTYPES {pixel_y=@NEGATIVE;pixel_x=@UNSET} : @OLD{@OLD;dir=1} +/obj/structure/closet/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/structure/closet/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/structure/closet/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/machinery/recharger/wallcharger/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/embedded_controller/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/machinery/embedded_controller/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/machinery/embedded_controller/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/airlock_sensor/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/machinery/airlock_sensor/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/machinery/airlock_sensor/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} +/obj/machinery/light_switch/@SUBTYPES {pixel_y=@UNSET;pixel_x=@POSITIVE} : @OLD{@OLD;dir=8} +/obj/machinery/light_switch/@SUBTYPES {pixel_y=@UNSET;pixel_x=@NEGATIVE} : @OLD{@OLD;dir=4} +/obj/machinery/light_switch/@SUBTYPES {pixel_x=@UNSET;pixel_y=@NEGATIVE} : @OLD{@OLD;dir=1} \ No newline at end of file diff --git a/tools/map_migrations/3601_fancy_box.txt b/tools/map_migrations/3601_fancy_box.txt new file mode 100644 index 00000000000..2d40638ff2c --- /dev/null +++ b/tools/map_migrations/3601_fancy_box.txt @@ -0,0 +1,7 @@ +# REPATH /fancy to /box/fancy +/obj/item/storage/fancy/@SUBTYPES : /obj/item/storage/box/fancy/@SUBTYPES{@OLD} +# REPATH PIZZA SLICES +/obj/item/chems/food/slice/vegetablepizza/@SUBTYPES : /obj/item/chems/food/slice/pizza/vegetable/@SUBTYPES{@OLD} +/obj/item/chems/food/slice/meatpizza/@SUBTYPES : /obj/item/chems/food/slice/pizza/meat/@SUBTYPES{@OLD} +/obj/item/chems/food/slice/margherita/@SUBTYPES : /obj/item/chems/food/slice/pizza/margherita/@SUBTYPES{@OLD} +/obj/item/chems/food/slice/mushroompizza/@SUBTYPES : /obj/item/chems/food/slice/pizza/mushroom/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3634_openspace_merge.txt b/tools/map_migrations/3634_openspace_merge.txt new file mode 100644 index 00000000000..337671708f7 --- /dev/null +++ b/tools/map_migrations/3634_openspace_merge.txt @@ -0,0 +1,2 @@ +/turf/simulated/open/@SUBTYPES : /turf/open/@SUBTYPES{@OLD} +/turf/exterior/open/@SUBTYPES : /turf/open/@SUBTYPES{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/3670_stonewalls.txt b/tools/map_migrations/3670_stonewalls.txt new file mode 100644 index 00000000000..a9abf2f2143 --- /dev/null +++ b/tools/map_migrations/3670_stonewalls.txt @@ -0,0 +1,2 @@ +/turf/simulated/wall/sandstone/@SUBTYPES : /turf/simulated/wall/brick/sandstone/@SUBTYPES{@OLD} +/turf/simulated/wall/sandstonediamond/@SUBTYPES : /turf/simulated/wall/brick/sandstonediamond/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3681_plates.txt b/tools/map_migrations/3681_plates.txt new file mode 100644 index 00000000000..c339d5d1e5a --- /dev/null +++ b/tools/map_migrations/3681_plates.txt @@ -0,0 +1,3 @@ +# REPATH /trash/plate to /plate +/obj/item/trash/plate/@SUBTYPES : /obj/item/plate/@SUBTYPES{@OLD} +/obj/item/trash/tray/@SUBTYPES : /obj/item/plate/tray/@SUBTYPES{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/3688_utensil.txt b/tools/map_migrations/3688_utensil.txt new file mode 100644 index 00000000000..ef09cf03e77 --- /dev/null +++ b/tools/map_migrations/3688_utensil.txt @@ -0,0 +1,3 @@ +/obj/item/kitchen/utensil/@SUBTYPES : /obj/item/utensil/@SUBTYPES{@OLD} +/obj/item/knife/table/primitive/@SUBTYPES : /obj/item/knife/primitive/@SUBTYPES{@OLD} +/obj/item/knife/table/@SUBTYPES : /obj/item/utensil/knife/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3710_fluid_landmarks.txt b/tools/map_migrations/3710_fluid_landmarks.txt new file mode 100644 index 00000000000..52d2f4a3ae4 --- /dev/null +++ b/tools/map_migrations/3710_fluid_landmarks.txt @@ -0,0 +1,2 @@ +# REPATH /obj/abstract/fluid_mapped TO /obj/abstract/landmark/mapped_fluid +/obj/abstract/fluid_mapped/@SUBTYPES : /obj/abstract/landmark/mapped_fluid/@SUBTYPES{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/3724_grooming.txt b/tools/map_migrations/3724_grooming.txt new file mode 100644 index 00000000000..1050c12fa9a --- /dev/null +++ b/tools/map_migrations/3724_grooming.txt @@ -0,0 +1,3 @@ +/obj/item/haircomb/random/@SUBTYPES : /obj/item/grooming/comb/colorable/random/@SUBTYPES{@OLD} +/obj/item/haircomb/brush/@SUBTYPES : /obj/item/grooming/brush/colorable/random/@SUBTYPES{@OLD} +/obj/item/haircomb/@SUBTYPES : /obj/item/grooming/comb/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3739_asteroid_turfs.txt b/tools/map_migrations/3739_asteroid_turfs.txt new file mode 100644 index 00000000000..b07509f8728 --- /dev/null +++ b/tools/map_migrations/3739_asteroid_turfs.txt @@ -0,0 +1,9 @@ +/turf/simulated/floor/airless/lava/@SUBTYPES : /turf/exterior/lava/@SUBTYPES{@OLD} +/turf/simulated/floor/ice/@SUBTYPES : /turf/exterior/ice/@SUBTYPES{@OLD} +/turf/simulated/floor/snow/@SUBTYPES : /turf/exterior/snow/@SUBTYPES{@OLD} +/turf/simulated/floor/airless/ceiling/@SUBTYPES : /turf/simulated/floor/airless/@SUBTYPES{@OLD} +/turf/simulated/floor/beach/sand/@SUBTYPES : /turf/exterior/sand/@SUBTYPES{@OLD} +/turf/simulated/floor/beach/sand/desert/@SUBTYPES : /turf/exterior/sand/@SUBTYPES{@OLD} +/turf/simulated/floor/beach/coastline/@SUBTYPES : /turf/exterior/water/@SUBTYPES{@OLD} +/turf/simulated/floor/beach/water/@SUBTYPES : /turf/exterior/water/@SUBTYPES{@OLD} +/turf/simulated/floor/beach/water/ocean/@SUBTYPES : /turf/exterior/water/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3745_exterior_water.txt b/tools/map_migrations/3745_exterior_water.txt new file mode 100644 index 00000000000..b5bdac438f2 --- /dev/null +++ b/tools/map_migrations/3745_exterior_water.txt @@ -0,0 +1,4 @@ +/turf/exterior/water/chlorine/@SUBTYPES : /turf/exterior/chlorine_sand/marsh/@SUBTYPES{@OLD} +/turf/exterior/water/tar/@SUBTYPES : /turf/exterior/shrouded/tar/@SUBTYPES{@OLD} +/turf/exterior/water/stomach/@SUBTYPES : /turf/exterior/meat/acid/@SUBTYPES{@OLD} +/turf/exterior/water/@SUBTYPES : /turf/exterior/sand/water/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3754_crafting_recipes.txt b/tools/map_migrations/3754_crafting_recipes.txt new file mode 100644 index 00000000000..cf27ac035a2 --- /dev/null +++ b/tools/map_migrations/3754_crafting_recipes.txt @@ -0,0 +1,4 @@ +/obj/item/stack/material/shiny/@SUBTYPES : /obj/item/stack/material/sheet/shiny/@SUBTYPES{@OLD} +/obj/item/stack/material/reinforced/@SUBTYPES : /obj/item/stack/material/sheet/reinforced/@SUBTYPES{@OLD} +/obj/structure/plasticflaps/@SUBTYPES : /obj/structure/flaps/@SUBTYPES{@OLD} +/obj/item/storage/bag/plastic/@SUBTYPES : /obj/item/storage/bag/flimsy/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/3763_pickaxe_hammer.txt b/tools/map_migrations/3763_pickaxe_hammer.txt new file mode 100644 index 00000000000..7085460837d --- /dev/null +++ b/tools/map_migrations/3763_pickaxe_hammer.txt @@ -0,0 +1,12 @@ +/obj/item/pickaxe/silver/@SUBTYPES : /obj/item/tool/pickaxe/titanium/@SUBTYPES{@OLD} +/obj/item/pickaxe/borgdrill/@SUBTYPES : /obj/item/tool/drill/advanced/@SUBTYPES{@OLD} +/obj/item/pickaxe/gold/@SUBTYPES : /obj/item/tool/pickaxe/plasteel/@SUBTYPES{@OLD} +/obj/item/pickaxe/jackhammer/@SUBTYPES : /obj/item/tool/hammer/jack/@SUBTYPES{@OLD} +/obj/item/pickaxe/drill/@SUBTYPES : /obj/item/tool/drill/@SUBTYPES{@OLD} +/obj/item/pickaxe/diamond/@SUBTYPES : /obj/item/tool/pickaxe/ocp/@SUBTYPES{@OLD} +/obj/item/pickaxe/diamonddrill/@SUBTYPES : /obj/item/tool/drill/diamond/@SUBTYPES{@OLD} +/obj/item/shovel/spade/@SUBTYPES : /obj/item/tool/spade/@SUBTYPES{@OLD} +/obj/item/shovel/@SUBTYPES : /obj/item/tool/shovel/@SUBTYPES{@OLD} +/obj/item/power_drill/@SUBTYPES : /obj/item/power_drill/@SUBTYPES{@OLD} +/obj/item/hydraulic_cutter/@SUBTYPES : /obj/item/tool/hydraulic_cutter/@SUBTYPES{@OLD} +/obj/item/pickaxe/@SUBTYPES : /obj/item/tool/pickaxe/@SUBTYPES{@OLD} diff --git a/tools/mapmerge2/update_paths.py b/tools/mapmerge2/update_paths.py index 8c3039d8798..618c16bb2e1 100644 --- a/tools/mapmerge2/update_paths.py +++ b/tools/mapmerge2/update_paths.py @@ -31,7 +31,7 @@ replacement_re = re.compile(r'\s*(?P[^{]*)\s*(\{(?P.*)\})?') #urgent todo: replace with actual parser, this is slow as janitor in crit -split_re = re.compile(r'((?:[A-Za-z0-9_\-$]+)\s*=\s*(?:"(?:.+?)"|[^";]*)|@OLD)') +split_re = re.compile(r'((?:[A-Za-z0-9_\-$]+)\s*=\s*(?:"(?:.+?)"|list\([^;]*\)|[^";]*)|@OLD)') def props_to_string(props): @@ -75,7 +75,7 @@ def update_path(dmm_data, replacement_string, verbose=False): old_path = old_path[:-len("/@SUBTYPES")] if verbose: print("Looking for subtypes of", old_path) - subtypes = r"(?:/\w+)*" + subtypes = r"(?P(?:/\w+)*)" replacement_pattern = re.compile(rf"(?P{re.escape(old_path)}{subtypes})\s*(:?{{(?P.*)}})?$") @@ -91,6 +91,22 @@ def replace_def(match): else: return [match.group(0)] else: + if old_path_props[filter_prop] == "@SET": + continue + if old_path_props[filter_prop] == "@NEGATIVE": + try: + if float(old_props[filter_prop]) < 0: + continue + return [match.group(0)] + except ValueError: + return [match.group(0)] + if old_path_props[filter_prop] == "@POSITIVE": + try: + if float(old_props[filter_prop]) > 0: + continue + return [match.group(0)] + except ValueError: + return [match.group(0)] if old_props[filter_prop] != old_path_props[filter_prop] or old_path_props[filter_prop] == "@UNSET": return [match.group(0)] #does not match current filter, skip the change. if verbose: diff --git a/~code/global_init.dm b/~code/global_init.dm index 3dee544e61a..00301af2ca2 100644 --- a/~code/global_init.dm +++ b/~code/global_init.dm @@ -14,7 +14,7 @@ var/global_init = new /datum/global_init() /datum/global_init/New() - load_configuration() + SSconfiguration.load_all_configuration() callHook("global_init") qdel(src) //we're done